File size: 2,876 Bytes
1b447de
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""
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
        }