Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
134 changes: 128 additions & 6 deletions dist/cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -45176,7 +45176,7 @@ function route(prompt, systemPrompt, maxOutputTokens, options) {
const strategy = getStrategy(options.config.strategy ?? "portfolio");
return strategy.route(prompt, systemPrompt, maxOutputTokens, options);
}
var BASELINE_MODEL_ID, BASELINE_INPUT_PRICE, BASELINE_OUTPUT_PRICE, SERVER_MARGIN_PERCENT, MIN_PAYMENT_USD, RulesStrategy, registry, DEFAULT_MODEL_CAPABILITIES, model_profiles_generated_default, LIVE_MODEL_PROFILES, HISTORICAL_MODEL_PROFILES, DEFAULT_PORTFOLIO_WEIGHTS, PortfolioStrategy, DEFAULT_ROUTING_CONFIG;
var BASELINE_MODEL_ID, BASELINE_INPUT_PRICE, BASELINE_OUTPUT_PRICE, SERVER_MARGIN_PERCENT, MIN_PAYMENT_USD, RulesStrategy, registry, DEFAULT_MODEL_CAPABILITIES, model_profiles_generated_default, LIVE_MODEL_PROFILES, HISTORICAL_MODEL_PROFILES, DEFAULT_PORTFOLIO_WEIGHTS, VERIFIED_TOOL_FALLBACKS, PortfolioStrategy, DEFAULT_ROUTING_CONFIG;
var init_dist = __esm({
"node_modules/@blockrun/router-core/dist/index.js"() {
"use strict";
Expand Down Expand Up @@ -45299,6 +45299,12 @@ ${value.slice(-(scanLimit - prefixLength))}`;
supportsTools: true,
supportsVision: true
},
"anthropic/claude-fable-5.1": {
contextWindow: 1e6,
maxOutputTokens: 128e3,
supportsTools: true,
supportsVision: true
},
"anthropic/claude-haiku-4.5": {
// override: The public catalog's `categories` omit "vision" for this Anthropic model even though the gateway accepts image input for it (the prior hand-maintained snapshot had it, and Anthropic's model card lists it). Without this the vision filter would silently drop it — reported against the catalog; remove once the categories carry vision.
contextWindow: 2e5,
Expand Down Expand Up @@ -45330,6 +45336,12 @@ ${value.slice(-(scanLimit - prefixLength))}`;
supportsTools: true,
supportsVision: true
},
"anthropic/claude-opus-5.5": {
contextWindow: 1e6,
maxOutputTokens: 128e3,
supportsTools: true,
supportsVision: true
},
"anthropic/claude-sonnet-4.5": {
contextWindow: 2e5,
maxOutputTokens: 64e3,
Expand All @@ -45349,6 +45361,12 @@ ${value.slice(-(scanLimit - prefixLength))}`;
supportsTools: true,
supportsVision: true
},
"anthropic/claude-sonnet-5.5": {
contextWindow: 1e6,
maxOutputTokens: 128e3,
supportsTools: true,
supportsVision: true
},
"cohere/north-mini-code": {
// supportsTools: not probed — fails closed
contextWindow: 256e3,
Expand All @@ -45368,6 +45386,12 @@ ${value.slice(-(scanLimit - prefixLength))}`;
supportsTools: true,
supportsVision: false
},
"deepseek/deepseek-v4-flash-vision-exp": {
contextWindow: 1048576,
maxOutputTokens: 65536,
supportsTools: false,
supportsVision: true
},
"deepseek/deepseek-v4-pro": {
contextWindow: 1048576,
maxOutputTokens: 65536,
Expand Down Expand Up @@ -45428,6 +45452,12 @@ ${value.slice(-(scanLimit - prefixLength))}`;
supportsTools: true,
supportsVision: true
},
"google/gemini-3.8-flash": {
contextWindow: 1048576,
maxOutputTokens: 65536,
supportsTools: true,
supportsVision: true
},
"minimax/minimax-m2.7": {
contextWindow: 204800,
maxOutputTokens: 16384,
Expand All @@ -45453,6 +45483,13 @@ ${value.slice(-(scanLimit - prefixLength))}`;
supportsTools: false,
supportsVision: true
},
"nvidia/muse-glimmer-30b": {
// supportsTools: not probed — fails closed
contextWindow: 131072,
maxOutputTokens: 16384,
supportsTools: false,
supportsVision: false
},
"nvidia/nemotron-3-nano-omni-30b-a3b-reasoning": {
// override: The catalog tags this model "vision", but a correctly sized probe does not hold up (ClawRouter, 2026-08-31): a 64x64 solid-red PNG was named correctly 1 of 4 times on Base, and on Solana the image was silently dropped and a text model answered "white". An HTTP 200 with a confident wrong answer gives the caller nothing to branch on, so image turns must not be routed here. It is ecoTiers.SIMPLE.fallback[0] since nemotron-3-nano-30b was delisted (2026-09-08); remove once a probe of this size comes back right on both chains.
contextWindow: 256e3,
Expand Down Expand Up @@ -45516,6 +45553,12 @@ ${value.slice(-(scanLimit - prefixLength))}`;
supportsTools: true,
supportsVision: false
},
"openai/gpt-5.1": {
contextWindow: 4e5,
maxOutputTokens: 128e3,
supportsTools: true,
supportsVision: true
},
"openai/gpt-5.2": {
contextWindow: 4e5,
maxOutputTokens: 128e3,
Expand Down Expand Up @@ -45610,6 +45653,24 @@ ${value.slice(-(scanLimit - prefixLength))}`;
supportsTools: true,
supportsVision: true
},
"openai/gpt-6-astra": {
contextWindow: 105e4,
maxOutputTokens: 128e3,
supportsTools: true,
supportsVision: true
},
"openai/gpt-6-luna": {
contextWindow: 105e4,
maxOutputTokens: 128e3,
supportsTools: true,
supportsVision: true
},
"openai/gpt-6-sol": {
contextWindow: 105e4,
maxOutputTokens: 128e3,
supportsTools: true,
supportsVision: true
},
"openai/o1": {
contextWindow: 2e5,
maxOutputTokens: 1e5,
Expand All @@ -45634,6 +45695,13 @@ ${value.slice(-(scanLimit - prefixLength))}`;
supportsTools: true,
supportsVision: false
},
"poolside/laguna-s-2.1": {
// supportsTools: not probed — fails closed
contextWindow: 1048576,
maxOutputTokens: 131072,
supportsTools: false,
supportsVision: false
},
"poolside/laguna-xs-2.1": {
// supportsTools: not probed — fails closed
contextWindow: 131072,
Expand All @@ -45659,10 +45727,24 @@ ${value.slice(-(scanLimit - prefixLength))}`;
supportsTools: true,
supportsVision: false
},
"tencent/hy3": {
contextWindow: 262144,
maxOutputTokens: 128e3,
supportsTools: true,
"qwen/qwen3.8-flash": {
contextWindow: 1e6,
maxOutputTokens: 131072,
supportsTools: false,
supportsVision: true
},
"qwen/qwen3.8-max": {
// supportsTools: not probed — fails closed
contextWindow: 1e6,
maxOutputTokens: 131072,
supportsTools: false,
supportsVision: false
},
"tencent/hy4-preview": {
// supportsTools: not probed — fails closed
contextWindow: 1048576,
maxOutputTokens: 64e3,
supportsTools: false,
supportsVision: false
},
"xai/grok-4.3": {
Expand All @@ -45677,12 +45759,30 @@ ${value.slice(-(scanLimit - prefixLength))}`;
supportsTools: true,
supportsVision: true
},
"xai/grok-4.6": {
contextWindow: 5e5,
maxOutputTokens: 16384,
supportsTools: true,
supportsVision: true
},
"xai/grok-4.7": {
contextWindow: 5e5,
maxOutputTokens: 16384,
supportsTools: true,
supportsVision: true
},
"xai/grok-build-0.1": {
contextWindow: 256e3,
maxOutputTokens: 16384,
supportsTools: true,
supportsVision: false
},
"xiaomi/mimo-v2.5": {
contextWindow: 1048576,
maxOutputTokens: 131072,
supportsTools: true,
supportsVision: true
},
"xiaomi/mimo-v2.5-pro": {
contextWindow: 1048576,
maxOutputTokens: 131072,
Expand Down Expand Up @@ -46331,6 +46431,19 @@ ${value.slice(-(scanLimit - prefixLength))}`;
latencySensitiveSpeedBoost: 0.08,
affinityFloorGap: { auto: 0.1, eco: 0.22, premium: 0.05 }
};
VERIFIED_TOOL_FALLBACKS = [
"anthropic/claude-fable-5.1",
"anthropic/claude-opus-5.5",
"anthropic/claude-sonnet-5.5",
"google/gemini-3.8-flash",
"openai/gpt-5.1",
"openai/gpt-6-astra",
"openai/gpt-6-luna",
"openai/gpt-6-sol",
"xai/grok-4.6",
"xai/grok-4.7",
"xiaomi/mimo-v2.5"
];
PortfolioStrategy = class {
name = "portfolio";
route(prompt, systemPrompt, maxOutputTokens, options) {
Expand All @@ -46345,8 +46458,17 @@ ${value.slice(-(scanLimit - prefixLength))}`;
const tierConfig = tierConfigs[targetTier];
const configuredCandidates = tierConfig ? getFallbackChain(targetTier, tierConfigs) : [];
const unavailable = new Set(options.unavailableModels ?? []);
const verifiedToolFallbacks = features.needsTools ? VERIFIED_TOOL_FALLBACKS.filter((model2) => options.modelPricing.has(model2)) : [];
if (options.routingProfile !== "premium") {
const fallbackCost = (model2) => estimatedCost(model2, options, features.estimatedInputTokens, maxOutputTokens);
verifiedToolFallbacks.sort((a, b) => fallbackCost(a) - fallbackCost(b));
}
const chain3 = [
.../* @__PURE__ */ new Set([...configuredCandidates, ...evidenceCandidates(features.taskType)])
.../* @__PURE__ */ new Set([
...configuredCandidates,
...evidenceCandidates(features.taskType),
...verifiedToolFallbacks
])
].filter(
(model2) => typeof model2 === "string" && model2.length > 0 && !unavailable.has(model2)
);
Expand Down
2 changes: 1 addition & 1 deletion dist/cli.js.map

Large diffs are not rendered by default.

Loading
Loading