Fix Gemini API rejecting tool schemas with unsupported JSON Schema keywords#52644
Fix Gemini API rejecting tool schemas with unsupported JSON Schema keywords#52644OmChillure wants to merge 1 commit intozed-industries:mainfrom
Conversation
|
Hey guys, one catch in the release notes mention anyOf as one of the stripped keywords, but the diff doesn't add it to KEYS_TO_REMOVE — and Gemini actually supports anyOf natively (the code even produces it by converting oneOf → anyOf). Looks like a copy-paste slip. Worth fixing before merge to avoid confusing users into removing anyOf from their schemas unnecessarily. |
Thank you for pointing out, It was a description copy/paste slip, though the code doenst touch |
### Summary The Gemini API enforces strict validation on `function_declarations` and rejects requests containing unsupported JSON Schema keywords such as `additionalProperties`, `propertyNames`. This caused Write mode to fail with "failed to stream completion" when tools with complex schemas were used. This PR strips these unsupported keywords from tool schemas before sending them to the Gemini API in `adapt_to_json_schema_subset`. ### How to Review - Check `crates/language_model/src/tool_schema.rs` — the `adapt_to_json_schema_subset` function now removes `additionalProperties` and `propertyNames` from schemas. - Tests are added covering removal of these keys and nested schema handling. - To reproduce the original issue, send a tool schema containing `propertyNames` or `additionalProperties` to the Gemini API — it returns HTTP 400 `INVALID_ARGUMENT` ### How to Test Run the unit tests: ```sh cargo test -p language_model ``` OR manually reproduce this using -> ``` curl -s "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=YOUR_KEY" \ -H 'Content-Type: application/json' \ -d '{"contents":[{"parts":[{"text":"test"}]}],"tools":[{"functionDeclarations":[{"name":"test","parameters":{"type":"OBJECT","properties":{"field":{"type":"OBJECT","propertyNames":{"pattern":"^[a-z]+$"},"additionalProperties":{"type":"STRING"}}}}}]}]}' ``` #### Closes #52430 - [x] I've reviewed my own diff for quality, security, and reliability - [ ] Unsafe blocks (if any) have justifying comments - [ ] The content is consistent with the [UI/UX checklist](https://github.com/zed-industries/zed/blob/main/CONTRIBUTING.md#uiux-checklist) - [x] Tests cover the new/changed behavior - [x] Performance impact has been considered and is acceptable Video [Screencast from 2026-03-29 08-32-18.webm](https://github.com/user-attachments/assets/a0069f0e-1f2b-45dc-85bf-f24aacb08599) ### Note : Reopens previous work from closed PR #52644 (fork was deleted) Release Notes: - Fixed an issue where Gemini models would not work when using specific MCP servers
Summary
The Gemini API enforces strict validation on
function_declarationsand rejects requests containing unsupported JSON Schema keywords such asadditionalProperties,propertyNames. This caused Write mode to fail with "failed to stream completion" when tools with complex schemas were used.This PR strips these unsupported keywords from tool schemas before sending them to the Gemini API in
adapt_to_json_schema_subset.How to Review
crates/language_model/src/tool_schema.rs— theadapt_to_json_schema_subsetfunction now removesadditionalPropertiesandpropertyNamesfrom schemas.propertyNamesoradditionalPropertiesto the Gemini API — it returns HTTP 400INVALID_ARGUMENTHow to Test
Run the unit tests:
cargo test -p language_modelOR manually reproduce this using ->
Closes #52430
Video
Screencast.from.2026-03-29.08-32-18.webm
Release Notes:
In Write mode when tool schemas contain unsupported JSON Schema keywords (
additionalProperties,propertyNames). These are now stripped before sending to the Gemini API.