diff --git a/locales/ar/chat.json b/locales/ar/chat.json index 20c9c9012d..2d9282208f 100644 --- a/locales/ar/chat.json +++ b/locales/ar/chat.json @@ -3,8 +3,8 @@ "title": "النموذج" }, "agentDefaultMessage": "مرحبًا، أنا **{{name}}**، يمكنك بدء المحادثة معي على الفور، أو يمكنك الذهاب إلى [إعدادات المساعد]({{url}}) لإكمال معلوماتي.", - "agentDefaultMessageWithSystemRole": "مرحبًا، أنا **{{name}}**، {{systemRole}}، دعنا نبدأ الدردشة!", - "agentDefaultMessageWithoutEdit": "مرحبًا، أنا **{{name}}**، دعنا نبدأ المحادثة!", + "agentDefaultMessageWithSystemRole": "مرحبًا، أنا **{{name}}**، كيف يمكنني مساعدتك؟", + "agentDefaultMessageWithoutEdit": "مرحبًا، أنا **{{name}}**، كيف يمكنني مساعدتك؟", "agents": "مساعد", "artifact": { "generating": "جاري الإنشاء", diff --git a/locales/bg-BG/chat.json b/locales/bg-BG/chat.json index 7ee3469f05..4074f38c94 100644 --- a/locales/bg-BG/chat.json +++ b/locales/bg-BG/chat.json @@ -3,8 +3,8 @@ "title": "Модел" }, "agentDefaultMessage": "Здравейте, аз съм **{{name}}**, можете да започнете разговор с мен веднага или да отидете на [Настройки на асистента]({{url}}), за да попълните информацията ми.", - "agentDefaultMessageWithSystemRole": "Здравей, аз съм **{{name}}**, {{systemRole}}. Нека започнем да чатим!", - "agentDefaultMessageWithoutEdit": "Здравей, аз съм **{{name}}** и нека започнем разговора!", + "agentDefaultMessageWithSystemRole": "Здравейте, аз съм **{{name}}**. Как мога да ви помогна?", + "agentDefaultMessageWithoutEdit": "Здравейте, аз съм **{{name}}**. Как мога да ви помогна?", "agents": "Асистент", "artifact": { "generating": "Генериране", diff --git a/locales/de-DE/chat.json b/locales/de-DE/chat.json index 65c7449bf5..180f15c159 100644 --- a/locales/de-DE/chat.json +++ b/locales/de-DE/chat.json @@ -3,8 +3,8 @@ "title": "Modell" }, "agentDefaultMessage": "Hallo, ich bin **{{name}}**. Du kannst sofort mit mir sprechen oder zu den [Assistenteneinstellungen]({{url}}) gehen, um meine Informationen zu vervollständigen.", - "agentDefaultMessageWithSystemRole": "Hallo, ich bin **{{name}}**, {{systemRole}}. Lass uns chatten!", - "agentDefaultMessageWithoutEdit": "Hallo, ich bin **{{name}}**. Lassen Sie uns ins Gespräch kommen!", + "agentDefaultMessageWithSystemRole": "Hallo, ich bin **{{name}}**. Wie kann ich Ihnen behilflich sein?", + "agentDefaultMessageWithoutEdit": "Hallo, ich bin **{{name}}**. Wie kann ich Ihnen behilflich sein?", "agents": "Assistent", "artifact": { "generating": "Wird generiert", diff --git a/locales/en-US/chat.json b/locales/en-US/chat.json index 6a5ee0e37c..5dc793470b 100644 --- a/locales/en-US/chat.json +++ b/locales/en-US/chat.json @@ -3,8 +3,8 @@ "title": "Model" }, "agentDefaultMessage": "Hello, I am **{{name}}**. You can start a conversation with me right away, or you can go to [Assistant Settings]({{url}}) to complete my information.", - "agentDefaultMessageWithSystemRole": "Hello, I'm **{{name}}**, {{systemRole}}. Let's start chatting!", - "agentDefaultMessageWithoutEdit": "Hello, I'm **{{name}}**, let's start chatting!", + "agentDefaultMessageWithSystemRole": "Hello, I am **{{name}}**. How can I assist you today?", + "agentDefaultMessageWithoutEdit": "Hello, I am **{{name}}**. How can I assist you today?", "agents": "Assistants", "artifact": { "generating": "Generating", diff --git a/locales/es-ES/chat.json b/locales/es-ES/chat.json index 4b926bd461..adc8819da9 100644 --- a/locales/es-ES/chat.json +++ b/locales/es-ES/chat.json @@ -3,8 +3,8 @@ "title": "Cambiar modelo" }, "agentDefaultMessage": "Hola, soy **{{name}}**. Puedes comenzar a hablar conmigo de inmediato o ir a [Configuración del asistente]({{url}}) para completar mi información.", - "agentDefaultMessageWithSystemRole": "Hola, soy **{{name}}**, {{systemRole}}, ¡comencemos a chatear!", - "agentDefaultMessageWithoutEdit": "¡Hola, soy **{{name}}**! Comencemos nuestra conversación.", + "agentDefaultMessageWithSystemRole": "Hola, soy **{{name}}**, ¿en qué puedo ayudarte?", + "agentDefaultMessageWithoutEdit": "Hola, soy **{{name}}**, ¿en qué puedo ayudarte?", "agents": "Asistente", "artifact": { "generating": "Generando", diff --git a/locales/fa-IR/chat.json b/locales/fa-IR/chat.json index dd762f9b8b..6895580ef0 100644 --- a/locales/fa-IR/chat.json +++ b/locales/fa-IR/chat.json @@ -3,8 +3,8 @@ "title": "مدل" }, "agentDefaultMessage": "سلام، من **{{name}}** هستم. می‌توانید همین حالا با من گفتگو را شروع کنید یا به [تنظیمات دستیار]({{url}}) بروید و اطلاعات من را تکمیل کنید.", - "agentDefaultMessageWithSystemRole": "سلام، من **{{name}}** هستم، {{systemRole}}، بیایید گفتگو را شروع کنیم!", - "agentDefaultMessageWithoutEdit": "سلام، من **{{name}}** هستم، بیایید گفتگو را شروع کنیم!", + "agentDefaultMessageWithSystemRole": "سلام، من **{{name}}** هستم، چگونه می‌توانم به شما کمک کنم؟", + "agentDefaultMessageWithoutEdit": "سلام، من **{{name}}** هستم، چگونه می‌توانم به شما کمک کنم؟", "agents": "دستیار", "artifact": { "generating": "در حال تولید", diff --git a/locales/fr-FR/chat.json b/locales/fr-FR/chat.json index a0e9f7a24c..07b75b666a 100644 --- a/locales/fr-FR/chat.json +++ b/locales/fr-FR/chat.json @@ -3,8 +3,8 @@ "title": "Modèle" }, "agentDefaultMessage": "Bonjour, je suis **{{name}}**, vous pouvez commencer à discuter avec moi immédiatement ou vous rendre dans [Paramètres de l'assistant]({{url}}) pour compléter mes informations.", - "agentDefaultMessageWithSystemRole": "Bonjour, je suis **{{name}}**, {{systemRole}}. Commençons la conversation !", - "agentDefaultMessageWithoutEdit": "Bonjour, je suis **{{name}}**. Commençons notre conversation !", + "agentDefaultMessageWithSystemRole": "Bonjour, je suis **{{name}}**, comment puis-je vous aider ?", + "agentDefaultMessageWithoutEdit": "Bonjour, je suis **{{name}}**, comment puis-je vous aider ?", "agents": "Assistant", "artifact": { "generating": "Génération en cours", diff --git a/locales/it-IT/chat.json b/locales/it-IT/chat.json index b57f04abed..c194a74a01 100644 --- a/locales/it-IT/chat.json +++ b/locales/it-IT/chat.json @@ -3,8 +3,8 @@ "title": "Modelli" }, "agentDefaultMessage": "Ciao, sono **{{name}}**, puoi iniziare subito a parlare con me oppure andare su [Impostazioni assistente]({{url}}) per completare le mie informazioni.", - "agentDefaultMessageWithSystemRole": "Ciao, sono **{{name}}**, {{systemRole}}, iniziamo a chattare!", - "agentDefaultMessageWithoutEdit": "Ciao, sono **{{name}}**. Cominciamo a chiacchierare!", + "agentDefaultMessageWithSystemRole": "Ciao, sono **{{name}}**, come posso aiutarti?", + "agentDefaultMessageWithoutEdit": "Ciao, sono **{{name}}**, come posso aiutarti?", "agents": "Assistente", "artifact": { "generating": "Generazione in corso", diff --git a/locales/ja-JP/chat.json b/locales/ja-JP/chat.json index 7d1f04df21..02d264625b 100644 --- a/locales/ja-JP/chat.json +++ b/locales/ja-JP/chat.json @@ -3,8 +3,8 @@ "title": "モデル" }, "agentDefaultMessage": "こんにちは、私は **{{name}}** です。すぐに私と会話を始めることもできますし、[アシスタント設定]({{url}}) に行って私の情報を充実させることもできます。", - "agentDefaultMessageWithSystemRole": "こんにちは、私は **{{name}}** です、{{systemRole}}、さあ、チャットを始めましょう!", - "agentDefaultMessageWithoutEdit": "こんにちは、私は**{{name}}**です。会話しましょう!", + "agentDefaultMessageWithSystemRole": "こんにちは、私は **{{name}}** です。何かお手伝いできることはありますか?", + "agentDefaultMessageWithoutEdit": "こんにちは、私は **{{name}}** です。何かお手伝いできることはありますか?", "agents": "エージェント", "artifact": { "generating": "生成中", diff --git a/locales/ko-KR/chat.json b/locales/ko-KR/chat.json index 03438dca79..34b6e339e4 100644 --- a/locales/ko-KR/chat.json +++ b/locales/ko-KR/chat.json @@ -3,8 +3,8 @@ "title": "모델" }, "agentDefaultMessage": "안녕하세요, 저는 **{{name}}**입니다. 지금 바로 저와 대화를 시작하시거나 [도우미 설정]({{url}})으로 가셔서 제 정보를 완성하실 수 있습니다.", - "agentDefaultMessageWithSystemRole": "안녕하세요, 저는 **{{name}}**입니다. {{systemRole}}입니다. 대화를 시작해 봅시다!", - "agentDefaultMessageWithoutEdit": "안녕하세요, 저는 **{{name}}**입니다. 대화를 시작해보세요!", + "agentDefaultMessageWithSystemRole": "안녕하세요, 저는 **{{name}}**입니다. 무엇을 도와드릴까요?", + "agentDefaultMessageWithoutEdit": "안녕하세요, 저는 **{{name}}**입니다. 무엇을 도와드릴까요?", "agents": "도우미", "artifact": { "generating": "생성 중", diff --git a/locales/nl-NL/chat.json b/locales/nl-NL/chat.json index 22d2767ef5..8a656dfa99 100644 --- a/locales/nl-NL/chat.json +++ b/locales/nl-NL/chat.json @@ -3,8 +3,8 @@ "title": "Modelen" }, "agentDefaultMessage": "Hallo, ik ben **{{name}}**. Je kunt meteen met me beginnen praten, of je kunt naar [Assistentinstellingen]({{url}}) gaan om mijn informatie aan te vullen.", - "agentDefaultMessageWithSystemRole": "Hallo, ik ben **{{name}}**, {{systemRole}}, laten we beginnen met praten!", - "agentDefaultMessageWithoutEdit": "Hallo, ik ben **{{name}}**. Laten we beginnen met een gesprek!", + "agentDefaultMessageWithSystemRole": "Hallo, ik ben **{{name}}**. Waarmee kan ik u van dienst zijn?", + "agentDefaultMessageWithoutEdit": "Hallo, ik ben **{{name}}**. Waarmee kan ik u van dienst zijn?", "agents": "Assistent", "artifact": { "generating": "Genereren", diff --git a/locales/pl-PL/chat.json b/locales/pl-PL/chat.json index ea56f20ffb..6f3965e595 100644 --- a/locales/pl-PL/chat.json +++ b/locales/pl-PL/chat.json @@ -3,8 +3,8 @@ "title": "Przełącz model" }, "agentDefaultMessage": "Cześć, jestem **{{name}}**, możesz od razu rozpocząć ze mną rozmowę lub przejść do [ustawień asystenta]({{url}}), aby uzupełnić moje informacje.", - "agentDefaultMessageWithSystemRole": "Cześć, jestem **{{name}}**, {{systemRole}}, zacznijmy rozmowę!", - "agentDefaultMessageWithoutEdit": "Cześć, jestem **{{name}}**. Zacznijmy rozmowę!", + "agentDefaultMessageWithSystemRole": "Cześć, jestem **{{name}}**. W czym mogę pomóc?", + "agentDefaultMessageWithoutEdit": "Cześć, jestem **{{name}}**. W czym mogę pomóc?", "agents": "Asystent", "artifact": { "generating": "Generowanie", diff --git a/locales/pt-BR/chat.json b/locales/pt-BR/chat.json index 7c8a8e6627..b5bd1027bb 100644 --- a/locales/pt-BR/chat.json +++ b/locales/pt-BR/chat.json @@ -3,8 +3,8 @@ "title": "Modelo" }, "agentDefaultMessage": "Olá, eu sou **{{name}}**, você pode começar a conversar comigo agora ou ir para [Configurações do Assistente]({{url}}) para completar minhas informações.", - "agentDefaultMessageWithSystemRole": "Olá, eu sou **{{name}}**, {{systemRole}}, vamos conversar!", - "agentDefaultMessageWithoutEdit": "Olá, sou o **{{name}}**, vamos começar a conversa!", + "agentDefaultMessageWithSystemRole": "Olá, eu sou **{{name}}**. Como posso ajudar você?", + "agentDefaultMessageWithoutEdit": "Olá, eu sou **{{name}}**. Como posso ajudar você?", "agents": "Assistente", "artifact": { "generating": "Gerando", diff --git a/locales/ru-RU/chat.json b/locales/ru-RU/chat.json index 08cf8a1208..e46011ce1e 100644 --- a/locales/ru-RU/chat.json +++ b/locales/ru-RU/chat.json @@ -3,8 +3,8 @@ "title": "Модель" }, "agentDefaultMessage": "Здравствуйте, я **{{name}}**. Вы можете сразу начать со мной разговор или перейти в [настройки помощника]({{url}}), чтобы дополнить мою информацию.", - "agentDefaultMessageWithSystemRole": "Привет, я **{{name}}**, {{systemRole}}. Давай начнем разговор!", - "agentDefaultMessageWithoutEdit": "Привет, я **{{name}}**, давай начнём разговор!", + "agentDefaultMessageWithSystemRole": "Здравствуйте, я **{{name}}**, чем могу помочь?", + "agentDefaultMessageWithoutEdit": "Здравствуйте, я **{{name}}**, чем могу помочь?", "agents": "Ассистент", "artifact": { "generating": "Генерация", diff --git a/locales/tr-TR/chat.json b/locales/tr-TR/chat.json index fab343f756..e707c2312d 100644 --- a/locales/tr-TR/chat.json +++ b/locales/tr-TR/chat.json @@ -3,8 +3,8 @@ "title": "Model Değiştir" }, "agentDefaultMessage": "Merhaba, ben **{{name}}**. Hemen benimle konuşmaya başlayabilir veya [Asistan Ayarları]({{url}}) sayfasına giderek bilgilerimi güncelleyebilirsin.", - "agentDefaultMessageWithSystemRole": "Merhaba, Ben **{{name}}**, {{systemRole}}. Hemen sohbet etmeye başlayalım!", - "agentDefaultMessageWithoutEdit": "Merhaba, ben **{{name}}**. Konuşmaya başlayalım!", + "agentDefaultMessageWithSystemRole": "Merhaba, ben **{{name}}**. Size nasıl yardımcı olabilirim?", + "agentDefaultMessageWithoutEdit": "Merhaba, ben **{{name}}**. Size nasıl yardımcı olabilirim?", "agents": "Asistan", "artifact": { "generating": "Üretiliyor", diff --git a/locales/vi-VN/chat.json b/locales/vi-VN/chat.json index f00e089dff..934230ce5c 100644 --- a/locales/vi-VN/chat.json +++ b/locales/vi-VN/chat.json @@ -3,8 +3,8 @@ "title": "Mô hình" }, "agentDefaultMessage": "Xin chào, tôi là **{{name}}**, bạn có thể bắt đầu trò chuyện với tôi ngay bây giờ, hoặc bạn có thể đến [Cài đặt trợ lý]({{url}}) để hoàn thiện thông tin của tôi.", - "agentDefaultMessageWithSystemRole": "Xin chào, tôi là **{{name}}**, {{systemRole}}. Hãy bắt đầu trò chuyện ngay!", - "agentDefaultMessageWithoutEdit": "Xin chào, tôi là **{{name}}**, chúng ta hãy bắt đầu trò chuyện nào!", + "agentDefaultMessageWithSystemRole": "Xin chào, tôi là **{{name}}**, tôi có thể giúp gì cho bạn?", + "agentDefaultMessageWithoutEdit": "Xin chào, tôi là **{{name}}**, tôi có thể giúp gì cho bạn?", "agents": "Trợ lý", "artifact": { "generating": "Đang tạo", diff --git a/locales/zh-CN/chat.json b/locales/zh-CN/chat.json index e21534a0bc..2ae7c429ea 100644 --- a/locales/zh-CN/chat.json +++ b/locales/zh-CN/chat.json @@ -3,8 +3,8 @@ "title": "模型" }, "agentDefaultMessage": "你好,我是 **{{name}}**,你可以立即与我开始对话,也可以前往 [助手设置]({{url}}) 完善我的信息。", - "agentDefaultMessageWithSystemRole": "你好,我是 **{{name}}**,{{systemRole}},让我们开始对话吧!", - "agentDefaultMessageWithoutEdit": "你好,我是 **{{name}}**,让我们开始对话吧!", + "agentDefaultMessageWithSystemRole": "你好,我是 **{{name}}**,有什么我可以帮忙的吗?", + "agentDefaultMessageWithoutEdit": "你好,我是 **{{name}}**,有什么我可以帮忙的吗?", "agents": "助手", "artifact": { "generating": "生成中", diff --git a/locales/zh-TW/chat.json b/locales/zh-TW/chat.json index 55239c9634..c758292c10 100644 --- a/locales/zh-TW/chat.json +++ b/locales/zh-TW/chat.json @@ -3,8 +3,8 @@ "title": "模型" }, "agentDefaultMessage": "你好,我是 **{{name}}**,你可以立即與我開始對話,也可以前往 [助手設定]({{url}}) 完善我的資訊。", - "agentDefaultMessageWithSystemRole": "你好,我是 **{{name}}**,{{systemRole}},讓我們開始對話吧!", - "agentDefaultMessageWithoutEdit": "你好,我是 **{{name}}**,讓我們開始對話吧!", + "agentDefaultMessageWithSystemRole": "你好,我是 **{{name}}**,有什麼我可以幫忙的嗎?", + "agentDefaultMessageWithoutEdit": "你好,我是 **{{name}}**,有什麼我可以幫忙的嗎?", "agents": "助手", "artifact": { "generating": "生成中", diff --git a/next.config.ts b/next.config.ts index 4d1959b9f4..f2cd596839 100644 --- a/next.config.ts +++ b/next.config.ts @@ -250,17 +250,16 @@ const nextConfig: NextConfig = { // permanent: true, // source: '/settings', // }, + { + destination: '/chat', + permanent: false, + source: '/', + }, { destination: '/chat', permanent: true, source: '/welcome', }, - // TODO: 等 V2 做强制跳转吧 - // { - // destination: '/settings/provider/volcengine', - // permanent: true, - // source: '/settings/provider/doubao', - // }, // we need back /repos url in the further { destination: '/files', diff --git a/packages/context-engine/src/tools/ToolsEngine.ts b/packages/context-engine/src/tools/ToolsEngine.ts index dfb914c1e9..50ab964b78 100644 --- a/packages/context-engine/src/tools/ToolsEngine.ts +++ b/packages/context-engine/src/tools/ToolsEngine.ts @@ -107,28 +107,33 @@ export class ToolsEngine { this.defaultToolIds.length, ); - // Filter and validate plugins + // Check if model supports Function Calling + const supportsFunctionCall = this.checkFunctionCallSupport(model, provider); + + // Filter and validate plugins with FC support information const { enabledManifests, filteredPlugins } = this.filterEnabledPlugins( allToolIds, model, provider, context, + supportsFunctionCall, ); - // Convert to UniformTool format - const tools = this.convertManifestsToTools(enabledManifests); + // Convert to UniformTool format only if there are enabled manifests + const tools = + enabledManifests.length > 0 ? this.convertManifestsToTools(enabledManifests) : undefined; log( 'Generated detailed result: enabled=%d, filtered=%d, tools=%d', enabledManifests.length, filteredPlugins.length, - tools.length, + tools?.length ?? 0, ); return { enabledToolIds: enabledManifests.map((m) => m.identifier), filteredTools: filteredPlugins, - tools: tools.length > 0 ? tools : undefined, + tools, }; } @@ -155,6 +160,7 @@ export class ToolsEngine { model: string, provider: string, context?: ToolsGenerationContext, + supportsFunctionCall?: boolean, ): { enabledManifests: LobeChatPluginManifest[]; filteredPlugins: Array<{ @@ -170,6 +176,22 @@ export class ToolsEngine { log('Filtering plugins: %o', pluginIds); + // If function calling is not supported, filter all plugins as incompatible + if (supportsFunctionCall === false) { + for (const pluginId of pluginIds) { + const manifest = this.manifestSchemas.get(pluginId); + if (!manifest) { + log('Plugin not found: %s', pluginId); + filteredPlugins.push({ id: pluginId, reason: 'not_found' }); + } else { + log('Plugin incompatible (no FC support): %s', pluginId); + filteredPlugins.push({ id: pluginId, reason: 'incompatible' }); + } + } + log('Filtering complete: enabled=%d, filtered=%d', 0, filteredPlugins.length); + return { enabledManifests, filteredPlugins }; + } + for (const pluginId of pluginIds) { const manifest = this.manifestSchemas.get(pluginId); diff --git a/packages/context-engine/src/tools/__tests__/ToolsEngine.test.ts b/packages/context-engine/src/tools/__tests__/ToolsEngine.test.ts index 3f9aee2f90..81d591e959 100644 --- a/packages/context-engine/src/tools/__tests__/ToolsEngine.test.ts +++ b/packages/context-engine/src/tools/__tests__/ToolsEngine.test.ts @@ -206,6 +206,95 @@ describe('ToolsEngine', () => { { id: 'non-existent', reason: 'not_found' }, ]); }); + + it('should filter all plugins as incompatible when function calling is not supported', () => { + const mockFunctionCallChecker = vi.fn().mockReturnValue(false); + const engine = new ToolsEngine({ + manifestSchemas: [mockWebBrowsingManifest, mockDalleManifest], + functionCallChecker: mockFunctionCallChecker, + }); + + const result = engine.generateToolsDetailed({ + toolIds: ['lobe-web-browsing', 'dalle'], + model: 'gpt-5-chat-latest', + provider: 'openai', + }); + + expect(mockFunctionCallChecker).toHaveBeenCalledWith('gpt-5-chat-latest', 'openai'); + expect(result.tools).toBeUndefined(); + expect(result.enabledToolIds).toEqual([]); + expect(result.filteredTools).toEqual([ + { id: 'lobe-web-browsing', reason: 'incompatible' }, + { id: 'dalle', reason: 'incompatible' }, + ]); + }); + + it('should combine incompatible and not_found reasons when FC is not supported', () => { + const engine = new ToolsEngine({ + manifestSchemas: [mockWebBrowsingManifest], + functionCallChecker: () => false, + }); + + const result = engine.generateToolsDetailed({ + toolIds: ['lobe-web-browsing', 'non-existent', 'dalle'], + model: 'gpt-5-chat-latest', + provider: 'openai', + }); + + expect(result.tools).toBeUndefined(); + expect(result.enabledToolIds).toEqual([]); + expect(result.filteredTools).toEqual([ + { id: 'lobe-web-browsing', reason: 'incompatible' }, + { id: 'non-existent', reason: 'not_found' }, + { id: 'dalle', reason: 'not_found' }, + ]); + }); + + it('should still call enableChecker when FC is supported', () => { + const mockEnableChecker = vi.fn().mockReturnValue(false); + const engine = new ToolsEngine({ + manifestSchemas: [mockWebBrowsingManifest, mockDalleManifest], + enableChecker: mockEnableChecker, + functionCallChecker: () => true, + }); + + const result = engine.generateToolsDetailed({ + toolIds: ['lobe-web-browsing', 'dalle'], + model: 'gpt-4', + provider: 'openai', + }); + + expect(mockEnableChecker).toHaveBeenCalledTimes(2); + expect(result.tools).toBeUndefined(); + expect(result.enabledToolIds).toEqual([]); + expect(result.filteredTools).toEqual([ + { id: 'lobe-web-browsing', reason: 'disabled' }, + { id: 'dalle', reason: 'disabled' }, + ]); + }); + + it('should not call enableChecker when FC is not supported', () => { + const mockEnableChecker = vi.fn().mockReturnValue(true); + const engine = new ToolsEngine({ + manifestSchemas: [mockWebBrowsingManifest, mockDalleManifest], + enableChecker: mockEnableChecker, + functionCallChecker: () => false, + }); + + const result = engine.generateToolsDetailed({ + toolIds: ['lobe-web-browsing', 'dalle'], + model: 'gpt-5-chat-latest', + provider: 'openai', + }); + + expect(mockEnableChecker).not.toHaveBeenCalled(); + expect(result.tools).toBeUndefined(); + expect(result.enabledToolIds).toEqual([]); + expect(result.filteredTools).toEqual([ + { id: 'lobe-web-browsing', reason: 'incompatible' }, + { id: 'dalle', reason: 'incompatible' }, + ]); + }); }); describe('plugin management', () => { diff --git a/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatList/WelcomeChatItem/index.tsx b/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatList/WelcomeChatItem/index.tsx index 7b09ec2867..2c7e77c938 100644 --- a/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatList/WelcomeChatItem/index.tsx +++ b/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatList/WelcomeChatItem/index.tsx @@ -1,17 +1 @@ -import React, { memo } from 'react'; - -import { useChatStore } from '@/store/chat'; -import { chatSelectors } from '@/store/chat/selectors'; - -import InboxWelcome from './InboxWelcome'; -import WelcomeMessage from './WelcomeMessage'; - -const WelcomeChatItem = memo(() => { - const showInboxWelcome = useChatStore(chatSelectors.showInboxWelcome); - - if (showInboxWelcome) return ; - - return ; -}); - -export default WelcomeChatItem; +export { default } from './WelcomeMessage'; diff --git a/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatMinimap/index.tsx b/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatMinimap/index.tsx index ba4dcc3eb9..c5269b6581 100644 --- a/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatMinimap/index.tsx +++ b/src/app/[variants]/(main)/chat/(workspace)/@conversation/features/ChatMinimap/index.tsx @@ -3,6 +3,7 @@ import { Icon } from '@lobehub/ui'; import { Tooltip } from 'antd'; import { createStyles, useTheme } from 'antd-style'; +import debug from 'debug'; import { ChevronDown, ChevronUp } from 'lucide-react'; import { memo, useCallback, useMemo, useState, useSyncExternalStore } from 'react'; import { useTranslation } from 'react-i18next'; @@ -17,10 +18,12 @@ import { import { useChatStore } from '@/store/chat'; import { chatSelectors } from '@/store/chat/selectors'; +const log = debug('lobe-react:chat-minimap'); + const MIN_WIDTH = 16; const MAX_WIDTH = 30; const MAX_CONTENT_LENGTH = 320; -const MIN_MESSAGES = 6; +const MIN_MESSAGES = 4; const useStyles = createStyles(({ css, token }) => ({ arrow: css` @@ -219,8 +222,8 @@ const ChatMinimap = () => { const activeIndicatorPosition = useMemo(() => { if (activeIndex === null) return null; - console.log('> activeIndex', activeIndex); - console.log('> indicatorIndexMap', indicatorIndexMap); + log('> activeIndex', activeIndex); + log('> indicatorIndexMap', indicatorIndexMap); return indicatorIndexMap.get(activeIndex) ?? null; }, [activeIndex, indicatorIndexMap]); @@ -246,7 +249,7 @@ const ChatMinimap = () => { let targetPosition: number; if (activeIndicatorPosition !== null) { - console.log('activeIndicatorPosition', activeIndicatorPosition); + log('activeIndicatorPosition', activeIndicatorPosition); // We're on an indicator, move to prev/next const delta = direction === 'prev' ? -1 : 1; targetPosition = Math.min( diff --git a/src/app/[variants]/(main)/chat/@session/features/SessionListContent/List/Item/index.tsx b/src/app/[variants]/(main)/chat/@session/features/SessionListContent/List/Item/index.tsx index edbef13a74..1156987455 100644 --- a/src/app/[variants]/(main)/chat/@session/features/SessionListContent/List/Item/index.tsx +++ b/src/app/[variants]/(main)/chat/@session/features/SessionListContent/List/Item/index.tsx @@ -31,22 +31,21 @@ const SessionItem = memo(({ id }) => { const [active] = useSessionStore((s) => [s.activeId === id]); const [loading] = useChatStore((s) => [chatSelectors.isAIGenerating(s) && id === s.activeId]); - const [pin, title, description, avatar, avatarBackground, updateAt, model, group] = - useSessionStore((s) => { - const session = sessionSelectors.getSessionById(id)(s); - const meta = session.meta; + const [pin, title, avatar, avatarBackground, updateAt, model, group] = useSessionStore((s) => { + const session = sessionSelectors.getSessionById(id)(s); + const meta = session.meta; - return [ - sessionHelpers.getSessionPinned(session), - sessionMetaSelectors.getTitle(meta), - sessionMetaSelectors.getDescription(meta), - sessionMetaSelectors.getAvatar(meta), - meta.backgroundColor, - session?.updatedAt, - session.model, - session?.group, - ]; - }); + return [ + sessionHelpers.getSessionPinned(session), + sessionMetaSelectors.getTitle(meta), + sessionMetaSelectors.getAvatar(meta), + meta.backgroundColor, + session?.updatedAt, + session.model, + session?.group, + // sessionMetaSelectors.getDescription(meta), + ]; + }); const showModel = model !== defaultModel; @@ -99,7 +98,7 @@ const SessionItem = memo(({ id }) => { avatar={avatar} avatarBackground={avatarBackground} date={updateAt?.valueOf()} - description={description} + // description={description} draggable={isDesktop} key={id} loading={loading} diff --git a/src/app/[variants]/(main)/chat/@session/features/SessionListContent/ListItem/index.tsx b/src/app/[variants]/(main)/chat/@session/features/SessionListContent/ListItem/index.tsx index f08bd17962..c29cfef51c 100644 --- a/src/app/[variants]/(main)/chat/@session/features/SessionListContent/ListItem/index.tsx +++ b/src/app/[variants]/(main)/chat/@session/features/SessionListContent/ListItem/index.tsx @@ -12,7 +12,7 @@ const useStyles = createStyles(({ css, token }) => { container: css` position: relative; margin-block: 2px; - padding-inline: 8px 16px; + padding-inline: 12px 16px; border-radius: ${token.borderRadius}px; `, mobile: css` @@ -40,7 +40,7 @@ const ListItem = memo ), [isHovering, avatar, avatarBackground], diff --git a/src/features/Conversation/Messages/Assistant/Tool/Inspector/BuiltinPluginTitle.tsx b/src/features/Conversation/Messages/Assistant/Tool/Inspector/BuiltinPluginTitle.tsx index a88b8760a5..daa3dc01a6 100644 --- a/src/features/Conversation/Messages/Assistant/Tool/Inspector/BuiltinPluginTitle.tsx +++ b/src/features/Conversation/Messages/Assistant/Tool/Inspector/BuiltinPluginTitle.tsx @@ -1,8 +1,9 @@ +import { Icon } from '@lobehub/ui'; import { createStyles } from 'antd-style'; +import { ChevronRight } from 'lucide-react'; import { ReactNode, memo } from 'react'; import { Flexbox } from 'react-layout-kit'; -import Loader from '@/components/CircleLoader'; import { useChatStore } from '@/store/chat'; import { chatSelectors } from '@/store/chat/selectors'; import { shinyTextStylish } from '@/styles/loading'; @@ -32,21 +33,18 @@ interface BuiltinPluginTitleProps { toolCallId: string; } -const BuiltinPluginTitle = memo( - ({ messageId, index, apiName, icon, title }) => { - const { styles } = useStyles(); +const BuiltinPluginTitle = memo(({ messageId, index, apiName, title }) => { + const { styles } = useStyles(); - const isLoading = useChatStore(chatSelectors.isInToolsCalling(messageId, index)); + const isLoading = useChatStore(chatSelectors.isInToolsCalling(messageId, index)); - return ( - - {isLoading ? : icon} - -
{title}
/{apiName} -
-
- ); - }, -); + return ( + +
{title}
+ + {apiName} +
+ ); +}); export default BuiltinPluginTitle; diff --git a/src/features/Conversation/Messages/Assistant/Tool/Inspector/ToolTitle.tsx b/src/features/Conversation/Messages/Assistant/Tool/Inspector/ToolTitle.tsx index 3fca7e67d7..1a1b58424b 100644 --- a/src/features/Conversation/Messages/Assistant/Tool/Inspector/ToolTitle.tsx +++ b/src/features/Conversation/Messages/Assistant/Tool/Inspector/ToolTitle.tsx @@ -1,13 +1,11 @@ import { Icon } from '@lobehub/ui'; import { createStyles } from 'antd-style'; import isEqual from 'fast-deep-equal'; -import { Globe, Laptop } from 'lucide-react'; +import { ChevronRight } from 'lucide-react'; import { memo, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { Flexbox } from 'react-layout-kit'; -import Loader from '@/components/CircleLoader'; -import PluginAvatar from '@/features/PluginAvatar'; import { useChatStore } from '@/store/chat'; import { chatSelectors } from '@/store/chat/selectors'; import { pluginHelpers, useToolStore } from '@/store/tool'; @@ -60,13 +58,13 @@ const ToolTitle = memo(({ identifier, messageId, index, apiName, () => [ { apiName: t(`search.apiName.${apiName}`, apiName), - icon: , + // icon: , id: WebBrowsingManifest.identifier, title: t('search.title'), }, { apiName: t(`localSystem.apiName.${apiName}`, apiName), - icon: , + // icon: , id: LocalSystemManifest.identifier, title: t('localSystem.title'), }, @@ -92,8 +90,8 @@ const ToolTitle = memo(({ identifier, messageId, index, apiName, return ( - {isLoading ? : } -
{pluginTitle}
/{apiName} +
{pluginTitle}
+ {apiName}
); }); diff --git a/src/features/Conversation/Messages/Assistant/Tool/Render/Arguments/index.tsx b/src/features/Conversation/Messages/Assistant/Tool/Render/Arguments/index.tsx index 65f4303844..0b457c9172 100644 --- a/src/features/Conversation/Messages/Assistant/Tool/Render/Arguments/index.tsx +++ b/src/features/Conversation/Messages/Assistant/Tool/Render/Arguments/index.tsx @@ -116,14 +116,7 @@ const Arguments = memo(({ arguments: args = '', shine, actions } )} {args.length > 100 ? ( - - {JSON.stringify(displayArgs, null, 2)} - +
{JSON.stringify(displayArgs, null, 2)}
) : ( Object.entries(displayArgs).map(([key, value]) => { return ( diff --git a/src/locales/default/chat.ts b/src/locales/default/chat.ts index 3b932474d3..439c6b9d75 100644 --- a/src/locales/default/chat.ts +++ b/src/locales/default/chat.ts @@ -4,8 +4,8 @@ export default { }, agentDefaultMessage: '你好,我是 **{{name}}**,你可以立即与我开始对话,也可以前往 [助手设置]({{url}}) 完善我的信息。', - agentDefaultMessageWithSystemRole: '你好,我是 **{{name}}**,{{systemRole}},让我们开始对话吧!', - agentDefaultMessageWithoutEdit: '你好,我是 **{{name}}**,让我们开始对话吧!', + agentDefaultMessageWithSystemRole: '你好,我是 **{{name}}**,有什么我可以帮忙的吗?', + agentDefaultMessageWithoutEdit: '你好,我是 **{{name}}**,有什么我可以帮忙的吗?', agents: '助手', artifact: { generating: '生成中',