Spaces:
Runtime error
Runtime error
File size: 3,763 Bytes
53fdb6d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
"""
Router de testes de LLM
Endpoints para testar providers e modelos LLM
"""
from fastapi import APIRouter, HTTPException
from datetime import datetime
import time
from api.models.requests import LLMGenerateRequest
from api.models.responses import LLMTestResponse, MessageResponse
from api.utils.logger import setup_logger
router = APIRouter()
logger = setup_logger(__name__)
@router.post("/generate", response_model=LLMTestResponse)
async def test_llm_generate(request: LLMGenerateRequest):
"""
**Testa geração de texto com LLM.**
Útil para:
- Verificar se API keys estão funcionando
- Testar diferentes modelos
- Medir latência e tokens
"""
start_time = time.time()
try:
# Importar LLM manager
from llm.llm_manager import LLMManager
llm = LLMManager()
# Verificar se provider está disponível
if not llm.is_provider_available(request.provider):
raise HTTPException(
status_code=503,
detail=f"Provider '{request.provider}' não disponível ou não configurado"
)
# Gerar texto
result = await llm.generate(
prompt=request.prompt,
provider=request.provider,
model=request.model,
temperature=request.temperature,
max_tokens=request.max_tokens
)
duration_ms = (time.time() - start_time) * 1000
logger.info(
f"✅ LLM test [{request.provider}] - "
f"Tokens: {result.get('tokens', 0)} - "
f"Duration: {duration_ms:.2f}ms"
)
return LLMTestResponse(
provider=request.provider,
model=result.get("model", request.model or "default"),
success=True,
response=result.get("text", ""),
tokens_used=result.get("tokens"),
duration_ms=duration_ms
)
except Exception as e:
duration_ms = (time.time() - start_time) * 1000
logger.error(f"❌ LLM test error: {str(e)}")
return LLMTestResponse(
provider=request.provider,
model=request.model or "unknown",
success=False,
duration_ms=duration_ms,
error=str(e)
)
@router.get("/providers")
async def list_providers():
"""
**Lista providers LLM disponíveis.**
Mostra quais providers estão configurados e prontos para uso.
"""
try:
from llm.llm_manager import LLMManager
llm = LLMManager()
providers = llm.list_providers()
return {
"providers": providers,
"total": len(providers),
"default": llm.default_provider
}
except Exception as e:
logger.error(f"Error listing providers: {e}")
return {
"providers": [],
"total": 0,
"error": str(e)
}
@router.get("/models/{provider}")
async def list_models(provider: str):
"""
**Lista modelos disponíveis de um provider.**
Args:
provider: Nome do provider (groq/openai/anthropic)
"""
try:
from llm.llm_manager import LLMManager
llm = LLMManager()
if not llm.is_provider_available(provider):
raise HTTPException(
status_code=404,
detail=f"Provider '{provider}' não disponível"
)
models = llm.get_available_models(provider)
return {
"provider": provider,
"models": models,
"total": len(models)
}
except HTTPException:
raise
except Exception as e:
logger.error(f"Error listing models: {e}")
raise HTTPException(status_code=500, detail=str(e))
|