Open WebUI
Connect Open WebUI to Mixen — pay from your balance in roubles, with a catalog of 105+ models.
Installation
Section titled “Installation”Open WebUI is a self-hosted chat web interface. The easiest way to run it is Docker:
docker run -d -p 3000:8080 \ -v open-webui:/app/backend/data \ --name open-webui \ ghcr.io/open-webui/open-webui:mainThe UI opens at http://localhost:3000.
Configuration
Section titled “Configuration”- Open Settings → Admin → Connections (gear icon → Admin → Connections).
- In the Manage OpenAI API Connections list, click ➕ Add Connection and fill in:
URL: https://api.mixen.ai/v1API Key: your-api-key- Click Save. Open WebUI fetches the model list itself with a
/modelsrequest using your key — the entire Mixen catalog appears in the model picker dropdown.
A key starting with mxn-… is issued in the dashboard.
The catalog is large, and if the model list loads slowly, narrow it down: enter the IDs you need in the Model IDs (Filter) field (for example openai/gpt-5.6-sol), and only those will remain in the list.
For Docker deployments, the address and key can be preset with the OPENAI_API_BASE_URL and OPENAI_API_KEY environment variables — the values are persisted to the database after the first launch, and further changes are made in the admin panel.
Scenario: an assistant with a system prompt
Section titled “Scenario: an assistant with a system prompt”The connection gives you the raw catalog models. The next step is presets under Workspace → Models: they wrap any base model with their own instruction, parameters, and knowledge, without modifying the model itself. Any Mixen ID works as the base — the Base Model list is built from your connection’s /models response.
Create a model and fill in:
| Field | What it defines |
|---|---|
| Name and ID | The preset’s name in the model picker |
| Base Model | A base model from the Mixen catalog (for example z-ai/glm-5.3) |
| System Prompt | The preset’s system instruction |
| Advanced Parameters | Temperature, Top P, Stop Sequences — the defaults |
| Prompt suggestions | Starter chips in fresh chats |
| Knowledge | An attached knowledge base (more on that below) |
| Visibility | A personal preset or shared across the instance |
The system prompt supports variables, resolved server-side at chat time: {{ USER_NAME }}, {{ CURRENT_DATE }}, {{ CURRENT_TIME }}.
Example “Proofreader” preset — a careful text editor on top of GLM 5.3:
You are a proofreader for Russian texts. The user sends a text,you return it corrected: punctuation, spelling, agreement.Never change the meaning or the order of thoughts. Do not commenton your fixes — just return the finished text. If the text isalready clean, return it as is. Today is {{ CURRENT_DATE }}.This is how typical roles are assembled — support, editor, analyst, translator — each with its own instruction and parameters, all billed to your Mixen key. The Enabled switch on a preset’s card turns it off and on without deleting it.
A preset is not the only home for a system prompt: Open WebUI lets you set the instruction at three levels — for a specific chat, for a model (that’s the preset), and for the whole account. The more specific level overrides the more general one, so a role can live in a preset and be refined for a single chat with one line.
Documents in chat via #
Section titled “Documents in chat via #”Open WebUI can mix your documents into the conversation:
- Upload a file to the Workspace (or straight in chat).
- Start typing
#in the message box and pick the document from the suggestions — an attachment icon appears above the input.#plus a URL pulls in a web page the same way. - Send your question — the relevant document fragments are injected into the prompt.
Two modes per file:
- query-based (default) — the document is chunked and embedded, only the relevant parts reach the prompt;
- full — the per-file Using Entire Document toggle injects the whole file; the default for new uploads is set in Settings → Interface → File (Default Upload Mode).
The key point for external connections: retrieval works by inserting the found text into the prompt before the question, so it works with any connected model — including ours over the OpenAI connection. The only constraint is that the model’s context window must fit the injected fragment. The File Context capability, enabled by default, governs whether RAG runs on attachments.
The embedding model for search is configured in Settings → Admin → Documents (Ollama and OpenAI models are supported). If you need a programmatic RAG pipeline with embeddings and reranking at our prices, see the separate RAG guide.
A knowledge base instead of one-off attachments
Section titled “A knowledge base instead of one-off attachments”When documents are needed constantly rather than in a single chat, assemble them into a knowledge base — the Workspace → Knowledge section. A base attaches to a chat, to a model preset (the Knowledge field in the table above), or to a folder of chats — from then on retrieval runs automatically, without # in every message. Each document in the base has a mode toggle: Focused Retrieval (relevant fragments) or Full Context (the whole document in the prompt).
Instance-level retrieval settings live next to the embedding model — Settings → Admin → Documents:
- the text splitter mode:
characterortoken; - the RAG template with the
{{CONTEXT}}placeholder — found fragments are substituted into it; - an external vector database (Qdrant, Milvus, pgvector) — if you keep vectors on your side, they must come from the same embedding model with matching dimensions.
Changing the embedding model requires re-indexing: vectors from different models are not compatible.
Model choice and economics
Section titled “Model choice and economics”| Task | Model | Price per 1M tokens |
|---|---|---|
| Drafts, everyday questions, high volume | z-ai/glm-5.3-flash |
8.4 ₽ input / 27.9 ₽ output |
| Hard tasks, long context, careful code | anthropic/claude-sonnet-5 |
213.9 / 1069.5 ₽ |
The prompt cache discounts repeated context: when a request prefix (the preset’s system prompt plus the start of the dialog) matches a recent one, input is billed at ~10% of the price — for claude-sonnet-5 that is 21.4 ₽ instead of 213.9 ₽ per 1M, for glm-5.3-flash — 1.7 ₽. The cache lives for 5 minutes, and every hit extends the window — an active dialog stays cached end to end. Practical takeaway: keep the preset’s system prompt stable, and leave the changing part of the dialog at the end of the request.
A model’s reasoning depth is set by the API’s reasoning_effort parameter (the value spectrum: off, low, medium, high, xhigh, max) — which levels a particular model supports is listed in GET /v1/models, field capabilities.reasoning_efforts. Reasoning spends the answer budget, so for quick everyday questions pick a model without forced reasoning or a low level.
Recommended models
Section titled “Recommended models”| Model | ID |
|---|---|
| GPT-5.6 Sol | openai/gpt-5.6-sol |
| Claude Opus 5 | anthropic/claude-opus-5 |
| GLM 5.3 | z-ai/glm-5.3 |
| DeepSeek V4 Pro | deepseek/deepseek-v4-pro |
| Kimi K3 | moonshotai/kimi-k3 |
Full list — in the catalog.
Troubleshooting
Section titled “Troubleshooting”- 401 / Invalid API key — the key was copied incompletely or isn’t an API key; issue a new one in the dashboard, it starts with
mxn-. - Models missing from the list — reopen the connection and check that the URL ends with
/v1and the key is correct: the list is built from the/modelsresponse. - Environment variables don’t apply — after the first launch Open WebUI keeps its configuration in the database: change the values in the admin panel (Settings → Admin → Connections).
- A preset answers “out of character” — the preset’s system prompt only applies when the preset itself is selected, not the base model; check that your Workspace → Models preset is the one picked.
- A
#document gets ignored — check that the model’s context window is large enough and the File Context capability is not disabled.