Wiring a Model into SolonCode: Dialects, the apiUrl Rules, and the Timeouts Nobody Warns You About SolonCode, a coding assistant built on Solon AI, ships without a bundled model, requiring users to wire one up manually. The project supports seven chat dialects—including OpenAI, Ollama, Gemini, and Anthropic—detected via the 'standard' field or the shape of the apiUrl, with OpenAI-compatible endpoints recommended for fastest setup. Key configuration fields include apiUrl, apiKey, model, timeout, and contextLength, with a 60-second default timeout that often needs adjustment for long tool-calling sessions. SolonCode ships with no model. That is a deliberate product choice, not an omission: no bundled provider, no default key, no telemetry-backed endpoint you did not ask for. The upside is you can point it at DeepSeek, a local Ollama box, or an air-gapped corporate gateway with equal ease. The downside is that installing the binary does not give you a working assistant. You have to wire a model up first, and that is where most first-time users stall. This is the follow-up to getting SolonCode installed. Here we get one model connected and stable — meaning it survives long tool-calling sessions, weak networks, and multi-file refactors without mysterious mid-task failures. You can hand-edit settings.json . You should not, at least not on day one. The settings page validates your input and gives you a Test connection button, which is the single most useful debugging affordance in the whole product. soloncode web default port 4808 soloncode web 0 pick any free port soloncode web 1212 explicit port Then go to Settings → LLM , add a model, and hit test. Do not skip the test. A green test is the boundary between "config problem" and "everything else." If the port is taken, soloncode web 0 sidesteps it. That is the official answer too. This is the part that saves the most time. SolonCode sits on Solon AI, and Solon AI does not have a list of supported vendors . It has a list of supported chat dialects — request/response shapes. Any service that speaks one of those shapes works. The built-in dialects and how they are detected: | Dialect | Detected by | |---|---| openai | default, or apiUrl ending in .../chat/completions | openai-responses | standard=openai-responses , or apiUrl ending in .../v1/responses | ollama | standard=ollama | gemini | standard=gemini , or apiUrl matching .../v1beta/models/ usable since v3.8.1 | gemini-interactions | standard=gemini-interactions , or .../v1beta/interactions/ usable since v4.0.3 | anthropic | standard=anthropic , or apiUrl ending in .../v1/messages usable since v3.9.1 | dashscope | standard=dashscope , or apiUrl matching .../v1/services/ | ChatConfig picks the dialect from either standard or the shape of apiUrl . So the question is never "does SolonCode support vendor X" — it is "which of these seven shapes does vendor X's endpoint speak." Two useful notes straight from the docs: Claude also offers an OpenAI-compatible mode, so you can run it through the openai dialect instead of anthropic . Alibaba's Bailian exposes both its native DashScope protocol and an OpenAI-compatible one. When a provider gives you both, the OpenAI-compatible endpoint is almost always the faster path to a green test. apiUrl Underneath, a model entry maps to Solon AI's ChatConfig : | Field | Required | Notes | |---|---|---| apiUrl | yes | the endpoint address | apiKey | depends | token; may be empty for unauthenticated local services | model | yes | the API model id, not the console display name | standard | no | interface spec; defaults to openai | timeout | no | Duration , defaults to 60s | headers | no | extra headers — other options are all passed as headers | proxy | no | network proxy | contextLength | no | model context length; the docs flag this one as important | defaultAutoToolCall | no | defaults to true , since v3.8.4 | There is also provider , which served the role of standard before v4.0. If you are reading an old config, that is what it is. Now the apiUrl rules, which are where the real failures live: /chat/completions or /api/chat and the dialect is inferred from the tail. standard onward is stripped.One honest wrinkle: the ChatConfig reference describes apiUrl as "the full address, not a baseUrl," while the dialect page explicitly supports baseUrl + standard . Both statements are in the official docs. My practical read: paste the full address. It removes a whole class of ambiguity, and the rule exists precisely for the cases where appending would break you. Field shapes are stable. Hostnames and model ids are not — providers rename models and retire old ones. Always confirm the current id in the vendor console, and never put a real key in a doc, a screenshot, or a commit. A cloud provider over an OpenAI-compatible endpoint — the common case, and the one to start with: apiUrl: "https://api.example.com/v1/chat/completions" apiKey: "sk-xxxxxx" model: "