Docs / Models
Models and providers
ivralo runs on any model agno can drive: a local Ollama tag, a server in your own network, or a hosted API. This page shows how a model is named, how to point ivralo at a company endpoint, and how to give one role its own model.
Naming a model
Everywhere a model is named, the value is a model reference:
package[.Class]:model
package is one of the provider packages agno ships. ivralo keeps no list of its own; it reads agno's. A value without a known package in front is an Ollama tag, so a plain tag keeps working.
| Reference | Runs on |
|---|---|
gemma4:26b | Ollama, the default |
ollama:gemma4:26b | Ollama, spelt out |
openai-compatible:qwen3-32b | Any server that speaks OpenAI's protocol, at IVRALO_OPENAI_COMPATIBLE_URL |
vllm:Qwen/Qwen3-32B, lmstudio:qwen3-8b, llama_cpp:qwen3 | Local inference servers |
anthropic:claude-sonnet-5 | The Claude API |
openai:gpt-5.5 | The OpenAI API, through the Responses API |
openai.OpenAIChat:gpt-4.1 | The OpenAI API through chat completions: .Class picks one of a package's classes |
google:gemini-3-pro, groq:..., mistral:..., openrouter:... | Those APIs, and every other package agno ships, the same way |
The package name is matched without regard to case; the model part keeps its own colons and case.
Two things to know:
openaimeans OpenAI's Responses API, because OpenAI's reasoning models refuse function tools on chat completions. Writeopenai.OpenAIChat:for chat completions.mistral:7bis the Mistral API's model7b, not Ollama's Mistral. Writeollama:mistral:7bfor the local one.ivralo doctorflags a reference that reads like this, and one that nearly spells a package, such asantropic:.
The default: Ollama
With nothing set, every role runs on gemma4:26b through Ollama at http://localhost:11434. ivralo init --pull pulls the tags that are missing.
| Variable | Default | What it sets |
|---|---|---|
IVRALO_MODEL | gemma4:26b | The model every role runs on unless told otherwise |
IVRALO_OLLAMA_HOST | http://localhost:11434 | Where Ollama listens. Plain OLLAMA_HOST is not read |
IVRALO_NUM_CTX | 16384 | Ollama's context window. Raising it costs memory on the GPU |
IVRALO_NUM_PREDICT | 8192 | The longest reply a local model may write |
IVRALO_KEEP_ALIVE | 30m | How long Ollama keeps the weights loaded between calls |
IVRALO_OLLAMA_THINK | off | off tells a model that can think not to; on leaves Ollama's own behaviour |
A company endpoint
On a server, the model usually sits on a GPU machine in the same network behind an OpenAI-compatible API: vLLM, a LiteLLM proxy, llama.cpp's server or an internal gateway. Name it with openai-compatible: and the model's name as that server serves it:
IVRALO_MODEL=openai-compatible:qwen3-32b
IVRALO_OPENAI_COMPATIBLE_URL=http://gpu-box:8000/v1
IVRALO_OPENAI_COMPATIBLE_KEY=... # only if the server wants one
ivralo init --server writes these for you:
ivralo init --server --model-url http://gpu-box:8000/v1 --model qwen3-32b
--model is then a name at that endpoint. A key is never taken as an argument: export IVRALO_OPENAI_COMPATIBLE_KEY before running init and it is copied into .env without being printed.
For an agno package with a server of its own, IVRALO_<PACKAGE>_URL points it there: IVRALO_VLLM_URL (default http://localhost:8000/v1), IVRALO_LMSTUDIO_URL, IVRALO_LLAMA_CPP_URL.
Hosted APIs
A hosted provider reads the key its own SDK reads: ANTHROPIC_API_KEY, OPENAI_API_KEY, GOOGLE_API_KEY, GROQ_API_KEY, MISTRAL_API_KEY, OPENROUTER_API_KEY and so on. Put it in the home's .env; ivralo keeps no copy under an IVRALO_ name.
Packages that speak OpenAI's protocol (openai, openrouter, deepseek, xai, together, fireworks, the local servers) need nothing extra. Four SDKs ship as optional extras:
| Package | From a checkout | Into an installed command |
|---|---|---|
anthropic | uv sync --extra anthropic | ivralo[pg,anthropic] @ <source> |
google (Gemini) | uv sync --extra google | ivralo[pg,google] @ <source> |
groq | uv sync --extra groq | ivralo[pg,groq] @ <source> |
mistral | uv sync --extra mistral | ivralo[pg,mistral] @ <source> |
| all four | uv sync --extra providers | ivralo[pg,providers] @ <source> |
The second column goes in the uv tool install line from Install on a server. Any other package needs its SDK installed once; ivralo doctor names it.
ivralo doctor, /model and --model check a model before anything is built and say what is missing in the SDK's own words: the package, the key, a class that does not exist, a server with no URL.
Settings for hosted and compatible models
| Variable | Default | What it sets |
|---|---|---|
IVRALO_MAX_TOKENS | 8192 | The longest reply. ivralo doctor shows the limit in force |
IVRALO_CONTEXT_WINDOW | 0 | The window the context meter measures against. 0 means IVRALO_NUM_CTX for a local model and 128,000 for a hosted one |
IVRALO_REQUEST_TIMEOUT | 300 | Seconds one request may wait. A request that runs out of time is tried once more |
IVRALO_TEMPERATURE | 0.2 locally | Sent to a local model always, and to a hosted one only when you set it, since some hosted reasoning models reject a temperature |
Claude runs with its system prompt cached, since the team's prompts are long and the same from turn to turn.
A model per role
Every role can run on its own model, and the team can mix local and hosted ones:
| Variable | Role |
|---|---|
IVRALO_MODEL | Every role that has no setting of its own |
IVRALO_COORDINATOR_MODEL | The main agent, the one you talk to |
IVRALO_MODEL_<KEY> | One specialist, by its key: IVRALO_MODEL_CODER, IVRALO_MODEL_INVESTIGATOR, IVRALO_MODEL_REPORTER, ... |
IVRALO_MEMORY_MODEL | Memory extraction, session titles and suggested follow-ups |
IVRALO_MODEL=openai-compatible:qwen3-32b
IVRALO_COORDINATOR_MODEL=openai-compatible:qwen3-235b
IVRALO_MODEL_INVESTIGATOR=openai-compatible:qwen3-235b
The keys are analyst, spreadsheet, visualizer, reporter, scribe, librarian, pdf_operator, courier, secretary, github, coder and investigator, upper-cased in the variable. Roles on the same reference share one instance. ivralo agents lists each role with the model it runs on.
Switching from where you type
In a session:
/model anthropic:claude-sonnet-5
This sets the main model, IVRALO_MODEL, for the rest of the session and rebuilds the team on the same conversation. Roles with a setting of their own keep it. .env is not touched, so the next session starts from it again. /model alone lists the models in use and where each one runs.
From the command line, --model does the same for one run:
ivralo ask --model openai:gpt-5.5 "summarise the open TODOs in src/"
When a model is hosted
A model counts as local when its address is loopback, a private address, or a local name: one without a dot, or one ending in .local, .lan, .home, .internal or .localdomain. Any other address counts as hosted, including a company gateway reached by a public-style name such as llm.example.com. A model whose package is not installed also counts as hosted.
A hosted model receives the prompts, the history and the tool output, which is the text of whatever the agents read. ivralo says so every time: the session header shows a hosted line naming the provider, ivralo ask prints the same note above its text output, and ivralo doctor lists it. Incident evidence is refused on a hosted model unless you allow it with masking. What leaves the machine has the full list.