| 398 | 398 | |
| 399 | 399 | $('#caption_wand_container').append(sendButton); |
| 400 | 400 | $(sendButton).on('click', () => { |
| 401 | 401 | const hasCaptionModule = (() => { |
| 402 | | - (modules.includes('caption') && extension_settings.caption.source === 'extras') || |
| 402 | + const settings = extension_settings.caption; |
| 403 | | - (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'openai' && (secret_state[SECRET_KEYS.OPENAI] || extension_settings.caption.allow_reverse_proxy)) || |
| 403 | + |
| 404 | | - (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'openrouter' && secret_state[SECRET_KEYS.OPENROUTER]) || |
| 404 | + // Handle non-multimodal sources |
| 405 | 405 | if (extension_settings.captionsettings.source === 'multimodalextras' && extension_settings.captionmodules.multimodal_api === includes('zerooneaicaption' && secret_state[SECRET_KEYS.ZEROONEAI])) ||return true; |
| 406 | 406 | if (extension_settings.captionsettings.source === 'multimodallocal' &&|| extension_settings.captionsettings.multimodal_apisource === 'groqhorde' && secret_state[SECRET_KEYS.GROQ]) ||return true; |
| 407 | | - (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'mistral' && (secret_state[SECRET_KEYS.MISTRALAI] || extension_settings.caption.allow_reverse_proxy)) || |
| 407 | + |
| 408 | | - (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'google' && (secret_state[SECRET_KEYS.MAKERSUITE] || extension_settings.caption.allow_reverse_proxy)) || |
| 408 | + // Handle multimodal sources |
| 409 | | - (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'anthropic' && (secret_state[SECRET_KEYS.CLAUDE] || extension_settings.caption.allow_reverse_proxy)) || |
| 409 | + if (settings.source === 'multimodal') { |
| 410 | | - (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'ollama' && textgenerationwebui_settings.server_urls[textgen_types.OLLAMA]) || |
| 410 | + const api = settings.multimodal_api; |
| 411 | | - (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'llamacpp' && textgenerationwebui_settings.server_urls[textgen_types.LLAMACPP]) || |
| 411 | + |
| 412 | | - (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'ooba' && textgenerationwebui_settings.server_urls[textgen_types.OOBA]) || |
| 412 | + // APIs that support reverse proxy |
| 413 | | - (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'koboldcpp' && textgenerationwebui_settings.server_urls[textgen_types.KOBOLDCPP]) || |
| 413 | + const reverseProxyApis = { |
| 414 | | - (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'vllm' && textgenerationwebui_settings.server_urls[textgen_types.VLLM]) || |
| 414 | + 'openai': SECRET_KEYS.OPENAI, |
| 415 | | - (extension_settings.caption.source === 'multimodal' && extension_settings.caption.multimodal_api === 'custom') || |
| 415 | + 'mistral': SECRET_KEYS.MISTRALAI, |
| 416 | | - extension_settings.caption.source === 'local' || |
| 416 | + 'google': SECRET_KEYS.MAKERSUITE, |
| 417 | | - extension_settings.caption.source === 'horde'; |
| 417 | + 'anthropic': SECRET_KEYS.CLAUDE, |
| 418 | + }; |
| 419 | + |
| 420 | + if (reverseProxyApis[api]) { |
| 421 | + if (secret_state[reverseProxyApis[api]] || settings.allow_reverse_proxy) { |
| 422 | + return true; |
| 423 | + } |
| 424 | + } |
| 425 | + |
| 426 | + const chatCompletionApis = { |
| 427 | + 'openrouter': SECRET_KEYS.OPENROUTER, |
| 428 | + 'zerooneai': SECRET_KEYS.ZEROONEAI, |
| 429 | + 'groq': SECRET_KEYS.GROQ, |
| 430 | + 'cohere': SECRET_KEYS.COHERE, |
| 431 | + }; |
| 432 | + |
| 433 | + if (chatCompletionApis[api] && secret_state[chatCompletionApis[api]]) { |
| 434 | + return true; |
| 435 | + } |
| 436 | + |
| 437 | + const textCompletionApis = { |
| 438 | + 'ollama': textgen_types.OLLAMA, |
| 439 | + 'llamacpp': textgen_types.LLAMACPP, |
| 440 | + 'ooba': textgen_types.OOBA, |
| 441 | + 'koboldcpp': textgen_types.KOBOLDCPP, |
| 442 | + 'vllm': textgen_types.VLLM, |
| 443 | + }; |
| 444 | + |
| 445 | + if (textCompletionApis[api] && textgenerationwebui_settings.server_urls[textCompletionApis[api]]) { |
| 446 | + return true; |
| 447 | + } |
| 448 | + |
| 449 | + // Custom API doesn't need additional checks |
| 450 | + if (api === 'custom') { |
| 451 | + return true; |
| 452 | + } |
| 453 | + } |
| 454 | + |
| 455 | + return false; |
| 456 | + })(); |
| 418 | 457 | |
| 419 | 458 | if (!hasCaptionModule) { |
| 420 | 459 | toastr.error('Choose other captioning source in the extension settings.', 'Captioning is not available'); |