Fork tasks from snapshots; snapshot only when text follows tool calls
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
package agents
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"g.fc.run/misc/byre/internal/api"
|
||||
)
|
||||
|
||||
func TestForkPoint(t *testing.T) {
|
||||
s1, s2 := "s1", "s2"
|
||||
ev := func(seq int64, sess *string, kind string, payload map[string]any) api.Event {
|
||||
return api.Event{Seq: seq, AgentSessionId: sess, Kind: kind, Payload: payload}
|
||||
}
|
||||
events := []api.Event{
|
||||
ev(1, &s1, "user.message", map[string]any{"text": "go"}),
|
||||
ev(2, &s1, "agent.message", map[string]any{"text": "on it", "vendor_uuid": "u-msg"}),
|
||||
ev(3, &s1, "agent.tool_call", map[string]any{"id": "a", "vendor_uuid": "u-call-a"}),
|
||||
ev(4, &s1, "agent.tool_call", map[string]any{"id": "b", "vendor_uuid": "u-call-b"}),
|
||||
ev(5, &s1, "agent.tool_call", map[string]any{"id": "x", "parent_tool_use_id": "b"}),
|
||||
ev(6, nil, "snapshot.created", map[string]any{"n": 1}),
|
||||
ev(7, &s1, "agent.tool_result", map[string]any{"tool_use_id": "a", "vendor_uuid": "u-res-a"}),
|
||||
ev(8, &s2, "agent.tool_result", map[string]any{"tool_use_id": "b", "vendor_uuid": "u-other"}),
|
||||
ev(9, &s1, "agent.tool_result", map[string]any{"tool_use_id": "b", "vendor_uuid": "u-res-b"}),
|
||||
ev(10, &s1, "agent.message", map[string]any{"text": "done", "vendor_uuid": "u-done"}),
|
||||
ev(11, &s1, "turn.ended", map[string]any{}),
|
||||
ev(12, &s1, "user.message", map[string]any{"text": "more"}),
|
||||
ev(13, &s1, "agent.tool_call", map[string]any{"id": "c", "vendor_uuid": "u-call-c"}),
|
||||
ev(14, &s1, "agent.tool_result", map[string]any{"tool_use_id": "c", "vendor_uuid": "u-res-c"}),
|
||||
}
|
||||
|
||||
for _, c := range []struct {
|
||||
seq int64
|
||||
want string
|
||||
}{
|
||||
{1, ""},
|
||||
{2, "u-msg"},
|
||||
{3, "u-res-b"},
|
||||
{5, "u-res-b"},
|
||||
{9, "u-res-b"},
|
||||
{11, "u-done"},
|
||||
{12, "u-done"},
|
||||
{13, "u-res-c"},
|
||||
} {
|
||||
got := forkPoint(events, s1, c.seq)
|
||||
if got != c.want {
|
||||
t.Errorf("forkPoint at seq %d = %q, want %q", c.seq, got, c.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user