Adicionar app/services/model_router.py
This commit is contained in:
@@ -0,0 +1,39 @@
|
|||||||
|
import json
|
||||||
|
from services.ollama_service import OllamaService
|
||||||
|
from services.external_model_service import ExternalModelService
|
||||||
|
|
||||||
|
class ModelRouter:
|
||||||
|
def __init__(self):
|
||||||
|
self.ollama = OllamaService()
|
||||||
|
self.external = ExternalModelService()
|
||||||
|
|
||||||
|
with open("models.json", "r") as f:
|
||||||
|
self.models = json.load(f)
|
||||||
|
|
||||||
|
def pick_model(self, intent: str, mode: str):
|
||||||
|
# regras simples (pode ser expandido)
|
||||||
|
if intent == "document" and mode == "advogado":
|
||||||
|
return self.models["local"]["llama3.1-70b"]
|
||||||
|
|
||||||
|
if intent == "document" and mode == "corporativo":
|
||||||
|
return self.models["local"]["qwen2.5-7b"]
|
||||||
|
|
||||||
|
if intent == "search":
|
||||||
|
return self.models["external"]["claude-3.5-sonnet"]
|
||||||
|
|
||||||
|
if intent == "monitoring":
|
||||||
|
return self.models["external"]["mistral-large"]
|
||||||
|
|
||||||
|
# fallback
|
||||||
|
return self.models["local"]["llama3.1-8b"]
|
||||||
|
|
||||||
|
def generate(self, intent: str, mode: str, prompt: str):
|
||||||
|
model = self.pick_model(intent, mode)
|
||||||
|
|
||||||
|
if model["provider"] == "ollama":
|
||||||
|
return self.ollama.generate(prompt)
|
||||||
|
|
||||||
|
if model["provider"] in ["openai", "anthropic", "mistral"]:
|
||||||
|
return self.external.generate(model["provider"], model["model"], prompt)
|
||||||
|
|
||||||
|
return "Erro: modelo não encontrado."
|
||||||
Reference in New Issue
Block a user