Proposal: Conversation Routing Without a Verifier
Status: draft.
TL;DR
Switchyard's difficulty classifier (capability classifier + escalation judge) was built for coding tasks. Every rule in it assumes a machine-verifiable outcome — a test passes, a build succeeds, a checker approves.
Conversation tasks — chat, Q&A, writing, summarization, tutoring, roleplay — don't have that. There's no verifier. The only judge of quality is the user.
Right now, those requests all fall into a dead zone: primary_rule=none, capability_boundary=unmatched. The classifier spits out a p_solve with nothing grounding it, and the escalation judge has no tests or builds to read. Routing a conversation request to the efficient or capable model is basically a coin flip.
Why not just bolt on a "conversation" rule card?
Because the existing capability card is really a verifiable-outcome card. Its definition of success ("whole task correct, as judged by the final verifier") and its p_solve calibration both assume a verifier exists.
Conversation needs a different definition of success — "rated acceptable by a reference evaluator" — and its own calibration set. Mixing that into the same p_solve scale would corrupt the calibration that's already tuned for coding.
Proposal — three layers, cheapest first
-
Decide the value prop. What does efficient vs. capable even mean for conversation — draft vs. polished? Correct vs. incorrect? Everything downstream depends on this.
-
Cheap default + regret signal. Don't try to forecast difficulty from the first message. Route by a deployment-level default, and escalate based on in-session user feedback — corrections, "that's wrong," "rephrase that," "not what I asked." The user is a free, reliable verifier, so use it.
-
Only if a real classifier is justified: build a separate mode = "conversation" (alongside capability/escalation/custom), with its own prompt, schema, and rules grounded in failure modes you can actually see from the instructions — factual faithfulness, multi-step reasoning, strict format adherence, high-stakes domains, long-document fidelity, multilingual handling. Calibrate against LLM-as-judge labels, since there's no verifier to calibrate against.
Prototype through the existing custom classifier mode before promoting anything to a first-class mode.
Non-goals
Relationship to #442 / #453
Open questions
- Should conversation routing even use an efficient/capable binary, or a different target set (e.g. draft/careful)?
- Which conversation classes to support first — chat, Q&A, writing, tutoring?
- LLM-as-judge or human labels for calibration?
Proposal: Conversation Routing Without a Verifier
Status: draft.
TL;DR
Switchyard's difficulty classifier (capability classifier + escalation judge) was built for coding tasks. Every rule in it assumes a machine-verifiable outcome — a test passes, a build succeeds, a checker approves.
Conversation tasks — chat, Q&A, writing, summarization, tutoring, roleplay — don't have that. There's no verifier. The only judge of quality is the user.
Right now, those requests all fall into a dead zone:
primary_rule=none, capability_boundary=unmatched. The classifier spits out ap_solvewith nothing grounding it, and the escalation judge has no tests or builds to read. Routing a conversation request to the efficient or capable model is basically a coin flip.Why not just bolt on a "conversation" rule card?
Because the existing capability card is really a verifiable-outcome card. Its definition of success ("whole task correct, as judged by the final verifier") and its
p_solvecalibration both assume a verifier exists.Conversation needs a different definition of success — "rated acceptable by a reference evaluator" — and its own calibration set. Mixing that into the same
p_solvescale would corrupt the calibration that's already tuned for coding.Proposal — three layers, cheapest first
Decide the value prop. What does efficient vs. capable even mean for conversation — draft vs. polished? Correct vs. incorrect? Everything downstream depends on this.
Cheap default + regret signal. Don't try to forecast difficulty from the first message. Route by a deployment-level default, and escalate based on in-session user feedback — corrections, "that's wrong," "rephrase that," "not what I asked." The user is a free, reliable verifier, so use it.
Only if a real classifier is justified: build a separate
mode = "conversation"(alongside capability/escalation/custom), with its own prompt, schema, and rules grounded in failure modes you can actually see from the instructions — factual faithfulness, multi-step reasoning, strict format adherence, high-stakes domains, long-document fidelity, multilingual handling. Calibrate against LLM-as-judge labels, since there's no verifier to calibrate against.Prototype through the existing
customclassifier mode before promoting anything to a first-class mode.Non-goals
Relationship to #442 / #453
llm_classifiercustom mode, with two routes — one that scores against a conversation capability card, and one that implements layer 2 above (default efficient, escalate on regret).Open questions