From 653772ca7887edb586dcbd1a4e2bbc4250869d1c Mon Sep 17 00:00:00 2001 From: linshen <32978552+linshenkx@users.noreply.github.com> Date: Mon, 17 Feb 2025 21:19:51 +0800 Subject: [PATCH] refactor: Synchronize core and UI package interfaces with async/sync method transformations - Modify TemplateManager to use synchronous methods instead of async - Update core service interfaces to remove async/await requirements - Simplify initialization and method calls across core and UI packages - Remove unnecessary async/await wrappers in composables and components - Enhance error handling and logging during service initialization - Standardize method signatures in template, history, and model managers --- package.json | 51 +- packages/core/src/services/history/manager.ts | 2 +- packages/core/src/services/history/types.ts | 2 +- packages/core/src/services/model/manager.ts | 1 - packages/core/src/services/prompt/service.ts | 6 +- .../core/src/services/template/defaults.ts | 8 +- .../core/src/services/template/manager.ts | 64 +- packages/core/src/services/template/types.ts | 35 +- packages/ui/package.json | 40 +- packages/ui/src/components/OptimizePanel.vue | 127 + .../ui/src/components/TemplateManager.vue | 31 +- packages/ui/src/components/TemplateSelect.vue | 11 +- packages/ui/src/components/TestPanel.vue | 81 + packages/ui/src/composables/useModals.ts | 60 + .../ui/src/composables/usePromptHistory.ts | 3 +- .../ui/src/composables/usePromptOptimizer.ts | 35 +- packages/ui/src/index.ts | 17 +- packages/ui/vite.config.ts | 20 +- packages/web/package.json | 1 - packages/web/src/App.vue | 177 +- .../web/{vite.config.js => vite.config.ts} | 18 +- pnpm-lock.yaml | 2384 ++++++++++++++--- 22 files changed, 2537 insertions(+), 637 deletions(-) create mode 100644 packages/ui/src/components/OptimizePanel.vue create mode 100644 packages/ui/src/components/TestPanel.vue create mode 100644 packages/ui/src/composables/useModals.ts rename packages/web/{vite.config.js => vite.config.ts} (63%) diff --git a/package.json b/package.json index 92ce3b1d..41df5876 100644 --- a/package.json +++ b/package.json @@ -3,25 +3,60 @@ "version": "0.0.1", "private": true, "scripts": { - "dev:core": "pnpm -F @prompt-optimizer/core dev", - "dev:ui": "pnpm -F @prompt-optimizer/ui dev", - "dev:web": "pnpm -F @prompt-optimizer/web dev", - "dev:ext": "pnpm -F @prompt-optimizer/extension dev", - "build:core": "pnpm -F @prompt-optimizer/core build", "build:ui": "pnpm -F @prompt-optimizer/ui build", "build:web": "pnpm -F @prompt-optimizer/web build", "build:ext": "pnpm -F @prompt-optimizer/extension build", - + "watch:ui": "pnpm -F @prompt-optimizer/ui build --watch", + "dev:web": "pnpm -F @prompt-optimizer/web dev", + "dev:ext": "pnpm -F @prompt-optimizer/extension dev", "test:core": "pnpm -F @prompt-optimizer/core test", "test:ui": "pnpm -F @prompt-optimizer/ui test", "test:web": "pnpm -F @prompt-optimizer/web test", "test:ext": "pnpm -F @prompt-optimizer/extension test", - "test": "pnpm -r test", - "build": "pnpm -r build" + "build": "pnpm -r build", + "clean:core": "rimraf packages/core/dist", + "clean:ui": "rimraf packages/ui/dist", + "clean:web": "rimraf packages/web/dist", + "clean:ext": "rimraf packages/extension/dist", + "clean:vite:core": "rimraf packages/core/node_modules/.vite", + "clean:vite:ui": "rimraf packages/ui/node_modules/.vite", + "clean:vite:web": "rimraf packages/web/node_modules/.vite", + "clean:vite:ext": "rimraf packages/extension/node_modules/.vite", + "clean:vite": "run-s clean:vite:core clean:vite:ui clean:vite:web clean:vite:ext", + "clean": "run-s clean:core clean:ui clean:web clean:ext clean:vite", + "setup:install": "pnpm install", + "dev:setup": "run-s clean build:core build:ui", + "dev:parallel": "concurrently -k -p \"[{name}]\" -n \"UI,WEB\" \"pnpm run watch:ui\" \"pnpm run dev:web\"", + "dev": "run-s dev:setup dev:parallel", + "dev:fresh": "run-s clean setup:install dev" }, "devDependencies": { + "concurrently": "^8.2.2", + "cross-env": "^7.0.3", + "npm-run-all": "^4.1.5", + "rimraf": "^4.4.1", "typescript": "^5.0.0" + }, + "dependencies": { + "@ctrl/tinycolor": "^4.1.0", + "@element-plus/icons-vue": "^2.3.1", + "@floating-ui/core": "^1.6.9", + "@floating-ui/dom": "^1.6.13", + "@floating-ui/utils": "^0.2.9", + "@popperjs/core": "^2.11.8", + "@vue/reactivity": "^3.5.13", + "@vue/runtime-core": "^3.5.13", + "@vue/runtime-dom": "^3.5.13", + "@vue/shared": "^3.5.13", + "@vueuse/core": "^12.7.0", + "@vueuse/shared": "^12.7.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.13", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.3", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" } } diff --git a/packages/core/src/services/history/manager.ts b/packages/core/src/services/history/manager.ts index c55bbeb8..6e78e6fc 100644 --- a/packages/core/src/services/history/manager.ts +++ b/packages/core/src/services/history/manager.ts @@ -13,7 +13,7 @@ export class HistoryManager implements IHistoryManager { /** * 初始化历史记录管理器 */ - async init(): Promise { + init(): void { try { // 验证存储是否可用 const testKey = '_test_storage_'; diff --git a/packages/core/src/services/history/types.ts b/packages/core/src/services/history/types.ts index f25081e4..20016734 100644 --- a/packages/core/src/services/history/types.ts +++ b/packages/core/src/services/history/types.ts @@ -48,7 +48,7 @@ export interface PromptRecordChain { */ export interface IHistoryManager { /** 初始化历史记录管理器 */ - init(): Promise; + init(): void; /** 添加记录 */ addRecord(record: PromptRecord): void; /** 获取所有记录 */ diff --git a/packages/core/src/services/model/manager.ts b/packages/core/src/services/model/manager.ts index f459166b..d871aa2d 100644 --- a/packages/core/src/services/model/manager.ts +++ b/packages/core/src/services/model/manager.ts @@ -63,7 +63,6 @@ export class ModelManager implements IModelManager { ...config, key })); - console.log('获取所有模型配置:', returnValue); return returnValue; } diff --git a/packages/core/src/services/prompt/service.ts b/packages/core/src/services/prompt/service.ts index c11ed063..e1edda0e 100644 --- a/packages/core/src/services/prompt/service.ts +++ b/packages/core/src/services/prompt/service.ts @@ -404,15 +404,13 @@ export class PromptService implements IPromptService { } // 导出工厂函数 -export async function createPromptService( +export function createPromptService( modelManager: ModelManager = defaultModelManager, llmService: LLMService = createLLMService(modelManager), templateManager: TemplateManager = defaultTemplateManager, historyManager: HistoryManager = defaultHistoryManager -): Promise { +): PromptService { try { - await templateManager.init(); - await historyManager.init(); return new PromptService(modelManager, llmService, templateManager, historyManager); } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); diff --git a/packages/core/src/services/template/defaults.ts b/packages/core/src/services/template/defaults.ts index 89a5aca8..0bae9c32 100644 --- a/packages/core/src/services/template/defaults.ts +++ b/packages/core/src/services/template/defaults.ts @@ -194,7 +194,7 @@ export const DEFAULT_TEMPLATES: Record = { }, 'iterate': { id: 'iterate', - name: '提示词迭代优化', + name: '通用迭代', content: `# Role:提示词迭代优化专家 ## Background: @@ -229,16 +229,18 @@ export const DEFAULT_TEMPLATES: Record = { 3. 确保修改符合用户的优化需求 4. 避免过度修改导致提示词效果降低 5. 保持提示词的可读性和结构性 +6. 只需要输出优化后的Prompt,使用原有格式,不要输出多余解释或引导词 +7. 优化需求是针对原始提示词的 ## Workflow: 1. 分析原有提示词,提取核心意图和关键结构 2. 理解用户的优化需求,确定优化方向 -3. 在保持核心意图的基础上进行定向优化 +3. 在保持核心意图的基础上对原始提示词进行定向优化 4. 检查优化结果是否符合预期 5. 输出优化后的提示词,不要输出多余解释或引导词 ## Initialization: -我会给出原始提示词和优化需求,请根据我的优化需求,在保持核心意图的基础上进行定向优化。 +我会给出原始提示词和优化需求,请根据我的优化需求,在保持核心意图的基础上对原始提示词进行定向优化。 请避免讨论我发送的内容,只需要输出优化后的Prompt,使用原有格式,不要输出多余解释或引导词。 `, metadata: { diff --git a/packages/core/src/services/template/manager.ts b/packages/core/src/services/template/manager.ts index a119f61d..a2461c84 100644 --- a/packages/core/src/services/template/manager.ts +++ b/packages/core/src/services/template/manager.ts @@ -18,12 +18,15 @@ export class TemplateManager implements ITemplateManager { cacheTimeout: 5 * 60 * 1000, ...config }; + + // 在构造函数中执行初始化 + this.init(); } /** - * 初始化提示词管理器 + * 私有初始化方法 */ - async init(): Promise { + private init(): void { try { // 需要先清空已有提示词避免重复加载 this.builtinTemplates.clear(); @@ -42,9 +45,10 @@ export class TemplateManager implements ITemplateManager { throw new TemplateError('内置提示词加载失败'); } - await this.loadUserTemplates(); + this.loadUserTemplates(); } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); + console.error('模板管理器初始化失败:', errorMessage); throw new TemplateError(`初始化失败: ${errorMessage}`); } } @@ -52,7 +56,7 @@ export class TemplateManager implements ITemplateManager { /** * 获取提示词 */ - async getTemplate(templateId: string): Promise