Fix remaining arch references found in second pass

- config/docker-compose.dev.yaml: ARCH_CONFIG_FILE → PLANO_CONFIG_FILE,
  arch_config.yaml → plano_config.yaml, archgw_logs → plano_logs
- config/test_passthrough.yaml: container mount path
- tests/e2e/docker-compose.yaml: source file path (was still arch_config.yaml)
- cli/planoai/core.py: comment and log message
- crates/brightstaff/src/tracing/constants.rs: doc comment
- tests/{e2e,archgw}/common.py: get_arch_messages → get_plano_messages,
  arch_state/arch_messages variables renamed
- tests/{e2e,archgw}/test_prompt_gateway.py: updated imports and usages
- demos/shared/test_runner/{common,test_demos}.py: same renames
- tests/e2e/test_model_alias_routing.py: docstring
- .dockerignore: archgw_modelserver → plano_modelserver
- demos/use_cases/claude_code_router/pretty_model_resolution.sh: container name

Note: x-arch-* HTTP header values and Rust constant names intentionally
preserved for backwards compatibility with existing deployments.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Adil Hafeez 2026-02-11 20:39:53 -08:00
parent db7b9ca2af
commit 1b00bdc49d
No known key found for this signature in database
GPG key ID: 9B18EF7691369645
14 changed files with 65 additions and 65 deletions

View file

@ -33,8 +33,8 @@ cli/__pycache__/
cli/planoai/__pycache__/
# Python model server
archgw_modelserver/
arch_tools/
plano_modelserver/
plano_tools/
# Misc
*.md

View file

