Skip to main content

AI providers

Windrunner uses one configured provider for chat AI requests. Set WINDRUNNER_LLM_PROVIDER to openai, openrouter, ollama, groq, gemini, claude, or none.

The provider is none by default in the application. The local startup script selects openai unless you override it. Voice transcription is configured independently; see Voice transcription.

Provider selection

VariableDefaultDescription
WINDRUNNER_LLM_PROVIDERnone in the application; openai in start-local.shSelects the active chat AI provider.

OpenAI

VariableDefaultDescription
OPENAI_API_KEYAPI key. Required when OpenAI is selected.
OPENAI_BASE_URLhttps://api.openai.com/v1OpenAI-compatible API base URL.
OPENAI_MODELgpt-5.6-lunaModel name.
OPENAI_MAX_OUTPUT_TOKENS2048Maximum output tokens.
OPENAI_REASONING_EFFORTlowReasoning effort sent to the provider.
OPENAI_MAX_TOOL_ROUNDS8Maximum tool-call rounds for one request.
WINDRUNNER_LLM_OPENAI_CONNECT_TIMEOUT10sConnection timeout.
WINDRUNNER_LLM_OPENAI_READ_TIMEOUT2mResponse read timeout.

OpenRouter

OpenRouter uses its OpenAI-compatible Chat Completions API. Select openrouter and choose an OpenRouter model slug that supports tool calling, such as the model shown in OpenRouter's model catalog. Model capabilities vary, so a model must support the parameters used by Windrunner's tool loop.

VariableDefaultDescription
OPENROUTER_API_KEYAPI key. Required when OpenRouter is selected.
OPENROUTER_BASE_URLhttps://openrouter.ai/api/v1OpenRouter API base URL.
OPENROUTER_MODELOpenRouter model slug, for example openai/gpt-4o.
OPENROUTER_SITE_URLOptional site URL sent as HTTP-Referer.
OPENROUTER_SITE_NAMEOptional application name sent as X-OpenRouter-Title.
OPENROUTER_MAX_OUTPUT_TOKENS2048Maximum output tokens.
OPENROUTER_REASONING_EFFORTOptional reasoning effort; use only when the selected model supports it.
OPENROUTER_MAX_TOOL_ROUNDS8Maximum tool-call rounds for one request.
WINDRUNNER_LLM_OPENROUTER_CONNECT_TIMEOUT10sConnection timeout.
WINDRUNNER_LLM_OPENROUTER_READ_TIMEOUT2mResponse read timeout.

Groq

Groq uses its OpenAI-compatible Chat Completions API. Select groq and choose a model available to your GroqCloud account. The default model is openai/gpt-oss-20b, which is suitable for testing tool calls on the free plan. Model availability and rate limits can change by account and model.

VariableDefaultDescription
GROQ_API_KEYAPI key. Required when Groq is selected.
GROQ_BASE_URLhttps://api.groq.com/openai/v1Groq API base URL.
GROQ_MODELopenai/gpt-oss-20bGroq model name.
GROQ_MAX_OUTPUT_TOKENS2048Maximum output tokens.
GROQ_REASONING_EFFORTOptional reasoning effort; use only when the selected model supports it.
GROQ_MAX_TOOL_ROUNDS8Maximum tool-call rounds for one request.
WINDRUNNER_LLM_GROQ_CONNECT_TIMEOUT10sConnection timeout.
WINDRUNNER_LLM_GROQ_READ_TIMEOUT2mResponse read timeout.

Ollama

Ollama connects to local models through its OpenAI-compatible Chat Completions API. Start Ollama, pull the model locally, then select ollama. The default base URL is suitable when Windrunner runs directly on the same machine as Ollama.

VariableDefaultDescription
OLLAMA_BASE_URLhttp://localhost:11434/v1Ollama OpenAI-compatible API base URL.
OLLAMA_MODELLocal model name, such as llama3.2; it must already be pulled.
OLLAMA_API_KEYOptional API key for a secured or hosted Ollama endpoint.
OLLAMA_MAX_OUTPUT_TOKENS2048Maximum output tokens.
OLLAMA_REASONING_EFFORTOptional reasoning effort; use only when the selected model supports it.
OLLAMA_MAX_TOOL_ROUNDS8Maximum tool-call rounds for one request.
WINDRUNNER_LLM_OLLAMA_CONNECT_TIMEOUT10sConnection timeout.
WINDRUNNER_LLM_OLLAMA_READ_TIMEOUT2mResponse read timeout.

When Windrunner runs in Docker and Ollama runs on the host, set OLLAMA_BASE_URL to an address reachable from the container. On Docker Desktop, http://host.docker.internal:11434/v1 is commonly used.

Gemini

VariableDefaultDescription
GEMINI_API_KEYAPI key. Required when Gemini is selected.
GEMINI_BASE_URLhttps://generativelanguage.googleapis.com/v1betaGemini API base URL.
GEMINI_MODELgemini-3.1-flash-liteModel name.
GEMINI_MAX_OUTPUT_TOKENS2048Maximum output tokens.
GEMINI_TEMPERATURE1.0Sampling temperature.
GEMINI_MAX_TOOL_ROUNDS8Maximum tool-call rounds for one request.
WINDRUNNER_LLM_GEMINI_CONNECT_TIMEOUT10sConnection timeout.
WINDRUNNER_LLM_GEMINI_READ_TIMEOUT2mResponse read timeout.

Claude

VariableDefaultDescription
CLAUDE_API_KEYAPI key. Required when Claude is selected.
CLAUDE_BASE_URLhttps://api.anthropic.com/v1Anthropic API base URL.
CLAUDE_MODELclaude-sonnet-5Model name.
CLAUDE_MAX_OUTPUT_TOKENS2048Maximum output tokens.
CLAUDE_TEMPERATURE1.0Sampling temperature.
CLAUDE_MAX_TOOL_ROUNDS8Maximum tool-call rounds for one request.
WINDRUNNER_LLM_CLAUDE_ANTHROPIC_VERSION2023-06-01Anthropic API version header.
WINDRUNNER_LLM_CLAUDE_CONNECT_TIMEOUT10sConnection timeout.
WINDRUNNER_LLM_CLAUDE_READ_TIMEOUT2mResponse read timeout.

The short provider variables are the recommended form. The longer timeout variables use Spring's windrunner.llm.<provider> configuration namespace.