<liclass="toctree-l2"><aclass="reference internal"href="../concepts/llm_providers/supported_providers.html">Supported Providers & Configuration</a></li>
<spanid="llm-router"></span><h1>LLM Routing<a@click.prevent="window.navigator.clipboard.writeText($el.href); $el.setAttribute('data-tooltip', 'Copied!'); setTimeout(() => $el.setAttribute('data-tooltip', 'Copy link to this element'), 2000)"aria-label="Copy link to this element"class="headerlink"data-tooltip="Copy link to this element"href="#llm-routing"><svgheight="1em"viewbox="0 0 24 24"width="1em"xmlns="http://www.w3.org/2000/svg"><pathd="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"></path></svg></a></h1>
<p>With the rapid proliferation of large language models (LLM) — each optimized for different strengths, style, or latency/cost profile — routing has become an essential technique to operationalize the use of different models.</p>
<p>Arch provides three distinct routing approaches to meet different use cases:</p>
<olclass="arabic simple">
<li><p><strong>Model-based Routing</strong>: Direct routing to specific models using provider/model names</p></li>
<li><p><strong>Alias-based Routing</strong>: Semantic routing using custom aliases that map to underlying models</p></li>
<li><p><strong>Preference-aligned Routing</strong>: Intelligent routing using the Arch-Router model based on context and user-defined preferences</p></li>
<p>This enables optimal performance, cost efficiency, and response quality by matching requests with the most suitable model from your available LLM fleet.</p>
<h2>Routing Methods<a@click.prevent="window.navigator.clipboard.writeText($el.href); $el.setAttribute('data-tooltip', 'Copied!'); setTimeout(() => $el.setAttribute('data-tooltip', 'Copy link to this element'), 2000)"aria-label="Copy link to this element"class="headerlink"data-tooltip="Copy link to this element"href="#routing-methods"x-intersect.margin.0%.0%.-70%.0%="activeSection ='#routing-methods'"><svgheight="1em"viewbox="0 0 24 24"width="1em"xmlns="http://www.w3.org/2000/svg"><pathd="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"></path></svg></a></h2>
<sectionid="model-based-routing">
<h3>Model-based Routing<a@click.prevent="window.navigator.clipboard.writeText($el.href); $el.setAttribute('data-tooltip', 'Copied!'); setTimeout(() => $el.setAttribute('data-tooltip', 'Copy link to this element'), 2000)"aria-label="Copy link to this element"class="headerlink"data-tooltip="Copy link to this element"href="#model-based-routing"x-intersect.margin.0%.0%.-70%.0%="activeSection ='#model-based-routing'"><svgheight="1em"viewbox="0 0 24 24"width="1em"xmlns="http://www.w3.org/2000/svg"><pathd="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"></path></svg></a></h3>
<p>Direct routing allows you to specify exact provider and model combinations using the format <codeclass="docutils literal notranslate"><spanclass="pre">provider/model-name</span></code>:</p>
<ulclass="simple">
<li><p>Use provider-specific names like <codeclass="docutils literal notranslate"><spanclass="pre">openai/gpt-4o</span></code> or <codeclass="docutils literal notranslate"><spanclass="pre">anthropic/claude-3-5-sonnet-20241022</span></code></p></li>
<li><p>Provides full control and transparency over which model handles each request</p></li>
<li><p>Ideal for production workloads where you want predictable routing behavior</p></li>
</ul>
</section>
<sectionid="alias-based-routing">
<h3>Alias-based Routing<a@click.prevent="window.navigator.clipboard.writeText($el.href); $el.setAttribute('data-tooltip', 'Copied!'); setTimeout(() => $el.setAttribute('data-tooltip', 'Copy link to this element'), 2000)"aria-label="Copy link to this element"class="headerlink"data-tooltip="Copy link to this element"href="#alias-based-routing"x-intersect.margin.0%.0%.-70%.0%="activeSection ='#alias-based-routing'"><svgheight="1em"viewbox="0 0 24 24"width="1em"xmlns="http://www.w3.org/2000/svg"><pathd="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"></path></svg></a></h3>
<p>Alias-based routing lets you create semantic model names that decouple your application from specific providers:</p>
<ulclass="simple">
<li><p>Use meaningful names like <codeclass="docutils literal notranslate"><spanclass="pre">fast-model</span></code>, <codeclass="docutils literal notranslate"><spanclass="pre">reasoning-model</span></code>, or <codeclass="docutils literal notranslate"><spanclass="pre">arch.summarize.v1</span></code> (see <aclass="reference internal"href="../concepts/llm_providers/model_aliases.html#model-aliases"><spanclass="std std-ref">Model Aliases</span></a>)</p></li>
<li><p>Maps semantic names to underlying provider models for easier experimentation and provider switching</p></li>
<li><p>Ideal for applications that want abstraction from specific model names while maintaining control</p></li>
<spanid="preference-aligned-routing"></span><h3>Preference-aligned Routing (Arch-Router)<a@click.prevent="window.navigator.clipboard.writeText($el.href); $el.setAttribute('data-tooltip', 'Copied!'); setTimeout(() => $el.setAttribute('data-tooltip', 'Copy link to this element'), 2000)"aria-label="Copy link to this element"class="headerlink"data-tooltip="Copy link to this element"href="#preference-aligned-routing-arch-router"x-intersect.margin.0%.0%.-70%.0%="activeSection ='#preference-aligned-routing-arch-router'"><svgheight="1em"viewbox="0 0 24 24"width="1em"xmlns="http://www.w3.org/2000/svg"><pathd="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"></path></svg></a></h3>
<p>Traditional LLM routing approaches face significant limitations: they evaluate performance using benchmarks that often fail to capture human preferences, select from fixed model pools, and operate as “black boxes” without practical mechanisms for encoding user preferences.</p>
<p>Arch’s preference-aligned routing addresses these challenges by applying a fundamental engineering principle: decoupling. The framework separates route selection (matching queries to human-readable policies) from model assignment (mapping policies to specific LLMs). This separation allows you to define routing policies using descriptive labels like <codeclass="docutils literal notranslate"><spanclass="pre">Domain:</span><spanclass="pre">'finance',</span><spanclass="pre">Action:</span><spanclass="pre">'analyze_earnings_report'</span></code> rather than cryptic identifiers, while independently configuring which models handle each policy.</p>
<p>The <aclass="reference external"href="https://huggingface.co/katanemo/Arch-Router-1.5B"rel="nofollow noopener">Arch-Router<svgfill="currentColor"height="1em"stroke="none"viewbox="0 96 960 960"width="1em"xmlns="http://www.w3.org/2000/svg"><pathd="M188 868q-11-11-11-28t11-28l436-436H400q-17 0-28.5-11.5T360 336q0-17 11.5-28.5T400 296h320q17 0 28.5 11.5T760 336v320q0 17-11.5 28.5T720 696q-17 0-28.5-11.5T680 656V432L244 868q-11 11-28 11t-28-11Z"></path></svg></a> model automatically selects the most appropriate LLM based on:</p>
<ulclass="simple">
<li><p>Domain Analysis: Identifies the subject matter (e.g., legal, healthcare, programming)</p></li>
<li><p>Action Classification: Determines the type of operation (e.g., summarization, code generation, translation)</p></li>
<li><p>User-Defined Preferences: Maps domains and actions to preferred models using transparent, configurable routing decisions</p></li>
<li><p>Human Preference Alignment: Uses domain-action mappings that capture subjective evaluation criteria, ensuring routing aligns with real-world user needs rather than just benchmark scores</p></li>
</ul>
<p>This approach supports seamlessly adding new models without retraining and is ideal for dynamic, context-aware routing that adapts to request content and intent.</p>
</section>
</section>
<sectionid="model-based-routing-workflow">
<h2>Model-based Routing Workflow<a@click.prevent="window.navigator.clipboard.writeText($el.href); $el.setAttribute('data-tooltip', 'Copied!'); setTimeout(() => $el.setAttribute('data-tooltip', 'Copy link to this element'), 2000)"aria-label="Copy link to this element"class="headerlink"data-tooltip="Copy link to this element"href="#model-based-routing-workflow"x-intersect.margin.0%.0%.-70%.0%="activeSection ='#model-based-routing-workflow'"><svgheight="1em"viewbox="0 0 24 24"width="1em"xmlns="http://www.w3.org/2000/svg"><pathd="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"></path></svg></a></h2>
<p>For direct model routing, the process is straightforward:</p>
<olclass="arabic">
<li><p><strong>Client Request</strong></p>
<blockquote>
<div><p>The client specifies the exact model using provider/model format (<codeclass="docutils literal notranslate"><spanclass="pre">openai/gpt-4o</span></code>).</p>
</div></blockquote>
</li>
<li><p><strong>Provider Validation</strong></p>
<blockquote>
<div><p>Arch validates that the specified provider and model are configured and available.</p>
</div></blockquote>
</li>
<li><p><strong>Direct Routing</strong></p>
<blockquote>
<div><p>The request is sent directly to the specified model without analysis or decision-making.</p>
</div></blockquote>
</li>
<li><p><strong>Response Handling</strong></p>
<blockquote>
<div><p>The response is returned to the client with optional metadata about the routing decision.</p>
</div></blockquote>
</li>
</ol>
</section>
<sectionid="alias-based-routing-workflow">
<h2>Alias-based Routing Workflow<a@click.prevent="window.navigator.clipboard.writeText($el.href); $el.setAttribute('data-tooltip', 'Copied!'); setTimeout(() => $el.setAttribute('data-tooltip', 'Copy link to this element'), 2000)"aria-label="Copy link to this element"class="headerlink"data-tooltip="Copy link to this element"href="#alias-based-routing-workflow"x-intersect.margin.0%.0%.-70%.0%="activeSection ='#alias-based-routing-workflow'"><svgheight="1em"viewbox="0 0 24 24"width="1em"xmlns="http://www.w3.org/2000/svg"><pathd="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"></path></svg></a></h2>
<p>For alias-based routing, the process includes name resolution:</p>
<olclass="arabic">
<li><p><strong>Client Request</strong></p>
<blockquote>
<div><p>The client specifies a semantic alias name (<codeclass="docutils literal notranslate"><spanclass="pre">reasoning-model</span></code>).</p>
</div></blockquote>
</li>
<li><p><strong>Alias Resolution</strong></p>
<blockquote>
<div><p>Arch resolves the alias to the actual provider/model name based on configuration.</p>
</div></blockquote>
</li>
<li><p><strong>Model Selection</strong></p>
<blockquote>
<div><p>If the alias maps to multiple models, Arch selects one based on availability and load balancing.</p>
</div></blockquote>
</li>
<li><p><strong>Request Forwarding</strong></p>
<blockquote>
<div><p>The request is forwarded to the resolved model.</p>
</div></blockquote>
</li>
<li><p><strong>Response Handling</strong></p>
<blockquote>
<div><p>The response is returned with optional metadata about the alias resolution.</p>
<div><p>When a user submits a prompt without specifying a model, the Arch-Router analyzes it to determine the domain (subject matter) and action (type of operation requested).</p>
<div><p>Based on the analyzed intent and your configured routing preferences, the Router selects the most appropriate model from your available LLM fleet.</p>
</div></blockquote>
</li>
<li><p><strong>Request Forwarding</strong></p>
<blockquote>
<div><p>Once the optimal model is identified, our gateway forwards the original prompt to the selected LLM endpoint. The routing decision is transparent and can be logged for monitoring and optimization purposes.</p>
</div></blockquote>
</li>
<li><p><strong>Response Handling</strong></p>
<blockquote>
<div><p>After the selected model processes the request, the response is returned through the gateway. The gateway can optionally add routing metadata or performance metrics to help you understand and optimize your routing decisions.</p>
<h2>Arch-Router<a@click.prevent="window.navigator.clipboard.writeText($el.href); $el.setAttribute('data-tooltip', 'Copied!'); setTimeout(() => $el.setAttribute('data-tooltip', 'Copy link to this element'), 2000)"aria-label="Copy link to this element"class="headerlink"data-tooltip="Copy link to this element"href="#id1"x-intersect.margin.0%.0%.-70%.0%="activeSection ='#id1'"><svgheight="1em"viewbox="0 0 24 24"width="1em"xmlns="http://www.w3.org/2000/svg"><pathd="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"></path></svg></a></h2>
<p>The <aclass="reference external"href="https://huggingface.co/katanemo/Arch-Router-1.5B"rel="nofollow noopener">Arch-Router<svgfill="currentColor"height="1em"stroke="none"viewbox="0 96 960 960"width="1em"xmlns="http://www.w3.org/2000/svg"><pathd="M188 868q-11-11-11-28t11-28l436-436H400q-17 0-28.5-11.5T360 336q0-17 11.5-28.5T400 296h320q17 0 28.5 11.5T760 336v320q0 17-11.5 28.5T720 696q-17 0-28.5-11.5T680 656V432L244 868q-11 11-28 11t-28-11Z"></path></svg></a> is a state-of-the-art <strong>preference-based routing model</strong> specifically designed to address the limitations of traditional LLM routing. This compact 1.5B model delivers production-ready performance with low latency and high accuracy while solving key routing challenges.</p>
<p><strong>Addressing Traditional Routing Limitations:</strong></p>
<p><strong>Human Preference Alignment</strong>
Unlike benchmark-driven approaches, Arch-Router learns to match queries with human preferences by using domain-action mappings that capture subjective evaluation criteria, ensuring routing decisions align with real-world user needs.</p>
<p><strong>Flexible Model Integration</strong>
The system supports seamlessly adding new models for routing without requiring retraining or architectural modifications, enabling dynamic adaptation to evolving model landscapes.</p>
<p><strong>Preference-Encoded Routing</strong>
Provides a practical mechanism to encode user preferences through domain-action mappings, offering transparent and controllable routing decisions that can be customized for specific use cases.</p>
<p>To support effective routing, Arch-Router introduces two key concepts:</p>
<ulclass="simple">
<li><p><strong>Domain</strong>– the high-level thematic category or subject matter of a request (e.g., legal, healthcare, programming).</p></li>
<li><p><strong>Action</strong>– the specific type of operation the user wants performed (e.g., summarization, code generation, booking appointment, translation).</p></li>
</ul>
<p>Both domain and action configs are associated with preferred models or model variants. At inference time, Arch-Router analyzes the incoming prompt to infer its domain and action using semantic similarity, task indicators, and contextual cues. It then applies the user-defined routing preferences to select the model best suited to handle the request.</p>
<p>In summary, Arch-Router demonstrates:</p>
<ulclass="simple">
<li><p><strong>Structured Preference Routing</strong>: Aligns prompt request with model strengths using explicit domain–action mappings.</p></li>
<li><p><strong>Transparent and Controllable</strong>: Makes routing decisions transparent and configurable, empowering users to customize system behavior.</p></li>
<li><p><strong>Flexible and Adaptive</strong>: Supports evolving user needs, model updates, and new domains/actions without retraining the router.</p></li>
<li><p><strong>Production-Ready Performance</strong>: Optimized for low-latency, high-throughput applications in multi-model environments.</p></li>
<divclass="highlight-python notranslate"><divclass="highlight"><pre><span></span><code><spanid="line-1"><spanclass="c1"># Direct provider/model specification</span>
</span><spanid="line-9"><spanclass="n">messages</span><spanclass="o">=</span><spanclass="p">[{</span><spanclass="s2">"role"</span><spanclass="p">:</span><spanclass="s2">"user"</span><spanclass="p">,</span><spanclass="s2">"content"</span><spanclass="p">:</span><spanclass="s2">"Write a story"</span><spanclass="p">}]</span>
<divclass="highlight-python notranslate"><divclass="highlight"><pre><span></span><code><spanid="line-1"><spanclass="c1"># Using semantic aliases</span>
</span><spanid="line-3"><spanclass="n">model</span><spanclass="o">=</span><spanclass="s2">"fast-model"</span><spanclass="p">,</span><spanclass="c1"># Routes to best available fast model</span>
</span><spanid="line-8"><spanclass="n">model</span><spanclass="o">=</span><spanclass="s2">"reasoning-model"</span><spanclass="p">,</span><spanclass="c1"># Routes to best reasoning model</span>
</span><spanid="line-9"><spanclass="n">messages</span><spanclass="o">=</span><spanclass="p">[{</span><spanclass="s2">"role"</span><spanclass="p">:</span><spanclass="s2">"user"</span><spanclass="p">,</span><spanclass="s2">"content"</span><spanclass="p">:</span><spanclass="s2">"Solve this complex problem"</span><spanclass="p">}]</span>
</span><spanid="line-19"><spanclass="w"></span><spanclass="nt">description</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">deep analysis, mathematical problem solving, and logical reasoning</span>
</span><spanid="line-27"><spanclass="w"></span><spanclass="nt">description</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">generating new code snippets, functions, or boilerplate based on user prompts</span>
</span></code></pre></div>
</div>
</div>
<p>Clients can let the router decide or use aliases:</p>
<divclass="highlight-python notranslate"><divclass="highlight"><pre><span></span><code><spanid="line-1"><spanclass="c1"># Let Arch-Router choose based on content</span>
</span><spanid="line-3"><spanclass="n">messages</span><spanclass="o">=</span><spanclass="p">[{</span><spanclass="s2">"role"</span><spanclass="p">:</span><spanclass="s2">"user"</span><spanclass="p">,</span><spanclass="s2">"content"</span><spanclass="p">:</span><spanclass="s2">"Write a creative story about space exploration"</span><spanclass="p">}]</span>
</span><spanid="line-4"><spanclass="c1"># No model specified - router will analyze and choose claude-3-5-sonnet-20241022</span>
</span><spanid="line-5"><spanclass="p">)</span>
</span></code></pre></div>
</div>
</section>
<sectionid="combining-routing-methods">
<h2>Combining Routing Methods<a@click.prevent="window.navigator.clipboard.writeText($el.href); $el.setAttribute('data-tooltip', 'Copied!'); setTimeout(() => $el.setAttribute('data-tooltip', 'Copy link to this element'), 2000)"aria-label="Copy link to this element"class="headerlink"data-tooltip="Copy link to this element"href="#combining-routing-methods"x-intersect.margin.0%.0%.-70%.0%="activeSection ='#combining-routing-methods'"><svgheight="1em"viewbox="0 0 24 24"width="1em"xmlns="http://www.w3.org/2000/svg"><pathd="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"></path></svg></a></h2>
<p>You can combine static model selection with dynamic routing preferences for maximum flexibility:</p>
</span><spanid="line-10"><spanclass="w"></span><spanclass="nt">description</span><spanclass="p">:</span><spanclass="w"></span><spanclass="l l-Scalar l-Scalar-Plain">deep analysis and complex problem solving</span>
<li><p><strong>Use direct model selection</strong>: <codeclass="docutils literal notranslate"><spanclass="pre">model="fast-model"</span></code></p></li>
<li><p><strong>Let the router decide</strong>: No model specified, router analyzes content</p></li>
<h2>Example Use Cases<a@click.prevent="window.navigator.clipboard.writeText($el.href); $el.setAttribute('data-tooltip', 'Copied!'); setTimeout(() => $el.setAttribute('data-tooltip', 'Copy link to this element'), 2000)"aria-label="Copy link to this element"class="headerlink"data-tooltip="Copy link to this element"href="#example-use-cases"x-intersect.margin.0%.0%.-70%.0%="activeSection ='#example-use-cases'"><svgheight="1em"viewbox="0 0 24 24"width="1em"xmlns="http://www.w3.org/2000/svg"><pathd="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"></path></svg></a></h2>
<p>Here are common scenarios where Arch-Router excels:</p>
<ulclass="simple">
<li><p><strong>Coding Tasks</strong>: Distinguish between code generation requests (“write a Python function”), debugging needs (“fix this error”), and code optimization (“make this faster”), routing each to appropriately specialized models.</p></li>
<li><p><strong>Content Processing Workflows</strong>: Classify requests as summarization (“summarize this document”), translation (“translate to Spanish”), or analysis (“what are the key themes”), enabling targeted model selection.</p></li>
<li><p><strong>Multi-Domain Applications</strong>: Accurately identify whether requests fall into legal, healthcare, technical, or general domains, even when the subject matter isn’t explicitly stated in the prompt.</p></li>
<li><p><strong>Conversational Routing</strong>: Track conversation context to identify when topics shift between domains or when the type of assistance needed changes mid-conversation.</p></li>
<li><p><strong>💡 Clear Usage Description:</strong> Make your route names and descriptions specific, unambiguous, and minimizing overlap between routes. The Router performs better when it can clearly distinguish between different types of requests.</p>
<li><p><strong>💡Nouns Descriptor:</strong> Preference-based routers perform better with noun-centric descriptors, as they offer more stable and semantically rich signals for matching.</p></li>
<li><p><strong>💡Domain Inclusion:</strong> for best user experience, you should always include domain route. This help the router fall back to domain when action is not</p></li>