mirror of
https://github.com/CJackHwang/ds2api.git
synced 2026-05-06 01:15:29 +08:00
65 lines
1.6 KiB
Go
65 lines
1.6 KiB
Go
package openai
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
)
|
|
|
|
func TestBuildResponseObjectToolCallsFollowChatShape(t *testing.T) {
|
|
obj := BuildResponseObject(
|
|
"resp_test",
|
|
"gpt-4o",
|
|
"prompt",
|
|
"",
|
|
`{"tool_calls":[{"name":"search","input":{"q":"golang"}}]}`,
|
|
[]string{"search"},
|
|
)
|
|
|
|
outputText, _ := obj["output_text"].(string)
|
|
if outputText != "" {
|
|
t.Fatalf("expected output_text to be hidden for tool calls, got %q", outputText)
|
|
}
|
|
|
|
output, _ := obj["output"].([]any)
|
|
if len(output) != 1 {
|
|
t.Fatalf("expected one tool_calls wrapper, got %#v", obj["output"])
|
|
}
|
|
|
|
first, _ := output[0].(map[string]any)
|
|
if first["type"] != "tool_calls" {
|
|
t.Fatalf("expected first output item type tool_calls, got %#v", first["type"])
|
|
}
|
|
var toolCalls []map[string]any
|
|
switch v := first["tool_calls"].(type) {
|
|
case []map[string]any:
|
|
toolCalls = v
|
|
case []any:
|
|
toolCalls = make([]map[string]any, 0, len(v))
|
|
for _, item := range v {
|
|
m, _ := item.(map[string]any)
|
|
if m != nil {
|
|
toolCalls = append(toolCalls, m)
|
|
}
|
|
}
|
|
}
|
|
if len(toolCalls) != 1 {
|
|
t.Fatalf("expected one tool call, got %#v", first["tool_calls"])
|
|
}
|
|
tc := toolCalls[0]
|
|
if tc["type"] != "function" || tc["id"] == "" {
|
|
t.Fatalf("unexpected tool call shape: %#v", tc)
|
|
}
|
|
fn, _ := tc["function"].(map[string]any)
|
|
if fn["name"] != "search" {
|
|
t.Fatalf("unexpected function name: %#v", fn["name"])
|
|
}
|
|
argsRaw, _ := fn["arguments"].(string)
|
|
var args map[string]any
|
|
if err := json.Unmarshal([]byte(argsRaw), &args); err != nil {
|
|
t.Fatalf("arguments should be valid json string, got=%q err=%v", argsRaw, err)
|
|
}
|
|
if args["q"] != "golang" {
|
|
t.Fatalf("unexpected arguments: %#v", args)
|
|
}
|
|
}
|