harnessed_reasoning/wwwroot/api/reasoning_submit.dspy

62 lines
2.5 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Submit reasoning request and return results"""
import json, time, uuid
result = {'widgettype': 'Message', 'options': {'title': 'Error', 'message': '推理请求失败', 'type': 'error'}}
try:
request_text = params_kw.get('request', '').strip()
if not request_text:
result['options'] = {'title': 'Error', 'message': '请输入推理请求', 'type': 'error'}
else:
user_id = await get_user()
execute_immediately = params_kw.get('execute_immediately', '1') == '1'
# Call the reasoning engine from ServerEnv
reasoning_result = await hermes_reason_and_execute(
request=request_text,
execute_immediately=execute_immediately
)
if reasoning_result.get('success'):
# Build result widget showing reasoning output
plan_items = []
for step in reasoning_result.get('execution_plan', []):
plan_items.append(f"步骤{step.get('step_number', '?')}: {step.get('description', '')}")
plan_text = '\n'.join(plan_items) if plan_items else '无执行计划'
safety_text = '\n'.join(reasoning_result.get('safety_violations', [])) or '无安全风险'
summary = (
f"请求: {request_text}\n\n"
f"上下文: {reasoning_result.get('context_summary', '')}\n\n"
f"置信度: {reasoning_result.get('confidence_score', 0):.0%}\n\n"
f"执行计划:\n{plan_text}\n\n"
f"安全检查:\n{safety_text}\n\n"
f"状态: {reasoning_result.get('status', 'unknown')}"
)
if reasoning_result.get('execution_results'):
summary += f"\n\n执行结果:\n{json.dumps(reasoning_result['execution_results'], ensure_ascii=False, indent=2)}"
result = {
'widgettype': 'Message',
'options': {
'title': '推理完成',
'message': summary,
'type': 'success'
}
}
else:
result['options'] = {
'title': '推理失败',
'message': reasoning_result.get('error', '未知错误'),
'type': 'error'
}
except Exception as e:
result['options'] = {'title': 'Error', 'message': '推理异常: ' + str(e), 'type': 'error'}
return json.dumps(result, ensure_ascii=False)