MMSP
GitHub119

Configuration

UniConfig, the options of a request, and what each client sends for them. Every field is optional.

UniConfig is the second argument of both streaming methods. Pass an empty object to take the defaults.

{
  "max_tokens": 1024,
  "temperature": 1.0,
  "system_prompt": "You are a helpful assistant.",
  "tools": [
    {
      "name": "get_weather",
      "description": "Gets the current weather for a given location.",
      "parameters": {
        "type": "object",
        "properties": {"location": {"type": "string", "description": "The city name"}},
        "required": ["location"]
      }
    }
  ],
  "tool_choice": "auto",
  "thinking_level": "high",
  "thinking_summary": true,
  "prompt_caching": "enable",
  "fast_mode": false,
  "image_config": {"aspect_ratio": "4:3", "image_size": "1K"},
  "tts_config": [{"voice": "Kore"}],
  "embedding_config": {"dimensions": 768},
  "trace_id": "agent1/conversation_001"
}

Fields

Field Type Meaning
max_tokens integer The limit on output tokens.
temperature number The sampling temperature.
system_prompt string The system instruction.
tools list The tools the model may call: name, description, and parameters as a JSON Schema.
tool_choice "auto", "required", "none", or a list of tool names Which tools the model may or must call.
thinking_level "none", "low", "medium", "high", "xhigh", "max" How much the model thinks.
thinking_summary boolean Ask for a summary of the thinking. Whether one comes back depends on the model.
prompt_caching "enable", "disable", "enhance" How the prompt is cached.
fast_mode boolean Ask for the provider's faster tier.
image_config object For Gemini image output: aspect_ratio (1:1, 2:3, 3:2, 3:4, 4:3, 9:16, 16:9, 21:9) and image_size (1K, 2K).
tts_config list For Gemini speech: one entry per speaker, with voice and an optional speaker. With two speakers, the text is a script with one Name: line per turn.
embedding_config object For embeddings: dimensions, the size of the vector.
trace_id string Saves the turn under this id. See Tracer and playground.

Values a model rejects

A value a client cannot send raises UnsupportedParameterError before the request goes out, naming the client and the parameter. A key a client has no use for is ignored. The tables below give both, per client.

thinking_level never raises. Where a model cannot turn thinking off, "none" asks for the least of it: the lowest effort on Claude Opus 5.5, Haiku 5.5, Fable 5 and Fable 5.1, GPT-6 Astra and GPT-6.1 Sol, MiniMax-M3.1-Flash and GLM-5.3; no up-front thinking on Claude Sonnet 5.5; minimal or low on Gemini, whichever the model takes. GPT-6 Luna, Kimi K3 and Kimi K3.1 Pro take "none" as it is.

What each client sends

Clients are named by their client_type (Models and endpoints); openai-official serves the text-embedding-* models through openai-embedding. On both Google clients, a speech model is one whose id contains tts and an embedding model one whose id contains embedding. The mmsp client sends the configuration unchanged, and the server applies it through the model's own client, so that client's rows hold.

max_tokens

Client Sent as
anthropic-official, ant-messages max_tokens; 64000 when not set, because the Messages API requires it
zai-official max_tokens
openai-official, openai-responses, deepseek-official, minimax-official, google-official, google-genai max_output_tokens, speech models included
openai-chat, openai-chat-vllm-adapter, moonshot-official max_completion_tokens
openai-embedding, Gemini embedding models ignored

temperature

Client Sent as
ant-messages, openai-responses, openai-chat, openai-chat-vllm-adapter, zai-official temperature, as given
minimax-official temperature from 0 to 1; outside that range it raises
anthropic-official, openai-official, deepseek-official, moonshot-official nothing for 1.0; any other value raises
google-official, google-genai any value raises, speech models included
openai-embedding, Gemini embedding models ignored

system_prompt

Client Sent as
anthropic-official, ant-messages system
openai-official, openai-responses, deepseek-official, minimax-official instructions
google-official, google-genai system_instruction; ignored by speech models
openai-chat, openai-chat-vllm-adapter, moonshot-official, zai-official a first message with the role system; nothing for an empty string
openai-embedding, Gemini embedding models ignored

tools

Client Sent as
anthropic-official, ant-messages tools, with parameters as input_schema
openai-official, openai-responses, deepseek-official, minimax-official, google-official tools, each with type: "function"
openai-chat, openai-chat-vllm-adapter, moonshot-official, zai-official tools, each as the function of a type: "function" tool
google-genai one tool of function_declarations
openai-embedding, Gemini speech and embedding models ignored

tool_choice

A cell is the value sent: the type on the Anthropic clients, the function calling mode on google-genai.

Client "auto" "none" "required" A list of names
anthropic-official auto none any any with the name; one name only
ant-messages auto none any tool with the name; one name only
openai-official, openai-responses auto none required mode: "required" with the tools
openai-chat, openai-chat-vllm-adapter auto none required allowed_tools with mode: "auto"
google-official auto none any allowed_tools with mode: "any"
google-genai AUTO NONE ANY ANY with allowed_function_names
moonshot-official auto none required on Kimi K3 and K3.1 Pro; raises on Kimi K2 raises
deepseek-official auto none raises raises
minimax-official auto none; raises on MiniMax-M3.1-Flash raises raises
zai-official auto raises raises raises

Claude Opus 5.5, Sonnet 5.5, Haiku 5.5 and Fable 5.1 cannot be forced to call a tool, so "required" and a list raise on them. The Google clients send tool_choice only with tools, and speech models ignore it. openai-embedding and Gemini embedding models ignore it.

