@llblab/pi-telegram 0.10.7 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -30,6 +30,7 @@ export interface TelegramStatusMenuCallbackDeps {
30
30
  callbackQueryId: string,
31
31
  text?: string,
32
32
  ) => Promise<void>;
33
+ isVoiceReplyActive?: () => boolean;
33
34
  }
34
35
 
35
36
  export interface TelegramStatusMenuOpenDeps<
@@ -131,6 +132,13 @@ export async function handleTelegramStatusMenuCallbackAction(
131
132
  return true;
132
133
  }
133
134
  if (!isTelegramStatusMenuCallbackAction(data, "thinking")) return false;
135
+ if (deps.isVoiceReplyActive?.()) {
136
+ await deps.answerCallbackQuery(
137
+ callbackQueryId,
138
+ "Thinking controls are disabled during voice replies.",
139
+ );
140
+ return true;
141
+ }
134
142
  if (!activeModel?.reasoning) {
135
143
  await deps.answerCallbackQuery(
136
144
  callbackQueryId,
@@ -148,6 +156,7 @@ export function buildStatusReplyMarkup(
148
156
  currentThinkingLevel: ThinkingLevel,
149
157
  queueItemCount = 0,
150
158
  sectionRegistry?: TelegramSectionRegistry,
159
+ isVoiceReplyActive?: boolean,
151
160
  ): TelegramReplyMarkup {
152
161
  const rows: Array<Array<{ text: string; callback_data: string }>> = [];
153
162
  rows.push([
@@ -159,7 +168,7 @@ export function buildStatusReplyMarkup(
159
168
  callback_data: "menu:model",
160
169
  },
161
170
  ]);
162
- if (activeModel?.reasoning) {
171
+ if (activeModel?.reasoning && !isVoiceReplyActive) {
163
172
  rows.push([
164
173
  {
165
174
  text: formatStatusButtonLabel(
@@ -176,11 +185,10 @@ export function buildStatusReplyMarkup(
176
185
  callback_data: "menu:queue",
177
186
  },
178
187
  ]);
179
- // Extension section rows before Settings
180
188
  if (sectionRegistry) {
181
189
  const sectionRows = getTelegramSectionMainMenuRows(sectionRegistry);
182
190
  for (const row of sectionRows) {
183
- rows.push([{ text: row.text, callback_data: row.callback_data }]);
191
+ rows.push([row]);
184
192
  }
185
193
  }
186
194
  rows.push([
@@ -198,6 +206,7 @@ export function buildTelegramStatusMenuRenderPayload(
198
206
  currentThinkingLevel: ThinkingLevel,
199
207
  queueItemCount = 0,
200
208
  sectionRegistry?: TelegramSectionRegistry,
209
+ isVoiceReplyActive?: boolean,
201
210
  ): TelegramMenuRenderPayload {
202
211
  return {
203
212
  nextMode: "status",
@@ -208,6 +217,7 @@ export function buildTelegramStatusMenuRenderPayload(
208
217
  currentThinkingLevel,
209
218
  queueItemCount,
210
219
  sectionRegistry,
220
+ isVoiceReplyActive,
211
221
  ),
212
222
  };
213
223
  }
@@ -220,6 +230,7 @@ export async function updateTelegramStatusMessage(
220
230
  deps: TelegramMenuMessageRuntimeDeps,
221
231
  queueItemCount = 0,
222
232
  sectionRegistry?: TelegramSectionRegistry,
233
+ isVoiceReplyActive?: boolean,
223
234
  ): Promise<void> {
224
235
  await editTelegramMenuMessage(
225
236
  state,
@@ -229,6 +240,7 @@ export async function updateTelegramStatusMessage(
229
240
  currentThinkingLevel,
230
241
  queueItemCount,
231
242
  sectionRegistry,
243
+ isVoiceReplyActive,
232
244
  ),
233
245
  deps,
234
246
  );
@@ -242,6 +254,7 @@ export function sendTelegramStatusMessage(
242
254
  deps: TelegramMenuMessageRuntimeDeps,
243
255
  queueItemCount = 0,
244
256
  sectionRegistry?: TelegramSectionRegistry,
257
+ isVoiceReplyActive?: boolean,
245
258
  ): Promise<number | undefined> {
246
259
  return sendTelegramMenuMessage(
247
260
  state,
@@ -251,6 +264,7 @@ export function sendTelegramStatusMessage(
251
264
  currentThinkingLevel,
252
265
  queueItemCount,
253
266
  sectionRegistry,
267
+ isVoiceReplyActive,
254
268
  ),
255
269
  deps,
256
270
  );
@@ -25,6 +25,7 @@ export interface TelegramThinkingMenuCallbackDeps {
25
25
  callbackQueryId: string,
26
26
  text?: string,
27
27
  ) => Promise<void>;
28
+ isVoiceReplyActive?: () => boolean;
28
29
  }
29
30
 
30
31
  export interface TelegramThinkingMenuOpenDeps<
@@ -34,6 +35,7 @@ export interface TelegramThinkingMenuOpenDeps<
34
35
  getActiveModel: () => TModel | undefined;
35
36
  getThinkingLevel: () => ThinkingLevel;
36
37
  storeModelMenuState: (state: TelegramModelMenuState<TModel>) => void;
38
+ isVoiceReplyActive?: () => boolean;
37
39
  }
38
40
 
39
41
  function parseTelegramThinkingMenuCallbackAction(
@@ -92,6 +94,13 @@ export async function handleTelegramThinkingMenuCallbackAction(
92
94
  await deps.answerCallbackQuery(callbackQueryId, "Invalid thinking level.");
93
95
  return true;
94
96
  }
97
+ if (deps.isVoiceReplyActive?.()) {
98
+ await deps.answerCallbackQuery(
99
+ callbackQueryId,
100
+ "Thinking controls are disabled during voice replies.",
101
+ );
102
+ return true;
103
+ }
95
104
  if (!activeModel?.reasoning) {
96
105
  await deps.answerCallbackQuery(
97
106
  callbackQueryId,
@@ -142,6 +151,7 @@ export function buildTelegramThinkingMenuRenderPayload(
142
151
  export async function openTelegramThinkingMenu<
143
152
  TModel extends MenuModel = MenuModel,
144
153
  >(deps: TelegramThinkingMenuOpenDeps<TModel>): Promise<void> {
154
+ if (deps.isVoiceReplyActive?.()) return;
145
155
  const state = await deps.getModelMenuState();
146
156
  const messageId = await sendTelegramMenuMessage(
147
157
  state,
@@ -161,8 +171,9 @@ export async function updateTelegramThinkingMenuMessage(
161
171
  state: TelegramModelMenuState,
162
172
  activeModel: MenuModel | undefined,
163
173
  currentThinkingLevel: ThinkingLevel,
164
- deps: TelegramMenuMessageRuntimeDeps,
174
+ deps: TelegramMenuMessageRuntimeDeps & { isVoiceReplyActive?: () => boolean },
165
175
  ): Promise<void> {
176
+ if (deps.isVoiceReplyActive?.()) return;
166
177
  await editTelegramMenuMessage(
167
178
  state,
168
179
  buildTelegramThinkingMenuRenderPayload(activeModel, currentThinkingLevel),
package/lib/menu.ts CHANGED
@@ -239,6 +239,7 @@ export interface TelegramMenuCallbackRuntimeDeps<
239
239
  ) => Promise<number | undefined>;
240
240
  enqueueSectionPrompt?: (prompt: string, ctx: TContext) => Promise<void>;
241
241
  deleteMessage?: (chatId: number, messageId: number) => Promise<void>;
242
+ isVoiceReplyActive?: () => boolean;
242
243
  }
243
244
 
244
245
  export interface TelegramMenuActionRuntimeDeps<
@@ -262,6 +263,7 @@ export interface TelegramMenuActionRuntimeDeps<
262
263
  text: string,
263
264
  ) => Promise<unknown>;
264
265
  sectionRegistry?: TelegramSectionRegistry;
266
+ isVoiceReplyActive?: () => boolean;
265
267
  }
266
268
 
267
269
  export interface TelegramMenuActionRuntime<
@@ -639,6 +641,7 @@ export async function handleTelegramMenuCallbackRuntime<
639
641
  updateSettingsMenuMessage: () =>
640
642
  deps.updateSettingsMenuMessage?.(state, ctx) ?? Promise.resolve(),
641
643
  answerCallbackQuery: deps.answerCallbackQuery,
644
+ isVoiceReplyActive: deps.isVoiceReplyActive,
642
645
  },
643
646
  ),
644
647
  handleThinkingAction: async (state) =>
@@ -654,6 +657,7 @@ export async function handleTelegramMenuCallbackRuntime<
654
657
  getCurrentThinkingLevel: deps.getThinkingLevel,
655
658
  updateStatusMessage: () => deps.updateStatusMessage(state, ctx),
656
659
  answerCallbackQuery: deps.answerCallbackQuery,
660
+ isVoiceReplyActive: deps.isVoiceReplyActive,
657
661
  },
658
662
  ),
659
663
  handleModelAction: async (state) => {
@@ -708,7 +712,9 @@ export interface TelegramMenuActionRuntimeWithStateBuilderDeps<
708
712
  >
709
713
  extends
710
714
  Omit<TelegramMenuActionRuntimeDeps<TContext, TModel>, "getModelMenuState">,
711
- TelegramModelMenuStateBuilderDeps<TModel, TContext> {}
715
+ TelegramModelMenuStateBuilderDeps<TModel, TContext> {
716
+ isVoiceReplyActive?: () => boolean;
717
+ }
712
718
 
713
719
  export function createTelegramMenuActionRuntimeWithStateBuilder<
714
720
  TModel extends MenuModel = MenuModel,
@@ -762,6 +768,7 @@ export function createTelegramMenuActionRuntime<
762
768
  deps,
763
769
  deps.getQueueItemCount?.() ?? 0,
764
770
  deps.sectionRegistry,
771
+ deps.isVoiceReplyActive?.(),
765
772
  ),
766
773
  sendStatusMessage: (chatId, replyToMessageId, ctx) =>
767
774
  openTelegramStatusMenu({
@@ -793,6 +800,7 @@ export function createTelegramMenuActionRuntime<
793
800
  deps,
794
801
  queueItemCount,
795
802
  deps.sectionRegistry,
803
+ deps.isVoiceReplyActive?.(),
796
804
  ),
797
805
  storeModelMenuState: deps.storeModelMenuState,
798
806
  }),
@@ -829,6 +837,7 @@ export function createTelegramMenuActionRuntime<
829
837
  storeModelMenuState: deps.storeModelMenuState,
830
838
  editInteractiveMessage: deps.editInteractiveMessage,
831
839
  sendInteractiveMessage: deps.sendInteractiveMessage,
840
+ isVoiceReplyActive: deps.isVoiceReplyActive,
832
841
  }),
833
842
  };
834
843
  }