forked from boos/BoosAPI
address comment
This commit is contained in:
@@ -679,6 +679,40 @@ describe('buildUpstreamEndpointRequest', () => {
|
|||||||
expect(request.body.temperature).toBe(0.8);
|
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', () => {
|
it('preserves structured responses content blocks instead of flattening them', () => {
|
||||||
const request = buildUpstreamEndpointRequest({
|
const request = buildUpstreamEndpointRequest({
|
||||||
endpoint: 'responses',
|
endpoint: 'responses',
|
||||||
|
|||||||
@@ -481,20 +481,24 @@ export function buildUpstreamEndpointRequest(input: {
|
|||||||
commonHeaders.Authorization = `Bearer ${input.tokenValue}`;
|
commonHeaders.Authorization = `Bearer ${input.tokenValue}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
const openaiBody = { ...input.openaiBody };
|
const stripGeminiUnsupportedFields = (body: Record<string, unknown>) => {
|
||||||
if (isGeminiUpstream) {
|
const next = { ...body };
|
||||||
const blacklist = [
|
if (isGeminiUpstream) {
|
||||||
'frequency_penalty',
|
for (const key of [
|
||||||
'presence_penalty',
|
'frequency_penalty',
|
||||||
'logit_bias',
|
'presence_penalty',
|
||||||
'logprobs',
|
'logit_bias',
|
||||||
'top_logprobs',
|
'logprobs',
|
||||||
'store',
|
'top_logprobs',
|
||||||
];
|
'store',
|
||||||
for (const key of blacklist) {
|
]) {
|
||||||
delete openaiBody[key];
|
delete next[key];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
return next;
|
||||||
|
};
|
||||||
|
|
||||||
|
const openaiBody = stripGeminiUnsupportedFields(input.openaiBody);
|
||||||
|
|
||||||
if (input.endpoint === 'messages') {
|
if (input.endpoint === 'messages') {
|
||||||
const claudeHeaders = input.downstreamFormat === 'claude'
|
const claudeHeaders = input.downstreamFormat === 'claude'
|
||||||
@@ -554,7 +558,7 @@ export function buildUpstreamEndpointRequest(input: {
|
|||||||
const rawBody = (
|
const rawBody = (
|
||||||
input.downstreamFormat === 'responses' && input.responsesOriginalBody
|
input.downstreamFormat === 'responses' && input.responsesOriginalBody
|
||||||
? {
|
? {
|
||||||
...input.responsesOriginalBody,
|
...stripGeminiUnsupportedFields(input.responsesOriginalBody),
|
||||||
model: input.modelName,
|
model: input.modelName,
|
||||||
stream: input.stream,
|
stream: input.stream,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user