fix: ensure JSON Schema draft 2020-12 compliance for OpenAI-compatible providers #10321
+382
−38
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.
Related GitHub Issue
Closes: #10320
Description
This PR fixes the JSON Schema compatibility issue reported in #10320 where Claude models accessed through OpenAI-compatible proxies were failing with "JSON schema is invalid. It must match JSON Schema draft 2020-12" errors.
Root Cause:
type: ["string", "null"]for nullable parametersanyOfformat instead)convertToolSchemaForOpenAIfunction inbase-provider.tswas converting nullable types by simply removing null from the type array, rather than converting to the properanyOfformatImplementation:
convertToolSchemaForOpenAIinsrc/api/providers/base-provider.tsto use the existingnormalizeToolSchemafunction fromsrc/utils/json-schema.tsnormalizeToolSchemafunction already properly handles:type: ["T", "null"]array syntax toanyOf: [{type: "T"}, {type: "null"}]formatitems,minItems, etc.) inside the array variant when usinganyOfadditionalProperties: falsefor object types (OpenAI strict mode)formatvaluesstripUnsupportedSchemaFieldsto handleanyOf/oneOf/allOfarraysTest Procedure
Added comprehensive tests in
src/api/providers/__tests__/base-provider.spec.tscovering:All existing tests continue to pass:
json-schema.spec.ts- 35 tests passcerebras.spec.ts- all tests passbase-openai-compatible-provider.spec.ts- all tests passPre-Submission Checklist
Documentation Updates
Additional Notes
This fix reuses the existing, well-tested
normalizeToolSchemafunction rather than implementing new conversion logic, ensuring consistency across all providers that use OpenAI-compatible format.