mirror of
https://github.com/mudler/LocalAI.git
synced 2026-10-09 22:54:42 -04:00
fix(agentpool): keep the conversation in the agent web chat (#12410)
* feat(agents): keep the web chat history between messages The agent chat endpoint ran every message as a fresh job (ag.Ask(WithText(message))), so a follow-up such as "add two days to item 3 and recalculate" never saw the answer it referred to. Agents then rebuilt their reply from scratch instead of changing it. Use the agent's own conversation tracker, as the Telegram and Slack connectors already do: send the earlier turns with the new message and record successful answers. Failed, cancelled or empty runs are not recorded, and the tracker drops a conversation after the agent's last_message_duration of inactivity. The distributed (NATS) chat path is unchanged. Assisted-by: Claude:claude-opus-5-5 ginkgo Signed-off-by: Stefan Walcz <stefan.walcz@walcz.de> * fix(agents): keep each web chat conversation's history separate Review on this PR: the first version kept the history in the agent's conversation tracker under one fixed key per agent. The web UI keeps several conversations per agent (New Chat, switching, Clear) and did not send which one a message belongs to, so the hidden history mixed them: a new chat received the previous chat's turns, and Clear only cleared the screen. The client now sends the earlier turns of the conversation it is showing as `history` with POST /api/agents/:name/chat, and the server keeps no web chat history of its own. Each conversation only ever sees its own turns; New Chat and Clear start without history. The server uses only user and assistant turns with text, bounded to the most recent 40 turns and 64,000 characters. `history` is optional, so existing callers keep the previous behaviour (no history); the distributed (NATS) path does not forward it yet. Tests: two conversations of one agent stay apart, an empty history (New Chat or Clear) starts fresh, system/tool/empty turns are dropped, the bounds keep the most recent turns; the UI helper that builds the history from the visible messages has node --test coverage. Docs: features/agents.md describes `history` and the web UI behaviour. Assisted-by: Claude:claude-opus-5-5 ginkgo Signed-off-by: Stefan Walcz <stefan.walcz@walcz.de> --------- Signed-off-by: Stefan Walcz <stefan.walcz@walcz.de>
This commit is contained in:
1 parent
9b0b7da96e
commit
5f5feea15a
12 files changed
+235
-12
No files matched your search
@@ -366,6 +366,22 @@ curl -X POST http://localhost:8080/api/agents/my-agent/chat \
|
||||
-d '{"message": "What is the weather today?"}'
|
||||
```
|
||||
|
||||
Each message runs as a new job. To continue a conversation, send its earlier turns as `history`; only `user` and `assistant` turns with text are used, and only the most recent 40 turns up to 64,000 characters:
|
||||
|
||||
```bash
|
||||
curl -X POST http://localhost:8080/api/agents/my-agent/chat \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"message": "Add two days to item 3",
|
||||
"history": [
|
||||
{"role": "user", "content": "Draft an offer for the rollout"},
|
||||
{"role": "assistant", "content": "Offer AG-1: ... item 3: 15 days ..."}
|
||||
]
|
||||
}'
|
||||
```
|
||||
|
||||
The web UI does this for you: each conversation in the agent chat sends only its own visible turns. **New Chat** and switching conversations therefore continue from that conversation alone, and **Clear** starts the conversation over without history. A request without `history` is answered without earlier context; the server keeps no web chat history of its own. In distributed mode (NATS) the history is not forwarded yet.
|
||||
|
||||
Listen to real-time events via SSE:
|
||||
|
||||
```bash
|
||||
|
||||
Reference in new issue
Block a user