reloadConfiguration recarrega as variáveis de ambiente e reconfigura o LLMManager
(ctx context.Context)
| 36 | |
| 37 | // reloadConfiguration recarrega as variáveis de ambiente e reconfigura o LLMManager |
| 38 | func (cli *ChatCLI) reloadConfiguration(ctx context.Context) { |
| 39 | fmt.Println(i18n.T("status.reloading_config")) |
| 40 | |
| 41 | prevProvider := cli.Provider |
| 42 | prevModel := cli.Model |
| 43 | |
| 44 | envFilePath := os.Getenv("CHATCLI_DOTENV") |
| 45 | if envFilePath == "" { |
| 46 | envFilePath = ".env" |
| 47 | } else { |
| 48 | if expanded, err := utils.ExpandPath(envFilePath); err == nil { |
| 49 | envFilePath = expanded |
| 50 | } else { |
| 51 | fmt.Println(i18n.T("main.warn_expand_path", envFilePath, err)) |
| 52 | } |
| 53 | } |
| 54 | variablesToUnset := []string{ |
| 55 | "LOG_LEVEL", "ENV", "LLM_PROVIDER", "LOG_FILE", "LOG_MAX_SIZE", "HISTORY_MAX_SIZE", |
| 56 | "OPENAI_API_KEY", "OPENAI_MODEL", "OPENAI_ASSISTANT_MODEL", |
| 57 | "OPENAI_USE_RESPONSES", "OPENAI_MAX_TOKENS", |
| 58 | "ANTHROPIC_API_KEY", "ANTHROPIC_MODEL", "ANTHROPIC_MAX_TOKENS", "ANTHROPIC_API_VERSION", "ANTHROPIC_BASE_URL", |
| 59 | "GOOGLEAI_API_KEY", "GOOGLEAI_MODEL", "GOOGLEAI_MAX_TOKENS", |
| 60 | "XAI_API_KEY", "XAI_MODEL", "XAI_MAX_TOKENS", |
| 61 | "ZAI_API_KEY", "ZAI_MODEL", "ZAI_MAX_TOKENS", |
| 62 | "MINIMAX_API_KEY", "MINIMAX_MODEL", "MINIMAX_MAX_TOKENS", "MINIMAX_API_COMPAT", |
| 63 | "MOONSHOT_API_KEY", "MOONSHOT_MODEL", "MOONSHOT_MAX_TOKENS", "MOONSHOT_THINKING", "MOONSHOT_API_URL", |
| 64 | "OLLAMA_ENABLED", "OLLAMA_BASE_URL", "OLLAMA_MODEL", "OLLAMA_MAX_TOKENS", |
| 65 | "CLIENT_ID", "CLIENT_KEY", "STACKSPOT_REALM", "STACKSPOT_AGENT_ID", |
| 66 | "COPILOT_MODEL", "COPILOT_MAX_TOKENS", "GITHUB_COPILOT_TOKEN", |
| 67 | "GITHUB_TOKEN", "GH_TOKEN", "GITHUB_MODELS_TOKEN", "GITHUB_MODELS_MODEL", |
| 68 | "CHATCLI_WEBFETCH_USER_AGENT", "CHATCLI_WEBFETCH_AUTOSAVE_BYTES", |
| 69 | "CHATCLI_WEBFETCH_RENDER", "CHATCLI_WEBFETCH_RENDER_TIMEOUT", "CHATCLI_WEBFETCH_RENDER_AUTOPROVISION", |
| 70 | "CHATCLI_WEBFETCH_RENDER_BROWSER", |
| 71 | "CHATCLI_EMBED_PROVIDER", "CHATCLI_EMBED_MODEL", "CHATCLI_EMBED_DIMENSIONS", |
| 72 | } |
| 73 | |
| 74 | for _, variable := range variablesToUnset { |
| 75 | _ = os.Unsetenv(variable) |
| 76 | } |
| 77 | |
| 78 | err := godotenv.Overload(envFilePath) |
| 79 | if err != nil && !os.IsNotExist(err) { |
| 80 | cli.logger.Error("Erro ao carregar o arquivo .env", zap.Error(err)) |
| 81 | } |
| 82 | |
| 83 | // Re-apply the UI theme so a CHATCLI_THEME change in .env takes effect on |
| 84 | // reload, mirroring how the provider/model are re-resolved below. |
| 85 | theme.InitFromEnv() |
| 86 | |
| 87 | config.Global.Reload(cli.logger) |
| 88 | |
| 89 | cli.reconfigureLogger() |
| 90 | |
| 91 | // Rebuild the embedding provider so a CHATCLI_EMBED_PROVIDER change in |
| 92 | // .env takes effect on reload — without this the session keeps the |
| 93 | // provider captured at boot until the process restarts. |
| 94 | if oldEmb, newEmb := cli.refreshEmbeddingProvider(); oldEmb != newEmb { |
| 95 | fmt.Println(i18n.T("status.reload_embed_provider", newEmb)) |
no test coverage detected