Files
poimen-workflows/action/llm/client_test.go
T

101 lines
2.4 KiB
Go
Raw Normal View History

package llm
import (
"context"
"testing"
"github.com/rockliang/poimen/workflows/statemachine"
)
func TestNewClient(t *testing.T) {
client, err := NewClient()
if err != nil {
t.Fatalf("failed to create client: %v", err)
}
if client == nil {
t.Fatal("client is nil")
}
}
func TestHealthCheck(t *testing.T) {
client, err := NewClient()
if err != nil {
t.Fatalf("failed to create client: %v", err)
}
// Skip if local LLM API not available
err = client.HealthCheck(context.Background())
if err != nil {
t.Logf("local LLM API not available (expected in test env): %v", err)
t.Skip("local LLM API health check failed - skipping integration test")
}
}
func TestSupportedModels(t *testing.T) {
tests := []struct {
model string
expected bool
}{
{"reasoning", true},
{"ornith:35b", true},
{"ornith:13b", true},
{"qwen2.5:3b", true},
{"unsupported-model", false},
{"", false},
}
for _, tt := range tests {
t.Run(tt.model, func(t *testing.T) {
if SupportedModels[tt.model] != tt.expected {
t.Errorf("model %q: expected %v, got %v", tt.model, tt.expected, SupportedModels[tt.model])
}
})
}
}
func TestCreateMessageValidation(t *testing.T) {
client, _ := NewClient()
tests := []struct {
name string
modelID string
wantErr bool
}{
{"valid reasoning", "reasoning", true}, // Will fail to connect, but validates model
{"valid ornith", "ornith:35b", true}, // Will fail to connect, but validates model
{"invalid model", "invalid-model", false}, // Should fail validation
{"empty model", "", false}, // Should fail validation
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
in := MessageInput{
Model: statemachine.ModelSpec{
ModelID: tt.modelID,
},
SystemPrompt: "test",
Messages: []MessageParam{
{Role: "user", Content: "test"},
},
}
_, err := client.CreateMessage(context.Background(), in)
hasErr := err != nil
if hasErr != tt.wantErr {
if tt.wantErr {
t.Logf("expected error for model %q (likely API not reachable): %v", tt.modelID, err)
} else if !hasErr {
t.Errorf("expected error for invalid model %q, but got none", tt.modelID)
}
}
})
}
}
func TestLocalLLMBaseURL(t *testing.T) {
if LocalLLMBaseURL != "https://api.riotpiao.com" {
t.Errorf("expected base URL https://api.riotpiao.com, got %s", LocalLLMBaseURL)
}
}