@ -167,7 +167,7 @@ def start_cli_agent(plano_config_file=None, settings_json="{}"):
env = os.environ.copy()
env.update(
{
"ANTHROPIC_AUTH_TOKEN": "test", # Use test token for arch
"ANTHROPIC_AUTH_TOKEN": "test", # Use test token for plano
"ANTHROPIC_API_KEY": "",
"ANTHROPIC_BASE_URL": f"http://{host}:{port}",
"NO_PROXY": host,
@ -220,7 +220,7 @@ def start_cli_agent(plano_config_file=None, settings_json="{}"):
# Use claude from PATH
claude_path = "claude"
log.info(f"Connecting Claude Code Agent to Arch at {host}:{port}")
log.info(f"Connecting Claude Code Agent to Plano at {host}:{port}")
try:
subprocess.run([claude_path] + claude_args, env=env, check=True)

View file

@ -8,14 +8,14 @@ services:
- "12000:12000"
- "19901:9901"
volumes:
- ${ARCH_CONFIG_FILE:-../demos/samples_python/weather_forecast/arch_config.yaml}:/app/arch_config.yaml
- ${PLANO_CONFIG_FILE:-../demos/samples_python/weather_forecast/plano_config.yaml}:/app/plano_config.yaml
- /etc/ssl/cert.pem:/etc/ssl/cert.pem
- ./envoy.template.yaml:/app/envoy.template.yaml
- ./arch_config_schema.yaml:/app/arch_config_schema.yaml
- ./plano_config_schema.yaml:/app/plano_config_schema.yaml
- ../cli/planoai/config_generator.py:/app/planoai/config_generator.py
- ../crates/target/wasm32-wasip1/release/llm_gateway.wasm:/etc/envoy/proxy-wasm-plugins/llm_gateway.wasm
- ../crates/target/wasm32-wasip1/release/prompt_gateway.wasm:/etc/envoy/proxy-wasm-plugins/prompt_gateway.wasm
- ~/archgw_logs:/var/log/
- ~/plano_logs:/var/log/
extra_hosts:
- "host.docker.internal:host-gateway"
environment:

View file

@ -7,7 +7,7 @@
#
# To test:
# docker build -t plano-passthrough-test .
# docker run -d -p 10000:10000 -v $(pwd)/config/test_passthrough.yaml:/app/arch_config.yaml plano-passthrough-test
# docker run -d -p 10000:10000 -v $(pwd)/config/test_passthrough.yaml:/app/plano_config.yaml plano-passthrough-test
#
# curl http://localhost:10000/v1/chat/completions \
# -H "Authorization: Bearer sk-your-virtual-key" \

View file

@ -182,7 +182,7 @@ pub mod signals {
// Operation Names
// =============================================================================
/// Canonical operation name components for Arch Gateway
/// Canonical operation name components for Plano Gateway
pub mod operation_component {
/// Inbound request handling
pub const INBOUND: &str = "plano(inbound)";

View file

@ -19,17 +19,17 @@ def get_data_chunks(stream, n=1):
return chunks
def get_arch_messages(response_json):
arch_messages = []
def get_plano_messages(response_json):
plano_messages = []
if response_json and "metadata" in response_json:
# load arch_state from metadata
arch_state_str = response_json.get("metadata", {}).get(ARCH_STATE_HEADER, "{}")
# parse arch_state into json object
arch_state = json.loads(arch_state_str)
# load messages from arch_state
arch_messages_str = arch_state.get("messages", "[]")
# load plano_state from metadata
plano_state_str = response_json.get("metadata", {}).get(ARCH_STATE_HEADER, "{}")
# parse plano_state into json object
plano_state = json.loads(plano_state_str)
# load messages from plano_state
plano_messages_str = plano_state.get("messages", "[]")
# parse messages into json object
arch_messages = json.loads(arch_messages_str)
# append messages from Plano gateway to history
return arch_messages
plano_messages = json.loads(plano_messages_str)
# append messages from plano gateway to history
return plano_messages
return []

View file

@ -1,6 +1,6 @@
import json
import os
from common import get_arch_messages
from common import get_plano_messages
import pytest
import requests
from deepdiff import DeepDiff
@ -46,10 +46,10 @@ def test_demos(test_data):
assert choices[0]["message"]["role"] == "assistant"
assert expected_output_contains.lower() in choices[0]["message"]["content"].lower()
# now verify arch_messages (tool call and api response) that are sent as response metadata
arch_messages = get_arch_messages(response_json)
assert len(arch_messages) == 2
tool_calls_message = arch_messages[0]
# now verify plano_messages (tool call and api response) that are sent as response metadata
plano_messages = get_plano_messages(response_json)
assert len(plano_messages) == 2
tool_calls_message = plano_messages[0]
tool_calls = tool_calls_message.get("tool_calls", [])
assert len(tool_calls) > 0

View file

@ -7,7 +7,7 @@
# - colors resolved_model magenta
# - removes provider and streaming
docker logs -f archgw 2>&1 \
docker logs -f plano 2>&1 \
| awk '
/MODEL_RESOLUTION:/ && $0 !~ /Arch-Router/ {
# extract timestamp between first [ and ]

View file

@ -99,17 +99,17 @@ def get_data_chunks(stream, n=1):
return chunks
def get_arch_messages(response_json):
arch_messages = []
def get_plano_messages(response_json):
plano_messages = []
if response_json and "metadata" in response_json:
# load arch_state from metadata
arch_state_str = response_json.get("metadata", {}).get(ARCH_STATE_HEADER, "{}")
# parse arch_state into json object
arch_state = json.loads(arch_state_str)
# load messages from arch_state
arch_messages_str = arch_state.get("messages", "[]")
# load plano_state from metadata
plano_state_str = response_json.get("metadata", {}).get(ARCH_STATE_HEADER, "{}")
# parse plano_state into json object
plano_state = json.loads(plano_state_str)
# load messages from plano_state
plano_messages_str = plano_state.get("messages", "[]")
# parse messages into json object
arch_messages = json.loads(arch_messages_str)
# append messages from arch gateway to history
return arch_messages
plano_messages = json.loads(plano_messages_str)
# append messages from plano gateway to history
return plano_messages
return []

View file

@ -18,7 +18,7 @@ def httpserver_listen_address():
from common import (
PROMPT_GATEWAY_ENDPOINT,
TEST_CASE_FIXTURES,
get_arch_messages,
get_plano_messages,
)
@ -83,10 +83,10 @@ def test_prompt_gateway(httpserver: HTTPServer):
assert assistant_message["role"] == "assistant"
assert "content" in assistant_message
assert "weather" in assistant_message["content"]
# now verify arch_messages (tool call and api response) that are sent as response metadata
arch_messages = get_arch_messages(response_json)
assert len(arch_messages) == 2
tool_calls_message = arch_messages[0]
# now verify plano_messages (tool call and api response) that are sent as response metadata
plano_messages = get_plano_messages(response_json)
assert len(plano_messages) == 2
tool_calls_message = plano_messages[0]
tool_calls = tool_calls_message.get("tool_calls", [])
assert len(tool_calls) > 0
tool_call = normalize_tool_call_arguments(tool_calls[0]["function"])

View file

@ -98,17 +98,17 @@ def get_data_chunks(stream, n=1):
return chunks
def get_arch_messages(response_json):
arch_messages = []
def get_plano_messages(response_json):
plano_messages = []
if response_json and "metadata" in response_json:
# load arch_state from metadata
arch_state_str = response_json.get("metadata", {}).get(ARCH_STATE_HEADER, "{}")
# parse arch_state into json object
arch_state = json.loads(arch_state_str)
# load messages from arch_state
arch_messages_str = arch_state.get("messages", "[]")
# load plano_state from metadata
plano_state_str = response_json.get("metadata", {}).get(ARCH_STATE_HEADER, "{}")
# parse plano_state into json object
plano_state = json.loads(plano_state_str)
# load messages from plano_state
plano_messages_str = plano_state.get("messages", "[]")
# parse messages into json object
arch_messages = json.loads(arch_messages_str)
# append messages from arch gateway to history
return arch_messages
plano_messages = json.loads(plano_messages_str)
# append messages from plano gateway to history
return plano_messages
return []

View file

@ -8,7 +8,7 @@ services:
- "12000:12000"
- "19901:9901"
volumes:
- ../../demos/samples_python/weather_forecast/arch_config.yaml:/app/plano_config.yaml
- ../../demos/samples_python/weather_forecast/plano_config.yaml:/app/plano_config.yaml
- /etc/ssl/cert.pem:/etc/ssl/cert.pem
extra_hosts:
- "host.docker.internal:host-gateway"

View file

@ -260,7 +260,7 @@ def test_anthropic_client_with_alias_streaming():
def test_400_error_handling_with_alias():
"""Test that 400 errors from upstream are properly returned by archgw"""
"""Test that 400 errors from upstream are properly returned by plano"""
logger.info(
"Testing 400 error handling with arch.summarize.v1 and invalid parameter"
)

View file

@ -10,7 +10,7 @@ from common import (
PROMPT_GATEWAY_ENDPOINT,
LLM_GATEWAY_ENDPOINT,
PREFILL_LIST,
get_arch_messages,
get_plano_messages,
get_data_chunks,
)
@ -117,11 +117,11 @@ def test_prompt_gateway(stream):
assert len(choices) > 0
assert "role" in choices[0]["message"]
assert choices[0]["message"]["role"] == "assistant"
# now verify arch_messages (tool call and api response) that are sent as response metadata
arch_messages = get_arch_messages(response_json)
print("arch_messages: ", json.dumps(arch_messages))
assert len(arch_messages) == 2
tool_calls_message = arch_messages[0]
# now verify plano_messages (tool call and api response) that are sent as response metadata
plano_messages = get_plano_messages(response_json)
print("plano_messages: ", json.dumps(plano_messages))
assert len(plano_messages) == 2
tool_calls_message = plano_messages[0]
print("tool_calls_message: ", tool_calls_message)
tool_calls = tool_calls_message.get("content", [])
cleaned_tool_call_str = cleanup_tool_call(tool_calls)
@ -295,10 +295,10 @@ def test_prompt_gateway_param_tool_call(stream):
assert len(choices) > 0
assert "role" in choices[0]["message"]
assert choices[0]["message"]["role"] == "assistant"
# now verify arch_messages (tool call and api response) that are sent as response metadata
arch_messages = get_arch_messages(response_json)
assert len(arch_messages) == 2
tool_calls_message = arch_messages[0]
# now verify plano_messages (tool call and api response) that are sent as response metadata
plano_messages = get_plano_messages(response_json)
assert len(plano_messages) == 2
tool_calls_message = plano_messages[0]
tool_calls = tool_calls_message.get("tool_calls", [])
assert len(tool_calls) > 0
tool_call = normalize_tool_call_arguments(tool_calls[0]["function"])