OpenMAIC-React / tests /ai /anthropic-serialization.test.ts
muthuk1's picture
Add missing files: LICENSE, Dockerfile, .github, tests, e2e, eval, scripts, configs
a0ebf39 verified
import { createAnthropic } from '@ai-sdk/anthropic';
import { describe, expect, it, vi } from 'vitest';
import { callLLM } from '@/lib/ai/llm';
describe('Anthropic request serialization', () => {
it('serializes Claude Haiku 4.5 thinking budget without effort', async () => {
let captured: Record<string, unknown> | undefined;
const fetchMock = vi.fn(async (_url: RequestInfo | URL, init?: RequestInit) => {
captured = JSON.parse(String(init?.body)) as Record<string, unknown>;
return new Response(
JSON.stringify({
type: 'message',
id: 'msg_test',
model: 'claude-haiku-4-5',
content: [{ type: 'text', text: 'ok' }],
stop_reason: 'end_turn',
stop_sequence: null,
usage: { input_tokens: 1, output_tokens: 1 },
}),
{
status: 200,
headers: { 'content-type': 'application/json' },
},
);
});
const anthropic = createAnthropic({
apiKey: 'test-key',
fetch: fetchMock,
});
await callLLM(
{
model: anthropic.chat('claude-haiku-4-5'),
prompt: 'hi',
maxOutputTokens: 10,
} as Parameters<typeof callLLM>[0],
'serialization-test',
undefined,
{ mode: 'enabled', budgetTokens: 4096 },
);
expect(fetchMock).toHaveBeenCalledTimes(1);
expect(captured).toMatchObject({
model: 'claude-haiku-4-5',
max_tokens: 4106,
thinking: {
type: 'enabled',
budget_tokens: 4096,
},
});
expect(captured?.output_config).toBeUndefined();
});
});