From 9e4ffbd6c83839cad46dd0ecea4845b720f84181 Mon Sep 17 00:00:00 2001 From: ksmaze Date: Sat, 14 Mar 2026 22:05:12 -0700 Subject: [PATCH] address comment --- .../routes/proxy/upstreamEndpoint.test.ts | 34 +++++++++++++++++++ src/server/routes/proxy/upstreamEndpoint.ts | 32 +++++++++-------- 2 files changed, 52 insertions(+), 14 deletions(-) diff --git a/src/server/routes/proxy/upstreamEndpoint.test.ts b/src/server/routes/proxy/upstreamEndpoint.test.ts index 60cffc6..00646c6 100644 --- a/src/server/routes/proxy/upstreamEndpoint.test.ts +++ b/src/server/routes/proxy/upstreamEndpoint.test.ts @@ -679,6 +679,40 @@ describe('buildUpstreamEndpointRequest', () => { expect(request.body.temperature).toBe(0.8); }); + it('strips unsupported openai parameters like frequency_penalty for Gemini models from downstream responses bodies', () => { + const request = buildUpstreamEndpointRequest({ + endpoint: 'responses', + modelName: 'gemini-1.5-pro', + stream: false, + tokenValue: 'sk-test', + sitePlatform: 'gemini', + openaiBody: {}, + downstreamFormat: 'responses', + responsesOriginalBody: { + model: 'gemini-1.5-pro', + input: 'hello', + frequency_penalty: 0.5, + presence_penalty: 0.2, + logit_bias: { '100': 1 }, + logprobs: true, + top_logprobs: 2, + store: true, + temperature: 0.8, + top_p: 1.0, + }, + }); + + expect(request.path).toBe('/v1beta/openai/responses'); + expect(request.body.frequency_penalty).toBeUndefined(); + expect(request.body.presence_penalty).toBeUndefined(); + expect(request.body.logit_bias).toBeUndefined(); + expect(request.body.logprobs).toBeUndefined(); + expect(request.body.top_logprobs).toBeUndefined(); + expect(request.body.store).toBeUndefined(); + expect(request.body.temperature).toBe(0.8); + expect(request.body.top_p).toBe(1.0); + }); + it('preserves structured responses content blocks instead of flattening them', () => { const request = buildUpstreamEndpointRequest({ endpoint: 'responses', diff --git a/src/server/routes/proxy/upstreamEndpoint.ts b/src/server/routes/proxy/upstreamEndpoint.ts index 29f0298..78baaa1 100644 --- a/src/server/routes/proxy/upstreamEndpoint.ts +++ b/src/server/routes/proxy/upstreamEndpoint.ts @@ -481,20 +481,24 @@ export function buildUpstreamEndpointRequest(input: { commonHeaders.Authorization = `Bearer ${input.tokenValue}`; } - const openaiBody = { ...input.openaiBody }; - if (isGeminiUpstream) { - const blacklist = [ - 'frequency_penalty', - 'presence_penalty', - 'logit_bias', - 'logprobs', - 'top_logprobs', - 'store', - ]; - for (const key of blacklist) { - delete openaiBody[key]; + const stripGeminiUnsupportedFields = (body: Record) => { + const next = { ...body }; + if (isGeminiUpstream) { + for (const key of [ + 'frequency_penalty', + 'presence_penalty', + 'logit_bias', + 'logprobs', + 'top_logprobs', + 'store', + ]) { + delete next[key]; + } } - } + return next; + }; + + const openaiBody = stripGeminiUnsupportedFields(input.openaiBody); if (input.endpoint === 'messages') { const claudeHeaders = input.downstreamFormat === 'claude' @@ -554,7 +558,7 @@ export function buildUpstreamEndpointRequest(input: { const rawBody = ( input.downstreamFormat === 'responses' && input.responsesOriginalBody ? { - ...input.responsesOriginalBody, + ...stripGeminiUnsupportedFields(input.responsesOriginalBody), model: input.modelName, stream: input.stream, }