fix(agents): preserve session on async responses
This commit is contained in:
parent
fdbca6d56d
commit
ce13b13617
2 changed files with 51 additions and 3 deletions
|
|
@ -64,12 +64,21 @@ func (al *AgentLoop) PublishResponseIfNeeded(ctx context.Context, channel, chatI
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
agent := al.agentForSession(sessionKey)
|
||||||
|
agentID := ""
|
||||||
|
if agent != nil {
|
||||||
|
agentID = agent.ID
|
||||||
|
}
|
||||||
msg := bus.OutboundMessage{
|
msg := bus.OutboundMessage{
|
||||||
Context: bus.NewOutboundContext(channel, chatID, ""),
|
Channel: channel,
|
||||||
Content: response,
|
ChatID: chatID,
|
||||||
|
Context: outboundContextFromInbound(inboundCtx, channel, chatID, ""),
|
||||||
|
AgentID: agentID,
|
||||||
|
SessionKey: sessionKey,
|
||||||
|
Content: response,
|
||||||
}
|
}
|
||||||
if sessionKey != "" {
|
if sessionKey != "" {
|
||||||
msg.ContextUsage = computeContextUsage(al.agentForSession(sessionKey), sessionKey)
|
msg.ContextUsage = computeContextUsage(agent, sessionKey)
|
||||||
}
|
}
|
||||||
al.bus.PublishOutbound(ctx, msg)
|
al.bus.PublishOutbound(ctx, msg)
|
||||||
logger.InfoCF("agent", "Published outbound response",
|
logger.InfoCF("agent", "Published outbound response",
|
||||||
|
|
|
||||||
|
|
@ -162,6 +162,45 @@ func newTestAgentLoop(
|
||||||
return al, cfg, msgBus, provider, func() { os.RemoveAll(tmpDir) }
|
return al, cfg, msgBus, provider, func() { os.RemoveAll(tmpDir) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPublishResponseWithContextIfNeeded_PreservesSessionMetadata(t *testing.T) {
|
||||||
|
al, _, msgBus, _, cleanup := newTestAgentLoop(t)
|
||||||
|
defer cleanup()
|
||||||
|
|
||||||
|
inboundCtx := &bus.InboundContext{
|
||||||
|
Channel: "telegram",
|
||||||
|
ChatID: "-100123",
|
||||||
|
ChatType: "group",
|
||||||
|
TopicID: "6",
|
||||||
|
SenderID: "user-1",
|
||||||
|
}
|
||||||
|
al.publishResponseWithContextIfNeeded(
|
||||||
|
context.Background(),
|
||||||
|
"telegram",
|
||||||
|
"-100123",
|
||||||
|
"session-async-1",
|
||||||
|
"done",
|
||||||
|
inboundCtx,
|
||||||
|
)
|
||||||
|
|
||||||
|
select {
|
||||||
|
case outbound := <-msgBus.OutboundChan():
|
||||||
|
if outbound.Channel != "telegram" || outbound.ChatID != "-100123" {
|
||||||
|
t.Fatalf("unexpected outbound target: channel=%q chat=%q", outbound.Channel, outbound.ChatID)
|
||||||
|
}
|
||||||
|
if outbound.Context.TopicID != "6" {
|
||||||
|
t.Fatalf("outbound topic_id = %q, want 6", outbound.Context.TopicID)
|
||||||
|
}
|
||||||
|
if outbound.AgentID != routing.DefaultAgentID {
|
||||||
|
t.Fatalf("outbound agent_id = %q, want %q", outbound.AgentID, routing.DefaultAgentID)
|
||||||
|
}
|
||||||
|
if outbound.SessionKey != "session-async-1" {
|
||||||
|
t.Fatalf("outbound session_key = %q, want session-async-1", outbound.SessionKey)
|
||||||
|
}
|
||||||
|
case <-time.After(2 * time.Second):
|
||||||
|
t.Fatal("expected outbound response")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestNewAgentLoop_RegistersWebSearchTool(t *testing.T) {
|
func TestNewAgentLoop_RegistersWebSearchTool(t *testing.T) {
|
||||||
cfg := config.DefaultConfig()
|
cfg := config.DefaultConfig()
|
||||||
cfg.Agents.Defaults.Workspace = t.TempDir()
|
cfg.Agents.Defaults.Workspace = t.TempDir()
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue