package config import ( "os" "strconv" "time" ) type Config struct { HTTPHost string HTTPPort int DatabaseURL string MigrateOnStart bool LLMBaseURL string LLMAPIKey string LLMModel string LLMTimeout time.Duration WhisperXURL string OpenClawURL string } func Load() Config { return Config{ HTTPHost: envString("HTTP_HOST", "0.0.0.0"), HTTPPort: envInt("HTTP_PORT", 8080), DatabaseURL: envString("DATABASE_URL", ""), MigrateOnStart: envBool("MIGRATE_ON_START", true), LLMBaseURL: envString("LLM_BASE_URL", ""), LLMAPIKey: envString("LLM_API_KEY", ""), LLMModel: envString("LLM_MODEL", "qwen2.5-14b"), LLMTimeout: envDuration("LLM_TIMEOUT", 5*time.Minute), WhisperXURL: envString("WHISPERX_URL", ""), OpenClawURL: envString("OPENCLAW_URL", ""), } } func envString(key, fallback string) string { if v := os.Getenv(key); v != "" { return v } return fallback } func envInt(key string, fallback int) int { raw := os.Getenv(key) if raw == "" { return fallback } v, err := strconv.Atoi(raw) if err != nil { return fallback } return v } func envBool(key string, fallback bool) bool { raw := os.Getenv(key) if raw == "" { return fallback } v, err := strconv.ParseBool(raw) if err != nil { return fallback } return v } func envDuration(key string, fallback time.Duration) time.Duration { raw := os.Getenv(key) if raw == "" { return fallback } v, err := time.ParseDuration(raw) if err != nil { return fallback } return v }