scoreComing soon

Model routing

A chat product answers easy requests with a small, cheap model and hard ones with a large one. A hard request sent small comes back as a bad answer; an easy one sent large costs money on every call.

“How hard is this request?”

The request · POST /v1/systemone

{
  "model": "jev-latest",
  "state": {
    "message": "…",
    "history_turns": 3
  },
  "questions": {
    "difficulty": {
      "type": "score",
      "instructions": "How hard is this request?",
      "criteria": ["Trivial", "Easy", "Hard", "Expert"]
    }
  }
}

The policy

  • P(level ≥ 2) < tACCEPTthe small model answers
  • otherwiseESCALATEthe large model answers
target

The lowest expected cost per 1,000 requests, with a large-model call at $0.012 and a bad small-model answer at $0.20 (illustrative).

t = [X]. A cost target finds the cheapest point, not a guarantee, and the policy says so.

When the truth arrives

  1. nowThe small or the large model answers.proxy
  2. minutesA thumbs-down or a retry within 10 minutes of a small-model answer.downstream
  3. minutes to hoursAn LLM judge grades a 2% sample with the true level.downstream

In your app · Python SDK, gate() from M3

d = ts.gate("difficulty", answer=resp["answers"]["difficulty"],
            model_served=resp["model"], decision_id=ids[0])
model = small_model if d.action == "ACCEPT" else large_model
reply = model.answer(message)

This use case is on the way. The roadmap shows where trimset is.

See the roadmap