Caption: Add custom model input field (#4956)

293ee0a31009f6df44595ca1916c6c7c2e6f240c

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

Signed
3 files changed, +24 -1Showing whitespace changes
public/scripts/extensions/caption/index.js+4 -0
@@ -699,6 +699,10 @@ jQuery(async function () {
699 extension_settings.caption.ollama_custom_model = String($('#caption_ollama_custom_model').val()).trim();699 extension_settings.caption.ollama_custom_model = String($('#caption_ollama_custom_model').val()).trim();
700 saveSettingsDebounced();700 saveSettingsDebounced();
701 });701 });
702 $('#caption_custom_model').val(extension_settings.caption.custom_model || '').on('input', () => {
703 extension_settings.caption.custom_model = String($('#caption_custom_model').val()).trim();
704 saveSettingsDebounced();
705 });
702 $('#caption_refresh_models').on('click', async () => {706 $('#caption_refresh_models').on('click', async () => {
703 extension_settings.caption.multimodal_model = '';707 extension_settings.caption.multimodal_model = '';
704 await switchMultimodalBlocks();708 await switchMultimodalBlocks();
public/scripts/extensions/caption/settings.html+8 -0
@@ -177,8 +177,16 @@
177 <option data-type="koboldcpp" value="koboldcpp_current" data-i18n="currently_loaded">[Currently loaded]</option>177 <option data-type="koboldcpp" value="koboldcpp_current" data-i18n="currently_loaded">[Currently loaded]</option>
178 <option data-type="vllm" value="vllm_current" data-i18n="currently_selected">[Currently selected]</option>178 <option data-type="vllm" value="vllm_current" data-i18n="currently_selected">[Currently selected]</option>
179 <option data-type="custom" value="custom_current" data-i18n="currently_selected">[Currently selected]</option>179 <option data-type="custom" value="custom_current" data-i18n="currently_selected">[Currently selected]</option>
180 <option data-type="custom" value="custom_custom" data-i18n="[Custom model]">[Custom model]</option>
180 </select>181 </select>
181 </div>182 </div>
183 <div data-type="custom">
184 <label for="caption_custom_model">
185 <span data-i18n="Model Id">Model Id</span>
186 <small data-i18n="(for [Custom model] option)">(for [Custom model] option)</small>
187 </label>
188 <input id="caption_custom_model" class="text_pole" type="text" placeholder="e.g. gpt-4o" />
189 </div>
182 <div data-type="ollama">190 <div data-type="ollama">
183 <div>191 <div>
184 The model must be downloaded first! Do it with the <code>ollama pull</code> command or <a href="#" id="caption_ollama_pull">click here</a>.192 The model must be downloaded first! Do it with the <code>ollama pull</code> command or <a href="#" id="caption_ollama_pull">click here</a>.
public/scripts/extensions/shared.js+12 -1
@@ -108,8 +108,15 @@ export async function getMultimodalCaption(base64Img, prompt) {
108 }108 }
109109
110 if (isCustom) {110 if (isCustom) {
111 if (extension_settings.caption.multimodal_model === 'custom_current') {
112 requestBody.model = oai_settings.custom_model || '';
113 }
114
115 if (extension_settings.caption.multimodal_model === 'custom_custom') {
116 requestBody.model = extension_settings.caption.custom_model || '';
117 }
118
111 requestBody.server_url = oai_settings.custom_url;119 requestBody.server_url = oai_settings.custom_url;
112 requestBody.model = oai_settings.custom_model || 'gpt-4-turbo';
113 requestBody.custom_include_headers = oai_settings.custom_include_headers;120 requestBody.custom_include_headers = oai_settings.custom_include_headers;
114 requestBody.custom_include_body = oai_settings.custom_include_body;121 requestBody.custom_include_body = oai_settings.custom_include_body;
115 requestBody.custom_exclude_body = oai_settings.custom_exclude_body;122 requestBody.custom_exclude_body = oai_settings.custom_exclude_body;
@@ -245,6 +252,10 @@ function throwIfInvalidModel(useReverseProxy) {
245 throw new Error('Custom API URL is not set.');252 throw new Error('Custom API URL is not set.');
246 }253 }
247254
255 if (multimodalApi === 'custom' && multimodalModel === 'custom_custom' && !extension_settings.caption.custom_model) {
256 throw new Error('Custom OpenAI-compatible Model ID is not set.');
257 }
258
248 if (multimodalApi === 'aimlapi' && !secret_state[SECRET_KEYS.AIMLAPI]) {259 if (multimodalApi === 'aimlapi' && !secret_state[SECRET_KEYS.AIMLAPI]) {
249 throw new Error('AI/ML API key is not set.');260 throw new Error('AI/ML API key is not set.');
250 }261 }