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 []