Skip to content

[V0][V1][Core] Add outlines integration for V1, and update V0 integration. #15975

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 43 commits into
base: main
Choose a base branch
from

Conversation

unaidedelf8777
Copy link

@unaidedelf8777 unaidedelf8777 commented Apr 3, 2025

Adds outlines as a guided decoding backend for V1, and updates the integration for V0.

The aim of this is three fold:

  1. Remove the dependency on outlines, and only use outlines_core
  2. performance gains for V0 using the write_mask_into method on Guide to write a bitmask in-place for use in logits masking.
  3. outlines backend for V1

Because the dependency on outlines will be removed, support for grammar based decoding with the outlines backend will also be removed (CFG classes reside in the outlines package)

cc @aarnphm

Copy link

github-actions bot commented Apr 3, 2025

👋 Hi! Thank you for contributing to the vLLM project.

💬 Join our developer Slack at https://slack.vllm.ai to discuss your PR in #pr-reviews, coordinate on features in #feat- channels, or join special interest groups in #sig- channels.

Just a reminder: PRs would not trigger full CI run by default. Instead, it would only run fastcheck CI which starts running only a small and essential subset of CI tests to quickly catch errors. You can run other CI tests on top of those by going to your fastcheck build on Buildkite UI (linked in the PR checks section) and unblock them. If you do not have permission to unblock, ping simon-mo or khluu to add you in our Buildkite org.

Once the PR is approved and ready to go, your PR reviewer(s) can run CI to test the changes comprehensively before merging.

To run CI, PR reviewers can either: Add ready label to the PR or enable auto-merge.

🚀

@unaidedelf8777 unaidedelf8777 changed the title [V0][V1][Core] Add outlines integration for V1, and update V0 integration. [V0][V1][Core] Add outlines integration for V1, and update V0 integration. [DO NOT MERGE] Apr 3, 2025
@mergify mergify bot added the v1 label Apr 3, 2025
@unaidedelf8777 unaidedelf8777 marked this pull request as draft April 3, 2025 00:46
@unaidedelf8777 unaidedelf8777 changed the title [V0][V1][Core] Add outlines integration for V1, and update V0 integration. [DO NOT MERGE] [V0][V1][Core] Add outlines integration for V1, and update V0 integration. Apr 3, 2025
@unaidedelf8777
Copy link
Author

NOTE: Can't be merged until next version of outlines_core is released.

@russellb
Copy link
Member

russellb commented Apr 7, 2025

Thank you for the PR! I will review it this week.

Copy link
Collaborator

@aarnphm aarnphm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reviewed the v0 code path. One ask is to add tests for this for disabling cache path.

And we should update the requirements/common.txt to the lowest version of outlines-core supported.

@mergify mergify bot added tpu Related to Google TPUs ci/build and removed tpu Related to Google TPUs labels Apr 9, 2025
Copy link

mergify bot commented Apr 11, 2025

This pull request has merge conflicts that must be resolved before it can be
merged. Please rebase the PR, @unaidedelf8777.

https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork

@unaidedelf8777
Copy link
Author

@russellb @aarnphm All code is done. If you guys approve of it I’ll go ahead and clean up all the linter complaints, and then it should be ready.

Also outlines-core update has been pushed to pypi and pinned here (v0.2.9)

@unaidedelf8777 unaidedelf8777 marked this pull request as ready for review April 13, 2025 17:55
Copy link
Collaborator

@aarnphm aarnphm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

First round of review. A few things needs to be addressed here. but great progress so far.

Copy link

mergify bot commented Apr 18, 2025

This pull request has merge conflicts that must be resolved before it can be
merged. Please rebase the PR, @unaidedelf8777.

https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/syncing-a-fork

Comment on lines 42 to 43
reasoner=None,
vocab_size=32000)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you explain why all of the changes were needed to this file? I don't think it has changed a while, so I'm surprised to see changes needed for the V0 code we're trying to change as little as possible.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The old integration would silent fail in this test when an arbitrary sequence of token ids was passed in since it would just default to the initial state of the DFA when the sequence's prior state could not be found in the self._fsm_state defaultdict. In contrast the new version which uses the Guide object will error in this case as opposed to defaulting, so we need to make sure we are passing in sequences which have their sequential dependency (Guide has seen all tokens in the sequence prior to the most recent token) satisfied.

@russellb
Copy link
Member

russellb commented Jun 2, 2025

CI also needs to pass on here. If you think any of the failures aren't the fault of your PR, I have some notes here on what to do next: #18782

Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
@unaidedelf8777
Copy link
Author

@russellb the two failing tests seem to be un-related. Both concern parts of the codebase which have not been modified, and only started failing after I updated the base branch of the PR, leading me to believe it is an upstream issue. Further, on this CI run from last night roughly when I updated the base branch the same tests are failing.

Copy link
Member

@russellb russellb left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the updates. Can you add outlines testing to the V1 tests here?

https://github.com/vllm-project/vllm/blob/main/tests/v1/entrypoints/llm/test_struct_output_generate.py

Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
Signed-off-by: Nathan Hoos <thwackyy.y@gmail.com>
@unaidedelf8777
Copy link
Author

unaidedelf8777 commented Jun 22, 2025

@russellb sorry about the hold up, I had to go to Mexico for a family situation last week. V1 tests are added and passing. The failing speculative decoding and quantization tests are currently failing on main according to this ci run. The LoRA test which fails seems to be unrelated to anything modified here.

@aarnphm aarnphm requested a review from russellb June 23, 2025 19:54
Copy link
Collaborator

@aarnphm aarnphm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for all the hard work and perseverance! The CI failure is not relevant and will be fixed separately.

but still will wait for @russellb to take a look once he's back

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
ci/build ready ONLY add when PR is ready to merge/full CI is needed structured-output tool-calling v1
Projects
Status: In review
Status: No status
Development

Successfully merging this pull request may close these issues.

4 participants