From 6eb4d42ecfb892dac6ef2c1930037cfdf63cab14 Mon Sep 17 00:00:00 2001 From: Marius Wichtner Date: Thu, 25 Jun 2026 14:50:00 +0200 Subject: [PATCH] test(gateway): verify Parakeet transcription compatibility --- .../audio/transcriptions/route.test.ts | 33 +++++++++++++++++++ .../lib/ai-gateway/llm-proxy-helpers.test.ts | 20 +++++++++++ 2 files changed, 53 insertions(+) diff --git a/apps/web/src/app/api/openrouter/audio/transcriptions/route.test.ts b/apps/web/src/app/api/openrouter/audio/transcriptions/route.test.ts index 4edbc85c37..8474814cce 100644 --- a/apps/web/src/app/api/openrouter/audio/transcriptions/route.test.ts +++ b/apps/web/src/app/api/openrouter/audio/transcriptions/route.test.ts @@ -121,6 +121,39 @@ describe('POST /api/gateway/v1/audio/transcriptions', () => { }); }); + it('proxies Parakeet requests without prompt conditioning', async () => { + setUserAuth(); + mockedFetch.mockResolvedValue( + makeUpstreamResponse({ + text: 'hello world', + model: 'nvidia/parakeet-tdt-0.6b-v3', + usage: { seconds: 60, cost: 0.0015, is_byok: false }, + }) + ); + + const { POST } = await import('./route'); + const response = await POST( + makeRequest({ + model: 'nvidia/parakeet-tdt-0.6b-v3', + input_audio: { data: 'UklGRiQA', format: 'wav' }, + language: 'en', + }) as never + ); + + expect(response.status).toBe(200); + expect(await response.json()).toMatchObject({ + text: 'hello world', + model: 'nvidia/parakeet-tdt-0.6b-v3', + }); + + const [, init] = mockedFetch.mock.calls[0]; + const upstream = JSON.parse(init?.body as string); + expect(upstream.model).toBe('nvidia/parakeet-tdt-0.6b-v3'); + expect(upstream.input_audio).toEqual({ data: 'UklGRiQA', format: 'wav' }); + expect(upstream.language).toBe('en'); + expect(upstream.prompt).toBeUndefined(); + }); + it('forwards organization provider policy through the OpenRouter provider field', async () => { setUserAuth(); mockedGetBalanceAndOrgSettings.mockResolvedValue({ diff --git a/apps/web/src/lib/ai-gateway/llm-proxy-helpers.test.ts b/apps/web/src/lib/ai-gateway/llm-proxy-helpers.test.ts index 7537d93c68..5926954433 100644 --- a/apps/web/src/lib/ai-gateway/llm-proxy-helpers.test.ts +++ b/apps/web/src/lib/ai-gateway/llm-proxy-helpers.test.ts @@ -817,6 +817,26 @@ describe('parseTranscriptionUsageFromResponse', () => { expect(result.generation_time).toBe(2.5); }); + it('accounts for duration-priced Parakeet responses without token fields', () => { + const result = parseTranscriptionUsageFromResponse( + makeResponse({ + model: 'nvidia/parakeet-tdt-0.6b-v3', + usage: { seconds: 60, cost: 0.0015, is_byok: false }, + }), + 200, + 'nvidia/parakeet-tdt-0.6b-v3' + ); + + expect(result).toMatchObject({ + model: 'nvidia/parakeet-tdt-0.6b-v3', + cost_mUsd: 1500, + inputTokens: 0, + outputTokens: 0, + generation_time: 60, + hasError: false, + }); + }); + it('falls back to requested model when response model is absent', () => { const parsed = JSON.parse(makeResponse()); delete parsed.model;