|
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__) |
|
|
|
|
|
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'] |
|
|
|
|
|
message_id = str(uuid.uuid4()) |
|
|
|
|
|
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'] |
|
|
|
|
|
if message_id not in message_store: |
|
return jsonify({'error': 'ID de mensaje no encontrado'}), 404 |
|
|
|
user_message = message_store[message_id] |
|
|
|
|
|
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 |
|
|
|
|
|
response = agent.invoke({"input": user_message}) |
|
|
|
|
|
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) |
|
|
|
|
|
del message_store[message_id] |
|
|
|
return jsonify({ |
|
'response': response_text, |
|
'status': 'success' |
|
}) |
|
|
|
except Exception as e: |
|
return jsonify({'error': str(e)}), 500 |
|
|
|
|
|
def mount_in_app(gradio_app): |
|
"""Monta la API Flask en la aplicaci贸n Gradio.""" |
|
return gradio_app |
|
|
|
if __name__ == '__main__': |
|
|
|
port = int(os.environ.get('PORT', 5000)) |
|
app.run(host='0.0.0.0', port=port) |
|
else: |
|
|
|
|
|
gradio_app = gr.mount_gradio_app( |
|
app, |
|
"/api", |
|
lambda: True |
|
) |