rename arch provider to plano, use llm_routing_model and agent_orchestration_model

This commit is contained in:
Adil Hafeez 2026-03-13 13:27:58 -07:00
parent 680dee60a0
commit 6f8bf96d38
No known key found for this signature in database
GPG key ID: 9B18EF7691369645
16 changed files with 37 additions and 50 deletions

View file

@ -13,7 +13,6 @@ SUPPORTED_PROVIDERS_WITH_BASE_URL = [
"ollama", "ollama",
"qwen", "qwen",
"amazon_bedrock", "amazon_bedrock",
"arch",
"plano", "plano",
] ]
@ -373,7 +372,7 @@ def validate_and_render_schema():
model_name_set = {mp.get("model") for mp in updated_model_providers} model_name_set = {mp.get("model") for mp in updated_model_providers}
# Auto-add arch-router provider if routing preferences exist and no provider matches the router model # Auto-add arch-router provider if routing preferences exist and no provider matches the router model
router_model = overrides_config.get("router_model", "Arch-Router") router_model = overrides_config.get("llm_routing_model", "Arch-Router")
# Strip provider prefix for comparison since config processing strips prefixes from model names # Strip provider prefix for comparison since config processing strips prefixes from model names
router_model_id = ( router_model_id = (
router_model.split("/", 1)[1] if "/" in router_model else router_model router_model.split("/", 1)[1] if "/" in router_model else router_model
@ -382,7 +381,7 @@ def validate_and_render_schema():
updated_model_providers.append( updated_model_providers.append(
{ {
"name": "arch-router", "name": "arch-router",
"provider_interface": "arch", "provider_interface": "plano",
"model": router_model_id, "model": router_model_id,
"internal": True, "internal": True,
} }
@ -393,7 +392,7 @@ def validate_and_render_schema():
updated_model_providers.append( updated_model_providers.append(
{ {
"name": "arch-function", "name": "arch-function",
"provider_interface": "arch", "provider_interface": "plano",
"model": "Arch-Function", "model": "Arch-Function",
"internal": True, "internal": True,
} }
@ -401,7 +400,7 @@ def validate_and_render_schema():
# Auto-add plano-orchestrator provider if no provider matches the orchestrator model # Auto-add plano-orchestrator provider if no provider matches the orchestrator model
orchestrator_model = overrides_config.get( orchestrator_model = overrides_config.get(
"orchestrator_model", "Plano-Orchestrator" "agent_orchestration_model", "Plano-Orchestrator"
) )
orchestrator_model_id = ( orchestrator_model_id = (
orchestrator_model.split("/", 1)[1] orchestrator_model.split("/", 1)[1]
@ -411,8 +410,8 @@ def validate_and_render_schema():
if orchestrator_model_id not in model_name_set: if orchestrator_model_id not in model_name_set:
updated_model_providers.append( updated_model_providers.append(
{ {
"name": "plano-orchestrator", "name": "plano/orchestrator",
"provider_interface": "arch", "provider_interface": "plano",
"model": orchestrator_model_id, "model": orchestrator_model_id,
"internal": True, "internal": True,
} }

View file

@ -594,13 +594,13 @@ static_resources:
clusters: clusters:
- name: arch - name: plano
connect_timeout: {{ upstream_connect_timeout | default('5s') }} connect_timeout: {{ upstream_connect_timeout | default('5s') }}
type: LOGICAL_DNS type: LOGICAL_DNS
dns_lookup_family: V4_ONLY dns_lookup_family: V4_ONLY
lb_policy: ROUND_ROBIN lb_policy: ROUND_ROBIN
load_assignment: load_assignment:
cluster_name: arch cluster_name: plano
endpoints: endpoints:
- lb_endpoints: - lb_endpoints:
- endpoint: - endpoint:

View file

@ -173,7 +173,6 @@ properties:
provider_interface: provider_interface:
type: string type: string
enum: enum:
- arch
- plano - plano
- claude - claude
- deepseek - deepseek
@ -221,7 +220,6 @@ properties:
provider_interface: provider_interface:
type: string type: string
enum: enum:
- arch
- plano - plano
- claude - claude
- deepseek - deepseek
@ -273,10 +271,10 @@ properties:
upstream_tls_ca_path: upstream_tls_ca_path:
type: string type: string
description: "Path to the trusted CA bundle for upstream TLS verification. Default is '/etc/ssl/certs/ca-certificates.crt'." description: "Path to the trusted CA bundle for upstream TLS verification. Default is '/etc/ssl/certs/ca-certificates.crt'."
router_model: llm_routing_model:
type: string type: string
description: "Model name for the LLM router (e.g., 'Arch-Router'). Must match a model in model_providers." description: "Model name for the LLM router (e.g., 'Arch-Router'). Must match a model in model_providers."
orchestrator_model: agent_orchestration_model:
type: string type: string
description: "Model name for the agent orchestrator (e.g., 'Plano-Orchestrator'). Must match a model in model_providers." description: "Model name for the agent orchestrator (e.g., 'Plano-Orchestrator'). Must match a model in model_providers."
system_prompt: system_prompt:

View file

@ -94,7 +94,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
// Strip provider prefix (e.g. "arch/") to get the model ID used in upstream requests // Strip provider prefix (e.g. "arch/") to get the model ID used in upstream requests
let routing_model_name: String = overrides let routing_model_name: String = overrides
.router_model .llm_routing_model
.as_deref() .as_deref()
.map(|m| m.split_once('/').map(|(_, id)| id).unwrap_or(m)) .map(|m| m.split_once('/').map(|(_, id)| id).unwrap_or(m))
.unwrap_or(DEFAULT_ROUTING_MODEL_NAME) .unwrap_or(DEFAULT_ROUTING_MODEL_NAME)
@ -116,7 +116,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
// Strip provider prefix (e.g. "arch/") to get the model ID used in upstream requests // Strip provider prefix (e.g. "arch/") to get the model ID used in upstream requests
let orchestrator_model_name: String = overrides let orchestrator_model_name: String = overrides
.orchestrator_model .agent_orchestration_model
.as_deref() .as_deref()
.map(|m| m.split_once('/').map(|(_, id)| id).unwrap_or(m)) .map(|m| m.split_once('/').map(|(_, id)| id).unwrap_or(m))
.unwrap_or(DEFAULT_ORCHESTRATOR_MODEL_NAME) .unwrap_or(DEFAULT_ORCHESTRATOR_MODEL_NAME)

View file

@ -81,12 +81,12 @@ impl OrchestratorService {
debug!( debug!(
model = %self.orchestrator_model.get_model_name(), model = %self.orchestrator_model.get_model_name(),
endpoint = %self.orchestrator_url, endpoint = %self.orchestrator_url,
"sending request to arch-orchestrator" "sending request to plano-orchestrator"
); );
debug!( debug!(
body = %serde_json::to_string(&orchestrator_request).unwrap(), body = %serde_json::to_string(&orchestrator_request).unwrap(),
"arch orchestrator request" "plano orchestrator request"
); );
let mut orchestration_request_headers = header::HeaderMap::new(); let mut orchestration_request_headers = header::HeaderMap::new();

View file

@ -77,8 +77,8 @@ pub struct Overrides {
pub prompt_target_intent_matching_threshold: Option<f64>, pub prompt_target_intent_matching_threshold: Option<f64>,
pub optimize_context_window: Option<bool>, pub optimize_context_window: Option<bool>,
pub use_agent_orchestrator: Option<bool>, pub use_agent_orchestrator: Option<bool>,
pub router_model: Option<String>, pub llm_routing_model: Option<String>,
pub orchestrator_model: Option<String>, pub agent_orchestration_model: Option<String>,
} }
#[derive(Debug, Clone, Serialize, Deserialize, Default)] #[derive(Debug, Clone, Serialize, Deserialize, Default)]
@ -202,8 +202,6 @@ pub struct EmbeddingProviver {
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)] #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, Hash)]
pub enum LlmProviderType { pub enum LlmProviderType {
#[serde(rename = "arch")]
Arch,
#[serde(rename = "anthropic")] #[serde(rename = "anthropic")]
Anthropic, Anthropic,
#[serde(rename = "deepseek")] #[serde(rename = "deepseek")]
@ -239,7 +237,6 @@ pub enum LlmProviderType {
impl Display for LlmProviderType { impl Display for LlmProviderType {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self { match self {
LlmProviderType::Arch => write!(f, "arch"),
LlmProviderType::Anthropic => write!(f, "anthropic"), LlmProviderType::Anthropic => write!(f, "anthropic"),
LlmProviderType::Deepseek => write!(f, "deepseek"), LlmProviderType::Deepseek => write!(f, "deepseek"),
LlmProviderType::Groq => write!(f, "groq"), LlmProviderType::Groq => write!(f, "groq"),
@ -263,15 +260,7 @@ impl LlmProviderType {
/// Get the ProviderId for this LlmProviderType /// Get the ProviderId for this LlmProviderType
/// Used with the new function-based hermesllm API /// Used with the new function-based hermesllm API
pub fn to_provider_id(&self) -> hermesllm::ProviderId { pub fn to_provider_id(&self) -> hermesllm::ProviderId {
// Plano provider uses the same interface as Arch hermesllm::ProviderId::try_from(self.to_string().as_str())
let provider_str = match self {
LlmProviderType::Plano => "arch",
other => {
return hermesllm::ProviderId::try_from(other.to_string().as_str())
.expect("LlmProviderType should always map to a valid ProviderId")
}
};
hermesllm::ProviderId::try_from(provider_str)
.expect("LlmProviderType should always map to a valid ProviderId") .expect("LlmProviderType should always map to a valid ProviderId")
} }
} }
@ -597,14 +586,14 @@ mod test {
}, },
LlmProvider { LlmProvider {
name: "arch-router".to_string(), name: "arch-router".to_string(),
provider_interface: LlmProviderType::Arch, provider_interface: LlmProviderType::Plano,
model: Some("Arch-Router".to_string()), model: Some("Arch-Router".to_string()),
internal: Some(true), internal: Some(true),
..Default::default() ..Default::default()
}, },
LlmProvider { LlmProvider {
name: "plano-orchestrator".to_string(), name: "plano-orchestrator".to_string(),
provider_interface: LlmProviderType::Arch, provider_interface: LlmProviderType::Plano,
model: Some("Plano-Orchestrator".to_string()), model: Some("Plano-Orchestrator".to_string()),
internal: Some(true), internal: Some(true),
..Default::default() ..Default::default()

View file

@ -33,4 +33,4 @@ pub const OTEL_COLLECTOR_HTTP: &str = "opentelemetry_collector_http";
pub const LLM_ROUTE_HEADER: &str = "x-arch-llm-route"; pub const LLM_ROUTE_HEADER: &str = "x-arch-llm-route";
pub const ENVOY_RETRY_HEADER: &str = "x-envoy-max-retries"; pub const ENVOY_RETRY_HEADER: &str = "x-envoy-max-retries";
pub const BRIGHT_STAFF_SERVICE_NAME: &str = "brightstaff"; pub const BRIGHT_STAFF_SERVICE_NAME: &str = "brightstaff";
pub const ARCH_FC_CLUSTER: &str = "arch"; pub const PLANO_FC_CLUSTER: &str = "plano";

View file

@ -35,7 +35,7 @@ mod tests {
ProviderId::Mistral ProviderId::Mistral
); );
assert_eq!(ProviderId::try_from("groq").unwrap(), ProviderId::Groq); assert_eq!(ProviderId::try_from("groq").unwrap(), ProviderId::Groq);
assert_eq!(ProviderId::try_from("arch").unwrap(), ProviderId::Arch); assert_eq!(ProviderId::try_from("plano").unwrap(), ProviderId::Plano);
// Test aliases // Test aliases
assert_eq!(ProviderId::try_from("google").unwrap(), ProviderId::Gemini); assert_eq!(ProviderId::try_from("google").unwrap(), ProviderId::Gemini);

View file

@ -34,7 +34,7 @@ pub enum ProviderId {
Gemini, Gemini,
Anthropic, Anthropic,
GitHub, GitHub,
Arch, Plano,
AzureOpenAI, AzureOpenAI,
XAI, XAI,
TogetherAI, TogetherAI,
@ -58,7 +58,7 @@ impl TryFrom<&str> for ProviderId {
"google" => Ok(ProviderId::Gemini), // alias "google" => Ok(ProviderId::Gemini), // alias
"anthropic" => Ok(ProviderId::Anthropic), "anthropic" => Ok(ProviderId::Anthropic),
"github" => Ok(ProviderId::GitHub), "github" => Ok(ProviderId::GitHub),
"arch" => Ok(ProviderId::Arch), "plano" => Ok(ProviderId::Plano),
"azure_openai" => Ok(ProviderId::AzureOpenAI), "azure_openai" => Ok(ProviderId::AzureOpenAI),
"xai" => Ok(ProviderId::XAI), "xai" => Ok(ProviderId::XAI),
"together_ai" => Ok(ProviderId::TogetherAI), "together_ai" => Ok(ProviderId::TogetherAI),
@ -135,7 +135,7 @@ impl ProviderId {
| ProviderId::Groq | ProviderId::Groq
| ProviderId::Mistral | ProviderId::Mistral
| ProviderId::Deepseek | ProviderId::Deepseek
| ProviderId::Arch | ProviderId::Plano
| ProviderId::Gemini | ProviderId::Gemini
| ProviderId::GitHub | ProviderId::GitHub
| ProviderId::AzureOpenAI | ProviderId::AzureOpenAI
@ -153,7 +153,7 @@ impl ProviderId {
| ProviderId::Groq | ProviderId::Groq
| ProviderId::Mistral | ProviderId::Mistral
| ProviderId::Deepseek | ProviderId::Deepseek
| ProviderId::Arch | ProviderId::Plano
| ProviderId::Gemini | ProviderId::Gemini
| ProviderId::GitHub | ProviderId::GitHub
| ProviderId::AzureOpenAI | ProviderId::AzureOpenAI
@ -219,7 +219,7 @@ impl Display for ProviderId {
ProviderId::Gemini => write!(f, "Gemini"), ProviderId::Gemini => write!(f, "Gemini"),
ProviderId::Anthropic => write!(f, "Anthropic"), ProviderId::Anthropic => write!(f, "Anthropic"),
ProviderId::GitHub => write!(f, "GitHub"), ProviderId::GitHub => write!(f, "GitHub"),
ProviderId::Arch => write!(f, "Arch"), ProviderId::Plano => write!(f, "Plano"),
ProviderId::AzureOpenAI => write!(f, "azure_openai"), ProviderId::AzureOpenAI => write!(f, "azure_openai"),
ProviderId::XAI => write!(f, "xai"), ProviderId::XAI => write!(f, "xai"),
ProviderId::TogetherAI => write!(f, "together_ai"), ProviderId::TogetherAI => write!(f, "together_ai"),

View file

@ -873,7 +873,7 @@ impl HttpContext for StreamContext {
// ensure that the provider has an endpoint if the access key is missing else return a bad request // ensure that the provider has an endpoint if the access key is missing else return a bad request
if self.llm_provider.as_ref().unwrap().endpoint.is_none() if self.llm_provider.as_ref().unwrap().endpoint.is_none()
&& self.llm_provider.as_ref().unwrap().provider_interface && self.llm_provider.as_ref().unwrap().provider_interface
!= LlmProviderType::Arch != LlmProviderType::Plano
{ {
self.send_server_error(error, Some(StatusCode::BAD_REQUEST)); self.send_server_error(error, Some(StatusCode::BAD_REQUEST));
} }

View file

@ -1,7 +1,7 @@
version: v0.3.0 version: v0.3.0
overrides: overrides:
orchestrator_model: plano/katanemo/Plano-Orchestrator-4B agent_orchestration_model: plano/katanemo/Plano-Orchestrator-4B
agents: agents:
- id: weather_agent - id: weather_agent

View file

@ -1,7 +1,7 @@
version: v0.1.0 version: v0.1.0
overrides: overrides:
router_model: Arch-Router llm_routing_model: Arch-Router
listeners: listeners:
egress_traffic: egress_traffic:

View file

@ -1,7 +1,7 @@
version: v0.3.0 version: v0.3.0
overrides: overrides:
router_model: plano/hf.co/katanemo/Arch-Router-1.5B.gguf:Q4_K_M llm_routing_model: plano/hf.co/katanemo/Arch-Router-1.5B.gguf:Q4_K_M
listeners: listeners:
- type: model - type: model

View file

@ -254,7 +254,7 @@ Using Ollama (recommended for local development)
.. code-block:: yaml .. code-block:: yaml
overrides: overrides:
router_model: plano/hf.co/katanemo/Arch-Router-1.5B.gguf:Q4_K_M llm_routing_model: plano/hf.co/katanemo/Arch-Router-1.5B.gguf:Q4_K_M
model_providers: model_providers:
- model: plano/hf.co/katanemo/Arch-Router-1.5B.gguf:Q4_K_M - model: plano/hf.co/katanemo/Arch-Router-1.5B.gguf:Q4_K_M
@ -323,7 +323,7 @@ vLLM provides higher throughput and GPU optimizations suitable for production de
.. code-block:: yaml .. code-block:: yaml
overrides: overrides:
router_model: plano/Arch-Router llm_routing_model: plano/Arch-Router
model_providers: model_providers:
- model: plano/Arch-Router - model: plano/Arch-Router

View file

@ -404,10 +404,11 @@ Using vLLM
.. code-block:: yaml .. code-block:: yaml
overrides: overrides:
orchestrator_model: plano/katanemo/Plano-Orchestrator-4B agent_orchestration_model: plano/katanemo/Plano-Orchestrator-4B
model_providers: model_providers:
- model: plano/katanemo/Plano-Orchestrator-4B - model: katanemo/Plano-Orchestrator-4B
provider_interface: plano
base_url: http://<your-server-ip>:8000 base_url: http://<your-server-ip>:8000
5. **Verify the server is running** 5. **Verify the server is running**

View file

@ -107,11 +107,11 @@ model_providers:
- internal: true - internal: true
model: Arch-Function model: Arch-Function
name: arch-function name: arch-function
provider_interface: arch provider_interface: plano
- internal: true - internal: true
model: Plano-Orchestrator model: Plano-Orchestrator
name: plano-orchestrator name: plano-orchestrator
provider_interface: arch provider_interface: plano
prompt_targets: prompt_targets:
- description: Get current weather at a location. - description: Get current weather at a location.
endpoint: endpoint: