File size: 1,649 Bytes
e67ab0e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
import { config } from "$lib/server/config";
import { logger } from "$lib/server/logger";
import type { ProcessedModel } from "../models";
export const ROUTER_TOOLS_ROUTE = "agentic";
type LocalsWithMcp = App.Locals & {
mcp?: {
selectedServers?: unknown[];
selectedServerNames?: unknown[];
};
};
export function isRouterToolsBypassEnabled(): boolean {
return (config.LLM_ROUTER_ENABLE_TOOLS || "").toLowerCase() === "true";
}
export function hasActiveToolsSelection(locals: App.Locals | undefined): boolean {
try {
const reqMcp = (locals as LocalsWithMcp | undefined)?.mcp;
const byConfig =
Array.isArray(reqMcp?.selectedServers) && (reqMcp?.selectedServers?.length ?? 0) > 0;
const byName =
Array.isArray(reqMcp?.selectedServerNames) && (reqMcp?.selectedServerNames?.length ?? 0) > 0;
return Boolean(byConfig || byName);
} catch {
return false;
}
}
export function pickToolsCapableModel(
models: ProcessedModel[] | undefined
): ProcessedModel | undefined {
const preferredRaw = (config as unknown as Record<string, string>).LLM_ROUTER_TOOLS_MODEL;
const preferred = preferredRaw?.trim();
if (!preferred) {
logger.warn("[router] tools bypass requested but LLM_ROUTER_TOOLS_MODEL is not set");
return undefined;
}
if (!models?.length) return undefined;
const found = models.find((m) => m.id === preferred || m.name === preferred);
if (!found) {
logger.warn(
{ configuredModel: preferred },
"[router] configured tools model not found; falling back to Arch routing"
);
return undefined;
}
logger.info({ model: found.id ?? found.name }, "[router] using configured tools model");
return found;
}
|