Skip to Content
ModelsProviders

Providers

A provider is where the AI models run: a company such as OpenAI or Mistral that you reach with your own key, a server you run yourself, Ollama, or a cloud account. This page is the list of providers almyty can connect to and what each one needs. To connect one step by step, see Connect a provider.

almyty connects to 39 kinds of provider: 38 named vendors, plus Your own server, which takes any server that answers in the OpenAI format. Connect as many as you like; every model their keys reach appears on the Models page, ready to use once the key check passes.

Models page

A vendor’s API or your cloud

  • A vendor’s API hosts models and answers chat requests. almyty calls it with your key, or calls your own server at its URL. Every provider in the tables at the end of this page is one of these.
  • Your cloud account runs an open model you pick on capacity in your own account, which almyty starts, sizes and stops. You connect the cloud account like any other provider and use Start a model under Open models on this account on its page. A few names appear on both lists (Together, Fireworks, Baseten, Nebius, DigitalOcean, Modal) because the vendor both serves a pay-per-call catalog and rents dedicated capacity.

DigitalOcean is the clearest case of both: Gradient Serverless Inference is a pay-per-call provider here, nothing to start. Gradient Dedicated Inference is a cloud you run a model on with reserved GPUs. They are different products behind the same account.

Your own server

If you run a model yourself (for example with vLLM, TGI, llama.cpp or a proxy), or use a vendor that is not on the list, connect it as Your own server. It works with anything that answers in the OpenAI chat format.

  1. Open Models and click Connect a provider.
  2. Pick Your own server (OpenAI-compatible).
  3. Give its address and, if the server asks for one, a key.
  4. Click Save. almyty checks it with one real call and lists the models the server offers.

Choosing Ollama shows Where Ollama runs. Ollama Cloud is picked first; choose Your own server for an Ollama you run.

Your own server has no price in the automatic price list. To let Automatic weigh its models by cost, give them a price under Advanced on the connection’s page; otherwise they are tried last. Set their privacy level there too (local for a machine in your office). On hosted almyty the server must be reachable at a public address.

Keys

Each connection holds its own key. The key is kept in Credentials under the connection’s name (renaming one renames the other), encrypted, and never shown again. The connect form links to each vendor’s page for creating a key. Instead of pasting a key, Use a saved key instead picks one already in Credentials; its Create one here adds one without leaving the form, including by signing in with vendors that offer it (OpenRouter makes a key for almyty when you approve it). The same key also shows up in every key picker, since it serves the provider’s other services (images, speech, embeddings).

Keys are encrypted with the platform key, or your own key management service on Enterprise.

For developers

Connect your own server over the API

The type of Your own server is custom; anything that answers POST <base>/chat/completions works, and its models are read from GET <base>/models. An Ollama you run is the ollama type and its pulled models come from GET /api/tags.

curl -X POST https://api.almyty.com/llm-providers/connect \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "type": "custom", "name": "Lab box", "configuration": { "apiUrl": "http://10.0.0.7:8000/v1", "apiKey": "..." } }'

The answer carries the provider and the models it found. A model the server serves but does not list can still be added against the provider with POST /models (or npx @almyty/models register); it is usable when the provider is. A server on a private or loopback address needs LLM_ALLOW_PRIVATE_URLS=true on a self-hosted API (OLLAMA_ALLOW_PRIVATE_URLS=true for the ollama type).

Verification

Every row below was checked against the vendor’s current documentation on 2026-09-09, with a source URL per row in docs/design/call-only-vendors.md. Where a doc was ambiguous, an unauthenticated HTTP or DNS probe filled the gap. No live API key was used for any of it: nothing here was tested against a real account. Anything a vendor’s docs do not state is marked “not documented” rather than assumed.

Provider types

First-party model vendors

