From cb34b3e4222840cdbacfa9a38ea1c938676dbc35 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Sun, 8 Sep 2024 21:19:28 +0900 Subject: [PATCH] Add parameter manager --- src/lib/Setting/Pages/BotSettings.svelte | 14 ++- src/ts/process/request.ts | 137 +++++++++++++++-------- 2 files changed, 102 insertions(+), 49 deletions(-) diff --git a/src/lib/Setting/Pages/BotSettings.svelte b/src/lib/Setting/Pages/BotSettings.svelte index b398ec03..f0ab8bbf 100644 --- a/src/lib/Setting/Pages/BotSettings.svelte +++ b/src/lib/Setting/Pages/BotSettings.svelte @@ -307,19 +307,22 @@ {:else} {/if} - {#if $DataBase.aiModel.startsWith('openrouter') || $DataBase.aiModel.startsWith('claude-3') || $DataBase.aiModel.startsWith('cohere-')} + {#if $DataBase.aiModel.startsWith('openrouter') || $DataBase.aiModel.startsWith('claude-3') || $DataBase.aiModel.startsWith('cohere-')|| $DataBase.aiModel === 'kobold'} Top K {/if} {#if $DataBase.aiModel.startsWith('openrouter')} - Repetition penalty - - Min P + {/if} + {#if $DataBase.aiModel.startsWith('openrouter') || $DataBase.aiModel === 'kobold'} Top A + + Repetition penalty + + {/if} {#if $DataBase.aiModel === 'textgen_webui' || $DataBase.aiModel === 'mancer' || $DataBase.aiModel.startsWith('local_') || $DataBase.aiModel.startsWith('hf:::')} Repetition Penalty @@ -440,6 +443,9 @@ {:else if $DataBase.aiModel.startsWith('claude')} Top P + {:else if $DataBase.aiModel.startsWith('kobold')} + Top P + {:else} diff --git a/src/ts/process/request.ts b/src/ts/process/request.ts index 8324087c..07da2387 100644 --- a/src/ts/process/request.ts +++ b/src/ts/process/request.ts @@ -79,6 +79,60 @@ interface OaiFunctions { }; } + +type Parameter = 'temperature'|'top_k'|'repetition_penalty'|'min_p'|'top_a'|'top_p'|'frequency_penalty'|'presence_penalty' +type ParameterMap = { + [key in Parameter]?: string; +}; + +function applyParameters(data: { [key: string]: any }, parameters: Parameter[], rename: ParameterMap = {}) { + const db = get(DataBase) + for(const parameter of parameters){ + let value = 0 + switch(parameter){ + case 'temperature':{ + value = db.temperature === -1000 ? -1000 : (db.temperature / 100) + break + } + case 'top_k':{ + value = db.top_k + break + } + case 'repetition_penalty':{ + value = db.repetition_penalty + break + } + case 'min_p':{ + value = db.min_p + break + } + case 'top_a':{ + value = db.top_a + break + } + case 'top_p':{ + value = db.top_p + break + } + case 'frequency_penalty':{ + value = db.frequencyPenalty === -1000 ? -1000 : (db.frequencyPenalty / 100) + break + } + case 'presence_penalty':{ + value = db.PresensePenalty === -1000 ? -1000 : (db.PresensePenalty / 100) + break + } + } + + if(value === -1000){ + continue + } + + data[rename[parameter] ?? parameter] = value + } + return data +} + export async function requestChatData(arg:requestDataArgument, model:'model'|'submodel', abortSignal:AbortSignal=null):Promise { const db = get(DataBase) let trys = 0 @@ -399,7 +453,9 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' } db.cipherChat = false - let body = ({ + let body:{ + [key:string]:any + } = ({ model: aiModel === 'openrouter' ? openrouterRequestModel : requestModel === 'gpt35' ? 'gpt-3.5-turbo' : requestModel === 'gpt35_0613' ? 'gpt-3.5-turbo-0613' @@ -428,62 +484,47 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' : (!requestModel) ? 'gpt-3.5-turbo' : requestModel, messages: formatedChat, - temperature: temperature, + // temperature: temperature, max_tokens: maxTokens, - presence_penalty: arg.PresensePenalty || (db.PresensePenalty / 100), - frequency_penalty: arg.frequencyPenalty || (db.frequencyPenalty / 100), + // presence_penalty: arg.PresensePenalty || (db.PresensePenalty / 100), + // frequency_penalty: arg.frequencyPenalty || (db.frequencyPenalty / 100), logit_bias: bias, stream: false, - top_p: db.top_p, + // top_p: db.top_p, }) if(db.generationSeed > 0){ - // @ts-ignore body.seed = db.generationSeed } if(db.putUserOpen){ - // @ts-ignore body.user = getOpenUserString() } if(aiModel === 'openrouter'){ - if(db.top_k !== 0){ - //@ts-ignore - body.top_k = db.top_k - } if(db.openrouterFallback){ - //@ts-ignore body.route = "fallback" } - //@ts-ignore - body.repetition_penalty = db.repetition_penalty - //@ts-ignore - body.min_p = db.min_p - //@ts-ignore - body.top_a = db.top_a - //@ts-ignore body.transforms = db.openrouterMiddleOut ? ['middle-out'] : [] if(db.openrouterProvider){ - //@ts-ignore body.provider = { order: [db.openrouterProvider] } } if(db.useInstructPrompt){ - //@ts-ignore delete body.messages - const prompt = applyChatTemplate(formated) - - //@ts-ignore body.prompt = prompt } } + body = applyParameters(body, + aiModel === 'openrouter' ? ['temperature', 'top_p', 'frequency_penalty', 'presence_penalty', 'repetition_penalty', 'min_p', 'top_a', 'top_k'] : ['temperature', 'top_p', 'frequency_penalty', 'presence_penalty'] + ) + if(aiModel === 'reverse_proxy' && db.reverseProxyOobaMode){ const OobaBodyTemplate = db.reverseProxyOobaArgs @@ -889,7 +930,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' case 'mancer':{ let streamUrl = db.textgenWebUIStreamURL.replace(/\/api.*/, "/api/v1/stream") let blockingUrl = db.textgenWebUIBlockingURL.replace(/\/api.*/, "/api/v1/generate") - let bodyTemplate:any + let bodyTemplate:{[key:string]:any} = {} const suggesting = model === "submodel" const prompt = applyChatTemplate(formated) let stopStrings = getStopStrings(suggesting) @@ -1038,6 +1079,9 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' if(OobaBodyTemplate[key] !== undefined && OobaBodyTemplate[key] !== null){ bodyTemplate[key] = OobaBodyTemplate[key] } + else if(bodyTemplate[key]){ + delete bodyTemplate[key] + } } const response = await globalFetch(urlStr, { @@ -1294,11 +1338,11 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' const body = { contents: reformatedChat, - generation_config: { + generation_config: applyParameters({ "maxOutputTokens": maxTokens, - "temperature": temperature, - "topP": db.top_p, - }, + }, ['temperature', 'top_p'], { + 'top_p': "topP" + }), safetySettings: uncensoredCatagory } @@ -1368,14 +1412,20 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' url.pathname = 'api/v1/generate' } - const body:KoboldGenerationInputSchema = { + const body = applyParameters({ "prompt": prompt, - "temperature": (db.temperature / 100), - "top_p": db.top_p, max_length: maxTokens, max_context_length: db.maxContext, n: 1 - } + }, [ + 'temperature', + 'top_p', + 'repetition_penalty', + 'top_k', + 'top_a' + ], { + 'repetition_penalty': 'rep_pen' + }) as KoboldGenerationInputSchema const da = await globalFetch(url.toString(), { method: "POST", @@ -1575,7 +1625,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' - let body = { + let body = applyParameters({ message: lastChatPrompt, chat_history: formated.map((v) => { if(v.role === 'assistant'){ @@ -1600,12 +1650,12 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' }).filter((v) => v !== null).filter((v) => { return v.message }), - temperature: temperature, - k: db.top_k, - p: (db.top_p > 0.99) ? 0.99 : (db.top_p < 0.01) ? 0.01 : db.top_p, - presence_penalty: arg.PresensePenalty || (db.PresensePenalty / 100), - frequency_penalty: arg.frequencyPenalty || (db.frequencyPenalty / 100), - } + }, [ + 'temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty' + ], { + 'top_k': 'k', + 'top_p': 'p', + }) if(preamble){ if(body.chat_history.length > 0){ @@ -1879,16 +1929,13 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model' } - let body = { + let body = applyParameters({ model: raiModel, messages: finalChat, system: systemPrompt.trim(), max_tokens: maxTokens, - temperature: temperature, - top_p: db.top_p, - top_k: db.top_k, stream: useStreaming ?? false - } + }, ['temperature', 'top_k', 'top_p']) if(systemPrompt === ''){ delete body.system