Jeremy Live
API solved
0f16c64
raw
history blame
3.48 kB
from flask import Flask, request, jsonify
from typing import Dict, Optional
import uuid
import os
from app import initialize_llm, setup_database_connection, create_agent, gr
app = Flask(__name__)
# Almacenamiento en memoria de los mensajes
message_store: Dict[str, str] = {}
@app.route('/user_message', methods=['POST'])
def handle_user_message():
try:
data = request.get_json()
if not data or 'message' not in data:
return jsonify({'error': 'Se requiere el campo message'}), 400
user_message = data['message']
# Generar un ID 煤nico para este mensaje
message_id = str(uuid.uuid4())
# Almacenar el mensaje
message_store[message_id] = user_message
return jsonify({
'message_id': message_id,
'status': 'success'
})
except Exception as e:
return jsonify({'error': str(e)}), 500
@app.route('/ask', methods=['POST'])
def handle_ask():
try:
data = request.get_json()
if not data or 'message_id' not in data:
return jsonify({'error': 'Se requiere el campo message_id'}), 400
message_id = data['message_id']
# Recuperar el mensaje almacenado
if message_id not in message_store:
return jsonify({'error': 'ID de mensaje no encontrado'}), 404
user_message = message_store[message_id]
# Inicializar componentes necesarios
llm, llm_error = initialize_llm()
if llm_error:
return jsonify({'error': f'Error al inicializar LLM: {llm_error}'}), 500
db_connection, db_error = setup_database_connection()
if db_error:
return jsonify({'error': f'Error de conexi贸n a la base de datos: {db_error}'}), 500
agent, agent_error = create_agent(llm, db_connection)
if agent_error:
return jsonify({'error': f'Error al crear el agente: {agent_error}'}), 500
# Obtener respuesta del agente
response = agent.invoke({"input": user_message})
# Procesar la respuesta
if hasattr(response, 'output') and response.output:
response_text = response.output
elif isinstance(response, str):
response_text = response
elif hasattr(response, 'get') and callable(response.get) and 'output' in response:
response_text = response['output']
else:
response_text = str(response)
# Eliminar el mensaje almacenado despu茅s de procesarlo
del message_store[message_id]
return jsonify({
'response': response_text,
'status': 'success'
})
except Exception as e:
return jsonify({'error': str(e)}), 500
# Integraci贸n con Gradio para Hugging Face Spaces
def mount_in_app(gradio_app):
"""Monta la API Flask en la aplicaci贸n Gradio."""
return gradio_app
if __name__ == '__main__':
# Si se ejecuta directamente, inicia el servidor Flask
port = int(os.environ.get('PORT', 5000))
app.run(host='0.0.0.0', port=port)
else:
# Si se importa como m贸dulo (en Hugging Face Spaces),
# expone la funci贸n para montar en Gradio
gradio_app = gr.mount_gradio_app(
app,
"/api", # Prefijo para los endpoints de la API
lambda: True # Autenticaci贸n deshabilitada
)