Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

101 lignes
2.7KB

  1. package llmruntime
  2. import (
  3. "context"
  4. "encoding/json"
  5. "net/http"
  6. "net/http/httptest"
  7. "strings"
  8. "testing"
  9. "time"
  10. )
  11. func TestOpenAICompatibleClient_ForwardsTemperatureAndMaxTokens(t *testing.T) {
  12. t.Parallel()
  13. var got map[string]any
  14. server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  15. _ = json.NewDecoder(r.Body).Decode(&got)
  16. _, _ = w.Write([]byte(`{"choices":[{"message":{"content":"ok"}}]}`))
  17. }))
  18. defer server.Close()
  19. factory := NewFactory(2 * time.Second)
  20. client, err := factory.ClientFor("openai")
  21. if err != nil {
  22. t.Fatalf("client creation failed: %v", err)
  23. }
  24. temperature := 0.77
  25. maxTokens := 777
  26. _, err = client.Generate(context.Background(), Request{
  27. Provider: "openai",
  28. BaseURL: server.URL,
  29. Model: "gpt-5.4",
  30. APIKey: "key",
  31. Temperature: &temperature,
  32. MaxTokens: &maxTokens,
  33. SystemPrompt: "system",
  34. UserPrompt: "user",
  35. })
  36. if err != nil {
  37. t.Fatalf("generate failed: %v", err)
  38. }
  39. gotTemperature, _ := got["temperature"].(float64)
  40. if gotTemperature != 0.77 {
  41. t.Fatalf("unexpected temperature: %v", gotTemperature)
  42. }
  43. if _, exists := got["max_tokens"]; exists {
  44. t.Fatalf("did not expect max_tokens for openai gpt-5 models")
  45. }
  46. gotMaxCompletionTokens, _ := got["max_completion_tokens"].(float64)
  47. if gotMaxCompletionTokens != 777 {
  48. t.Fatalf("unexpected max_completion_tokens: %v", gotMaxCompletionTokens)
  49. }
  50. }
  51. func TestOpenAICompatibleClient_UsesMaxTokensForOlderOpenAIModels(t *testing.T) {
  52. t.Parallel()
  53. var got map[string]any
  54. server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
  55. _ = json.NewDecoder(r.Body).Decode(&got)
  56. _, _ = w.Write([]byte(`{"choices":[{"message":{"content":"ok"}}]}`))
  57. }))
  58. defer server.Close()
  59. factory := NewFactory(2 * time.Second)
  60. client, err := factory.ClientFor("openai")
  61. if err != nil {
  62. t.Fatalf("client creation failed: %v", err)
  63. }
  64. maxTokens := 512
  65. _, err = client.Generate(context.Background(), Request{
  66. Provider: "openai",
  67. BaseURL: server.URL,
  68. Model: "gpt-4.1",
  69. APIKey: "key",
  70. MaxTokens: &maxTokens,
  71. SystemPrompt: "system",
  72. UserPrompt: "user",
  73. })
  74. if err != nil {
  75. t.Fatalf("generate failed: %v", err)
  76. }
  77. if _, exists := got["max_completion_tokens"]; exists {
  78. t.Fatalf("did not expect max_completion_tokens for non-gpt-5 model")
  79. }
  80. gotMaxTokens, _ := got["max_tokens"].(float64)
  81. if gotMaxTokens != 512 {
  82. t.Fatalf("unexpected max_tokens: %v", gotMaxTokens)
  83. }
  84. }
  85. func TestExtractProviderErrorMessage(t *testing.T) {
  86. t.Parallel()
  87. msg := extractProviderErrorMessage([]byte(`{"error":{"message":"invalid key"}}`))
  88. if !strings.Contains(msg, "invalid key") {
  89. t.Fatalf("unexpected message: %q", msg)
  90. }
  91. }