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.

ProviderConfig keyExample modelNotes
Anthropicanthropicanthropic:claude-sonnet-4-6
AWS Bedrockbedrockbedrock:anthropic.claude-v2AWS credentials required
Azure OpenAIazureopenaiazureopenai:gpt-4oRequires api_base
Azure Anthropicazureanthropicazureanthropic:claude-sonnet-4-6Requires api_base
Cerebrascerebrascerebras:llama3.1-8b
Coherecoherecohere:command-r-plusAlso supports rerank
DashScopedashscopedashscope:qwen-turboAlibaba Cloud
Databricksdatabricksdatabricks:dbrx-instructRequires api_base
DeepInfradeepinfradeepinfra:meta-llama/Llama-3-70b
DeepSeekdeepseekdeepseek:deepseek-chat
Fireworksfireworksfireworks:llama-v3-70b
Geminigeminigemini:gemini-2.0-flash
Groqgroqgroq:llama3-70b-8192
HuggingFacehuggingfacehuggingface:meta-llama/Llama-3-70bPin a backend with :<backend> (see Pinning a HuggingFace inference backend)
Inceptioninceptioninception:mercury-coder-small
Llama.cppllamacppllamacpp:defaultLocal server
Llamafilellamafilellamafile:defaultLocal server
LM Studiolmstudiolmstudio:local-modelLocal server
MiniMaxminimaxminimax:abab5.5-chat
Mistralmistralmistral:mistral-large-latest
Moonshotmoonshotmoonshot:moonshot-v1-8k
Nebiusnebiusnebius:llama-3-70b
Ollamaollamaollama:llama3Local server
OpenAIopenaiopenai:gpt-4o
OpenRouteropenrouteropenrouter:openai/gpt-4o
Perplexityperplexityperplexity:llama-3-sonar-large
SageMakersagemakersagemaker:my-endpointAWS credentials required
SambaNovasambanovasambanova:llama3-70b
Togethertogethertogether:meta-llama/Llama-3-70b
Vertex AIvertexaivertexai:gemini-2.0-flashRequires service account
Vertex AI Anthropicvertexaianthropicvertexaianthropic:claude-sonnet-4-6Requires service account
vLLMvllmvllm:my-modelSelf-hosted
Voyagevoyagevoyage:voyage-large-2Embeddings only
WatsonXwatsonxwatsonx:ibm/granite-13b
xAIxaixai:grok-2

Capabilities

Not all providers support all endpoints. Here's what each endpoint type requires:

EndpointCapabilityExample providers
/v1/chat/completionsChat completionMost providers
/v1/messagesAnthropic Messages APIAnthropic, Vertex AI Anthropic
/v1/responsesOpenAI Responses APIOpenAI
/v1/embeddingsText embeddingsOpenAI, Cohere, Voyage, Vertex AI
/v1/moderationsContent moderationOpenAI
/v1/rerankDocument rerankingCohere
/v1/images/generationsImage generationOpenAI, Vertex AI
/v1/audio/transcriptionsAudio transcriptionOpenAI
/v1/audio/speechText-to-speechOpenAI
/v1/batchesBatch processingOpenAI, 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).