From 76339ebc5cc32f43b1cc6b33fd92187e736566d1 Mon Sep 17 00:00:00 2001 From: geekgeekrun Date: Tue, 15 Apr 2025 03:25:51 +0800 Subject: [PATCH] add rechatLlmFallback config for auto reminder --- .../default-config-file/boss.json | 3 +- .../ui/src/common/enums/auto-start-chat.ts | 5 +++ .../flow/READ_NO_REPLY_AUTO_REMINDER/index.ts | 29 ++++++++++++-- .../page/MainLayout/ReadNoReplyReminder.vue | 38 +++++++++++++++++-- 4 files changed, 67 insertions(+), 8 deletions(-) diff --git a/packages/geek-auto-start-chat-with-boss/default-config-file/boss.json b/packages/geek-auto-start-chat-with-boss/default-config-file/boss.json index 8324fec..ee0f425 100644 --- a/packages/geek-auto-start-chat-with-boss/default-config-file/boss.json +++ b/packages/geek-auto-start-chat-with-boss/default-config-file/boss.json @@ -12,6 +12,7 @@ "rechatLimitDay": 21, "geminiApiKey": "", "rechatContentSource": 1, - "recentMessageQuantityForLlm": 8 + "recentMessageQuantityForLlm": 8, + "rechatLlmFallback": 1 } } \ No newline at end of file diff --git a/packages/ui/src/common/enums/auto-start-chat.ts b/packages/ui/src/common/enums/auto-start-chat.ts index ede72cc..ff0cc95 100644 --- a/packages/ui/src/common/enums/auto-start-chat.ts +++ b/packages/ui/src/common/enums/auto-start-chat.ts @@ -13,3 +13,8 @@ export enum RECHAT_CONTENT_SOURCE { LOOK_FORWARD_EMOTION = 1, GEMINI_WITH_CHAT_CONTEXT = 2 } + +export enum RECHAT_LLM_FALLBACK { + SEND_LOOK_FORWARD_EMOTION = 1, + EXIT_REMINDER_PROGRAM = 2 +} diff --git a/packages/ui/src/main/flow/READ_NO_REPLY_AUTO_REMINDER/index.ts b/packages/ui/src/main/flow/READ_NO_REPLY_AUTO_REMINDER/index.ts index 90f4c1e..87b5779 100644 --- a/packages/ui/src/main/flow/READ_NO_REPLY_AUTO_REMINDER/index.ts +++ b/packages/ui/src/main/flow/READ_NO_REPLY_AUTO_REMINDER/index.ts @@ -4,7 +4,7 @@ import { Browser, Page } from 'puppeteer' import { sendGptContent, sendLookForwardReplyEmotion } from './boss-operation' import { sleep, sleepWithRandomDelay } from '@geekgeekrun/utils/sleep.mjs' import attachListenerForKillSelfOnParentExited from '../../utils/attachListenerForKillSelfOnParentExited' -import { app } from 'electron' +import { app, dialog } from 'electron' import { initDb } from '@geekgeekrun/sqlite-plugin' import { getPublicDbFilePath, @@ -17,7 +17,8 @@ import * as fs from 'fs' import { pipeWriteRegardlessError } from '../utils/pipe' import { BossInfo } from '@geekgeekrun/sqlite-plugin/dist/entity/BossInfo' import { messageForSaveFilter } from '../../../common/utils/chat-list' -import { RECHAT_CONTENT_SOURCE } from '../../../common/enums/auto-start-chat' +import { RECHAT_CONTENT_SOURCE, RECHAT_LLM_FALLBACK } from '../../../common/enums/auto-start-chat' +import gtag from '../../utils/gtag' const throttleIntervalMinutes = readConfigFile('boss.json').autoReminder?.throttleIntervalMinutes ?? 10 @@ -27,6 +28,9 @@ const recentMessageQuantityForLlm = const rechatContentSource = readConfigFile('boss.json').autoReminder?.rechatContentSource ?? RECHAT_CONTENT_SOURCE.LOOK_FORWARD_EMOTION +const rechatLlmFallback = + readConfigFile('boss.json').autoReminder?.rechatLlmFallback ?? + RECHAT_LLM_FALLBACK.SEND_LOOK_FORWARD_EMOTION const dbInitPromise = initDb(getPublicDbFilePath()) @@ -286,11 +290,17 @@ const mainLoop = async () => { await sleepWithRandomDelay(3250) if (rechatContentSource === RECHAT_CONTENT_SOURCE.GEMINI_WITH_CHAT_CONTEXT) { try { - const messageListForGpt = historyMessageList.filter(it => it.bizType !== 101 && it.isSelf).slice(-recentMessageQuantityForLlm) + const messageListForGpt = historyMessageList + .filter((it) => it.bizType !== 101 && it.isSelf) + .slice(-recentMessageQuantityForLlm) await sendGptContent(pageMapByName.boss!, messageListForGpt) } catch (err) { console.log(err) - await sendLookForwardReplyEmotion(pageMapByName.boss!) + if (rechatLlmFallback === RECHAT_LLM_FALLBACK.SEND_LOOK_FORWARD_EMOTION) { + await sendLookForwardReplyEmotion(pageMapByName.boss!) + } else { + throw err + } } } else { await sendLookForwardReplyEmotion(pageMapByName.boss!) @@ -354,6 +364,17 @@ export async function runEntry() { ) process.exit(1) } + if (err instanceof Error && err.message === 'CANNOT_FIND_A_USABLE_MODEL') { + gtag('cannot_find_a_usable_model') + await dialog.showMessageBox({ + type: 'error', + message: + '未找到可以使用的模型,请确定您所配置的模型均可使用。重启本程序或许可以解决这个问题', + buttons: ['退出'] + }) + process.exit(0) + break; + } } finally { pageMapByName['boss'] = null await sleep(rerunInterval) diff --git a/packages/ui/src/renderer/src/page/MainLayout/ReadNoReplyReminder.vue b/packages/ui/src/renderer/src/page/MainLayout/ReadNoReplyReminder.vue index 93bd3e0..2bff43e 100644 --- a/packages/ui/src/renderer/src/page/MainLayout/ReadNoReplyReminder.vue +++ b/packages/ui/src/renderer/src/page/MainLayout/ReadNoReplyReminder.vue @@ -106,6 +106,23 @@ 次聊天内容作为上下文生成新消息 + +
+ 当所有模型均不可使用时  + + + +
+
@@ -145,9 +162,12 @@