Spaces:
Sleeping
Sleeping
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 []
|