Agnai + minirouter
Draft configuration for Agnai's third-party OpenAI-compatible preset, self-hosted or on agnai.chat.
Settings
Settings → AI Settings → third-party / OpenAI-compatible preset
In order
- ServiceThird Party / OpenAI compatible
- Third Party URLhttps://api.minirouter.sh/v1
Never append /chat/completions — Agnai adds the path itself.
- Third Party Key / Passwordmr-live-… (your key)
- Modelmeta/llama-3.3-70b
curl https://api.minirouter.sh/v1/chat/completions \
-H "Authorization: Bearer $MINIROUTER_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"meta/llama-3.3-70b","messages":[{"role":"user","content":"ping"}]}'Draft candidates · 4 models
All models →- Modelnousresearch/hermes-4-70bWhyInstruction-following candidate that holds a persona across a long thread.—
- Modelsao10k/l3.3-euryale-70bWhyProse-oriented candidate. Single upstream — see the note on the roleplay facet.—
- Modelmeta/llama-3.3-70bWhyGeneral-purpose prose candidate.→
- Modelmistral/mistral-small-3.2WhySmaller-model candidate for frequent regeneration.—
Only rows confirmed in the current live catalog are linked. A plain row is a draft recommendation, not a claim that the model is currently available. Paste ids exactly as written, author/name.
When it fails
- Symptom404, HTML, or a parse error on every requestCodeinvalid_request
Almost always the base URL. Use https://api.minirouter.sh/v1 — the bare host without /v1 also works, but never append /chat/completions to the base URL field; the client adds that path itself. docs/errors#invalid_request →
- Symptom401 on every requestCodeinvalid_api_key
Wrong or rotated key. Keys start with mr-live-; after a rotation the old key keeps working for 24 hours, then dies. docs/errors#invalid_api_key →
- SymptomWorks self-hosted, fails on the hosted instanceCodeclient-side
The hosted app makes the request from its own servers. Nothing on our side distinguishes the two — check the preset is actually selected for the character you are chatting with, since Agnai stores a preset per character.
- SymptomResponse stops mid-sentence with a credits messageCodeinsufficient_credits
Balance hit $0 mid-stream. The stream ends with a terminal error naming the exact charge for tokens delivered — never a silent close. docs/errors#insufficient_credits →
Every API error string carries a URL resolving to /docs/errors.
Other roleplay frontends
- SillyTavernRoleplay frontend
- RisuAIRoleplay frontend
Why this workload bills the way it does, what it costs to contain, and which models suit it: /use/roleplay.