Merge pull request #3919 from cloak1505/gemini-patch

Prune Google models
This commit is contained in:
Cohee
2025-04-27 20:36:47 +03:00
committed by GitHub
6 changed files with 113 additions and 108 deletions

View File

@ -234,6 +234,10 @@ claude:
# should be ideal for most use cases. # should be ideal for most use cases.
# Any value other than a non-negative integer will be ignored and caching at depth will not be enabled. # Any value other than a non-negative integer will be ignored and caching at depth will not be enabled.
cachingAtDepth: -1 cachingAtDepth: -1
# -- GOOGLE GEMINI API CONFIGURATION --
gemini:
# API endpoint version ("v1beta" or "v1alpha")
apiVersion: 'v1beta'
# -- SERVER PLUGIN CONFIGURATION -- # -- SERVER PLUGIN CONFIGURATION --
enableServerPlugins: false enableServerPlugins: false
# Attempt to automatically update server plugins on startup # Attempt to automatically update server plugins on startup

View File

@ -2025,7 +2025,7 @@
<input id="use_makersuite_sysprompt" type="checkbox" /> <input id="use_makersuite_sysprompt" type="checkbox" />
<span> <span>
<span data-i18n="Use system prompt">Use system prompt</span> <span data-i18n="Use system prompt">Use system prompt</span>
<i class="opacity50p fa-solid fa-circle-info" title="Gemini 1.5/2.0 Pro/Flash"></i> <i class="opacity50p fa-solid fa-circle-info" title="Gemini 1.5+, LearnLM"></i>
</span> </span>
</label> </label>
<div class="toggle-description justifyLeft marginBot5"> <div class="toggle-description justifyLeft marginBot5">
@ -3146,49 +3146,49 @@
<div> <div>
<h4 data-i18n="Google Model">Google Model</h4> <h4 data-i18n="Google Model">Google Model</h4>
<select id="model_google_select"> <select id="model_google_select">
<optgroup label="Primary"> <optgroup label="Gemini 2.5">
<option value="gemini-2.0-flash">Gemini 2.0 Flash</option> <option value="gemini-2.5-pro-preview-03-25">gemini-2.5-pro-preview-03-25</option>
<option value="gemini-1.5-pro">Gemini 1.5 Pro</option> <option value="gemini-2.5-pro-exp-03-25">gemini-2.5-pro-exp-03-25</option>
<option value="gemini-1.5-flash">Gemini 1.5 Flash</option> <option value="gemini-2.5-flash-preview-04-17">gemini-2.5-flash-preview-04-17</option>
<option value="gemini-1.0-pro">Gemini 1.0 Pro (Deprecated)</option> </optgroup>
<option value="gemini-pro">Gemini Pro (1.0) (Deprecated)</option> <optgroup label="Gemini 2.0">
<option value="gemini-ultra">Gemini Ultra (1.0)</option> <option value="gemini-2.0-pro-exp-02-05">gemini-2.0-pro-exp-02-05 → 2.5-pro-exp-03-25</option>
<option value="gemini-1.0-ultra-latest">Gemini 1.0 Ultra</option> <option value="gemini-2.0-pro-exp">gemini-2.0-pro-exp → 2.5-pro-exp-03-25</option>
<option value="gemini-exp-1206">gemini-exp-1206 → 2.5-pro-exp-03-25</option>
<option value="gemini-2.0-flash-001">gemini-2.0-flash-001</option>
<option value="gemini-2.0-flash-exp-image-generation">gemini-2.0-flash-exp-image-generation</option>
<option value="gemini-2.0-flash-exp">gemini-2.0-flash-exp</option>
<option value="gemini-2.0-flash">gemini-2.0-flash</option>
<option value="gemini-2.0-flash-thinking-exp-01-21">gemini-2.0-flash-thinking-exp-01-21 → 2.5-flash-preview-04-17</option>
<option value="gemini-2.0-flash-thinking-exp-1219">gemini-2.0-flash-thinking-exp-1219 → 2.5-flash-preview-04-17</option>
<option value="gemini-2.0-flash-thinking-exp">gemini-2.0-flash-thinking-exp → 2.5-flash-preview-04-17</option>
<option value="gemini-2.0-flash-lite-001">gemini-2.0-flash-lite-001</option>
<option value="gemini-2.0-flash-lite-preview-02-05">gemini-2.0-flash-lite-preview-02-05</option>
<option value="gemini-2.0-flash-lite-preview">gemini-2.0-flash-lite-preview</option>
</optgroup>
<optgroup label="Gemini 1.5">
<option value="gemini-1.5-pro-latest">gemini-1.5-pro-latest</option>
<option value="gemini-1.5-pro-002">gemini-1.5-pro-002</option>
<option value="gemini-1.5-pro-001">gemini-1.5-pro-001</option>
<option value="gemini-1.5-pro">gemini-1.5-pro</option>
<option value="gemini-1.5-flash-latest">gemini-1.5-flash-latest</option>
<option value="gemini-1.5-flash-002">gemini-1.5-flash-002</option>
<option value="gemini-1.5-flash-001">gemini-1.5-flash-001</option>
<option value="gemini-1.5-flash">gemini-1.5-flash</option>
<option value="gemini-1.5-flash-8b-001">gemini-1.5-flash-8b-001</option>
<option value="gemini-1.5-flash-8b-exp-0924">gemini-1.5-flash-8b-exp-0924</option>
<option value="gemini-1.5-flash-8b-exp-0827">gemini-1.5-flash-8b-exp-0827</option>
<option value="gemini-1.5-flash-8b">gemini-1.5-flash-8b</option>
</optgroup> </optgroup>
<optgroup label="Gemma"> <optgroup label="Gemma">
<option value="gemma-3-27b-it">Gemma 3 27B</option> <option value="gemma-3-27b-it">gemma-3-27b-it</option>
<option value="gemma-3-12b-it">gemma-3-12b-it</option>
<option value="gemma-3-4b-it">gemma-3-4b-it</option>
<option value="gemma-3-1b-it">gemma-3-1b-it</option>
</optgroup> </optgroup>
<optgroup label="Subversions"> <optgroup label="LearnLM">
<option value="gemini-2.5-pro-preview-03-25">Gemini 2.5 Pro Preview 2025-03-25</option> <option value="learnlm-2.0-flash-experimental">learnlm-2.0-flash-experimental</option>
<option value="gemini-2.5-pro-exp-03-25">Gemini 2.5 Pro Experimental 2025-03-25</option> <option value="learnlm-1.5-pro-experimental">learnlm-1.5-pro-experimental</option>
<option value="gemini-2.0-pro-exp">Gemini 2.0 Pro Experimental</option>
<option value="gemini-2.0-pro-exp-02-05">Gemini 2.0 Pro Experimental 2025-02-05</option>
<option value="gemini-2.5-flash-preview-04-17">Gemini 2.5 Flash Preview 2025-04-17</option>
<option value="gemini-2.0-flash-lite-preview">Gemini 2.0 Flash-Lite Preview</option>
<option value="gemini-2.0-flash-lite-preview-02-05">Gemini 2.0 Flash-Lite Preview 2025-02-05</option>
<option value="gemini-2.0-flash-001">Gemini 2.0 Flash [001]</option>
<option value="gemini-2.0-flash-thinking-exp">Gemini 2.0 Flash Thinking Experimental</option>
<option value="gemini-2.0-flash-thinking-exp-01-21">Gemini 2.0 Flash Thinking Experimental 2025-01-21</option>
<option value="gemini-2.0-flash-thinking-exp-1219">Gemini 2.0 Flash Thinking Experimental 2024-12-19</option>
<option value="gemini-2.0-flash-exp">Gemini 2.0 Flash Experimental</option>
<option value="gemini-2.0-flash-exp-image-generation">Gemini 2.0 Flash (Image Generation) Experimental</option>
<option value="gemini-exp-1114">Gemini Experimental 2024-11-14</option>
<option value="gemini-exp-1121">Gemini Experimental 2024-11-21</option>
<option value="gemini-exp-1206">Gemini Experimental 2024-12-06</option>
<option value="gemini-1.5-pro-exp-0801">Gemini 1.5 Pro Experimental 2024-08-01</option>
<option value="gemini-1.5-pro-exp-0827">Gemini 1.5 Pro Experimental 2024-08-27</option>
<option value="gemini-1.5-pro-latest">Gemini 1.5 Pro [latest]</option>
<option value="gemini-1.5-pro-001">Gemini 1.5 Pro [001]</option>
<option value="gemini-1.5-pro-002">Gemini 1.5 Pro [002]</option>
<option value="gemini-1.5-flash-8b">Gemini 1.5 Flash 8B</option>
<option value="gemini-1.5-flash-exp-0827">Gemini 1.5 Flash Experimental 2024-08-27</option>
<option value="gemini-1.5-flash-8b-exp-0827">Gemini 1.5 Flash 8B Experimental 2024-08-27</option>
<option value="gemini-1.5-flash-8b-exp-0924">Gemini 1.5 Flash 8B Experimental 2024-09-24</option>
<option value="gemini-1.5-flash-latest">Gemini 1.5 Flash [latest]</option>
<option value="gemini-1.5-flash-001">Gemini 1.5 Flash [001]</option>
<option value="gemini-1.5-flash-002">Gemini 1.5 Flash [002]</option>
<option value="gemini-1.0-pro-latest">Gemini 1.0 Pro [latest] (Deprecated)</option>
<option value="gemini-1.0-pro-001">Gemini 1.0 Pro (Tuning) [001] (Deprecated)</option>
</optgroup> </optgroup>
</select> </select>
</div> </div>

