MMSP
GitHub119

Models and endpoints

The clients MMSP is made of, the models each one serves, and how to call any compatible endpoint.

A client is named by its client_type. An official client speaks its vendor's own API, knows the vendor's models, and reads the vendor's key from the environment. A compatible client speaks one wire protocol for any endpoint that serves it.

Use exact model ids. A model id that begins with a known family names its official client on its own, so client_type may be omitted for it; any other id raises and asks for one.

Official clients

client_type Models Speaks Key and endpoint
openai-official gpt-6.1-sol, gpt-6-astra, gpt-5.6-sol, gpt-5.5; text-embedding-3-large, text-embedding-3-small OpenAI Responses; Embeddings for text-embedding-* OPENAI_API_KEY OPENAI_BASE_URL
anthropic-official claude-opus-5-5, claude-sonnet-5-5, claude-haiku-5-5, claude-fable-5-1, claude-opus-5, claude-sonnet-5 Anthropic Messages ANTHROPIC_API_KEY ANTHROPIC_BASE_URL
google-official gemini-4-argon, gemini-3.8-flash, gemini-3.7-flash, gemini-3.1-pro-preview; gemini-3.1-flash-image, gemini-3.8-flash-tts; gemini-embedding-2 Gemini Interactions GEMINI_API_KEY GEMINI_BASE_URL
zai-official glm-5.3, glm-5.3-flash, glm-5.2 Chat Completions ZAI_API_KEY ZAI_BASE_URL
moonshot-official kimi-k3.1-pro, kimi-k3.1-pro-highspeed, kimi-k3, kimi-k2.6 Chat Completions MOONSHOT_API_KEY MOONSHOT_BASE_URL
deepseek-official deepseek-flash, deepseek-v4-pro Responses DEEPSEEK_API_KEY DEEPSEEK_BASE_URL
minimax-official MiniMax-M3.1-Flash, MiniMax-M3 Responses MINIMAX_API_KEY MINIMAX_BASE_URL

Each row names the environment variables the client reads: the key, then the endpoint, which defaults to the vendor's own. An official client reads them whatever endpoint it is given, so it also serves a gateway that mirrors the vendor's API: OpenRouter serves deepseek/deepseek-v4-pro through deepseek-official, and SiliconFlow serves Pro/moonshotai/Kimi-K2.6 through moonshot-official, each with the gateway's base_url and api_key.

Gemini 4 Argon (gemini-4-argon) supports low, medium (default), and high thinking. MMSP maps none to low and xhigh/max to high. Its 1,048,576-token context window is shared by input, thinking, and output; synchronous streaming is limited to 65,536 output tokens. Longer outputs require Google's stored background execution, outside MMSP's stateless streaming interface. Caching is implicit only.

MiniMax-M3.1-Flash (MiniMax-M3.1-Flash) always thinks and supports low through max (default max). MMSP maps none to low and passes xhigh and max through. It has no priority tier and ignores tool_choice: "none", so fast_mode and tool_choice: "none" raise UnsupportedParameterError.

Routing by model id

Without a client_type, the family the model id begins with names the client:

The id begins with client_type
gpt-, text-embedding- openai-official
claude- anthropic-official
gemini- google-official
glm- zai-official
kimi- moonshot-official
deepseek- deepseek-official
minimax- minimax-official

The match ignores case, so MiniMax-M3 routes. A gateway's id such as moonshotai/kimi-k3, or Amazon Bedrock's global.anthropic.claude-fable-5, begins with no family and needs its client_type. The environment variable CLIENT_TYPE names one for every client the code does not.

The list in code is always current, with the base URL, the client, the modalities, the context window and the price of every entry:

import { listSupportedModels } from "@prismshadow/mmsp";

const models = listSupportedModels("CNY"); // "USD" by default
from mmsp import list_supported_models

models = list_supported_models(currency="CNY")  # "USD" by default

Compatible clients

Seven compatible clients call any endpoint that serves their protocol. Name one with client_type, and give it the endpoint and its key together: as base_url and api_key, or as OPENAI_BASE_URL and OPENAI_API_KEY in the environment (the ANTHROPIC_ pair for ant-messages, the GEMINI_ pair for google-genai, the VLLM_ pair for openai-chat-vllm-adapter, the MMSP_ pair for mmsp). A base_url other than the client's default endpoint without an api_key raises: the environment's key is not sent to an endpoint named in code (the rule). openai-chat-vllm-adapter and mmsp call it keyless instead, because their servers may take no key; without either, they reach http://127.0.0.1:8000/v1 and http://127.0.0.1:25752/v1.

client_type Protocol Served by
openai-responses OpenAI Responses OpenAI, OpenRouter, DeepSeek, Z.AI, MiniMax
openai-chat OpenAI Chat Completions. openai is an alias. Most gateways, SiliconFlow, vLLM
openai-chat-vllm-adapter Chat Completions as vLLM serves it. Maps thinking_level onto the template's own switches. vLLM
openai-embedding OpenAI Embeddings Any embedding endpoint
ant-messages Anthropic Messages Anthropic, OpenRouter, DeepSeek, Z.AI, MiniMax
google-genai Google generateContent, as the Google GenAI SDK speaks it Vertex AI, the Gemini API, gateways that proxy it
mmsp MMSP itself An MMSP server

Where a gateway serves more than one, prefer openai-responses. OpenRouter serves it for every model it hosts; SiliconFlow serves Chat Completions only.

const client = new AutoLLMClient({
  model: "qwen/qwen3.8-27b",
  clientType: "openai-responses",
  baseUrl: "https://openrouter.ai/api/v1",
  apiKey: process.env.OPENROUTER_API_KEY,
});
client = AutoLLMClient(
    model="qwen/qwen3.8-27b",
    client_type="openai-responses",
    base_url="https://openrouter.ai/api/v1",
    api_key=os.environ["OPENROUTER_API_KEY"],
)

Common base URLs, and the variable the examples read each key from:

Gateway Base URL Key
OpenRouter https://openrouter.ai/api/v1 OPENROUTER_API_KEY
SiliconFlow https://api.siliconflow.cn/v1 SILICONFLOW_API_KEY
TokenDance https://tokendance.space/gateway/v1, and https://tokendance.space/gateway for Anthropic Messages TOKENDANCE_API_KEY
Google Vertex AI https://aiplatform.googleapis.com VERTEX_API_KEY: the service-account JSON
Amazon Bedrock bedrock://<region>, such as bedrock://us-east-1 BEDROCK_API_KEY: ACCESS_KEY,SECRET_KEY
ModelVerse https://api.modelverse.cn/v1, and https://api.modelverse.cn/ for Claude MODELVERSE_API_KEY
OpenCode Go https://opencode.ai/inference/go/openai/v1, https://opencode.ai/inference/go/anthropic for Anthropic Messages, and https://opencode.ai/inference/go/google for Gemini OPENCODE_API_KEY
Fireworks AI https://api.fireworks.ai/inference/v1 FIREWORKS_API_KEY
DashScope https://dashscope.aliyuncs.com/compatible-mode/v1 DASHSCOPE_API_KEY
Qwen Token Plan https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1 QWEN_TOKEN_PLAN_API_KEY: a Token Plan key, which works only at this endpoint
Atlas Cloud https://api.atlascloud.ai/v1 ATLASCLOUD_API_KEY
Penguin Go https://go.penguin.ooo/api/v1 PENGUIN_GO_API_KEY
ModelScope https://api-inference.modelscope.cn/v1 MODELSCOPE_API_KEY: the account's access token
vLLM http://127.0.0.1:8000/v1/ VLLM_API_KEY, only when the server is started with one

TokenDance serves several protocols with one key. Its model list names the protocols of each model; pick a client that speaks one of them, such as deepseek-v4.1-flash through openai-chat, and the vendor's official client where TokenDance speaks the vendor's API: kimi-k3 through moonshot-official, glm-5.3 through zai-official.

OpenCode Go also serves several protocols with one key, each at its own base URL, and its docs name the protocol of each model: openai-responses for gpt-6-luna, gpt-5.6-luna, grok-4.7 and the Muse Spark models; ant-messages at the Anthropic base for claude-haiku-5-5, minimax-m3 and the Qwen models; google-genai at the Google base for gemini-4-argon; and openai-chat for the rest. On Fireworks AI, DashScope, Qwen Token Plan and Atlas Cloud every model takes openai-chat, and on ModelScope openai-responses. Penguin Go is an MMSP server, so its models take mmsp; a vLLM server's take openai-chat-vllm-adapter.

Gemini on Vertex AI

Name google-genai and pass the service-account JSON key as the API key. Vertex AI's Interactions endpoint serves none of these models, so google-official, which speaks Interactions, refuses such a key. The client calls the global endpoint, https://aiplatform.googleapis.com, with or without that base_url.

const client = new AutoLLMClient({
  model: "gemini-3.8-flash",
  clientType: "google-genai",
  apiKey: fs.readFileSync("service-account.json", "utf8"),
});
client = AutoLLMClient(
    model="gemini-3.8-flash",
    client_type="google-genai",
    api_key=open("service-account.json").read(),
)

Thought signatures replay only on the endpoint that issued them. See Fidelity.

Claude on Amazon Bedrock

Name anthropic-official, pass bedrock://<region> as the base URL and the AWS access key and secret key, joined by a comma, as the API key. The model id is a Bedrock inference profile such as global.anthropic.claude-opus-5-5; the global. profiles cost the Anthropic list price, the geo profiles (us., eu., jp., au.) 10% more.

const client = new AutoLLMClient({
  model: "global.anthropic.claude-opus-5-5",
  clientType: "anthropic-official",
  baseUrl: "bedrock://us-east-1",
  apiKey: process.env.BEDROCK_API_KEY, // "ACCESS_KEY,SECRET_KEY"
});
client = AutoLLMClient(
    model="global.anthropic.claude-opus-5-5",
    client_type="anthropic-official",
    base_url="bedrock://us-east-1",
    api_key=os.environ["BEDROCK_API_KEY"],  # "ACCESS_KEY,SECRET_KEY"
)

Wire protocols

Every client speaks one protocol on the wire, whichever client_type reaches it.

client_type Wire protocol
google-official, google-genai google-genai
anthropic-official, ant-messages ant-messages
openai-official, deepseek-official, minimax-official, openai-responses openai-responses
zai-official, moonshot-official, openai-chat, openai-chat-vllm-adapter openai-chat
openai-embedding, and openai-official for text-embedding-* openai-embedding
mmsp mmsp

Edit this page on GitHubOpen as Markdown