Repository navigation
Conversation
This was referenced Nov 10, 2026
…p does Seed's scope start is now <seed:tool_call>\n, so the parse starts calls at the first line-broken scope anywhere in the reply, the grammar (also with ToolChoice.required) requires the line break, and the compact lazy trigger is gone. A later scope without the line break stays content.
leehack
added a commit
that referenced
this pull request
Nov 10, 2026
Owner
Author
|
Landed on main via batch integration PR #1895 (rebase merge, main |
Contributor
|
Chat app preview removed for |
This was referenced Nov 10, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
cd959bae9) ("Match llama.cpp (Recommended)"); an unknown tool and a missing required argument stay lenient and documented ("Keep lenient, document").<seed:tool_call>followed by\nanywhere in the reply, as llama.cpp does; text before it, including a<seed:tool_call>not followed by\n, is content. The tool-call grammar (auto andToolChoice.required) now requires"<seed:tool_call>\n", matching llama.cpp's"<seed:tool_call>\n" space, and the compact lazy trigger<seed:tool_call><function=is gone.XmlToolCallFormat.seedOss.scopeStartis now'<seed:tool_call>\n'(one Seed-only hunk in the sharedxml_tool_call_format.dart; no overlap with #1885's hunks), so the parse, stream gate and grammar share it. The handler's first-tag gate is removed.template-engine-internals.md, fixture notes, both changelog bullets.Refs #1542, #1531.
Production-readiness scope
<seed:tool_call><function=...(or a space/tab/CRLF after the tag) is content, not a call; a line-broken scope after such text or a compact scope is now found (708a852 returned no call; main returned the compact one too). A later scope without\nafter valid calls stays content after them (main returned it as a call; llama.cpp fails the reply). Unknown tools and missing arguments: rejected forToolDefinition.fromJsonSchematools, returned as calls otherwise; documented.\n); a first line-broken scope holding no valid call keeps the reply as content where llama.cpp errors; two calls withparallelToolCalls: falseare both returned where llama.cpp errors.Completeness checklist
PR type guidance
<seed:tool_call><function=that the parse discarded, soToolChoice.requiredcould end with 0 calls, and (B2) calls were decided by the first tag instead of the first line-broken scope. Root cause for both: Seed's scope start lacked the\nllama.cpp requires.Test Plan
dart run tool/prepare_workspace.dart(tree clean after)dart format --output=none --set-exit-if-changed .dart analyze: no issuesdart run tool/testing/check_platform_boundaries.dartdart test -p vm -j 1 --exclude-tags local-only(macOS, isolatedTMPDIR): 11964 passed; 6 failures only inwindows_registry_qualification_test.dart(pwshnot installed on this host, unrelated)specialized_tool_grammar_validation_e2e_test.dart --run-skippedwith llama.cppcd959bae9test-gbnf-validator: 79 passeddart test -p chrome: N/A, parsing is platform-independent; CI runs itcoverage-lib: left to CI onmain./tool/docs/build_site.sh --port 61136: no broken internal linksMatrix Evidence
structured-output-adversarialcd959bae9oracle and GBNF validatorllamadart-evidence/pr-1886/oracle/fix-new/high-risk-exact-head-independent-qaOracle (strict / categorised) vs llama.cpp
cd959bae9:77b01da708a852No case matching at main or 708a852 mismatches now. The 16 "different calls" at 708a852 (
compact-then-valid,mention-then-valid) now return llama.cpp's calls, differing only by the existing content trim.ToolChoice.requiredgrammar: compact and space-after-tag scopes are now invalid in the compiled grammar (both thinking modes); the line-broken scope is valid.Mutants (
oracle/fix-new/mutants.log):\n\nReview Notes
154fed33failed on doc accuracy; re-audit at708a852failed (B1, B2); this head addresses both plus the non-blocking end-of-output, M6 and later-scope items. Re-audit pending.High-risk regression review
structuredOutput)cd959bae9oracle and GBNF validator on the vendored Seed-OSS template; no model weights