Skip to content

Fix/gemini tool schema unsupported keys#52670

Merged
bennetbo merged 2 commits intozed-industries:mainfrom
OmChillure:fix/gemini-tool-schema-unsupported-keys
Mar 29, 2026
Merged

Fix/gemini tool schema unsupported keys#52670
bennetbo merged 2 commits intozed-industries:mainfrom
OmChillure:fix/gemini-tool-schema-unsupported-keys

Conversation

@OmChillure
Copy link
Copy Markdown
Contributor

@OmChillure OmChillure commented Mar 29, 2026

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:

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

  • 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
  • Tests cover the new/changed behavior
  • Performance impact has been considered and is acceptable

Video

Screencast.from.2026-03-29.08-32-18.webm

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

@cla-bot cla-bot bot added the cla-signed The user has signed the Contributor License Agreement label Mar 29, 2026
@zed-codeowner-coordinator zed-codeowner-coordinator bot requested a review from a team March 29, 2026 16:15
@zed-community-bot zed-community-bot bot added the guild Pull requests by someone in Zed Guild. NOTE: the label application is automated via github actions label Mar 29, 2026
@zed-codeowner-coordinator zed-codeowner-coordinator bot requested review from danilo-leal and osyvokon and removed request for a team March 29, 2026 16:15
Copy link
Copy Markdown
Member

@bennetbo bennetbo left a comment

Choose a reason for hiding this comment

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

Thank you

@bennetbo bennetbo merged commit ef4af8f into zed-industries:main Mar 29, 2026
43 checks passed
@zed-zippy zed-zippy bot added the PR state:needs review Used to label PRs that are in need of a post-merge approval label Apr 6, 2026
@MrSubidubi MrSubidubi removed the PR state:needs review Used to label PRs that are in need of a post-merge approval label Apr 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cla-signed The user has signed the Contributor License Agreement guild Pull requests by someone in Zed Guild. NOTE: the label application is automated via github actions

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Gemini API: "failed to stream completion" in Write mode due to strict JSON Schema validation on tools

4 participants