mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-07 15:52:52 +03:00
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
30 lines
1.1 KiB
TypeScript
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)
|
|
);
|
|
}
|