feat(session,llm): restore session runtime on resume; align Responses API details
This commit is contained in:
@@ -59,12 +59,15 @@ func TestBuildResponsesRequest(t *testing.T) {
|
||||
if raw["model"] != "gpt-test" || raw["stream"] != true {
|
||||
t.Fatalf("model/stream = %#v / %#v", raw["model"], raw["stream"])
|
||||
}
|
||||
if raw["instructions"] != "be concise" {
|
||||
t.Fatalf("instructions = %#v", raw["instructions"])
|
||||
}
|
||||
if raw["tool_choice"] != "auto" {
|
||||
t.Fatalf("tool_choice = %#v", raw["tool_choice"])
|
||||
}
|
||||
|
||||
input, ok := raw["input"].([]any)
|
||||
if !ok || len(input) != 6 {
|
||||
if !ok || len(input) != 5 {
|
||||
t.Fatalf("input = %#v", raw["input"])
|
||||
}
|
||||
checkInputItem := func(index int, wantType, wantKey, wantValue string) {
|
||||
@@ -80,16 +83,15 @@ func TestBuildResponsesRequest(t *testing.T) {
|
||||
t.Fatalf("input[%d].type = %#v, want %q", index, item["type"], wantType)
|
||||
}
|
||||
}
|
||||
checkInputItem(0, "", "role", "system")
|
||||
checkInputItem(1, "", "role", "user")
|
||||
checkInputItem(2, "", "role", "assistant")
|
||||
checkInputItem(3, "function_call", "call_id", "call_1")
|
||||
checkInputItem(4, "function_call_output", "call_id", "call_1")
|
||||
checkInputItem(5, "", "role", "assistant")
|
||||
if item := input[3].(map[string]any); item["name"] != "file_read" || item["arguments"] != `{"path":"README.md"}` {
|
||||
checkInputItem(0, "", "role", "user")
|
||||
checkInputItem(1, "", "role", "assistant")
|
||||
checkInputItem(2, "function_call", "call_id", "call_1")
|
||||
checkInputItem(3, "function_call_output", "call_id", "call_1")
|
||||
checkInputItem(4, "", "role", "assistant")
|
||||
if item := input[2].(map[string]any); item["name"] != "file_read" || item["arguments"] != `{"path":"README.md"}` {
|
||||
t.Fatalf("function_call item = %#v", item)
|
||||
}
|
||||
if item := input[4].(map[string]any); item["output"] != "contents" {
|
||||
if item := input[3].(map[string]any); item["output"] != "contents" {
|
||||
t.Fatalf("function_call_output item = %#v", item)
|
||||
}
|
||||
|
||||
@@ -117,6 +119,36 @@ func TestBuildResponsesRequest(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestResponsesInstructionsCombinesSystemMessages(t *testing.T) {
|
||||
payload := buildResponsesRequest(ChatRequest{
|
||||
Model: "gpt-test",
|
||||
Messages: []Message{
|
||||
{Role: RoleSystem, Content: "first instruction"},
|
||||
{Role: RoleUser, Content: "hi"},
|
||||
{Role: RoleSystem, Content: "second instruction"},
|
||||
},
|
||||
})
|
||||
data, err := json.Marshal(payload)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
var raw map[string]any
|
||||
if err := json.Unmarshal(data, &raw); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if raw["instructions"] != "first instruction\n\nsecond instruction" {
|
||||
t.Fatalf("instructions = %#v", raw["instructions"])
|
||||
}
|
||||
input, ok := raw["input"].([]any)
|
||||
if !ok || len(input) != 1 {
|
||||
t.Fatalf("input = %#v", raw["input"])
|
||||
}
|
||||
item, ok := input[0].(map[string]any)
|
||||
if !ok || item["role"] != "user" {
|
||||
t.Fatalf("input[0] = %#v", input[0])
|
||||
}
|
||||
}
|
||||
|
||||
func TestOpenAIResponsesClientStreamsContentAndToolCalls(t *testing.T) {
|
||||
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
if r.URL.Path != "/v1/responses" {
|
||||
|
||||
Reference in New Issue
Block a user