Merge pull request #3434 from sirius422/add-gemini-models Add new gemini models and update the safety settings

b6d6727135c036b16dda3ff543a3ae2499e9b1e8

Wolfsblvt <wolfsblvt@gmail.com>

Signed
6 files changed, +35 -8Showing whitespace changes
public/index.html+4 -1
@@ -3075,8 +3075,11 @@
3075 <option value="gemini-1.0-ultra-latest">Gemini 1.0 Ultra</option>3075 <option value="gemini-1.0-ultra-latest">Gemini 1.0 Ultra</option>
3076 </optgroup>3076 </optgroup>
3077 <optgroup label="Subversions">3077 <optgroup label="Subversions">
3078 <option value="gemini-2.0-flash-lite-preview-02-05">Gemini 2.0 Flash Lite Preview 2025-02-05</option>3078 <option value="gemini-2.0-pro-exp">Gemini 2.0 Pro Experimental</option>
3079 <option value="gemini-2.0-pro-exp-02-05">Gemini 2.0 Pro Experimental 2025-02-05</option>3079 <option value="gemini-2.0-pro-exp-02-05">Gemini 2.0 Pro Experimental 2025-02-05</option>
3080 <option value="gemini-2.0-flash-lite-preview">Gemini 2.0 Flash-Lite Preview</option>
3081 <option value="gemini-2.0-flash-lite-preview-02-05">Gemini 2.0 Flash-Lite Preview 2025-02-05</option>
3082 <option value="gemini-2.0-flash-001">Gemini 2.0 Flash [001]</option>
3080 <option value="gemini-2.0-flash-thinking-exp">Gemini 2.0 Flash Thinking Experimental</option>3083 <option value="gemini-2.0-flash-thinking-exp">Gemini 2.0 Flash Thinking Experimental</option>
3081 <option value="gemini-2.0-flash-thinking-exp-01-21">Gemini 2.0 Flash Thinking Experimental 2025-01-21</option>3084 <option value="gemini-2.0-flash-thinking-exp-01-21">Gemini 2.0 Flash Thinking Experimental 2025-01-21</option>
3082 <option value="gemini-2.0-flash-thinking-exp-1219">Gemini 2.0 Flash Thinking Experimental 2024-12-19</option>3085 <option value="gemini-2.0-flash-thinking-exp-1219">Gemini 2.0 Flash Thinking Experimental 2024-12-19</option>
public/scripts/extensions/caption/settings.html+6 -0
@@ -53,6 +53,12 @@
53 <option data-type="anthropic" value="claude-3-opus-20240229">claude-3-opus-20240229</option>53 <option data-type="anthropic" value="claude-3-opus-20240229">claude-3-opus-20240229</option>
54 <option data-type="anthropic" value="claude-3-sonnet-20240229">claude-3-sonnet-20240229</option>54 <option data-type="anthropic" value="claude-3-sonnet-20240229">claude-3-sonnet-20240229</option>
55 <option data-type="anthropic" value="claude-3-haiku-20240307">claude-3-haiku-20240307</option>55 <option data-type="anthropic" value="claude-3-haiku-20240307">claude-3-haiku-20240307</option>
56 <option data-type="google" value="gemini-2.0-pro-exp">gemini-2.0-pro-exp</option>
57 <option data-type="google" value="gemini-2.0-pro-exp-02-05">gemini-2.0-pro-exp-02-05</option>
58 <option data-type="google" value="gemini-2.0-flash-lite-preview">gemini-2.0-flash-lite-preview</option>
59 <option data-type="google" value="gemini-2.0-flash-lite-preview-02-05">gemini-2.0-flash-lite-preview-02-05</option>
60 <option data-type="google" value="gemini-2.0-flash">gemini-2.0-flash</option>
61 <option data-type="google" value="gemini-2.0-flash-001">gemini-2.0-flash-001</option>
56 <option data-type="google" value="gemini-2.0-flash-exp">gemini-2.0-flash-exp</option>62 <option data-type="google" value="gemini-2.0-flash-exp">gemini-2.0-flash-exp</option>
57 <option data-type="google" value="gemini-2.0-flash-thinking-exp">gemini-2.0-flash-thinking-exp</option>63 <option data-type="google" value="gemini-2.0-flash-thinking-exp">gemini-2.0-flash-thinking-exp</option>
58 <option data-type="google" value="gemini-2.0-flash-thinking-exp-01-21">gemini-2.0-flash-thinking-exp-01-21</option>64 <option data-type="google" value="gemini-2.0-flash-thinking-exp-01-21">gemini-2.0-flash-thinking-exp-01-21</option>
public/scripts/openai.js+8 -2
@@ -4239,9 +4239,9 @@ async function onModelChange() {
4239 $('#openai_max_context').attr('max', max_2mil);4239 $('#openai_max_context').attr('max', max_2mil);
4240 } else if (value.includes('gemini-exp-1114') || value.includes('gemini-exp-1121') || value.includes('gemini-2.0-flash-thinking-exp-1219')) {4240 } else if (value.includes('gemini-exp-1114') || value.includes('gemini-exp-1121') || value.includes('gemini-2.0-flash-thinking-exp-1219')) {
4241 $('#openai_max_context').attr('max', max_32k);4241 $('#openai_max_context').attr('max', max_32k);
4242 } else if (value.includes('gemini-1.5-pro') || value.includes('gemini-exp-1206')) {4242 } else if (value.includes('gemini-1.5-pro') || value.includes('gemini-exp-1206') || value.includes('gemini-2.0-pro')) {
4243 $('#openai_max_context').attr('max', max_2mil);4243 $('#openai_max_context').attr('max', max_2mil);
4244 } else if (value.includes('gemini-1.5-flash') || value.includes('gemini-2.0-flash-exp') || value.includes('gemini-2.0-flash-thinking-exp')) {4244 } else if (value.includes('gemini-1.5-flash') || value.includes('gemini-2.0-flash')) {
4245 $('#openai_max_context').attr('max', max_1mil);4245 $('#openai_max_context').attr('max', max_1mil);
4246 } else if (value.includes('gemini-1.0-pro') || value === 'gemini-pro') {4246 } else if (value.includes('gemini-1.0-pro') || value === 'gemini-pro') {
4247 $('#openai_max_context').attr('max', max_32k);4247 $('#openai_max_context').attr('max', max_32k);
@@ -4934,6 +4934,12 @@ export function isImageInliningSupported() {
4934 // gultra just isn't being offered as multimodal, thanks google.4934 // gultra just isn't being offered as multimodal, thanks google.
4935 const visionSupportedModels = [4935 const visionSupportedModels = [
4936 'gpt-4-vision',4936 'gpt-4-vision',
4937 'gemini-2.0-pro-exp',
4938 'gemini-2.0-pro-exp-02-05',
4939 'gemini-2.0-flash-lite-preview',
4940 'gemini-2.0-flash-lite-preview-02-05',
4941 'gemini-2.0-flash',
4942 'gemini-2.0-flash-001',
4937 'gemini-2.0-flash-thinking-exp-1219',4943 'gemini-2.0-flash-thinking-exp-1219',
4938 'gemini-2.0-flash-thinking-exp-01-21',4944 'gemini-2.0-flash-thinking-exp-01-21',
4939 'gemini-2.0-flash-thinking-exp',4945 'gemini-2.0-flash-thinking-exp',
src/constants.js+4 -4
@@ -139,19 +139,19 @@ export const UNSAFE_EXTENSIONS = [
139export const GEMINI_SAFETY = [139export const GEMINI_SAFETY = [
140 {140 {
141 category: 'HARM_CATEGORY_HARASSMENT',141 category: 'HARM_CATEGORY_HARASSMENT',
142 threshold: 'BLOCK_NONE',142 threshold: 'OFF',
143 },143 },
144 {144 {
145 category: 'HARM_CATEGORY_HATE_SPEECH',145 category: 'HARM_CATEGORY_HATE_SPEECH',
146 threshold: 'BLOCK_NONE',146 threshold: 'OFF',
147 },147 },
148 {148 {
149 category: 'HARM_CATEGORY_SEXUALLY_EXPLICIT',149 category: 'HARM_CATEGORY_SEXUALLY_EXPLICIT',
150 threshold: 'BLOCK_NONE',150 threshold: 'OFF',
151 },151 },
152 {152 {
153 category: 'HARM_CATEGORY_DANGEROUS_CONTENT',153 category: 'HARM_CATEGORY_DANGEROUS_CONTENT',
154 threshold: 'BLOCK_NONE',154 threshold: 'OFF',
155 },155 },
156 {156 {
157 category: 'HARM_CATEGORY_CIVIC_INTEGRITY',157 category: 'HARM_CATEGORY_CIVIC_INTEGRITY',
src/endpoints/backends/chat-completions.js+7 -1
@@ -316,9 +316,15 @@ async function sendMakerSuiteRequest(request, response) {
316 const prompt = convertGooglePrompt(request.body.messages, model, should_use_system_prompt, getPromptNames(request));316 const prompt = convertGooglePrompt(request.body.messages, model, should_use_system_prompt, getPromptNames(request));
317 let safetySettings = GEMINI_SAFETY;317 let safetySettings = GEMINI_SAFETY;
318318
319 if (model.includes('gemini-2.0-flash-exp')) {319 // These old models do not support setting the threshold to OFF at all.
320 if (['gemini-1.5-pro-001', 'gemini-1.5-flash-001', 'gemini-1.0-pro-001'].includes(model)) {
321 safetySettings = GEMINI_SAFETY.map(setting => ({ ...setting, threshold: 'BLOCK_NONE' }));
322 }
323 // Interestingly, Gemini 2.0 Flash does support setting the threshold for HARM_CATEGORY_CIVIC_INTEGRITY to OFF.
324 else if (['gemini-2.0-flash', 'gemini-2.0-flash-001', 'gemini-2.0-flash-exp'].includes(model)) {
320 safetySettings = GEMINI_SAFETY.map(setting => ({ ...setting, threshold: 'OFF' }));325 safetySettings = GEMINI_SAFETY.map(setting => ({ ...setting, threshold: 'OFF' }));
321 }326 }
327 // Most of the other models allow for setting the threshold of filters, except for HARM_CATEGORY_CIVIC_INTEGRITY, to OFF.
322328
323 let body = {329 let body = {
324 contents: prompt.contents,330 contents: prompt.contents,
src/prompt-converters.js+6 -0
@@ -360,6 +360,12 @@ export function convertCohereMessages(messages, names) {
360 */360 */
361export function convertGooglePrompt(messages, model, useSysPrompt, names) {361export function convertGooglePrompt(messages, model, useSysPrompt, names) {
362 const visionSupportedModels = [362 const visionSupportedModels = [
363 'gemini-2.0-pro-exp',
364 'gemini-2.0-pro-exp-02-05',
365 'gemini-2.0-flash-lite-preview',
366 'gemini-2.0-flash-lite-preview-02-05',
367 'gemini-2.0-flash',
368 'gemini-2.0-flash-001',
363 'gemini-2.0-flash-thinking-exp',369 'gemini-2.0-flash-thinking-exp',
364 'gemini-2.0-flash-thinking-exp-01-21',370 'gemini-2.0-flash-thinking-exp-01-21',
365 'gemini-2.0-flash-thinking-exp-1219',371 'gemini-2.0-flash-thinking-exp-1219',