{"record":{"id":"f42dd202a4ad7504","repo":"ruvnet/ruflo","slug":"router-tools-bypass-requested-but-llm-router-too","errorCode":null,"errorMessage":"[router] tools bypass requested but LLM_ROUTER_TOOLS_MODEL is not set","messagePattern":"\\[router\\] tools bypass requested but LLM_ROUTER_TOOLS_MODEL is not set","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"ruflo/src/ruvocal/src/lib/server/router/toolsRoute.ts","lineNumber":37,"sourceCode":"\ttry {\n\t\tconst reqMcp = (locals as LocalsWithMcp | undefined)?.mcp;\n\t\tconst byConfig =\n\t\t\tArray.isArray(reqMcp?.selectedServers) && (reqMcp?.selectedServers?.length ?? 0) > 0;\n\t\tconst byName =\n\t\t\tArray.isArray(reqMcp?.selectedServerNames) && (reqMcp?.selectedServerNames?.length ?? 0) > 0;\n\t\treturn Boolean(byConfig || byName);\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function pickToolsCapableModel(\n\tmodels: ProcessedModel[] | undefined\n): ProcessedModel | undefined {\n\tconst preferredRaw = (config as unknown as Record<string, string>).LLM_ROUTER_TOOLS_MODEL;\n\tconst preferred = preferredRaw?.trim();\n\tif (!preferred) {\n\t\tlogger.warn(\"[router] tools bypass requested but LLM_ROUTER_TOOLS_MODEL is not set\");\n\t\treturn undefined;\n\t}\n\tif (!models?.length) return undefined;\n\tconst found = models.find((m) => m.id === preferred || m.name === preferred);\n\tif (!found) {\n\t\tlogger.warn(\n\t\t\t{ configuredModel: preferred },\n\t\t\t\"[router] configured tools model not found; falling back to Arch routing\"\n\t\t);\n\t\treturn undefined;\n\t}\n\tlogger.info({ model: found.id ?? found.name }, \"[router] using configured tools model\");\n\treturn found;\n}\n","sourceCodeStart":19,"sourceCodeEnd":52,"githubUrl":"https://github.com/ruvnet/ruflo/blob/fa13ee4ad60ac2090b1480656eb233521790d640/ruflo/src/ruvocal/src/lib/server/router/toolsRoute.ts#L19-L52","documentation":"Log warning in pickToolsCapableModel: a tools bypass was requested (active MCP servers detected) but the LLM_ROUTER_TOOLS_MODEL env var is unset, so no preferred tools model can be selected and undefined is returned.","triggerScenarios":"Thrown at ruflo/src/ruvocal/src/lib/server/router/toolsRoute.ts:37 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Set LLM_ROUTER_TOOLS_MODEL to a configured model name, or do not request the tools bypass route."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"fa13ee4ad60ac2090b1480656eb233521790d640","analyzedAt":"2026-08-18T21:34:22.708Z","contentChangedAt":"2026-08-18T21:34:22.708Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}