Integrations / Continue
Continue
Continue's openai provider takes an apiBase override, which is all Viro needs. Unlike most clients, Continue sends your model string through unchanged — no prefix juggling. It does have one trap, covered below, and it's the one that will actually bite you.
Edit ~/.continue/config.yaml (%USERPROFILE%\.continue\config.yaml on Windows). Continue reloads on save.
name: My Config
version: 0.0.1
schema: v1
models:
- name: Viro Optimized
provider: openai
model: viro/optimized
apiBase: https://api.viro.app/v1
apiKey: <your-viro-key>
capabilities:
- tool_use
defaultCompletionOptions:
contextLength: 128000
- name: Viro Embeddings
provider: openai
model: viro/qwen3-embedding-8b
apiBase: https://api.viro.app/v1
apiKey: <your-viro-key>
roles:
- embedGet a key from API Keys. The value of model is sent to us verbatim, so it must be a live Viro slug — GET https://api.viro.app/v1/models has the current list.
Continue decides which endpoint to call by pattern-matching the model name. For o-series and gpt-5 models it defaults to OpenAI's /responses endpoint instead of /chat/completions.
Viro does not serve a Responses endpoint. So every Viro slug that contains gpt-5 — openai/gpt-5.6-terra, openai/gpt-5.6-luna, openai/gpt-5.4-mini, openai/gpt-5.4-nano — needs the default turned off, or the request never reaches a route that exists:
- name: GPT-5.6 Terra
provider: openai
model: openai/gpt-5.6-terra
apiBase: https://api.viro.app/v1
apiKey: <your-viro-key>
useResponsesApi: false
capabilities:
- tool_useModels without gpt-5 in the name are unaffected, so the flag is only needed on those entries — but it is harmless to set everywhere, and setting it everywhere means a future slug rename can't silently reintroduce the problem.
Continue autodetects model capabilities from the provider and model name. That detection is built around OpenAI's own catalog and won't recognise viro/* slugs, so tool calling can come back off by default — and Agent mode requires it. Declaring capabilities: [tool_use] explicitly, as in the config above, overrides the guess.
Add image_input alongside it for vision models. The Models page marks which models accept image input and carries the real context window for contextLength.
A model entry defaults to [chat, edit, apply, summarize]. Naming roles explicitly lets you split work across models — a frontier model for chat and edit, something cheap for apply, and viro/qwen3-embedding-8b for embed so codebase indexing runs through Viro too — see Embeddings.
Continue's autocomplete role wants a fast fill-in-the-middle model and a sub-second budget. Viro's catalog is aimed at chat and agentic work, so expect autocomplete through Viro to feel slower than a purpose-built local model.