Merge pull request #3190 from M0ch0/staging Update for Latest Google AI Studio

0819588e7a6b6bdda8b06320145b606598abb35f

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

Signed
6 files changed, +14 -108Ignore whitespace
public/index.html+10 -14
@@ -3025,34 +3025,30 @@
3025 <optgroup label="Primary">3025 <optgroup label="Primary">
3026 <option value="gemini-1.5-pro">Gemini 1.5 Pro</option>3026 <option value="gemini-1.5-pro">Gemini 1.5 Pro</option>
3027 <option value="gemini-1.5-flash">Gemini 1.5 Flash</option>3027 <option value="gemini-1.5-flash">Gemini 1.5 Flash</option>
3028 <option value="gemini-1.0-pro">Gemini 1.0 Pro</option>3028 <option value="gemini-1.0-pro">Gemini 1.0 Pro (Deprecated)</option>
3029 <option value="gemini-pro">Gemini Pro (1.0)</option>3029 <option value="gemini-pro">Gemini Pro (1.0) (Deprecated)</option>
3030 <option value="gemini-pro-vision">Gemini Pro Vision (1.0)</option>
3031 <option value="gemini-ultra">Gemini Ultra (1.0)</option>3030 <option value="gemini-ultra">Gemini Ultra (1.0)</option>
3032 <option value="gemini-1.0-ultra-latest">Gemini 1.0 Ultra</option>3031 <option value="gemini-1.0-ultra-latest">Gemini 1.0 Ultra</option>
3033 <option value="text-bison-001">PaLM 2 (Legacy)</option>
3034 <option value="chat-bison-001">PaLM 2 Chat (Legacy)</option>
3035 </optgroup>3032 </optgroup>
3036 <optgroup label="Subversions">3033 <optgroup label="Subversions">
3037 <option value="gemini-2.0-flash-exp">Gemini 2.0 Flash Experiment</option>3034 <option value="gemini-2.0-flash-exp">Gemini 2.0 Flash Experimental</option>
3038 <option value="gemini-exp-1114">Gemini Experimental 2024-11-14</option>3035 <option value="gemini-exp-1114">Gemini Experimental 2024-11-14</option>
3039 <option value="gemini-exp-1121">Gemini Experimental 2024-11-21</option>3036 <option value="gemini-exp-1121">Gemini Experimental 2024-11-21</option>
3040 <option value="gemini-exp-1206">Gemini Experimental 2024-12-06</option>3037 <option value="gemini-exp-1206">Gemini Experimental 2024-12-06</option>
3041 <option value="gemini-1.5-pro-exp-0801">Gemini 1.5 Pro Experiment 2024-08-01</option>3038 <option value="gemini-1.5-pro-exp-0801">Gemini 1.5 Pro Experimental 2024-08-01</option>
3042 <option value="gemini-1.5-pro-exp-0827">Gemini 1.5 Pro Experiment 2024-08-27</option>3039 <option value="gemini-1.5-pro-exp-0827">Gemini 1.5 Pro Experimental 2024-08-27</option>
3043 <option value="gemini-1.5-pro-latest">Gemini 1.5 Pro [latest]</option>3040 <option value="gemini-1.5-pro-latest">Gemini 1.5 Pro [latest]</option>
3044 <option value="gemini-1.5-pro-001">Gemini 1.5 Pro [001]</option>3041 <option value="gemini-1.5-pro-001">Gemini 1.5 Pro [001]</option>
3045 <option value="gemini-1.5-pro-002">Gemini 1.5 Pro [002]</option>3042 <option value="gemini-1.5-pro-002">Gemini 1.5 Pro [002]</option>
3046 <option value="gemini-1.5-flash-8b">Gemini 1.5 Flash 8B</option>3043 <option value="gemini-1.5-flash-8b">Gemini 1.5 Flash 8B</option>
3047 <option value="gemini-1.5-flash-exp-0827">Gemini 1.5 Flash Experiment 2024-08-27</option>3044 <option value="gemini-1.5-flash-exp-0827">Gemini 1.5 Flash Experimental 2024-08-27</option>
3048 <option value="gemini-1.5-flash-8b-exp-0827">Gemini 1.5 Flash 8B Experiment 2024-08-27</option>3045 <option value="gemini-1.5-flash-8b-exp-0827">Gemini 1.5 Flash 8B Experimental 2024-08-27</option>
3049 <option value="gemini-1.5-flash-8b-exp-0924">Gemini 1.5 Flash 8B Experiment 2024-09-24</option>3046 <option value="gemini-1.5-flash-8b-exp-0924">Gemini 1.5 Flash 8B Experimental 2024-09-24</option>
3050 <option value="gemini-1.5-flash-latest">Gemini 1.5 Flash [latest]</option>3047 <option value="gemini-1.5-flash-latest">Gemini 1.5 Flash [latest]</option>
3051 <option value="gemini-1.5-flash-001">Gemini 1.5 Flash [001]</option>3048 <option value="gemini-1.5-flash-001">Gemini 1.5 Flash [001]</option>
3052 <option value="gemini-1.5-flash-002">Gemini 1.5 Flash [002]</option>3049 <option value="gemini-1.5-flash-002">Gemini 1.5 Flash [002]</option>
3053 <option value="gemini-1.0-pro-latest">Gemini 1.0 Pro [latest]</option>3050 <option value="gemini-1.0-pro-latest">Gemini 1.0 Pro [latest] (Deprecated)</option>
3054 <option value="gemini-1.0-pro-001">Gemini 1.0 Pro (Tuning) [001]</option>3051 <option value="gemini-1.0-pro-001">Gemini 1.0 Pro (Tuning) [001] (Deprecated)</option>
3055 <option value="gemini-1.0-pro-vision-latest">Gemini 1.0 Pro Vision [latest]</option>
3056 </optgroup>3052 </optgroup>
3057 </select>3053 </select>
3058 </div>3054 </div>
public/scripts/extensions/caption/settings.html+0 -1
@@ -70,7 +70,6 @@
70 <option data-type="google" value="gemini-1.5-pro-002">gemini-1.5-pro-002</option>70 <option data-type="google" value="gemini-1.5-pro-002">gemini-1.5-pro-002</option>
71 <option data-type="google" value="gemini-1.5-pro-exp-0801">gemini-1.5-pro-exp-0801</option>71 <option data-type="google" value="gemini-1.5-pro-exp-0801">gemini-1.5-pro-exp-0801</option>
72 <option data-type="google" value="gemini-1.5-pro-exp-0827">gemini-1.5-pro-exp-0827</option>72 <option data-type="google" value="gemini-1.5-pro-exp-0827">gemini-1.5-pro-exp-0827</option>
73 <option data-type="google" value="gemini-pro-vision">gemini-pro-vision</option>
74 <option data-type="groq" value="llama-3.2-11b-vision-preview">llama-3.2-11b-vision-preview</option>73 <option data-type="groq" value="llama-3.2-11b-vision-preview">llama-3.2-11b-vision-preview</option>
75 <option data-type="groq" value="llama-3.2-90b-vision-preview">llama-3.2-90b-vision-preview</option>74 <option data-type="groq" value="llama-3.2-90b-vision-preview">llama-3.2-90b-vision-preview</option>
76 <option data-type="groq" value="llava-v1.5-7b-4096-preview">llava-v1.5-7b-4096-preview</option>75 <option data-type="groq" value="llava-v1.5-7b-4096-preview">llava-v1.5-7b-4096-preview</option>
public/scripts/openai.js+0 -6
@@ -4087,13 +4087,8 @@ async function onModelChange() {
4087 $('#openai_max_context').attr('max', max_2mil);4087 $('#openai_max_context').attr('max', max_2mil);
4088 } else if (value.includes('gemini-1.5-flash') || value.includes('gemini-2.0-flash-exp')) {4088 } else if (value.includes('gemini-1.5-flash') || value.includes('gemini-2.0-flash-exp')) {
4089 $('#openai_max_context').attr('max', max_1mil);4089 $('#openai_max_context').attr('max', max_1mil);
4090 } else if (value.includes('gemini-1.0-pro-vision') || value === 'gemini-pro-vision') {
4091 $('#openai_max_context').attr('max', max_16k);
4092 } else if (value.includes('gemini-1.0-pro') || value === 'gemini-pro') {4090 } else if (value.includes('gemini-1.0-pro') || value === 'gemini-pro') {
4093 $('#openai_max_context').attr('max', max_32k);4091 $('#openai_max_context').attr('max', max_32k);
4094 } else if (value === 'text-bison-001') {
4095 $('#openai_max_context').attr('max', max_8k);
4096 // The ultra endpoints are possibly dead:
4097 } else if (value.includes('gemini-1.0-ultra') || value === 'gemini-ultra') {4092 } else if (value.includes('gemini-1.0-ultra') || value === 'gemini-ultra') {
4098 $('#openai_max_context').attr('max', max_32k);4093 $('#openai_max_context').attr('max', max_32k);
4099 } else {4094 } else {
@@ -4776,7 +4771,6 @@ export function isImageInliningSupported() {
4776 'gemini-1.5-pro-002',4771 'gemini-1.5-pro-002',
4777 'gemini-1.5-pro-exp-0801',4772 'gemini-1.5-pro-exp-0801',
4778 'gemini-1.5-pro-exp-0827',4773 'gemini-1.5-pro-exp-0827',
4779 'gemini-pro-vision',
4780 'claude-3',4774 'claude-3',
4781 'claude-3-5',4775 'claude-3-5',
4782 'gpt-4-turbo',4776 'gpt-4-turbo',
src/constants.js+0 -27
@@ -159,33 +159,6 @@ export const GEMINI_SAFETY = [
159 },159 },
160];160];
161161
162export const BISON_SAFETY = [
163 {
164 category: 'HARM_CATEGORY_DEROGATORY',
165 threshold: 'BLOCK_NONE',
166 },
167 {
168 category: 'HARM_CATEGORY_TOXICITY',
169 threshold: 'BLOCK_NONE',
170 },
171 {
172 category: 'HARM_CATEGORY_VIOLENCE',
173 threshold: 'BLOCK_NONE',
174 },
175 {
176 category: 'HARM_CATEGORY_SEXUAL',
177 threshold: 'BLOCK_NONE',
178 },
179 {
180 category: 'HARM_CATEGORY_MEDICAL',
181 threshold: 'BLOCK_NONE',
182 },
183 {
184 category: 'HARM_CATEGORY_DANGEROUS',
185 threshold: 'BLOCK_NONE',
186 },
187];
188
189export const CHAT_COMPLETION_SOURCES = {162export const CHAT_COMPLETION_SOURCES = {
190 OPENAI: 'openai',163 OPENAI: 'openai',
191 WINDOWAI: 'windowai',164 WINDOWAI: 'windowai',
src/endpoints/backends/chat-completions.js+4 -41
@@ -6,7 +6,6 @@ import { jsonParser } from '../../express-common.js';
6import {6import {
7 CHAT_COMPLETION_SOURCES,7 CHAT_COMPLETION_SOURCES,
8 GEMINI_SAFETY,8 GEMINI_SAFETY,
9 BISON_SAFETY,
10 OPENROUTER_HEADERS,9 OPENROUTER_HEADERS,
11} from '../../constants.js';10} from '../../constants.js';
12import {11import {
@@ -262,9 +261,7 @@ async function sendMakerSuiteRequest(request, response) {
262 }261 }
263262
264 const model = String(request.body.model);263 const model = String(request.body.model);
265 const isGemini = model.includes('gemini');264 const stream = Boolean(request.body.stream);
266 const isText = model.includes('text');
267 const stream = Boolean(request.body.stream) && isGemini;
268265
269 const generationConfig = {266 const generationConfig = {
270 stopSequences: request.body.stop,267 stopSequences: request.body.stop,
@@ -301,39 +298,7 @@ async function sendMakerSuiteRequest(request, response) {
301 return body;298 return body;
302 }299 }
303300
304 function getBisonBody() {301 const body = getGeminiBody();
305 const prompt = isText
306 ? ({ text: convertTextCompletionPrompt(request.body.messages) })
307 : ({ messages: convertGooglePrompt(request.body.messages, model).contents });
308
309 /** @type {any} Shut the lint up */
310 const bisonBody = {
311 ...generationConfig,
312 safetySettings: BISON_SAFETY,
313 candidate_count: 1, // lewgacy spelling
314 prompt: prompt,
315 };
316
317 if (!isText) {
318 delete bisonBody.stopSequences;
319 delete bisonBody.maxOutputTokens;
320 delete bisonBody.safetySettings;
321
322 if (Array.isArray(prompt.messages)) {
323 for (const msg of prompt.messages) {
324 msg.author = msg.role;
325 msg.content = msg.parts[0].text;
326 delete msg.parts;
327 delete msg.role;
328 }
329 }
330 }
331
332 delete bisonBody.candidateCount;
333 return bisonBody;
334 }
335
336 const body = isGemini ? getGeminiBody() : getBisonBody();
337 console.log('Google AI Studio request:', body);302 console.log('Google AI Studio request:', body);
338303
339 try {304 try {
@@ -343,10 +308,8 @@ async function sendMakerSuiteRequest(request, response) {
343 controller.abort();308 controller.abort();
344 });309 });
345310
346 const apiVersion = isGemini ? 'v1beta' : 'v1beta2';311 const apiVersion = 'v1beta';
347 const responseType = isGemini312 const responseType = (stream ? 'streamGenerateContent' : 'generateContent');
348 ? (stream ? 'streamGenerateContent' : 'generateContent')
349 : (isText ? 'generateText' : 'generateMessage');
350313
351 const generateResponse = await fetch(`${apiUrl.toString().replace(/\/$/, '')}/${apiVersion}/models/${model}:${responseType}?key=${apiKey}${stream ? '&alt=sse' : ''}`, {314 const generateResponse = await fetch(`${apiUrl.toString().replace(/\/$/, '')}/${apiVersion}/models/${model}:${responseType}?key=${apiKey}${stream ? '&alt=sse' : ''}`, {
352 body: JSON.stringify(body),315 body: JSON.stringify(body),
src/prompt-converters.js+0 -19
@@ -333,8 +333,6 @@ export function convertCohereMessages(messages, charName = '', userName = '') {
333 * @returns {{contents: *[], system_instruction: {parts: {text: string}}}} Prompt for Google MakerSuite models333 * @returns {{contents: *[], system_instruction: {parts: {text: string}}}} Prompt for Google MakerSuite models
334 */334 */
335export function convertGooglePrompt(messages, model, useSysPrompt = false, charName = '', userName = '') {335export function convertGooglePrompt(messages, model, useSysPrompt = false, charName = '', userName = '') {
336 // This is a 1x1 transparent PNG
337 const PNG_PIXEL = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII=';
338336
339 const visionSupportedModels = [337 const visionSupportedModels = [
340 'gemini-2.0-flash-exp',338 'gemini-2.0-flash-exp',
@@ -355,13 +353,6 @@ export function convertGooglePrompt(messages, model, useSysPrompt = false, charN
355 'gemini-1.5-pro-002',353 'gemini-1.5-pro-002',
356 'gemini-1.5-pro-exp-0801',354 'gemini-1.5-pro-exp-0801',
357 'gemini-1.5-pro-exp-0827',355 'gemini-1.5-pro-exp-0827',
358 'gemini-1.0-pro-vision-latest',
359 'gemini-pro-vision',
360 ];
361
362 const dummyRequiredModels = [
363 'gemini-1.0-pro-vision-latest',
364 'gemini-pro-vision',
365 ];356 ];
366357
367 const isMultimodal = visionSupportedModels.includes(model);358 const isMultimodal = visionSupportedModels.includes(model);
@@ -452,16 +443,6 @@ export function convertGooglePrompt(messages, model, useSysPrompt = false, charN
452 }443 }
453 });444 });
454445
455 // pro 1.5 doesn't require a dummy image to be attached, other vision models do
456 if (isMultimodal && dummyRequiredModels.includes(model) && !hasImage) {
457 contents[0].parts.push({
458 inlineData: {
459 mimeType: 'image/png',
460 data: PNG_PIXEL,
461 },
462 });
463 }
464
465 return { contents: contents, system_instruction: system_instruction };446 return { contents: contents, system_instruction: system_instruction };
466}447}
467448