diff --git a/src/commands/gemini-chat.ts b/src/commands/gemini-chat.ts index 30a9c19..9ca1afb 100644 --- a/src/commands/gemini-chat.ts +++ b/src/commands/gemini-chat.ts @@ -2,7 +2,6 @@ import {ChatCommand} from "../base/chat-command"; import {Message} from "typescript-telegram-bot-api"; import { collectReplyChainText, - editMessageText, escapeMarkdownV2Text, extractText, logError, @@ -56,7 +55,7 @@ export class GeminiChat extends ChatCommand { let waitMessage: Message; - const startTime = new Date().getSeconds(); + const startTime = Date.now(); try { waitMessage = await bot.sendMessage({ @@ -73,15 +72,27 @@ export class GeminiChat extends ChatCommand { contents: chatContent, }); - let messageText = ""; + let currentText = ""; let shouldBreak = false; - let diff = 0; const editor = startIntervalEditor({ intervalMs: 4500, - getText: () => messageText, + getText: () => currentText, editFn: async (text) => { - await editMessageText(chatId, waitMessage.message_id, escapeMarkdownV2Text(text), "Markdown"); + await bot.editMessageText( + { + chat_id: chatId, + message_id: waitMessage.message_id, + text: escapeMarkdownV2Text(text), + parse_mode: "Markdown" + } + ).catch(logError); + + console.log("editMessageText", text); + + waitMessage.reply_to_message = msg; + waitMessage.text = text; + await MessageStore.put(waitMessage); }, onStop: async () => { } @@ -91,42 +102,35 @@ export class GeminiChat extends ChatCommand { try { for await (const chunk of stream) { const text = chunk.text; + currentText += text; - const length = (messageText + text).length; - if (length > 4096) { - messageText = messageText.slice(0, 4093) + "..."; + if (currentText.length > 4096) { + currentText = currentText.slice(0, 4093) + "..."; shouldBreak = true; - } else { - messageText += text; } + console.log("messageText", currentText); + console.log("length", currentText.length); + if (shouldBreak) { - console.log("messageText", messageText); - console.log("length", length); console.log("break", true); - - diff = Math.abs(new Date().getSeconds() - startTime); - await editor.tick(); - await editor.stop(); break; } - - console.log("messageText", messageText); - console.log("length", messageText.length); - - diff = Math.abs(new Date().getSeconds() - startTime); } } finally { await editor.tick(); await editor.stop(); + if (!shouldBreak) { + console.log("ended", true); + } + + const diff = Math.abs(Date.now() - startTime) / 1000.0; console.log("time", diff); - console.log("ended", true); waitMessage.reply_to_message = msg; - waitMessage.text = messageText; + waitMessage.text = currentText; await MessageStore.put(waitMessage); - await oldReplyToMessage(waitMessage, `⏱️ ${diff}s`); } } catch (error) { diff --git a/src/commands/gemini-list-models.ts b/src/commands/gemini-list-models.ts index 11fcdff..f919919 100644 --- a/src/commands/gemini-list-models.ts +++ b/src/commands/gemini-list-models.ts @@ -18,15 +18,15 @@ export class GeminiListModels extends ChatCommand { const modelsString = listResponse.page .sort((a, b) => a.name.localeCompare(b.name)) - .map(e => `\`${e.name}\``) + .map(e => `${e.name}`) .join("\n"); - const text = "Доступные модели:\n\n" + modelsString; + const text = "Доступные модели:\n\n" + "
" + modelsString + "
"; await replyToMessage({ message: msg, text: text, - parse_mode: "Markdown" + parse_mode: "HTML" }); } catch (e) { console.error(e); diff --git a/src/commands/mistral-chat.ts b/src/commands/mistral-chat.ts index 7c14019..cccd4e8 100644 --- a/src/commands/mistral-chat.ts +++ b/src/commands/mistral-chat.ts @@ -4,7 +4,6 @@ import {Requirement} from "../base/requirement"; import {Message} from "typescript-telegram-bot-api"; import { collectReplyChainText, - editMessageText, escapeMarkdownV2Text, extractText, logError, @@ -63,7 +62,7 @@ export class MistralChat extends ChatCommand { let waitMessage: Message; - const startTime = new Date().getSeconds(); + const startTime = Date.now(); try { waitMessage = await bot.sendMessage({ @@ -80,15 +79,27 @@ export class MistralChat extends ChatCommand { messages: chatMessages as any }); - let messageText = ""; + let currentText = ""; let shouldBreak = false; - let diff = 0; const editor = startIntervalEditor({ intervalMs: 4500, - getText: () => messageText, + getText: () => currentText, editFn: async (text) => { - await editMessageText(chatId, waitMessage.message_id, escapeMarkdownV2Text(text), "Markdown"); + await bot.editMessageText( + { + chat_id: chatId, + message_id: waitMessage.message_id, + text: escapeMarkdownV2Text(text), + parse_mode: "Markdown" + } + ).catch(logError); + + console.log("editMessageText", text); + + waitMessage.reply_to_message = msg; + waitMessage.text = text; + await MessageStore.put(waitMessage); }, onStop: async () => { } @@ -97,56 +108,42 @@ export class MistralChat extends ChatCommand { try { for await (const chunk of stream) { - const text = chunk.data.choices[0].delta.content; console.log("chunk", chunk); - const length = (messageText + text).length; - if (length > 4096) { - messageText = messageText.slice(0, 4093) + "..."; + const text = chunk.data.choices[0].delta.content; + currentText += text; + + if (currentText.length > 4096) { + currentText = currentText.slice(0, 4093) + "..."; shouldBreak = true; - } else { - messageText += text; } + console.log("messageText", currentText); + console.log("length", currentText.length); + if (shouldBreak) { - console.log("messageText", messageText); - console.log("length", length); console.log("break", true); - - diff = Math.abs(new Date().getSeconds() - startTime); - await editor.tick(); - await editor.stop(); break; } - - console.log("messageText", messageText); - console.log("length", messageText.length); - - diff = Math.abs(new Date().getSeconds() - startTime); } } finally { await editor.tick(); await editor.stop(); + if (!shouldBreak) { + console.log("ended", true); + } + + const diff = Math.abs(Date.now() - startTime) / 1000.0; console.log("time", diff); - console.log("ended", true); waitMessage.reply_to_message = msg; - waitMessage.text = messageText; - MessageStore.put(waitMessage); - + waitMessage.text = currentText; + await MessageStore.put(waitMessage); await oldReplyToMessage(waitMessage, `⏱️ ${diff}s`); } } catch (error) { console.error(error); - - // if (error instanceof ApiError) { - // if (error.status === 429) { - // await replyToMessage(waitMessage, "На сегодня всё, лимиты закончились.").catch(logError); - // return; - // } - // } - await oldReplyToMessage(waitMessage, `Произошла ошибка!\n${error.toString()}`).catch(logError); } } diff --git a/src/commands/mistral-list-models.ts b/src/commands/mistral-list-models.ts index fde9e6b..639560d 100644 --- a/src/commands/mistral-list-models.ts +++ b/src/commands/mistral-list-models.ts @@ -18,16 +18,15 @@ export class MistralListModels extends ChatCommand { const modelsString = listResponse.data .sort((a, b) => a.name.localeCompare(b.name)) - .map(e => `\`${e.name}\``) + .map(e => `${e.id}`) .join("\n"); - const text = "Доступные модели:\n\n" + modelsString; + const text = "Доступные модели:\n\n" + "
" + modelsString + "
"; await replyToMessage({ - chat_id: msg.chat.id, + message: msg, text: text, - parse_mode: "Markdown", - message: msg + parse_mode: "HTML" }); } catch (e) { console.error(e); diff --git a/src/commands/ollama-list-models.ts b/src/commands/ollama-list-models.ts index 13d7e7e..9f1c8ea 100644 --- a/src/commands/ollama-list-models.ts +++ b/src/commands/ollama-list-models.ts @@ -1,7 +1,7 @@ import {ChatCommand} from "../base/chat-command"; import {Message} from "typescript-telegram-bot-api"; import {ollama} from "../index"; -import {logError, oldReplyToMessage, sendMessage} from "../util/utils"; +import {logError, oldReplyToMessage, replyToMessage} from "../util/utils"; import {Requirements} from "../base/requirements"; import {Requirement} from "../base/requirement"; @@ -14,18 +14,19 @@ export class OllamaListModels extends ChatCommand { async execute(msg: Message): Promise { try { const listResponse = await ollama.list(); + console.log(listResponse); const modelsString = listResponse.models .sort((a, b) => a.name.localeCompare(b.name)) - .map(e => `\`${e.model}\``) + .map(e => `${e.model}`) .join("\n"); - const message = "Доступные модели:\n\n" + modelsString; + const text = "Доступные модели:\n\n" + "
" + modelsString + "
"; - await sendMessage({ - chat_id: msg.chat.id, - text: message, - parse_mode: "Markdown", + await replyToMessage({ + message: msg, + text: text, + parse_mode: "HTML" }); } catch (e) { console.error(e);