TypeVendorDefault base URLAuthLive model listToolsStream
openaiOpenAIhttps://api.openai.com/v1Authorization: Beareryesyesyes
anthropicAnthropichttps://api.anthropic.com/v1x-api-key + anthropic-versionyes, requests the documented maximum page sizeyesyes
googleGoogle Geminihttps://generativelanguage.googleapis.com/v1betax-goog-api-key headeryesyesyes
mistralMistral AIhttps://api.mistral.ai/v1Authorization: Beareryesyesyes
xaixAI (Grok)https://api.x.ai/v1Authorization: Beareryesyesyes
deepseekDeepSeekhttps://api.deepseek.comAuthorization: Beareryesyesyes
moonshotMoonshot (Kimi)https://api.moonshot.ai/v1Authorization: Beareryesyesyes
qwenQwen (QwenCloud)https://dashscope-intl.aliyuncs.com/compatible-mode/v1Authorization: Bearernone documentedyesyes
zaiZ.ai (GLM)https://api.z.ai/api/paas/v4Authorization: Bearernone documentedyesyes
cohereCoherehttps://api.cohere.ai/compatibility/v1Authorization: Beareryes, from the native /v1/modelsyesyes
perplexityPerplexityhttps://api.perplexity.ai/v1 (Responses-shaped)Authorization: Beareryes, unauthenticatedyes, flat Responses shapeyes
minimaxMiniMaxhttps://api.minimax.io/v1Authorization: Beareryesyesyes
upstageUpstage Solarhttps://api.upstage.ai/v1Authorization: Beareryesyesyes
writerWriter (Palmyra)https://api.writer.com/v1Authorization: Beareryesyesyes
qianfanBaidu ERNIE (Qianfan)https://qianfan.baidubce.com/v2Authorization: Beareryesyesyes
hunyuanTencent Hunyuan (TokenHub)https://tokenhub-intl.tencentcloudmaas.com/v1Authorization: Beareryesyesyes
volcengineByteDance Doubao (Ark)https://ark.ap-southeast.bytepluses.com/api/v3, or the mainland endpoint via ark.editionAuthorization: Bearernone documentedyesyes
sparkiFlytek Sparkhttps://spark-api-open.xf-yun.com/x2, generation selected by spark.generationAuthorization: Bearernone documentedyesyes

Aggregators and OpenAI-compatible hosts

TypeVendorDefault base URLAuthLive model listToolsStream
openrouterOpenRouterhttps://openrouter.ai/api/v1Bearer + HTTP-Referer + X-OpenRouter-Titleyes, unauthenticatedyesyes
groqGroqhttps://api.groq.com/openai/v1Authorization: Beareryesyesyes
togetherTogether AIhttps://api.together.ai/v1Authorization: Beareryes (the response is a bare array, not {data:[...]}, and the parser handles both)yesyes
fireworksFireworks AIhttps://api.fireworks.ai/inference/v1Authorization: Bearernot documented on the OpenAI-compatible surfaceyesyes
cerebrasCerebrashttps://api.cerebras.ai/v1Authorization: Beareryesyesyes
deepinfraDeepInfrahttps://api.deepinfra.com/v1/openaiAuthorization: Beareryes, from https://api.deepinfra.com/v1/models (one segment above the chat base)yesyes
novitaNovitahttps://api.novita.ai/openai/v1Authorization: Beareryesyesyes
basetenBasetenhttps://inference.baseten.co/v1Authorization: Beareryesyesyes
nebiusNebius Token Factoryhttps://api.tokenfactory.nebius.com/v1Authorization: Beareryesyesnot documented
sambanovaSambaNovahttps://api.sambanova.ai/v1Authorization: Bearernone documentedyesyes
huggingfaceHugging Facehttps://router.huggingface.co/v1Authorization: Bearer hf_...yes, with per-provider supports_tools and pricingyesyes
straitlyStraitlyhttps://api.straitly.ai/v1Authorization: Beareryesyesyes

Inference APIs in your own cloud account

TypeVendorDefault base URLAuthLive model listToolsStream
azure_openaiAzure OpenAIhttps://{resource}.openai.azure.com/openai/v1api-key headeryes, the resource’s catalog, not its deploymentsyesyes
azure_ai_foundryAzure AI Foundryhttps://{resource}.services.ai.azure.com/openai/v1Authorization: Bearer or api-keyyesyesyes
aws_bedrockAWS Bedrockhttps://bedrock-runtime.{region}.amazonaws.com/openai/v1Authorization: Bearer (Bedrock API key, no SigV4)yesclient-sideyes
vertex_aiGoogle Vertex AIhttps://aiplatform.googleapis.com/v1/projects/{project}/locations/{location}/endpoints/openapiAuthorization: Bearer (short-lived OAuth token)none on this surfaceyesyes

Vendor serverless, pay per call

TypeVendorDefault base URLAuthLive model listToolsStream
digitaloceanDigitalOcean Gradienthttps://inference.do-ai.run/v1Authorization: Bearer (model access key)yesnot documentedimplied, not shown in a documented example
runpodRunPodhttps://api.runpod.ai/v2/{endpoint}/openai/v1Authorization: Bearer rpa_...yes, scoped to that endpointper-modelyes
modalModalhttps://inference.us-west.modal.direct/v1Authorization: Bearer wk-<id>.ws-<secret>yes, scoped to the tokenimplied, not shownimplied, not shown

Local and generic

