mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-04-28 01:21:43 +00:00
Merge 3521430694 into 13038dc747
This commit is contained in:
commit
45ff282782
3 changed files with 45 additions and 14 deletions
|
|
@ -761,20 +761,32 @@ async def search_sessions(q: str = "", limit: int = 20):
|
|||
else:
|
||||
terms.append(token + "*")
|
||||
prefix_query = " ".join(terms)
|
||||
matches = db.search_messages(query=prefix_query, limit=limit)
|
||||
# Group by session_id — return unique sessions with their best snippet
|
||||
# search_messages() limits raw message hits, but this endpoint returns
|
||||
# unique sessions. Overfetch in batches until we either collect the
|
||||
# requested number of unique sessions or exhaust the match list.
|
||||
seen: dict = {}
|
||||
for m in matches:
|
||||
sid = m["session_id"]
|
||||
if sid not in seen:
|
||||
seen[sid] = {
|
||||
"session_id": sid,
|
||||
"snippet": m.get("snippet", ""),
|
||||
"role": m.get("role"),
|
||||
"source": m.get("source"),
|
||||
"model": m.get("model"),
|
||||
"session_started": m.get("session_started"),
|
||||
}
|
||||
offset = 0
|
||||
batch_size = max(limit, 20)
|
||||
while len(seen) < limit:
|
||||
matches = db.search_messages(query=prefix_query, limit=batch_size, offset=offset)
|
||||
if not matches:
|
||||
break
|
||||
for m in matches:
|
||||
sid = m["session_id"]
|
||||
if sid not in seen:
|
||||
seen[sid] = {
|
||||
"session_id": sid,
|
||||
"snippet": m.get("snippet", ""),
|
||||
"role": m.get("role"),
|
||||
"source": m.get("source"),
|
||||
"model": m.get("model"),
|
||||
"session_started": m.get("session_started"),
|
||||
}
|
||||
if len(seen) >= limit:
|
||||
break
|
||||
if len(matches) < batch_size:
|
||||
break
|
||||
offset += batch_size
|
||||
return {"results": list(seen.values())}
|
||||
finally:
|
||||
db.close()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue