diff --git a/src/lib/router.js b/src/lib/router.js index bb65144..258b0d9 100644 --- a/src/lib/router.js +++ b/src/lib/router.js @@ -13,7 +13,10 @@ export async function chat({ routerUrl, model, messages, agentId, sessionId, ten // and return non-review text. The domain preflight (agent_mismatch 400) // still applies per agent tier; the pipeline's attempt-2 fallback agent // covers that. - body: JSON.stringify({ model, messages, agentId, sessionId, tenantId, stream: false, tools: false, raw: true }), + body: JSON.stringify({ + model, messages, agentId, sessionId, tenantId, + stream: false, tools: false, raw: true, fallbackModels: [] + }), signal: AbortSignal.timeout(timeoutMs) }); if (!res.ok) { diff --git a/test/routerClient.test.js b/test/routerClient.test.js new file mode 100644 index 0000000..7ada51f --- /dev/null +++ b/test/routerClient.test.js @@ -0,0 +1,34 @@ +import { test } from 'node:test'; +import assert from 'node:assert/strict'; +import { chat } from '../src/lib/router.js'; + +test('review router client disables model fallbacks explicitly', async () => { + const originalFetch = globalThis.fetch; + let body; + globalThis.fetch = async (_url, init) => { + body = JSON.parse(init.body); + return Response.json({ + message: { content: '{"axes":{},"overall":90,"grade":"A","findings":[]}' }, + _shre: { model: 'ollama-remote/qwen2.5-coder:7b' } + }); + }; + + try { + await chat({ + routerUrl: 'http://router.test', + model: 'ollama-remote/qwen2.5-coder:7b', + messages: [{ role: 'user', content: 'review' }], + agentId: 'code-reviewer', + sessionId: 'review-test', + tenantId: 'nirlab', + timeoutMs: 1000 + }); + } finally { + globalThis.fetch = originalFetch; + } + + assert.deepEqual(body.fallbackModels, []); + assert.equal(body.tools, false); + assert.equal(body.raw, true); + assert.equal(body.stream, false); +});