models and routing
Every model, one integration
You should not have to pick one AI vendor and live with it. AetherGrid connects to six providers behind one API, keeps a catalogue of the models each one offers, and lets you change which model serves a feature without changing your code.
providers
Adapters,
not integrations.
Anthropic, OpenAI, Google, Azure OpenAI, Experiential Labs, and any server that speaks the OpenAI format. Connect the ones you use; the rest are simply skipped. Starting with a single provider is normal.
GET /v1/providers will tell you. Provider credentials stay on the server and are never shown back.| slug | name | adapter | configured |
|---|---|---|---|
| anthropic | Anthropic | Direct adapter | true |
| openai | OpenAI | Direct adapter | true |
| Direct adapter | true | ||
| azure-openai | Azure OpenAI | Deployment-scoped adapter | false · routing skips it |
| experiential-labs | Experiential Labs | Direct adapter | true |
| self-hosted | Self-hosted | Any OpenAI-compatible endpoint | true |
A provider you have not connected is reported as unconfigured and skipped. Starting with a single provider is normal, not a broken setup.
routing / strategies
Choose by cost, speed,
quality or balance.
Tell AetherGrid what matters for a request and it picks the model. Models it cannot actually call right now are removed first, so you are never routed to a provider you have not connected or one that is down. The response explains the choice in plain words.
- explicit
- Exactly the model you name. For when the choice is the point.
- cost
- The cheapest model that can serve the request. Uses list prices, or the cost your own traffic has measured.
- latency
- The model that has answered fastest for you. Measured from your own requests, not a vendor benchmark.
- quality
- The highest quality tier, cheapest first within it. Cost only decides between models of the same tier.
- balanced
- Quality first, then speed and cost together. The default for a new workspace.
| model | adapter | p50 | your $/M in | tier | state |
|---|---|---|---|---|---|
| claude-opus-4.6 | anthropic | 1420 ms | 18.00 | 4 · frontier | same tier, 1420 ms at $18.00/M |
| gpt-5.1 | openai | 1180 ms | 1.50 | 4 · frontier | chosen |
| claude-sonnet-4.5 | anthropic | 940 ms | 3.60 | 3 · balanced | eligible |
| gemini-2.5-pro | 1260 ms | 1.50 | 3 · balanced | circuit breaker open | |
| deepseek-v3.2 | self-hosted | 640 ms | 0.34 | 3 · balanced | eligible |
| mistral-large-3 | self-hosted | 290 ms | 0.24 | 3 · balanced | eligible |
| claude-haiku-4.5 | experiential-labs | 460 ms | 1.20 | 2 · fast | eligible |
| gemini-2.5-flash | 520 ms | 0.36 | 2 · fast | circuit breaker open | |
| gpt-5-mini | azure-openai | 610 ms | 0.30 | 2 · fast | adapter unconfigured — no credential |
| llama-3.3-70b-instruct | self-hosted | 330 ms | 0.14 | 2 · fast | eligible |
rules from the project's routing policy: require_tools · min_context_window 128,000 · prices and response times are illustrative
{
"primary": {
"slug": "gpt-5.1",
"provider": "openai"
},
"fallbacks": [
{ "slug": "claude-opus-4.6", "provider": "anthropic" }
],
"strategy": "balanced",
"reason": "highest tier (frontier); then speed and cost together, 1180 ms at $1.50/M",
"considered": 7,
"eliminated": [
{ "slug": "gemini-2.5-pro", "reason": "circuit breaker open" },
{ "slug": "gemini-2.5-flash", "reason": "circuit breaker open" },
{ "slug": "gpt-5-mini", "reason": "adapter unconfigured — no credential" }
]
}model registry
A living catalogue,
not a fixed list.
The models you can reach are records you can see, with their context sizes, abilities and what your own traffic has measured about them. When a provider adds a model, it shows up here.
- GET /v1/models
- Every model available to your project, with its provider, modality, status and price.
- GET /v1/models/{slug}
- One model in full, including what the router knows about it.
- GET /v1/providers
- The six adapters and whether each is configured in this deployment.
- GET /v1/providers/health
- Live adapter state: circuit breaker, consecutive failures, observed success rate.
- POST /v1/chat/route-preview
- What the router would pick, and why — without calling a provider.
| slug | provider_slug | family | context_window | quality_tier | tools | status |
|---|---|---|---|---|---|---|
| claude-opus-4.6 | anthropic | Claude | 200,000 | 4 · frontier | true | available |
| gpt-5.1 | openai | GPT | 400,000 | 4 · frontier | true | available |
| claude-sonnet-4.5 | anthropic | Claude | 200,000 | 3 · balanced | true | available |
| gemini-2.5-pro | Gemini | 1,000,000 | 3 · balanced | true | provider breaker open | |
| deepseek-v3.2 | self-hosted | DeepSeek | 128,000 | 3 · balanced | true | available |
| mistral-large-3 | self-hosted | Mistral | 128,000 | 3 · balanced | true | available |
| claude-haiku-4.5 | experiential-labs | Claude | 200,000 | 2 · fast | true | available |
| gemini-2.5-flash | Gemini | 1,000,000 | 2 · fast | true | provider breaker open | |
| gpt-5-mini | azure-openai | GPT | 400,000 | 2 · fast | true | provider unconfigured |
| llama-3.3-70b-instruct | self-hosted | Llama | 128,000 | 2 · fast | true | available |
Context windows and tiers shown here are illustrative. A quality tier is a ranking you set to order routing preference, not a benchmark result. Your real catalogue is answered by this endpoint.
| model | provider | your price / 1M in | your price / 1M out |
|---|---|---|---|
| claude-opus-5.5 | Anthropic | $4.80 | $24.00 |
| claude-sonnet-5 | Anthropic | $2.40 | $12.00 |
| gpt-6-sol | OpenAI | $2.40 | $12.00 |
| gemini-3.8-flash | $0.90 | $4.50 | |
| claude-haiku-4.5 | Anthropic | $1.20 | $6.00 |
AetherGrid charges the provider's own list price for hosted model usage plus a 20% service markup, applied the same way to input and output tokens. These are a few examples; the same rule covers every model in the catalogue, and every request you make shows both the provider cost and the price you pay.
failure handling
When a provider fails,
your app does not.
If a provider starts failing, AetherGrid stops sending it traffic after a few consecutive errors, sends requests to the next best model instead, and checks back later to see whether it has recovered. Your users see an answer, not an outage.
| adapter | configured | circuit_state | failures | success | probe |
|---|---|---|---|---|---|
| anthropic | true | closed | 0 | 99.8% | 412 ms |
| openai | true | closed | 0 | 99.6% | 388 ms |
| true | open | 5 | 41.0% | — | |
| experiential-labs | true | closed | 0 | 99.9% | 296 ms |
| self-hosted | true | closed | 0 | 100.0% | 61 ms |
| azure-openai | false · no credential | closed | 0 | — | — |
A provider that fails several times in a row is marked open and skipped; after a cooldown it is tried again, and a success marks it closed. Only genuine provider failures count, so a request that was itself malformed changes nothing. Skipping an open provider is what stops someone else's outage from becoming your slow day.
your catalogue
Your catalogue is yours
Which models you can reach depends on which providers you connect, so the definitive list lives in your workspace rather than on this page. Sign in and open Models, or ask the API.
Both the console and GET /v1/models show the same catalogue, with availability, abilities and what your own requests have measured about each model.
{
"slug": "<model slug>",
"provider_slug": "<adapter>",
"provider_model_id": "<id the provider knows>",
"display_name": "…",
"family": "…",
"context_window": <tokens>,
"max_output_tokens": <tokens> | null,
"input_modalities": ["text", …],
"supports_streaming": true | false,
"supports_tools": true | false,
"supports_vision": true | false,
"supports_structured_output": true | false,
"quality_tier": <your ranking>,
"observed_success_rate": <measured from your requests> | null,
"status": "available" | "preview" | "deprecated" | "retired",
"is_enabled": true | false
}The shape of one model record. The values are your workspace's, so none are printed here.