feat: Add support for minP, repeatLastN, and repeatPenalty model settings

This commit is contained in:
n4ze3m 2024-12-28 17:38:52 +05:30
parent ef40b9a242
commit aa49f03f63
10 changed files with 209 additions and 26 deletions

View File

@ -60,11 +60,11 @@
"keepAlive": { "keepAlive": {
"label": "Keep Alive", "label": "Keep Alive",
"help": "controls how long the model will stay loaded into memory following the request (default: 5m)", "help": "controls how long the model will stay loaded into memory following the request (default: 5m)",
"placeholder": "Enter Keep Alive duration (e.g. 5m, 10m, 1h)" "placeholder": "e.g. 5m, 10m, 1h"
}, },
"temperature": { "temperature": {
"label": "Temperature", "label": "Temperature",
"placeholder": "Enter Temperature value (e.g. 0.7, 1.0)" "placeholder": "e.g. 0.7, 1.0"
}, },
"numCtx": { "numCtx": {
"label": "Number of Contexts", "label": "Number of Contexts",
@ -72,24 +72,36 @@
}, },
"numPredict": { "numPredict": {
"label": "Max Tokens (num_predict)", "label": "Max Tokens (num_predict)",
"placeholder": "Enter Max Tokens value (e.g. 2048, 4096)" "placeholder": "e.g. 2048, 4096"
}, },
"seed": { "seed": {
"label": "Seed", "label": "Seed",
"placeholder": "Enter Seed value (e.g. 1234)", "placeholder": "e.g. 1234",
"help": "Reproducibility of the model output" "help": "Reproducibility of the model output"
}, },
"topK": { "topK": {
"label": "Top K", "label": "Top K",
"placeholder": "Enter Top K value (e.g. 40, 100)" "placeholder": "e.g. 40, 100"
}, },
"topP": { "topP": {
"label": "Top P", "label": "Top P",
"placeholder": "Enter Top P value (e.g. 0.9, 0.95)" "placeholder": "e.g. 0.9, 0.95"
}, },
"useMMap": { "useMMap": {
"label": "useMmap" "label": "useMmap"
}, },
"minP": {
"label": "Min P",
"placeholder": "e.g. 0.05"
},
"repeatPenalty": {
"label": "Repeat Penalty",
"placeholder": "e.g. 1.1, 1.2"
},
"repeatLastN": {
"label": "Repeat Last N",
"placeholder": "e.g. 64, 128"
},
"numGpu": { "numGpu": {
"label": "Num GPU", "label": "Num GPU",
"placeholder": "Enter number of layers to send to GPU(s)" "placeholder": "Enter number of layers to send to GPU(s)"

View File

@ -76,7 +76,10 @@ export const CurrentChatModelSettings = ({
numGpu: cUserSettings.numGpu ?? data.numGpu, numGpu: cUserSettings.numGpu ?? data.numGpu,
numPredict: cUserSettings.numPredict ?? data.numPredict, numPredict: cUserSettings.numPredict ?? data.numPredict,
systemPrompt: cUserSettings.systemPrompt ?? tempSystemPrompt, systemPrompt: cUserSettings.systemPrompt ?? tempSystemPrompt,
useMMap: cUserSettings.useMMap ?? data.useMMap useMMap: cUserSettings.useMMap ?? data.useMMap,
minP: cUserSettings.minP ?? data.minP,
repeatLastN: cUserSettings.repeatLastN ?? data.repeatLastN,
repeatPenalty: cUserSettings.repeatPenalty ?? data.repeatPenalty
}) })
return data return data
}, },
@ -199,6 +202,34 @@ export const CurrentChatModelSettings = ({
/> />
</Form.Item> </Form.Item>
<Form.Item
name="minP"
label={t("modelSettings.form.minP.label")}>
<InputNumber
style={{ width: "100%" }}
placeholder={t("modelSettings.form.minP.placeholder")}
/>
</Form.Item>
<Form.Item
name="repeatPenalty"
label={t("modelSettings.form.repeatPenalty.label")}>
<InputNumber
style={{ width: "100%" }}
placeholder={t(
"modelSettings.form.repeatPenalty.placeholder"
)}
/>
</Form.Item>
<Form.Item
name="repeatLastN"
label={t("modelSettings.form.repeatLastN.label")}>
<InputNumber
style={{ width: "100%" }}
placeholder={t(
"modelSettings.form.repeatLastN.placeholder"
)}
/>
</Form.Item>
<Form.Item <Form.Item
name="useMMap" name="useMMap"
label={t("modelSettings.form.useMMap.label")}> label={t("modelSettings.form.useMMap.label")}>
@ -209,7 +240,10 @@ export const CurrentChatModelSettings = ({
} }
]} ]}
/> />
<SaveButton className="w-full text-center inline-flex items-center justify-center" btnType="submit" /> <SaveButton
className="w-full text-center inline-flex items-center justify-center"
btnType="submit"
/>
</Form> </Form>
) : ( ) : (
<Skeleton active /> <Skeleton active />

View File

@ -122,6 +122,34 @@ export const ModelSettings = () => {
placeholder={t("modelSettings.form.numGpu.placeholder")} placeholder={t("modelSettings.form.numGpu.placeholder")}
/> />
</Form.Item> </Form.Item>
<Form.Item
name="minP"
label={t("modelSettings.form.minP.label")}>
<InputNumber
style={{ width: "100%" }}
placeholder={t("modelSettings.form.minP.placeholder")}
/>
</Form.Item>
<Form.Item
name="repeatPenalty"
label={t("modelSettings.form.repeatPenalty.label")}>
<InputNumber
style={{ width: "100%" }}
placeholder={t(
"modelSettings.form.repeatPenalty.placeholder"
)}
/>
</Form.Item>
<Form.Item
name="repeatLastN"
label={t("modelSettings.form.repeatLastN.label")}>
<InputNumber
style={{ width: "100%" }}
placeholder={t(
"modelSettings.form.repeatLastN.placeholder"
)}
/>
</Form.Item>
<Form.Item <Form.Item
name="useMMap" name="useMMap"
label={t("modelSettings.form.useMMap.label")}> label={t("modelSettings.form.useMMap.label")}>

View File

@ -143,7 +143,14 @@ export const useMessage = () => {
currentChatModelSettings?.numPredict ?? currentChatModelSettings?.numPredict ??
userDefaultModelSettings?.numPredict, userDefaultModelSettings?.numPredict,
useMMap: useMMap:
currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap,
minP: currentChatModelSettings?.minP ?? userDefaultModelSettings?.minP,
repeatLastN:
currentChatModelSettings?.repeatLastN ??
userDefaultModelSettings?.repeatLastN,
repeatPenalty:
currentChatModelSettings?.repeatPenalty ??
userDefaultModelSettings?.repeatPenalty
}) })
let newMessage: Message[] = [] let newMessage: Message[] = []
@ -278,7 +285,15 @@ export const useMessage = () => {
userDefaultModelSettings?.numPredict, userDefaultModelSettings?.numPredict,
useMMap: useMMap:
currentChatModelSettings?.useMMap ?? currentChatModelSettings?.useMMap ??
userDefaultModelSettings?.useMMap userDefaultModelSettings?.useMMap,
minP:
currentChatModelSettings?.minP ?? userDefaultModelSettings?.minP,
repeatLastN:
currentChatModelSettings?.repeatLastN ??
userDefaultModelSettings?.repeatLastN,
repeatPenalty:
currentChatModelSettings?.repeatPenalty ??
userDefaultModelSettings?.repeatPenalty
}) })
const response = await questionOllama.invoke(promptForQuestion) const response = await questionOllama.invoke(promptForQuestion)
query = response.content.toString() query = response.content.toString()
@ -492,7 +507,14 @@ export const useMessage = () => {
currentChatModelSettings?.numPredict ?? currentChatModelSettings?.numPredict ??
userDefaultModelSettings?.numPredict, userDefaultModelSettings?.numPredict,
useMMap: useMMap:
currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap,
minP: currentChatModelSettings?.minP ?? userDefaultModelSettings?.minP,
repeatLastN:
currentChatModelSettings?.repeatLastN ??
userDefaultModelSettings?.repeatLastN,
repeatPenalty:
currentChatModelSettings?.repeatPenalty ??
userDefaultModelSettings?.repeatPenalty
}) })
let newMessage: Message[] = [] let newMessage: Message[] = []
@ -729,7 +751,14 @@ export const useMessage = () => {
currentChatModelSettings?.numPredict ?? currentChatModelSettings?.numPredict ??
userDefaultModelSettings?.numPredict, userDefaultModelSettings?.numPredict,
useMMap: useMMap:
currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap,
minP: currentChatModelSettings?.minP ?? userDefaultModelSettings?.minP,
repeatLastN:
currentChatModelSettings?.repeatLastN ??
userDefaultModelSettings?.repeatLastN,
repeatPenalty:
currentChatModelSettings?.repeatPenalty ??
userDefaultModelSettings?.repeatPenalty
}) })
let newMessage: Message[] = [] let newMessage: Message[] = []
@ -961,7 +990,14 @@ export const useMessage = () => {
currentChatModelSettings?.numPredict ?? currentChatModelSettings?.numPredict ??
userDefaultModelSettings?.numPredict, userDefaultModelSettings?.numPredict,
useMMap: useMMap:
currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap,
minP: currentChatModelSettings?.minP ?? userDefaultModelSettings?.minP,
repeatLastN:
currentChatModelSettings?.repeatLastN ??
userDefaultModelSettings?.repeatLastN,
repeatPenalty:
currentChatModelSettings?.repeatPenalty ??
userDefaultModelSettings?.repeatPenalty
}) })
let newMessage: Message[] = [] let newMessage: Message[] = []
@ -1043,7 +1079,15 @@ export const useMessage = () => {
userDefaultModelSettings?.numPredict, userDefaultModelSettings?.numPredict,
useMMap: useMMap:
currentChatModelSettings?.useMMap ?? currentChatModelSettings?.useMMap ??
userDefaultModelSettings?.useMMap userDefaultModelSettings?.useMMap,
minP:
currentChatModelSettings?.minP ?? userDefaultModelSettings?.minP,
repeatLastN:
currentChatModelSettings?.repeatLastN ??
userDefaultModelSettings?.repeatLastN,
repeatPenalty:
currentChatModelSettings?.repeatPenalty ??
userDefaultModelSettings?.repeatPenalty
}) })
const response = await questionOllama.invoke(promptForQuestion) const response = await questionOllama.invoke(promptForQuestion)
query = response.content.toString() query = response.content.toString()
@ -1235,7 +1279,14 @@ export const useMessage = () => {
currentChatModelSettings?.numPredict ?? currentChatModelSettings?.numPredict ??
userDefaultModelSettings?.numPredict, userDefaultModelSettings?.numPredict,
useMMap: useMMap:
currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap,
minP: currentChatModelSettings?.minP ?? userDefaultModelSettings?.minP,
repeatLastN:
currentChatModelSettings?.repeatLastN ??
userDefaultModelSettings?.repeatLastN,
repeatPenalty:
currentChatModelSettings?.repeatPenalty ??
userDefaultModelSettings?.repeatPenalty
}) })
let newMessage: Message[] = [] let newMessage: Message[] = []

