Skip to content

Providers and Models

sshdw edited this page Oct 15, 2026 · 1 revision

Providers and Models

Nexora supports OpenAI, Anthropic, Google Gemini, xKiro, OpenRouter, NVIDIA NIM, and OpenCode Zen — the last four reuse the OpenAI-compatible executor with a distinct endpoint (plus Referer/Title headers for OpenRouter), not separate protocol implementations.

Selection and execution

  • Pick a provider and model before sending; the selection applies to subsequent requests.
  • Supported model lists are hardcoded SUPPORTED_MODELS consts per provider module in src-tauri/src/infrastructure/providers/, aggregated in mod.rs. Compatible providers ship curated shortlists, and Settings accepts a custom model ID beyond the shortlist.
  • All requests go through the provider-independent boundary (application/execution.rs): shared AiMessage model (role, text, attachments) plus native tool round-trip fields. Tool observations return in each provider's native shape and are never persisted; Gemini thought signatures are echoed verbatim and never logged, persisted, or parsed.
  • Timeouts, retries, and error propagation are handled per executor; the application never depends on provider-specific behavior.

Classified errors (chat and agent runs alike)

Network/timeout, rate limit (with the provider's Retry-After hint), provider outage/unavailable (5xx), rejected credential, invalid request (including HTTP 404 from a compatible endpoint, meaning model/route missing), unexpected response. All secret-free: no credentials, SQL, message content, or response-body reads in error text.

Credentials

API keys live exclusively in the OS keyring, resolved inside the backend and never crossing IPC. The providers.name field is the keyring namespace key. Missing credentials are detected before a request is sent. See Security-and-Credentials.

Clone this wiki locally