atlas-iac/services/hermes/switchyard-configmap.yaml

1156 lines
47 KiB
YAML

# services/hermes/switchyard-configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: hermes-switchyard
namespace: hermes
labels:
app: hermes-switchyard
data:
routes.toml: |
schema_version = 1
[llm_clients.classifier]
format = "openai_chat"
base_url = "http://127.0.0.1:9008/v1"
# Classification is advisory and fail-open. Do not make an interactive
# request wait through a second slow local inference before using the
# route's conservative hosted default.
max_retries = 0
[llm_clients.local_low]
format = "openai_chat"
base_url = "http://hermes-model-gate.hermes.svc.cluster.local:11434/v1"
max_retries = 1
[llm_clients.local_medium]
format = "openai_chat"
base_url = "http://hermes-model-gate.hermes.svc.cluster.local:11434/v1"
max_retries = 1
[llm_clients.codex_low]
format = "openai_responses"
base_url = "http://hermes-codex-broker.hermes.svc.cluster.local:9003/v1"
api_key_env = "ATLAS_BROKER_KEY"
max_retries = 1
[llm_clients.codex_medium]
format = "openai_responses"
base_url = "http://hermes-codex-broker.hermes.svc.cluster.local:9003/v1"
api_key_env = "ATLAS_BROKER_KEY"
max_retries = 1
[llm_clients.codex_high]
format = "openai_responses"
base_url = "http://hermes-codex-broker.hermes.svc.cluster.local:9003/v1"
api_key_env = "ATLAS_BROKER_KEY"
max_retries = 1
[llm_clients.codex_xhigh]
format = "openai_responses"
base_url = "http://hermes-codex-broker.hermes.svc.cluster.local:9003/v1"
api_key_env = "ATLAS_BROKER_KEY"
max_retries = 1
[llm_clients.claude_low]
format = "anthropic_messages"
base_url = "http://hermes-claude-broker.hermes.svc.cluster.local:9006/v1"
api_key_env = "ATLAS_BROKER_KEY"
max_retries = 1
[llm_clients.claude_medium]
format = "anthropic_messages"
base_url = "http://hermes-claude-broker.hermes.svc.cluster.local:9006/v1"
api_key_env = "ATLAS_BROKER_KEY"
max_retries = 1
[llm_clients.claude_high]
format = "anthropic_messages"
base_url = "http://hermes-claude-broker.hermes.svc.cluster.local:9006/v1"
api_key_env = "ATLAS_BROKER_KEY"
max_retries = 1
[llm_clients.claude_xhigh]
format = "anthropic_messages"
base_url = "http://hermes-claude-broker.hermes.svc.cluster.local:9006/v1"
api_key_env = "ATLAS_BROKER_KEY"
max_retries = 1
[llm_clients.worker_decision]
format = "openai_chat"
base_url = "http://127.0.0.1:9007/v1"
max_retries = 0
[llm_clients.neutral_pool]
format = "openai_chat"
base_url = "http://127.0.0.1:9005/v1"
max_retries = 0
[targets.classifier]
id = "qwen2.5:14b-instruct-q4_0"
llm_client = "classifier"
[targets.local_qwen_low]
id = "route/local/qwen2.5-14b/low"
llm_client = "local_low"
[targets.local_qwen_medium]
id = "route/local/qwen2.5-14b/medium"
llm_client = "local_medium"
[targets.codex_luna_low]
id = "route/codex/luna/low"
llm_client = "codex_low"
extra_body = { reasoning = { effort = "low" } }
[targets.codex_luna_medium]
id = "route/codex/luna/medium"
llm_client = "codex_medium"
extra_body = { reasoning = { effort = "medium" } }
[targets.codex_luna_high]
id = "route/codex/luna/high"
llm_client = "codex_high"
extra_body = { reasoning = { effort = "high" } }
[targets.codex_luna_xhigh]
id = "route/codex/luna/xhigh"
llm_client = "codex_xhigh"
extra_body = { reasoning = { effort = "xhigh" } }
[targets.codex_terra_low]
id = "route/codex/terra/low"
llm_client = "codex_low"
extra_body = { reasoning = { effort = "low" } }
[targets.codex_terra_medium]
id = "route/codex/terra/medium"
llm_client = "codex_medium"
extra_body = { reasoning = { effort = "medium" } }
[targets.codex_terra_high]
id = "route/codex/terra/high"
llm_client = "codex_high"
extra_body = { reasoning = { effort = "high" } }
[targets.codex_terra_xhigh]
id = "route/codex/terra/xhigh"
llm_client = "codex_xhigh"
extra_body = { reasoning = { effort = "xhigh" } }
[targets.codex_sol_low]
id = "route/codex/sol/low"
llm_client = "codex_low"
extra_body = { reasoning = { effort = "low" } }
[targets.codex_sol_medium]
id = "route/codex/sol/medium"
llm_client = "codex_medium"
extra_body = { reasoning = { effort = "medium" } }
[targets.codex_sol_high]
id = "route/codex/sol/high"
llm_client = "codex_high"
extra_body = { reasoning = { effort = "high" } }
[targets.codex_sol_xhigh]
id = "route/codex/sol/xhigh"
llm_client = "codex_xhigh"
extra_body = { reasoning = { effort = "xhigh" } }
[targets.claude_haiku_low]
id = "route/claude/haiku/low"
llm_client = "claude_low"
extra_body = { thinking = { type = "adaptive" }, output_config = { effort = "low" } }
[targets.claude_haiku_medium]
id = "route/claude/haiku/medium"
llm_client = "claude_medium"
extra_body = { thinking = { type = "adaptive" }, output_config = { effort = "medium" } }
[targets.claude_haiku_high]
id = "route/claude/haiku/high"
llm_client = "claude_high"
extra_body = { thinking = { type = "adaptive" }, output_config = { effort = "high" } }
[targets.claude_haiku_xhigh]
id = "route/claude/haiku/xhigh"
llm_client = "claude_xhigh"
extra_body = { thinking = { type = "adaptive" }, output_config = { effort = "xhigh" } }
[targets.claude_fable_low]
id = "route/claude/fable/low"
llm_client = "claude_low"
extra_body = { thinking = { type = "adaptive" }, output_config = { effort = "low" } }
[targets.claude_fable_medium]
id = "route/claude/fable/medium"
llm_client = "claude_medium"
extra_body = { thinking = { type = "adaptive" }, output_config = { effort = "medium" } }
[targets.claude_fable_high]
id = "route/claude/fable/high"
llm_client = "claude_high"
extra_body = { thinking = { type = "adaptive" }, output_config = { effort = "high" } }
[targets.claude_fable_xhigh]
id = "route/claude/fable/xhigh"
llm_client = "claude_xhigh"
extra_body = { thinking = { type = "adaptive" }, output_config = { effort = "xhigh" } }
[targets.claude_sonnet_low]
id = "route/claude/sonnet/low"
llm_client = "claude_low"
extra_body = { thinking = { type = "adaptive" }, output_config = { effort = "low" } }
[targets.claude_sonnet_medium]
id = "route/claude/sonnet/medium"
llm_client = "claude_medium"
extra_body = { thinking = { type = "adaptive" }, output_config = { effort = "medium" } }
[targets.claude_sonnet_high]
id = "route/claude/sonnet/high"
llm_client = "claude_high"
extra_body = { thinking = { type = "adaptive" }, output_config = { effort = "high" } }
[targets.claude_sonnet_xhigh]
id = "route/claude/sonnet/xhigh"
llm_client = "claude_xhigh"
extra_body = { thinking = { type = "adaptive" }, output_config = { effort = "xhigh" } }
[targets.claude_opus_low]
id = "route/claude/opus/low"
llm_client = "claude_low"
extra_body = { thinking = { type = "adaptive" }, output_config = { effort = "low" } }
[targets.claude_opus_medium]
id = "route/claude/opus/medium"
llm_client = "claude_medium"
extra_body = { thinking = { type = "adaptive" }, output_config = { effort = "medium" } }
[targets.claude_opus_high]
id = "route/claude/opus/high"
llm_client = "claude_high"
extra_body = { thinking = { type = "adaptive" }, output_config = { effort = "high" } }
[targets.claude_opus_xhigh]
id = "route/claude/opus/xhigh"
llm_client = "claude_xhigh"
extra_body = { thinking = { type = "adaptive" }, output_config = { effort = "xhigh" } }
[targets.worker_codex_luna_low]
id = "worker/codex/luna/low"
llm_client = "worker_decision"
[targets.worker_codex_luna_medium]
id = "worker/codex/luna/medium"
llm_client = "worker_decision"
[targets.worker_codex_luna_high]
id = "worker/codex/luna/high"
llm_client = "worker_decision"
[targets.worker_codex_luna_xhigh]
id = "worker/codex/luna/xhigh"
llm_client = "worker_decision"
[targets.worker_codex_terra_low]
id = "worker/codex/terra/low"
llm_client = "worker_decision"
[targets.worker_codex_terra_medium]
id = "worker/codex/terra/medium"
llm_client = "worker_decision"
[targets.worker_codex_terra_high]
id = "worker/codex/terra/high"
llm_client = "worker_decision"
[targets.worker_codex_terra_xhigh]
id = "worker/codex/terra/xhigh"
llm_client = "worker_decision"
[targets.worker_codex_sol_low]
id = "worker/codex/sol/low"
llm_client = "worker_decision"
[targets.worker_codex_sol_medium]
id = "worker/codex/sol/medium"
llm_client = "worker_decision"
[targets.worker_codex_sol_high]
id = "worker/codex/sol/high"
llm_client = "worker_decision"
[targets.worker_codex_sol_xhigh]
id = "worker/codex/sol/xhigh"
llm_client = "worker_decision"
[targets.worker_claude_haiku_low]
id = "worker/claude/haiku/low"
llm_client = "worker_decision"
[targets.worker_claude_haiku_medium]
id = "worker/claude/haiku/medium"
llm_client = "worker_decision"
[targets.worker_claude_haiku_high]
id = "worker/claude/haiku/high"
llm_client = "worker_decision"
[targets.worker_claude_haiku_xhigh]
id = "worker/claude/haiku/xhigh"
llm_client = "worker_decision"
[targets.worker_claude_fable_low]
id = "worker/claude/fable/low"
llm_client = "worker_decision"
[targets.worker_claude_fable_medium]
id = "worker/claude/fable/medium"
llm_client = "worker_decision"
[targets.worker_claude_fable_high]
id = "worker/claude/fable/high"
llm_client = "worker_decision"
[targets.worker_claude_fable_xhigh]
id = "worker/claude/fable/xhigh"
llm_client = "worker_decision"
[targets.worker_claude_sonnet_low]
id = "worker/claude/sonnet/low"
llm_client = "worker_decision"
[targets.worker_claude_sonnet_medium]
id = "worker/claude/sonnet/medium"
llm_client = "worker_decision"
[targets.worker_claude_sonnet_high]
id = "worker/claude/sonnet/high"
llm_client = "worker_decision"
[targets.worker_claude_sonnet_xhigh]
id = "worker/claude/sonnet/xhigh"
llm_client = "worker_decision"
[targets.worker_claude_opus_low]
id = "worker/claude/opus/low"
llm_client = "worker_decision"
[targets.worker_claude_opus_medium]
id = "worker/claude/opus/medium"
llm_client = "worker_decision"
[targets.worker_claude_opus_high]
id = "worker/claude/opus/high"
llm_client = "worker_decision"
[targets.worker_claude_opus_xhigh]
id = "worker/claude/opus/xhigh"
llm_client = "worker_decision"
# Switchyard 0.2.0 requires one default_target for every custom classifier.
# These targets recurse once into unbiased random routes whose candidates are
# split evenly across providers. A classifier outage therefore falls back to
# a pool, never directly to either Codex/OpenAI or Claude/Anthropic.
[targets.neutral_fast_pool]
id = "atlas/fallback/fast"
llm_client = "neutral_pool"
[targets.neutral_balanced_pool]
id = "atlas/fallback/balanced"
llm_client = "neutral_pool"
[targets.neutral_deep_pool]
id = "atlas/fallback/deep"
llm_client = "neutral_pool"
[targets.neutral_maximum_pool]
id = "atlas/fallback/maximum"
llm_client = "neutral_pool"
[targets.neutral_worker_maximum_pool]
id = "atlas/worker/fallback/maximum"
llm_client = "neutral_pool"
[routes.fallback_fast]
id = "atlas/fallback/fast"
type = "random"
targets = ["codex_terra_medium", "claude_fable_medium"]
weights = [1.0, 1.0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.fallback_balanced]
id = "atlas/fallback/balanced"
type = "random"
targets = ["codex_terra_high", "claude_sonnet_high"]
weights = [1.0, 1.0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.fallback_deep]
id = "atlas/fallback/deep"
type = "random"
targets = ["codex_sol_high", "claude_opus_high"]
weights = [1.0, 1.0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.fallback_maximum]
id = "atlas/fallback/maximum"
type = "random"
targets = ["codex_sol_xhigh", "claude_opus_xhigh"]
weights = [1.0, 1.0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.fallback_worker_maximum]
id = "atlas/worker/fallback/maximum"
type = "random"
targets = ["worker_codex_sol_xhigh", "worker_claude_opus_xhigh"]
weights = [1.0, 1.0]
context_window = 272000
tool_calling = false
reasoning = true
[routes.auto_fast]
id = "atlas/auto/fast"
type = "llm_classifier"
mode = "custom"
classifier_target = "classifier"
# Switchyard falls through this list after a request-local target failure.
# Keep both xhigh providers first so recovery can escalate, never downgrade.
targets = ["codex_sol_xhigh", "claude_opus_xhigh", "claude_fable_xhigh", "codex_sol_high", "claude_sonnet_high", "claude_opus_high", "claude_fable_high", "codex_terra_high", "codex_sol_medium", "claude_sonnet_medium", "claude_fable_medium", "codex_terra_medium", "codex_terra_low", "codex_luna_low", "claude_haiku_low", "claude_fable_low", "neutral_fast_pool"]
default_target = "neutral_fast_pool"
session_affinity = false
recent_turn_window = 4
context_window = 272000
tool_calling = true
reasoning = true
prompt = """
You are the deterministic routing authority for one private family-assistant
model-call boundary. Mildly favor speed, but apply these rules in order.
1. Set a mandatory minimum effort floor from the whole current objective and
recent context: xhigh for critical security work, risky production
migrations, destructive or data-loss risk, or consequential independent
final/release review; high for difficult debugging, consequential
implementation, adversarial review, major architectural tradeoffs, or
uncertain production work; medium for ordinary implementation, tool use,
analysis, or bounded architecture; low only for simple conversation,
formatting, lookup, or mechanical reversible work. Never choose below the
floor and never exceed xhigh.
If tools are present or the boundary may emit a tool call, the floor is
medium even when the user's wording is short. Filesystem, shell,
repository, cluster, browser, and image-generation/edit operations are
tool work; never route those boundaries to Luna, Haiku, or local-low.
A failing test, failed tool plan, contradicted result, rejected review, or
incomplete evidence means the previous quality mark was missed. Raise the
next boundary by at least one effort tier and prefer a stronger family or
the other hosted provider; repeated misses require xhigh. Never repeat a
failed lower-capability plan unchanged.
2. Treat "think hard", "deeply", "carefully", and equivalent intent as a
request to raise capability by at least one tier when the safety floor is
lower. Treat "answer quickly" and equivalent intent as permission to choose
the fastest target at the safety floor, never below it. An explicit
available provider or model wins at the safety floor.
3. Route image creation and editing before general provider preference.
When image-generation/edit tools are available and the user asks to create,
transform, restore, colorize, or continue editing an image: select
codex_terra_medium. The image tool—not the conversational model—honors the
user's local, OpenAI/hosted, or AUTO image-backend choice. Do not select a
local Qwen or Claude target for an image-tool boundary: local Qwen cannot
reliably carry the full Hermes tool context, and Anthropic supplies the
conversation model rather than either configured image backend.
4. Local Qwen is the mandatory routing classifier, but its 8K context and
tool protocol are not eligible for foreground Hermes execution. Prefer
Codex for implementation, debugging, tests, commands, repository work, and
image-tool invocation. Prefer Claude for architecture, ambiguity,
synthesis, risk analysis, adversarial analysis, and independent review.
Anthropic means Claude; OpenAI means Codex. Never select a provider stated
to be unavailable, failed, exhausted, rate-limited, or out of capacity; use
the other hosted provider at the same floor.
5. Choose across the complete family catalog. Codex options are Luna,
Terra, and SOL at low through xhigh. Claude options are Haiku, Fable,
Sonnet, and Opus at low through xhigh. Prefer Fable for concise writing,
synthesis, and instruction-following where its capability fits the effort
floor; use Sonnet or Opus for deeper analysis and review. Re-evaluate every
boundary and resolve "continue"
or "do it" from recent context. The manual local route remains available
only when the user explicitly selects it.
"""
response_schema = '''
{"type":"object","properties":{"decision":{"type":"object","properties":{"target":{"type":"string","enum":["codex_terra_medium","claude_sonnet_medium","claude_fable_medium","codex_luna_low","claude_haiku_low","claude_fable_low","codex_terra_low","codex_terra_high","claude_fable_high","codex_sol_medium","codex_sol_high","codex_sol_xhigh","claude_sonnet_high","claude_opus_high","claude_fable_xhigh","claude_opus_xhigh"]}},"required":["target"],"additionalProperties":false}},"required":["decision"],"additionalProperties":false}
'''
[routes.auto_fast.policy]
type = "target_selector"
selector = "/decision/target"
[routes.auto_balanced]
id = "atlas/auto/balanced"
type = "llm_classifier"
mode = "custom"
classifier_target = "classifier"
# Switchyard falls through this list after a request-local target failure.
# Keep both xhigh providers first so recovery can escalate, never downgrade.
targets = ["codex_sol_xhigh", "claude_opus_xhigh", "claude_fable_xhigh", "codex_sol_high", "claude_sonnet_high", "claude_opus_high", "claude_fable_high", "codex_terra_high", "codex_sol_medium", "claude_sonnet_medium", "claude_fable_medium", "codex_terra_medium", "codex_terra_low", "codex_luna_low", "claude_haiku_low", "claude_fable_low", "neutral_balanced_pool"]
default_target = "neutral_balanced_pool"
session_affinity = false
recent_turn_window = 4
context_window = 272000
tool_calling = true
reasoning = true
prompt = """
You are the deterministic routing authority for one private general-assistant
model-call boundary. Balance speed and intelligence, then apply these rules
in order.
1. Set a mandatory minimum effort floor from the whole current objective and
recent context: xhigh for critical security work, risky production
migrations, destructive or data-loss risk, or consequential independent
final/release review; high for difficult debugging, consequential
implementation, adversarial review, major architectural tradeoffs, or
uncertain production work; medium for ordinary implementation, tool use,
analysis, or bounded architecture; low only for simple conversation,
formatting, lookup, or mechanical reversible work. Never choose below the
floor and never exceed xhigh.
If tools are present or the boundary may emit a tool call, the floor is
medium even when the user's wording is short. Filesystem, shell,
repository, cluster, browser, and image-generation/edit operations are
tool work; never route those boundaries to Luna, Haiku, or local-low.
A failing test, failed tool plan, contradicted result, rejected review, or
incomplete evidence means the previous quality mark was missed. Raise the
next boundary by at least one effort tier and prefer a stronger family or
the other hosted provider; repeated misses require xhigh. Never repeat a
failed lower-capability plan unchanged.
2. Treat "think hard", "deeply", "carefully", and equivalent intent as a
request to raise capability by at least one tier when the safety floor is
lower. Treat "answer quickly" and equivalent intent as permission to choose
the fastest target at the safety floor, never below it. An explicit
available provider or model wins at the safety floor.
3. Route image creation and editing before general provider preference.
When image-generation/edit tools are available and the user asks to create,
transform, restore, colorize, or continue editing an image: select
codex_terra_medium. The image tool—not the conversational model—honors the
user's local, OpenAI/hosted, or AUTO image-backend choice. Do not select a
local Qwen or Claude target for an image-tool boundary: local Qwen cannot
reliably carry the full Hermes tool context, and Anthropic supplies the
conversation model rather than either configured image backend.
4. Local Qwen is the mandatory routing classifier, but its 8K context and
tool protocol are not eligible for foreground Hermes execution. Prefer
Codex for implementation, debugging, tests, commands, repository work, and
image-tool invocation. Prefer Claude for architecture, ambiguity,
synthesis, risk analysis, adversarial analysis, and independent review.
Anthropic means Claude; OpenAI means Codex. Never select a provider stated
to be unavailable, failed, exhausted, rate-limited, or out of capacity; use
the other hosted provider at the same floor.
5. Choose across the complete family catalog. Codex options are Luna,
Terra, and SOL at low through xhigh. Claude options are Haiku, Fable,
Sonnet, and Opus at low through xhigh. Prefer Fable for concise writing,
synthesis, and instruction-following where its capability fits the effort
floor; use Sonnet or Opus for deeper analysis and review. Re-evaluate every
boundary and resolve "continue"
or "do it" from recent context. The manual local route remains available
only when the user explicitly selects it.
"""
response_schema = '''
{"type":"object","properties":{"decision":{"type":"object","properties":{"target":{"type":"string","enum":["codex_terra_medium","claude_sonnet_medium","claude_fable_medium","codex_luna_low","claude_haiku_low","claude_fable_low","codex_terra_low","codex_terra_high","claude_fable_high","codex_sol_medium","codex_sol_high","codex_sol_xhigh","claude_sonnet_high","claude_opus_high","claude_fable_xhigh","claude_opus_xhigh"]}},"required":["target"],"additionalProperties":false}},"required":["decision"],"additionalProperties":false}
'''
[routes.auto_balanced.policy]
type = "target_selector"
selector = "/decision/target"
[routes.auto_deep]
id = "atlas/auto/deep"
type = "llm_classifier"
mode = "custom"
classifier_target = "classifier"
# Switchyard falls through this list after a request-local target failure.
# Keep both xhigh providers first so recovery can escalate, never downgrade.
targets = ["claude_opus_xhigh", "codex_sol_xhigh", "claude_fable_xhigh", "claude_sonnet_high", "codex_sol_high", "claude_opus_high", "claude_fable_high", "codex_terra_high", "claude_sonnet_medium", "claude_fable_medium", "codex_sol_medium", "codex_terra_medium", "neutral_deep_pool"]
default_target = "neutral_deep_pool"
session_affinity = false
recent_turn_window = 6
context_window = 272000
tool_calling = true
reasoning = true
prompt = """
You are the deterministic routing authority for one operations-triage
model-call boundary. Favor evidence and intelligence, then apply these rules
in order.
1. Set a mandatory minimum effort floor from the whole current objective,
recent context, and tool evidence: xhigh for critical security incidents,
risky production migrations, destructive or data-loss risk, or
consequential independent final/release review; high for difficult
diagnosis or debugging, consequential implementation, adversarial review,
major architectural tradeoffs, or uncertain production work; medium for
ordinary diagnosis, implementation, tool use, analysis, or bounded
architecture; low only for simple notification summaries, lookup, or
mechanical reversible work. Never choose below the floor or above xhigh.
If tools are present or the boundary may emit a tool call, the floor is
medium even when the user's wording is short. Filesystem, shell,
repository, cluster, browser, and image-generation/edit operations are
tool work; never route those boundaries to Luna or Haiku.
A failing test, failed tool plan, contradicted result, rejected review, or
incomplete evidence means the previous quality mark was missed. Raise the
next boundary by at least one effort tier and prefer a stronger family or
the other hosted provider; repeated misses require xhigh. Never repeat a
failed lower-capability plan unchanged.
2. Treat "think hard", "deeply", "carefully", and equivalent intent as a
request to raise capability by at least one tier when the safety floor is
lower. Treat "answer quickly" and equivalent intent as permission to choose
the fastest target at the safety floor, never below it. An explicit
available provider or model wins at the safety floor.
3. This quality-first triage route must use a hosted Codex or Claude target.
The local Qwen model remains the routing classifier, but its 8K context and
tool protocol are not eligible for foreground triage execution. Prefer
Codex for implementation, debugging, tests, commands, and repository work.
Prefer Claude for diagnosis, architecture, ambiguity, synthesis, risk
analysis, adversarial analysis, and independent review. Anthropic means
Claude; OpenAI means Codex. Never select a provider stated to be
unavailable, failed, exhausted, rate-limited, or out of capacity; use the
other provider at the same floor.
4. Choose across Codex Terra/SOL and Claude Fable/Sonnet/Opus at medium
through xhigh. Prefer Fable for writing and compact synthesis where it
clears the quality floor; use Sonnet or Opus for deeper diagnosis and
review. Low-tier targets are intentionally unavailable on
this route. Re-evaluate every boundary and resolve "continue" or "do it"
from recent context.
"""
response_schema = '''
{"type":"object","properties":{"decision":{"type":"object","properties":{"target":{"type":"string","enum":["claude_sonnet_high","claude_fable_high","codex_sol_high","codex_terra_medium","claude_sonnet_medium","claude_fable_medium","codex_terra_high","codex_sol_medium","claude_opus_high","codex_sol_xhigh","claude_fable_xhigh","claude_opus_xhigh"]}},"required":["target"],"additionalProperties":false}},"required":["decision"],"additionalProperties":false}
'''
[routes.auto_deep.policy]
type = "target_selector"
selector = "/decision/target"
[routes.auto_maximum]
id = "atlas/auto/maximum"
type = "llm_classifier"
mode = "custom"
classifier_target = "classifier"
# Switchyard falls through this list after a request-local target failure.
# Keep both xhigh providers first so recovery can escalate, never downgrade.
targets = ["codex_sol_xhigh", "claude_opus_xhigh", "claude_fable_xhigh", "codex_sol_high", "claude_opus_high", "claude_sonnet_high", "claude_fable_high", "codex_terra_high", "neutral_maximum_pool"]
default_target = "neutral_maximum_pool"
session_affinity = false
recent_turn_window = 6
context_window = 272000
tool_calling = true
reasoning = true
prompt = """
You are the deterministic routing authority for one owner-only engineering
model-call boundary. Strongly favor intelligence, verification, and task
completion, then apply these rules in order.
1. This maximum-quality route has an absolute high effort floor for every
boundary, including ordinary implementation, tests, tool use, analysis,
bounded architecture, lookup, and mechanical work. Raise the floor to
xhigh for critical security work, risky production migrations, destructive
or data-loss risk, or consequential independent final/release review.
Those xhigh triggers are mandatory: never answer one with a high target.
Medium and low targets are intentionally unavailable on this route.
Never choose below the floor or above xhigh.
A failing test, failed tool plan, contradicted result, rejected review, or
incomplete evidence raises the next boundary to xhigh and should switch to
the strongest suitable family or other hosted provider. Never repeat a
failed high-capability plan unchanged.
2. Treat "think hard", "deeply", "carefully", and equivalent intent as a
request to raise capability by at least one tier when the safety floor is
lower. Treat "answer quickly" and equivalent intent as permission to choose
the fastest target at the safety floor, never below it. An explicit
available provider or model wins at the safety floor.
3. This owner-only engineering route must use a hosted Codex or Claude
target. The local Qwen model remains the routing classifier, but its 8K
context and tool protocol are not eligible for foreground agent execution.
Prefer Codex for implementation, debugging, tests, commands, and repository
changes. Prefer Claude for architecture, ambiguity, synthesis, risk
analysis, adversarial analysis, and independent review. Anthropic means
Claude; OpenAI means Codex. Never select a provider stated to be
unavailable, failed, exhausted, rate-limited, or out of capacity; use the
other provider at the same floor.
4. Choose across Codex Terra/SOL and Claude Fable/Sonnet/Opus at high or
xhigh only. Prefer Fable for writing and compact synthesis where it clears
the quality floor; use Sonnet or Opus for deeper analysis and independent
review. Medium and low targets are intentionally unavailable on this
route. Re-evaluate every boundary and resolve "continue" or "do it" from
recent context.
"""
response_schema = '''
{"type":"object","properties":{"decision":{"type":"object","properties":{"target":{"type":"string","enum":["codex_sol_high","claude_opus_high","claude_sonnet_high","claude_fable_high","codex_terra_high","codex_sol_xhigh","claude_opus_xhigh","claude_fable_xhigh"]}},"required":["target"],"additionalProperties":false}},"required":["decision"],"additionalProperties":false}
'''
[routes.auto_maximum.policy]
type = "target_selector"
selector = "/decision/target"
[routes.worker_auto_maximum]
id = "atlas/worker/auto/maximum"
type = "llm_classifier"
mode = "custom"
classifier_target = "classifier"
targets = ["worker_codex_luna_low", "worker_codex_luna_medium", "worker_codex_luna_high", "worker_codex_luna_xhigh", "worker_codex_terra_low", "worker_codex_terra_medium", "worker_codex_terra_high", "worker_codex_terra_xhigh", "worker_codex_sol_low", "worker_codex_sol_medium", "worker_codex_sol_high", "worker_codex_sol_xhigh", "worker_claude_haiku_low", "worker_claude_haiku_medium", "worker_claude_haiku_high", "worker_claude_haiku_xhigh", "worker_claude_fable_low", "worker_claude_fable_medium", "worker_claude_fable_high", "worker_claude_fable_xhigh", "worker_claude_sonnet_low", "worker_claude_sonnet_medium", "worker_claude_sonnet_high", "worker_claude_sonnet_xhigh", "worker_claude_opus_low", "worker_claude_opus_medium", "worker_claude_opus_high", "worker_claude_opus_xhigh", "neutral_worker_maximum_pool"]
default_target = "neutral_worker_maximum_pool"
session_affinity = false
recent_turn_window = 6
context_window = 272000
tool_calling = false
reasoning = true
prompt = """
You are the deterministic routing authority for one durable engineering
worker launch. Choose exactly one configured target. Apply these steps in
order.
1. Set a mandatory minimum effort floor from the whole objective:
- xhigh: critical security work; a risky production migration; destructive
or data-loss risk; or an independent final/release review of consequential
changes.
- high: difficult debugging, consequential implementation, adversarial
review, architecture with major tradeoffs, or uncertain production work.
- medium: ordinary implementation, tests, analysis, or bounded architecture
work.
- low: only mechanical, reversible, tightly bounded work such as a typo,
formatting, or a simple lookup.
Never choose below the floor and never exceed xhigh.
If the objective records a failing test, failed attempt, contradicted
result, rejected review, or incomplete evidence from a previous worker,
raise effort by at least one tier and prefer a stronger family or the other
hosted provider. Repeated quality misses require xhigh; never launch the
same failed lower-capability plan unchanged.
2. Determine provider availability before provider preference:
- Anthropic and Claude name the same provider. If either is failed,
unavailable, exhausted, rate-limited, or out of capacity, Claude is
unavailable.
- OpenAI and Codex name the same provider. If either is failed, unavailable,
exhausted, rate-limited, or out of capacity, Codex is unavailable.
- Never select an unavailable provider. Use the available provider at the
same effort floor.
3. Choose the provider for the dominant action when both are available:
- Codex: implementation, debugging, tests, commands, and repository changes.
- Claude: architecture, ambiguity, synthesis, risk analysis, adversarial
analysis, and independent review.
A final independent review is Claude; implementing review findings is Codex.
4. Choose across every configured Codex and Claude family at the exact
effort floor. Codex Luna is the economical tier, Terra is balanced, and
SOL is the deepest implementation tier. Claude Haiku is the economical
tier, Fable is preferred for concise writing and synthesis, Sonnet is
balanced, and Opus is the deepest analysis and review tier. Every family
supports low, medium, high, and xhigh; choose the cheapest family that
clears the objective's quality floor without lowering its effort.
Examples:
Critical security migration final review -> worker_claude_opus_xhigh.
Implement critical security review fixes -> worker_codex_sol_xhigh.
Difficult intermittent production failure -> worker_codex_sol_high.
Ordinary component design -> worker_claude_sonnet_medium.
One spelling correction -> worker_codex_luna_low.
Anthropic exhausted + critical independent final review ->
worker_codex_sol_xhigh.
OpenAI exhausted + difficult repository implementation ->
worker_claude_sonnet_high.
Before responding, verify the provider is available and effort is not below
the floor. Return only the required decision object.
"""
response_schema = '''
{"type":"object","properties":{"decision":{"type":"object","properties":{"target":{"type":"string","enum":["worker_codex_luna_low","worker_codex_luna_medium","worker_codex_luna_high","worker_codex_luna_xhigh","worker_codex_terra_low","worker_codex_terra_medium","worker_codex_terra_high","worker_codex_terra_xhigh","worker_codex_sol_low","worker_codex_sol_medium","worker_codex_sol_high","worker_codex_sol_xhigh","worker_claude_haiku_low","worker_claude_haiku_medium","worker_claude_haiku_high","worker_claude_haiku_xhigh","worker_claude_fable_low","worker_claude_fable_medium","worker_claude_fable_high","worker_claude_fable_xhigh","worker_claude_sonnet_low","worker_claude_sonnet_medium","worker_claude_sonnet_high","worker_claude_sonnet_xhigh","worker_claude_opus_low","worker_claude_opus_medium","worker_claude_opus_high","worker_claude_opus_xhigh"]}},"required":["target"],"additionalProperties":false}},"required":["decision"],"additionalProperties":false}
'''
[routes.worker_auto_maximum.policy]
type = "target_selector"
selector = "/decision/target"
[routes.worker_manual_codex_low]
id = "atlas/worker/manual/codex/low"
type = "random"
targets = ["worker_codex_luna_low"]
[routes.worker_manual_codex_medium]
id = "atlas/worker/manual/codex/medium"
type = "random"
targets = ["worker_codex_terra_medium"]
[routes.worker_manual_codex_high]
id = "atlas/worker/manual/codex/high"
type = "random"
targets = ["worker_codex_sol_high"]
[routes.worker_manual_codex_xhigh]
id = "atlas/worker/manual/codex/xhigh"
type = "random"
targets = ["worker_codex_sol_xhigh"]
[routes.worker_manual_claude_low]
id = "atlas/worker/manual/claude/low"
type = "random"
targets = ["worker_claude_haiku_low"]
[routes.worker_manual_claude_medium]
id = "atlas/worker/manual/claude/medium"
type = "random"
targets = ["worker_claude_sonnet_medium"]
[routes.worker_manual_claude_high]
id = "atlas/worker/manual/claude/high"
type = "random"
targets = ["worker_claude_sonnet_high"]
[routes.worker_manual_claude_xhigh]
id = "atlas/worker/manual/claude/xhigh"
type = "random"
targets = ["worker_claude_opus_xhigh"]
# A zero-weight target is not selected initially. Switchyard still walks
# this ordered list after 403/408/429/5xx, timeout, or transport failure.
[routes.manual_codex_luna]
id = "atlas/manual/codex/luna"
type = "random"
targets = ["codex_luna_low", "claude_haiku_low", "codex_terra_medium", "claude_sonnet_medium"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_codex_terra]
id = "atlas/manual/codex/terra"
type = "random"
targets = ["codex_terra_medium", "claude_sonnet_medium", "codex_sol_high", "claude_sonnet_high"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_codex_sol]
id = "atlas/manual/codex/sol"
type = "random"
targets = ["codex_sol_high", "claude_opus_high", "claude_sonnet_high", "codex_terra_high"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_claude_haiku]
id = "atlas/manual/claude/haiku"
type = "random"
targets = ["claude_haiku_low", "codex_luna_low", "claude_sonnet_medium", "codex_terra_medium"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_claude_sonnet]
id = "atlas/manual/claude/sonnet"
type = "random"
targets = ["claude_sonnet_high", "codex_sol_high", "claude_opus_high", "codex_terra_high"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_claude_opus]
id = "atlas/manual/claude/opus"
type = "random"
targets = ["claude_opus_high", "codex_sol_high", "claude_sonnet_high", "codex_terra_high"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_claude_fable]
id = "atlas/manual/claude/fable"
type = "random"
targets = ["claude_fable_medium", "codex_terra_medium", "claude_sonnet_medium", "codex_luna_medium"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_codex_luna_low]
id = "atlas/manual/codex/luna/low"
type = "random"
targets = ["codex_luna_low", "claude_haiku_low", "codex_terra_low", "claude_fable_low"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_codex_luna_medium]
id = "atlas/manual/codex/luna/medium"
type = "random"
targets = ["codex_luna_medium", "claude_haiku_medium", "codex_terra_medium", "claude_fable_medium"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_codex_luna_high]
id = "atlas/manual/codex/luna/high"
type = "random"
targets = ["codex_luna_high", "claude_haiku_high", "codex_terra_high", "claude_fable_high"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_codex_luna_xhigh]
id = "atlas/manual/codex/luna/xhigh"
type = "random"
targets = ["codex_luna_xhigh", "claude_haiku_xhigh", "codex_terra_xhigh", "claude_fable_xhigh"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_codex_terra_low]
id = "atlas/manual/codex/terra/low"
type = "random"
targets = ["codex_terra_low", "claude_fable_low", "claude_sonnet_low", "codex_sol_low"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_codex_terra_medium]
id = "atlas/manual/codex/terra/medium"
type = "random"
targets = ["codex_terra_medium", "claude_fable_medium", "claude_sonnet_medium", "codex_sol_medium"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_codex_terra_high]
id = "atlas/manual/codex/terra/high"
type = "random"
targets = ["codex_terra_high", "claude_fable_high", "claude_sonnet_high", "codex_sol_high"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_codex_terra_xhigh]
id = "atlas/manual/codex/terra/xhigh"
type = "random"
targets = ["codex_terra_xhigh", "claude_fable_xhigh", "claude_sonnet_xhigh", "codex_sol_xhigh"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_codex_sol_low]
id = "atlas/manual/codex/sol/low"
type = "random"
targets = ["codex_sol_low", "claude_sonnet_low", "claude_opus_low", "codex_terra_low"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_codex_sol_medium]
id = "atlas/manual/codex/sol/medium"
type = "random"
targets = ["codex_sol_medium", "claude_sonnet_medium", "claude_opus_medium", "codex_terra_medium"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_codex_sol_high]
id = "atlas/manual/codex/sol/high"
type = "random"
targets = ["codex_sol_high", "claude_sonnet_high", "claude_opus_high", "codex_terra_high"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_codex_sol_xhigh]
id = "atlas/manual/codex/sol/xhigh"
type = "random"
targets = ["codex_sol_xhigh", "claude_sonnet_xhigh", "claude_opus_xhigh", "codex_terra_xhigh"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_claude_haiku_low]
id = "atlas/manual/claude/haiku/low"
type = "random"
targets = ["claude_haiku_low", "codex_luna_low", "claude_fable_low", "codex_terra_low"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_claude_haiku_medium]
id = "atlas/manual/claude/haiku/medium"
type = "random"
targets = ["claude_haiku_medium", "codex_luna_medium", "claude_fable_medium", "codex_terra_medium"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_claude_haiku_high]
id = "atlas/manual/claude/haiku/high"
type = "random"
targets = ["claude_haiku_high", "codex_luna_high", "claude_fable_high", "codex_terra_high"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_claude_haiku_xhigh]
id = "atlas/manual/claude/haiku/xhigh"
type = "random"
targets = ["claude_haiku_xhigh", "codex_luna_xhigh", "claude_fable_xhigh", "codex_terra_xhigh"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_claude_fable_low]
id = "atlas/manual/claude/fable/low"
type = "random"
targets = ["claude_fable_low", "codex_terra_low", "claude_sonnet_low", "codex_luna_low"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_claude_fable_medium]
id = "atlas/manual/claude/fable/medium"
type = "random"
targets = ["claude_fable_medium", "codex_terra_medium", "claude_sonnet_medium", "codex_luna_medium"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_claude_fable_high]
id = "atlas/manual/claude/fable/high"
type = "random"
targets = ["claude_fable_high", "codex_terra_high", "claude_sonnet_high", "codex_luna_high"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_claude_fable_xhigh]
id = "atlas/manual/claude/fable/xhigh"
type = "random"
targets = ["claude_fable_xhigh", "codex_terra_xhigh", "claude_sonnet_xhigh", "codex_luna_xhigh"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_claude_sonnet_low]
id = "atlas/manual/claude/sonnet/low"
type = "random"
targets = ["claude_sonnet_low", "codex_sol_low", "codex_terra_low", "claude_fable_low"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_claude_sonnet_medium]
id = "atlas/manual/claude/sonnet/medium"
type = "random"
targets = ["claude_sonnet_medium", "codex_sol_medium", "codex_terra_medium", "claude_fable_medium"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_claude_sonnet_high]
id = "atlas/manual/claude/sonnet/high"
type = "random"
targets = ["claude_sonnet_high", "codex_sol_high", "codex_terra_high", "claude_fable_high"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_claude_sonnet_xhigh]
id = "atlas/manual/claude/sonnet/xhigh"
type = "random"
targets = ["claude_sonnet_xhigh", "codex_sol_xhigh", "codex_terra_xhigh", "claude_fable_xhigh"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_claude_opus_low]
id = "atlas/manual/claude/opus/low"
type = "random"
targets = ["claude_opus_low", "codex_sol_low", "claude_sonnet_low", "codex_terra_low"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_claude_opus_medium]
id = "atlas/manual/claude/opus/medium"
type = "random"
targets = ["claude_opus_medium", "codex_sol_medium", "claude_sonnet_medium", "codex_terra_medium"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_claude_opus_high]
id = "atlas/manual/claude/opus/high"
type = "random"
targets = ["claude_opus_high", "codex_sol_high", "claude_sonnet_high", "codex_terra_high"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_claude_opus_xhigh]
id = "atlas/manual/claude/opus/xhigh"
type = "random"
targets = ["claude_opus_xhigh", "codex_sol_xhigh", "claude_sonnet_xhigh", "codex_terra_xhigh"]
weights = [1, 0, 0, 0]
context_window = 272000
tool_calling = true
reasoning = true
[routes.manual_local_qwen]
id = "atlas/manual/local/qwen-14b"
type = "random"
targets = ["local_qwen_medium", "codex_terra_medium", "claude_sonnet_medium", "codex_luna_low", "claude_haiku_low"]
weights = [1, 0, 0, 0, 0]
context_window = 131072
tool_calling = true
reasoning = false