diff --git a/src/plugin/transform/gemini.ts b/src/plugin/transform/gemini.ts index 65e0766..3c2f359 100644 --- a/src/plugin/transform/gemini.ts +++ b/src/plugin/transform/gemini.ts @@ -284,8 +284,17 @@ export function normalizeGeminiTools(payload: RequestPayload): { `tool-${toolIndex}`; // Always update function.input_schema with transformed schema + // CRITICAL: This must happen BEFORE custom creation so function tools + // keep their schema even after custom is stripped (line 332). if (newTool.function && schema) { (newTool.function as Record).input_schema = schema; + } else if (newTool.function && !schema) { + // Ensure function always has a schema even if source had none + (newTool.function as Record).input_schema = { + type: "OBJECT", + properties: {}, + }; + toolDebugMissing += 1; } // Always update custom.input_schema with transformed schema @@ -293,7 +302,7 @@ export function normalizeGeminiTools(payload: RequestPayload): { (newTool.custom as Record).input_schema = schema; } - // Create custom from function if missing + // Create custom from function if missing (temporary, stripped later) if (!newTool.custom && newTool.function) { const fn = newTool.function as Record; newTool.custom = { diff --git a/src/plugin/transform/model-resolver.ts b/src/plugin/transform/model-resolver.ts index b6a5451..598448b 100644 --- a/src/plugin/transform/model-resolver.ts +++ b/src/plugin/transform/model-resolver.ts @@ -48,6 +48,12 @@ export const MODEL_ALIASES: Record = { "gemini-3-flash-medium": "gemini-3-flash", "gemini-3-flash-high": "gemini-3-flash", + // Marketing aliases - map to real API model names + "gemini-omni-flash-preview": "gemini-3-flash", + "gemini-omni-flash": "gemini-3-flash", + "gemini-omni-pro-preview": "gemini-3-pro", + "gemini-omni-pro": "gemini-3-pro", + // Gemini 3.5 Flash - upstream uses tiered names (no bare model exists). // Each tier maps to a distinct upstream model ID (probed 200 OK). "gemini-3.5-flash": "gemini-3.5-flash-low", // default → Medium tier