Early routing was lexical: if the prompt contains 'translate', send it to the translation model. That breaks the moment someone writes 'put this in French', and it never notices that a two-line question and a twenty-page analysis are different kinds of work even when both contain the word 'summarise'. Semantic routing reads what the request is for and routes on that - the verb, the domain, how hard the task is, what the text carries - so the same intent is routed the same way however it is phrased.
A semantic router extracts signals before it chooses. The signals this router computes include the actions the request asks for (summarise, translate, classify, extract, write code, review code, reason, plan, act), the domains it touches (coding, legal, finance, medical, customer support and others), a complexity estimate from length, structure and vocabulary, the language, and whether the text contains personal data or secrets. Phrase lexicons catch the clear cases; a small routing model trained on labelled requests and the deployment's own outcomes covers the rest; the two vote.
The signals then feed everything else. Rules test them - a rule can say 'when the request contains personal data and the domain is legal, prefer the on-premises model' without ever naming a keyword. Strategies score candidates on them: a target that declares the coding domain earns points on a coding request, a small model loses points when complexity is high. Hard constraints use them to remove candidates - a model whose context window does not fit the request is not a candidate at all.
Semantic routing is only as good as its explanation. Because the signals are explicit values, the trace of a decision shows them - 'actions: summarize; domain: legal; complexity 0.62; contains_pii: true' - next to the scores they produced, so an engineer can see which reading of the request drove the choice and correct the lexicon, the model or the rule when it was wrong. Embedding similarity alone, the other common approach, gives a number without that reading.