feat: add config-driven AI model tier routing

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
chihlasm
2026-03-06 23:07:09 -05:00
parent f8867d83f8
commit dab9706f90
2 changed files with 45 additions and 0 deletions

View File

@@ -84,6 +84,27 @@ class Settings(BaseSettings):
AI_MODEL_GEMINI: str = "gemini-2.5-flash"
AI_MODEL_ANTHROPIC: str = "claude-sonnet-4-6"
# Model tier routing — maps action types to model tiers
AI_MODEL_TIERS: dict[str, str] = {
"fast": "claude-haiku-4-5-20251001",
"standard": "claude-sonnet-4-6-20250514",
}
ACTION_MODEL_MAP: dict[str, str] = {
"generate_full": "standard",
"generate_branch": "standard",
"modify_node": "fast",
"add_steps": "standard",
"quick_action": "fast",
"open_chat": "standard",
"variable_inference": "fast",
}
def get_model_for_action(self, action_type: str) -> str:
"""Resolve an action type to a concrete model name via tier routing."""
tier = self.ACTION_MODEL_MAP.get(action_type, "standard")
return self.AI_MODEL_TIERS.get(tier, self.AI_MODEL_TIERS["standard"])
# MCP (Model Context Protocol) integrations
ENABLE_MCP_MICROSOFT_LEARN: bool = True

View File

@@ -0,0 +1,24 @@
"""Tests for AI model tier configuration."""
from app.core.config import settings
def test_ai_model_tiers_exist():
assert "fast" in settings.AI_MODEL_TIERS
assert "standard" in settings.AI_MODEL_TIERS
def test_action_model_map_covers_all_actions():
valid_tiers = set(settings.AI_MODEL_TIERS.keys())
for action, tier in settings.ACTION_MODEL_MAP.items():
assert tier in valid_tiers, f"Action '{action}' maps to unknown tier '{tier}'"
def test_get_model_for_action():
model = settings.get_model_for_action("generate_full")
assert isinstance(model, str)
assert len(model) > 0
def test_get_model_for_action_unknown_falls_back():
model = settings.get_model_for_action("nonexistent_action")
assert model == settings.AI_MODEL_TIERS["standard"]