feat: add context.Context + unexport client fields
CI / test (pull_request) Successful in 13s
CI / review (gpt-5, sonnet, SONNET_REVIEW_TOKEN) (pull_request) Successful in 54s
CI / review (gpt-5-mini, gpt, GPT_REVIEW_TOKEN) (pull_request) Successful in 1m22s

REVIEW.md findings 1-4, 14:
- All Gitea client methods now accept context.Context as first param
- All LLM client methods now accept context.Context as first param
- Use http.NewRequestWithContext for cancellation/timeout support
- Main uses 3-minute timeout context for all operations
- Unexport Client struct fields (baseURL, token, apiKey, etc.)
- Use bytes.NewReader instead of strings.NewReader(string(...))
This commit is contained in:
Rodin
2026-05-01 12:31:41 -07:00
parent f77ea171c3
commit 27e0056f29
6 changed files with 112 additions and 99 deletions
+12 -11
View File
@@ -1,6 +1,7 @@
package llm
import (
"context"
"encoding/json"
"net/http"
"net/http/httptest"
@@ -51,7 +52,7 @@ func TestComplete_Success(t *testing.T) {
defer server.Close()
client := NewClient(server.URL, "test-key", "gpt-4")
got, err := client.Complete([]Message{{Role: "user", Content: "Hi"}})
got, err := client.Complete(context.Background(), []Message{{Role: "user", Content: "Hi"}})
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
@@ -68,7 +69,7 @@ func TestComplete_APIError(t *testing.T) {
defer server.Close()
client := NewClient(server.URL, "test-key", "gpt-4")
_, err := client.Complete([]Message{{Role: "user", Content: "Hi"}})
_, err := client.Complete(context.Background(), []Message{{Role: "user", Content: "Hi"}})
if err == nil {
t.Fatal("expected error for 429, got nil")
}
@@ -82,7 +83,7 @@ func TestComplete_NoChoices(t *testing.T) {
defer server.Close()
client := NewClient(server.URL, "test-key", "gpt-4")
_, err := client.Complete([]Message{{Role: "user", Content: "Hi"}})
_, err := client.Complete(context.Background(), []Message{{Role: "user", Content: "Hi"}})
if err == nil {
t.Fatal("expected error for no choices, got nil")
}
@@ -95,7 +96,7 @@ func TestComplete_BadJSON(t *testing.T) {
defer server.Close()
client := NewClient(server.URL, "test-key", "gpt-4")
_, err := client.Complete([]Message{{Role: "user", Content: "Hi"}})
_, err := client.Complete(context.Background(), []Message{{Role: "user", Content: "Hi"}})
if err == nil {
t.Fatal("expected error for bad JSON, got nil")
}
@@ -103,7 +104,7 @@ func TestComplete_BadJSON(t *testing.T) {
func TestComplete_ServerDown(t *testing.T) {
client := NewClient("http://127.0.0.1:1", "test-key", "gpt-4")
_, err := client.Complete([]Message{{Role: "user", Content: "Hi"}})
_, err := client.Complete(context.Background(), []Message{{Role: "user", Content: "Hi"}})
if err == nil {
t.Fatal("expected error for connection refused, got nil")
}
@@ -111,16 +112,16 @@ func TestComplete_ServerDown(t *testing.T) {
func TestWithTemperature(t *testing.T) {
client := NewClient("http://example.com", "key", "model")
if client.Temperature != 0 {
t.Errorf("expected initial temperature 0, got %f", client.Temperature)
if client.temperature != 0 {
t.Errorf("expected initial temperature 0, got %f", client.temperature)
}
result := client.WithTemperature(0.7)
if result != client {
t.Error("WithTemperature should return the same client for chaining")
}
if client.Temperature != 0.7 {
t.Errorf("expected temperature 0.7, got %f", client.Temperature)
if client.temperature != 0.7 {
t.Errorf("expected temperature 0.7, got %f", client.temperature)
}
}
@@ -147,7 +148,7 @@ func TestComplete_TemperatureOmittedWhenZero(t *testing.T) {
defer server.Close()
client := NewClient(server.URL, "key", "model")
_, err := client.Complete([]Message{{Role: "user", Content: "Hi"}})
_, err := client.Complete(context.Background(), []Message{{Role: "user", Content: "Hi"}})
if err != nil {
t.Fatalf("unexpected error: %v", err)
}
@@ -180,7 +181,7 @@ func TestComplete_TemperatureIncludedWhenSet(t *testing.T) {
defer server.Close()
client := NewClient(server.URL, "key", "model").WithTemperature(0.7)
_, err := client.Complete([]Message{{Role: "user", Content: "Hi"}})
_, err := client.Complete(context.Background(), []Message{{Role: "user", Content: "Hi"}})
if err != nil {
t.Fatalf("unexpected error: %v", err)
}