aboutsummaryrefslogtreecommitdiff
path: root/agent/orchestrator/loop.py
diff options
context:
space:
mode:
Diffstat (limited to 'agent/orchestrator/loop.py')
-rw-r--r--agent/orchestrator/loop.py26
1 files changed, 25 insertions, 1 deletions
diff --git a/agent/orchestrator/loop.py b/agent/orchestrator/loop.py
index ed2c0a8..07e81e8 100644
--- a/agent/orchestrator/loop.py
+++ b/agent/orchestrator/loop.py
@@ -9,10 +9,34 @@ from .context import build_turn_context
from .models import Message, ModelRequest, call_model
-def handle_turn(messages: list[Message]) -> str:
+def handle_turn(messages: list[Message], user: str | None = None) -> str:
+ decorated = _decorate_latest_user(messages, user)
request = ModelRequest(
messages=messages,
turn_context=build_turn_context(),
)
response = call_model(request)
return response.content
+
+def _decorate_latest_user(messages: list[Message], user: str | None) -> list[Message]:
+ """Prepend [timestamp] [user: name] to the latest user message only.
+
+ Older user messages keep their original form, they were already decorated
+ at the time they were sent, and Open WebUI is feeding us back the conversation
+ history including those decorations.
+ """
+ if not messages:
+ return messages
+ # find the latest user message; decorate it
+ decorated = list(messages)
+ for i in range(len(decorated) - 1, -1, -1):
+ if decorated[i].role == "user":
+ now = datetime.now(timezone.utc).astimezone().isoformat(timespec="seconds")
+ name = f"[user: {user}] " if user else ""
+ prefix = f"[{now}] {name}"
+ decorated[i] = Message(
+ role="user",
+ content=prefix + decorated[i].content,
+ )
+ break
+ return decorated