4.6 KiB
Feature Description
The model-router plugin implements routing functionality based on the model parameter in LLM protocols.
Configuration Fields
| Name | Data Type | Requirement | Default Value | Description |
|---|---|---|---|---|
modelKey |
string | Optional | model | Location of the model parameter in the request body |
addProviderHeader |
string | Optional | - | Which request header to add the provider name parsed from the model parameter |
modelToHeader |
string | Optional | - | Which request header to directly add the model parameter to |
enableOnPathSuffix |
array of string | Optional | ["/completions","/embeddings","/images/generations","/audio/speech","/fine_tuning/jobs","/moderations","/image-synthesis","/video-synthesis","/rerank","/messages"] | Only effective for requests with these specific path suffixes, can be configured as "*" to match all paths |
keepOriginalModelName |
bool | Optional | false | Used with addProviderHeader. When set to true, the provider is still extracted into the header, but the model field in the request body is not rewritten |
Runtime Properties
Plugin execution phase: Authentication phase Plugin execution priority: 900
Effect Description
Routing Based on Model Parameter
The following configuration is needed:
modelToHeader: x-higress-llm-model
The plugin extracts the model parameter from the request and sets it to the x-higress-llm-model request header for subsequent routing. For example, the original LLM request body is:
{
"model": "qwen-long",
"frequency_penalty": 0,
"max_tokens": 800,
"stream": false,
"messages": [{
"role": "user",
"content": "What is the GitHub address of the Higress project's main repository?"
}],
"presence_penalty": 0,
"temperature": 0.7,
"top_p": 0.95
}
After processing by this plugin, the following request header will be added (can be used for route matching):
x-higress-llm-model: qwen-long
Extracting Provider Field from Model Parameter for Routing
Note that this mode requires the client to specify the provider in the model parameter using the
/delimiter
The following configuration is needed:
addProviderHeader: x-higress-llm-provider
The plugin extracts the provider part (if any) from the model parameter in the request, sets it to the x-higress-llm-provider request header for subsequent routing, and rewrites the model parameter to only contain the model name part. For example, the original LLM request body is:
{
"model": "dashscope/qwen-long",
"frequency_penalty": 0,
"max_tokens": 800,
"stream": false,
"messages": [{
"role": "user",
"content": "What is the GitHub address of the Higress project's main repository?"
}],
"presence_penalty": 0,
"temperature": 0.7,
"top_p": 0.95
}
After processing by this plugin, the following request header will be added (can be used for route matching):
x-higress-llm-provider: dashscope
The original LLM request body will be changed to:
{
"model": "qwen-long",
"frequency_penalty": 0,
"max_tokens": 800,
"stream": false,
"messages": [{
"role": "user",
"content": "What is the GitHub address of the Higress project's main repository?"
}],
"presence_penalty": 0,
"temperature": 0.7,
"top_p": 0.95
}
Preserving Original Model Name (keepOriginalModelName)
When using AI model aggregation platforms (e.g. Bailian/DashScope) with third-party models, some model names inherently contain / (e.g. MiniMax/MiniMax-M2.7) and are not in provider/model format. In this case, using addProviderHeader would incorrectly rewrite the model field in the request body.
By setting keepOriginalModelName: true, you can keep the provider header extraction while preserving the original model field in the request body:
addProviderHeader: x-higress-llm-provider
keepOriginalModelName: true
For example, with model MiniMax/MiniMax-M2.7, after processing by the plugin:
- Request header
x-higress-llm-provideris set toMiniMax - The model field in the request body remains
MiniMax/MiniMax-M2.7(not rewritten)