View File

@ -79,34 +79,33 @@
<option data-type="anthropic" value="claude-3-haiku-20240307">claude-3-haiku-20240307</option> <option data-type="anthropic" value="claude-3-haiku-20240307">claude-3-haiku-20240307</option>
<option data-type="google" value="gemini-2.5-pro-preview-03-25">gemini-2.5-pro-preview-03-25</option> <option data-type="google" value="gemini-2.5-pro-preview-03-25">gemini-2.5-pro-preview-03-25</option>
<option data-type="google" value="gemini-2.5-pro-exp-03-25">gemini-2.5-pro-exp-03-25</option> <option data-type="google" value="gemini-2.5-pro-exp-03-25">gemini-2.5-pro-exp-03-25</option>
<option data-type="google" value="gemini-2.0-pro-exp">gemini-2.0-pro-exp</option>
<option data-type="google" value="gemini-2.0-pro-exp-02-05">gemini-2.0-pro-exp-02-05</option>
<option data-type="google" value="gemini-2.5-flash-preview-04-17">gemini-2.5-flash-preview-04-17</option> <option data-type="google" value="gemini-2.5-flash-preview-04-17">gemini-2.5-flash-preview-04-17</option>
<option data-type="google" value="gemini-2.0-flash-lite-preview">gemini-2.0-flash-lite-preview</option> <option data-type="google" value="gemini-2.0-pro-exp-02-05">gemini-2.0-pro-exp-02-05 → 2.5-pro-exp-03-25</option>
<option data-type="google" value="gemini-2.0-flash-lite-preview-02-05">gemini-2.0-flash-lite-preview-02-05</option> <option data-type="google" value="gemini-2.0-pro-exp">gemini-2.0-pro-exp → 2.5-pro-exp-03-25</option>
<option data-type="google" value="gemini-2.0-flash">gemini-2.0-flash</option> <option data-type="google" value="gemini-exp-1206">gemini-exp-1206 → 2.5-pro-exp-03-25</option>
<option data-type="google" value="gemini-2.0-flash-001">gemini-2.0-flash-001</option> <option data-type="google" value="gemini-2.0-flash-001">gemini-2.0-flash-001</option>
<option data-type="google" value="gemini-2.0-flash-exp">gemini-2.0-flash-exp</option>
<option data-type="google" value="gemini-2.0-flash-exp-image-generation">gemini-2.0-flash-exp-image-generation</option> <option data-type="google" value="gemini-2.0-flash-exp-image-generation">gemini-2.0-flash-exp-image-generation</option>
<option data-type="google" value="gemini-2.0-flash-thinking-exp">gemini-2.0-flash-thinking-exp</option> <option data-type="google" value="gemini-2.0-flash-exp">gemini-2.0-flash-exp</option>
<option data-type="google" value="gemini-2.0-flash-thinking-exp-01-21">gemini-2.0-flash-thinking-exp-01-21</option> <option data-type="google" value="gemini-2.0-flash">gemini-2.0-flash</option>
<option data-type="google" value="gemini-2.0-flash-thinking-exp-1219">gemini-2.0-flash-thinking-exp-1219</option> <option data-type="google" value="gemini-2.0-flash-thinking-exp-01-21">gemini-2.0-flash-thinking-exp-01-21 → 2.5-flash-preview-04-17</option>
<option data-type="google" value="gemini-1.5-flash">gemini-1.5-flash</option> <option data-type="google" value="gemini-2.0-flash-thinking-exp-1219">gemini-2.0-flash-thinking-exp-1219 → 2.5-flash-preview-04-17</option>
<option data-type="google" value="gemini-1.5-flash-latest">gemini-1.5-flash-latest</option> <option data-type="google" value="gemini-2.0-flash-thinking-exp">gemini-2.0-flash-thinking-exp → 2.5-flash-preview-04-17</option>
<option data-type="google" value="gemini-1.5-flash-001">gemini-1.5-flash-001</option> <option data-type="google" value="gemini-2.0-flash-lite-001">gemini-2.0-flash-lite-001</option>
<option data-type="google" value="gemini-1.5-flash-002">gemini-1.5-flash-002</option> <option data-type="google" value="gemini-2.0-flash-lite-preview-02-05">gemini-2.0-flash-lite-preview-02-05</option>
<option data-type="google" value="gemini-1.5-flash-exp-0827">gemini-1.5-flash-exp-0827</option> <option data-type="google" value="gemini-2.0-flash-lite-preview">gemini-2.0-flash-lite-preview</option>
<option data-type="google" value="gemini-1.5-flash-8b-exp-0827">gemini-1.5-flash-8b-exp-0827</option>
<option data-type="google" value="gemini-1.5-flash-8b-exp-0924">gemini-1.5-flash-8b-exp-0924</option>
<option data-type="google" value="gemini-exp-1114">gemini-exp-1114</option>
<option data-type="google" value="gemini-exp-1121">gemini-exp-1121</option>
<option data-type="google" value="gemini-exp-1206">gemini-exp-1206</option>
<option data-type="google" value="gemini-1.5-pro">gemini-1.5-pro</option>
<option data-type="google" value="gemini-1.5-pro-latest">gemini-1.5-pro-latest</option> <option data-type="google" value="gemini-1.5-pro-latest">gemini-1.5-pro-latest</option>
<option data-type="google" value="gemini-1.5-pro-001">gemini-1.5-pro-001</option>
<option data-type="google" value="gemini-1.5-pro-002">gemini-1.5-pro-002</option> <option data-type="google" value="gemini-1.5-pro-002">gemini-1.5-pro-002</option>
<option data-type="google" value="gemini-1.5-pro-exp-0801">gemini-1.5-pro-exp-0801</option> <option data-type="google" value="gemini-1.5-pro-001">gemini-1.5-pro-001</option>
<option data-type="google" value="gemini-1.5-pro-exp-0827">gemini-1.5-pro-exp-0827</option> <option data-type="google" value="gemini-1.5-pro">gemini-1.5-pro</option>
<option data-type="google" value="gemini-1.5-flash-latest">gemini-1.5-flash-latest</option>
<option data-type="google" value="gemini-1.5-flash-002">gemini-1.5-flash-002</option>
<option data-type="google" value="gemini-1.5-flash-001">gemini-1.5-flash-001</option>
<option data-type="google" value="gemini-1.5-flash">gemini-1.5-flash</option>
<option data-type="google" value="gemini-1.5-flash-8b-001">gemini-1.5-flash-8b-001</option>
<option data-type="google" value="gemini-1.5-flash-8b-exp-0924">gemini-1.5-flash-8b-exp-0924</option>
<option data-type="google" value="gemini-1.5-flash-8b-exp-0827">gemini-1.5-flash-8b-exp-0827</option>
<option data-type="google" value="learnlm-2.0-flash-experimental">learnlm-2.0-flash-experimental</option>
<option data-type="google" value="learnlm-1.5-pro-experimental">learnlm-1.5-pro-experimental</option>
<option data-type="groq" value="llama-3.2-11b-vision-preview">llama-3.2-11b-vision-preview</option> <option data-type="groq" value="llama-3.2-11b-vision-preview">llama-3.2-11b-vision-preview</option>
<option data-type="groq" value="llama-3.2-90b-vision-preview">llama-3.2-90b-vision-preview</option> <option data-type="groq" value="llama-3.2-90b-vision-preview">llama-3.2-90b-vision-preview</option>
<option data-type="groq" value="llava-v1.5-7b-4096-preview">llava-v1.5-7b-4096-preview</option> <option data-type="groq" value="llava-v1.5-7b-4096-preview">llava-v1.5-7b-4096-preview</option>

