Models
June 30, 2026 ยท View on GitHub
Otari routes requests to LLM providers through any-llm-sdk. This page covers the model format, supported providers, and capabilities.
Model format
Models are specified as provider:model_name:
openai:gpt-4o
anthropic:claude-sonnet-4-6
mistral:mistral-large-latest
vertexai:gemini-2.0-flash
The provider prefix tells Otari which backend to route to. The model_name is passed directly to that provider's API.
Supported providers
Otari depends on any-llm-sdk[all]. Provider support can change as the SDK evolves.
Use this list as a quick reference for common providers supported by the current Otari build.
| Provider | Config key | Example model | Notes |
|---|---|---|---|
| Anthropic | anthropic | anthropic:claude-sonnet-4-6 | |
| AWS Bedrock | bedrock | bedrock:anthropic.claude-v2 | AWS credentials required |
| Azure OpenAI | azureopenai | azureopenai:gpt-4o | Requires api_base |
| Azure Anthropic | azureanthropic | azureanthropic:claude-sonnet-4-6 | Requires api_base |
| Cerebras | cerebras | cerebras:llama3.1-8b | |
| Cohere | cohere | cohere:command-r-plus | Also supports rerank |
| DashScope | dashscope | dashscope:qwen-turbo | Alibaba Cloud |
| Databricks | databricks | databricks:dbrx-instruct | Requires api_base |
| DeepInfra | deepinfra | deepinfra:meta-llama/Llama-3-70b | |
| DeepSeek | deepseek | deepseek:deepseek-chat | |
| Fireworks | fireworks | fireworks:llama-v3-70b | |
| Gemini | gemini | gemini:gemini-2.0-flash | |
| Groq | groq | groq:llama3-70b-8192 | |
| HuggingFace | huggingface | huggingface:meta-llama/Llama-3-70b | Pin a backend with :<backend> (see Pinning a HuggingFace inference backend) |
| Inception | inception | inception:mercury-coder-small | |
| Llama.cpp | llamacpp | llamacpp:default | Local server |
| Llamafile | llamafile | llamafile:default | Local server |
| LM Studio | lmstudio | lmstudio:local-model | Local server |
| MiniMax | minimax | minimax:abab5.5-chat | |
| Mistral | mistral | mistral:mistral-large-latest | |
| Moonshot | moonshot | moonshot:moonshot-v1-8k | |
| Nebius | nebius | nebius:llama-3-70b | |
| Ollama | ollama | ollama:llama3 | Local server |
| OpenAI | openai | openai:gpt-4o | |
| OpenRouter | openrouter | openrouter:openai/gpt-4o | |
| Perplexity | perplexity | perplexity:llama-3-sonar-large | |
| SageMaker | sagemaker | sagemaker:my-endpoint | AWS credentials required |
| SambaNova | sambanova | sambanova:llama3-70b | |
| Together | together | together:meta-llama/Llama-3-70b | |
| Vertex AI | vertexai | vertexai:gemini-2.0-flash | Requires service account |
| Vertex AI Anthropic | vertexaianthropic | vertexaianthropic:claude-sonnet-4-6 | Requires service account |
| vLLM | vllm | vllm:my-model | Self-hosted |
| Voyage | voyage | voyage:voyage-large-2 | Embeddings only |
| WatsonX | watsonx | watsonx:ibm/granite-13b | |
| xAI | xai | xai:grok-2 |
Capabilities
Not all providers support all endpoints. Here's what each endpoint type requires:
| Endpoint | Capability | Example providers |
|---|---|---|
/v1/chat/completions | Chat completion | Most providers |
/v1/messages | Anthropic Messages API | Anthropic, Vertex AI Anthropic |
/v1/responses | OpenAI Responses API | OpenAI |
/v1/embeddings | Text embeddings | OpenAI, Cohere, Voyage, Vertex AI |
/v1/moderations | Content moderation | OpenAI |
/v1/rerank | Document reranking | Cohere |
/v1/images/generations | Image generation | OpenAI, Vertex AI |
/v1/audio/transcriptions | Audio transcription | OpenAI |
/v1/audio/speech | Text-to-speech | OpenAI |
/v1/batches | Batch processing | OpenAI, Anthropic |
In deployments connected to otari.ai, the final model/provider choices are resolved by otari.ai routing policy, not by local providers configuration.
Configuring a provider
In config.yml:
providers:
openai:
api_key: "sk-..."
api_base: "https://api.openai.com/v1" # optional for hosted OpenAI
Or via environment variable:
export OPENAI_API_KEY="sk-..."
Both approaches work. Config file values take precedence over environment variables.
In standalone mode, provider config only tells Otari how to reach the backend.
Otari also requires pricing for the model you call by default, unless
default_pricing covers it or require_pricing: false is set.
For the full configuration reference, see Configuration.
Named provider instances
The providers map is keyed by instance name. Most of the time that name is
also the provider, such as openai or anthropic.
If you want to use multiple backends that share one provider implementation,
give one of them a custom name and set provider_type. This is common for
self-hosted OpenAI-compatible servers such as vLLM, llama.cpp, or LM Studio:
providers:
openai: # key is a real provider, no provider_type needed
api_key: ${OPENAI_API_KEY}
home_lab: # custom instance name
provider_type: openai # underlying any-llm implementation
api_base: "https://nathans-mac-studio.example.ts.net/v1"
api_key: ${HOME_LAB_TOKEN}
Route to a named instance with instance_name:model. For example,
home_lab:deepseek-v4-flash uses the home_lab config, but Otari sends the
request through the OpenAI provider implementation with that instance's
api_base and api_key. openai:gpt-4o still uses the regular openai
config.
Pricing and usage are keyed on the instance name, so configure pricing under
home_lab:deepseek-v4-flash if you want that model to be priceable. If you do
not set provider_type, the key works as before and names the provider
directly.
provider_type: openai-compatible and provider_type: openai_compatible are
both accepted as aliases for openai.
Named instances are a standalone-mode feature. In hybrid mode, provider credentials come from otari.ai per request, so local named instances are not used.
Declaring models for backends without /v1/models
/v1/models lists an instance's models by calling the backend's model-listing
endpoint. When a backend does not expose /v1/models, declare the served model
ids so they still appear in the listing:
providers:
edge_box:
provider_type: openai
api_base: "https://edge.example.ts.net/v1"
api_key: ${EDGE_TOKEN}
models:
- llama-3.3-70b
- qwen3-32b
The declared models are listed as edge_box:<model>. Direct requests work
with or without this list; it only affects discovery.
Listing available models
Query Otari to see which models are available:
curl http://localhost:8000/v1/models \
-H "Authorization: Bearer <your-api-key>"
Provider-specific notes
Pinning a HuggingFace inference backend
HuggingFace Inference Providers is a router: the same model id (for example
zai-org/GLM-4.6) can be served by several backends (Together, Novita, and
others), and in the default "auto" mode the backend, and therefore the price,
is chosen at request time. To route (and price) deterministically, pin a
backend with a :<backend> suffix on the model id, which the HuggingFace
router honors server side:
huggingface:zai-org/GLM-4.6:together
huggingface:zai-org/GLM-4.6:novita
The pinned-selector grammar is huggingface:<model>:<backend>. Otari splits
the provider off the first :, so everything after it (<model>:<backend>) is
forwarded as the model id and the :<backend> suffix reaches the router
unchanged. The router also accepts policy suffixes such as :cheapest,
:fastest, :preferred, and :auto.
This grammar is the contract consumers build against. The otari.ai platform's
pricing UI, for instance, offers each priceable backend as a pinned
huggingface:<model>:<backend> selector, because a pinned selector resolves to
a single backend, which is what makes a HuggingFace model priceable (auto mode
cannot be priced from the model id alone).