1
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
package llm
2
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
3
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
import (
4
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"context"
5
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"encoding/json"
6
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"net/http"
7
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"net/http/httptest"
8
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
"testing"
9
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
)
10
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
11
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
func TestOpenAISummarizeRetriesWithMaxCompletionTokens(t *testing.T) {
12
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
t.Helper()
13
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
14
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
requests := 0
15
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
16
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
requests++
17
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
18
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
var body map[string]any
19
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if err := json.NewDecoder(r.Body).Decode(&body); err != nil {
20
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
t.Fatalf("decode request: %v", err)
21
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
22
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
23
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
switch requests {
24
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
case 1:
25
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if _, ok := body["max_tokens"]; !ok {
26
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
t.Fatalf("first request missing max_tokens: %#v", body)
27
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
28
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
w.WriteHeader(http.StatusBadRequest)
29
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_, _ = w.Write([]byte(`{"error":{"message":"Unsupported parameter: 'max_tokens' is not supported with this model. Use 'max_completion_tokens' instead.","param":"max_tokens"}}`))
30
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
case 2:
31
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if _, ok := body["max_completion_tokens"]; !ok {
32
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
t.Fatalf("second request missing max_completion_tokens: %#v", body)
33
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
34
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if _, ok := body["max_tokens"]; ok {
35
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
t.Fatalf("second request still included max_tokens: %#v", body)
36
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
37
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
_, _ = w.Write([]byte(`{"choices":[{"message":{"content":"relay smoke test succeeded"}}]}`))
38
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
default:
39
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
t.Fatalf("unexpected extra request %d", requests)
40
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
41
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}))
42
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
defer srv.Close()
43
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
44
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
p := newOpenAIProvider("test-key", srv.URL, "gpt-5.4-mini", srv.Client())
45
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
got, err := p.Summarize(context.Background(), "test prompt")
46
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if err != nil {
47
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
t.Fatalf("Summarize returned error: %v", err)
48
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
49
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if got != "relay smoke test succeeded" {
50
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
t.Fatalf("Summarize = %q, want %q", got, "relay smoke test succeeded")
51
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
52
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if requests != 2 {
53
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
t.Fatalf("request count = %d, want 2", requests)
54
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
55
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
56
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
57
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
func TestShouldRetryWithMaxCompletionTokens(t *testing.T) {
58
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
t.Helper()
59
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
60
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
body := []byte(`{"error":{"message":"Unsupported parameter: 'max_tokens' is not supported with this model. Use 'max_completion_tokens' instead.","param":"max_tokens"}}`)
61
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if !shouldRetryWithMaxCompletionTokens(http.StatusBadRequest, body) {
62
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
t.Fatalf("expected retry to be enabled")
63
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
64
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
if shouldRetryWithMaxCompletionTokens(http.StatusUnauthorized, body) {
65
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
t.Fatalf("unexpected retry on unauthorized response")
66
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
67
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!
}
68
{ copied = false; pop = false }, 1000)" :class="copied && 'copied'">
Copy link Copied!