CrabTalkCrabTalk

Configuration

Full reference for crabllm.toml — providers, virtual keys, aliases, pricing, extensions, and storage.

CrabLLM is configured via a TOML file, passed with --config:

crabllm --config crabllm.toml

The --bind flag overrides the listen address.

Environment variables

Strings containing ${VAR} are expanded from environment variables at startup. Unknown variables expand to empty string. Use this for secrets:

api_key = "${OPENAI_API_KEY}"

Top-level fields

FieldTypeDefaultDescription
listenstringrequiredAddress to bind, e.g. "0.0.0.0:8080"
shutdown_timeoutinteger30Graceful shutdown timeout in seconds

Providers

Each provider is a named entry under [providers]:

[providers.my_openai]
kind = "openai"
api_key = "${OPENAI_API_KEY}"
models = ["gpt-4o", "gpt-4o-mini"]
FieldTypeDefaultDescription
kindstringrequiredProvider type (see Providers)
api_keystring""API key for authentication
base_urlstringper-kindBase URL override
modelslist[]Model names this provider serves
weightinteger1Routing weight for load balancing
max_retriesinteger2Max retries on transient errors
timeoutinteger30Per-request timeout in seconds
api_versionstringAPI version (Azure only)
regionstringAWS region (Bedrock only)
access_keystringAWS access key (Bedrock only)
secret_keystringAWS secret key (Bedrock only)

Virtual keys

[[keys]]
name = "team-a"
key = "sk-team-a-secret"
models = ["gpt-4o", "claude-sonnet-4-20250514"]

[[keys]]
name = "admin"
key = "sk-admin-secret"
models = ["*"]
FieldTypeDescription
namestringHuman-readable key name (used in usage tracking)
keystringThe bearer token clients send
modelslistAllowed models. ["*"] means all

When no keys are configured, authentication is disabled.

Aliases

[aliases]
gpt4 = "gpt-4o"
claude = "claude-sonnet-4-20250514"

Maps friendly model names to canonical names. Single-hop lookup.

Pricing

[pricing.gpt-4o]
prompt_cost_per_million = 2.50
completion_cost_per_million = 10.00

[pricing.claude-sonnet-4-20250514]
prompt_cost_per_million = 3.00
completion_cost_per_million = 15.00

Per-model token pricing in USD. Used by the budget extension for spend tracking.

Extensions

[extensions.cache]
ttl = 3600

[extensions.rate_limit]
rpm = 60

[extensions.usage]

[extensions.budget]
default_limit = 10000000

[extensions.logging]
level = "info"

See Extensions for details on each.

Storage

[storage]
kind = "memory"
KindFeature flagpath field
memorynone (default)not used
sqlitestorage-sqlitefile path, e.g. "crabllm.db"
redisstorage-redisURL, e.g. "redis://127.0.0.1:6379"

See Storage for details.

Full example

listen = "0.0.0.0:8080"
shutdown_timeout = 30

[providers.openai]
kind = "openai"
api_key = "${OPENAI_API_KEY}"
models = ["gpt-4o", "gpt-4o-mini"]
weight = 2
max_retries = 2
timeout = 30

[providers.anthropic]
kind = "anthropic"
api_key = "${ANTHROPIC_API_KEY}"
models = ["claude-sonnet-4-20250514"]

[providers.ollama]
kind = "ollama"
models = ["llama3.2"]

[aliases]
gpt4 = "gpt-4o"
claude = "claude-sonnet-4-20250514"

[[keys]]
name = "default"
key = "${CRABLLM_API_KEY}"
models = ["*"]

[pricing.gpt-4o]
prompt_cost_per_million = 2.50
completion_cost_per_million = 10.00

[extensions.rate_limit]
rpm = 100

[extensions.usage]

[extensions.logging]
level = "info"

[storage]
kind = "sqlite"
path = "crabllm.db"

On this page