llm-agent-backend/app/api.py
2025-09-17 02:23:19 +03:00

87 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
Этот файл содержит API endpoints, созданные с использованием Flask.
Он обеспечивает взаимодействие с агентом через HTTP запросы,
включая обработку сообщений, управление графами и получение истории.
"""
from flask import Flask, request, jsonify
from flask_cors import CORS
from workflows import run_agent, graph_history_manager
from llm_client import MODELS # Добавляем импорт списка моделей
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 из запроса
system_prompt = data.get("system_prompt")
model = data.get("model")
if not message:
return jsonify({"error": "Сообщение не может быть пустым."}, 400)
result = run_agent(message, graph_id,
parent_node_id, system_prompt, model) # Передаем 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)
@api.route('/api/models', methods=['GET'])
def get_available_models():
"""API endpoint для получения списка доступных моделей."""
return jsonify(list(MODELS.keys()))