View File

@ -4481,20 +4481,16 @@ async function onModelChange() {
if (oai_settings.chat_completion_source == chat_completion_sources.MAKERSUITE) { if (oai_settings.chat_completion_source == chat_completion_sources.MAKERSUITE) {
if (oai_settings.max_context_unlocked) { if (oai_settings.max_context_unlocked) {
$('#openai_max_context').attr('max', max_2mil); $('#openai_max_context').attr('max', max_2mil);
} else if (value.includes('gemini-exp-1114') || value.includes('gemini-exp-1121') || value.includes('gemini-2.0-flash-thinking-exp-1219')) { } else if (value.includes('gemini-1.5-pro')) {
$('#openai_max_context').attr('max', max_32k);
} else if (value.includes('gemini-1.5-pro') || value.includes('gemini-exp-1206') || value.includes('gemini-2.0-pro')) {
$('#openai_max_context').attr('max', max_2mil); $('#openai_max_context').attr('max', max_2mil);
} else if (value.includes('gemini-1.5-flash') || value.includes('gemini-2.0-flash') || value.includes('gemini-2.5-flash-preview-04-17') || value.includes('gemini-2.5-pro-exp-03-25') || value.includes('gemini-2.5-pro-preview-03-25')) { } else if (value.includes('gemini-1.5-flash') || value.includes('gemini-2.0-flash') || value.includes('gemini-2.0-pro') || value.includes('gemini-exp') || value.includes('gemini-2.5-flash') || value.includes('gemini-2.5-pro') || value.includes('learnlm-2.0-flash')) {
$('#openai_max_context').attr('max', max_1mil); $('#openai_max_context').attr('max', max_1mil);
} else if (value.includes('gemini-1.0-pro') || value === 'gemini-pro') { } else if (value.includes('gemma-3-27b-it')) {
$('#openai_max_context').attr('max', max_32k);
} else if (value.includes('gemini-1.0-ultra') || value === 'gemini-ultra') {
$('#openai_max_context').attr('max', max_32k);
} else if (value.includes('gemma-3')) {
$('#openai_max_context').attr('max', max_128k); $('#openai_max_context').attr('max', max_128k);
} else if (value.includes('gemma-3') || value.includes('learnlm-1.5-pro-experimental')) {
$('#openai_max_context').attr('max', max_32k);
} else { } else {
$('#openai_max_context').attr('max', max_4k); $('#openai_max_context').attr('max', max_32k);
} }
let makersuite_max_temp = (value.includes('vision') || value.includes('ultra') || value.includes('gemma')) ? 1.0 : 2.0; let makersuite_max_temp = (value.includes('vision') || value.includes('ultra') || value.includes('gemma')) ? 1.0 : 2.0;
oai_settings.temp_openai = Math.min(makersuite_max_temp, oai_settings.temp_openai); oai_settings.temp_openai = Math.min(makersuite_max_temp, oai_settings.temp_openai);
@ -5152,9 +5148,8 @@ export function isImageInliningSupported() {
'gemini-1.5', 'gemini-1.5',
'gemini-2.0', 'gemini-2.0',
'gemini-2.5', 'gemini-2.5',
'gemini-exp-1114',
'gemini-exp-1121',
'gemini-exp-1206', 'gemini-exp-1206',
'learnlm',
// MistralAI // MistralAI
'mistral-small-2503', 'mistral-small-2503',
'mistral-small-latest', 'mistral-small-latest',
@ -5168,7 +5163,7 @@ export function isImageInliningSupported() {
case chat_completion_sources.OPENAI: case chat_completion_sources.OPENAI:
return visionSupportedModels.some(model => return visionSupportedModels.some(model =>
oai_settings.openai_model.includes(model) oai_settings.openai_model.includes(model)
&& ['gpt-4-turbo-preview', 'o1-mini', 'o3-mini'].some(x => !oai_settings.openai_model.includes(x)) && ['gpt-4-turbo-preview', 'o1-mini', 'o3-mini'].some(x => !oai_settings.openai_model.includes(x)),
); );
case chat_completion_sources.MAKERSUITE: case chat_completion_sources.MAKERSUITE:
return visionSupportedModels.some(model => oai_settings.google_model.includes(model)); return visionSupportedModels.some(model => oai_settings.google_model.includes(model));

View File

@ -156,7 +156,7 @@ export const GEMINI_SAFETY = [
}, },
{ {
category: 'HARM_CATEGORY_CIVIC_INTEGRITY', category: 'HARM_CATEGORY_CIVIC_INTEGRITY',
threshold: 'BLOCK_NONE', threshold: 'OFF',
}, },
]; ];

View File

@ -343,8 +343,8 @@ async function sendMakerSuiteRequest(request, response) {
const enableWebSearch = Boolean(request.body.enable_web_search); const enableWebSearch = Boolean(request.body.enable_web_search);
const requestImages = Boolean(request.body.request_images); const requestImages = Boolean(request.body.request_images);
const reasoningEffort = String(request.body.reasoning_effort); const reasoningEffort = String(request.body.reasoning_effort);
const isThinking = model.includes('thinking');
const isGemma = model.includes('gemma'); const isGemma = model.includes('gemma');
const isLearnLM = model.includes('learnlm');
const generationConfig = { const generationConfig = {
stopSequences: request.body.stop, stopSequences: request.body.stop,
@ -358,48 +358,60 @@ async function sendMakerSuiteRequest(request, response) {
}; };
function getGeminiBody() { function getGeminiBody() {
// #region UGLY MODEL LISTS AREA
const imageGenerationModels = [
'gemini-2.0-flash-exp',
'gemini-2.0-flash-exp-image-generation',
];
// These models do not support setting the threshold to OFF at all.
const blockNoneModels = [
'gemini-1.5-pro-001',
'gemini-1.5-flash-001',
'gemini-1.5-flash-8b-exp-0827',
'gemini-1.5-flash-8b-exp-0924',
];
const thinkingBudgetModels = [
'gemini-2.5-flash-preview-04-17',
];
const noSearchModels = [
'gemini-2.0-flash-lite',
'gemini-2.0-flash-lite-001',
'gemini-2.0-flash-lite-preview-02-05',
'gemini-1.5-flash-8b-exp-0924',
'gemini-1.5-flash-8b-exp-0827',
];
// #endregion
if (!Array.isArray(generationConfig.stopSequences) || !generationConfig.stopSequences.length) { if (!Array.isArray(generationConfig.stopSequences) || !generationConfig.stopSequences.length) {
delete generationConfig.stopSequences; delete generationConfig.stopSequences;
} }
const useMultiModal = requestImages && ['gemini-2.0-flash-exp', 'gemini-2.0-flash-exp-image-generation'].includes(model); const enableImageModality = requestImages && imageGenerationModels.includes(model);
if (useMultiModal) { if (enableImageModality) {
generationConfig.responseModalities = ['text', 'image']; generationConfig.responseModalities = ['text', 'image'];
} }
const useSystemPrompt = !useMultiModal && ( const useSystemPrompt = !enableImageModality && !isGemma && request.body.use_makersuite_sysprompt;
model.includes('gemini-2.5-pro') ||
model.includes('gemini-2.5-flash') ||
model.includes('gemini-2.0-pro') ||
model.includes('gemini-2.0-flash') ||
model.includes('gemini-2.0-flash-thinking-exp') ||
model.includes('gemini-1.5-flash') ||
model.includes('gemini-1.5-pro') ||
model.startsWith('gemini-exp')
) && request.body.use_makersuite_sysprompt;
const tools = []; const tools = [];
const prompt = convertGooglePrompt(request.body.messages, model, useSystemPrompt, getPromptNames(request)); const prompt = convertGooglePrompt(request.body.messages, model, useSystemPrompt, getPromptNames(request));
let safetySettings = GEMINI_SAFETY; let safetySettings = GEMINI_SAFETY;
// These models do not support setting the threshold to OFF at all. if (blockNoneModels.includes(model)) {
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)) {
safetySettings = GEMINI_SAFETY.map(setting => ({ ...setting, threshold: 'BLOCK_NONE' })); safetySettings = GEMINI_SAFETY.map(setting => ({ ...setting, threshold: 'BLOCK_NONE' }));
} }
// Interestingly, Gemini 2.0 Flash does support setting the threshold for HARM_CATEGORY_CIVIC_INTEGRITY to OFF.
else if (['gemini-2.0-flash', 'gemini-2.0-flash-001', 'gemini-2.0-flash-exp', 'gemini-2.0-flash-exp-image-generation'].includes(model)) {
safetySettings = GEMINI_SAFETY.map(setting => ({ ...setting, threshold: 'OFF' }));
}
// Most of the other models allow for setting the threshold of filters, except for HARM_CATEGORY_CIVIC_INTEGRITY, to OFF.
if (enableWebSearch && !useMultiModal && !isGemma) { if (enableWebSearch && !enableImageModality && !isGemma && !isLearnLM && !noSearchModels.includes(model)) {
const searchTool = model.includes('1.5') || model.includes('1.0') const searchTool = model.includes('1.5')
? ({ google_search_retrieval: {} }) ? ({ google_search_retrieval: {} })
: ({ google_search: {} }); : ({ google_search: {} });
tools.push(searchTool); tools.push(searchTool);
} }
if (Array.isArray(request.body.tools) && request.body.tools.length > 0 && !useMultiModal && !isGemma) { if (Array.isArray(request.body.tools) && request.body.tools.length > 0 && !enableImageModality && !isGemma) {
const functionDeclarations = []; const functionDeclarations = [];
for (const tool of request.body.tools) { for (const tool of request.body.tools) {
if (tool.type === 'function') { if (tool.type === 'function') {
@ -415,11 +427,6 @@ async function sendMakerSuiteRequest(request, response) {
tools.push({ function_declarations: functionDeclarations }); tools.push({ function_declarations: functionDeclarations });
} }
// One more models list to maintain, yay
const thinkingBudgetModels = [
'gemini-2.5-flash-preview-04-17',
];
if (thinkingBudgetModels.includes(model)) { if (thinkingBudgetModels.includes(model)) {
const thinkingBudget = calculateGoogleBudgetTokens(generationConfig.maxOutputTokens, reasoningEffort); const thinkingBudget = calculateGoogleBudgetTokens(generationConfig.maxOutputTokens, reasoningEffort);
@ -455,7 +462,7 @@ async function sendMakerSuiteRequest(request, response) {
controller.abort(); controller.abort();
}); });
const apiVersion = isThinking ? 'v1alpha' : 'v1beta'; const apiVersion = getConfigValue('gemini.apiVersion', 'v1beta');
const responseType = (stream ? 'streamGenerateContent' : 'generateContent'); const responseType = (stream ? 'streamGenerateContent' : 'generateContent');
const generateResponse = await fetch(`${apiUrl.toString().replace(/\/$/, '')}/${apiVersion}/models/${model}:${responseType}?key=${apiKey}${stream ? '&alt=sse' : ''}`, { const generateResponse = await fetch(`${apiUrl.toString().replace(/\/$/, '')}/${apiVersion}/models/${model}:${responseType}?key=${apiKey}${stream ? '&alt=sse' : ''}`, {
@ -466,7 +473,7 @@ async function sendMakerSuiteRequest(request, response) {
}, },
signal: controller.signal, signal: controller.signal,
}); });
// have to do this because of their busted ass streaming endpoint
if (stream) { if (stream) {
try { try {
// Pipe remote SSE stream to Express response // Pipe remote SSE stream to Express response