Docs

Theia IDE

The Theia IDE has a provider for arbitrary OpenAI-compatible models, configured as a list in settings.json. One entry per model id, all of them pointing at the same base URL and the same key.

One entry in ai-features.openAiCustom.customOpenAiModels — model, url and apiKey — puts Kunavo behind Theia Coder, the Architect and inline completion.

settings.json — ai-features.openAiCustom.customOpenAiModels
{
  "ai-features.openAiCustom.customOpenAiModels": [
    {
      "model": "claude-sonnet-5",
      "url": "https://api.kunavo.com/v1",
      "id": "kunavo-sonnet-5",
      "apiKey": "sk-kn-...",
      "developerMessageSettings": "system"
    },
    {
      "model": "claude-haiku-4-5",
      "url": "https://api.kunavo.com/v1",
      "id": "kunavo-haiku-4-5",
      "apiKey": "sk-kn-...",
      "developerMessageSettings": "system"
    }
  ]
}
url keeps the /v1. Theia's prose does not state a rule — its Readme says only that “model and url are mandatory attributes, indicating the end point and model to use”. What settles the form is the worked example on the same documentation page, for the one vendor there that is not OpenAI: "url": "https://api.mistral.ai/v1". Endpoint root, suffix included — so https://api.kunavo.com/v1 here, not the bare origin. If a request 404s, that field is the first thing to look at; the curl below tells you which of the two shapes the endpoint actually answers on.
Theia IDE, not the Theia framework. The same name covers an end-user application and the platform other tools are built on — the preference above belongs to the IDE and to Theia AI's OpenAI provider package. If you are building your own product on Theia, the field names are the same but the place you set them is your own product's configuration, not this settings file.
This configuration was read off Theia's own documentation on the date below. Kunavo has not run the Theia IDE against its endpoint — not a chat turn, not an inline completion, not a tool call. A published setup page is not a test, and nothing here should be read as one; what you can settle in ten seconds is the curl below, and the client's behaviour is between you and Theia.
Kunavo serves no embedding, text-to-speech or speech-to-text model, so this endpoint answers chat completions and nothing else. The AI features documented for the IDE — chat agents, inline completion, terminal assistance — ask for nothing else, and any vector index or audio step elsewhere in your setup keeps whatever provider key it already has.

Step by step

  1. Create a key at /app/keys and copy it — it is shown once.
  2. Turn the feature on: Theia's docs say to go to Preferences and enable the setting “AI-features => AI Enable”. Nothing below appears until that is done.
  3. Open the AI Configuration view — Alt+A, or AI Configuration in the Manage (gear) menu at the bottom-left, right below Settings. Its categories are General, Providers & Models, Model Aliases, Agents, Prompts & Skills, Variables, Tools, Token Usage and MCP Servers.
  4. Add the entries above. The docs describe this as clicking the link in the settings section for OpenAI Compatible Models — the preference is a structured list, and Theia notes that structured settings without a dedicated editor “defer to settings.json”, which is the file you land in. One object per model id; the url and apiKey repeat.
  5. Point something at it. Under Agents, each agent has a Language Model selector; many agents instead resolve a model alias, so setting default/code, default/universal, default/code-completion, default/summarize and default/fast under Model Aliases moves several agents at once.
  6. Send a chat message to Theia Coder, then ask for something that touches a file. The agents in this IDE lean on tool calls and workspace content, so a first run that reads or edits something tells you more than a greeting does — and Token Usage in the same view shows what the turn cost you in tokens.

Checked against the Theia IDE's AI features page, section OpenAI Compatible Models on September 21, 2026. Third-party settings move; if a field name here no longer matches what you see, that page is the authority, not this one.

Verify before you debug the client

One request settles whether a failure is the endpoint, the key, or the configuration file. If this returns JSON, the same base URL and key work in Theia IDE.

# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
  -H "Authorization: Bearer sk-kn-..."

Which model id to put in the field

Every text model is reachable as a model id — the live list is GET /v1/models, and the catalog with prices is on the models page. Rates are USD per 1M tokens, input / output.

Model idKunavo in / outWhere it fits in Theia IDE
claude-sonnet-5$2.00 / $10.00Theia Coder and the default/code alias — the model that edits files
claude-opus-5$2.00 / $10.00the Architect in Plan Mode, where a wrong plan is the expensive mistake
claude-haiku-4-5$0.40 / $2.00default/fast and default/summarize — chat naming, lookups, compaction
gemini-3-8-flash$0.525 / $2.625default/code-completion, where Automatic Code Completion fires as you type
gpt-5-6-sol$2.00 / $12.00a second opinion from another family — one more entry, same url and key
Billing is per token from a prepaid balance with no monthly fee — see billing. On repeated context — which is most of what an editor or a chat client sends — prompt caching moves the bill more than the model choice does.

What Theia claims for this provider

The LLM Providers Overview table on Theia's own page rates each provider on three axes. This is Theia's claim about Theia, copied from that table on the date above — it is not a Kunavo test result, and the column headed “What that needs from the model id” is the only part of this table written here.

