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:
parent
356544853a
commit
dfa350737a
@ -603,25 +603,36 @@ class HermesReasoningEngine:
|
|||||||
plan: Dict, violations: List, status: str):
|
plan: Dict, violations: List, status: str):
|
||||||
"""Store reasoning session in database."""
|
"""Store reasoning session in database."""
|
||||||
try:
|
try:
|
||||||
# Ensure plan is serializable
|
# Clean plan object to ensure JSON serializability
|
||||||
plan_str = json.dumps(plan, ensure_ascii=False, default=str)
|
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 = {
|
data = {
|
||||||
'id': session_id,
|
'id': session_id,
|
||||||
'user_id': user_id,
|
'user_id': user_id,
|
||||||
'initial_request': request,
|
'initial_request': request,
|
||||||
'context_summary': '',
|
'context_summary': '',
|
||||||
'execution_plan_json': plan_str,
|
'execution_plan_json': json.dumps(clean_plan_obj, ensure_ascii=False),
|
||||||
'reasoning_steps_json': '[]',
|
'reasoning_steps_json': '[]',
|
||||||
'safety_violations_json': json.dumps(violations, ensure_ascii=False),
|
'safety_violations_json': json.dumps(violations, ensure_ascii=False),
|
||||||
'final_decision_json': json.dumps({'status': status}),
|
'final_decision_json': json.dumps({'status': status}),
|
||||||
'status': status,
|
'status': status,
|
||||||
'created_at': datetime.now(),
|
'created_at': datetime.now().isoformat(),
|
||||||
'updated_at': datetime.now(),
|
'updated_at': datetime.now().isoformat(),
|
||||||
}
|
}
|
||||||
async with self.db.sqlorContext('default') as sor:
|
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:
|
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):
|
async def _update_session_status(self, session_id: str, status: str):
|
||||||
"""Update session status."""
|
"""Update session status."""
|
||||||
|
|||||||
@ -11,7 +11,8 @@ try:
|
|||||||
result['options'] = {'title': 'Error', 'message': '请输入推理请求', 'type': 'error'}
|
result['options'] = {'title': 'Error', 'message': '请输入推理请求', 'type': 'error'}
|
||||||
else:
|
else:
|
||||||
user_id = await get_user()
|
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
|
# Call the reasoning engine from ServerEnv
|
||||||
reasoning_result = await hermes_reason_and_execute(
|
reasoning_result = await hermes_reason_and_execute(
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user