mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-01 04:42:10 +03:00
Segundo incremento da decomposição do chatCore.ts (5127 LOC). Extrai a primeira fatia PURA da fase de request-setup do handleChatCore: a metadata de roteamento de modelo (apiFormat + targetFormat via structural-narrowing sem 'as any', + o requestedModel com fallback) — para um leaf testável em chatCore/requestSetup.ts. - resolveChatCoreRequestSetup(modelInfo, body, model): ChatCoreRequestSetup — puro, byte-idêntico ao bloco inline. Tipo ChatCoreRequestSetup é a semente do futuro ChatCoreContext (as fases maiores — setup/dispatch/streaming — virão depois). - chatCore.ts: bloco inline (~21 ln) vira 5 linhas. - 5 testes de caracterização (narrowing + fallback do requestedModel). 185/185 chatcore tests (caracterização do handleChatCore preservada), typecheck 0, complexity OK 1896 (mudança neutra), file-size encolhe. Timing: feito como leaf PURO seguro porque a v3.8.30 está finalizando — o ChatCoreContext mutável (carrega body + 20 inputs no hot-path) cabe melhor em v3.8.31. Follow-up: atribuir requestSetup.ts a um batch de mutação no nightly (como os demais chatCore leaves); 5 testes cobrem as branches por ora.
41 lines
2.1 KiB
TypeScript
41 lines
2.1 KiB
TypeScript
// tests/unit/chatcore-request-setup.test.ts
|
|
// Characterization of resolveChatCoreRequestSetup — the first extracted pure slice of
|
|
// chatCore's request-setup phase (god-file decomposition). Locks the structural-narrowing
|
|
// of apiFormat/targetFormat and the requestedModel fallback.
|
|
import { test } from "node:test";
|
|
import assert from "node:assert/strict";
|
|
import { resolveChatCoreRequestSetup } from "../../open-sse/handlers/chatCore/requestSetup.ts";
|
|
|
|
test("reads apiFormat / targetFormat only when present as strings", () => {
|
|
const r = resolveChatCoreRequestSetup(
|
|
{ apiFormat: "responses", targetFormat: "openai" },
|
|
{ model: "gpt-4o" },
|
|
"resolved-model"
|
|
);
|
|
assert.equal(r.apiFormat, "responses");
|
|
assert.equal(r.customModelTargetFormat, "openai");
|
|
});
|
|
|
|
test("apiFormat / targetFormat absent or non-string → undefined", () => {
|
|
assert.equal(resolveChatCoreRequestSetup({}, {}, "m").apiFormat, undefined);
|
|
assert.equal(resolveChatCoreRequestSetup({ apiFormat: 123 }, {}, "m").apiFormat, undefined);
|
|
assert.equal(resolveChatCoreRequestSetup({ targetFormat: null }, {}, "m").customModelTargetFormat, undefined);
|
|
});
|
|
|
|
test("modelInfo that is not an object → both markers undefined", () => {
|
|
const r = resolveChatCoreRequestSetup(null, { model: "x" }, "m");
|
|
assert.equal(r.apiFormat, undefined);
|
|
assert.equal(r.customModelTargetFormat, undefined);
|
|
});
|
|
|
|
test("requestedModel uses the client body.model when it is a non-blank string", () => {
|
|
assert.equal(resolveChatCoreRequestSetup({}, { model: "claude-3" }, "fallback").requestedModel, "claude-3");
|
|
});
|
|
|
|
test("requestedModel falls back to the resolved model id when body.model is blank/absent/non-string", () => {
|
|
assert.equal(resolveChatCoreRequestSetup({}, { model: " " }, "fallback").requestedModel, "fallback");
|
|
assert.equal(resolveChatCoreRequestSetup({}, {}, "fallback").requestedModel, "fallback");
|
|
assert.equal(resolveChatCoreRequestSetup({}, { model: 42 }, "fallback").requestedModel, "fallback");
|
|
assert.equal(resolveChatCoreRequestSetup({}, null, "fallback").requestedModel, "fallback");
|
|
});
|