Repository navigation
Send a field's numeric and length bounds to the provider - #1683
Merged
Muizzkolapo merged 3 commits intoNov 8, 2026
Merged
Muizzkolapo merged 3 commits into
Muizzkolapo merged 3 commits into
Conversation
Muizzkolapo
force-pushed
the
schema-bounds-reach-the-provider
branch
from
November 7, 2026 19:29
d79009a to
145b309
Compare
Muizzkolapo
force-pushed
the
schema-bounds-reach-the-provider
branch
from
November 8, 2026 01:16
145b309 to
424a04e
Compare
Muizzkolapo
marked this pull request as ready for review
November 8, 2026 09:59
Muizzkolapo
force-pushed
the
schema-bounds-reach-the-provider
branch
2 times, most recently
from
November 8, 2026 14:41
71e4310 to
c78709b
Compare
The schema compiler copied a fixed list of field keys. That list left out minimum, maximum, minLength and maxLength, so no provider was told a field's range. The schema file accepted these keys and the docs showed them. compile_field now copies the four keys for every vendor. No vendor strips them: no provider documents a rejection of them when strict mode is off, and agac never sets strict. exclusiveMinimum, exclusiveMaximum and multipleOf are still not sent. The schema reference now has a table that shows how each vendor receives the schema and whether it enforces the bounds.
The Validation Constraints table still said minimum, maximum, minLength and maxLength are not sent to the provider. The section below it on the same page says they are. The table now says they are sent, and lists exclusiveMaximum and multipleOf with exclusiveMinimum as not sent.
The changelog and docs credited the compiled schema with checks that read the schema file: an LLM action's output check and repair already held minimum and maximum before this change. They also said string length is never checked on output, and they did not say that tool output is now refused. Two checks read the schema as it is sent and now hold the bounds: a declared endpoint fails a reply outside minimum or maximum, and a tool action refuses output that breaks any of the four. The docs say so, the constraint table is scoped to LLM actions, and the vendor table gives cohere and gemini their own rows. Tests pin the tool refusal and that exclusiveMinimum, exclusiveMaximum and multipleOf stay out of the compiled schema.
Muizzkolapo
force-pushed
the
schema-bounds-reach-the-provider
branch
from
November 8, 2026 14:54
c78709b to
c7e3c93
Compare
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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
minimum,maximum,minLengthandmaxLength, so no provider was told a field's range.compile_fieldnow copies the four keys for every vendor. No vendor strips them: no provider documents a rejection of them when strict mode is off, and agac never setsstrict.exclusiveMinimum,exclusiveMaximumandmultipleOfare still not sent.minimumormaximum, and a tool action refuses output that breaks any of the four. An LLM action's own output check reads the schema file and already heldminimumandmaximum.Verification
tests/unit/output/response/test_schema_bounds_reach_the_provider.pyon the parent)score: 9(maximum 4) passed on the parent and fails at this layer; a tool output with a too-long label passed on the parent and is refused here.test_a_mapping_at_the_end_of_a_deep_chain_is_placed, a wall-clock test (elapsed < 2.0), at machine load average about 16. It passes alone 3 of 3, and the rerun passed. It is noted on the coordination board.