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;
}