|
- package llmruntime
-
- import (
- "context"
- "encoding/json"
- "net/http"
- "net/http/httptest"
- "strings"
- "testing"
- "time"
- )
-
- func TestOpenAICompatibleClient_ForwardsTemperatureAndMaxTokens(t *testing.T) {
- t.Parallel()
-
- var got map[string]any
- server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- _ = json.NewDecoder(r.Body).Decode(&got)
- _, _ = w.Write([]byte(`{"choices":[{"message":{"content":"ok"}}]}`))
- }))
- defer server.Close()
-
- factory := NewFactory(2 * time.Second)
- client, err := factory.ClientFor("openai")
- if err != nil {
- t.Fatalf("client creation failed: %v", err)
- }
- temperature := 0.77
- maxTokens := 777
- _, err = client.Generate(context.Background(), Request{
- Provider: "openai",
- BaseURL: server.URL,
- Model: "gpt-5.4",
- APIKey: "key",
- Temperature: &temperature,
- MaxTokens: &maxTokens,
- SystemPrompt: "system",
- UserPrompt: "user",
- })
- if err != nil {
- t.Fatalf("generate failed: %v", err)
- }
- gotTemperature, _ := got["temperature"].(float64)
- if gotTemperature != 0.77 {
- t.Fatalf("unexpected temperature: %v", gotTemperature)
- }
- if _, exists := got["max_tokens"]; exists {
- t.Fatalf("did not expect max_tokens for openai gpt-5 models")
- }
- gotMaxCompletionTokens, _ := got["max_completion_tokens"].(float64)
- if gotMaxCompletionTokens != 777 {
- t.Fatalf("unexpected max_completion_tokens: %v", gotMaxCompletionTokens)
- }
- }
-
- func TestOpenAICompatibleClient_UsesMaxTokensForOlderOpenAIModels(t *testing.T) {
- t.Parallel()
-
- var got map[string]any
- server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- _ = json.NewDecoder(r.Body).Decode(&got)
- _, _ = w.Write([]byte(`{"choices":[{"message":{"content":"ok"}}]}`))
- }))
- defer server.Close()
-
- factory := NewFactory(2 * time.Second)
- client, err := factory.ClientFor("openai")
- if err != nil {
- t.Fatalf("client creation failed: %v", err)
- }
- maxTokens := 512
- _, err = client.Generate(context.Background(), Request{
- Provider: "openai",
- BaseURL: server.URL,
- Model: "gpt-4.1",
- APIKey: "key",
- MaxTokens: &maxTokens,
- SystemPrompt: "system",
- UserPrompt: "user",
- })
- if err != nil {
- t.Fatalf("generate failed: %v", err)
- }
- if _, exists := got["max_completion_tokens"]; exists {
- t.Fatalf("did not expect max_completion_tokens for non-gpt-5 model")
- }
- gotMaxTokens, _ := got["max_tokens"].(float64)
- if gotMaxTokens != 512 {
- t.Fatalf("unexpected max_tokens: %v", gotMaxTokens)
- }
- }
-
- func TestExtractProviderErrorMessage(t *testing.T) {
- t.Parallel()
-
- msg := extractProviderErrorMessage([]byte(`{"error":{"message":"invalid key"}}`))
- if !strings.Contains(msg, "invalid key") {
- t.Fatalf("unexpected message: %q", msg)
- }
- }
|