zai-proxy/proxy/cmd/evaluate/main.go
jedarden dee82a76a3 chore: update module paths and add evaluation package
- proxy/go.mod: github.com/ardenone/zai-proxy → git.ardenone.com/jedarden/zai-proxy
- dashboard/go.mod: github.com/ardenone/ardenone-cluster/containers/zai-proxy-dashboard → git.ardenone.com/jedarden/zai-proxy/dashboard
- Update all Go import paths in proxy/ and dashboard/ to match new module paths
- Add proxy/evaluation/ package (was missing from initial commit)
- Add docs/plan/plan.md with architecture, security model, telemetry design, and migration checklist

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-16 16:03:50 -04:00

94 lines
3 KiB
Go

package main
import (
"flag"
"fmt"
"log"
"os"
"git.ardenone.com/jedarden/zai-proxy/evaluation"
)
func main() {
// Command-line flags
zaiEndpoint := flag.String("zai-endpoint", "http://localhost:8080/v1/messages", "Z.AI proxy endpoint")
anthropicEndpoint := flag.String("anthropic-endpoint", "https://api.anthropic.com/v1/messages", "Anthropic API endpoint")
zaiKey := flag.String("zai-key", os.Getenv("ZAI_API_KEY"), "Z.AI API key (or set ZAI_API_KEY env var)")
anthropicKey := flag.String("anthropic-key", os.Getenv("ANTHROPIC_API_KEY"), "Anthropic API key (or set ANTHROPIC_API_KEY env var)")
outputFile := flag.String("output", "evaluation-report.txt", "Output file for report")
jsonOutput := flag.String("json-output", "", "JSON output file (optional)")
htmlOutput := flag.String("html-output", "", "HTML output file (optional)")
verbose := flag.Bool("verbose", false, "Enable verbose logging")
flag.Parse()
// Validate required parameters
if *zaiKey == "" {
log.Fatal("Z.AI API key is required. Set ZAI_API_KEY environment variable or use -zai-key flag")
}
if *anthropicKey == "" {
log.Fatal("Anthropic API key is required. Set ANTHROPIC_API_KEY environment variable or use -anthropic-key flag")
}
if !*verbose {
log.SetOutput(os.Stdout)
}
log.Println("🔍 Z.AI Proxy Evaluation Framework")
log.Println("==================================")
log.Printf("Z.AI Endpoint: %s", *zaiEndpoint)
log.Printf("Anthropic Endpoint: %s", *anthropicEndpoint)
log.Println()
// Create evaluator
eval := evaluation.NewEvaluator(*zaiEndpoint, *anthropicEndpoint, *zaiKey, *anthropicKey)
// Get test cases
tests := evaluation.GetTestCases()
log.Printf("Running %d test cases...\n", len(tests))
// Run evaluation
results, metrics := eval.RunTests(tests)
// Generate report
log.Println("\nGenerating reports...")
reporter := evaluation.NewReportGenerator(results, metrics)
// Save text report
if err := reporter.SaveToFile(*outputFile); err != nil {
log.Fatalf("Failed to save text report: %v", err)
}
log.Printf("✓ Text report saved to: %s", *outputFile)
// Save JSON report if requested
if *jsonOutput != "" {
jsonData, err := reporter.GenerateJSONReport()
if err != nil {
log.Fatalf("Failed to generate JSON report: %v", err)
}
if err := os.WriteFile(*jsonOutput, jsonData, 0644); err != nil {
log.Fatalf("Failed to save JSON report: %v", err)
}
log.Printf("✓ JSON report saved to: %s", *jsonOutput)
}
// Save HTML report if requested
if *htmlOutput != "" {
htmlReport, err := reporter.GenerateHTMLReport()
if err != nil {
log.Fatalf("Failed to generate HTML report: %v", err)
}
if err := os.WriteFile(*htmlOutput, []byte(htmlReport), 0644); err != nil {
log.Fatalf("Failed to save HTML report: %v", err)
}
log.Printf("✓ HTML report saved to: %s", *htmlOutput)
}
// Print summary
fmt.Println("\n" + reporter.GenerateTextReport())
// Exit with appropriate code
if metrics.SuccessfulTests < metrics.TotalTests {
os.Exit(1)
}
}