Add Jamba 1.6 models Closes #3633

ff5835278b6c0d7539228130d9a9e0c6883d1cb6

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

3 files changed, +21 -7Ignore whitespace
public/index.html+9 -1
@@ -3078,7 +3078,15 @@
30783078 <div>
30793079 <h4 data-i18n="AI21 Model">AI21 Model</h4>
30803080 <select id="model_ai21_select">
30813081 <optgroup label="Jamba 1.5(Latest)">
3082+ <option value="jamba-mini">jamba-mini</option>
3083+ <option value="jamba-large">jamba-large</option>
3084+ </optgroup>
3085+ <optgroup label="Jamba 1.6">
3086+ <option value="jamba-1.6-mini">jamba-1.6-mini</option>
3087+ <option value="jamba-1.6-large">jamba-1.6-large</option>
3088+ </optgroup>
3089+ <optgroup label="Jamba 1.5 (Deprecated)">
30823090 <option value="jamba-1.5-mini">jamba-1.5-mini</option>
30833091 <option value="jamba-1.5-large">jamba-1.5-large</option>
30843092 </optgroup>
public/scripts/openai.js+5 -5
@@ -337,7 +337,7 @@ const default_settings = {
337337 openai_model: 'gpt-4-turbo',
338338 claude_model: 'claude-3-5-sonnet-20240620',
339339 google_model: 'gemini-1.5-pro',
340340 ai21_model: 'jamba-1.56-large',
341341 mistralai_model: 'mistral-large-latest',
342342 cohere_model: 'command-r-plus',
343343 perplexity_model: 'sonar-pro',
@@ -417,7 +417,7 @@ const oai_settings = {
417417 openai_model: 'gpt-4-turbo',
418418 claude_model: 'claude-3-5-sonnet-20240620',
419419 google_model: 'gemini-1.5-pro',
420420 ai21_model: 'jamba-1.56-large',
421421 mistralai_model: 'mistral-large-latest',
422422 cohere_model: 'command-r-plus',
423423 perplexity_model: 'sonar-pro',
@@ -3251,7 +3251,7 @@ function loadOpenAISettings(data, settings) {
32513251 }
32523252
32533253 if (oai_settings.ai21_model.startsWith('j2-')) {
32543254 oai_settings.ai21_model = 'jamba-1.56-large';
32553255 }
32563256
32573257 if (settings.wrap_in_quotes !== undefined) oai_settings.wrap_in_quotes = !!settings.wrap_in_quotes;
@@ -4208,7 +4208,7 @@ async function onModelChange() {
42084208
42094209 if ($(this).is('#model_ai21_select')) {
42104210 if (value === '' || value.startsWith('j2-')) {
42114211 value = 'jamba-1.56-large';
42124212 $('#model_ai21_select').val(value);
42134213 }
42144214
@@ -4485,7 +4485,7 @@ async function onModelChange() {
44854485 if (oai_settings.chat_completion_source == chat_completion_sources.AI21) {
44864486 if (oai_settings.max_context_unlocked) {
44874487 $('#openai_max_context').attr('max', unlocked_max);
44884488 } else if (oai_settings.ai21_model.includes('jamba-1.5') || oai_settings.ai21_model.includesstartsWith('jamba-instruct')) {
44894489 $('#openai_max_context').attr('max', max_256k);
44904490 }
44914491
src/endpoints/backends/chat-completions.js+7 -1
@@ -499,6 +499,12 @@ async function sendMakerSuiteRequest(request, response) {
499499async function sendAI21Request(request, response) {
500500 if (!request.body) return response.sendStatus(400);
501501
502+ const apiKey = readSecret(request.user.directories, SECRET_KEYS.AI21);
503+ if (!apiKey) {
504+ console.warn('AI21 API key is missing.');
505+ return response.status(400).send({ error: true });
506+ }
507+
502508 const controller = new AbortController();
503509 console.debug(request.body.messages);
504510 request.socket.removeAllListeners('close');
@@ -520,7 +526,7 @@ async function sendAI21Request(request, response) {
520526 headers: {
521527 accept: 'application/json',
522528 'content-type': 'application/json',
523529 Authorization: `Bearer ${readSecret(request.user.directories, SECRET_KEYS.AI21)apiKey}`,
524530 },
525531 body: JSON.stringify(body),
526532 signal: controller.signal,