81 lines
3.3 KiB
Python
81 lines
3.3 KiB
Python
"""
|
||
Этот файл содержит 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/<graph_id>', 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/<graph_id>', 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/<graph_id>/<node_id>', 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)
|
||
|