fix: make tokenization warmup one-shot

This commit is contained in:
2026-03-02 01:33:09 -08:00
parent 9a91951656
commit 7161fc3513
3 changed files with 150 additions and 2 deletions

View File

@@ -142,7 +142,11 @@ export function composeMpvRuntimeHandlers<
return nPlusOneEnabled || jlptEnabled || frequencyEnabled;
};
let tokenizationWarmupInFlight: Promise<void> | null = null;
let tokenizationWarmupCompleted = false;
const startTokenizationWarmups = (): Promise<void> => {
if (tokenizationWarmupCompleted) {
return Promise.resolve();
}
if (!tokenizationWarmupInFlight) {
tokenizationWarmupInFlight = (async () => {
await options.warmups.startBackgroundWarmupsMainDeps.ensureYomitanExtensionLoaded();
@@ -153,6 +157,7 @@ export function composeMpvRuntimeHandlers<
await createMecabTokenizerAndCheck().catch(() => {});
}
await prewarmSubtitleDictionaries({ showLoadingOsd: true });
tokenizationWarmupCompleted = true;
})().finally(() => {
tokenizationWarmupInFlight = null;
});
@@ -160,7 +165,9 @@ export function composeMpvRuntimeHandlers<
return tokenizationWarmupInFlight;
};
const tokenizeSubtitle = async (text: string): Promise<TTokenizedSubtitle> => {
await startTokenizationWarmups();
if (!tokenizationWarmupCompleted) {
await startTokenizationWarmups();
}
return options.tokenizer.tokenizeSubtitle(
text,
options.tokenizer.createTokenizerRuntimeDeps(buildTokenizerDepsHandler()),