# MentorRoutingStrategy enum

> The MentorRoutingStrategy enum of Novior.MentorAgent.Options: How MentorAgent decides, per turn, whether to serve from the cheap MentorOptions.ChatClient or…

- URL: https://docs.mentoragent.net/api/novior-mentoragent-options/mentorroutingstrategy
- Verified with: MentorAgent 1.2.0
- Last updated: 2026-10-27
- Packages: Novior.MentorAgent

How MentorAgent decides, per turn, whether to serve from the cheap [`MentorOptions.ChatClient`](https://docs.mentoragent.net/api/novior-mentoragent-options/mentoroptions#chatclient) or escalate to the [`MentorOptions.StrongChatClient`](https://docs.mentoragent.net/api/novior-mentoragent-options/mentoroptions#strongchatclient) (roadmap \#11). Routing is active only when a [`MentorOptions.StrongChatClient`](https://docs.mentoragent.net/api/novior-mentoragent-options/mentoroptions#strongchatclient) is configured; otherwise every turn uses the cheap client. All built-in strategies avoid naive keyword matching on user text.

## Definition

Namespace: `Novior.MentorAgent.Options`. Package: `Novior.MentorAgent`.

`public enum MentorRoutingStrategy`

```shell
dotnet add package Novior.MentorAgent
```

## Values

| Value | Number | Description |
|---|---|---|
| `Custom` | 0 | Developer-supplied predicate. Uses [`MentorOptions.UseStrongModelAsync`](https://docs.mentoragent.net/api/novior-mentoragent-options/mentoroptions#usestrongmodelasync) (preferred, async, sees the whole conversation) or the legacy sync [`MentorOptions.UseStrongModel`](https://docs.mentoragent.net/api/novior-mentoragent-options/mentoroptions#usestrongmodel). Full control — the escape hatch. This is the default for backward compatibility. |
| `Semantic` | 1 | Embedding-based semantic routing. The latest user message is embedded and compared by cosine similarity against [`MentorOptions.RoutingComplexExemplars`](https://docs.mentoragent.net/api/novior-mentoragent-options/mentoroptions#routingcomplexexemplars) (a small set of "complex/hard" example turns); it escalates to the strong model when the best score reaches [`MentorOptions.RoutingThreshold`](https://docs.mentoragent.net/api/novior-mentoragent-options/mentoroptions#routingthreshold). Multilingual, ~free (one embedding), no keywords. Requires [`MentorOptions.EmbeddingGenerator`](https://docs.mentoragent.net/api/novior-mentoragent-options/mentoroptions#embeddinggenerator); without one, routing is disabled (cheap only). |
| `Classifier` | 2 | LLM-as-router. A tiny, constrained classification call (defaults to the cheap client, or [`MentorOptions.RoutingClassifierClient`](https://docs.mentoragent.net/api/novior-mentoragent-options/mentoroptions#routingclassifierclient)) labels the turn `SIMPLE` or `COMPLEX` and escalates on `COMPLEX`. Most precise; adds one small LLM call per turn. |
| `Cascade` | 3 | Model cascade / self-escalation. The turn is served by the cheap model first, then a small classifier judges whether the answer fully resolved the request; if not, the turn is re-run on the strong model. Best quality/cost trade-off — it only pays for the strong model when the cheap one actually falls short. On streaming calls it cannot re-run mid-stream, so it pre-decides like [`MentorRoutingStrategy.Classifier`](https://docs.mentoragent.net/api/novior-mentoragent-options/mentorroutingstrategy) on the input. |

---

- Previous: [MentorOptions class](https://docs.mentoragent.net/api/novior-mentoragent-options/mentoroptions.md)
- Next: [MentorSafetyCheckFailure enum](https://docs.mentoragent.net/api/novior-mentoragent-options/mentorsafetycheckfailure.md)