TypeVendorDefault base URLAuthLive model listToolsStream
ollamaOllamaOllama Cloud https://ollama.com/v1 from the tile; http://localhost:11434/v1 when an API call gives no apiUrlBearer key for Ollama Cloud; none for your own server (optional Bearer behind a proxy)yes, native GET /api/tagsyesyes
customCustom (any OpenAI-compatible server)your configuration.apiUrlper custom.authMethodyes, GET <base>/modelsoperator’soperator’s

Every native type ships with its default base URL; set configuration.apiUrl to point at a compatible proxy instead. There is no top-level baseUrl field. The key field takes whatever token the vendor issues and is encrypted at rest.

Live model list. Where the vendor serves a listing, the model dropdown is populated from it, a configured model is checked against it on save, and a blank model resolves to the vendor’s current default by family, never a hardcoded id. Where no listing exists, a blank model resolves to NO_MODEL_CONFIGURED rather than a guessed id; the health check and the catalog surface the vendor’s own reason when a request still fails.

Dispatch. Most types ride the OpenAI-compatible chat client: <base>/chat/completions with a Bearer key (or an api-key header for the two Azure surfaces). Anthropic, Gemini, Cohere, Perplexity, Vertex AI and Hugging Face have their own request shapes, and Writer is OpenAI-shaped in body but posts to /chat rather than /chat/completions; nothing vendor-specific is added for a plain OpenAI-compatible host beyond its base URL, its auth header, its key page and its price-feed namespace.

Notes per vendor

  • AWS Bedrock answers through the bedrock-runtime OpenAI-compatible surface with a Bedrock API key sent as a plain bearer token. There is no SigV4 signing. Claude is not served on this surface: the API compatibility matrix lists ChatCompletions as unsupported for every Claude row on Bedrock, so Claude requires the native Converse or Messages API, which almyty does not call here. Models that do work include the OpenAI, xAI, Qwen, Z.ai and Writer families. Model ids are often inference profile ids (us., global. prefixed), read from the live list rather than hardcoded.
  • Azure OpenAI uses the /openai/v1 data-plane surface with no api-version query string, and the key travels as api-key, not Authorization: Bearer, because on this surface a bearer token means an Entra ID token and fails. The listing is the resource’s catalog, not its deployments, so the deployment name is still what you name as the model.
  • Vertex AI cannot use a static API key. Google’s docs state that only Google Cloud Auth works on this OpenAI-compatible surface; the credential is a service-account JSON key (or a pasted access token), and a short-lived OAuth token is minted per call. It serves no model list on this surface, so a model must be named at save time. Partner models on Vertex (Claude, Mistral, Grok, Jamba) run through Model Garden’s native :rawPredict, not this surface, so vertex_ai only serves Gemini plus self-deployed endpoints. Llama on Vertex Model-as-a-Service is retired.
  • Qwen, Z.ai, SambaNova and Fireworks document no model listing on their OpenAI-compatible surface (nor do Doubao Ark and Spark). Connecting one asks for the model to use, and that model is what it serves in almyty; add more with POST /models.
  • Azure OpenAI, Azure AI Foundry and Modal cannot be validated by key alone. model is the customer’s own deployment or endpoint name, so a valid key against nothing deployed still cannot answer. Modal in particular needs a Shared Endpoint created first from its own dashboard.
  • RunPod always carries an endpoint id in the URL. There is no shared base URL: for the public catalog it is a shared model slug, for a private worker it is the customer’s own endpoint id. Either way it is a required field.
  • DigitalOcean’s tool calling is not documented on the Gradient Serverless Inference surface, and streaming is only implied by “OpenAI-compatible” rather than shown in a documented example. Nebius streaming is not documented either, though the rest of the surface is OpenAI-compatible. None of these is asserted as working; the health check is what tells you.
  • Perplexity is Responses-shaped, not Chat Completions, and the Router API is still private preview. The default base targets the Responses-shaped surface a paying customer can use.
  • Hosts that serve other authors’ open models (DeepInfra, Novita, Together, Fireworks, Baseten, Nebius, SambaNova, Cerebras, RunPod, Modal, OpenRouter) are priced from the feed under their own namespace. A DeepSeek model on RunPod is never billed at DeepSeek’s list price; without a feed quote it stays unpriced. DigitalOcean, RunPod and Modal currently have no LiteLLM namespace at all, so models there are unpriced until one exists.
  • Usage reconciliation. Only OpenAI and Anthropic document a usage or billing API almyty can ingest, so cost governance cannot reconcile estimates against actuals for anything else.
  • Replicate is not a provider type: its API is predictions-based and has no chat-completions endpoint to ride.