8 "github.com/stretchr/testify/require"
11 func TestChainReturnsTheRepliesOfTheFinalAnswer(t *testing.T) {
12 server := newModelFake(t)
13 server.reply = func(w http.ResponseWriter, call ModelFakeCall) {
15 modelWriteEvents(w, modelCompletedEvent([]any{
16 modelMessageItem("Looking."),
17 modelFunctionCallItem("fc_1", "call_1", "shell", `{"command":"echo hi"}`),
23 modelWriteEvents(w, modelCompletedEvent([]any{
24 modelMessageItem("It said hi."),
25 modelMessageItem("Done."),
29 memory, err := openMemory(t.Context(), t.TempDir(), newTestClock().Now, newFakeSummarizer())
30 require.NoError(t, err)
33 require.NoError(t, memory.Close())
37 client: newModelClient(server.URL, ModelAPIKey(modelTestKey), "agent-key", filepath.Join(t.TempDir(), "usage.jsonl")),
41 subagents: newTestSubagents(t),
44 request: ModelRequest{
48 take: func() []Message {
53 text, err := chain.Run(t.Context(), []any{modelUserMessage("Run echo hi.")})
54 require.NoError(t, err)
55 require.Equal(t, "It said hi.\n\nDone.", text)
56 require.Equal(t, 2, server.Calls())
59 for id := range memory.Len() {
60 message, err := memory.Message(id)
61 require.NoError(t, err)
63 kinds = append(kinds, message.Kind)
66 require.Equal(t, []string{"reply", "tool", "echo", "reply", "reply"}, kinds)