vioott's picture
feat(debug): add /debug/models route to list available Gemini models
03ca9c2
raw
history blame
3.56 kB
import re
import sys
import logging
import traceback
from flask import Blueprint, render_template, request
from services.genai_service import configure_genai
from logs import get_user_history, save_log
# Configurar logger
logging.basicConfig(level=logging.ERROR)
logger = logging.getLogger(__name__)
chat_bp = Blueprint('chat', __name__)
@chat_bp.route('/chat/<int:user_id>', methods=['GET', 'POST'])
def chat(user_id):
"""
Rota para interação do usuário com a IA.
"""
history = get_user_history(user_id)
if not history:
return render_template('error_redirect.html')
response = None
if request.method == 'POST':
question = request.form.get('question')
try:
model = configure_genai()
session = model.start_chat(enable_automatic_function_calling=True)
prompt = (
f"Você é uma especialista em livros e pode conversar "
f"livremente sobre obras literárias, personagens, enredos, "
f"gêneros e autores. O nome do usuário é "
f"{history.get('name', f'Usuário {user_id}')}. "
f"As preferências dele são: "
f"{', '.join(history.get('preferences', [])) or 'nenhuma'}. "
f"Histórico: {history}. "
f"Pergunta: {question}. Responda na mesma língua da pergunta,"
f" com até 500 caracteres."
f"Fale diretamente com o usuário."
)
gemini_response = session.send_message(prompt)
response = gemini_response.text
save_log(user_id, history, response)
except Exception as e:
logger.error(f"Erro CRÍTICO ao usar a IA: {e}")
logger.error(traceback.format_exc())
print(f"Erro ao usar a IA (stdout): {e}", flush=True)
print(traceback.format_exc(), flush=True)
response = "⚠️ A IA está indisponível, retorne em 24h."
formatted_response = None
if response:
formatted_response = response.replace('\n', '<br>')
formatted_response = re.sub(
r'(?<=<br>)\s*(Ficção|Não[- ]Ficção|Ciência|Fantasia)\s*:(?=<br>)',
r'<b>\1:</b>',
f"<br>{formatted_response}<br>"
)[4:-4]
formatted_response = formatted_response.replace('**', '')
formatted_response = formatted_response.replace('* ', '• ')
return render_template(
'chat.html',
user_id=user_id,
response=formatted_response,
history=history
)
@chat_bp.route('/debug/models', methods=['GET'])
def list_models():
"""
Rota de debug para listar modelos disponíveis na API.
"""
try:
import google.generativeai as genai
import os
api_key = os.getenv("GOOGLE_API_KEY")
if not api_key:
return "<h1>Erro: API Key não encontrada</h1>"
genai.configure(api_key=api_key)
models_info = []
for m in genai.list_models():
if 'generateContent' in m.supported_generation_methods:
models_info.append(f"<li><b>{m.name}</b> (Display Name: {m.display_name})</li>")
if not models_info:
return "<h1>Nenhum modelo encontrado com suporte a 'generateContent'</h1>"
return f"<h1>Modelos Disponíveis:</h1><ul>{''.join(models_info)}</ul>"
except Exception as e:
return f"<h1>Erro ao listar modelos:</h1><pre>{e}</pre>"