smolnalysis / app /model_roles.py
Meteord's picture
Sync from GitHub via hub-sync
8318f13 verified
Raw
History Blame Contribute Delete
1.56 kB
from __future__ import annotations
import os
from dataclasses import dataclass
from typing import Any
ROLE_ALIASES = {
"ckan_tool": "ckan_retrieval",
"ckan": "ckan_retrieval",
"retrieval": "ckan_retrieval",
"openui": "openui_translator",
"analysis": "data_analysis",
"general": "general_agent",
}
@dataclass
class ModelResponse:
content: str
trace: dict[str, Any]
def normalize_role(role: str) -> str:
clean = role.strip().casefold()
return ROLE_ALIASES.get(clean, clean)
def call_role_model(role: str, messages: list[dict[str, str]], response_contract: str = "") -> ModelResponse:
normalized_role = normalize_role(role)
routed_messages = messages
if response_contract:
routed_messages = [{"role": "system", "content": response_contract}, *messages]
backend = os.getenv("SMOLNALYSIS_MINICPM_BACKEND", "transformers").strip().casefold()
if backend in {"llama.cpp", "llamacpp", "llama_cpp", "gguf"}:
try:
from .backend.minicpm_llama_cpp import generate_chat_response_with_trace
except ImportError:
from backend.minicpm_llama_cpp import generate_chat_response_with_trace
else:
try:
from .backend.minicpm_transformers import generate_chat_response_with_trace
except ImportError:
from backend.minicpm_transformers import generate_chat_response_with_trace
content, trace = generate_chat_response_with_trace(routed_messages, adapter=normalized_role)
return ModelResponse(str(content).strip(), trace)