Spaces:
Sleeping
Sleeping
| 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, útil 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 | |
| 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' (mais estável para esta conta) | |
| 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 [] | |