Add parameter manager

This commit is contained in:
kwaroran
2024-09-08 21:19:28 +09:00
parent c9b763fc98
commit cb34b3e422
2 changed files with 102 additions and 49 deletions

View File

@@ -307,19 +307,22 @@
{:else} {:else}
<SliderInput min={0} max={200} marginBottom bind:value={$DataBase.temperature} multiple={0.01} fixed={2} disableable/> <SliderInput min={0} max={200} marginBottom bind:value={$DataBase.temperature} multiple={0.01} fixed={2} disableable/>
{/if} {/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'}
<span class="text-textcolor">Top K</span> <span class="text-textcolor">Top K</span>
<SliderInput min={0} max={100} marginBottom step={1} bind:value={$DataBase.top_k} disableable/> <SliderInput min={0} max={100} marginBottom step={1} bind:value={$DataBase.top_k} disableable/>
{/if} {/if}
{#if $DataBase.aiModel.startsWith('openrouter')} {#if $DataBase.aiModel.startsWith('openrouter')}
<span class="text-textcolor">Repetition penalty</span>
<SliderInput min={0} max={2} marginBottom step={0.01} fixed={2} bind:value={$DataBase.repetition_penalty} disableable/>
<span class="text-textcolor">Min P</span> <span class="text-textcolor">Min P</span>
<SliderInput min={0} max={1} marginBottom step={0.01} fixed={2} bind:value={$DataBase.min_p} disableable/> <SliderInput min={0} max={1} marginBottom step={0.01} fixed={2} bind:value={$DataBase.min_p} disableable/>
{/if}
{#if $DataBase.aiModel.startsWith('openrouter') || $DataBase.aiModel === 'kobold'}
<span class="text-textcolor">Top A</span> <span class="text-textcolor">Top A</span>
<SliderInput min={0} max={1} marginBottom step={0.01} fixed={2} bind:value={$DataBase.top_a} disableable/> <SliderInput min={0} max={1} marginBottom step={0.01} fixed={2} bind:value={$DataBase.top_a} disableable/>
<span class="text-textcolor">Repetition penalty</span>
<SliderInput min={0} max={2} marginBottom step={0.01} fixed={2} bind:value={$DataBase.repetition_penalty} disableable/>
{/if} {/if}
{#if $DataBase.aiModel === 'textgen_webui' || $DataBase.aiModel === 'mancer' || $DataBase.aiModel.startsWith('local_') || $DataBase.aiModel.startsWith('hf:::')} {#if $DataBase.aiModel === 'textgen_webui' || $DataBase.aiModel === 'mancer' || $DataBase.aiModel.startsWith('local_') || $DataBase.aiModel.startsWith('hf:::')}
<span class="text-textcolor">Repetition Penalty</span> <span class="text-textcolor">Repetition Penalty</span>
@@ -440,6 +443,9 @@
{:else if $DataBase.aiModel.startsWith('claude')} {:else if $DataBase.aiModel.startsWith('claude')}
<span class="text-textcolor">Top P <Help key="topP"/></span> <span class="text-textcolor">Top P <Help key="topP"/></span>
<SliderInput min={0} max={1} step={0.01} marginBottom fixed={2} bind:value={$DataBase.top_p} disableable/> <SliderInput min={0} max={1} step={0.01} marginBottom fixed={2} bind:value={$DataBase.top_p} disableable/>
{:else if $DataBase.aiModel.startsWith('kobold')}
<span class="text-textcolor">Top P <Help key="topP"/></span>
<SliderInput min={0} max={1} step={0.01} marginBottom fixed={2} bind:value={$DataBase.top_p} disableable/>
{:else} {:else}

View File

@@ -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<requestDataResponse> { export async function requestChatData(arg:requestDataArgument, model:'model'|'submodel', abortSignal:AbortSignal=null):Promise<requestDataResponse> {
const db = get(DataBase) const db = get(DataBase)
let trys = 0 let trys = 0
@@ -399,7 +453,9 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
} }
db.cipherChat = false db.cipherChat = false
let body = ({ let body:{
[key:string]:any
} = ({
model: aiModel === 'openrouter' ? openrouterRequestModel : model: aiModel === 'openrouter' ? openrouterRequestModel :
requestModel === 'gpt35' ? 'gpt-3.5-turbo' requestModel === 'gpt35' ? 'gpt-3.5-turbo'
: requestModel === 'gpt35_0613' ? 'gpt-3.5-turbo-0613' : 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) ? 'gpt-3.5-turbo'
: requestModel, : requestModel,
messages: formatedChat, messages: formatedChat,
temperature: temperature, // temperature: temperature,
max_tokens: maxTokens, max_tokens: maxTokens,
presence_penalty: arg.PresensePenalty || (db.PresensePenalty / 100), // presence_penalty: arg.PresensePenalty || (db.PresensePenalty / 100),
frequency_penalty: arg.frequencyPenalty || (db.frequencyPenalty / 100), // frequency_penalty: arg.frequencyPenalty || (db.frequencyPenalty / 100),
logit_bias: bias, logit_bias: bias,
stream: false, stream: false,
top_p: db.top_p, // top_p: db.top_p,
}) })
if(db.generationSeed > 0){ if(db.generationSeed > 0){
// @ts-ignore
body.seed = db.generationSeed body.seed = db.generationSeed
} }
if(db.putUserOpen){ if(db.putUserOpen){
// @ts-ignore
body.user = getOpenUserString() body.user = getOpenUserString()
} }
if(aiModel === 'openrouter'){ if(aiModel === 'openrouter'){
if(db.top_k !== 0){
//@ts-ignore
body.top_k = db.top_k
}
if(db.openrouterFallback){ if(db.openrouterFallback){
//@ts-ignore
body.route = "fallback" 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'] : [] body.transforms = db.openrouterMiddleOut ? ['middle-out'] : []
if(db.openrouterProvider){ if(db.openrouterProvider){
//@ts-ignore
body.provider = { body.provider = {
order: [db.openrouterProvider] order: [db.openrouterProvider]
} }
} }
if(db.useInstructPrompt){ if(db.useInstructPrompt){
//@ts-ignore
delete body.messages delete body.messages
const prompt = applyChatTemplate(formated) const prompt = applyChatTemplate(formated)
//@ts-ignore
body.prompt = prompt 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){ if(aiModel === 'reverse_proxy' && db.reverseProxyOobaMode){
const OobaBodyTemplate = db.reverseProxyOobaArgs const OobaBodyTemplate = db.reverseProxyOobaArgs
@@ -889,7 +930,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
case 'mancer':{ case 'mancer':{
let streamUrl = db.textgenWebUIStreamURL.replace(/\/api.*/, "/api/v1/stream") let streamUrl = db.textgenWebUIStreamURL.replace(/\/api.*/, "/api/v1/stream")
let blockingUrl = db.textgenWebUIBlockingURL.replace(/\/api.*/, "/api/v1/generate") let blockingUrl = db.textgenWebUIBlockingURL.replace(/\/api.*/, "/api/v1/generate")
let bodyTemplate:any let bodyTemplate:{[key:string]:any} = {}
const suggesting = model === "submodel" const suggesting = model === "submodel"
const prompt = applyChatTemplate(formated) const prompt = applyChatTemplate(formated)
let stopStrings = getStopStrings(suggesting) let stopStrings = getStopStrings(suggesting)
@@ -1038,6 +1079,9 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
if(OobaBodyTemplate[key] !== undefined && OobaBodyTemplate[key] !== null){ if(OobaBodyTemplate[key] !== undefined && OobaBodyTemplate[key] !== null){
bodyTemplate[key] = OobaBodyTemplate[key] bodyTemplate[key] = OobaBodyTemplate[key]
} }
else if(bodyTemplate[key]){
delete bodyTemplate[key]
}
} }
const response = await globalFetch(urlStr, { const response = await globalFetch(urlStr, {
@@ -1294,11 +1338,11 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
const body = { const body = {
contents: reformatedChat, contents: reformatedChat,
generation_config: { generation_config: applyParameters({
"maxOutputTokens": maxTokens, "maxOutputTokens": maxTokens,
"temperature": temperature, }, ['temperature', 'top_p'], {
"topP": db.top_p, 'top_p': "topP"
}, }),
safetySettings: uncensoredCatagory safetySettings: uncensoredCatagory
} }
@@ -1368,14 +1412,20 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
url.pathname = 'api/v1/generate' url.pathname = 'api/v1/generate'
} }
const body:KoboldGenerationInputSchema = { const body = applyParameters({
"prompt": prompt, "prompt": prompt,
"temperature": (db.temperature / 100),
"top_p": db.top_p,
max_length: maxTokens, max_length: maxTokens,
max_context_length: db.maxContext, max_context_length: db.maxContext,
n: 1 n: 1
} }, [
'temperature',
'top_p',
'repetition_penalty',
'top_k',
'top_a'
], {
'repetition_penalty': 'rep_pen'
}) as KoboldGenerationInputSchema
const da = await globalFetch(url.toString(), { const da = await globalFetch(url.toString(), {
method: "POST", method: "POST",
@@ -1575,7 +1625,7 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
let body = { let body = applyParameters({
message: lastChatPrompt, message: lastChatPrompt,
chat_history: formated.map((v) => { chat_history: formated.map((v) => {
if(v.role === 'assistant'){ if(v.role === 'assistant'){
@@ -1600,12 +1650,12 @@ export async function requestChatDataMain(arg:requestDataArgument, model:'model'
}).filter((v) => v !== null).filter((v) => { }).filter((v) => v !== null).filter((v) => {
return v.message return v.message
}), }),
temperature: temperature, }, [
k: db.top_k, 'temperature', 'top_k', 'top_p', 'presence_penalty', 'frequency_penalty'
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), 'top_k': 'k',
frequency_penalty: arg.frequencyPenalty || (db.frequencyPenalty / 100), 'top_p': 'p',
} })
if(preamble){ if(preamble){
if(body.chat_history.length > 0){ 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, model: raiModel,
messages: finalChat, messages: finalChat,
system: systemPrompt.trim(), system: systemPrompt.trim(),
max_tokens: maxTokens, max_tokens: maxTokens,
temperature: temperature,
top_p: db.top_p,
top_k: db.top_k,
stream: useStreaming ?? false stream: useStreaming ?? false
} }, ['temperature', 'top_k', 'top_p'])
if(systemPrompt === ''){ if(systemPrompt === ''){
delete body.system delete body.system