From 3ab4ad6de8acaaa0f4698387e24887585d3becd9 Mon Sep 17 00:00:00 2001 From: Umesh Yadav <23421535+imumesh18@users.noreply.github.com> Date: Fri, 27 Jun 2025 20:06:16 +0530 Subject: [PATCH] language_models: Use `JsonSchemaSubset` for Gemini models in OpenRouter (#33477) Closes #33466 Release Notes: - N/A --- crates/language_models/src/provider/open_router.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/crates/language_models/src/provider/open_router.rs b/crates/language_models/src/provider/open_router.rs index b447ee1bd72b4d13bbcf04da15ca5c26037e6405..3a8a450cf6e6ed26fcb79ae86c6f695851374d5b 100644 --- a/crates/language_models/src/provider/open_router.rs +++ b/crates/language_models/src/provider/open_router.rs @@ -11,8 +11,8 @@ use language_model::{ AuthenticateError, LanguageModel, LanguageModelCompletionError, LanguageModelCompletionEvent, LanguageModelId, LanguageModelName, LanguageModelProvider, LanguageModelProviderId, LanguageModelProviderName, LanguageModelProviderState, LanguageModelRequest, - LanguageModelToolChoice, LanguageModelToolResultContent, LanguageModelToolUse, MessageContent, - RateLimiter, Role, StopReason, TokenUsage, + LanguageModelToolChoice, LanguageModelToolResultContent, LanguageModelToolSchemaFormat, + LanguageModelToolUse, MessageContent, RateLimiter, Role, StopReason, TokenUsage, }; use open_router::{ Model, ModelMode as OpenRouterModelMode, ResponseStreamEvent, list_models, stream_completion, @@ -374,6 +374,15 @@ impl LanguageModel for OpenRouterLanguageModel { self.model.supports_tool_calls() } + fn tool_input_format(&self) -> LanguageModelToolSchemaFormat { + let model_id = self.model.id().trim().to_lowercase(); + if model_id.contains("gemini") { + LanguageModelToolSchemaFormat::JsonSchemaSubset + } else { + LanguageModelToolSchemaFormat::JsonSchema + } + } + fn telemetry_id(&self) -> String { format!("openrouter/{}", self.model.id()) }