🇬 refactor: Update default Google Models and Parameters (#2782)

* Update Google default model and parameters

* Update .env.example Vertex AI Models to reflect latest version and deprecate bison family

* Update Vertex AI model list in .env.example
This commit is contained in:
Aman 2024-05-22 07:20:35 -07:00 committed by GitHub
parent f00a8f87f7
commit 9d8fd92dd3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 15 additions and 61 deletions

View file

@ -119,7 +119,7 @@ GOOGLE_KEY=user_provided
# GOOGLE_MODELS=gemini-1.5-flash-latest,gemini-1.0-pro,gemini-1.0-pro-001,gemini-1.0-pro-latest,gemini-1.0-pro-vision-latest,gemini-1.5-pro-latest,gemini-pro,gemini-pro-vision # GOOGLE_MODELS=gemini-1.5-flash-latest,gemini-1.0-pro,gemini-1.0-pro-001,gemini-1.0-pro-latest,gemini-1.0-pro-vision-latest,gemini-1.5-pro-latest,gemini-pro,gemini-pro-vision
# Vertex AI # Vertex AI
# GOOGLE_MODELS=gemini-1.5-flash-preview-0514,gemini-1.5-pro-preview-0409,gemini-1.0-pro-vision-001,gemini-pro,gemini-pro-vision,chat-bison,chat-bison-32k,codechat-bison,codechat-bison-32k,text-bison,text-bison-32k,text-unicorn,code-gecko,code-bison,code-bison-32k # GOOGLE_MODELS=gemini-1.5-flash-preview-0514,gemini-1.5-pro-preview-0514,gemini-1.0-pro-vision-001,gemini-1.0-pro-002,gemini-1.0-pro-001,gemini-pro-vision,gemini-1.0-pro
# Google Gemini Safety Settings # Google Gemini Safety Settings
# NOTE (Vertex AI): You do not have access to the BLOCK_NONE setting by default. # NOTE (Vertex AI): You do not have access to the BLOCK_NONE setting by default.

View file

@ -1,4 +1,3 @@
import { useEffect } from 'react';
import TextareaAutosize from 'react-textarea-autosize'; import TextareaAutosize from 'react-textarea-autosize';
import { EModelEndpoint, endpointSettings } from 'librechat-data-provider'; import { EModelEndpoint, endpointSettings } from 'librechat-data-provider';
import type { TModelSelectProps, OnInputNumberChange } from '~/common'; import type { TModelSelectProps, OnInputNumberChange } from '~/common';
@ -31,25 +30,6 @@ export default function Settings({ conversation, setOption, models, readonly }:
maxOutputTokens, maxOutputTokens,
} = conversation ?? {}; } = conversation ?? {};
const isGemini = model?.toLowerCase()?.includes('gemini');
const maxOutputTokensMax = isGemini
? google.maxOutputTokens.maxGemini
: google.maxOutputTokens.max;
const maxOutputTokensDefault = isGemini
? google.maxOutputTokens.defaultGemini
: google.maxOutputTokens.default;
useEffect(
() => {
if (model) {
setOption('maxOutputTokens')(Math.min(Number(maxOutputTokens) ?? 0, maxOutputTokensMax));
}
},
// eslint-disable-next-line react-hooks/exhaustive-deps
[model],
);
const [setMaxContextTokens, maxContextTokensValue] = useDebouncedInput<number | null | undefined>( const [setMaxContextTokens, maxContextTokensValue] = useDebouncedInput<number | null | undefined>(
{ {
setOption, setOption,
@ -281,15 +261,15 @@ export default function Settings({ conversation, setOption, models, readonly }:
<Label htmlFor="max-tokens-int" className="text-left text-sm font-medium"> <Label htmlFor="max-tokens-int" className="text-left text-sm font-medium">
{localize('com_endpoint_max_output_tokens')}{' '} {localize('com_endpoint_max_output_tokens')}{' '}
<small className="opacity-40"> <small className="opacity-40">
({localize('com_endpoint_default_with_num', maxOutputTokensDefault + '')}) ({localize('com_endpoint_default_with_num', google.maxOutputTokens.default + '')})
</small> </small>
</Label> </Label>
<InputNumber <InputNumber
id="max-tokens-int" id="max-tokens-int"
disabled={readonly} disabled={readonly}
value={maxOutputTokens} value={maxOutputTokens}
onChange={(value) => setMaxOutputTokens(value ?? maxOutputTokensDefault)} onChange={(value) => setMaxOutputTokens(Number(value))}
max={maxOutputTokensMax} max={google.maxOutputTokens.max}
min={google.maxOutputTokens.min} min={google.maxOutputTokens.min}
step={google.maxOutputTokens.step} step={google.maxOutputTokens.step}
controls={false} controls={false}
@ -304,10 +284,10 @@ export default function Settings({ conversation, setOption, models, readonly }:
</div> </div>
<Slider <Slider
disabled={readonly} disabled={readonly}
value={[maxOutputTokens ?? maxOutputTokensDefault]} value={[maxOutputTokens ?? google.maxOutputTokens.default]}
onValueChange={(value) => setMaxOutputTokens(value[0])} onValueChange={(value) => setMaxOutputTokens(value[0])}
doubleClickHandler={() => setMaxOutputTokens(maxOutputTokensDefault)} doubleClickHandler={() => setMaxOutputTokens(google.maxOutputTokens.default)}
max={maxOutputTokensMax} max={google.maxOutputTokens.max}
min={google.maxOutputTokens.min} min={google.maxOutputTokens.min}
step={google.maxOutputTokens.step} step={google.maxOutputTokens.step}
className="flex h-4 w-full" className="flex h-4 w-full"

View file

@ -555,18 +555,6 @@ export const generateGoogleSchema = (customGoogle: GoogleSettings) => {
maxContextTokens: true, maxContextTokens: true,
}) })
.transform((obj) => { .transform((obj) => {
const isGemini = obj?.model?.toLowerCase()?.includes('gemini');
const maxOutputTokensMax = isGemini
? defaults.maxOutputTokens.maxGemini
: defaults.maxOutputTokens.max;
const maxOutputTokensDefault = isGemini
? defaults.maxOutputTokens.defaultGemini
: defaults.maxOutputTokens.default;
let maxOutputTokens = obj.maxOutputTokens ?? maxOutputTokensDefault;
maxOutputTokens = Math.min(maxOutputTokens, maxOutputTokensMax);
return { return {
...obj, ...obj,
model: obj.model ?? defaults.model.default, model: obj.model ?? defaults.model.default,
@ -574,7 +562,7 @@ export const generateGoogleSchema = (customGoogle: GoogleSettings) => {
promptPrefix: obj.promptPrefix ?? null, promptPrefix: obj.promptPrefix ?? null,
examples: obj.examples ?? [{ input: { content: '' }, output: { content: '' } }], examples: obj.examples ?? [{ input: { content: '' }, output: { content: '' } }],
temperature: obj.temperature ?? defaults.temperature.default, temperature: obj.temperature ?? defaults.temperature.default,
maxOutputTokens, maxOutputTokens: obj.maxOutputTokens ?? defaults.maxOutputTokens.default,
topP: obj.topP ?? defaults.topP.default, topP: obj.topP ?? defaults.topP.default,
topK: obj.topK ?? defaults.topK.default, topK: obj.topK ?? defaults.topK.default,
maxContextTokens: obj.maxContextTokens ?? undefined, maxContextTokens: obj.maxContextTokens ?? undefined,

View file

@ -128,27 +128,25 @@ export const openAISettings = {
export const googleSettings = { export const googleSettings = {
model: { model: {
default: 'chat-bison', default: 'gemini-1.5-flash-latest',
}, },
maxOutputTokens: { maxOutputTokens: {
min: 1, min: 1,
max: 2048, max: 8192,
step: 1, step: 1,
default: 1024, default: 8192,
maxGemini: 8192,
defaultGemini: 8192,
}, },
temperature: { temperature: {
min: 0, min: 0,
max: 1, max: 2,
step: 0.01, step: 0.01,
default: 0.2, default: 1,
}, },
topP: { topP: {
min: 0, min: 0,
max: 1, max: 1,
step: 0.01, step: 0.01,
default: 0.8, default: 0.95,
}, },
topK: { topK: {
min: 1, min: 1,
@ -484,18 +482,6 @@ export const googleSchema = tConversationSchema
maxContextTokens: true, maxContextTokens: true,
}) })
.transform((obj) => { .transform((obj) => {
const isGemini = obj?.model?.toLowerCase()?.includes('gemini');
const maxOutputTokensMax = isGemini
? google.maxOutputTokens.maxGemini
: google.maxOutputTokens.max;
const maxOutputTokensDefault = isGemini
? google.maxOutputTokens.defaultGemini
: google.maxOutputTokens.default;
let maxOutputTokens = obj.maxOutputTokens ?? maxOutputTokensDefault;
maxOutputTokens = Math.min(maxOutputTokens, maxOutputTokensMax);
return { return {
...obj, ...obj,
model: obj.model ?? google.model.default, model: obj.model ?? google.model.default,
@ -503,7 +489,7 @@ export const googleSchema = tConversationSchema
promptPrefix: obj.promptPrefix ?? null, promptPrefix: obj.promptPrefix ?? null,
examples: obj.examples ?? [{ input: { content: '' }, output: { content: '' } }], examples: obj.examples ?? [{ input: { content: '' }, output: { content: '' } }],
temperature: obj.temperature ?? google.temperature.default, temperature: obj.temperature ?? google.temperature.default,
maxOutputTokens, maxOutputTokens: obj.maxOutputTokens ?? google.maxOutputTokens.default,
topP: obj.topP ?? google.topP.default, topP: obj.topP ?? google.topP.default,
topK: obj.topK ?? google.topK.default, topK: obj.topK ?? google.topK.default,
iconURL: obj.iconURL ?? undefined, iconURL: obj.iconURL ?? undefined,