* feat(embeddings): add EMBEDDING_BASE_URL for OpenAI-compatible embedding providers
Allow configuring a custom base URL for OpenAI-compatible embedding
endpoints (e.g., Azure OpenAI, local proxies, vLLM) via the
EMBEDDING_BASE_URL environment variable. When unset, defaults to
https://api.openai.com.
Changes:
- Extract hardcoded OpenAI URL to OPENAI_API_BASE_URL constant
- Add base_url field to OpenAiEmbeddings with builder method with_base_url()
- Auto-prepend https:// for schemeless URLs, strip trailing slashes
- Add openai_base_url field to EmbeddingsConfig, parsed from EMBEDDING_BASE_URL
- Wire base URL through create_provider() with debug logging
- Add EMBEDDING_BASE_URL to clear_embedding_env() in tests
- Add unit tests for URL validation and env var parsing
* refactor: address Gemini review — in-place trailing slash strip, simplify config logic
- Use while/pop() instead of trim_end_matches().to_string() for zero
extra allocation when stripping trailing slashes in with_base_url()
- Remove double openai_base_url check in create_provider() — create
provider first, then branch on base_url for logging + configuration
---------
Co-authored-by: SMKRV <[email protected]>
The Telegram channel capabilities file was missing the `webhook`
block inside `capabilities.channel`, causing the router to fall back
to the default `X-Webhook-Secret` header instead of the Telegram-
specific `X-Telegram-Bot-Api-Secret-Token`.
When a webhook secret is configured (via `telegram_webhook_secret`),
incoming updates are rejected with 401 because Telegram sends the
token in `X-Telegram-Bot-Api-Secret-Token` but the router looks for
`X-Webhook-Secret`.
The existing test in `schema.rs` already expects the correct header
name, confirming this is an oversight in the shipped capabilities
file.
Co-authored-by: SMKRV <[email protected]>
Co-authored-by: firat.sertgoz <[email protected]>