rag_template / src /llms /openai.py
Guilherme Favaron
Major update: Add hybrid search, reranking, multiple LLMs, and UI improvements
1b447de
"""
Provider OpenAI (GPT-4, GPT-3.5, etc)
"""
from typing import Dict, Any
from .base import BaseLLM
class OpenAILLM(BaseLLM):
"""Provider para OpenAI API"""
def __init__(self, model_id: str, api_key: str, **kwargs):
"""
Inicializa provider OpenAI
Args:
model_id: ID do modelo (gpt-4, gpt-3.5-turbo, etc)
api_key: API key da OpenAI
**kwargs: Configurações adicionais
"""
super().__init__(model_id, **kwargs)
self.api_key = api_key
self.client = None
if api_key:
try:
import openai
self.client = openai.OpenAI(api_key=api_key)
except ImportError:
self.last_error = "Biblioteca 'openai' não instalada. Instale com: pip install openai"
except Exception as e:
self.last_error = f"Erro ao inicializar OpenAI client: {str(e)}"
def generate(
self,
prompt: str,
temperature: float = 0.3,
max_tokens: int = 512,
**kwargs
) -> str:
"""
Gera resposta usando OpenAI API
Args:
prompt: Texto do prompt
temperature: Temperatura de geração
max_tokens: Máximo de tokens
**kwargs: Parâmetros adicionais
Returns:
Texto gerado
"""
# Valida parâmetros
valid, error_msg = self.validate_parameters(temperature, max_tokens)
if not valid:
return f"Erro de validação: {error_msg}"
if not self.client:
return f"Erro: Cliente OpenAI não inicializado. {self.last_error}"
try:
response = self.client.chat.completions.create(
model=self.model_id,
messages=[
{"role": "user", "content": prompt}
],
temperature=temperature,
max_tokens=max_tokens,
**kwargs
)
return response.choices[0].message.content.strip()
except Exception as e:
error = f"Erro na geração OpenAI: {str(e)}"
self.last_error = error
return error
def is_available(self) -> bool:
"""
Verifica se o provider está disponível
Returns:
True se cliente foi inicializado
"""
return self.client is not None
def get_model_info(self) -> Dict[str, Any]:
"""
Retorna informações sobre o modelo
Returns:
Dicionário com informações
"""
return {
"provider": "OpenAI",
"model_id": self.model_id,
"available": self.is_available(),
"api_type": "Chat Completions API",
"last_error": self.last_error if self.last_error else None
}