1package agent
2
3import (
4 "testing"
5
6 "github.com/patriceckhart/zot/packages/agent/modes"
7 "github.com/patriceckhart/zot/packages/core"
8 "github.com/patriceckhart/zot/packages/provider"
9)
10
11func TestLiveInteractiveAgentUsesReplacementAgentForSessionResume(t *testing.T) {
12 startup := core.NewAgent(nil, "startup-model", "", nil)
13 startup.SetMessages([]provider.Message{{
14 Role: provider.RoleUser,
15 Content: []provider.Content{provider.TextBlock{Text: "startup transcript"}},
16 }})
17
18 replacement := core.NewAgent(nil, "replacement-model", "", nil)
19 iv := modes.NewInteractive(modes.InteractiveConfig{Agent: replacement})
20
21 resumed := []provider.Message{{
22 Role: provider.RoleUser,
23 Content: []provider.Content{provider.TextBlock{Text: "resumed transcript"}},
24 }}
25 liveInteractiveAgent(iv, startup).SetMessages(resumed)
26
27 if got := firstMessageText(replacement.Messages()); got != "resumed transcript" {
28 t.Fatalf("replacement agent transcript = %q, want resumed transcript", got)
29 }
30 if got := firstMessageText(startup.Messages()); got != "startup transcript" {
31 t.Fatalf("startup agent transcript changed to %q", got)
32 }
33}
34
35func TestBindAgentSession(t *testing.T) {
36 ag := core.NewAgent(nil, "@preset/flash", "", nil)
37 bindAgentSession(ag, &core.Session{ID: "sess-xyz"})
38 if ag.SessionID != "sess-xyz" {
39 t.Fatalf("SessionID = %q; want sess-xyz", ag.SessionID)
40 }
41 bindAgentSession(ag, &core.Session{ID: "other"})
42 if ag.SessionID != "other" {
43 t.Fatalf("SessionID = %q; want other after rebind", ag.SessionID)
44 }
45 bindAgentSession(ag, nil)
46 if ag.SessionID != "other" {
47 t.Fatalf("nil session mutated SessionID to %q", ag.SessionID)
48 }
49}
50
51func TestLiveInteractiveAgentFallsBackBeforeInteractiveConstruction(t *testing.T) {
52 startup := core.NewAgent(nil, "startup-model", "", nil)
53 if got := liveInteractiveAgent(nil, startup); got != startup {
54 t.Fatalf("fallback agent = %p, want %p", got, startup)
55 }
56}
57
58func firstMessageText(messages []provider.Message) string {
59 if len(messages) == 0 || len(messages[0].Content) == 0 {
60 return ""
61 }
62 text, _ := messages[0].Content[0].(provider.TextBlock)
63 return text.Text
64}