OpenRouter/MistralAI: Improve capability checks for tool calling and image inlining

40f4792b3286117227c09c4f1cc292bfdd189f59

Cohee <18619528+Cohee1207@users.noreply.github.com>

2 files changed, +21 -2Showing whitespace changes
public/scripts/openai.js+7 -2
@@ -3677,6 +3677,7 @@ async function getStatusOpen() {
36773677 if (noValidateSources.includes(oai_settings.chat_completion_source)) {
36783678 let status = t`Key saved; press \"Test Message\" to verify.`;
36793679 setOnlineStatus(status);
3680+ updateFeatureSupportFlags();
36803681 return resultCheckStatus();
36813682 }
36823683
@@ -3748,6 +3749,7 @@ async function getStatusOpen() {
37483749 }
37493750 }
37503751
3752+ updateFeatureSupportFlags();
37513753 return resultCheckStatus();
37523754}
37533755
@@ -5427,11 +5429,11 @@ export function isImageInliningSupported() {
54275429 case chat_completion_sources.CLAUDE:
54285430 return visionSupportedModels.some(model => oai_settings.claude_model.includes(model));
54295431 case chat_completion_sources.OPENROUTER:
5430- return true;
5432+ return (Array.isArray(model_list) && model_list.find(m => m.id === oai_settings.openrouter_model)?.architecture?.modality === 'text+image->text');
54315433 case chat_completion_sources.CUSTOM:
54325434 return true;
54335435 case chat_completion_sources.MISTRALAI:
5434- return visionSupportedModels.some(model => oai_settings.mistralai_model.includes(model));
5436+ return (Array.isArray(model_list) && model_list.find(m => m.id === oai_settings.mistralai_model)?.capabilities?.vision);
54355437 case chat_completion_sources.COHERE:
54365438 return visionSupportedModels.some(model => oai_settings.cohere_model.includes(model));
54375439 case chat_completion_sources.XAI:
@@ -6036,6 +6038,7 @@ export function initOpenAI() {
60366038
60376039 $('#openai_image_inlining').on('input', function () {
60386040 oai_settings.image_inlining = !!$(this).prop('checked');
6041+ updateFeatureSupportFlags();
60396042 saveSettingsDebounced();
60406043 });
60416044
@@ -6046,6 +6049,7 @@ export function initOpenAI() {
60466049
60476050 $('#openai_video_inlining').on('input', function () {
60486051 oai_settings.video_inlining = !!$(this).prop('checked');
6052+ updateFeatureSupportFlags();
60496053 saveSettingsDebounced();
60506054 });
60516055
@@ -6056,6 +6060,7 @@ export function initOpenAI() {
60566060
60576061 $('#openai_function_calling').on('input', function () {
60586062 oai_settings.function_calling = !!$(this).prop('checked');
6063+ updateFeatureSupportFlags();
60596064 saveSettingsDebounced();
60606065 });
60616066
public/scripts/tool-calling.js+14 -0
@@ -612,6 +612,20 @@ export class ToolManager {
612612 }
613613 }
614614
615+ if (oai_settings.chat_completion_source === chat_completion_sources.OPENROUTER && Array.isArray(model_list)) {
616+ const currentModel = model_list.find(model => model.id === oai_settings.openrouter_model);
617+ if (Array.isArray(currentModel?.supported_parameters)) {
618+ return currentModel.supported_parameters.includes('tools');
619+ }
620+ }
621+
622+ if (oai_settings.chat_completion_source === chat_completion_sources.MISTRALAI && Array.isArray(model_list)) {
623+ const currentModel = model_list.find(model => model.id === oai_settings.mistralai_model);
624+ if (currentModel && currentModel.capabilities) {
625+ return currentModel.capabilities.function_calling;
626+ }
627+ }
628+
615629 const supportedSources = [
616630 chat_completion_sources.OPENAI,
617631 chat_completion_sources.CUSTOM,