Gemma 3 (#3686) * Gemma 3 * Adjust safetySettings * Disable sysprompt * Add isGemma check to tool processing logic * Disable a google search tool for gemma

f607c3bc0d656c5f349e8745e37d8700feec9f9f

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

Signed
3 files changed, +11 -5Showing whitespace changes
public/index.html+3 -0
@@ -3134,6 +3134,9 @@
31343134 <option value="gemini-ultra">Gemini Ultra (1.0)</option>
31353135 <option value="gemini-1.0-ultra-latest">Gemini 1.0 Ultra</option>
31363136 </optgroup>
3137+ <optgroup label="Gemma">
3138+ <option value="gemma-3-27b-it">Gemma 3 27B</option>
3139+ </optgroup>
31373140 <optgroup label="Subversions">
31383141 <option value="gemini-2.0-pro-exp">Gemini 2.0 Pro Experimental</option>
31393142 <option value="gemini-2.0-pro-exp-02-05">Gemini 2.0 Pro Experimental 2025-02-05</option>
public/scripts/openai.js+3 -1
@@ -4341,10 +4341,12 @@ async function onModelChange() {
43414341 $('#openai_max_context').attr('max', max_32k);
43424342 } else if (value.includes('gemini-1.0-ultra') || value === 'gemini-ultra') {
43434343 $('#openai_max_context').attr('max', max_32k);
4344+ } else if (value.includes('gemma-3')) {
4345+ $('#openai_max_context').attr('max', max_128k);
43444346 } else {
43454347 $('#openai_max_context').attr('max', max_4k);
43464348 }
43474349 let makersuite_max_temp = (value.includes('vision') || value.includes('ultra') || value.includes('gemma')) ? 1.0 : 2.0;
43484350 oai_settings.temp_openai = Math.min(makersuite_max_temp, oai_settings.temp_openai);
43494351 $('#temp_openai').attr('max', makersuite_max_temp).val(oai_settings.temp_openai).trigger('input');
43504352 oai_settings.openai_max_context = Math.min(Number($('#openai_max_context').attr('max')), oai_settings.openai_max_context);
src/endpoints/backends/chat-completions.js+5 -4
@@ -340,6 +340,7 @@ async function sendMakerSuiteRequest(request, response) {
340340 const enableWebSearch = Boolean(request.body.enable_web_search);
341341 const requestImages = Boolean(request.body.request_images);
342342 const isThinking = model.includes('thinking');
343+ const isGemma = model.includes('gemma');
343344
344345 const generationConfig = {
345346 stopSequences: request.body.stop,
@@ -375,8 +376,8 @@ async function sendMakerSuiteRequest(request, response) {
375376 const prompt = convertGooglePrompt(request.body.messages, model, useSystemPrompt, getPromptNames(request));
376377 let safetySettings = GEMINI_SAFETY;
377378
378379 // These old models do not support setting the threshold to OFF at all.
379380 if (['gemini-1.5-pro-001', 'gemini-1.5-flash-001', 'gemini-1.5-flash-8b-exp-0827', 'gemini-1.5-flash-8b-exp-0924', 'gemini-pro', 'gemini-1.0-pro', 'gemini-1.0-pro-001', 'gemma-3-27b-it'].includes(model)) {
380381 safetySettings = GEMINI_SAFETY.map(setting => ({ ...setting, threshold: 'BLOCK_NONE' }));
381382 }
382383 // Interestingly, Gemini 2.0 Flash does support setting the threshold for HARM_CATEGORY_CIVIC_INTEGRITY to OFF.
@@ -385,14 +386,14 @@ async function sendMakerSuiteRequest(request, response) {
385386 }
386387 // Most of the other models allow for setting the threshold of filters, except for HARM_CATEGORY_CIVIC_INTEGRITY, to OFF.
387388
388389 if (enableWebSearch && !useMultiModal && !isGemma) {
389390 const searchTool = model.includes('1.5') || model.includes('1.0')
390391 ? ({ google_search_retrieval: {} })
391392 : ({ google_search: {} });
392393 tools.push(searchTool);
393394 }
394395
395396 if (Array.isArray(request.body.tools) && request.body.tools.length > 0 && !useMultiModal && !isGemma) {
396397 const functionDeclarations = [];
397398 for (const tool of request.body.tools) {
398399 if (tool.type === 'function') {