Some checks failed
lakehouse/auditor 1 blocking issue: todo!() macro call in tests/real-world/scrum_master_pipeline.ts
HANDOVER §queued (2026-04-25): "Mode router — port LLM Team multi-model
patterns. Pick the right TOOL/MODE for each task class via the matrix,
not cascade through models."
Two-stage architecture:
1. Decision (POST /v1/mode) — pure recommendation, no execution.
Returns {mode, model, decision: {source, fallbacks, matrix_corpus,
notes}} so callers see WHY this mode was picked.
2. Execution (future POST /v1/mode/execute) — proxy to LLM Team
/api/run for modes not yet ported to native Rust runners. Not
wired in this phase.
Splitting decision from execution lets us A/B-test the routing logic
without committing to running every recommendation. The decision
function is pure enough for exhaustive unit tests (3 added).
config/modes.toml — initial map for 5 task_classes (scrum_review,
contract_analysis, staffing_inference, fact_extract, doc_drift_check)
+ a default. matrix_corpus per task is reserved for the future
matrix-informed routing pass.
VALID_MODES list (24 modes) is kept in sync manually with LLM Team's
/api/run handler at /root/llm_team_ui.py:10581. Adding a mode here
without adding it upstream returns 400 from a future proxy.
GET /v1/mode/list — operator introspection so a UI can render the
registry table without re-parsing TOML.
Live-tested: 5 task classes match, unknown classes fall through to
default, force_mode override works + validates, bogus modes return
400 with the valid_modes list.
Updates reference_llm_team_modes.md memory — earlier note claiming
"only extract is registered" was wrong (all 25 are registered).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
54 lines
1.7 KiB
TOML
54 lines
1.7 KiB
TOML
# Mode router config — task_class → mode mapping
|
|
#
|
|
# `preferred_mode` is the first choice for a task class; `fallback_modes`
|
|
# get tried in order if the preferred one isn't available (LLM Team can
|
|
# return Unknown mode for some, OR the matrix has stronger signal for a
|
|
# fallback). `default_model` seeds the mode runner's model field if the
|
|
# caller doesn't override.
|
|
#
|
|
# Modes are dispatched against LLM Team UI (localhost:5000/api/run) for
|
|
# now; future Rust-native runners will short-circuit before the proxy.
|
|
# See crates/gateway/src/v1/mode.rs for the dispatch path.
|
|
|
|
[[task_class]]
|
|
name = "scrum_review"
|
|
preferred_mode = "codereview"
|
|
fallback_modes = ["consensus", "ladder"]
|
|
default_model = "qwen3-coder:480b"
|
|
matrix_corpus = "distilled_procedural_v20260423102847"
|
|
|
|
[[task_class]]
|
|
name = "contract_analysis"
|
|
preferred_mode = "deep_analysis"
|
|
fallback_modes = ["research", "extract"]
|
|
default_model = "kimi-k2:1t"
|
|
matrix_corpus = "chicago_permits_v1"
|
|
|
|
[[task_class]]
|
|
name = "staffing_inference"
|
|
preferred_mode = "ladder"
|
|
fallback_modes = ["consensus", "pipeline"]
|
|
default_model = "gpt-oss:120b"
|
|
matrix_corpus = "workers_500k_v8"
|
|
|
|
[[task_class]]
|
|
name = "fact_extract"
|
|
preferred_mode = "extract"
|
|
fallback_modes = ["distill"]
|
|
default_model = "qwen2.5"
|
|
matrix_corpus = "kb_team_runs_v1"
|
|
|
|
[[task_class]]
|
|
name = "doc_drift_check"
|
|
preferred_mode = "drift"
|
|
fallback_modes = ["validator"]
|
|
default_model = "gpt-oss:120b"
|
|
matrix_corpus = "distilled_factual_v20260423095819"
|
|
|
|
# Fallback when task_class isn't in the table — useful for ad-hoc calls
|
|
# during development that don't yet have a mapped mode.
|
|
[default]
|
|
preferred_mode = "pipeline"
|
|
fallback_modes = ["consensus", "ladder"]
|
|
default_model = "qwen3.5:latest"
|