gravityyy-proxyyy / tests /migration /openai-stream.test.js
bardd's picture
Fix gemini-3.1-pro-high by routing to pro-low with thinkingLevel high.
4badc3b
Raw
History Blame Contribute Delete
1.98 kB
import test from 'node:test';
import assert from 'node:assert/strict';
import {
convertAnthropicEventToOpenAIChunks,
createOpenAIStreamState
} from '../../src/format/openai-stream.js';
test('Anthropic events become OpenAI chunks and a final usage chunk', () => {
const state = createOpenAIStreamState('gemini-3.5-flash-low', true);
const events = [
{
type: 'message_start',
message: { id: 'msg_abc', usage: { input_tokens: 4 } }
},
{
type: 'content_block_delta',
index: 0,
delta: { type: 'text_delta', text: 'Hi' }
},
{
type: 'message_delta',
delta: { stop_reason: 'end_turn' },
usage: { output_tokens: 1 }
},
{ type: 'message_stop' }
];
const chunks = events.flatMap(event => convertAnthropicEventToOpenAIChunks(event, state));
assert.equal(chunks[0].choices[0].delta.role, 'assistant');
assert.equal(chunks[1].choices[0].delta.content, 'Hi');
assert.equal(chunks[2].choices[0].finish_reason, 'stop');
assert.equal(chunks[3].usage.total_tokens, 5);
});
test('tool deltas keep a stable OpenAI tool call index', () => {
const state = createOpenAIStreamState('gemini-3.5-flash-low', false);
convertAnthropicEventToOpenAIChunks({
type: 'message_start',
message: { id: 'msg_tool', usage: { input_tokens: 2 } }
}, state);
const start = convertAnthropicEventToOpenAIChunks({
type: 'content_block_start',
index: 3,
content_block: { type: 'tool_use', id: 'call_1', name: 'lookup' }
}, state);
const delta = convertAnthropicEventToOpenAIChunks({
type: 'content_block_delta',
index: 3,
delta: { type: 'input_json_delta', partial_json: '{"id":"1"}' }
}, state);
assert.equal(start[0].choices[0].delta.tool_calls[0].index, 0);
assert.equal(delta[0].choices[0].delta.tool_calls[0].index, 0);
});