Theia's rowOpenAI CompatibleWhat that needs from the model id
StreamingYes (State: Public)Nothing extra. The Readme documents enableStreaming on the same object, true by default — set it to false if a turn hangs and you want to isolate the stream.
Tool CallsYes (State: Public)A model id that supports tools. The agents that edit files, run commands or drive MCP servers are all tool-call agents, so an id without tool support limits you to plain chat.
Structured OutputYes (State: Public)Nothing extra at configuration time, but it is the axis most likely to differ between ids from different families behind one endpoint.

Theia adds its own caveat two paragraphs above that table, worth repeating because it is the honest frame for this whole page: not all models “may work out of the box, as they may require specific customizations or optimizations”.

What actually costs money

The Theia IDE is open source and free to download, and its AI features carry no charge of their own — what costs money is the model calls, billed by whoever holds the key in apiKey. Two settings move that bill more than the model choice does, and both are in the docs:

  1. Automatic Code Completion is on by default, and the docs describe it as making “continuous requests to the underlying LLM while coding”. It is the agent that runs thousands of times a day. Pin default/code-completion to a cheap id, or switch the agent to manual mode in 'AIFeatures'=>'CodeCompletion' and trigger it with Ctrl+Alt+Space.
  2. Max Context Lines, in the same settings group, caps how much surrounding file goes into each completion request. Every line of it is billed as input on every keystroke-driven call.

The chat agents are the opposite shape: fewer calls, much larger context, and the same workspace files resent turn after turn. That is the case prompt caching is for — see /docs/caching — and it is why the two halves of the model table above are split by how often the agent fires rather than by how clever it is.

When it does not connect

  1. 404 — the url. Kunavo serves /v1/chat/completions, so the field wants the /v1 root; a bare origin or a full .../chat/completions both miss.
  2. 401 — the key. Theia's Readme says the apiKey “will be send as a Bearer Token in the authorization request”, which is exactly what an sk-kn- key expects. Note the documented default: with no apiKey at all, Theia sends no-key, so a missing field looks like a rejected key rather than a missing one. (true means “use the global OpenAI API key” — not what you want here.)
  3. The model id is not in the picker — that list comes from your own customOpenAiModels entries, not from the endpoint, so a missing id means a missing object. The id field is what the UI shows; leave it out and the model name is used instead.
  4. The first system message is rejected or ignored — that is developerMessageSettings. It defaults to developer, which is an OpenAI-shaped role; Theia's own example for a non-OpenAI vendor sets system, which is why the block above does. user, mergeWithFollowingUserMessage and skip are the documented alternatives.
  5. Nothing responds at all, anywhere — check Workspace Trust. Theia gates every AI feature behind it, and an untrusted workspace disables the chat input and inline completion and shows an AI Features are Restricted message.

FAQ

How do I use a custom OpenAI-compatible API in the Theia IDE?

Enable AI-features => AI Enable in Preferences, then add an entry to the ai-features.openAiCustom.customOpenAiModels preference. Each entry is an object with model, url, id, apiKey and developerMessageSettings, in that order in Theia's own example; model and url are the mandatory pair. The list is a structured setting, so the IDE sends you to settings.json to edit it. Afterwards, assign the model to an agent under Agents in the AI Configuration view, or to one of the model aliases.

Does the Theia IDE's url field need /v1 at the end?

For an OpenAI-compatible endpoint like Kunavo, yes. Theia's documentation does not state the rule in prose — its Readme says only that model and url indicate the end point and model to use — but the worked example on the same page for a non-OpenAI vendor gives the endpoint root with the suffix: "url": "https://api.mistral.ai/v1". So use https://api.kunavo.com/v1. A missing or doubled /v1 shows up as a 404 rather than an authentication error, which is how you tell it apart from a key problem.

Can the Theia IDE use Claude models without an Anthropic account?

Yes, two ways. Theia ships an Anthropic provider that takes an Anthropic key directly, and it ships an OpenAI Compatible provider that sends an OpenAI-shaped request to whatever url you configure and passes the model id straight through. With the second one the id resolves at that endpoint rather than inside the IDE, so the credential you hold is the endpoint's. Kunavo answers Claude ids on its OpenAI-compatible surface, which is the pairing this page describes.

Which model should I assign to which Theia agent?

Split by how often the agent fires rather than by a ranking, because no one here has benchmarked these ids inside this IDE. Code Completion runs continuously while you type and its context is capped by Max Context Lines, so it wants a cheap id; Theia Coder edits files and needs tool calls; the Architect in Plan Mode is the one place a stronger, more expensive id pays for itself, because a bad plan costs a whole session. Model aliases — default/code, default/code-completion, default/fast and the rest — let you move several agents at once.

Has Kunavo tested the Theia IDE against its endpoint?

No. What was checked, on September 21 2026, is Theia's own documentation: the preference id, the field names and their order, and the base URL form are quoted from theia-ide.org/docs/user_ai/ and from the ai-openai Readme it links to. Kunavo has not run a Theia session, an inline completion or a tool round-trip, and makes no claim about how this client behaves. The one thing you can settle on its own is whether the endpoint and key work, which the curl on this page does.