mirror of
https://github.com/YspCoder/clawgo.git
synced 2026-04-14 02:37:29 +08:00
43 lines
1.3 KiB
Go
43 lines
1.3 KiB
Go
package providers
|
|
|
|
import "testing"
|
|
|
|
func TestToResponsesInputItemsWithState_DropsOrphanToolOutputs(t *testing.T) {
|
|
pending := map[string]struct{}{}
|
|
|
|
orphan := Message{Role: "tool", ToolCallID: "call-orphan", Content: "orphan output"}
|
|
if got := toResponsesInputItemsWithState(orphan, pending); len(got) != 0 {
|
|
t.Fatalf("expected orphan tool output to be dropped, got: %#v", got)
|
|
}
|
|
|
|
assistant := Message{
|
|
Role: "assistant",
|
|
ToolCalls: []ToolCall{{
|
|
ID: "call-1",
|
|
Name: "read",
|
|
Arguments: map[string]interface{}{
|
|
"path": "README.md",
|
|
},
|
|
}},
|
|
}
|
|
items := toResponsesInputItemsWithState(assistant, pending)
|
|
if len(items) == 0 {
|
|
t.Fatalf("assistant tool call should produce responses items")
|
|
}
|
|
if _, ok := pending["call-1"]; !ok {
|
|
t.Fatalf("assistant tool call id should be tracked as pending")
|
|
}
|
|
|
|
matched := Message{Role: "tool", ToolCallID: "call-1", Content: "file content"}
|
|
matchedItems := toResponsesInputItemsWithState(matched, pending)
|
|
if len(matchedItems) != 1 {
|
|
t.Fatalf("expected matched tool output item, got %#v", matchedItems)
|
|
}
|
|
if matchedItems[0]["type"] != "function_call_output" {
|
|
t.Fatalf("expected function_call_output item, got %#v", matchedItems[0])
|
|
}
|
|
if _, ok := pending["call-1"]; ok {
|
|
t.Fatalf("matched tool output should clear pending call id")
|
|
}
|
|
}
|