Make tokenizer caching to an option

This commit is contained in:
kwaroran
2025-04-16 10:57:48 +09:00
parent 21561fe5ff
commit 36e0935bb0
4 changed files with 26 additions and 14 deletions

View File

@@ -1115,5 +1115,6 @@ export const languageEnglish = {
fallbackWhenBlankResponse: "Fallback When Blank Response", fallbackWhenBlankResponse: "Fallback When Blank Response",
doNotChangeFallbackModels: "Do Not Change Fallback Models on Preset Change", doNotChangeFallbackModels: "Do Not Change Fallback Models on Preset Change",
customModels: "Custom Models", customModels: "Custom Models",
igpPrompt: "IGP Prompt" igpPrompt: "IGP Prompt",
useTokenizerCaching: "Tokenizer Caching"
} }

View File

@@ -207,6 +207,10 @@
<Check bind:check={DBState.db.antiServerOverloads} name={language.antiServerOverload}> <Check bind:check={DBState.db.antiServerOverloads} name={language.antiServerOverload}>
</Check> </Check>
</div> </div>
<div class="flex items-center mt-4">
<Check bind:check={DBState.db.useTokenizerCaching} name={language.useTokenizerCaching}>
</Check>
</div>
{#if DBState.db.useExperimental} {#if DBState.db.useExperimental}
<div class="flex items-center mt-4"> <div class="flex items-center mt-4">
<Check bind:check={DBState.db.useExperimentalGoogleTranslator} name={"New Google Translate Experimental"}> <Check bind:check={DBState.db.useExperimentalGoogleTranslator} name={"New Google Translate Experimental"}>

View File

@@ -1022,6 +1022,7 @@ export interface Database{
flags: LLMFlags[] flags: LLMFlags[]
}[] }[]
igpPrompt:string igpPrompt:string
useTokenizerCaching:boolean
} }
interface SeparateParameters{ interface SeparateParameters{

View File

@@ -47,18 +47,21 @@ export async function encode(data:string):Promise<(number[]|Uint32Array|Int32Arr
const modelInfo = getModelInfo(db.aiModel); const modelInfo = getModelInfo(db.aiModel);
const pluginTokenizer = pluginV2.providerOptions.get(db.currentPluginProvider)?.tokenizer ?? "none"; const pluginTokenizer = pluginV2.providerOptions.get(db.currentPluginProvider)?.tokenizer ?? "none";
const cacheKey = getHash( let cacheKey = ''
data, if(db.useTokenizerCaching){
db.aiModel, cacheKey = getHash(
db.customTokenizer, data,
db.currentPluginProvider, db.aiModel,
db.googleClaudeTokenizing, db.customTokenizer,
modelInfo, db.currentPluginProvider,
pluginTokenizer db.googleClaudeTokenizing,
); modelInfo,
const cachedResult = encodeCache.get(cacheKey); pluginTokenizer
if (cachedResult !== undefined) { );
return cachedResult; const cachedResult = encodeCache.get(cacheKey);
if (cachedResult !== undefined) {
return cachedResult;
}
} }
let result: number[] | Uint32Array | Int32Array; let result: number[] | Uint32Array | Int32Array;
@@ -142,7 +145,10 @@ export async function encode(data:string):Promise<(number[]|Uint32Array|Int32Arr
} else { } else {
result = await tikJS(data); result = await tikJS(data);
} }
encodeCache.set(cacheKey, result);
if(db.useTokenizerCaching){
encodeCache.set(cacheKey, result);
}
return result; return result;
} }