Skip to main content

Overview

A pool contains one or more models. When an agent puts the pool name in a request’s model field, Dome orders the members according to the routing strategy. Dome sends the request to the first eligible member. If that attempt fails, Dome can try the remaining eligible members. The typical workflow is:
  1. Connect the models that can serve the traffic.
  2. Create a pool.
  3. Add the models as members.
  4. Configure the pool’s routing strategy and failover.
  5. Attach the pool to a Gateway.
  6. Allow the Gateway on the agent.
  7. Verify the pool with that agent’s API key.

Members

Each member represents one model connection in the pool. With priority-weighted routing, the priority places the member in a failover tier. The weight determines how often Dome selects the member within that tier. Round-robin and least-loaded routing treat every member equally, so they ignore priority and weight. A model can belong to more than one pool. Removing a member changes only that pool and leaves the model connection available elsewhere.
The management interfaces store an enabled value, but the current gateway routes to members regardless of that value. To stop sending traffic to a member, remove it from the pool.

Routing strategies

The routing strategy chooses the primary model and orders any failover candidates. Use priority_weighted when some models should take traffic before others. Use round_robin or least_loaded when members are peers. The strategy_scope setting determines whether round-robin rotation and least-loaded request counts are shared across the workspace or tracked per agent. Priority-weighted routing does not use this setting. You can choose a strategy when you create a pool or change it later.

Failover

The failover limit controls how many additional members Dome may try when the request to the primary member fails. Dome authorizes the primary before sending the request. If the primary fails, Dome authorizes each remaining member before trying it and skips any member that rules deny. A streaming request can fail over only before Dome sends the first response data to the caller. An error after streaming begins terminates the response. You can set failover when you create a pool or change it later.

Pool resolution

When a request reaches a Gateway, Dome resolves its model value in this order:
  1. A pool with that exact name
  2. A direct model connection with that exact name
  3. A direct connection whose upstream model identifier matches
  4. The first pool in the configured order whose match_when predicate matches
  5. The workspace default pool
An exact pool or model name takes precedence over conditional routing. When the requested name does not match directly, a match_when condition can select a pool based on the request or verified identity (for example prompt_tokens.gt). The full match_when dialect is on the Pools reference. You can set a condition when you create a pool, change it later, and move the pool to control evaluation order.

Response caching

Pool records store a cache TTL and cache scope for reusing responses to identical requests.
The gateway does not read these settings during model dispatch. Setting cache_ttl_secs or cache_scope does not cache responses.

Requirements

Before you begin:
  • Authenticate to Dome and select a workspace
  • Connect at least one model
  • Have a Gateway ready when you want the pool reachable

Permissions

Pool operations require platform permissions. Each operation states its required permission inline.

Create pool

Create a pool with a name that clients can put in the request’s model field. A new pool has no members until you add them.
Requires gateway.manage.
By default, the CLI uses priority-weighted routing and shares routing state across the workspace. It sets the cache TTL to 0 and allows Dome to try every eligible member after a failure.
Agents cannot call a pool until it has at least one model member and belongs to a Gateway.

Update pool

Update a pool to change its name, description, routing strategy, conditional routing criteria, cache settings, or failover limit. Setting a different default pool and changing the order of conditional routes are separate operations.
Requires gateway.manage.
Only the flags you pass change.

Change routing

You can change how the pool selects its primary member. Refer to Routing strategies for when to use each strategy. When switching away from priority-weighted routing, existing priorities and weights remain stored but no longer affect selection.

Change request routing

You can replace the conditions that select this pool during conditional routing. Send an empty match_when object to remove those conditions.

Change failover

You can change how many additional members Dome may try after the primary fails. Refer to Failover for limit values and streaming behavior. After setting a numeric limit, you can use the API to let Dome try every eligible member again.

Get pool

Retrieve a pool with its routing configuration and members. Check this information before an update or when you need to determine which models can serve requests to the pool.
Requires gateway.view.

List pools

Retrieve the pools in a workspace with their routing strategies, conditional routing criteria, and default status. Use the list to find a pool to inspect, reorder, update, or remove.
Requires gateway.view.

Set default pool

Set a pool as the workspace default. Dome uses the default only when a request does not match an exact model name, exact pool name, or conditional route. Setting a new default removes the previous default.
Requires gateway.manage.

Move pool

Move a conditional pool earlier or later in the order Dome checks match_when predicates. This order affects only conditional routing and does not change routes that use an exact model or pool name.
Requires gateway.manage.
Pass exactly one of --before or --after.

Manage members

Pool members are the model connections that Dome can select to serve requests to the pool.

Add member

Add a model to a pool. For a priority-weighted pool, priority defaults to 0 and weight defaults to 1. Round-robin and least-loaded pools reject explicit priority or weight values.
Requires gateway.manage.
Run a separate command for each model because each member can have a different priority and weight.

List members

Retrieve the models in a pool with each member’s priority, weight, and stored enabled value.
Requires gateway.view.

Update member

Update the priority or weight of a member in a priority-weighted pool. To move a model to another pool, remove it from the current pool and add it to the destination pool.
Requires gateway.manage.

Remove member

Remove a model from a pool to stop the pool from sending requests to that model. Removing the member does not delete the model connection, so other pools and direct Gateway routes can still use it.
Requires gateway.manage.

Remove pool

Remove a pool to delete its routing configuration and memberships. Removing the pool does not delete its model connections.
Requires gateway.manage.
Removing a pool also removes it from every Gateway. Requests that use the deleted pool name fail unless a conditional route or the workspace default selects another pool.

Attach to a Gateway

Attach a pool to a Gateway so agents can request the pool by name at that gateway’s model endpoints. The attachment makes the pool reachable but does not authorize an agent to call it. The agent must allow the Gateway, and rules must permit both the pool and selected model.
Requires gateway.manage.

Verify pool

Call the pool through the Gateway with an agent API key. A successful response confirms the pool is reachable, rules permit the route, and at least one member can serve the request.
OpenAI-compatible client
If Dome cannot find the pool for the request, check the pool’s Gateway membership and model members. If Dome denies the request, check the agent’s allowed resources and rules. Audit events record which model served the request and whether Dome attempted failover.

Next steps

  • Pools concept for how routing and failover work and Pools reference for strategies and match_when
  • Connect more models to add providers or failover capacity
  • Manage membership and grants in Gateways
  • Configure model and pool spend limits in Cost Quotas