Spaces:
Sleeping
Sleeping
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 | |
| } | |