refactor: unify queueing and normalize telegram slack flows

This commit is contained in:
Peter Steinberger
2026-03-02 20:55:10 +00:00
parent 320920d523
commit 3a08e69a05
21 changed files with 627 additions and 266 deletions

View File

@@ -63,6 +63,7 @@ import {
calculateTotalPages,
getModelsPageSize,
parseModelCallbackData,
resolveModelSelection,
type ProviderInfo,
} from "./model-buttons.js";
import { buildInlineKeyboard } from "./send.js";
@@ -1260,30 +1261,28 @@ export const registerTelegramHandlers = ({
}
if (modelCallback.type === "select") {
const { provider, model } = modelCallback;
let resolvedProvider = provider;
if (!resolvedProvider) {
const matchingProviders = providers.filter((id) => byProvider.get(id)?.has(model));
if (matchingProviders.length === 1) {
resolvedProvider = matchingProviders[0];
} else {
const providerInfos: ProviderInfo[] = providers.map((p) => ({
id: p,
count: byProvider.get(p)?.size ?? 0,
}));
const buttons = buildProviderKeyboard(providerInfos);
await editMessageWithButtons(
`Could not resolve model "${model}".\n\nSelect a provider:`,
buttons,
);
return;
}
const selection = resolveModelSelection({
callback: modelCallback,
providers,
byProvider,
});
if (selection.kind !== "resolved") {
const providerInfos: ProviderInfo[] = providers.map((p) => ({
id: p,
count: byProvider.get(p)?.size ?? 0,
}));
const buttons = buildProviderKeyboard(providerInfos);
await editMessageWithButtons(
`Could not resolve model "${selection.model}".\n\nSelect a provider:`,
buttons,
);
return;
}
// Process model selection as a synthetic message with /model command
const syntheticMessage = buildSyntheticTextMessage({
base: callbackMessage,
from: callback.from,
text: `/model ${resolvedProvider}/${model}`,
text: `/model ${selection.provider}/${selection.model}`,
});
await processMessage(buildSyntheticContext(ctx, syntheticMessage), [], storeAllowFrom, {
forceWasMentioned: true,