mirror of
https://github.com/esengine/DeepSeek-Reasonix.git
synced 2026-11-07 10:45:59 -10:00
66 lines
2.7 KiB
Go
66 lines
2.7 KiB
Go
package responses
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"reflect"
|
|
"testing"
|
|
|
|
"reasonix/internal/contract/provider"
|
|
)
|
|
|
|
func TestSummaryKeepsSchemasWithoutAContinuationOrToolUse(t *testing.T) {
|
|
c := &client{model: "m", mode: "stateful", webSearch: true, lastResponseID: "main-response"}
|
|
prefix := []provider.Message{{Role: provider.RoleUser, Content: "task"}, {Role: provider.RoleAssistant, Content: "finding"}}
|
|
c.expectedPrefixDigest = c.conversationDigest(prefix)
|
|
req := provider.Request{Messages: append(prefix, provider.Message{Role: provider.RoleUser, Content: "summarize"}), Tools: []provider.ToolSchema{{Name: "read_file"}}}
|
|
normal, used, _ := c.buildRequestBody(req)
|
|
if !used {
|
|
t.Fatal("fixture did not exercise the normal continuation")
|
|
}
|
|
req.Summary = true
|
|
summary, used, _ := c.buildRequestBody(req)
|
|
if used || summary["previous_response_id"] != nil || summary["tool_choice"] != "none" || !reflect.DeepEqual(summary["tools"], normal["tools"]) {
|
|
t.Fatalf("summary changed tools or reused a live continuation: %+v", summary)
|
|
}
|
|
}
|
|
|
|
func TestSummaryDoesNotReplaceTheMainResponseContinuation(t *testing.T) {
|
|
for _, invalid := range []bool{false, true} {
|
|
t.Run(fmt.Sprint("invalid=", invalid), func(t *testing.T) {
|
|
var bodies []map[string]any
|
|
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
var body map[string]any
|
|
if err := json.NewDecoder(r.Body).Decode(&body); err != nil {
|
|
t.Error(err)
|
|
}
|
|
bodies = append(bodies, body)
|
|
if invalid && len(bodies) == 2 {
|
|
writeEvents(w, `{"type":"response.completed","response":{"id":"poisoned","output":[{"type":"function_call","call_id":"c","name":"echo","arguments":{}}]}}`)
|
|
return
|
|
}
|
|
writeEvents(w, `{"type":"response.output_text.delta","item_id":"msg","delta":"answer"}`,
|
|
fmt.Sprintf(`{"type":"response.completed","response":{"id":"r%d"}}`, len(bodies)))
|
|
}))
|
|
defer srv.Close()
|
|
p := New(Config{Name: "relay", BaseURL: srv.URL, Model: "m"})
|
|
req := provider.Request{Messages: []provider.Message{{Role: provider.RoleUser, Content: "one"}}}
|
|
collect(t, p, req)
|
|
req.Messages = append(req.Messages, provider.Message{Role: provider.RoleAssistant, Content: "answer"}, provider.Message{Role: provider.RoleUser, Content: "summarize"})
|
|
req.Summary = true
|
|
chunks := collect(t, p, req)
|
|
if invalid {
|
|
assertTerminalFailure(t, chunks, provider.ErrInvalidFunctionCall)
|
|
}
|
|
req.Summary = false
|
|
req.Messages[len(req.Messages)-1].Content = "two"
|
|
collect(t, p, req)
|
|
if bodies[1]["previous_response_id"] != nil || bodies[2]["previous_response_id"] != "r1" {
|
|
t.Fatalf("summary replaced the main continuation: %+v", bodies)
|
|
}
|
|
})
|
|
}
|
|
}
|