From dfa350737a0818fe3ae385edb4555a6c79eedb80 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Fri, 8 May 2026 10:58:54 +0800 Subject: [PATCH] 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 --- harnessed_reasoning/core.py | 25 ++++++++++++++++++------- wwwroot/api/reasoning_submit.dspy | 3 ++- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/harnessed_reasoning/core.py b/harnessed_reasoning/core.py index 7076372..ef7be15 100644 --- a/harnessed_reasoning/core.py +++ b/harnessed_reasoning/core.py @@ -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.""" diff --git a/wwwroot/api/reasoning_submit.dspy b/wwwroot/api/reasoning_submit.dspy index 3818280..1645679 100644 --- a/wwwroot/api/reasoning_submit.dspy +++ b/wwwroot/api/reasoning_submit.dspy @@ -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(