mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-04-26 01:01:40 +00:00
fix(api_server): preserve conversation history when /v1/runs input is a message array
When /v1/runs receives an OpenAI-style array of messages as input, all messages except the last user turn are now extracted as conversation_history. Previously only the last message was kept, silently discarding earlier context in multi-turn conversations. Handles multi-part content blocks by flattening text portions. Only fires when no explicit conversation_history was provided. Based on PR #5837 by pradeep7127.
This commit is contained in:
parent
786038443e
commit
1d5a69a445
1 changed files with 15 additions and 0 deletions
|
|
@ -1454,6 +1454,21 @@ class APIServerAdapter(BasePlatformAdapter):
|
|||
if instructions is None:
|
||||
instructions = stored.get("instructions")
|
||||
|
||||
# When input is a multi-message array, extract all but the last
|
||||
# message as conversation history (the last becomes user_message).
|
||||
# Only fires when no explicit history was provided.
|
||||
if not conversation_history and isinstance(raw_input, list) and len(raw_input) > 1:
|
||||
for msg in raw_input[:-1]:
|
||||
if isinstance(msg, dict) and msg.get("role") and msg.get("content"):
|
||||
content = msg["content"]
|
||||
if isinstance(content, list):
|
||||
# Flatten multi-part content blocks to text
|
||||
content = " ".join(
|
||||
part.get("text", "") for part in content
|
||||
if isinstance(part, dict) and part.get("type") == "text"
|
||||
)
|
||||
conversation_history.append({"role": msg["role"], "content": str(content)})
|
||||
|
||||
session_id = body.get("session_id") or run_id
|
||||
ephemeral_system_prompt = instructions
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue