Skip to content

Latest commit

 

History

190 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mps 1

modelparams.dev

An open, community-maintained catalog of LLM API parameters.

npm version npm downloads License: MIT

Every API parameter each AI model accepts, in one place: temperature, top_p, max_tokens and the rest of the request body, with defaults, ranges and gating conditions. Not weight counts — see model parameters vs. API parameters. Inspired by models.dev; we use it at Manifest.

TypeScript

npm install modelparams

ParamsOf<Id> is the exact set of parameters a model accepts. Pass one it doesn't, and your code won't compile.

import type { ParamsOf } from "modelparams";
import OpenAI from "openai";

const params: ParamsOf<"openai/gpt-4.1"> = {
  max_tokens: 1024,
  temperature: 0.7,
  // top_k: 40, // won't compile: gpt-4.1 has no top_k
};

await new OpenAI().chat.completions.create({ model: "gpt-4.1", messages, ...params });

Defaults, runtime validation, and the helper APIs are in the package README.

Python

pip install modelparams

Generated TypedDict definitions provide model-specific autocomplete and static checking, while Pydantic validates untrusted values at runtime:

from modelparams import validate_params
from modelparams.types.openai import Gpt_4_1Params

params: Gpt_4_1Params = {"max_tokens": 1024, "temperature": 0.7}
validated = validate_params("openai/gpt-4.1", params)

Defaults, catalog helpers, and validation details are in the Python package README.

API

Prefer raw JSON?

curl https://modelparams.dev/api/v1/models.json
curl https://modelparams.dev/api/v1/models/openai/gpt-5.5.json

Schema at https://modelparams.dev/api/v1/schema.json, per the Model Parameters convention.

Validate a request

POST the parameters you're about to send. You get back what's wrong — including combinations the provider rejects — and a corrected payload.

curl -s https://modelparams.dev/api/v1/validate \
  -H 'Content-Type: application/json' \
  -d '{"model":"anthropic/claude-3-opus-20240229","params":{"temperature":0.5,"top_p":0.9}}'

Or pass what your SDK is actually configured with — the base URL and the wire model string:

curl -s https://modelparams.dev/api/v1/validate \
  -H 'Content-Type: application/json' \
  -d '{"baseUrl":"https://api.fireworks.ai/inference/v1","model":"accounts/fireworks/models/kimi-k3","params":{"top_k":40}}'
{
  "valid": false,
  "issues": [
    {
      "path": "top_p",
      "code": "not_applicable",
      "message": "top_p does not apply when temperature ≠ 1",
      "conflictsWith": ["temperature"]
    }
  ],
  "safeParams": { "temperature": 0.5 }
}

Agents

Give a coding agent the catalog, so it looks parameters up instead of recalling them.

MCP server — hosted at https://modelparams.dev/mcp, nothing to install, always the catalog this site is serving:

claude mcp add --transport http modelparams https://modelparams.dev/mcp
codex mcp add modelparams --url https://modelparams.dev/mcp

Four tools: validate_model_params to check a params object before you send it, get_model_params for one model's full surface, list_models and find_models_supporting to search the catalog.

Without MCPnpx skills add mnfst/modelparams.dev installs the companion agent skill, and llms.txt points an agent at a URL.

One model, many providers

The same model accepts different parameters on each host that serves it. The catalog has one entry per host, each probed against that host's own endpoint.

moonshot/kimi-k3 fireworks/kimi-k3
Wire id kimi-k3 accounts/fireworks/models/kimi-k3
temperature: 1.8 ✗ 400
top_k
Thinking control
  • wireId — the exact string to send when it differs from the catalog slug. Every API response and MCP tool returns it.
  • Provider is mandatorykimi-k3 alone is refused with both qualified ids to retry with; the catalog never guesses a host.
  • {scope} in a wireId — substitute your routing geography before sending. Bedrock serves most newer models only through a cross-region inference profile, whose id is the model id behind a geography prefix: us, eu, apac, jp, au, ca, sa, or global. So "{scope}.anthropic.claude-sonnet-4-5-20250929-v1:0" becomes eu.anthropic.… in Frankfurt and global.anthropic.… if you want AWS to route it for you. A wireId with no placeholder is already complete and works in every region that serves it. The catalog deliberately does not enumerate which model exists in which region — that is per-account, changes constantly, and your own ListInferenceProfiles is the accurate source.

API surfaces

One entry documents one wire format.

Surface Status
OpenAI Chat Completions — openai, deepseek, xai, mistral, moonshot, alibaba, z-ai, groq, fireworks, …
Anthropic Messages
Google generateContent
Amazon Bedrock Converse — every bedrock/* entry
Vertex AI generateContent — every vertex/* entry
Subscription plans (-subscription entries)
Amazon Bedrock InvokeModel (native per-vendor bodies)
Vertex AI rawPredict (Anthropic, Meta, Mistral on Vertex)
MiniMax native endpoint
OpenAI Responses API
Google Interactions API
xAI native SDK

Embeddings, audio, image, and batch APIs are out of scope. Missing a surface? Open an issue or a PR.

vertex/* covers the Gemini models Vertex serves through generateContent, which shares the generationConfig vocabulary with the first-party Gemini API but not its model list or its bounds. Third-party models on Vertex (Claude, Llama, Mistral) go through rawPredict with each vendor's native body, which is a different surface and is not covered.

Bedrock is the sharpest case, because one host serves both surfaces and the SDK you pick decides which. ConverseCommand (@aws-sdk/client-bedrock-runtime) takes inferenceConfig.maxTokens and puts vendor extras in additionalModelRequestFields — that is what bedrock/* documents. AnthropicBedrock (@anthropic-ai/bedrock-sdk) calls InvokeModel with the native Anthropic body (max_tokens, top-level thinking) instead, so these entries do not describe it. Same model, same key, two vocabularies.

Adding a model

Drop a YAML file in models/<provider>/, open a PR, and CI validates it against the schema. Details in CONTRIBUTING.md. Can't open a PR? File an issue with a link to the docs.

Local development

npm install
npm run dev          # http://localhost:3000
npm run build        # → dist/
npm run validate     # check every YAML
npm test             # site tests, including the /api/v1/validate function
npm test --workspaces # + every published package
npm run codegen:python # regenerate the Python package catalog and types

License

MIT

About

Open-source AI model parameters database.

Topics

Resources

Contributing

Stars

14 stars

Watchers

0 watching

Forks

Contributors

Languages