llm= can also be a provider-prefixed id, routed through litellm:
Quick Start
1
Open the model combobox
Click the model pill in the title bar. It suggests common models and accepts any string.
2
Set your API key
In Settings → Models → API key, paste your key. It is stored in the platform keychain.
3
Tune sampling (optional)
Adjust
temperature, max_tokens, or top_p in the Models section.Suggested Models
The combobox suggests eleven ids. Four use the OpenAI API and yourapi_key; the rest are provider-prefixed and route through litellm to a different provider, which needs that provider’s credentials — in the environment, in the app’s api_key field, or reached by a Base URL. It stays free-text, so you can type any id.
Using another provider (Anthropic, Google, Ollama, …)
Three paths reach these providers. The shipped desktop venv now carries litellm — it is a core dependency of thepraisonai wrapper package pinned by ENGINE_PACKAGES (see PraisonAI#4721) — so slashed ids run fine out of the box, and PraisonAI#4778 restores them in the picker.
The Base URL field is now sent to the variable the selected provider reads — OLLAMA_API_BASE for ollama/…, LM_STUDIO_API_BASE for lm_studio/…, HOSTED_VLLM_API_BASE for hosted_vllm/…, and <PROVIDER>_API_BASE for anything else litellm knows. The API key field follows the same rule (<PROVIDER>_API_KEY), with the OpenAI pair kept in step so switching back to a bare id still works. Pointing the desktop at a remote Ollama, LM Studio, or vLLM host is a two-field task: pick the slashed id, set Base URL. No shell exports needed.
Path 1 — Provider-prefixed id (recommended for Anthropic, Gemini, Ollama): Pick a slashed id from the combobox and set that provider’s key in the environment (or run Ollama locally). No Base URL needed.
Path 2 — Bare id + Base URL (for any OpenAI-compatible endpoint): Set a Base URL to that endpoint and type its bare model id.
Path 3 — Slashed id + provider Base URL (recommended for Ollama / LM Studio / vLLM on your own host): Pick the slashed id and set Base URL to your host. The app routes it to the variable that provider reads.
Both
base_url and api_key are marked Requires restart — relaunch the app after changing either. See the Setup table below for the exact fields.
Behaviour introduced in PraisonAI #4921 — Base URL and API key are now routed to the environment variable the selected provider actually reads.
Sampling & Endpoint
Sampling values — including
reasoning_effort — are forwarded only when you change them from their defaults, so a provider default you set elsewhere is never overridden unasked. reasoning_effort="off" is the default and is never sent, leaving each backend’s own reasoning behaviour untouched.agent.start(..., max_tokens=..., top_p=...). Since MervinPraison/PraisonAI#4725 they also take effect on streaming chats — previously the streaming path ignored them. See Streaming → Sampling knobs.
Reasoning effort
reasoning_effort grades how hard the model thinks before answering. Off leaves the provider default in place; minimal / low / medium / high map to each backend’s native control (OpenAI/xAI reasoning_effort, Anthropic/Gemini extended-thinking budget). The chosen level is forwarded on every turn — streaming and non-streaming alike (since MervinPraison/PraisonAI#4780 the streaming path honours it too). See Reasoning Effort for what each level means and which model families it affects.
Where Keys Live
Theapi_key is stored in the platform secret store (service ai.praison.desktop, overridable with PRAISONAI_KEYCHAIN_SERVICE) and stripped before settings.json is written — it is the only key in SECRET_KEYS, so it never reaches the file.
The store is durable: an unreadable secret raises rather than returning empty, so a transient failure never overwrites a good key, and deleting a key clears both the keychain and the plaintext fallback. See Data & Privacy for the full guarantees.
The store is durable: an unreadable store raises rather than silently returning empty (so a transient error can’t overwrite a good key), clearing a key wipes both the keychain and the fallback file, and the fallback file is written 0o600. Override the service name with PRAISONAI_KEYCHAIN_SERVICE (default ai.praison.desktop) to isolate keys. See Data & Privacy for the full guarantees.
Choosing a Setup
Best Practices
Leave api_key blank to use the environment
Leave api_key blank to use the environment
If you already export
OPENAI_API_KEY, leave the field blank and the engine uses the environment key.Restart after changing key or base_url
Restart after changing key or base_url
Both are marked “requires restart”. Relaunch so the engine routes to the new credential or endpoint. If you edit
api_key or base_url while the engine is still restarting from a previous change, the write can be rejected — as of PraisonAI #4520 the row shows a Could not save that setting. toast and keeps the previous value on screen instead of applying a value the engine did not store. See Troubleshooting.Base URL targets the provider your model names
Base URL targets the provider your model names
Base URL no longer always means OpenAI. It is sent to the variable the selected provider reads —
OLLAMA_API_BASE for an ollama/… id, LM_STUDIO_API_BASE for lm_studio/…, HOSTED_VLLM_API_BASE for hosted_vllm/…, and <PROVIDER>_API_BASE for any other slashed id. A bare id still targets OPENAI_API_BASE. So to run Ollama, LM Studio, or vLLM on your own host, pick the slashed id and point Base URL at it.Related
Settings Reference
Every Models field and its default
Data & Privacy
How secrets are kept off disk

