File size: 2,174 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
"""
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}')"