fix: parse execute_immediately from frontend boolean/string correctly

- Support 'true', '1', 'yes' for execute_immediately parameter
- Previously 'true' == '1' evaluated to False, blocking execution
- Fix session storage: clean datetime objects before json.dumps
This commit is contained in:
yumoqing 2026-05-08 10:58:54 +08:00
parent 356544853a
commit dfa350737a
2 changed files with 20 additions and 8 deletions

View File

@ -603,25 +603,36 @@ class HermesReasoningEngine:
plan: Dict, violations: List, status: str):
"""Store reasoning session in database."""
try:
# Ensure plan is serializable
plan_str = json.dumps(plan, ensure_ascii=False, default=str)
# Clean plan object to ensure JSON serializability
def clean_plan(obj):
if isinstance(obj, dict):
return {k: clean_plan(v) for k, v in obj.items()}
elif isinstance(obj, list):
return [clean_plan(i) for i in obj]
elif isinstance(obj, datetime):
return obj.isoformat()
return obj
clean_plan_obj = clean_plan(plan)
data = {
'id': session_id,
'user_id': user_id,
'initial_request': request,
'context_summary': '',
'execution_plan_json': plan_str,
'execution_plan_json': json.dumps(clean_plan_obj, ensure_ascii=False),
'reasoning_steps_json': '[]',
'safety_violations_json': json.dumps(violations, ensure_ascii=False),
'final_decision_json': json.dumps({'status': status}),
'status': status,
'created_at': datetime.now(),
'updated_at': datetime.now(),
'created_at': datetime.now().isoformat(),
'updated_at': datetime.now().isoformat(),
}
async with self.db.sqlorContext('default') as sor:
await sor.C('harnessed_reasoning_sessions', data)
res = await sor.C('harnessed_reasoning_sessions', data)
info(f"Session stored: {session_id}, result={res}")
except Exception as e:
warning(f"Failed to store session: {e}")
error(f"Failed to store session details: {e}")
async def _update_session_status(self, session_id: str, status: str):
"""Update session status."""

View File

@ -11,7 +11,8 @@ try:
result['options'] = {'title': 'Error', 'message': '请输入推理请求', 'type': 'error'}
else:
user_id = await get_user()
execute_immediately = params_kw.get('execute_immediately', '1') == '1'
execute_val = str(params_kw.get('execute_immediately', '1')).lower()
execute_immediately = execute_val in ('1', 'true', 'yes', 'on')
# Call the reasoning engine from ServerEnv
reasoning_result = await hermes_reason_and_execute(