agent-writer/handlers/langgraph_handler.py
2025-09-11 18:34:03 +08:00

84 lines
2.6 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.

from flask import request, jsonify
import asyncio
import uuid
from graph.test_graph_3 import run_with_persistence, get_checkpoint_history, resume_from_checkpoint
def run_async(coro):
"""运行异步函数的辅助函数"""
try:
# 尝试使用现有的事件循环
loop = asyncio.get_running_loop()
except RuntimeError:
# 如果没有运行中的事件循环,则创建一个新的
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
return loop.run_until_complete(coro)
def run_langgraph():
"""启动一个新的langgraph任务"""
try:
data = request.get_json()
user_input = data.get('user_input', '')
thread_id = data.get('thread_id', str(uuid.uuid4()))
if not user_input:
return jsonify({'error': 'user_input is required'}), 400
# 运行异步函数
output, thread_id = run_async(run_with_persistence(user_input, thread_id))
return jsonify({
'status': 'success',
'thread_id': thread_id,
'output': output
})
except Exception as e:
return jsonify({'error': str(e)}), 500
def get_task_status(thread_id):
"""查询任务状态和历史"""
try:
# 获取检查点历史
# 注意这里需要修改get_checkpoint_history以返回数据而不是打印
# history = run_async(get_checkpoint_history(thread_id))
return jsonify({
'status': 'success',
'thread_id': thread_id,
'message': 'Task status endpoint'
})
except Exception as e:
return jsonify({'error': str(e)}), 500
def resume_task(thread_id):
"""从检查点恢复任务"""
try:
data = request.get_json()
checkpoint_id = data.get('checkpoint_id')
# 恢复检查点状态
restored_state = resume_from_checkpoint(thread_id, checkpoint_id)
if restored_state:
return jsonify({
'status': 'success',
'restored_state': restored_state
})
else:
return jsonify({'error': 'Failed to restore checkpoint'}), 404
except Exception as e:
return jsonify({'error': str(e)}), 500
def visualize_graph(thread_id):
"""可视化图结构"""
try:
# 这里可以返回图的可视化信息
# 为了简化,我们只返回基本信息
return jsonify({
'status': 'success',
'thread_id': thread_id,
'message': 'Graph visualization endpoint'
})
except Exception as e:
return jsonify({'error': str(e)}), 500