""" Этот файл содержит API endpoints, созданные с использованием Flask. Он обеспечивает взаимодействие с агентом через HTTP запросы, включая обработку сообщений, управление графами и получение истории. """ from flask import Flask, request, jsonify from flask_cors import CORS from workflows import run_agent, graph_history_manager api = Flask(__name__) CORS( api ) # Разрешаем CORS для всех доменов (в production нужно настроить более строго) @api.route('/api/chat', methods=['POST']) def chat(): """API endpoint для обработки сообщений и возврата ответа.""" data = request.get_json() message = data.get("message") graph_id = data.get("graph_id") parent_node_id = data.get( "parent_node_id") # Получаем parent_node_id из запроса if not message: return jsonify({"error": "Сообщение не может быть пустым."}, 400) result = run_agent(message, graph_id, parent_node_id) # Передаем parent_node_id в run_agent return jsonify(result) @api.route('/api/graphs', methods=['GET']) def get_graphs(): """API endpoint для получения списка графов.""" graphs = graph_history_manager.get_all_graphs_summary() print("get_graphs response:", graphs) # Добавлено логирование return jsonify(graphs) @api.route('/api/graphs/', methods=['GET']) def get_graph_by_id(graph_id): """API endpoint для получения данных конкретного графа по ID.""" graph_data = graph_history_manager.get_graph(graph_id) if graph_data: return jsonify(graph_data) else: return jsonify({"error": f"Граф с ID {graph_id} не найден."}, 404) @api.route('/api/graphs/', methods=['DELETE']) def delete_graph(graph_id): """API endpoint для удаления графа.""" if not graph_id: return jsonify({"error": "Не указан ID графа для удаления."}, 400) if graph_history_manager.delete_graph(graph_id): return jsonify({"message": f"Граф {graph_id} успешно удален."}) else: return jsonify({"error": f"Не удалось удалить граф {graph_id}."}, 500) @api.route('/api/messages//', methods=['GET']) def get_messages_from_root_to_node(graph_id, node_id): """API endpoint для получения сообщений от корня до выбранной ноды.""" graph_data = graph_history_manager.get_graph(graph_id) if not graph_data: return jsonify({"error": "Граф не найден."}, 404) target_node_id = node_id if node_id == 'last': target_node_id = graph_data.get('current_node_id') if not target_node_id: return jsonify({"error": "В графе нет активного узла, до которого можно было бы получить сообщения."}, 404) messages = graph_history_manager.get_messages_from_root_to_node( graph_data, target_node_id) return jsonify(messages)