The list of LLM models that appear in Opik’s dropdowns (Playground, LLM-as-Judge, Automation Rules, Optimization Studio) is served by the backend from a YAML registry. The registry is composed from up to three sources, merged in this order:
llm-models-default.yaml shipped inside the backend JAR. Always loaded. This is the source every deployment sees out of the box.This page describes how to configure these sources for self-hosted deployments.
All configuration is via env vars on the opik-backend container.
Fields:
id (required) — the model identifier used at inference time.qualifiedName (optional) — disambiguates models that exist under multiple providers (e.g. Gemini via Vertex AI vs. the Gemini API directly). Used as the routing key when set.label (optional) — the human-readable name shown in dropdowns. Falls back to id when omitted.structuredOutput (optional, default false) — whether the model supports JSON schema / tool-calling structured output mode.reasoning (optional, default false) — whether the model is a reasoning model (enforces temperature = 1.0 and unlocks reasoning-effort parameters in the UI).Models are keyed by id across every provider. qualifiedName is used for routing lookups (to disambiguate gemini-2.5-pro under the Gemini direct API vs. Vertex AI), but override deduplication always uses id. When a merge happens:
id not present in lower layers is appended to that provider’s list.id that matches a lower layer replaces the full definition. Partial overrides are not supported — supply all fields you want on the final model.Leave the defaults in place. The backend serves the classpath llm-models-default.yaml shipped with your Opik release — no outbound traffic, no extra configuration. Upgrade Opik to pick up new models.
If you want new models to reach your running deployment between Opik releases — e.g. if you run long-lived stacks on an extended upgrade cadence and want provider-side additions to land automatically — point the backend at a remote YAML:
Comet SaaS uses https://cdn.comet.ml/opik/llm-models-default.yaml, regenerated daily by the Opik sync workflow — you can either mirror that content on your own CDN or point directly at it if your policies allow.
Remote fetch failures are logged but non-fatal: the backend keeps serving the last successful registry (or the classpath defaults if the first fetch fails), so enabling the remote tier never risks losing model routing.
Create /etc/opik/my-models-override.yaml on the host:
Mount it into the backend container and set the path:
Create a ConfigMap with your override YAML:
Mount it in the backend Deployment by extending your Helm values:
After restart, check that your model appears:
The same list appears in the UI dropdowns within seconds of a browser refresh.