Caption - allow custom endpoint for xAI

This commit is contained in:
Cohee
2025-05-22 23:03:04 +03:00
parent fd0e0945b3
commit 57b81be9ce
4 changed files with 14 additions and 14 deletions

View File

@ -416,6 +416,7 @@ jQuery(async function () {
'google': SECRET_KEYS.MAKERSUITE,
'vertexai': SECRET_KEYS.VERTEXAI,
'anthropic': SECRET_KEYS.CLAUDE,
'xai': SECRET_KEYS.XAI,
};
if (reverseProxyApis[api]) {
@ -429,7 +430,6 @@ jQuery(async function () {
'zerooneai': SECRET_KEYS.ZEROONEAI,
'groq': SECRET_KEYS.GROQ,
'cohere': SECRET_KEYS.COHERE,
'xai': SECRET_KEYS.XAI,
};
if (chatCompletionApis[api] && secret_state[chatCompletionApis[api]]) {

View File

@ -181,7 +181,7 @@
<div data-type="ollama">
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>.
</div>
<label data-type="openai,anthropic,google,vertexai,mistral" class="checkbox_label flexBasis100p" for="caption_allow_reverse_proxy" title="Allow using reverse proxy if defined and valid.">
<label data-type="openai,anthropic,google,vertexai,mistral,xai" class="checkbox_label flexBasis100p" for="caption_allow_reverse_proxy" title="Allow using reverse proxy if defined and valid.">
<input id="caption_allow_reverse_proxy" type="checkbox" class="checkbox">
<span data-i18n="Allow reverse proxy">Allow reverse proxy</span>
</label>

View File

@ -15,7 +15,7 @@ import { createThumbnail, isValidUrl } from '../utils.js';
*/
export async function getMultimodalCaption(base64Img, prompt) {
const useReverseProxy =
(['openai', 'anthropic', 'google', 'mistral', 'vertexai'].includes(extension_settings.caption.multimodal_api))
(['openai', 'anthropic', 'google', 'mistral', 'vertexai', 'xai'].includes(extension_settings.caption.multimodal_api))
&& extension_settings.caption.allow_reverse_proxy
&& oai_settings.reverse_proxy
&& isValidUrl(oai_settings.reverse_proxy);
@ -157,7 +157,7 @@ function throwIfInvalidModel(useReverseProxy) {
throw new Error('Cohere API key is not set.');
}
if (extension_settings.caption.multimodal_api === 'xai' && !secret_state[SECRET_KEYS.XAI]) {
if (extension_settings.caption.multimodal_api === 'xai' && !secret_state[SECRET_KEYS.XAI] && !useReverseProxy) {
throw new Error('xAI API key is not set.');
}

View File

@ -22,8 +22,12 @@ router.post('/caption-image', async (request, response) => {
key = readSecret(request.user.directories, SECRET_KEYS.OPENAI);
}
if (request.body.api === 'openrouter' && !request.body.reverse_proxy) {
key = readSecret(request.user.directories, SECRET_KEYS.OPENROUTER);
if (request.body.api === 'xai' && !request.body.reverse_proxy) {
key = readSecret(request.user.directories, SECRET_KEYS.XAI);
}
if (request.body.api === 'mistral' && !request.body.reverse_proxy) {
key = readSecret(request.user.directories, SECRET_KEYS.MISTRALAI);
}
if (request.body.reverse_proxy && request.body.proxy_password) {
@ -36,6 +40,10 @@ router.post('/caption-image', async (request, response) => {
mergeObjectWithYaml(headers, request.body.custom_include_headers);
}
if (request.body.api === 'openrouter') {
key = readSecret(request.user.directories, SECRET_KEYS.OPENROUTER);
}
if (request.body.api === 'ooba') {
key = readSecret(request.user.directories, SECRET_KEYS.OOBA);
bodyParams.temperature = 0.1;
@ -57,10 +65,6 @@ router.post('/caption-image', async (request, response) => {
key = readSecret(request.user.directories, SECRET_KEYS.ZEROONEAI);
}
if (request.body.api === 'mistral') {
key = readSecret(request.user.directories, SECRET_KEYS.MISTRALAI);
}
if (request.body.api === 'groq') {
key = readSecret(request.user.directories, SECRET_KEYS.GROQ);
}
@ -69,10 +73,6 @@ router.post('/caption-image', async (request, response) => {
key = readSecret(request.user.directories, SECRET_KEYS.COHERE);
}
if (request.body.api === 'xai') {
key = readSecret(request.user.directories, SECRET_KEYS.XAI);
}
const noKeyTypes = ['custom', 'ooba', 'koboldcpp', 'vllm', 'llamacpp', 'pollinations'];
if (!key && !request.body.reverse_proxy && !noKeyTypes.includes(request.body.api)) {
console.warn('No key found for API', request.body.api);