When embedding_provider differs from default_provider (e.g. default=gemini, embedding=openai), the caller-supplied api_key belongs to the chat provider. Passing it to the embedding endpoint causes 401 Unauthorized (gemini key sent to api.openai.com/v1/embeddings). Add embedding_provider_env_key() which looks up OPENAI_API_KEY, OPENROUTER_API_KEY, or COHERE_API_KEY before falling back to the caller-supplied key. This matches the provider-specific env var resolution in providers/mod.rs without introducing cross-module coupling. Also add config_secrets_survive_save_load_roundtrip test: full save→load cycle with channel credentials (telegram, discord, slack bot_token, slack app_token) and gateway paired_tokens, verifying that enc2: values are correctly decrypted by Config::load_or_init(). Regression guard for issues #3173 and #3175. Closes #3083 Co-authored-by: ZeroClaw Bot <zeroclaw_bot@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Argenis <theonlyhennygod@gmail.com> |
||
|---|---|---|
| .. | ||
| backend.rs | ||
| chunker.rs | ||
| cli.rs | ||
| embeddings.rs | ||
| hygiene.rs | ||
| lucid.rs | ||
| markdown.rs | ||
| mod.rs | ||
| none.rs | ||
| postgres.rs | ||
| qdrant.rs | ||
| response_cache.rs | ||
| snapshot.rs | ||
| sqlite.rs | ||
| traits.rs | ||
| vector.rs | ||