MarkDB

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 prefixProviderUpstream
claude-, claudeanthropicapi.anthropic.com
gpt-, chatgpt-, ft:gpt-, o1, o3, o4openaiapi.openai.com
gemini-, geminigoogleGemini (OpenAI-compat endpoint)
grok-, grokxaiapi.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

ModelProviderNotes
claude-haiku-4-5AnthropicCheap, fast. Default for Anthropic.
claude-sonnet-5AnthropicBalanced general-purpose.
claude-opus-5AnthropicHighest quality, slowest.
gpt-5.6-lunaOpenAICheapest, fastest. Default for OpenAI.
gpt-5.6-terraOpenAIBalances intelligence and cost.
gpt-5.6OpenAIFrontier flagship (alias for gpt-5.6-sol).
gemini-3.5-flash-liteGoogleCheapest, fastest. Default enrichment model.
gemini-3.6-flashGoogleWorkhorse; better coding, fewer output tokens.
gemini-3.1-pro-previewGoogleHighest quality Gemini; preview status.

Embedding models

ModelProviderDimensions
gemini-embedding-001Google768 / 1536 / 3072 (default)
text-embedding-3-largeOpenAI256 / 512 / 1024 / 2048 / 3072
text-embedding-3-smallOpenAI256 / 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:

RoleModelProvider
Enrichment (summaries)gemini-3.5-flash-liteGoogle
Embeddings (search index)gemini-embedding-001 (3072-d)Google

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.

On this page