Skip to content

Commit 977c2fd

Browse files
Andy YeAndy Ye
authored andcommitted
fix telegram partial draft previews
1 parent 44d7d6f commit 977c2fd

2 files changed

Lines changed: 37 additions & 2 deletions

File tree

extensions/telegram/src/bot-message-dispatch.test.ts

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -442,7 +442,7 @@ describe("dispatchTelegramMessage draft streaming", () => {
442442
expect.objectContaining({
443443
chatId: 123,
444444
thread: { id: 777, scope: "dm" },
445-
minInitialChars: 30,
445+
minInitialChars: 0,
446446
}),
447447
);
448448
expect(draftStream.update).toHaveBeenCalledWith("Hello");
@@ -468,6 +468,41 @@ describe("dispatchTelegramMessage draft streaming", () => {
468468
expect(draftStream.clear).toHaveBeenCalledTimes(1);
469469
});
470470

471+
it("sends direct model partials through the Telegram draft transport before final delivery", async () => {
472+
const { createTelegramDraftStream: createRealTelegramDraftStream } =
473+
await vi.importActual<typeof import("./draft-stream.js")>("./draft-stream.js");
474+
const bot = createBot();
475+
createTelegramDraftStream.mockImplementation((params) => createRealTelegramDraftStream(params));
476+
dispatchReplyWithBufferedBlockDispatcher.mockImplementation(
477+
async ({ dispatcherOptions, replyOptions }) => {
478+
await replyOptions?.onPartialReply?.({ text: "Hi" });
479+
await vi.waitFor(() =>
480+
expect(bot.api.sendMessage).toHaveBeenCalledWith(
481+
123,
482+
"Hi",
483+
expect.objectContaining({ message_thread_id: 777 }),
484+
),
485+
);
486+
expect(deliverReplies).not.toHaveBeenCalled();
487+
488+
await dispatcherOptions.deliver({ text: "Hi there" }, { kind: "final" });
489+
return { queuedFinal: true };
490+
},
491+
);
492+
493+
await dispatchWithContext({ context: createContext(), bot });
494+
495+
await vi.waitFor(() =>
496+
expect(bot.api.editMessageText).toHaveBeenCalledWith(
497+
123,
498+
777,
499+
"Hi there",
500+
expect.objectContaining({ parse_mode: "HTML" }),
501+
),
502+
);
503+
expect(deliverReplies).not.toHaveBeenCalled();
504+
});
505+
471506
it("keeps retained overflow draft previews", async () => {
472507
const draftStream = createDraftStream();
473508
const bot = createBot();

extensions/telegram/src/bot-message-dispatch.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,7 @@ export const dispatchTelegramMessage = async ({
428428
replyToMode !== "off" && typeof msg.message_id === "number"
429429
? (replyQuoteMessageId ?? msg.message_id)
430430
: undefined;
431-
const draftMinInitialChars = streamMode === "progress" ? 0 : DRAFT_MIN_INITIAL_CHARS;
431+
const draftMinInitialChars = streamMode === "block" ? DRAFT_MIN_INITIAL_CHARS : 0;
432432
const progressSeed = `${route.accountId}:${chatId}:${threadSpec.id ?? ""}`;
433433
const mediaLocalRoots = getAgentScopedMediaLocalRoots(cfg, route.agentId);
434434
const createDraftLane = (laneName: LaneName, enabled: boolean): DraftLaneState => {

0 commit comments

Comments
 (0)