Files
OmniRoute/open-sse/handlers/chatCore/contextEstimation.ts
backryun eda45bf46e fix(types): validate chat context estimation inputs (#9084)
Validated in local merge-train (devbox-vm-06-dev002) @ combined-tip (FAST gates: typecheck/complexity/cognitive/changelog/vitest — only pre-existing audit.test.ts flake). Evidence: /home/diegosouzapw/dev/proxys/OmniRoute/.claude/worktrees/merge-train-20260805-222248-suite.log
2026-08-05 22:29:25 -03:00

30 lines
1.1 KiB
TypeScript

import { adaptBodyForCompression } from "../../services/compression/bodyAdapter.ts";
import { estimateTokens } from "../../services/contextManager.ts";
type JsonRecord = Record<string, unknown>;
function asJsonRecord(value: unknown): JsonRecord | null {
return value && typeof value === "object" && !Array.isArray(value) ? (value as JsonRecord) : null;
}
export function estimateFinalInputTokens(requestBody: JsonRecord | null | undefined): number {
const adapted = requestBody ? adaptBodyForCompression(requestBody).body : null;
const nestedRequest = asJsonRecord(requestBody?.request);
const messages =
adapted?.messages ||
requestBody?.contents ||
nestedRequest?.contents ||
(Array.isArray(requestBody?.input)
? requestBody.input
: requestBody?.input && typeof requestBody.input === "object"
? requestBody.input
: []);
return (
estimateTokens(messages) +
(Array.isArray(requestBody?.tools) ? estimateTokens(requestBody.tools) : 0) +
estimateTokens(requestBody?.system) +
estimateTokens(requestBody?.instructions)
);
}