package main import ( "context" "flag" "log" "time" "github.com/paramah/ai_devs4/s01e02/internal/config" "github.com/paramah/ai_devs4/s01e02/internal/domain" "github.com/paramah/ai_devs4/s01e02/internal/infrastructure/api" "github.com/paramah/ai_devs4/s01e02/internal/infrastructure/json" "github.com/paramah/ai_devs4/s01e02/internal/infrastructure/llm" "github.com/paramah/ai_devs4/s01e02/internal/usecase" ) func main() { configPath := flag.String("config", "config.json", "Path to configuration file") flag.Parse() // Load configuration cfg, err := config.Load(*configPath) if err != nil { log.Fatalf("Failed to load configuration: %v", err) } if err := cfg.Validate(); err != nil { log.Fatalf("Invalid configuration: %v", err) } log.Printf("========== AI Agent Person Processor ==========") log.Printf("Input file: %s", cfg.InputFile) log.Printf("Output directory: %s", cfg.OutputDir) log.Printf("LLM Provider: %s", cfg.LLM.Provider) log.Printf("LLM Model: %s", cfg.LLM.Model) log.Printf("===============================================\n") // Create repositories and clients personRepo := json.NewRepository() apiClient := api.NewClient(cfg.LocationsAPI, cfg.AccessLevelAPI) // Create LLM provider var llmProvider domain.LLMProvider switch cfg.LLM.Provider { case "openrouter": llmProvider = llm.NewOpenRouterProvider(cfg.LLM.APIKey, cfg.LLM.Model) log.Printf("Using OpenRouter with model: %s", cfg.LLM.Model) case "lmstudio": llmProvider = llm.NewLMStudioProvider(cfg.LLM.BaseURL, cfg.LLM.Model) log.Printf("Using LM Studio at %s with model: %s", cfg.LLM.BaseURL, cfg.LLM.Model) default: log.Fatalf("Unknown LLM provider: %s", cfg.LLM.Provider) } // Create person agent processor use case personAgentUC := usecase.NewPersonAgentProcessorUseCase( personRepo, apiClient, llmProvider, cfg.APIKey, cfg.OutputDir, ) // Execute processing ctx, cancel := context.WithTimeout(context.Background(), 15*time.Minute) defer cancel() if err := personAgentUC.Execute(ctx, cfg.InputFile); err != nil { log.Fatalf("Failed to process persons: %v", err) } log.Printf("\n========== All tasks completed successfully! ==========") }