When a model has an explicitly configured but empty input array,
the filter returns an empty array, leaving the model with no supported
modalities. Apply the same empty-array guard used by the non-OpenRouter
fallback path, defaulting to ["text"] when the filtered result is empty.
Honor providerConfig.baseUrl, providerConfig.api, and headers in
the OpenRouter fallback path instead of hardcoding defaults. This
ensures custom OpenRouter gateways/proxies and auth headers are
preserved when plugin-based capability lookup returns nothing.
- Remove redundant /qwen-vl/, /qwen2-vl/, /qwen2\.5-vl/ patterns since
/\bvl\b/ already matches these models via word boundaries
- Add clarifying comment for the non-OpenRouter provider fallback path,
explaining that OpenRouter returns early using isLikelyVisionModel
Fix OpenRouter models being hardcoded with `input: ["text"]` which caused
image tool validation to fail even when `imageModel.primary` was correctly
configured to an OpenRouter vision model.
Changes:
- Check provider config for model input capabilities before falling back
- Add heuristic detection of vision models by model ID patterns
- Propagate configured model metadata (reasoning, cost, context window)
Fixes#44648
Port and complete #19776 on top of the current Telegram extension layout.
Adds a default-off `channels.telegram.silentErrorReplies` setting. When enabled, Telegram bot replies marked as errors are delivered silently across the regular bot reply flow, native/slash command replies, and fallback sends.
Thanks @auspic7
Co-authored-by: Myeongwon Choi <36367286+auspic7@users.noreply.github.com>
Co-authored-by: ImLukeF <92253590+ImLukeF@users.noreply.github.com>