67 lines
2.1 KiB
Go
67 lines
2.1 KiB
Go
package runner
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/easyai/easyai-ai-gateway/apps/api/internal/clients"
|
|
"github.com/easyai/easyai-ai-gateway/apps/api/internal/store"
|
|
)
|
|
|
|
type namedClient string
|
|
|
|
func (namedClient) Run(context.Context, clients.Request) (clients.Response, error) {
|
|
return clients.Response{}, nil
|
|
}
|
|
|
|
func TestValidateRequestAcceptsOpenAIReasoningEffort(t *testing.T) {
|
|
for _, effort := range []string{"none", "minimal", "low", "medium", "high", "xhigh"} {
|
|
t.Run(effort, func(t *testing.T) {
|
|
err := validateRequest("chat.completions", map[string]any{
|
|
"messages": []any{map[string]any{"role": "user", "content": "ping"}},
|
|
"reasoning_effort": effort,
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("expected %s to be accepted: %v", effort, err)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestValidateRequestRejectsNonOpenAIReasoningEffort(t *testing.T) {
|
|
for _, effort := range []string{"max", "auto"} {
|
|
t.Run(effort, func(t *testing.T) {
|
|
err := validateRequest("chat.completions", map[string]any{
|
|
"messages": []any{map[string]any{"role": "user", "content": "ping"}},
|
|
"reasoning_effort": effort,
|
|
})
|
|
if err == nil {
|
|
t.Fatalf("expected %s to be rejected", effort)
|
|
}
|
|
if clients.ErrorCode(err) != "invalid_parameter" || !strings.Contains(err.Error(), clients.OpenAIReasoningEffortValidationMessage) {
|
|
t.Fatalf("unexpected validation error for %s: %T %v", effort, err, err)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestClientForMapsGoogleGeminiSpecToGeminiClient(t *testing.T) {
|
|
service := &Service{clients: map[string]clients.Client{
|
|
"gemini": namedClient("gemini"),
|
|
"openai": namedClient("openai"),
|
|
}}
|
|
|
|
candidates := []store.RuntimeModelCandidate{
|
|
{SpecType: "google-gemini"},
|
|
{SpecType: "openai", Provider: "gemini-openai"},
|
|
{SpecType: "openai", BaseURL: "https://generativelanguage.googleapis.com/v1beta/openai"},
|
|
}
|
|
for _, candidate := range candidates {
|
|
client := service.clientFor(candidate, false)
|
|
if client != namedClient("gemini") {
|
|
t.Fatalf("Gemini candidate should use gemini client, candidate=%+v got %T %[2]v", candidate, client)
|
|
}
|
|
}
|
|
}
|