LLM vendors

Search2o ships with six adapters: OpenAI, Anthropic and Google Gemini for the three vendors, and Ollama, vLLM and SGLang for models you host. A new account has a profile for each of them. One API key, or one model running on your own machine, is enough to start.

The key

Each vendor profile reads its key from the agent server's environment. Set the key for the vendor you use before starting the agent server:

$ export OPENAI_API_KEY=...        # OpenAI
$ export ANTHROPIC_API_KEY=...     # Anthropic
$ export GEMINI_API_KEY=...        # Google Gemini

Where a key is read from is configurable; see Secret vault. The hosted-model profiles do not need a key.

The seeded profiles

A new account has these LLM profiles. An agent names one of them in its llm command.

ProfileVendorWhat it is for
gpt5_miniOpenAIText
gpt_imageOpenAIImage generation
claude_haikuAnthropicText
gemini_flashGoogle GeminiText
gemini_imageGoogle GeminiImage generation
ollama_qwen25Ollama on the agent server's machineText, Qwen 2.5 7B
vllm_qwen25vLLM on the agent server's machineText, Qwen 2.5 7B
sglang_qwen25SGLang on the agent server's machineText, Qwen 2.5 7B

The prices on a vendor profile are the list prices when the account was created. Edit them to match your contract, so that the cost report is accurate. The hosted-model profiles are priced at zero.

A profile for another model

A profile is one model at one vendor, so a second model needs a second profile. Create one under Profiles › LLM in the UI and set:

FieldWhat to set
adapteropenai, anthropic or gemini, matching the protocol the endpoint speaks, whoever serves it: a private deployment, a gateway, or another vendor's compatible API. ollama, vllm or sglang for a model served by one of those. For a protocol none of them speaks, see Connecting to other LLMs.
urlThe endpoint, for example https://api.openai.com.
headersAuthorization and any other headers the vendor requires. The values are dynamic strings, so the key is read at call time: { f"Bearer {sys.secret['OPENAI_API_KEY']}" }.
modelThe model name as the vendor writes it.
pricingThe prices per million tokens.

Every field is described in LLM profiles. An agent changes model by naming a different profile. Nothing in the agent changes.

Models you host: Ollama, vLLM and SGLang

The ollama, vllm and sglang adapters connect to open models on your own hardware, served by Ollama, vLLM or SGLang. All three call the model server's OpenAI-compatible Responses API at /v1/responses. The seeded profiles expect the model server on the agent server's machine at its default port; for any other setup, create a profile under Profiles › LLM and set:

FieldOllamavLLMSGLang
adapterollamavllmsglang
urlThe agent server's route to the model server, ending in /v1/responses. With the default ports on the same machine: http://localhost:11434/v1/responses for Ollama, http://localhost:8000/v1/responses for vLLM, http://localhost:30000/v1/responses for SGLang.
headersContent-Type alone when the server does not require a key.
modelThe model as Ollama names it, for example qwen2.5:7b.The name the model is served under, for example Qwen/Qwen2.5-7B-Instruct.

Ollama does not act on a forced tool choice. When an llm command sets outputFormat: "structured", the ollama adapter asks Ollama for JSON that fits the schemas of the offered functions and turns the reply into function calls, so the command returns the same dict as with any other adapter.

vLLM makes tool calls only when started with tool calling on: --enable-auto-tool-choice and the --tool-call-parser that fits the model. SGLang makes tool calls only when started with the --tool-call-parser that fits the model.