From bb420a6471c57be3e390b671ab82f8459e33cd4d Mon Sep 17 00:00:00 2001 From: yumoqing Date: Thu, 7 May 2026 15:32:59 +0800 Subject: [PATCH] fix: replace invalid sor.R(orderby/limit) calls with sqlExe - Config lookup uses raw SQL for ordering - Skill search uses raw SQL for and limit - Session listing uses raw SQL for order/limit/offset --- .../__pycache__/core.cpython-311.pyc | Bin 40095 -> 41707 bytes harnessed_reasoning/core.py | 25 +++++++++--------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/harnessed_reasoning/__pycache__/core.cpython-311.pyc b/harnessed_reasoning/__pycache__/core.cpython-311.pyc index bfeb034941af90cae34b5d094fc554fe5c46a1e6..fac43591212c975d9b6b35383e1fd49ca405f264 100644 GIT binary patch delta 7852 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 delta 6496 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 Wh&d#DHx6b|W diff --git a/harnessed_reasoning/core.py b/harnessed_reasoning/core.py index e518c44..5f7df9a 100644 --- a/harnessed_reasoning/core.py +++ b/harnessed_reasoning/core.py @@ -127,8 +127,8 @@ class HermesReasoningEngine: try: async with self.db.sqlorContext(dbname) as sor: - rows = await sor.R('harnessed_reasoning_config', {}, - orderby='updated_at DESC', limit=1) + sql = "SELECT * FROM harnessed_reasoning_config ORDER BY updated_at DESC LIMIT 1" + rows = await sor.sqlExe(sql, {}) if rows: return rows[0] except Exception as e: @@ -196,13 +196,15 @@ class HermesReasoningEngine: try: async with self.db.sqlorContext('default') as sor: for kw in list(keywords)[:3]: - rows = await sor.R('hermes_skills', { - 'user_id': user_id, - '$or': [ - {'name': {'$like': f'%{kw}%'}}, - {'description': {'$like': f'%{kw}%'}}, - ] - }, limit=2) + sql = """SELECT * FROM hermes_skills + WHERE user_id = :user_id + AND (name LIKE :kw1 OR description LIKE :kw2) + LIMIT 2""" + rows = await sor.sqlExe(sql, { + 'user_id': user_id, + 'kw1': f'%{kw}%', + 'kw2': f'%{kw}%' + }) skills.extend(rows) # Deduplicate @@ -687,9 +689,8 @@ class HermesReasoningEngine: try: async with self.db.sqlorContext('default') as sor: - rows = await sor.R('harnessed_reasoning_sessions', - {'user_id': user_id}, - orderby='created_at DESC', limit=limit, offset=offset) + sql = f"SELECT * FROM harnessed_reasoning_sessions WHERE user_id = :user_id ORDER BY created_at DESC LIMIT {limit} OFFSET {offset}" + rows = await sor.sqlExe(sql, {'user_id': user_id}) sessions = [] for s in rows: