Model providers

OpenAI and DeepSeek share a Responses-based conversation-and-tool runner. Provider adapters handle endpoints, authentication, and request differences.

ExecutorModel requestsHosted searchLocal tools
OpenAI ResponsesYesDisabled, cached, or liveConfigured mode
DeepSeek ResponsesYesUnsupportedConfigured mode
EchoNoNoNo

ResponsesRunner assembles history, instructions, and tools. ResponsesClient handles HTTP and streamed response validation. Their boundary uses Responses data contracts.

Configuration and selection

Provider definitions describe endpoints, credentials, and available model IDs. They are persisted on the server; credentials stay out of browser responses. Each thread selects a provider snapshot and model. Updating the catalog takes effect in an existing thread when that definition is selected again.

Change at a step boundary

Validated selection → Pending client → Next step → Active client

The current request and its tools finish with captured settings. The next step uses the latest accepted selection. Thread history and identity stay in place; other conversations retain their own selections.

When configurations differ, replay preserves visible text and tool calls/results while omitting foreign provider-private items. Saving provider definitions does not persist conversations.

Implementation: responses.rs.