Artifex/model_router/policy.py
2026-08-16 15:35:55 +07:00

60 lines
1.7 KiB
Python

from __future__ import annotations
import os
DEFAULT_MODEL_POLICY = {
"planning": "sol",
"project_brain": "sol",
"archaeology_interpretation": "sol",
"agent_design": "sol",
"escalation": "sol",
"coding": "qwen",
"review": "qwen",
"reasoning": "qwen",
"venture_ideation": "sol",
"venture_research": "luna",
"venture_portfolio_ic": "terra",
}
ENV_BY_ROLE = {
"planning": "ARTIFEX_PLANNING_MODEL",
"project_brain": "ARTIFEX_PROJECT_BRAIN_MODEL",
"archaeology_interpretation": "ARTIFEX_ARCHAEOLOGY_MODEL",
"agent_design": "ARTIFEX_AGENT_DESIGN_MODEL",
"escalation": "ARTIFEX_ESCALATION_MODEL",
"coding": "ARTIFEX_CODING_MODEL",
"review": "ARTIFEX_REVIEW_MODEL",
"reasoning": "ARTIFEX_REASONING_MODEL",
"venture_ideation": "ARTIFEX_VENTURE_IDEATION_MODEL",
"venture_research": "ARTIFEX_VENTURE_RESEARCH_MODEL",
"venture_portfolio_ic": "ARTIFEX_VENTURE_PORTFOLIO_IC_MODEL",
}
PURPOSE_TO_ROLE = {
"PROJECT_BRAIN": "project_brain",
"PLANNING": "planning",
"ARCHAEOLOGY_INTERPRETATION": "archaeology_interpretation",
"AGENT_DESIGN": "agent_design",
"ESCALATION": "escalation",
"CODING": "coding",
"REVIEW": "review",
"REASONING": "reasoning",
}
def model_for_role(role: str) -> str:
normalized = role.lower()
env_name = ENV_BY_ROLE.get(normalized)
if env_name:
configured = os.environ.get(env_name)
if configured:
return configured.strip().lower()
return DEFAULT_MODEL_POLICY.get(normalized, DEFAULT_MODEL_POLICY["reasoning"])
def model_for_purpose(purpose: str) -> str:
role = PURPOSE_TO_ROLE.get(str(purpose).upper(), "reasoning")
return model_for_role(role)