60 lines
1.7 KiB
Python
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)
|