Intended for the LAP platform repo (litellm-agent-platform-2), but issues are disabled there — filing here since this server is the concrete case.
Context
Runtime agents take a model (forwarded by LAP on the agent). There's no way for LAP/users to discover which models a runtime supports, and this server rejects unknown models.
Observed (PR #81 / this server):
- Registers a fixed model list via
LITELLM_MODELS env, passed to opencode's provider config.
- opencode rejects any model not in that map → session fails with
session.error. Reproduced: litellm/claude-sonnet-4-5 works; litellm/gpt-5.5 errors until added to the env list.
- LAP forwards the agent's model; a bare name (
claude-sonnet-4-5) doesn't match the server's litellm/<model> assumption → opencode can't resolve it.
Operator has to hand-maintain a per-runtime model env list; a mismatch silently errors the session.
Ask
1. Unified Models list API in the SDK — one method listing a runtime's models in the Anthropic Models list format (Models.list → { "data": [{ "id", "type":"model", "display_name", "created_at" }] }), normalized across runtimes:
- anthropic (claude managed agents) → Anthropic
GET /v1/models
- cursor → map Cursor's list into the Anthropic shape
- opencode-behind-Anthropic → proxy the gateway's
/v1/models (e.g. LiteLLM) into the Anthropic shape
LAP reads this to populate the model picker so users pick a valid model.
Ref: https://platform.claude.com/docs/en/api/python/models/list
2. Dynamic model forwarding (server side) — accept whatever model is sent and forward it, no pre-registered env list. When a gateway is configured: normalize the agent model to litellm/<id> and register it dynamically in opencode's provider map at agent-create time, so any picked model works without redeploying with a new LITELLM_MODELS.
Acceptance
- SDK:
models().list(runtime) returns Anthropic-format list for anthropic / cursor / opencode-anthropic.
- This server:
GET /v1/models proxying the gateway list; agent model accepted + dynamically registered + routed (no LITELLM_MODELS requirement).
- A session using any listed model no longer errors with
session.error.
Context
Runtime agents take a model (forwarded by LAP on the agent). There's no way for LAP/users to discover which models a runtime supports, and this server rejects unknown models.
Observed (PR #81 / this server):
LITELLM_MODELSenv, passed to opencode's provider config.session.error. Reproduced:litellm/claude-sonnet-4-5works;litellm/gpt-5.5errors until added to the env list.claude-sonnet-4-5) doesn't match the server'slitellm/<model>assumption → opencode can't resolve it.Operator has to hand-maintain a per-runtime model env list; a mismatch silently errors the session.
Ask
1. Unified Models list API in the SDK — one method listing a runtime's models in the Anthropic Models list format (
Models.list→{ "data": [{ "id", "type":"model", "display_name", "created_at" }] }), normalized across runtimes:GET /v1/models/v1/models(e.g. LiteLLM) into the Anthropic shapeLAP reads this to populate the model picker so users pick a valid model.
Ref: https://platform.claude.com/docs/en/api/python/models/list
2. Dynamic model forwarding (server side) — accept whatever model is sent and forward it, no pre-registered env list. When a gateway is configured: normalize the agent model to
litellm/<id>and register it dynamically in opencode's provider map at agent-create time, so any picked model works without redeploying with a newLITELLM_MODELS.Acceptance
models().list(runtime)returns Anthropic-format list for anthropic / cursor / opencode-anthropic.GET /v1/modelsproxying the gateway list; agent model accepted + dynamically registered + routed (noLITELLM_MODELSrequirement).session.error.