File size: 2,471 Bytes
5b5c1df
 
47d0d96
cba2d88
47d0d96
 
5b5c1df
cba2d88
 
 
 
5b5c1df
2046451
5b5c1df
2046451
5b5c1df
47d0d96
5b5c1df
 
 
 
 
 
 
 
2046451
f57dc85
2046451
5b5c1df
 
 
814be5a
 
2046451
 
cba2d88
2046451
 
 
 
cba2d88
2046451
cba2d88
2046451
 
 
 
 
 
 
 
 
4be8d5a
f57dc85
4be8d5a
 
 
 
f57dc85
 
4be8d5a
 
 
 
536f322
4be8d5a
f57dc85
4be8d5a
f57dc85
2046451
 
 
 
 
 
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
import os
import google.generativeai as genai
from dotenv import load_dotenv
from cachetools import cached, TTLCache

load_dotenv()

# Configura cache para a lista de modelos: dura 24 horas (86400 segundos)
# maxsize=1 pois só armazenamos o resultado de uma única chamada
models_cache = TTLCache(maxsize=1, ttl=86400)


def configure_genai(model_name="gemini-2.5-flash"):
    """
    Configura a chave de API e inicializa o modelo Gemini escolhido.
    """
    api_key = os.getenv("GOOGLE_API_KEY")

    if not api_key:
        raise EnvironmentError(
            "❌ A variável de ambiente GOOGLE_API_KEY não está definida."
        )

    try:
        genai.configure(api_key=api_key)
        model = genai.GenerativeModel(model_name)
        # Log para debug, para saber qual modelo está sendo usado
        print(f"✅ Modelo configurado: {model_name}")
        return model

    except Exception as e:
        print(f"❌ Falha ao configurar a chave da API: {e}")
        return None


@cached(models_cache)
def list_available_models():
    """
    Lista os modelos disponíveis na API dinamicamente.
    Retorna uma lista de dicionários {'id': name, 'name': display_name}.
    Resultado em cache por 24h.
    """
    print("🔄 Consultando API do Google para atualizar lista de modelos...")
    api_key = os.getenv("GOOGLE_API_KEY")
    if not api_key:
        return []

    try:
        genai.configure(api_key=api_key)
        models = []
        for m in genai.list_models():
            if 'generateContent' in m.supported_generation_methods:
                name_lower = m.name.lower()

                # Regras estritas de filtro para garantir compatibilidade
                # 1. Deve ser da família Gemini
                if 'gemini' not in name_lower:
                    continue

                # 2. Deve ser da variante 'flash'
                if 'flash' not in name_lower:
                    continue

                # 3. Exclui variantes problemáticas ou não suportadas
                if any(x in name_lower for x in ['image', 'vision', 'pro', 'tts']):
                    continue

                models.append({"id": m.name, "name": m.display_name})

        # Ordena inversamente pelo nome para tentar mostrar versões mais novas (2.5 > 1.5) primeiro
        models.sort(key=lambda x: x['name'], reverse=True)
        return models
    except Exception as e:
        print(f"⚠️ Erro ao listar modelos: {e}")
        return []