View File

@ -134,7 +134,14 @@ export const useMessageOption = () => {
currentChatModelSettings?.numPredict ?? currentChatModelSettings?.numPredict ??
userDefaultModelSettings?.numPredict, userDefaultModelSettings?.numPredict,
useMMap: useMMap:
currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap,
minP: currentChatModelSettings?.minP ?? userDefaultModelSettings?.minP,
repeatLastN:
currentChatModelSettings?.repeatLastN ??
userDefaultModelSettings?.repeatLastN,
repeatPenalty:
currentChatModelSettings?.repeatPenalty ??
userDefaultModelSettings?.repeatPenalty
}) })
let newMessage: Message[] = [] let newMessage: Message[] = []
@ -216,7 +223,15 @@ export const useMessageOption = () => {
userDefaultModelSettings?.numPredict, userDefaultModelSettings?.numPredict,
useMMap: useMMap:
currentChatModelSettings?.useMMap ?? currentChatModelSettings?.useMMap ??
userDefaultModelSettings?.useMMap userDefaultModelSettings?.useMMap,
minP:
currentChatModelSettings?.minP ?? userDefaultModelSettings?.minP,
repeatLastN:
currentChatModelSettings?.repeatLastN ??
userDefaultModelSettings?.repeatLastN,
repeatPenalty:
currentChatModelSettings?.repeatPenalty ??
userDefaultModelSettings?.repeatPenalty
}) })
const response = await questionOllama.invoke(promptForQuestion) const response = await questionOllama.invoke(promptForQuestion)
query = response.content.toString() query = response.content.toString()
@ -442,7 +457,14 @@ export const useMessageOption = () => {
currentChatModelSettings?.numPredict ?? currentChatModelSettings?.numPredict ??
userDefaultModelSettings?.numPredict, userDefaultModelSettings?.numPredict,
useMMap: useMMap:
currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap,
minP: currentChatModelSettings?.minP ?? userDefaultModelSettings?.minP,
repeatLastN:
currentChatModelSettings?.repeatLastN ??
userDefaultModelSettings?.repeatLastN,
repeatPenalty:
currentChatModelSettings?.repeatPenalty ??
userDefaultModelSettings?.repeatPenalty
}) })
let newMessage: Message[] = [] let newMessage: Message[] = []
@ -690,7 +712,14 @@ export const useMessageOption = () => {
currentChatModelSettings?.numPredict ?? currentChatModelSettings?.numPredict ??
userDefaultModelSettings?.numPredict, userDefaultModelSettings?.numPredict,
useMMap: useMMap:
currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap currentChatModelSettings?.useMMap ?? userDefaultModelSettings?.useMMap,
minP: currentChatModelSettings?.minP ?? userDefaultModelSettings?.minP,
repeatLastN:
currentChatModelSettings?.repeatLastN ??
userDefaultModelSettings?.repeatLastN,
repeatPenalty:
currentChatModelSettings?.repeatPenalty ??
userDefaultModelSettings?.repeatPenalty
}) })
let newMessage: Message[] = [] let newMessage: Message[] = []
@ -788,7 +817,15 @@ export const useMessageOption = () => {
userDefaultModelSettings?.numPredict, userDefaultModelSettings?.numPredict,
useMMap: useMMap:
currentChatModelSettings?.useMMap ?? currentChatModelSettings?.useMMap ??
userDefaultModelSettings?.useMMap userDefaultModelSettings?.useMMap,
minP:
currentChatModelSettings?.minP ?? userDefaultModelSettings?.minP,
repeatLastN:
currentChatModelSettings?.repeatLastN ??
userDefaultModelSettings?.repeatLastN,
repeatPenalty:
currentChatModelSettings?.repeatPenalty ??
userDefaultModelSettings?.repeatPenalty
}) })
const response = await questionOllama.invoke(promptForQuestion) const response = await questionOllama.invoke(promptForQuestion)
query = response.content.toString() query = response.content.toString()

