This feature is available on all Portkey plans.
Using Portkey Gateway, you can route your requests to different provider targets based on custom conditions you define. These can be conditions like:
paid plan
, route their request to a custom fine-tuned model
fastest
, route to gpt-4o-mini
, if smartest
, route to openai o1
EU resident
, call an EU hosted model
temperature
parameter is above 0.7
, route to a more creative modeltesting environment
with a llm-pass-through
flag, route it to the cheapest model
Using this strategy, you can set up sophisticated routing logic based on:
All routing happens very fast on the gateway, on edge.
Conditional routing is one of the strategies in Portkey’s Gateway Configs. (others being fallback
and loadbalance
). To use it in your app,
conditional
config in Portkey UI.config
param.conditional
ConfigHere’s how a sample conditional
config looks (along with its simpler, tree view).
strategy.mode
: Set to conditional
strategy.conditions
: Query conditions with rules applied on metadata values or request parameters along with which target to call when the condition passesstrategy.default
: The default target name to call when none of the conditions passtargets
: Array of target objects with unique names
and provider details. These target names are referenced in the conditions
objects above.conditions
and default
are required params for the conditional
strategy.
conditions
Objectconditions
are where you will actually write the routing rules. Here’s a sample condition
object:
query
: Write the exact rule for checking metadata values or request parameters
then
: Define which target to call if the query PASSES
Operator | Description |
---|---|
$eq | Equals |
$ne | Not equals |
$in | In array |
$nin | Not in array |
$regex | Match the regex |
$gt | Greater than |
$gte | Greater than or equal to |
$lt | Less than |
$lte | Less than or equal to |
$and
: All conditions must be true$or
: At least one condition must be true** Example Condition objects with Logical Operators**
$and
, $or
operators)default
target name is calledBased on the conditions
and the Config structure described above, you can create your Config in Portkey UI, and save it to get Config ID. The UI also helps you autofill and autoformat your Config.
Conditional routing is enabled through Portkey’s Gateway Configs by following these steps:
Route requests based on the values of parameters like model
, temperature
, or max_tokens
Route requests based on custom metadata fields you include with your request
You can also combine both approaches for more sophisticated routing logic
With conditional routing, you can route based on any parameter in your LLM request (model
, temperature
, max_tokens
, etc.).
Portkey only supports params routing for primitive types (string, number, boolean). Complex types like arrays and objects are not supported.
Example: Model Parameter Based Routing
This example routes based on the model
parameter, allowing you to use aliases instead of specific model names:
Using the config:
When using parameter-based routing, make sure to include the parameter specified in your routing condition in your request. In the example above, you need to include model
in your request for routing to work properly.
Portkey support metadata-based routing, which requires sending custom metadata with your request.
Applying Conditional Routing Based on Metadata
In this example we are routing our request based on user_plan
metadata sent along request. If the user is on a paid
plan, we route to a finetuned-gpt4
model, otherwise we route to a base-gpt4
model.
Using the config:
You can combine both metadata and request parameters in your conditions. For example, you can route based on a combination of metadata.user_plan
and params.model
.
You can combine metadata and parameter conditions for more sophisticated routing:
Config example for combined conditions:
Here are practical examples of how you can leverage conditional routing to handle real-world challenges in your LLM applications. These examples showcase common patterns that help optimize cost, performance, compliance, and feature deployment without changing your application code.
User-Based Routing
Route premium users to advanced models and free users to cost-effective ones.
Model Selection & Parameter Routing
Use intuitive aliases instead of remembering specific model names.
Application Features & Testing
Route different tasks to specialized models for optimal results.
Using Conditional Router with Guardrails
You can apply input guardrails to specific targets in your conditional routing configuration. This allows you to validate or transform the input before it’s sent to the LLM:
In this example, when a user with the “paid” plan sends a request, it’s routed to the premium model but first runs through two input guardrails: one for PII detection and another for toxic content filtering.
Guardrails are referenced by their IDs in the configuration. You can create guardrails in the Portkey UI and then reference them in your conditional routing config.
Learn more about Portkey Guardrails to understand how to create and manage different types of guardrails for your LLM applications.
Parameter Presence: When routing based on request parameters, make sure the parameters specified in your conditions are included in your requests.
Primitive Types Only: Parameter-based routing works with primitive data types (strings, numbers, booleans) but not with arrays or nested objects.
Order Matters: Conditions are evaluated in the order they’re defined, so place more specific conditions before more general ones.
Error Handling: If your condition references a parameter that doesn’t exist in the request, the request will fail with an error.
Multiple Parameter Types: Portkey supports routing based on any parameter that can be sent in LLM requests including model
, temperature
, top_p
, frequency_penalty
, presence_penalty
, max_tokens
, and many others.
Join us on Discord to share your thoughts on this feature or to get help with setting up advanced routing scenarios.