agent-nuvira 2.7.3 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/agents/writer-tool-calling.d.ts +14 -0
- package/dist/agents/agents/writer-tool-calling.d.ts.map +1 -1
- package/dist/agents/agents/writer-tool-calling.js +20 -0
- package/dist/agents/agents/writer-tool-calling.js.map +1 -1
- package/dist/agents/agents/writer.d.ts.map +1 -1
- package/dist/agents/agents/writer.js +15 -4
- package/dist/agents/agents/writer.js.map +1 -1
- package/dist/agents/edit-module.d.ts +7 -0
- package/dist/agents/edit-module.d.ts.map +1 -1
- package/dist/agents/edit-module.js +21 -6
- package/dist/agents/edit-module.js.map +1 -1
- package/dist/agents/orchestrator.d.ts +40 -0
- package/dist/agents/orchestrator.d.ts.map +1 -1
- package/dist/agents/orchestrator.js +116 -27
- package/dist/agents/orchestrator.js.map +1 -1
- package/dist/agents/tool-calling-agent.d.ts +19 -0
- package/dist/agents/tool-calling-agent.d.ts.map +1 -1
- package/dist/agents/tool-calling-agent.js +42 -2
- package/dist/agents/tool-calling-agent.js.map +1 -1
- package/dist/cli/chat.d.ts +55 -1
- package/dist/cli/chat.d.ts.map +1 -1
- package/dist/cli/chat.js +239 -63
- package/dist/cli/chat.js.map +1 -1
- package/dist/cli/cli-program.d.ts +6 -0
- package/dist/cli/cli-program.d.ts.map +1 -0
- package/dist/cli/cli-program.js +222 -0
- package/dist/cli/cli-program.js.map +1 -0
- package/dist/cli/edit.d.ts.map +1 -1
- package/dist/cli/edit.js +18 -3
- package/dist/cli/edit.js.map +1 -1
- package/dist/cli/execute.d.ts.map +1 -1
- package/dist/cli/execute.js +29 -5
- package/dist/cli/execute.js.map +1 -1
- package/dist/cli/failover-runner.d.ts +13 -0
- package/dist/cli/failover-runner.d.ts.map +1 -1
- package/dist/cli/failover-runner.js +11 -0
- package/dist/cli/failover-runner.js.map +1 -1
- package/dist/cli/gateway.d.ts +16 -0
- package/dist/cli/gateway.d.ts.map +1 -1
- package/dist/cli/gateway.js +108 -2
- package/dist/cli/gateway.js.map +1 -1
- package/dist/cli/loop-executor.d.ts.map +1 -1
- package/dist/cli/loop-executor.js +245 -12
- package/dist/cli/loop-executor.js.map +1 -1
- package/dist/cli/plan.d.ts.map +1 -1
- package/dist/cli/plan.js +20 -6
- package/dist/cli/plan.js.map +1 -1
- package/dist/cli/process-control.d.ts +10 -0
- package/dist/cli/process-control.d.ts.map +1 -1
- package/dist/cli/process-control.js +73 -7
- package/dist/cli/process-control.js.map +1 -1
- package/dist/cli/router.d.ts +16 -5
- package/dist/cli/router.d.ts.map +1 -1
- package/dist/cli/router.js +31 -206
- package/dist/cli/router.js.map +1 -1
- package/dist/config/paths.d.ts +23 -0
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +30 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/provider-env.d.ts +37 -0
- package/dist/config/provider-env.d.ts.map +1 -0
- package/dist/config/provider-env.js +86 -0
- package/dist/config/provider-env.js.map +1 -0
- package/dist/context/history.d.ts.map +1 -1
- package/dist/context/history.js +24 -8
- package/dist/context/history.js.map +1 -1
- package/dist/context/session-recall.d.ts +30 -0
- package/dist/context/session-recall.d.ts.map +1 -1
- package/dist/context/session-recall.js +61 -0
- package/dist/context/session-recall.js.map +1 -1
- package/dist/file.js +0 -1
- package/dist/file.js.map +1 -1
- package/dist/gateway/adapters.d.ts +10 -0
- package/dist/gateway/adapters.d.ts.map +1 -1
- package/dist/gateway/adapters.js +4 -1
- package/dist/gateway/adapters.js.map +1 -1
- package/dist/gateway/dedup.d.ts +105 -0
- package/dist/gateway/dedup.d.ts.map +1 -0
- package/dist/gateway/dedup.js +160 -0
- package/dist/gateway/dedup.js.map +1 -0
- package/dist/gateway/heartbeat.d.ts +99 -0
- package/dist/gateway/heartbeat.d.ts.map +1 -0
- package/dist/gateway/heartbeat.js +122 -0
- package/dist/gateway/heartbeat.js.map +1 -0
- package/dist/gateway/inbox.d.ts +14 -1
- package/dist/gateway/inbox.d.ts.map +1 -1
- package/dist/gateway/inbox.js.map +1 -1
- package/dist/gateway/platform-config.d.ts +5 -0
- package/dist/gateway/platform-config.d.ts.map +1 -1
- package/dist/gateway/platform-config.js +8 -13
- package/dist/gateway/platform-config.js.map +1 -1
- package/dist/gateway/registry.d.ts +47 -0
- package/dist/gateway/registry.d.ts.map +1 -1
- package/dist/gateway/registry.js +227 -21
- package/dist/gateway/registry.js.map +1 -1
- package/dist/gateway/whatsapp/baileys-bridge.d.ts +11 -1
- package/dist/gateway/whatsapp/baileys-bridge.d.ts.map +1 -1
- package/dist/gateway/whatsapp/baileys-bridge.js +64 -1
- package/dist/gateway/whatsapp/baileys-bridge.js.map +1 -1
- package/dist/gateway/whatsapp/bridge.d.ts +4 -2
- package/dist/gateway/whatsapp/bridge.d.ts.map +1 -1
- package/dist/gateway/whatsapp/bridge.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/inference/factory.d.ts +16 -0
- package/dist/inference/factory.d.ts.map +1 -1
- package/dist/inference/factory.js +42 -0
- package/dist/inference/factory.js.map +1 -1
- package/dist/inference/gemini-adapter.d.ts.map +1 -1
- package/dist/inference/gemini-adapter.js +3 -0
- package/dist/inference/gemini-adapter.js.map +1 -1
- package/dist/inference/interface.d.ts +12 -0
- package/dist/inference/interface.d.ts.map +1 -1
- package/dist/inference/local-adapter.d.ts +2 -0
- package/dist/inference/local-adapter.d.ts.map +1 -1
- package/dist/inference/local-adapter.js +36 -5
- package/dist/inference/local-adapter.js.map +1 -1
- package/dist/inference/native-tools.d.ts +8 -0
- package/dist/inference/native-tools.d.ts.map +1 -1
- package/dist/inference/native-tools.js +14 -3
- package/dist/inference/native-tools.js.map +1 -1
- package/dist/inference/tool-call-utils.d.ts +66 -7
- package/dist/inference/tool-call-utils.d.ts.map +1 -1
- package/dist/inference/tool-call-utils.js +134 -13
- package/dist/inference/tool-call-utils.js.map +1 -1
- package/dist/learning/auto-router.d.ts.map +1 -1
- package/dist/learning/auto-router.js +90 -5
- package/dist/learning/auto-router.js.map +1 -1
- package/dist/learning/context-budget.d.ts +133 -0
- package/dist/learning/context-budget.d.ts.map +1 -0
- package/dist/learning/context-budget.js +196 -0
- package/dist/learning/context-budget.js.map +1 -0
- package/dist/learning/cost-tracker.d.ts.map +1 -1
- package/dist/learning/cost-tracker.js +20 -8
- package/dist/learning/cost-tracker.js.map +1 -1
- package/dist/learning/eval-framework.d.ts.map +1 -1
- package/dist/learning/eval-framework.js +6 -2
- package/dist/learning/eval-framework.js.map +1 -1
- package/dist/learning/failure-bookkeeping.d.ts +19 -0
- package/dist/learning/failure-bookkeeping.d.ts.map +1 -1
- package/dist/learning/failure-bookkeeping.js +67 -2
- package/dist/learning/failure-bookkeeping.js.map +1 -1
- package/dist/learning/feedback.d.ts.map +1 -1
- package/dist/learning/feedback.js +19 -8
- package/dist/learning/feedback.js.map +1 -1
- package/dist/learning/model-harness.d.ts +76 -0
- package/dist/learning/model-harness.d.ts.map +1 -0
- package/dist/learning/model-harness.js +119 -0
- package/dist/learning/model-harness.js.map +1 -0
- package/dist/learning/model-selection.d.ts +15 -0
- package/dist/learning/model-selection.d.ts.map +1 -1
- package/dist/learning/model-selection.js +27 -1
- package/dist/learning/model-selection.js.map +1 -1
- package/dist/learning/provider-fallback.d.ts +12 -0
- package/dist/learning/provider-fallback.d.ts.map +1 -1
- package/dist/learning/provider-fallback.js +74 -0
- package/dist/learning/provider-fallback.js.map +1 -1
- package/dist/learning/provider-revival.d.ts +106 -0
- package/dist/learning/provider-revival.d.ts.map +1 -0
- package/dist/learning/provider-revival.js +154 -0
- package/dist/learning/provider-revival.js.map +1 -0
- package/dist/learning/resilient-call.d.ts.map +1 -1
- package/dist/learning/resilient-call.js +48 -3
- package/dist/learning/resilient-call.js.map +1 -1
- package/dist/nlu/conversation-gate.d.ts +37 -0
- package/dist/nlu/conversation-gate.d.ts.map +1 -1
- package/dist/nlu/conversation-gate.js +49 -0
- package/dist/nlu/conversation-gate.js.map +1 -1
- package/dist/nlu/schema.d.ts +2 -2
- package/dist/observability/dag-bridge.d.ts +69 -0
- package/dist/observability/dag-bridge.d.ts.map +1 -0
- package/dist/observability/dag-bridge.js +56 -0
- package/dist/observability/dag-bridge.js.map +1 -0
- package/dist/observability/event-bus.d.ts +5 -10
- package/dist/observability/event-bus.d.ts.map +1 -1
- package/dist/observability/event-bus.js +10 -42
- package/dist/observability/event-bus.js.map +1 -1
- package/dist/skills/execution-audit.d.ts.map +1 -1
- package/dist/skills/execution-audit.js +17 -5
- package/dist/skills/execution-audit.js.map +1 -1
- package/dist/skills/sandbox-executor.d.ts +12 -1
- package/dist/skills/sandbox-executor.d.ts.map +1 -1
- package/dist/skills/sandbox-executor.js +28 -6
- package/dist/skills/sandbox-executor.js.map +1 -1
- package/dist/skills/secret-capture.d.ts +45 -1
- package/dist/skills/secret-capture.d.ts.map +1 -1
- package/dist/skills/secret-capture.js +82 -19
- package/dist/skills/secret-capture.js.map +1 -1
- package/dist/skills/skill-env-inventory.d.ts +79 -0
- package/dist/skills/skill-env-inventory.d.ts.map +1 -0
- package/dist/skills/skill-env-inventory.js +167 -0
- package/dist/skills/skill-env-inventory.js.map +1 -0
- package/dist/skills/skill-executor.d.ts +2 -0
- package/dist/skills/skill-executor.d.ts.map +1 -1
- package/dist/skills/skill-executor.js +19 -24
- package/dist/skills/skill-executor.js.map +1 -1
- package/dist/tools/ask-user.d.ts +14 -1
- package/dist/tools/ask-user.d.ts.map +1 -1
- package/dist/tools/ask-user.js +25 -1
- package/dist/tools/ask-user.js.map +1 -1
- package/dist/tools/followup-utils.d.ts +64 -0
- package/dist/tools/followup-utils.d.ts.map +1 -0
- package/dist/tools/followup-utils.js +158 -0
- package/dist/tools/followup-utils.js.map +1 -0
- package/dist/tools/memory-tools.d.ts +35 -0
- package/dist/tools/memory-tools.d.ts.map +1 -1
- package/dist/tools/memory-tools.js +76 -0
- package/dist/tools/memory-tools.js.map +1 -1
- package/dist/tools/pipeline-tool.d.ts.map +1 -1
- package/dist/tools/pipeline-tool.js +8 -3
- package/dist/tools/pipeline-tool.js.map +1 -1
- package/dist/tools/registry.d.ts +25 -12
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +31 -6
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/skill-tool.d.ts.map +1 -1
- package/dist/tools/skill-tool.js +52 -5
- package/dist/tools/skill-tool.js.map +1 -1
- package/dist/tools/tool-loop.d.ts +63 -1
- package/dist/tools/tool-loop.d.ts.map +1 -1
- package/dist/tools/tool-loop.js +305 -66
- package/dist/tools/tool-loop.js.map +1 -1
- package/dist/tools/toolsets.d.ts +19 -3
- package/dist/tools/toolsets.d.ts.map +1 -1
- package/dist/tools/toolsets.js +21 -5
- package/dist/tools/toolsets.js.map +1 -1
- package/dist/utils/env.d.ts.map +1 -1
- package/dist/utils/env.js +9 -13
- package/dist/utils/env.js.map +1 -1
- package/dist/web-dashboard/chat-console.d.ts +13 -1
- package/dist/web-dashboard/chat-console.d.ts.map +1 -1
- package/dist/web-dashboard/chat-console.js +16 -2
- package/dist/web-dashboard/chat-console.js.map +1 -1
- package/dist/web-dashboard/hub-data.d.ts +2 -0
- package/dist/web-dashboard/hub-data.d.ts.map +1 -1
- package/dist/web-dashboard/hub-data.js +4 -0
- package/dist/web-dashboard/hub-data.js.map +1 -1
- package/dist/web-dashboard/server.d.ts +6 -0
- package/dist/web-dashboard/server.d.ts.map +1 -1
- package/dist/web-dashboard/server.js +192 -3
- package/dist/web-dashboard/server.js.map +1 -1
- package/dist/web-dashboard/src/types.d.ts +31 -1
- package/dist/web-dashboard/src/types.d.ts.map +1 -1
- package/package.json +11 -1
- package/src/web-dashboard/public/assets/index-56yPnN_m.js +207 -0
- package/src/web-dashboard/public/assets/index-56yPnN_m.js.map +1 -0
- package/src/web-dashboard/public/assets/{index-C507EUWf.css → index-Cyd6tIew.css} +1 -1
- package/src/web-dashboard/public/index.html +2 -2
- package/dist/example.d.ts +0 -1
- package/dist/example.d.ts.map +0 -1
- package/dist/example.js +0 -3
- package/dist/example.js.map +0 -1
- package/dist/fresh.d.ts +0 -2
- package/dist/fresh.d.ts.map +0 -1
- package/dist/fresh.js +0 -2
- package/dist/fresh.js.map +0 -1
- package/dist/mcp/mcp-dashboard-oauth.d.ts +0 -94
- package/dist/mcp/mcp-dashboard-oauth.d.ts.map +0 -1
- package/dist/mcp/mcp-dashboard-oauth.js +0 -140
- package/dist/mcp/mcp-dashboard-oauth.js.map +0 -1
- package/dist/memory/background-sync.d.ts +0 -107
- package/dist/memory/background-sync.d.ts.map +0 -1
- package/dist/memory/background-sync.js +0 -242
- package/dist/memory/background-sync.js.map +0 -1
- package/dist/memory/cross-session.d.ts +0 -68
- package/dist/memory/cross-session.d.ts.map +0 -1
- package/dist/memory/cross-session.js +0 -153
- package/dist/memory/cross-session.js.map +0 -1
- package/dist/memory/drift-detector.d.ts +0 -76
- package/dist/memory/drift-detector.d.ts.map +0 -1
- package/dist/memory/drift-detector.js +0 -216
- package/dist/memory/drift-detector.js.map +0 -1
- package/dist/memory/enhanced-manager.d.ts +0 -105
- package/dist/memory/enhanced-manager.d.ts.map +0 -1
- package/dist/memory/enhanced-manager.js +0 -280
- package/dist/memory/enhanced-manager.js.map +0 -1
- package/dist/memory/session-extraction.d.ts +0 -93
- package/dist/memory/session-extraction.d.ts.map +0 -1
- package/dist/memory/session-extraction.js +0 -290
- package/dist/memory/session-extraction.js.map +0 -1
- package/dist/memory/sqlite-store.d.ts +0 -208
- package/dist/memory/sqlite-store.d.ts.map +0 -1
- package/dist/memory/sqlite-store.js +0 -556
- package/dist/memory/sqlite-store.js.map +0 -1
- package/dist/skills/daytona-executor.d.ts +0 -78
- package/dist/skills/daytona-executor.d.ts.map +0 -1
- package/dist/skills/daytona-executor.js +0 -256
- package/dist/skills/daytona-executor.js.map +0 -1
- package/dist/skills/modal-executor.d.ts +0 -81
- package/dist/skills/modal-executor.d.ts.map +0 -1
- package/dist/skills/modal-executor.js +0 -285
- package/dist/skills/modal-executor.js.map +0 -1
- package/dist/sync/inventory.d.ts +0 -1
- package/dist/sync/inventory.d.ts.map +0 -1
- package/dist/sync/inventory.js +0 -3
- package/dist/sync/inventory.js.map +0 -1
- package/dist/sync/validate.d.ts +0 -1
- package/dist/sync/validate.d.ts.map +0 -1
- package/dist/sync/validate.js +0 -3
- package/dist/sync/validate.js.map +0 -1
- package/dist/test.d.ts +0 -2
- package/dist/test.d.ts.map +0 -1
- package/dist/test.js +0 -3
- package/dist/test.js.map +0 -1
- package/dist/tools/browser-tool.d.ts +0 -206
- package/dist/tools/browser-tool.d.ts.map +0 -1
- package/dist/tools/browser-tool.js +0 -726
- package/dist/tools/browser-tool.js.map +0 -1
- package/dist/tools/delegate-tool.d.ts +0 -109
- package/dist/tools/delegate-tool.d.ts.map +0 -1
- package/dist/tools/delegate-tool.js +0 -185
- package/dist/tools/delegate-tool.js.map +0 -1
- package/dist/tools/delegation-state.d.ts +0 -87
- package/dist/tools/delegation-state.d.ts.map +0 -1
- package/dist/tools/delegation-state.js +0 -278
- package/dist/tools/delegation-state.js.map +0 -1
- package/dist/tools/desktop-ui.d.ts +0 -148
- package/dist/tools/desktop-ui.d.ts.map +0 -1
- package/dist/tools/desktop-ui.js +0 -486
- package/dist/tools/desktop-ui.js.map +0 -1
- package/dist/tools/image-video-tool.d.ts +0 -88
- package/dist/tools/image-video-tool.d.ts.map +0 -1
- package/dist/tools/image-video-tool.js +0 -276
- package/dist/tools/image-video-tool.js.map +0 -1
- package/dist/tools/kanban-cron-tools.d.ts +0 -92
- package/dist/tools/kanban-cron-tools.d.ts.map +0 -1
- package/dist/tools/kanban-cron-tools.js +0 -197
- package/dist/tools/kanban-cron-tools.js.map +0 -1
- package/dist/tools/messaging-tool.d.ts +0 -127
- package/dist/tools/messaging-tool.d.ts.map +0 -1
- package/dist/tools/messaging-tool.js +0 -314
- package/dist/tools/messaging-tool.js.map +0 -1
- package/dist/tools/modality/generic-caller.d.ts +0 -43
- package/dist/tools/modality/generic-caller.d.ts.map +0 -1
- package/dist/tools/modality/generic-caller.js +0 -254
- package/dist/tools/modality/generic-caller.js.map +0 -1
- package/dist/tools/modality/modality-catalog.d.ts +0 -134
- package/dist/tools/modality/modality-catalog.d.ts.map +0 -1
- package/dist/tools/modality/modality-catalog.js +0 -445
- package/dist/tools/modality/modality-catalog.js.map +0 -1
- package/dist/tools/modality/tool-router.d.ts +0 -81
- package/dist/tools/modality/tool-router.d.ts.map +0 -1
- package/dist/tools/modality/tool-router.js +0 -84
- package/dist/tools/modality/tool-router.js.map +0 -1
- package/dist/tools/security-tools.d.ts +0 -107
- package/dist/tools/security-tools.d.ts.map +0 -1
- package/dist/tools/security-tools.js +0 -264
- package/dist/tools/security-tools.js.map +0 -1
- package/dist/tools/ssh-tool.d.ts +0 -130
- package/dist/tools/ssh-tool.d.ts.map +0 -1
- package/dist/tools/ssh-tool.js +0 -328
- package/dist/tools/ssh-tool.js.map +0 -1
- package/dist/tools/tts-tool.d.ts +0 -91
- package/dist/tools/tts-tool.d.ts.map +0 -1
- package/dist/tools/tts-tool.js +0 -406
- package/dist/tools/tts-tool.js.map +0 -1
- package/dist/utils/shell-detection.d.ts +0 -124
- package/dist/utils/shell-detection.d.ts.map +0 -1
- package/dist/utils/shell-detection.js +0 -305
- package/dist/utils/shell-detection.js.map +0 -1
- package/dist/utils/windows-paths.d.ts +0 -185
- package/dist/utils/windows-paths.d.ts.map +0 -1
- package/dist/utils/windows-paths.js +0 -472
- package/dist/utils/windows-paths.js.map +0 -1
- package/src/web-dashboard/public/assets/index-C4frng1Q.js +0 -207
- package/src/web-dashboard/public/assets/index-C4frng1Q.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"failure-bookkeeping.d.ts","sourceRoot":"","sources":["../../src/learning/failure-bookkeeping.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"failure-bookkeeping.d.ts","sourceRoot":"","sources":["../../src/learning/failure-bookkeeping.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAsC1D,MAAM,WAAW,mBAAmB;IAClC;;;;;OAKG;IACH,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C;;;OAGG;IACH,+BAA+B,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C;;;;;;;;;OASG;IACH,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1C;;;;;OAKG;IACH,aAAa,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACvC;AAED;gFACgF;AAChF,eAAO,MAAM,qCAAqC,IAAI,CAAC;AAEvD,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,mBAAmB,EAC5B,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,GAAG,GAAE,MAAmB,GACvB,OAAO,CAIT;AAID;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,QAAgB,CAAC;AAarD,eAAO,MAAM,uBAAuB,QAAY,CAAC;AAEjD,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,eAAO,MAAM,yBAAyB,QAAY,CAAC;AAEnD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,mBAAmB,EAC5B,YAAY,EAAE,MAAM,EACpB,GAAG,GAAE,MAAmB,GACvB,OAAO,CAMT;AAED,0EAA0E;AAC1E,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,mBAAmB,EAC5B,YAAY,EAAE,MAAM,EACpB,GAAG,GAAE,MAAmB,GACvB,OAAO,CAIT;AAED;;;;;GAKG;AACH,eAAO,MAAM,8BAA8B,QAAY,CAAC;AAIxD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,mBAAmB,EAC5B,YAAY,EAAE,MAAM,EACpB,GAAG,EAAE,OAAO,EACZ,aAAa,EAAE,aAAa,EAC5B,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7D,IAAI,CA2KN"}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import { getQuotaLedger, accountIdForKey } from './quota-ledger.js';
|
|
21
21
|
import { getKeyHygiene } from './key-hygiene.js';
|
|
22
|
-
import { classifyFallbackError, extractRetryAfterMs, getProviderFallback, MIN_RATE_LIMIT_PARK_MS, recordRegistryFailure, } from './provider-fallback.js';
|
|
22
|
+
import { classifyFallbackError, extractRetryAfterMs, getProviderFallback, isHarnessFault, MIN_RATE_LIMIT_PARK_MS, recordRegistryFailure, } from './provider-fallback.js';
|
|
23
23
|
// ─── Session state ──────────────────────────────────────────────────────────
|
|
24
24
|
/**
|
|
25
25
|
* Per-session failure state that the caller owns (so the helper stays pure and
|
|
@@ -65,6 +65,39 @@ export function isModelSessionExcluded(session, providerType, model, now = Date.
|
|
|
65
65
|
* session-level exclusion and the breaker's scoring cooldown expire together.
|
|
66
66
|
*/
|
|
67
67
|
export const RATE_LIMIT_EXCLUSION_MS = 2 * 60 * 1000;
|
|
68
|
+
// ─── T4 — RPM/TPM rapid-failure breaker ─────────────────────────────────────
|
|
69
|
+
//
|
|
70
|
+
// Free tiers meter requests/tokens PER MINUTE, but a 429 with no reset hint
|
|
71
|
+
// only parked the provider for MIN_RATE_LIMIT_PARK_MS (10s) — shorter than the
|
|
72
|
+
// minute an RPM window needs. A tool-heavy loop then re-picked the same free
|
|
73
|
+
// provider on its very next step and 429ed again (observed live on the loop
|
|
74
|
+
// engine: gemini free tier, limit 15 RPM, rapid tool-call steps). This breaker
|
|
75
|
+
// watches for REPEATED failures of one provider inside a short window and
|
|
76
|
+
// raises the park floor to a full minute, so the provider rests for the rest of
|
|
77
|
+
// the window instead of hot-looping against it.
|
|
78
|
+
export const RAPID_FAILURE_WINDOW_MS = 60 * 1000;
|
|
79
|
+
export const RAPID_FAILURE_THRESHOLD = 3;
|
|
80
|
+
export const RAPID_FAILURE_COOLDOWN_MS = 60 * 1000;
|
|
81
|
+
/**
|
|
82
|
+
* Record one failure for a provider and report whether it has now failed
|
|
83
|
+
* `RAPID_FAILURE_THRESHOLD` times inside `RAPID_FAILURE_WINDOW_MS` — the point
|
|
84
|
+
* at which waiting the base park length would be pointless. State lives on the
|
|
85
|
+
* caller's session so a burst is measured per turn/run, never globally.
|
|
86
|
+
*/
|
|
87
|
+
export function recordRapidFailure(session, providerType, now = Date.now()) {
|
|
88
|
+
const map = (session.rapidFailures ??= new Map());
|
|
89
|
+
const times = (map.get(providerType) ?? []).filter((t) => now - t < RAPID_FAILURE_WINDOW_MS);
|
|
90
|
+
times.push(now);
|
|
91
|
+
map.set(providerType, times);
|
|
92
|
+
return times.length >= RAPID_FAILURE_THRESHOLD;
|
|
93
|
+
}
|
|
94
|
+
/** True when this provider is currently inside a rapid-failure window. */
|
|
95
|
+
export function isRapidFailureProvider(session, providerType, now = Date.now()) {
|
|
96
|
+
const times = session.rapidFailures?.get(providerType);
|
|
97
|
+
if (!times)
|
|
98
|
+
return false;
|
|
99
|
+
return times.filter((t) => now - t < RAPID_FAILURE_WINDOW_MS).length >= RAPID_FAILURE_THRESHOLD;
|
|
100
|
+
}
|
|
68
101
|
/**
|
|
69
102
|
* How long a server/network/timeout/unknown failure excludes a provider from
|
|
70
103
|
* auto routing (ms). Shorter than rate-limit so a flaky-but-alive provider is
|
|
@@ -93,6 +126,30 @@ export const TRANSIENT_FAILURE_EXCLUSION_MS = 60 * 1000;
|
|
|
93
126
|
export function recordActionFailure(session, providerType, err, configManager, options) {
|
|
94
127
|
const failureKind = classifyFallbackError(err);
|
|
95
128
|
const now = Date.now();
|
|
129
|
+
// ── 0. Harness faults are NOT provider or model failures ───────────────
|
|
130
|
+
// A deterministic request-shape rejection (Gemini's "function call is
|
|
131
|
+
// missing a thought_signature" being the live case that motivated this) fails
|
|
132
|
+
// identically for EVERY model on that provider, forever. Attributing it to the
|
|
133
|
+
// provider/model is the most corrupting thing that can happen to the learning
|
|
134
|
+
// loop: it parks a healthy provider, decays a healthy model's health score,
|
|
135
|
+
// opens the circuit breaker, and teaches the bandit "this model is weak" from
|
|
136
|
+
// a bug that would have broken any model on that transport — so the router
|
|
137
|
+
// then AVOIDS the model that was actually fine.
|
|
138
|
+
//
|
|
139
|
+
// Nothing is booked here on purpose: no session exclusion, no quota park, no
|
|
140
|
+
// registry write-through, no breaker trip. The FAILOVER still happens (the
|
|
141
|
+
// caller re-routes; a different provider's adapter may not share the defect) —
|
|
142
|
+
// only the attribution is withheld. Recorded on the quota timeline so the dash
|
|
143
|
+
// can show why a run failed without it ever touching routing scores.
|
|
144
|
+
if (isHarnessFault(err)) {
|
|
145
|
+
try {
|
|
146
|
+
getQuotaLedger().recordEvent('failover', providerType, 'harness-fault (not attributed)');
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
// Best-effort — event bookkeeping must not crash a call.
|
|
150
|
+
}
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
96
153
|
// ── 1. Session-level exclusion ────────────────────────────────────────
|
|
97
154
|
if (failureKind === 'auth') {
|
|
98
155
|
// Expired token/key — definitive for the rest of the session.
|
|
@@ -167,9 +224,17 @@ export function recordActionFailure(session, providerType, err, configManager, o
|
|
|
167
224
|
// limits — "try again in 16s" means exactly that, not "wait 24 hours")
|
|
168
225
|
// 2. No hint but user configured windowMs → use it (represents the known window)
|
|
169
226
|
// 3. No hint, no config → short default (10s) — a bare 429 means "try soon"
|
|
170
|
-
|
|
227
|
+
let parkMs = hintMs !== null
|
|
171
228
|
? Math.max(hintMs, MIN_RATE_LIMIT_PARK_MS) // provider hint wins (floored to prevent hot-loop)
|
|
172
229
|
: hasExplicitConfig ? windowMs : MIN_RATE_LIMIT_PARK_MS;
|
|
230
|
+
// T4 — RPM/TPM rapid-failure escalation. Repeated failures of one provider
|
|
231
|
+
// inside the window mean its limit is being re-hit faster than it resets, so
|
|
232
|
+
// a 10s base park is useless — raise the floor to a full minute (the RPM
|
|
233
|
+
// window). A single blip still uses the short base park, so nothing regresses
|
|
234
|
+
// for a provider that merely hiccupped once.
|
|
235
|
+
if (recordRapidFailure(session, providerType, now)) {
|
|
236
|
+
parkMs = Math.max(parkMs, RAPID_FAILURE_COOLDOWN_MS);
|
|
237
|
+
}
|
|
173
238
|
// PER-MODEL QUOTA KEY: park the model that ACTUALLY 429ed, not the whole
|
|
174
239
|
// provider. Its siblings have their own limits and must stay routable
|
|
175
240
|
// ("use every available model before giving up"). The registry mirrors the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"failure-bookkeeping.js","sourceRoot":"","sources":["../../src/learning/failure-bookkeeping.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,GAEtB,MAAM,wBAAwB,CAAC;AAEhC,+EAA+E;AAE/E;;;GAGG;AACH;;;;GAIG;AACH,SAAS,iBAAiB,CACxB,YAAoB,EACpB,MAA0B,EAC1B,KAAa,EACb,MAAc;IAEd,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,IAAI,CAAC;QACH,cAAc,EAAE,CAAC,WAAW,CAAC,YAAY,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACrF,CAAC;IAAC,MAAM,CAAC;QACP,2DAA2D;IAC7D,CAAC;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"failure-bookkeeping.js","sourceRoot":"","sources":["../../src/learning/failure-bookkeeping.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../src/learning/feedback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAWH,kDAAkD;AAClD,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAElE,+BAA+B;AAC/B,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;CACnD;
|
|
1
|
+
{"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../../src/learning/feedback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAWH,kDAAkD;AAClD,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAElE,+BAA+B;AAC/B,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,4CAA4C;IAC5C,YAAY,EAAE,MAAM,CAAC;IACrB,kBAAkB;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qCAAqC;AACrC,MAAM,WAAW,aAAa;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC;CACnD;AA6BD,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAuB;;IAQtC;;OAEG;IACH,MAAM,CACJ,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,GACA,aAAa;IAwBhB;;OAEG;IACH,MAAM,IAAI,aAAa,EAAE;IAIzB;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,EAAE;IAItD;;OAEG;IACH,aAAa,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAQvD;;;OAGG;IACH,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAS1C;;OAEG;IACH,QAAQ,IAAI,aAAa;IAsCzB;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb,OAAO,CAAC,IAAI;IAaZ,OAAO,CAAC,IAAI;CAKb;AAMD,wBAAgB,gBAAgB,IAAI,aAAa,CAKhD;AAED,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|
|
@@ -14,12 +14,21 @@
|
|
|
14
14
|
* - Feedback-driven pattern validation
|
|
15
15
|
*/
|
|
16
16
|
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
17
|
-
import { resolveNuviraHome } from '../config/paths.js';
|
|
17
|
+
import { envBuff, resolveNuviraHome } from '../config/paths.js';
|
|
18
18
|
import { join } from 'node:path';
|
|
19
19
|
// ─── Constants ──────────────────────────────────────────────────────────────
|
|
20
|
-
const MEMORY_DIR = join(resolveNuviraHome(), 'memory');
|
|
21
|
-
const FEEDBACK_PATH = join(MEMORY_DIR, 'feedback.json');
|
|
22
20
|
const CURRENT_VERSION = 1;
|
|
21
|
+
/**
|
|
22
|
+
* Feedback-store location — resolved LAZILY through the standard
|
|
23
|
+
* `NUVIRA_MEMORY_DIR` override (see cost-tracker.ts). A module-load constant
|
|
24
|
+
* ignored the override and wrote into the real profile from isolated runs.
|
|
25
|
+
*/
|
|
26
|
+
function memoryDir() {
|
|
27
|
+
return envBuff('MEMORY_DIR') || join(resolveNuviraHome(), 'memory');
|
|
28
|
+
}
|
|
29
|
+
function feedbackPath() {
|
|
30
|
+
return join(memoryDir(), 'feedback.json');
|
|
31
|
+
}
|
|
23
32
|
const MAX_ENTRIES = 1000;
|
|
24
33
|
const TREND_WINDOW = 10; // Last N ratings for trend calculation
|
|
25
34
|
// ─── FeedbackStore ──────────────────────────────────────────────────────────
|
|
@@ -133,9 +142,10 @@ export class FeedbackStore {
|
|
|
133
142
|
load() {
|
|
134
143
|
try {
|
|
135
144
|
ensureDir();
|
|
136
|
-
|
|
145
|
+
const path = feedbackPath();
|
|
146
|
+
if (!existsSync(path))
|
|
137
147
|
return [];
|
|
138
|
-
const raw = readFileSync(
|
|
148
|
+
const raw = readFileSync(path, 'utf-8');
|
|
139
149
|
const data = JSON.parse(raw);
|
|
140
150
|
return data.entries || [];
|
|
141
151
|
}
|
|
@@ -146,7 +156,7 @@ export class FeedbackStore {
|
|
|
146
156
|
save() {
|
|
147
157
|
ensureDir();
|
|
148
158
|
const data = { entries: this.entries, version: CURRENT_VERSION };
|
|
149
|
-
writeFileSync(
|
|
159
|
+
writeFileSync(feedbackPath(), JSON.stringify(data, null, 2), 'utf-8');
|
|
150
160
|
}
|
|
151
161
|
}
|
|
152
162
|
// ─── Singleton ──────────────────────────────────────────────────────────────
|
|
@@ -162,8 +172,9 @@ export function resetFeedbackStore() {
|
|
|
162
172
|
}
|
|
163
173
|
// ─── Helpers ────────────────────────────────────────────────────────────────
|
|
164
174
|
function ensureDir() {
|
|
165
|
-
|
|
166
|
-
|
|
175
|
+
const dir = memoryDir();
|
|
176
|
+
if (!existsSync(dir)) {
|
|
177
|
+
mkdirSync(dir, { recursive: true });
|
|
167
178
|
}
|
|
168
179
|
}
|
|
169
180
|
//# sourceMappingURL=feedback.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/learning/feedback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../../src/learning/feedback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AA8CjC,+EAA+E;AAE/E,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B;;;;GAIG;AACH,SAAS,SAAS;IAChB,OAAO,OAAO,CAAC,YAAY,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,EAAE,QAAQ,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,IAAI,CAAC,SAAS,EAAE,EAAE,eAAe,CAAC,CAAC;AAC5C,CAAC;AACD,MAAM,WAAW,GAAG,IAAI,CAAC;AACzB,MAAM,YAAY,GAAG,EAAE,CAAC,CAAC,uCAAuC;AAEhE,+EAA+E;AAE/E,MAAM,OAAO,aAAa;IAChB,OAAO,GAAoB,EAAE,CAAC;IAEtC;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,2EAA2E;IAE3E;;OAEG;IACH,MAAM,CACJ,YAAoB,EACpB,MAAc,EACd,OAKC;QAED,MAAM,KAAK,GAAkB;YAC3B,EAAE,EAAE,YAAY,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACtE,YAAY;YACZ,MAAM;YACN,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;QAEF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEzB,oBAAoB;QACpB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,YAAoB;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,YAAY,CAAC,CAAC;IACrE,CAAC;IAED;;OAEG;IACH,aAAa,CAAC,YAAoB;QAChC,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO;aACpC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,YAAY,CAAC;aAC9C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QAE7C,OAAO,kBAAkB,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IACvC,CAAC;IAED;;;OAGG;IACH,kBAAkB,CAAC,MAAc;QAC/B,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,UAAU,CAAC,CAAC,OAAO,GAAG,CAAC;YAC5B,KAAK,UAAU,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;YAC7B,KAAK,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC;YACzB,KAAK,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAClC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;QACzG,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;QAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;QAC7E,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;QAE3E,qCAAqC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC;QACjD,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;QAC7E,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;QAC7E,MAAM,WAAW,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,GAAG,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC;QAE9F,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;QAC5G,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM,CAAC;QAC5G,MAAM,YAAY,GAAG,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC;QAEnG,IAAI,WAAiD,CAAC;QACtD,IAAI,WAAW,GAAG,YAAY,GAAG,GAAG,EAAE,CAAC;YACrC,WAAW,GAAG,WAAW,CAAC;QAC5B,CAAC;aAAM,IAAI,WAAW,GAAG,YAAY,GAAG,GAAG,EAAE,CAAC;YAC5C,WAAW,GAAG,WAAW,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,WAAW,GAAG,QAAQ,CAAC;QACzB,CAAC;QAED,OAAO;YACL,YAAY,EAAE,KAAK;YACnB,aAAa,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAChD,aAAa,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAChD,YAAY,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC9C,WAAW;SACZ,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,IAAI,EAAE,CAAC;IACd,CAAC;IAED,0EAA0E;IAElE,IAAI;QACV,IAAI,CAAC;YACH,SAAS,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;YAC5B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,OAAO,EAAE,CAAC;YACjC,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACxC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;YAC7C,OAAO,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAEO,IAAI;QACV,SAAS,EAAE,CAAC;QACZ,MAAM,IAAI,GAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC;QAC/E,aAAa,CAAC,YAAY,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;CACF;AAED,+EAA+E;AAE/E,IAAI,aAAa,GAAyB,IAAI,CAAC;AAE/C,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;IACtC,CAAC;IACD,OAAO,aAAa,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,aAAa,GAAG,IAAI,CAAC;AACvB,CAAC;AAED,+EAA+E;AAE/E,SAAS,SAAS;IAChB,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Harness Profile (R1) — fit the harness to the MODEL, not just to config.
|
|
3
|
+
*
|
|
4
|
+
* ROOT CAUSE this module exists to fix: every harness decision in the agent loop
|
|
5
|
+
* was made without knowing which model would run. `getLoopExposureMode(cm)`
|
|
6
|
+
* reads a config key and returns the same value for a 0.5B local model and for
|
|
7
|
+
* gpt-oss:120b; the transport choice (`generateTools` vs the JSON contract) is
|
|
8
|
+
* made per candidate and only learns a model cannot take native tools by first
|
|
9
|
+
* burning a 400 on it, every turn, because the memo is per-call. Effective
|
|
10
|
+
* capability is `model × (1 − harness tax)`, so a fixed harness taxes the weak
|
|
11
|
+
* model hardest — which is why a smaller model elsewhere can outperform a 120B
|
|
12
|
+
* here.
|
|
13
|
+
*
|
|
14
|
+
* This is deliberately a PURE function: no I/O, no registry, no config reads
|
|
15
|
+
* beyond the exposure the caller already resolved. That keeps it cheap enough to
|
|
16
|
+
* call per candidate, trivial to test, and free of import-cycle risk (the loop
|
|
17
|
+
* and the CLI both depend on it, so it must not depend on them).
|
|
18
|
+
*
|
|
19
|
+
* Model knowledge here is name/family based, with a documented rationale per
|
|
20
|
+
* rule. Where a caller knows the real context window (the model registry records
|
|
21
|
+
* it from a provider's `listModels` probe), it should pass it: the context gate
|
|
22
|
+
* is the difference between a 4K model receiving ~3.8K tokens of schemas and
|
|
23
|
+
* receiving ~17K tokens of them and dying.
|
|
24
|
+
*/
|
|
25
|
+
/** How tool calls reach the model. */
|
|
26
|
+
export type HarnessTransport = 'native' | 'json';
|
|
27
|
+
export interface ModelHarnessProfile {
|
|
28
|
+
/**
|
|
29
|
+
* Tool exposure. `tiered` starts at the CORE primitive set (~16 schemas,
|
|
30
|
+
* ~3.8K tokens/step) and loads domain toolsets mid-turn via `tool_search`;
|
|
31
|
+
* `all` hands over every schema (~110, ~17K tokens/step).
|
|
32
|
+
*/
|
|
33
|
+
exposure: 'tiered' | 'all';
|
|
34
|
+
/** Native provider tool-calling, or the explicit JSON tool contract. */
|
|
35
|
+
transport: HarnessTransport;
|
|
36
|
+
/** Bound on concurrent read-only tool calls in one step. */
|
|
37
|
+
maxParallelReads: number;
|
|
38
|
+
/** Human-readable justification — logged, and asserted in tests. */
|
|
39
|
+
reason: string;
|
|
40
|
+
}
|
|
41
|
+
export interface ModelHarnessInput {
|
|
42
|
+
/** Model tag as the provider knows it (e.g. `gpt-oss:120b`, `qwen2.5:0.5b`). */
|
|
43
|
+
model?: string;
|
|
44
|
+
/** Exposure resolved from config (`tools.loopExposure`), the user's opt-in. */
|
|
45
|
+
configExposure?: 'tiered' | 'all';
|
|
46
|
+
/** Real context window in tokens when the caller knows it (registry/probe). */
|
|
47
|
+
contextLength?: number;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Resolve the harness for one model. Pure and side-effect free.
|
|
51
|
+
*
|
|
52
|
+
* Precedence: a tiny model always gets the tightened harness (it cannot handle
|
|
53
|
+
* the wide surface); otherwise the caller's config choice is honoured, except
|
|
54
|
+
* that `all` requires enough context to pay for it.
|
|
55
|
+
*/
|
|
56
|
+
export declare function resolveModelHarnessProfile(input: ModelHarnessInput): ModelHarnessProfile;
|
|
57
|
+
/**
|
|
58
|
+
* Is this model small enough that the wide harness actively hurts it?
|
|
59
|
+
* Exported because more than one seam needs the same answer.
|
|
60
|
+
*/
|
|
61
|
+
export declare function isTinyModel(model: string | undefined): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Should this model skip a native tool-calling attempt entirely?
|
|
64
|
+
*
|
|
65
|
+
* The CLI used to find out by trying: a model without native support answered
|
|
66
|
+
* with a 400, and the JSON contract took over — re-paid on every turn because
|
|
67
|
+
* the refusal memo never outlived the call. Asking this up front turns that into
|
|
68
|
+
* a deterministic transport decision.
|
|
69
|
+
*
|
|
70
|
+
* Deliberately narrow: it answers `true` only on POSITIVE evidence of weakness
|
|
71
|
+
* (a tiny model). An unrecognised family still attempts native tools and falls
|
|
72
|
+
* back on the existing 400 → JSON path, so a model this file has never heard of
|
|
73
|
+
* cannot silently lose the fast path.
|
|
74
|
+
*/
|
|
75
|
+
export declare function shouldSkipNativeTools(input: ModelHarnessInput): boolean;
|
|
76
|
+
//# sourceMappingURL=model-harness.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-harness.d.ts","sourceRoot":"","sources":["../../src/learning/model-harness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,sCAAsC;AACtC,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,MAAM,CAAC;AAEjD,MAAM,WAAW,mBAAmB;IAClC;;;;OAIG;IACH,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAAC;IAC3B,wEAAwE;IACxE,SAAS,EAAE,gBAAgB,CAAC;IAC5B,4DAA4D;IAC5D,gBAAgB,EAAE,MAAM,CAAC;IACzB,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+EAA+E;IAC/E,cAAc,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IAClC,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAmCD;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,iBAAiB,GAAG,mBAAmB,CAoCxF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAG9D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAEvE"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model Harness Profile (R1) — fit the harness to the MODEL, not just to config.
|
|
3
|
+
*
|
|
4
|
+
* ROOT CAUSE this module exists to fix: every harness decision in the agent loop
|
|
5
|
+
* was made without knowing which model would run. `getLoopExposureMode(cm)`
|
|
6
|
+
* reads a config key and returns the same value for a 0.5B local model and for
|
|
7
|
+
* gpt-oss:120b; the transport choice (`generateTools` vs the JSON contract) is
|
|
8
|
+
* made per candidate and only learns a model cannot take native tools by first
|
|
9
|
+
* burning a 400 on it, every turn, because the memo is per-call. Effective
|
|
10
|
+
* capability is `model × (1 − harness tax)`, so a fixed harness taxes the weak
|
|
11
|
+
* model hardest — which is why a smaller model elsewhere can outperform a 120B
|
|
12
|
+
* here.
|
|
13
|
+
*
|
|
14
|
+
* This is deliberately a PURE function: no I/O, no registry, no config reads
|
|
15
|
+
* beyond the exposure the caller already resolved. That keeps it cheap enough to
|
|
16
|
+
* call per candidate, trivial to test, and free of import-cycle risk (the loop
|
|
17
|
+
* and the CLI both depend on it, so it must not depend on them).
|
|
18
|
+
*
|
|
19
|
+
* Model knowledge here is name/family based, with a documented rationale per
|
|
20
|
+
* rule. Where a caller knows the real context window (the model registry records
|
|
21
|
+
* it from a provider's `listModels` probe), it should pass it: the context gate
|
|
22
|
+
* is the difference between a 4K model receiving ~3.8K tokens of schemas and
|
|
23
|
+
* receiving ~17K tokens of them and dying.
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* Models at or below ~4B effective parameters. They are the ones that visibly
|
|
27
|
+
* fail on a wide schema wall and on multi-call steps, so they get the tightest
|
|
28
|
+
* harness. Matches `:0.5b`, `:1b`, `:1.5b`, `:3b`, `:4b`, `:e2b`, `:e4b` — but
|
|
29
|
+
* deliberately NOT `:20b`, `:70b`, `:120b`.
|
|
30
|
+
*/
|
|
31
|
+
const TINY_MODEL = /(?:[:@\-])(?:0\.\d+|[1-4]|e[1-4])b\b/i;
|
|
32
|
+
/** Families that are tiny regardless of tag (no size in the name). */
|
|
33
|
+
// Trailing version digits are part of the name (`phi3`, `phi-3`), so the family
|
|
34
|
+
// alternates allow a numeric suffix: a trailing `\b` right after `phi` would
|
|
35
|
+
// never match `phi3` (there is no word boundary between `i` and `3`).
|
|
36
|
+
const TINY_FAMILY = /\b(phi[\d.\-]*|tinyllama|smollm|flan-t5)\b/i;
|
|
37
|
+
/**
|
|
38
|
+
* Families that ship an OpenAI-compatible (or harmony) tool-calling API. For
|
|
39
|
+
* these, native tools are the fast and reliable path; everything else starts on
|
|
40
|
+
* the JSON contract rather than discovering a 400 first.
|
|
41
|
+
*/
|
|
42
|
+
const NATIVE_TOOL_FAMILIES = /\b(gpt-oss|gpt-4|gpt-4o|gpt-4\.1|gpt-5|o1|o3|o4[-:]|claude|gemini|qwen|llama-?3\.[123]|mixtral|mistral|magistral|devstral|glm-?4|command-r|deepseek|kimi|grok|minimax|liquid|granite|hermes|firefunction)\b/i;
|
|
43
|
+
/**
|
|
44
|
+
* `all` exposure costs roughly 17K tokens of schema per step. A model whose
|
|
45
|
+
* window cannot hold that plus the thread must never be handed it, whatever the
|
|
46
|
+
* config says — that is the schema wall that kills small-context models.
|
|
47
|
+
*/
|
|
48
|
+
const ALL_EXPOSURE_MIN_CONTEXT = 32_000;
|
|
49
|
+
const STRONG_PARALLEL_READS = 4;
|
|
50
|
+
/** Small models rarely emit parallel calls, and interleaved results confuse them. */
|
|
51
|
+
const TINY_PARALLEL_READS = 1;
|
|
52
|
+
/**
|
|
53
|
+
* Resolve the harness for one model. Pure and side-effect free.
|
|
54
|
+
*
|
|
55
|
+
* Precedence: a tiny model always gets the tightened harness (it cannot handle
|
|
56
|
+
* the wide surface); otherwise the caller's config choice is honoured, except
|
|
57
|
+
* that `all` requires enough context to pay for it.
|
|
58
|
+
*/
|
|
59
|
+
export function resolveModelHarnessProfile(input) {
|
|
60
|
+
const model = (input.model ?? '').trim();
|
|
61
|
+
const configExposure = input.configExposure ?? 'tiered';
|
|
62
|
+
const isTiny = isTinyModel(model);
|
|
63
|
+
const hasNativeTools = NATIVE_TOOL_FAMILIES.test(model);
|
|
64
|
+
const native = hasNativeTools && !isTiny;
|
|
65
|
+
// Native tools are the fast path only where we actually expect support;
|
|
66
|
+
// otherwise the JSON contract is the deterministic answer instead of a 400.
|
|
67
|
+
const transport = native ? 'native' : 'json';
|
|
68
|
+
let exposure = 'tiered';
|
|
69
|
+
let reason;
|
|
70
|
+
if (isTiny) {
|
|
71
|
+
exposure = 'tiered';
|
|
72
|
+
reason = `tiny model (${model || 'unknown'}) — tiered exposure, ${transport} transport`;
|
|
73
|
+
}
|
|
74
|
+
else if (configExposure === 'all') {
|
|
75
|
+
const window = input.contextLength;
|
|
76
|
+
if (window === undefined || window >= ALL_EXPOSURE_MIN_CONTEXT) {
|
|
77
|
+
exposure = 'all';
|
|
78
|
+
reason = `config opted into full exposure and ${window === undefined ? 'window is unknown' : `window ${window} >= ${ALL_EXPOSURE_MIN_CONTEXT}`}`;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
exposure = 'tiered';
|
|
82
|
+
reason = `config opted into full exposure but window ${window} < ${ALL_EXPOSURE_MIN_CONTEXT} (~17K tokens of schemas would not fit)`;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
reason = `config exposure '${configExposure}'${native ? '' : ` — ${transport} transport for unknown/weak tool-calling family`}`;
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
exposure,
|
|
90
|
+
transport,
|
|
91
|
+
maxParallelReads: isTiny ? TINY_PARALLEL_READS : STRONG_PARALLEL_READS,
|
|
92
|
+
reason,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Is this model small enough that the wide harness actively hurts it?
|
|
97
|
+
* Exported because more than one seam needs the same answer.
|
|
98
|
+
*/
|
|
99
|
+
export function isTinyModel(model) {
|
|
100
|
+
const tag = (model ?? '').trim();
|
|
101
|
+
return TINY_MODEL.test(tag) || TINY_FAMILY.test(tag);
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Should this model skip a native tool-calling attempt entirely?
|
|
105
|
+
*
|
|
106
|
+
* The CLI used to find out by trying: a model without native support answered
|
|
107
|
+
* with a 400, and the JSON contract took over — re-paid on every turn because
|
|
108
|
+
* the refusal memo never outlived the call. Asking this up front turns that into
|
|
109
|
+
* a deterministic transport decision.
|
|
110
|
+
*
|
|
111
|
+
* Deliberately narrow: it answers `true` only on POSITIVE evidence of weakness
|
|
112
|
+
* (a tiny model). An unrecognised family still attempts native tools and falls
|
|
113
|
+
* back on the existing 400 → JSON path, so a model this file has never heard of
|
|
114
|
+
* cannot silently lose the fast path.
|
|
115
|
+
*/
|
|
116
|
+
export function shouldSkipNativeTools(input) {
|
|
117
|
+
return isTinyModel(input.model);
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=model-harness.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-harness.js","sourceRoot":"","sources":["../../src/learning/model-harness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AA6BH;;;;;GAKG;AACH,MAAM,UAAU,GAAG,uCAAuC,CAAC;AAE3D,sEAAsE;AACtE,gFAAgF;AAChF,6EAA6E;AAC7E,sEAAsE;AACtE,MAAM,WAAW,GAAG,6CAA6C,CAAC;AAElE;;;;GAIG;AACH,MAAM,oBAAoB,GACxB,8MAA8M,CAAC;AAEjN;;;;GAIG;AACH,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAExC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,qFAAqF;AACrF,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAE9B;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAwB;IACjE,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzC,MAAM,cAAc,GAAG,KAAK,CAAC,cAAc,IAAI,QAAQ,CAAC;IACxD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,cAAc,IAAI,CAAC,MAAM,CAAC;IAEzC,wEAAwE;IACxE,4EAA4E;IAC5E,MAAM,SAAS,GAAqB,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;IAE/D,IAAI,QAAQ,GAAqB,QAAQ,CAAC;IAC1C,IAAI,MAAc,CAAC;IAEnB,IAAI,MAAM,EAAE,CAAC;QACX,QAAQ,GAAG,QAAQ,CAAC;QACpB,MAAM,GAAG,eAAe,KAAK,IAAI,SAAS,wBAAwB,SAAS,YAAY,CAAC;IAC1F,CAAC;SAAM,IAAI,cAAc,KAAK,KAAK,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;QACnC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,IAAI,wBAAwB,EAAE,CAAC;YAC/D,QAAQ,GAAG,KAAK,CAAC;YACjB,MAAM,GAAG,uCAAuC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,MAAM,OAAO,wBAAwB,EAAE,EAAE,CAAC;QACnJ,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,QAAQ,CAAC;YACpB,MAAM,GAAG,8CAA8C,MAAM,MAAM,wBAAwB,yCAAyC,CAAC;QACvI,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,oBAAoB,cAAc,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,SAAS,iDAAiD,EAAE,CAAC;IAClI,CAAC;IAED,OAAO;QACL,QAAQ;QACR,SAAS;QACT,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,qBAAqB;QACtE,MAAM;KACP,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,KAAyB;IACnD,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACjC,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,qBAAqB,CAAC,KAAwB;IAC5D,OAAO,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -41,10 +41,25 @@ export declare const KEYLESS_PROVIDERS: string[];
|
|
|
41
41
|
* reachability is probed later by isAvailable(), never assumed here.
|
|
42
42
|
*/
|
|
43
43
|
export declare function hasCredentials(configManager: ConfigManager, provider: string): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* The error rate above which a model is DEPRIORITIZED (not excluded): at 0.6 it
|
|
46
|
+
* fails roughly 3 times in 5, so preferring a healthier sibling is worth it —
|
|
47
|
+
* but if it is the only verified option it must still be usable, because a
|
|
48
|
+
* weak candidate beats no candidate.
|
|
49
|
+
*
|
|
50
|
+
* Observed live: routing served `groq/compound-mini` at errorRate 0.89 while
|
|
51
|
+
* healthy siblings sat available, and every turn answered by it was poor or
|
|
52
|
+
* failed outright.
|
|
53
|
+
*/
|
|
54
|
+
export declare const MODEL_HEALTH_CEILING = 0.6;
|
|
44
55
|
/**
|
|
45
56
|
* Verified working models for a provider, ranked by learned health:
|
|
46
57
|
* lowest error rate first, then lowest latency, then most recently verified.
|
|
47
58
|
* Empty when nothing has been verified yet (cold start / no keys).
|
|
59
|
+
*
|
|
60
|
+
* MODELS AT/ABOVE `MODEL_HEALTH_CEILING` SORT AFTER THE HEALTHY ONES but are
|
|
61
|
+
* never removed: "deprioritize, never exclude" — a burning provider you can
|
|
62
|
+
* still fall back TO is worth more than a clean-looking empty pool.
|
|
48
63
|
*/
|
|
49
64
|
export declare function preferredModelsFor(provider: string): string[];
|
|
50
65
|
export interface RankedProvider {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-selection.d.ts","sourceRoot":"","sources":["../../src/learning/model-selection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAU1D,qFAAqF;AACrF,eAAO,MAAM,iBAAiB,qEAAsE,CAAC;AAErG;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,CAAC;AAMnE;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAA6B,CAAC;AAEpE;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAOtF;AAED
|
|
1
|
+
{"version":3,"file":"model-selection.d.ts","sourceRoot":"","sources":["../../src/learning/model-selection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAU1D,qFAAqF;AACrF,eAAO,MAAM,iBAAiB,qEAAsE,CAAC;AAErG;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,CAAC;AAMnE;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,EAA6B,CAAC;AAEpE;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAOtF;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAuC7D;AAcD,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,aAAa,GAAG,cAAc,EAAE,CAiErF;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,aAAa,EAAE,aAAa,GAAG,MAAM,CAE3E;AAED,gFAAgF;AAChF,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACnC;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,iBAAiB,EAC1B,aAAa,CAAC,EAAE,aAAa,GAC5B;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CA0BjD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGxG;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAS1F;AAED,qFAAqF;AACrF,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,aAAa,GAAG,MAAM,CAa5E"}
|
|
@@ -57,14 +57,29 @@ export function hasCredentials(configManager, provider) {
|
|
|
57
57
|
return false;
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* The error rate above which a model is DEPRIORITIZED (not excluded): at 0.6 it
|
|
62
|
+
* fails roughly 3 times in 5, so preferring a healthier sibling is worth it —
|
|
63
|
+
* but if it is the only verified option it must still be usable, because a
|
|
64
|
+
* weak candidate beats no candidate.
|
|
65
|
+
*
|
|
66
|
+
* Observed live: routing served `groq/compound-mini` at errorRate 0.89 while
|
|
67
|
+
* healthy siblings sat available, and every turn answered by it was poor or
|
|
68
|
+
* failed outright.
|
|
69
|
+
*/
|
|
70
|
+
export const MODEL_HEALTH_CEILING = 0.6;
|
|
60
71
|
/**
|
|
61
72
|
* Verified working models for a provider, ranked by learned health:
|
|
62
73
|
* lowest error rate first, then lowest latency, then most recently verified.
|
|
63
74
|
* Empty when nothing has been verified yet (cold start / no keys).
|
|
75
|
+
*
|
|
76
|
+
* MODELS AT/ABOVE `MODEL_HEALTH_CEILING` SORT AFTER THE HEALTHY ONES but are
|
|
77
|
+
* never removed: "deprioritize, never exclude" — a burning provider you can
|
|
78
|
+
* still fall back TO is worth more than a clean-looking empty pool.
|
|
64
79
|
*/
|
|
65
80
|
export function preferredModelsFor(provider) {
|
|
66
81
|
const registry = getModelRegistry();
|
|
67
|
-
|
|
82
|
+
const ranked = registry
|
|
68
83
|
.getVerifiedModels(provider)
|
|
69
84
|
// The config value `'default'` is a SENTINEL meaning "use the provider's
|
|
70
85
|
// default model" — it is NOT a model id. It can be recorded as a
|
|
@@ -91,6 +106,17 @@ export function preferredModelsFor(provider) {
|
|
|
91
106
|
return la - lb;
|
|
92
107
|
return (eb?.lastVerifiedAt ?? 0) - (ea?.lastVerifiedAt ?? 0);
|
|
93
108
|
});
|
|
109
|
+
// Health ceiling: a STABLE partition, so the learned order is preserved
|
|
110
|
+
// inside each group. Both groups are returned — degraded models remain
|
|
111
|
+
// reachable as a last resort (the failover walk's whole job is "never
|
|
112
|
+
// dead-end", so dropping them here would be the opposite of a fix).
|
|
113
|
+
const healthy = [];
|
|
114
|
+
const degraded = [];
|
|
115
|
+
for (const model of ranked) {
|
|
116
|
+
const rate = registry.getEntry(provider, model)?.errorRate ?? 0;
|
|
117
|
+
(rate >= MODEL_HEALTH_CEILING ? degraded : healthy).push(model);
|
|
118
|
+
}
|
|
119
|
+
return [...healthy, ...degraded];
|
|
94
120
|
}
|
|
95
121
|
/** Aggregate health score for a provider (its best verified model). Lower = better. */
|
|
96
122
|
function providerHealth(provider) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-selection.js","sourceRoot":"","sources":["../../src/learning/model-selection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,qFAAqF;AACrF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAU,CAAC;AAErG;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAA2B,EAAE,CAAC;AACnE,KAAK,MAAM,EAAE,IAAI,oBAAoB,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;IACxC,IAAI,MAAM,KAAK,SAAS;QAAE,wBAAwB,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAa,CAAC,GAAG,mBAAmB,CAAC,CAAC;AAEpE;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,aAA4B,EAAE,QAAgB;IAC3E,IAAI,gBAAgB,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACpF,IAAI,CAAC;QACH,OAAO,aAAa,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"model-selection.js","sourceRoot":"","sources":["../../src/learning/model-selection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,qFAAqF;AACrF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,CAAU,CAAC;AAErG;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAA2B,EAAE,CAAC;AACnE,KAAK,MAAM,EAAE,IAAI,oBAAoB,EAAE,CAAC;IACtC,MAAM,MAAM,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;IACxC,IAAI,MAAM,KAAK,SAAS;QAAE,wBAAwB,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAa,CAAC,GAAG,mBAAmB,CAAC,CAAC;AAEpE;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,aAA4B,EAAE,QAAgB;IAC3E,IAAI,gBAAgB,CAAC,QAAQ,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACpF,IAAI,CAAC;QACH,OAAO,aAAa,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAExC;;;;;;;;GAQG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,QAAQ;SACpB,iBAAiB,CAAC,QAAQ,CAAC;QAC5B,yEAAyE;QACzE,iEAAiE;QACjE,0EAA0E;QAC1E,2EAA2E;QAC3E,uEAAuE;QACvE,8CAA8C;SAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;QACtC,sEAAsE;QACtE,yEAAyE;QACzE,yEAAyE;QACzE,+DAA+D;SAC9D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;SACjC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACb,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,EAAE,EAAE,SAAS,IAAI,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,EAAE,EAAE,SAAS,IAAI,CAAC,CAAC;QAC9B,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,EAAE,EAAE,SAAS,IAAI,MAAM,CAAC,gBAAgB,CAAC;QACpD,MAAM,EAAE,GAAG,EAAE,EAAE,SAAS,IAAI,MAAM,CAAC,gBAAgB,CAAC;QACpD,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAC9B,OAAO,CAAC,EAAE,EAAE,cAAc,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,IAAI,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEL,wEAAwE;IACxE,uEAAuE;IACvE,sEAAsE;IACtE,oEAAoE;IACpE,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,SAAS,IAAI,CAAC,CAAC;QAChE,CAAC,IAAI,IAAI,oBAAoB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;IACD,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,uFAAuF;AACvF,SAAS,cAAc,CAAC,QAAgB;IACtC,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,IAAI,IAAI,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,kBAAkB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACjD,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,CAAC,CAAC;QACxE,IAAI,KAAK,GAAG,IAAI;YAAE,IAAI,GAAG,KAAK,CAAC;IACjC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AASD;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,aAA4B;IACjE,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,IAAI,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACP,iEAAiE;IACnE,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAEtD,yEAAyE;IACzE,0EAA0E;IAC1E,uEAAuE;IACvE,yEAAyE;IACzE,sEAAsE;IACtE,wCAAwC;IACxC,IAAI,aAAa,GAAa,EAAE,CAAC;IACjC,IAAI,CAAC;QACH,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;IACD,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,oBAAoB,EAAE,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;QACxF,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACjC,6EAA6E;QAC7E,wEAAwE;QACxE,wEAAwE;QACxE,mEAAmE;QACnE,wEAAwE;QACxE,IAAI,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,OAAO,EAAE,CAAC;YACzC,MAAM,QAAQ,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC/B,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC;QAC3C,CAAC;QACD,OAAO,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACrE,MAAM,UAAU,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,UAAU,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC;QACxC,wEAAwE;QACxE,0EAA0E;QAC1E,0EAA0E;QAC1E,sEAAsE;QACtE,MAAM,EAAE,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,EAAE,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,OAAO,EAAE,GAAG,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,UAAU;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SAC7B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACb,gEAAgE;QAChE,MAAM,EAAE,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,EAAE,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,OAAO;YAAE,OAAO,CAAC,CAAC,CAAC;QAC7B,IAAI,CAAC,KAAK,OAAO;YAAE,OAAO,CAAC,CAAC;QAC5B,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;IAEL,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,QAAQ,EAAE,CAAC;QACX,cAAc,EAAE,kBAAkB,CAAC,CAAC,CAAC;QACrC,UAAU,EAAE,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC;KAC7C,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,aAA4B;IACjE,OAAO,sBAAsB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,OAAO,CAAC;AACvE,CAAC;AASD;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAC3B,OAA0B,EAC1B,aAA6B;IAE7B,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,MAAM,MAAM,GAAqB,aAAa;QAC5C,CAAC,CAAC,sBAAsB,CAAC,aAAa,CAAC;QACvC,CAAC,CAAC,QAAQ;aACL,kBAAkB,EAAE;aACpB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,cAAc,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9F,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAE1C,0EAA0E;IAC1E,uEAAuE;IACvE,6DAA6D;IAC7D,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACpE,MAAM,QAAQ,GAAG,aAAa;QAC5B,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC9F,CAAC,CAAC,KAAK,CAAC;IACV,IAAI,CAAC,WAAW,IAAI,CAAC,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEhD,IAAI,KAAK,GAAG,MAAM,CAAC;IACnB,IAAI,OAAO,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;QAChC,kEAAkE;QAClE,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;QACzF,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,GAAG,GAAG,CAAC;IAClC,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACrB,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE,CAAC;AAC/E,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,YAAoB,EAAE,eAAwB;IAClF,IAAI,eAAe,IAAI,eAAe,KAAK,SAAS;QAAE,OAAO,eAAe,CAAC;IAC7E,OAAO,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,YAAoB,EAAE,eAAwB;IAChF,MAAM,KAAK,GAAG,qBAAqB,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IACnE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,0BAA0B,YAAY,kEAAkE;YACtG,oBAAoB,YAAY,2BAA2B,CAC9D,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,uBAAuB,CAAC,aAA4B;IAClE,MAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAC3C,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,CAC1E,CAAC;IACF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CACR,kIAAkI,CACnI,CAAC;IACJ,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,kHAAkH,CAAC,CAAC;IAC/H,KAAK,CAAC,IAAI,CAAC,8FAA8F,CAAC,CAAC;IAC3G,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -64,6 +64,18 @@ export declare function classifyFallbackError(err: unknown): FallbackErrorType;
|
|
|
64
64
|
* Unknown errors might or might not — we try anyway since we're failing over.
|
|
65
65
|
*/
|
|
66
66
|
export declare function isRetryableError(errorType: FallbackErrorType): boolean;
|
|
67
|
+
/** Should this error be retried against the SAME provider after a short backoff? */
|
|
68
|
+
export declare function isTransientForRetry(err: unknown): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Is this failure a harness fault (our request shape) rather than a provider or
|
|
71
|
+
* model failure?
|
|
72
|
+
*
|
|
73
|
+
* Callers use this to decide ATTRIBUTION, never retryability: a harness fault is
|
|
74
|
+
* provider-specific, so failing over to a different provider is still the right
|
|
75
|
+
* move — but the provider's health, the model's health score and the bandit
|
|
76
|
+
* prior must all stay untouched.
|
|
77
|
+
*/
|
|
78
|
+
export declare function isHarnessFault(err: unknown): boolean;
|
|
67
79
|
/**
|
|
68
80
|
* Floor for hint-derived quota parks — never re-admit faster than this, so a
|
|
69
81
|
* 429 with a 1s reset hint can't hot-loop the router back into the same
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-fallback.d.ts","sourceRoot":"","sources":["../../src/learning/provider-fallback.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"provider-fallback.d.ts","sourceRoot":"","sources":["../../src/learning/provider-fallback.ts"],"names":[],"mappings":"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"}
|