Guilherme Favaron
Major update: Add hybrid search, reranking, multiple LLMs, and UI improvements
1b447de
"""
Classe base abstrata para provedores de LLM
"""
from abc import ABC, abstractmethod
from typing import Dict, Any, Optional
class BaseLLM(ABC):
"""Classe abstrata para provedores de LLM"""
def __init__(self, model_id: str, **kwargs):
"""
Inicializa o provider LLM
Args:
model_id: ID do modelo
**kwargs: Configurações adicionais
"""
self.model_id = model_id
self.config = kwargs
self.last_error: str = ""
@abstractmethod
def generate(
self,
prompt: str,
temperature: float = 0.3,
max_tokens: int = 512,
**kwargs
) -> str:
"""
Gera resposta a partir de um prompt
Args:
prompt: Texto do prompt
temperature: Temperatura de geração (0.0-2.0)
max_tokens: Máximo de tokens na resposta
**kwargs: Parâmetros adicionais específicos do provider
Returns:
Texto gerado
"""
pass
@abstractmethod
def is_available(self) -> bool:
"""
Verifica se o provider está disponível
Returns:
True se disponível, False caso contrário
"""
pass
@abstractmethod
def get_model_info(self) -> Dict[str, Any]:
"""
Retorna informações sobre o modelo
Returns:
Dicionário com informações do modelo
"""
pass
def validate_parameters(
self,
temperature: float,
max_tokens: int
) -> tuple[bool, str]:
"""
Valida parâmetros de geração
Args:
temperature: Temperatura de geração
max_tokens: Máximo de tokens
Returns:
Tupla (válido, mensagem_erro)
"""
if not 0.0 <= temperature <= 2.0:
return False, "Temperature deve estar entre 0.0 e 2.0"
if max_tokens < 1 or max_tokens > 4096:
return False, "Max tokens deve estar entre 1 e 4096"
return True, ""
def __repr__(self) -> str:
return f"{self.__class__.__name__}(model_id='{self.model_id}')"