Progress
This commit is contained in:
parent
e3ccaf70a1
commit
f29f934c6b
|
@ -1848,6 +1848,7 @@
|
|||
<option value="llamacpp">llama.cpp</option>
|
||||
<option value="ollama">Ollama</option>
|
||||
<option value="togetherai">TogetherAI</option>
|
||||
<option value="infermaticai">InfermaticAI</option>
|
||||
</select>
|
||||
</div>
|
||||
<div data-tg-type="togetherai" class="flex-container flexFlowColumn">
|
||||
|
@ -1868,6 +1869,24 @@
|
|||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div data-tg-type="infermaticai" class="flex-container flexFlowColumn">
|
||||
<h4 data-i18n="InfermaticAI API Key">InfermaticAI API Key</h4>
|
||||
<div class="flex-container">
|
||||
<input id="api_key_infermaticai" name="api_key_infermaticai" class="text_pole flex1" maxlength="500" value="" type="text" autocomplete="off">
|
||||
<div title="Clear your API key" data-i18n="[title]Clear your API key" class="menu_button fa-solid fa-circle-xmark clear-api-key" data-key="api_key_infermaticai"></div>
|
||||
</div>
|
||||
<div data-for="api_key_infermaticai" class="neutral_warning">
|
||||
For privacy reasons, your API key will be hidden after you reload the page.
|
||||
</div>
|
||||
<div>
|
||||
<h4 data-i18n="InfermaticAI Model">InfermaticAI Model</h4>
|
||||
<select id="model_infermaticai_select">
|
||||
<option>
|
||||
-- Connect to the API --
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div data-tg-type="mancer" class="flex-container flexFlowColumn">
|
||||
<div class="flex-container flexFlowColumn">
|
||||
</div>
|
||||
|
@ -5235,4 +5254,4 @@
|
|||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
</html>
|
||||
|
|
|
@ -20,7 +20,7 @@ import {
|
|||
validateTextGenUrl,
|
||||
} from './scripts/textgen-settings.js';
|
||||
|
||||
const { MANCER, TOGETHERAI, OOBA, APHRODITE, OLLAMA } = textgen_types;
|
||||
const { MANCER, TOGETHERAI, OOBA, APHRODITE, OLLAMA, INFERMATICAI } = textgen_types;
|
||||
|
||||
import {
|
||||
world_info,
|
||||
|
@ -185,7 +185,7 @@ import { createPersona, initPersonas, selectCurrentPersona, setPersonaDescriptio
|
|||
import { getBackgrounds, initBackgrounds, loadBackgroundSettings, background_settings } from './scripts/backgrounds.js';
|
||||
import { hideLoader, showLoader } from './scripts/loader.js';
|
||||
import { BulkEditOverlay, CharacterContextMenu } from './scripts/BulkEditOverlay.js';
|
||||
import { loadMancerModels, loadOllamaModels, loadTogetherAIModels } from './scripts/textgen-models.js';
|
||||
import { loadMancerModels, loadOllamaModels, loadTogetherAIModels, loadInfermaticAIModels } from './scripts/textgen-models.js';
|
||||
import { appendFileContent, hasPendingFileAttachment, populateFileAttachment, decodeStyleTags, encodeStyleTags } from './scripts/chats.js';
|
||||
import { initPresetManager } from './scripts/preset-manager.js';
|
||||
import { evaluateMacros } from './scripts/macros.js';
|
||||
|
@ -988,6 +988,9 @@ async function getStatusTextgen() {
|
|||
} else if (textgen_settings.type === OLLAMA) {
|
||||
loadOllamaModels(data?.data);
|
||||
online_status = textgen_settings.ollama_model || 'Connected';
|
||||
} else if (textgen_settings.type === INFERMATICAI) {
|
||||
loadInfermaticAIModels(data?.data);
|
||||
online_status = textgen_settings.infermaticai_model;
|
||||
} else {
|
||||
online_status = data?.result;
|
||||
}
|
||||
|
@ -7399,6 +7402,11 @@ const CONNECT_API_MAP = {
|
|||
button: '#api_button_openai',
|
||||
source: chat_completion_sources.CUSTOM,
|
||||
},
|
||||
'infermaticai': {
|
||||
selected: 'openai',
|
||||
button: '#api_button_openai',
|
||||
type: textgen_types.INFERMATICAI,
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -8246,6 +8254,11 @@ jQuery(async function () {
|
|||
await writeSecret(SECRET_KEYS.TOGETHERAI, togetherKey);
|
||||
}
|
||||
|
||||
const infermaticAIKey = String($('#api_key_infermaticai').val()).trim();
|
||||
if (infermaticAIKey.length) {
|
||||
await writeSecret(SECRET_KEYS.INFERMATICAI, infermaticAIKey);
|
||||
}
|
||||
|
||||
validateTextGenUrl();
|
||||
startStatusLoading();
|
||||
main_api = 'textgenerationwebui';
|
||||
|
|
|
@ -397,6 +397,7 @@ function RA_autoconnect(PrevApi) {
|
|||
|| (secret_state[SECRET_KEYS.AI21] && oai_settings.chat_completion_source == chat_completion_sources.AI21)
|
||||
|| (secret_state[SECRET_KEYS.MAKERSUITE] && oai_settings.chat_completion_source == chat_completion_sources.MAKERSUITE)
|
||||
|| (secret_state[SECRET_KEYS.MISTRALAI] && oai_settings.chat_completion_source == chat_completion_sources.MISTRALAI)
|
||||
|| (secret_state[SECRET_KEYS.INFERMATICAI] && oai_settings.chat_completion_source == chat_completion_sources.INFERMATICAI)
|
||||
|| (isValidUrl(oai_settings.custom_url) && oai_settings.chat_completion_source == chat_completion_sources.CUSTOM)
|
||||
) {
|
||||
$('#api_button_openai').trigger('click');
|
||||
|
|
|
@ -16,6 +16,7 @@ export const SECRET_KEYS = {
|
|||
SERPAPI: 'api_key_serpapi',
|
||||
MISTRALAI: 'api_key_mistralai',
|
||||
TOGETHERAI: 'api_key_togetherai',
|
||||
INFERMATICAI: 'api_key_infermaticai',
|
||||
CUSTOM: 'api_key_custom',
|
||||
};
|
||||
|
||||
|
@ -35,6 +36,7 @@ const INPUT_MAP = {
|
|||
[SECRET_KEYS.MISTRALAI]: '#api_key_mistralai',
|
||||
[SECRET_KEYS.CUSTOM]: '#api_key_custom',
|
||||
[SECRET_KEYS.TOGETHERAI]: '#api_key_togetherai',
|
||||
[SECRET_KEYS.INFERMATICAI]: '#api_key_infermaticai',
|
||||
};
|
||||
|
||||
async function clearSecret() {
|
||||
|
|
|
@ -4,6 +4,7 @@ import { textgenerationwebui_settings as textgen_settings, textgen_types } from
|
|||
|
||||
let mancerModels = [];
|
||||
let togetherModels = [];
|
||||
let infermaticAIModels = [];
|
||||
|
||||
export async function loadOllamaModels(data) {
|
||||
if (!Array.isArray(data)) {
|
||||
|
@ -52,6 +53,32 @@ export async function loadTogetherAIModels(data) {
|
|||
}
|
||||
}
|
||||
|
||||
export async function loadInfermaticAIModels(data) {
|
||||
if (!Array.isArray(data)) {
|
||||
console.error('Invalid Infermatic AI models data', data);
|
||||
return;
|
||||
}
|
||||
|
||||
infermaticAIModels = data;
|
||||
|
||||
if (!data.find(x => x.id === textgen_settings.infermaticai_model)) {
|
||||
textgen_settings.infermaticai_model = data[0]?.id || '';
|
||||
}
|
||||
|
||||
$('#model_infermaticai_select').empty();
|
||||
for (const model of data) {
|
||||
if (model.display_type === 'image') {
|
||||
continue;
|
||||
}
|
||||
|
||||
const option = document.createElement('option');
|
||||
option.value = model.id;
|
||||
option.text = model.id;
|
||||
option.selected = model.id === textgen_settings.infermaticai_model;
|
||||
$('#model_infermaticai_select').append(option);
|
||||
}
|
||||
}
|
||||
|
||||
export async function loadMancerModels(data) {
|
||||
if (!Array.isArray(data)) {
|
||||
console.error('Invalid Mancer models data', data);
|
||||
|
@ -91,6 +118,14 @@ function onTogetherModelSelect() {
|
|||
setGenerationParamsFromPreset({ max_length: model.context_length });
|
||||
}
|
||||
|
||||
function onInfermaticAIModelSelect() {
|
||||
const modelName = String($('#model_infermaticai_select').val());
|
||||
textgen_settings.infermaticai_model = modelName;
|
||||
$('#api_button_openai').trigger('click');
|
||||
const model = infermaticAIModels.find(x => x.id === modelName);
|
||||
setGenerationParamsFromPreset({ max_length: model.context_length });
|
||||
}
|
||||
|
||||
function onOllamaModelSelect() {
|
||||
const modelId = String($('#ollama_model').val());
|
||||
textgen_settings.ollama_model = modelId;
|
||||
|
@ -130,6 +165,20 @@ function getTogetherModelTemplate(option) {
|
|||
`));
|
||||
}
|
||||
|
||||
function getInfermaticAIModelTemplate(option) {
|
||||
const model = infermaticAIModels.find(x => x.id === option?.element?.value);
|
||||
|
||||
if (!option.id || !model) {
|
||||
return option.text;
|
||||
}
|
||||
|
||||
return $((`
|
||||
<div class="flex-container flexFlowColumn">
|
||||
<div><strong>${DOMPurify.sanitize(model.id)}</strong></div>
|
||||
</div>
|
||||
`));
|
||||
}
|
||||
|
||||
async function downloadOllamaModel() {
|
||||
try {
|
||||
const serverUrl = textgen_settings.server_urls[textgen_types.OLLAMA];
|
||||
|
@ -174,6 +223,7 @@ async function downloadOllamaModel() {
|
|||
jQuery(function () {
|
||||
$('#mancer_model').on('change', onMancerModelSelect);
|
||||
$('#model_togetherai_select').on('change', onTogetherModelSelect);
|
||||
$('#model_infermaticai_select').on('change', onInfermaticAIModelSelect);
|
||||
$('#ollama_model').on('change', onOllamaModelSelect);
|
||||
$('#ollama_download_model').on('click', downloadOllamaModel);
|
||||
|
||||
|
@ -198,5 +248,12 @@ jQuery(function () {
|
|||
searchInputCssClass: 'text_pole',
|
||||
width: '100%',
|
||||
});
|
||||
$('#model_infermaticai_select').select2({
|
||||
placeholder: 'Select a model',
|
||||
searchInputPlaceholder: 'Search models...',
|
||||
searchInputCssClass: 'text_pole',
|
||||
width: '100%',
|
||||
templateResult: getInfermaticAIModelTemplate,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
|
@ -34,9 +34,10 @@ export const textgen_types = {
|
|||
TOGETHERAI: 'togetherai',
|
||||
LLAMACPP: 'llamacpp',
|
||||
OLLAMA: 'ollama',
|
||||
INFERMATICAI: 'infermaticai',
|
||||
};
|
||||
|
||||
const { MANCER, APHRODITE, TOGETHERAI, OOBA, OLLAMA, LLAMACPP } = textgen_types;
|
||||
const { MANCER, APHRODITE, TOGETHERAI, OOBA, OLLAMA, LLAMACPP, INFERMATICAI } = textgen_types;
|
||||
const BIAS_KEY = '#textgenerationwebui_api-settings';
|
||||
|
||||
// Maybe let it be configurable in the future?
|
||||
|
@ -45,6 +46,7 @@ const MANCER_SERVER_KEY = 'mancer_server';
|
|||
const MANCER_SERVER_DEFAULT = 'https://neuro.mancer.tech';
|
||||
let MANCER_SERVER = localStorage.getItem(MANCER_SERVER_KEY) ?? MANCER_SERVER_DEFAULT;
|
||||
let TOGETHERAI_SERVER = 'https://api.together.xyz';
|
||||
let INFERMATICAI_SERVER = 'https://api.totalgpt.ai';
|
||||
|
||||
const SERVER_INPUTS = {
|
||||
[textgen_types.OOBA]: '#textgenerationwebui_api_url_text',
|
||||
|
@ -107,6 +109,7 @@ const settings = {
|
|||
type: textgen_types.OOBA,
|
||||
mancer_model: 'mytholite',
|
||||
togetherai_model: 'Gryphe/MythoMax-L2-13b',
|
||||
infermaticai_model: '',
|
||||
ollama_model: '',
|
||||
legacy_api: false,
|
||||
sampler_order: KOBOLDCPP_ORDER,
|
||||
|
@ -203,6 +206,10 @@ export function getTextGenServer() {
|
|||
return TOGETHERAI_SERVER;
|
||||
}
|
||||
|
||||
if (settings.type === INFERMATICAI) {
|
||||
return INFERMATICAI_SERVER;
|
||||
}
|
||||
|
||||
return settings.server_urls[settings.type] ?? '';
|
||||
}
|
||||
|
||||
|
@ -226,8 +233,8 @@ async function selectPreset(name) {
|
|||
|
||||
function formatTextGenURL(value) {
|
||||
try {
|
||||
// Mancer/Together doesn't need any formatting (it's hardcoded)
|
||||
if (settings.type === MANCER || settings.type === TOGETHERAI) {
|
||||
// Mancer/Together/InfermaticAI doesn't need any formatting (it's hardcoded)
|
||||
if (settings.type === MANCER || settings.type === TOGETHERAI || settings.type === INFERMATICAI) {
|
||||
return value;
|
||||
}
|
||||
|
||||
|
@ -746,6 +753,10 @@ function getModel() {
|
|||
return settings.togetherai_model;
|
||||
}
|
||||
|
||||
if (settings.type === INFERMATICAI) {
|
||||
return settings.infermaticai_model;
|
||||
}
|
||||
|
||||
if (settings.type === APHRODITE) {
|
||||
return online_status;
|
||||
}
|
||||
|
|
|
@ -19,6 +19,14 @@ function getTogetherAIHeaders() {
|
|||
}) : {};
|
||||
}
|
||||
|
||||
function getInfermaticAIHeaders() {
|
||||
const apiKey = readSecret(SECRET_KEYS.INFERMATICAI);
|
||||
|
||||
return apiKey ? ({
|
||||
'Authorization': `Bearer ${apiKey}`,
|
||||
}) : {};
|
||||
}
|
||||
|
||||
function getAphroditeHeaders() {
|
||||
const apiKey = readSecret(SECRET_KEYS.APHRODITE);
|
||||
|
||||
|
@ -69,6 +77,9 @@ function setAdditionalHeaders(request, args, server) {
|
|||
case TEXTGEN_TYPES.TOGETHERAI:
|
||||
headers = getTogetherAIHeaders();
|
||||
break;
|
||||
case TEXTGEN_TYPES.INFERMATICAI:
|
||||
headers = getInfermaticAIHeaders();
|
||||
break;
|
||||
default:
|
||||
headers = server ? getOverrideHeaders((new URL(server))?.host) : {};
|
||||
break;
|
||||
|
|
|
@ -175,8 +175,17 @@ const TEXTGEN_TYPES = {
|
|||
TOGETHERAI: 'togetherai',
|
||||
LLAMACPP: 'llamacpp',
|
||||
OLLAMA: 'ollama',
|
||||
INFERMATICAI: 'infermaticai',
|
||||
};
|
||||
|
||||
const INFERMATICAI_KEYS = [
|
||||
'model',
|
||||
'max_tokens',
|
||||
'temperature',
|
||||
'repetition_penalty',
|
||||
'stream',
|
||||
];
|
||||
|
||||
// https://docs.together.ai/reference/completions
|
||||
const TOGETHERAI_KEYS = [
|
||||
'model',
|
||||
|
@ -223,4 +232,5 @@ module.exports = {
|
|||
AVATAR_HEIGHT,
|
||||
TOGETHERAI_KEYS,
|
||||
OLLAMA_KEYS,
|
||||
INFERMATICAI_KEYS,
|
||||
};
|
||||
|
|
|
@ -4,7 +4,7 @@ const _ = require('lodash');
|
|||
const Readable = require('stream').Readable;
|
||||
|
||||
const { jsonParser } = require('../../express-common');
|
||||
const { TEXTGEN_TYPES, TOGETHERAI_KEYS, OLLAMA_KEYS } = require('../../constants');
|
||||
const { TEXTGEN_TYPES, TOGETHERAI_KEYS, OLLAMA_KEYS, INFERMATICAI_KEYS } = require('../../constants');
|
||||
const { forwardFetchResponse, trimV1 } = require('../../util');
|
||||
const { setAdditionalHeaders } = require('../../additional-headers');
|
||||
|
||||
|
@ -117,6 +117,9 @@ router.post('/status', jsonParser, async function (request, response) {
|
|||
case TEXTGEN_TYPES.TOGETHERAI:
|
||||
url += '/api/models?&info';
|
||||
break;
|
||||
case TEXTGEN_TYPES.INFERMATICAI:
|
||||
url += '/models';
|
||||
break;
|
||||
case TEXTGEN_TYPES.OLLAMA:
|
||||
url += '/api/tags';
|
||||
break;
|
||||
|
@ -243,6 +246,9 @@ router.post('/generate', jsonParser, async function (request, response) {
|
|||
case TEXTGEN_TYPES.OLLAMA:
|
||||
url += '/api/generate';
|
||||
break;
|
||||
case TEXTGEN_TYPES.INFERMATICAI:
|
||||
url += '/completions';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue