Models & routing
How MarkDB picks a provider from a model name, and the models it uses for enrichment and embeddings.
Models show up in MarkDB in two places: the model your client asks the proxy for, and the models MarkDB uses internally to enrich and embed your memory.
How routing works
The proxy chooses the upstream provider from the model name, matching a set of prefix rules in order (first match wins, case-insensitive):
| Model prefix | Provider | Upstream |
|---|---|---|
claude-, claude | anthropic | api.anthropic.com |
gpt-, chatgpt-, ft:gpt-, o1, o3, o4 | openai | api.openai.com |
gemini-, gemini | google | Gemini (OpenAI-compat endpoint) |
grok-, grok | xai | api.x.ai |
Matching is case-insensitive and first-match-wins, and the rule set also
accepts underscore variants (claude_, gpt_, gemini_, grok_) for tools
that normalize model names that way.
The provider name is also the credential bucket: it is the key MarkDB looks up
in your LLM keys to call that
upstream. For claude-*, gpt-*/o* and gemini-*, MarkDB dispatches through
the native provider SDK so the Chat Completions, Responses and Messages surfaces
all work regardless of which provider actually serves the model.
Any matching model routes
You are not limited to the curated list below. Any model name that matches a
prefix rule routes to that provider. Send claude-opus-4-8, gpt-5.5,
gemini-3.5-flash or any older generation you have already standardized on.
Operators can replace the routing table entirely with
MARKDB_PROXY_ROUTING_RULES (inline JSON) or MARKDB_PROXY_ROUTING_RULES_FILE.
The curated catalog
The dashboard exposes a curated catalog for choosing your enrichment and embedding models under Settings -> Processing. These are the entries validated for internal use; the proxy itself will still route any prefix-matching model.
Chat models
| Model | Provider | Notes |
|---|---|---|
claude-haiku-4-5 | Anthropic | Cheap, fast. Default for Anthropic. |
claude-sonnet-5 | Anthropic | Balanced general-purpose. |
claude-opus-5 | Anthropic | Highest quality, slowest. |
gpt-5.6-luna | OpenAI | Cheapest, fastest. Default for OpenAI. |
gpt-5.6-terra | OpenAI | Balances intelligence and cost. |
gpt-5.6 | OpenAI | Frontier flagship (alias for gpt-5.6-sol). |
gemini-3.5-flash-lite | Cheapest, fastest. Default enrichment model. | |
gemini-3.6-flash | Workhorse; better coding, fewer output tokens. | |
gemini-3.1-pro-preview | Highest quality Gemini; preview status. |
Embedding models
| Model | Provider | Dimensions |
|---|---|---|
gemini-embedding-001 | 768 / 1536 / 3072 (default) | |
text-embedding-3-large | OpenAI | 256 / 512 / 1024 / 2048 / 3072 |
text-embedding-3-small | OpenAI | 256 / 512 / 1024 / 1536 |
Embedding dimensions use a Matryoshka grid. A single model can emit several sizes, and MarkDB indexes at one fixed size (the default is 3072).
Defaults
When an account hasn't configured anything, MarkDB falls back to:
| Role | Model | Provider |
|---|---|---|
| Enrichment (summaries) | gemini-3.5-flash-lite | |
| Embeddings (search index) | gemini-embedding-001 (3072-d) |
Both default to Google so an account only needs one provider key to run the whole
pipeline. gemini-3.5-flash-lite is the enrichment default because it's the
cheapest and fastest model of its generation, which matters when enrichment runs
a summary for every turn.
Keep the embedder consistent
Query-time embeddings must use the same model and dimension as the indexed pages, or vector search can't compare them. If you change the embedding model, the search index is rebuilt against the new signature. See Hybrid search.
Configuring per account
Set your enrichment and embedding models under Settings -> Processing, where you can also toggle enrichment and embedding on or off. Add the matching provider credential under Settings -> LLM keys so MarkDB can call it.