thinking_level

Each client sends the level as its protocol's effort: output_config.effort with adaptive thinking on the Anthropic clients, reasoning.effort on the Responses clients, reasoning_effort on Kimi K3 and K3.1 Pro and on GLM (with thinking enabled), thinking_level on Gemini. Kimi K2 gets a thinking type instead; disabled and between_tools are thinking types too. openai-chat sends no level, so the endpoint runs its default. The first row that matches applies.

Client and model none low medium high xhigh max
anthropic-official: Claude Opus 5.5, Haiku 5.5, Fable 5, Fable 5.1 low low medium high xhigh max
anthropic-official: Claude Sonnet 5.5 between_tools low medium high xhigh max
anthropic-official: Claude 4.6 disabled low medium high high max
anthropic-official: other Claude models; ant-messages disabled low medium high xhigh max
openai-official, openai-responses: GPT-6 models except GPT-6 Luna low low medium high xhigh max
openai-official, openai-responses: other models none low medium high xhigh max
openai-chat not sent not sent not sent not sent not sent not sent
deepseek-official none low high high high max
minimax-official: MiniMax-M3.1-Flash low low medium high xhigh max
minimax-official: MiniMax-M3 none low medium high high high
moonshot-official: Kimi K2 disabled enabled enabled enabled enabled enabled
moonshot-official: Kimi K3, Kimi K3.1 Pro none low high high max max
zai-official: GLM-5.3, GLM-5.3-Flash low low high high max max
zai-official: other GLM models disabled low medium high xhigh max
google-official, google-genai: image models minimal minimal high high high high
google-official, google-genai: Gemini 3 Pro low low high high high high
google-official, google-genai: other Pro models, Gemini 3.7, 3.8, 4 Argon low low medium high high high
google-official, google-genai: other Gemini models minimal low medium high high high

openai-chat-vllm-adapter sends no reasoning_effort either. It sets the switch the served model's chat template reads, as chat_template_kwargs:

Served model chat_template_kwargs
Qwen3.8-27B, Qwen3.8-Flash-Next enable_thinking: false for none; reasoning_effort low and medium as given, xhigh for high and above
DeepSeek-V4-Flash-Vision-Exp nothing for none, so no thinking; thinking: true with reasoning_effort low for low, high for medium to xhigh, max for max
DeepSeek-V4-Pro, DeepSeek-V4-Flash the same, but reasoning_effort high for low too
Qwen3.6-35B-A3B, Qwen3.5-0.8B, Qwen3.5-9B and any other model enable_thinking: false for none, true otherwise

openai-embedding and Gemini speech and embedding models ignore thinking_level.

thinking_summary

Client true false
anthropic-official, ant-messages display: "summarized" on the thinking block display: "omitted"
openai-official, deepseek-official reasoning.summary: "concise" nothing
openai-responses reasoning.summary: "concise" with a thinking_level; nothing without one nothing
google-official thinking_summaries: "auto" thinking_summaries: "none"
google-genai include_thoughts: true include_thoughts: false
openai-chat, openai-chat-vllm-adapter, minimax-official, moonshot-official, zai-official ignored ignored

On the Anthropic clients, a summary asked for without a thinking_level turns adaptive thinking on; with thinking disabled or between_tools, nothing is sent. openai-embedding and Gemini speech and embedding models ignore it.

prompt_caching

Client "enable" "enhance" "disable"
anthropic-official cache_control: {"type": "ephemeral"}, also when not set the same with ttl: "1h" nothing
anthropic-official on Bedrock the same marker with ttl: "5m" on the last block of the last user message, also when not set the same with ttl: "1h" nothing
moonshot-official on Kimi K3 and K3.1 Pro nothing prompt_cache_options: {"mode": "implicit", "ttl": "1h"} raises
Every other client; moonshot-official on Kimi K2 nothing raises raises
openai-embedding, Gemini embedding models ignored ignored ignored

fast_mode

false or not set sends nothing.

Client true
openai-official, openai-responses, openai-chat, openai-chat-vllm-adapter, google-official service_tier: "priority"
minimax-official service_tier: "priority" on MiniMax-M3; raises on MiniMax-M3.1-Flash
ant-messages speed: "fast" with the beta fast-mode-2026-02-01
anthropic-official the same; raises on Bedrock and on Claude 4.6, Sonnet 5.5, Haiku 5.5 and Fable 5.1
google-genai, deepseek-official, moonshot-official, zai-official, openai-embedding raises
Gemini embedding models ignored

image_config

Client Sent as
google-genai image_config
google-official response_format: a text entry, then an image entry carrying aspect_ratio and image_size
Every other client; Gemini speech and embedding models ignored

tts_config

Gemini speech models, on both Google clients:

tts_config Sent as
Not set the voice Kore
One entry its voice
Two entries one voice per speaker; an entry without a speaker raises. Gemini 3.8 speech models get the script as one part per turn, with the speaker as metadata.
Three or more raises

Every other model and client ignores it.

embedding_config

Client Sent as
openai-embedding dimensions
google-official, google-genai: embedding models output_dimensionality
Every other client and model ignored

trace_id

Client What it does
Every client Saves the turn under this id.
mmsp The server saves the turn; the client saves nothing.
moonshot-official on Kimi K2 Also sends it as prompt_cache_key.

In Python and TypeScript

The field names are the same in both languages. Both packages export ThinkingLevel and PromptCaching. Python takes the plain strings as well; TypeScript takes the enum members, such as ThinkingLevel.HIGH and PromptCaching.ENABLE.

Edit this page on GitHubOpen as Markdown