View File

@ -95,6 +95,8 @@ export class ChatOllama
topP?: number; topP?: number;
minP?: number;
typicalP?: number; typicalP?: number;
useMLock?: boolean; useMLock?: boolean;
@ -142,6 +144,7 @@ export class ChatOllama
this.tfsZ = fields.tfsZ; this.tfsZ = fields.tfsZ;
this.topK = fields.topK; this.topK = fields.topK;
this.topP = fields.topP; this.topP = fields.topP;
this.minP = fields.minP;
this.typicalP = fields.typicalP; this.typicalP = fields.typicalP;
this.useMLock = fields.useMLock; this.useMLock = fields.useMLock;
this.useMMap = fields.useMMap; this.useMMap = fields.useMMap;
@ -205,6 +208,7 @@ export class ChatOllama
tfs_z: this.tfsZ, tfs_z: this.tfsZ,
top_k: this.topK, top_k: this.topK,
top_p: this.topP, top_p: this.topP,
min_p: this.minP,
typical_p: this.typicalP, typical_p: this.typicalP,
use_mlock: this.useMLock, use_mlock: this.useMLock,
use_mmap: this.useMMap, use_mmap: this.useMMap,

View File

@ -17,7 +17,10 @@ export const pageAssistModel = async ({
seed, seed,
numGpu, numGpu,
numPredict, numPredict,
useMMap useMMap,
minP,
repeatLastN,
repeatPenalty
}: { }: {
model: string model: string
baseUrl: string baseUrl: string
@ -30,6 +33,9 @@ export const pageAssistModel = async ({
numGpu?: number numGpu?: number
numPredict?: number numPredict?: number
useMMap?: boolean useMMap?: boolean
minP?: number
repeatPenalty?: number
repeatLastN?: number
}) => { }) => {
if (model === "chrome::gemini-nano::page-assist") { if (model === "chrome::gemini-nano::page-assist") {
return new ChatChromeAI({ return new ChatChromeAI({
@ -86,6 +92,9 @@ export const pageAssistModel = async ({
model, model,
numGpu, numGpu,
numPredict, numPredict,
useMMap useMMap,
minP: minP,
repeatPenalty: repeatPenalty,
repeatLastN: repeatLastN,
}) })
} }

View File

@ -35,6 +35,7 @@ export interface OllamaInput {
tfsZ?: number tfsZ?: number
topK?: number topK?: number
topP?: number topP?: number
minP?: number
typicalP?: number typicalP?: number
useMLock?: boolean useMLock?: boolean
useMMap?: boolean useMMap?: boolean

View File

@ -32,6 +32,7 @@ type ModelSettings = {
useMLock?: boolean useMLock?: boolean
useMMap?: boolean useMMap?: boolean
vocabOnly?: boolean vocabOnly?: boolean
minP?: number
} }
const keys = [ const keys = [
@ -62,7 +63,8 @@ const keys = [
"typicalP", "typicalP",
"useMLock", "useMLock",
"useMMap", "useMMap",
"vocabOnly" "vocabOnly",
"minP",
] ]
export const getAllModelSettings = async () => { export const getAllModelSettings = async () => {

View File

@ -30,6 +30,7 @@ type CurrentChatModelSettings = {
useMMap?: boolean useMMap?: boolean
vocabOnly?: boolean vocabOnly?: boolean
seed?: number seed?: number
minP?: number
setF16KV?: (f16KV: boolean) => void setF16KV?: (f16KV: boolean) => void
setFrequencyPenalty?: (frequencyPenalty: number) => void setFrequencyPenalty?: (frequencyPenalty: number) => void
@ -65,6 +66,8 @@ type CurrentChatModelSettings = {
reset: () => void reset: () => void
systemPrompt?: string systemPrompt?: string
setSystemPrompt: (systemPrompt: string) => void setSystemPrompt: (systemPrompt: string) => void
setMinP: (minP: number) => void
} }
export const useStoreChatModelSettings = create<CurrentChatModelSettings>( export const useStoreChatModelSettings = create<CurrentChatModelSettings>(
@ -103,6 +106,7 @@ export const useStoreChatModelSettings = create<CurrentChatModelSettings>(
seetSeed: (seed: number) => set({ seed }), seetSeed: (seed: number) => set({ seed }),
setX: (key: string, value: any) => set({ [key]: value }), setX: (key: string, value: any) => set({ [key]: value }),
systemPrompt: undefined, systemPrompt: undefined,
setMinP: (minP: number) => set({ minP }),
setSystemPrompt: (systemPrompt: string) => set({ systemPrompt }), setSystemPrompt: (systemPrompt: string) => set({ systemPrompt }),
reset: () => reset: () =>
set({ set({
@ -135,7 +139,8 @@ export const useStoreChatModelSettings = create<CurrentChatModelSettings>(
useMMap: undefined, useMMap: undefined,
vocabOnly: undefined, vocabOnly: undefined,
seed: undefined, seed: undefined,
systemPrompt: undefined systemPrompt: undefined,
minP: undefined,
}) })
}) })
) )