From 7b47d27d0a4ed5c05f7df61ba03bef06637d19c7 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Mon, 6 Apr 2026 02:42:32 +0100 Subject: [PATCH] perf(auto-reply): lazy-load TTS helpers on demand --- src/auto-reply/reply/dispatch-from-config.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/auto-reply/reply/dispatch-from-config.ts b/src/auto-reply/reply/dispatch-from-config.ts index 4947dc95e42..5c1470a8fd5 100644 --- a/src/auto-reply/reply/dispatch-from-config.ts +++ b/src/auto-reply/reply/dispatch-from-config.ts @@ -85,6 +85,13 @@ function loadTtsRuntime() { return ttsRuntimePromise; } +async function maybeApplyTtsToReplyPayload( + params: Parameters>["maybeApplyTtsToPayload"]>[0], +) { + const { maybeApplyTtsToPayload } = await loadTtsRuntime(); + return maybeApplyTtsToPayload(params); +} + const AUDIO_PLACEHOLDER_RE = /^(\s*\([^)]*\))?$/i; const AUDIO_HEADER_RE = /^\[Audio\b/i; const normalizeMediaType = (value: string): string => value.split(";")[0]?.trim().toLowerCase(); @@ -543,13 +550,12 @@ export async function dispatchReplyFromConfig(params: { chatType: sessionStoreEntry.entry?.chatType, }); - const { maybeApplyTtsToPayload } = await loadTtsRuntime(); const shouldSendToolSummaries = ctx.ChatType !== "group" || ctx.IsForum === true; const shouldSendToolStartStatuses = ctx.ChatType !== "group" || ctx.IsForum === true; const sendFinalPayload = async ( payload: ReplyPayload, ): Promise<{ queuedFinal: boolean; routedFinalCount: number }> => { - const ttsPayload = await maybeApplyTtsToPayload({ + const ttsPayload = await maybeApplyTtsToReplyPayload({ payload, cfg, channel: ttsChannel, @@ -803,7 +809,7 @@ export async function dispatchReplyFromConfig(params: { suppressTyping: typing.suppressTyping, onToolResult: (payload: ReplyPayload) => { const run = async () => { - const ttsPayload = await maybeApplyTtsToPayload({ + const ttsPayload = await maybeApplyTtsToReplyPayload({ payload, cfg, channel: ttsChannel, @@ -879,7 +885,7 @@ export async function dispatchReplyFromConfig(params: { } : context; await params.replyOptions?.onBlockReplyQueued?.(payload, queuedContext); - const ttsPayload = await maybeApplyTtsToPayload({ + const ttsPayload = await maybeApplyTtsToReplyPayload({ payload, cfg, channel: ttsChannel, @@ -963,7 +969,7 @@ export async function dispatchReplyFromConfig(params: { accumulatedBlockText.trim() ) { try { - const ttsSyntheticReply = await maybeApplyTtsToPayload({ + const ttsSyntheticReply = await maybeApplyTtsToReplyPayload({ payload: { text: accumulatedBlockText }, cfg, channel: ttsChannel,