Thomas Piacentini
← Workshop

Chapter

Providers and models

Original text · English

Every provider id docker-agent 1.149.0 knows, the credential it reads, the provider/model reference form, the DMR endpoint order, the auto rule, and the keys that tune a model.

docker-agent doctor printed 20 providers with their credential variables on the capture machine, every one not set (our source record). The docs name 31 ids, and the schema description of provider lists the built-in aliases {{schema ProviderConfig}}. The table below is the union, in the order of the doctor output and then of the docs. The doctor prints canonical ids such as fireworks-ai, and the legacy ids stay accepted as aliases (conflict C58).

The provider ids

Provider id Legacy id Credential
anthropic none ANTHROPIC_API_KEY, or auth.type: workload_identity_federation
openai none OPENAI_API_KEY
chatgpt none none. A browser sign-in through docker agent setup, shown as CHATGPT_OAUTH_TOKEN
github-copilot none GITHUB_TOKEN or GH_TOKEN, a PAT with the copilot scope
google none GOOGLE_API_KEY or GEMINI_API_KEY. Vertex AI uses GOOGLE_GENAI_USE_VERTEXAI, GOOGLE_CLOUD_PROJECT, GOOGLE_CLOUD_LOCATION
mistral none MISTRAL_API_KEY
openrouter none OPENROUTER_API_KEY
baseten none BASETEN_API_KEY
ovhcloud none OVH_AI_ENDPOINTS_ACCESS_TOKEN
groq none GROQ_API_KEY
fireworks-ai fireworks FIREWORKS_API_KEY
deepseek none DEEPSEEK_API_KEY
cerebras none CEREBRAS_API_KEY
togetherai together TOGETHER_API_KEY
huggingface none HF_TOKEN
moonshotai moonshot MOONSHOT_API_KEY
vercel none AI_GATEWAY_API_KEY
amazon-bedrock none AWS_BEARER_TOKEN_BEDROCK, or the AWS credential chain, which the doctor counts as three more variables
opencode opencode-zen OPENCODE_API_KEY
opencode-go none OPENCODE_API_KEY
dmr none none. A local Docker Model Runner
ollama none none. An optional base_url
xai none XAI_API_KEY
nebius none NEBIUS_API_KEY
nvidia none NVIDIA_API_KEY
minimax none MINIMAX_API_KEY
cloudflare-workers-ai none CLOUDFLARE_API_TOKEN and CLOUDFLARE_ACCOUNT_ID
cloudflare-ai-gateway none CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID, and CLOUDFLARE_GATEWAY_ID
requesty none REQUESTY_API_KEY
azure none AZURE_API_KEY and a base_url
a name under providers none the variable in token_key

The doctor lists eleven ids that the docs tables do not count as providers, and the docs list ten that the doctor did not print. A credential can also come from ~/.config/cagent/.env, from a credential_helper command in the user config, from Docker Desktop, or from a 1Password op:// reference {{docs-agent Secrets}}.

The model reference

Form Example Meaning Source
provider/model dmr/ai/qwen3, anthropic/claude-sonnet-4-5 An inline model on a known provider {{docs-agent Models}}
a name from models model: local A named model with its own keys {{docs-agent Models}}
name/model my_gateway/gpt-4o A model on a provider defined under providers {{docs-agent Provider Definitions}}
a,b anthropic/claude-sonnet-4-5,openai/gpt-5 An alloy. The runtime alternates between the models in one conversation {{docs-agent Models}}
auto model: auto The first cloud provider with a credential, else a pulled DMR model {{docs-agent Set up a model}}
first_available: [...] a list of references The first candidate whose credentials are configured, resolved at load time {{docs-agent Models}}
--model [agent=]provider/model --model root=dmr/ai/qwen3 A CLI override, repeatable per agent {{help-agent docker-agent run}}

The auto rule

auto picks the first cloud provider with a configured credential and then a locally pulled Docker Model Runner model {{docs-agent Set up a model}}. On the DMR side it prefers the model named in model: when that model is already pulled. Otherwise it takes the first available non-embedding model, instead of asking to pull ai/qwen3:latest {{docs-agent Docker Model Runner}}. It never picks a provider defined under providers {{docs-agent Provider Definitions}}. DOCKER_AGENT_DEFAULT_MODEL sets the model used when none is given {{docs-agent User settings}}. On the capture machine, with no credential and the runner unreachable, the doctor still printed auto -> dmr/ai/qwen3:latest and reported one issue (our source record).

The DMR endpoint

Step Endpoint
1 base_url on the model or the provider, when set
2 the endpoint the docker model plugin reports. The doctor runs docker model status --json through the Desktop context
3 the default http://127.0.0.1:12434/engines/llama.cpp/v1 when the plugin is not found
in a container http://model-runner.docker.internal/engines/v1, with unload_api: /engines/_unload on the provider
unload the base_url with the trailing /v1 replaced by _unload, called by the unload builtin on on_agent_switch

The runner needs no API key, and the API is not authenticated (conflict C84). The docs state only that the default URL is used when the plugin is not found. The order above puts that default third, after base_url and the plugin, as the research file reads it.

The models gateway

--models-gateway and DOCKER_AGENT_MODELS_GATEWAY route model traffic through one address, and bypass_models_gateway: true or a custom base_url sends a model directly to its provider {{docs-agent Model Configuration}}. docker agent models asks the gateway /v1/models first and uses the providers with credentials when the gateway answers nothing usable {{docs-agent features/cli}}. The Docker gateway needs a Docker token. Desktop hands out one that lasts 15 minutes. When Desktop has none, docker-agent exchanges the docker login access token for a fresh one over HTTPS {{docs-agent Secrets}}. The exchange is cached under the cache directory, DOCKER_AGENT_NO_TOKEN_EXCHANGE=1 turns it off, and docker agent debug auth shows the token in use.

Keys that tune a model

Key Applies to Values Source
temperature, top_p, frequency_penalty, presence_penalty every provider sampling parameters, sent per request {{schema ModelConfig}}
max_tokens every provider output tokens per response, not the context window {{schema ModelConfig}}
thinking_budget OpenAI none, minimal, low, medium, high, xhigh, max. xhigh needs gpt-5.2 or later, none and max need gpt-5.6 or later {{schema ModelConfig}}
thinking_budget Anthropic an integer from 1024 to 32768, adaptive, adaptive/<effort>, or an effort level {{schema ModelConfig}}
thinking_budget Amazon Bedrock with Claude an integer, or low, medium, high {{schema ModelConfig}}
thinking_budget Gemini 2.5 an integer, -1 dynamic, 0 off, 24576 at most {{schema ModelConfig}}
thinking_budget Gemini 3 minimal on Flash only, low, medium, high {{schema ModelConfig}}
thinking_budget DMR on llama.cpp sent as llamacpp.reasoning-budget through _configure. On vLLM as thinking_token_budget per request. Ignored on MLX and SGLang {{docs-agent Docker Model Runner}}
task_budget Anthropic an integer or {type: tokens, total: N}, sent as output_config.task_budget {{schema ModelConfig}}
provider_opts.context_size DMR the context window, sent through _configure. max_tokens is never the window {{docs-agent Docker Model Runner}}
provider_opts.runtime_flags, raw_runtime_flags DMR flags for the inference runtime, as a list or one string. Exclusive with each other {{docs-agent Docker Model Runner}}
provider_opts.keep_alive DMR a Go duration, 0 unloads at once, -1 never unloads {{docs-agent Docker Model Runner}}
provider_opts.mode DMR completion, embedding, reranking, image-generation {{docs-agent Docker Model Runner}}
provider_opts.speculative_draft_model, speculative_num_tokens, speculative_acceptance_rate DMR speculative decoding with a draft model {{docs-agent Docker Model Runner}}
provider_opts.gpu_memory_utilization, hf_overrides DMR on vLLM engine settings sent through _configure {{docs-agent Docker Model Runner}}
provider_opts.supports_images, supports_pdf DMR declare attachment types, because DMR models are not in the models.dev catalogue {{schema ModelConfig}}
provider_opts.http_headers OpenAI-compatible providers headers on every request, such as the Copilot integration id {{schema ModelConfig}}
fallback.models, retries (2), cooldown (1m) every provider models tried after a failure, with backoff {{schema FallbackConfig}}
capabilities, output_capabilities, cost every provider attachment flags, image output, and USD prices that override the catalogue {{schema ModelConfig}}
title_model, compaction_model, compaction_threshold (0.9) every provider cheaper models for titles and summaries, and the compaction point {{schema ModelConfig}}
providers.<name> defaults every provider temperature, max_tokens, thinking_budget, task_budget, and the other defaults a model inherits {{docs-agent Provider Definitions}}

The docs give a default reasoning effort per provider {{docs-agent Models}}. It is medium on OpenAI always-reasoning models, off on Anthropic, -1 on Gemini 2.5, and model-dependent on Gemini 3.

Sources: research/sources/probes/docker-agent-doctor.txt, docker-agent-models-list.txt; research/sources/agent-schema.json (ModelConfig, ProviderConfig, FallbackConfig); research/sources/docs-docker-agent.md (pages concepts/models, configuration/models, providers/overview, providers/custom, providers/dmr, getting-started/set-up-a-model, guides/secrets, configuration/user-settings, features/cli); research/sources/help-docker-agent.md (run, models, doctor); /Users/rohitghumare/.cache/aiefs-manuals-wip/docker-research/03-stack.md note 14; research/conflicts-register.md rows C58, C84

Code and artifacts 1
What you take away

Saved in your notebook on this device.

Sources and limits

Reading checkpoints are self-reported. Test results are recorded separately and apply to the executed cases.

AI Engineering from Scratch · 3f9715c · MIT

Download this file ↓