@nocobase/plugin-ai 2.2.0-beta.13 → 2.2.0-beta.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/client-v2.d.ts +1 -0
- package/dist/ai/docs/nocobase/ai-employees/scenarios/company-background-research.md +125 -0
- package/dist/ai/docs/nocobase/building-tips/operations-dashboard.md +513 -0
- package/dist/ai/docs/nocobase/file-manager/stable-url.md +87 -0
- package/dist/ai/docs/nocobase/get-started/deployment/production.md +24 -2
- package/dist/ai/docs/nocobase/get-started/installation/docker-caddy.mdx +3 -0
- package/dist/ai/docs/nocobase/get-started/installation/docker-nginx.mdx +3 -0
- package/dist/ai/docs/nocobase/get-started/installation/docker.mdx +27 -3
- package/dist/ai/docs/nocobase/get-started/installation/env.md +33 -0
- package/dist/ai/docs/nocobase/index.md +1 -1
- package/dist/ai/docs/nocobase/interface-builder/blocks/data-blocks/comment.md +107 -0
- package/dist/ai/docs/nocobase/interface-builder/index.md +7 -6
- package/dist/ai/docs/nocobase/interface-builder/ui-layout/desktop.md +97 -0
- package/dist/ai/docs/nocobase/interface-builder/ui-layout/index.md +50 -0
- package/dist/ai/docs/nocobase/interface-builder/ui-layout/mobile.md +133 -0
- package/dist/ai/docs/nocobase/multi-app/multi-app-vs-multi-portal-vs-multi-space.md +159 -0
- package/dist/ai/docs/nocobase/multi-app/multi-portal/index.md +195 -0
- package/dist/ai/docs/nocobase/nocobase-cli/production/index.md +10 -0
- package/dist/ai/docs/nocobase/nocobase-cli/production/reverse-proxy/caddy.md +15 -2
- package/dist/ai/docs/nocobase/nocobase-cli/production/reverse-proxy/index.md +1 -1
- package/dist/ai/docs/nocobase/nocobase-cli/production/reverse-proxy/nginx.md +16 -2
- package/dist/ai/docs/nocobase/plugins/@nocobase/plugin-block-comment/index.md +14 -0
- package/dist/ai/docs/nocobase/runjs/context/ai.md +206 -0
- package/dist/ai/docs/nocobase/tutorials/index.md +20 -1
- package/dist/ai/docs/nocobase/workflow/development/api.md +259 -77
- package/dist/ai/docs/nocobase/workflow/development/index.md +2 -1
- package/dist/ai/docs/nocobase/workflow/development/migration.md +319 -0
- package/dist/ai/docs/nocobase/workflow/development/node.md +84 -51
- package/dist/ai/docs/nocobase/workflow/development/trigger.md +122 -20
- package/dist/ai/tools/formFiller.js +4 -3
- package/dist/ai/tools/subAgentWebSearch.js +20 -15
- package/dist/client/23.65ea8c37cd4b884b.js +10 -0
- package/dist/client/264.cc98933ef65608b6.js +10 -0
- package/dist/client/336.7a8a8853196ad779.js +11 -0
- package/dist/client/372.40eb52905e3f3049.js +10 -0
- package/dist/client/416.92b74ca47e4099c4.js +10 -0
- package/dist/client/446.d63c38d0309fe250.js +10 -0
- package/dist/client/525.203778500aca5d05.js +10 -0
- package/dist/client/663.680bcf6272a8504d.js +10 -0
- package/dist/client/681.399948c18d753667.js +10 -0
- package/dist/client/705.380279da896021fb.js +10 -0
- package/dist/client/ai-employees/1.x/selector/AIContextCollector.d.ts +1 -4
- package/dist/client/ai-employees/permissions/PermissionsTab.d.ts +21 -5
- package/dist/client/index.d.ts +15 -20
- package/dist/client/index.js +8 -8
- package/dist/client/workflow/nodes/employee/index.d.ts +2 -23
- package/dist/client/workflow/nodes/llm/index.d.ts +2 -52
- package/dist/client/workflow/triggers/ai-employee/index.d.ts +2 -83
- package/dist/client-v2/23.1bcb6986b40723d8.js +10 -0
- package/dist/client-v2/264.be92ff6a4d2612f1.js +10 -0
- package/dist/client-v2/336.e406470429e0670e.js +11 -0
- package/dist/client-v2/372.8cc3fde09c9bec77.js +10 -0
- package/dist/client-v2/406.341be51205c674e0.js +10 -0
- package/dist/client-v2/416.0e1c2d9cde43b83d.js +10 -0
- package/dist/client-v2/446.073d450882db29fd.js +10 -0
- package/dist/client-v2/457.d72febb89e88fc00.js +10 -0
- package/dist/client-v2/663.342341f0b2b412d8.js +10 -0
- package/dist/client-v2/681.082f4f1c7b841983.js +10 -0
- package/dist/client-v2/705.1d10027ff8cfdf79.js +10 -0
- package/dist/{client/ai-employees/admin/AvatarSelect.d.ts → client-v2/ai-employees/AIEmployeeDropdown.d.ts} +8 -9
- package/dist/client-v2/ai-employees/AIEmployeeShortcut.d.ts +9 -2
- package/dist/{client → client-v2}/ai-employees/AddContextButton.d.ts +1 -1
- package/dist/{client → client-v2}/ai-employees/ai-coding/AICodingButton.d.ts +2 -1
- package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/Actions.d.ts +2 -4
- package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/AddLLMModal.d.ts +2 -4
- package/dist/client-v2/ai-employees/chatbox/components/Attachments.d.ts +27 -0
- package/dist/{client/ai-employees/permissions/Permissions.d.ts → client-v2/ai-employees/chatbox/components/ChatBox.d.ts} +2 -2
- package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/ChatBoxLayout.d.ts +1 -1
- package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/ContextItem.d.ts +1 -1
- package/dist/{client/ai-employees/admin/Employees.d.ts → client-v2/ai-employees/chatbox/components/DebugPanel.d.ts} +1 -1
- package/dist/{client/ai-employees/chatbox/markdown/Code.d.ts → client-v2/ai-employees/chatbox/components/Markdown.d.ts} +12 -5
- package/dist/{client/ai-employees/admin/ProfileSettings.d.ts → client-v2/ai-employees/chatbox/components/MessageContent.d.ts} +3 -2
- package/dist/client-v2/ai-employees/chatbox/components/MessageRenderers.d.ts +39 -0
- package/dist/{client/ai-employees/chatbox/generative-ui → client-v2/ai-employees/chatbox/components}/ToolCard.d.ts +7 -5
- package/dist/{client/ai-employees/admin/datasource/components/basic → client-v2/ai-employees/chatbox/components}/index.d.ts +5 -2
- package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useChat.d.ts +21 -22
- package/dist/client-v2/ai-employees/chatbox/hooks/useChatBoxActions.d.ts +3 -2
- package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useChatConversationActions.d.ts +2 -2
- package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useChatMessageActions.d.ts +8 -4
- package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useToolCallActions.d.ts +1 -1
- package/dist/client-v2/ai-employees/chatbox/hooks/useUploadFiles.d.ts +46 -0
- package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useWorkflowTasks.d.ts +1 -1
- package/dist/{client → client-v2}/ai-employees/chatbox/model.d.ts +9 -2
- package/dist/client-v2/ai-employees/chatbox/roles.d.ts +162 -0
- package/dist/client-v2/ai-employees/chatbox/stores/chat-box.d.ts +1 -49
- package/dist/client-v2/ai-employees/chatbox/stores/chat-conversations.d.ts +2 -19
- package/dist/client-v2/ai-employees/chatbox/stores/chat-messages.d.ts +1 -46
- package/dist/{client → client-v2}/ai-employees/chatbox/stores/chat-tool-call.d.ts +1 -15
- package/dist/client-v2/ai-employees/chatbox/stores/chat-tools.d.ts +30 -0
- package/dist/client-v2/ai-employees/chatbox/stores/create-selectors.d.ts +31 -3
- package/dist/{client/ai-employees/chatbox/conversations/common.d.ts → client-v2/ai-employees/chatbox/stores/workflow-tasks.d.ts} +21 -4
- package/dist/client-v2/ai-employees/chatbox/utils/normalizeTriggerTaskOptions.d.ts +19 -0
- package/dist/{client → client-v2}/ai-employees/chatbox/utils.d.ts +26 -6
- package/dist/{client/ai-employees/data-visualization/context.d.ts → client-v2/ai-employees/context/chart-config.d.ts} +1 -1
- package/dist/{client → client-v2}/ai-employees/context/code-editor.d.ts +1 -1
- package/dist/{client → client-v2}/ai-employees/context/datasource.d.ts +1 -1
- package/dist/{client → client-v2}/ai-employees/context/flow-models.d.ts +1 -1
- package/dist/{client/ai-employees/admin/datasource/components/DatasourceSettingDetail.d.ts → client-v2/ai-employees/data-modeling/setup.d.ts} +6 -5
- package/dist/{client → client-v2}/ai-employees/datasource/DatasourceSelector.d.ts +6 -2
- package/dist/{client/ai-employees/admin/datasource/flow-models/DatasourceSettingModel.d.ts → client-v2/ai-employees/flow/index.d.ts} +4 -6
- package/dist/{client → client-v2}/ai-employees/form-filler/tools/index.d.ts +1 -1
- package/dist/{client → client-v2}/ai-employees/stores/ai-selection.d.ts +4 -4
- package/dist/{client → client-v2}/ai-employees/stores/dialog-controller.d.ts +4 -4
- package/dist/{client/ai-employees/business-report/ui → client-v2/ai-employees/tools}/BusinessReportCard.d.ts +2 -2
- package/dist/{client/ai-employees/business-report/ui → client-v2/ai-employees/tools}/BusinessReportModal.d.ts +2 -2
- package/dist/{client/ai-employees/1.x/selector/withAISelectable.d.ts → client-v2/ai-employees/tools/ChartGeneratorCard.d.ts} +5 -4
- package/dist/{client/ai-employees/ai-coding/ui → client-v2/ai-employees/tools}/CodeToolCard.d.ts +1 -1
- package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools}/DataModelingCard.d.ts +3 -5
- package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools}/DataModelingModal.d.ts +4 -6
- package/dist/{client/ai-employees/sub-agents/ui → client-v2/ai-employees/tools}/SubAgentDispatchCard.d.ts +4 -9
- package/dist/{client/ai-employees/AISettingsProvider.d.ts → client-v2/ai-employees/tools/SuggestionsOptionsCard.d.ts} +6 -8
- package/dist/{client/ai-employees/workflow-tasks/ui → client-v2/ai-employees/tools}/WorkflowTaskOutputCard.d.ts +7 -2
- package/dist/{client/ai-employees/ai-coding/tools/context-tools.d.ts → client-v2/ai-employees/tools/ai-coding.d.ts} +3 -1
- package/dist/client-v2/ai-employees/tools/business-report-utils.d.ts +45 -0
- package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools/data-modeling}/CollectionNode.d.ts +2 -3
- package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools/data-modeling}/Diagram.d.ts +1 -1
- package/dist/{client/ai-employees/data-modeling/ui → client-v2/ai-employees/tools/data-modeling}/Table.d.ts +2 -2
- package/dist/client-v2/ai-employees/tools/data-modeling/legacy-template.d.ts +13 -0
- package/dist/client-v2/ai-employees/tools/data-modeling/runtime.d.ts +15 -0
- package/dist/{client/ai-employees → client-v2/ai-employees/tools}/data-modeling/types.d.ts +27 -4
- package/dist/client-v2/ai-employees/tools/data-modeling/useFieldInterfaceOptions.d.ts +151 -0
- package/dist/{client/ai-employees/data-visualization/tools/index.d.ts → client-v2/ai-employees/tools/data-visualization.d.ts} +1 -1
- package/dist/client-v2/ai-employees/tools/index.d.ts +32 -0
- package/dist/client-v2/ai-employees/types.d.ts +101 -7
- package/dist/client-v2/components/RemoteSelect.d.ts +43 -0
- package/dist/{client → client-v2}/debug-logger.d.ts +2 -2
- package/dist/client-v2/f0053e745af0ad03.svg +50 -0
- package/dist/client-v2/index.d.ts +9 -8
- package/dist/client-v2/index.js +37 -1
- package/dist/client-v2/llm-providers/forms.d.ts +44 -0
- package/dist/client-v2/llm-providers/index.d.ts +24 -0
- package/dist/{client/ai-employees/ai-coding/tools/index.d.ts → client-v2/llm-services/utils.d.ts} +5 -3
- package/dist/client-v2/locale.d.ts +14 -0
- package/dist/client-v2/manager/ai-manager.d.ts +55 -0
- package/dist/client-v2/models/ai-employees/AIEmployeeActionModel.d.ts +33 -0
- package/dist/client-v2/models/ai-employees/AIEmployeeShortcutModel.d.ts +44 -0
- package/dist/client-v2/pages/AdminSettingsPage.d.ts +24 -0
- package/dist/client-v2/pages/DatasourceSettingsPage.d.ts +62 -0
- package/dist/client-v2/pages/EmployeesPage.d.ts +62 -0
- package/dist/client-v2/pages/LLMServicesPage.d.ts +75 -0
- package/dist/client-v2/pages/MCPSettingsPage.d.ts +73 -0
- package/dist/client-v2/pages/drawerWidth.d.ts +10 -0
- package/dist/client-v2/pages/permissions/Permissions.d.ts +67 -0
- package/dist/client-v2/pages/permissions/PermissionsTab.d.ts +12 -0
- package/dist/client-v2/pages/useUnsavedChangesBeforeClose.d.ts +29 -0
- package/dist/client-v2/plugin.d.ts +33 -0
- package/dist/client-v2/repositories/AIConfigRepository.d.ts +3 -23
- package/dist/client-v2/runjs/registerAIEmployeeRunJSFacade.d.ts +20 -0
- package/dist/client-v2/workflow/components/FormValueRegistry.d.ts +12 -0
- package/dist/{client/components/ListCollapse.d.ts → client-v2/workflow/components/WorkflowListCollapse.d.ts} +4 -4
- package/dist/client-v2/workflow/constants.d.ts +26 -0
- package/dist/client-v2/workflow/nodes/employee/components/AIEmployeeFieldset.d.ts +11 -0
- package/dist/{client/ai-employees/common/CodeHighlight.d.ts → client-v2/workflow/nodes/employee/components/AIEmployeeSelect.d.ts} +5 -6
- package/dist/{client/ai-employees/ContextAwareTooltip.d.ts → client-v2/workflow/nodes/employee/components/Assignees.d.ts} +2 -1
- package/dist/client-v2/workflow/nodes/employee/components/FeedbackSettings.d.ts +17 -0
- package/dist/client-v2/workflow/nodes/employee/components/FileInputs.d.ts +11 -0
- package/dist/{client/ai-employees/AIEmployeesProvider.d.ts → client-v2/workflow/nodes/employee/components/MessageInputs.d.ts} +2 -3
- package/dist/client-v2/workflow/nodes/employee/components/ModelOptions.d.ts +17 -0
- package/dist/{client/ai-employees/admin/datasource/components/basic/CollectionCascader.d.ts → client-v2/workflow/nodes/employee/components/SkillSettings.d.ts} +6 -3
- package/dist/client-v2/workflow/nodes/employee/components/StructuredOutput.d.ts +11 -0
- package/dist/client-v2/workflow/nodes/employee/components/UserInput.d.ts +18 -0
- package/dist/client-v2/workflow/nodes/employee/components/WebSearchOptions.d.ts +16 -0
- package/dist/client-v2/workflow/nodes/employee/index.d.ts +23 -0
- package/dist/{client/ai-employees/AIEmployeeListItem.d.ts → client-v2/workflow/nodes/llm/components/LLMFieldset.d.ts} +3 -5
- package/dist/{client/admin-settings/AdminSettings.d.ts → client-v2/workflow/nodes/llm/components/Messages.d.ts} +2 -1
- package/dist/client-v2/workflow/nodes/llm/components/StructuredOutput.d.ts +11 -0
- package/dist/client-v2/workflow/nodes/llm/index.d.ts +30 -0
- package/dist/{client/ai-employees/1.x/selector/BlockSelector.d.ts → client-v2/workflow/register.d.ts} +2 -6
- package/dist/client-v2/workflow/triggers/ai-employee/AIEmployeeTriggerConfig.d.ts +11 -0
- package/dist/client-v2/workflow/triggers/ai-employee/Parameters.d.ts +11 -0
- package/dist/client-v2/workflow/triggers/ai-employee/index.d.ts +25 -0
- package/dist/client-v2/workflow/types.d.ts +128 -0
- package/dist/externalVersion.js +20 -25
- package/dist/locale/en-US.json +45 -1
- package/dist/locale/zh-CN.json +45 -1
- package/dist/node_modules/@langchain/mistralai/package.json +1 -1
- package/dist/node_modules/@langchain/xai/package.json +1 -1
- package/dist/node_modules/fs-extra/package.json +1 -1
- package/dist/node_modules/jsonrepair/package.json +1 -1
- package/dist/node_modules/just-bash/package.json +1 -1
- package/dist/node_modules/nodejs-snowflake/package.json +1 -1
- package/dist/node_modules/openai/package.json +1 -1
- package/dist/node_modules/zod/package.json +1 -1
- package/dist/server/ai-employees/ai-employee.d.ts +1 -0
- package/dist/server/ai-employees/ai-employee.js +37 -2
- package/dist/server/ai-employees/prompts.d.ts +2 -1
- package/dist/server/ai-employees/prompts.js +8 -2
- package/dist/server/ai-employees/tool-call-sanitizer.d.ts +1 -0
- package/dist/server/ai-employees/tool-call-sanitizer.js +2 -1
- package/dist/server/ai-employees/utils.js +11 -5
- package/dist/server/attachments.d.ts +24 -0
- package/dist/server/attachments.js +204 -0
- package/dist/server/document-loader/cached.d.ts +1 -0
- package/dist/server/document-loader/cached.js +18 -9
- package/dist/server/document-loader/loader.d.ts +0 -1
- package/dist/server/document-loader/loader.js +25 -8
- package/dist/server/document-loader/types.d.ts +7 -0
- package/dist/server/llm-providers/anthropic.d.ts +2 -1
- package/dist/server/llm-providers/anthropic.js +1 -3
- package/dist/server/llm-providers/dashscope.d.ts +2 -1
- package/dist/server/llm-providers/dashscope.js +16 -1
- package/dist/server/llm-providers/deepseek.d.ts +2 -1
- package/dist/server/llm-providers/deepseek.js +33 -2
- package/dist/server/llm-providers/google-genai.d.ts +1 -1
- package/dist/server/llm-providers/google-genai.js +1 -5
- package/dist/server/llm-providers/kimi/provider.d.ts +2 -1
- package/dist/server/llm-providers/kimi/provider.js +22 -2
- package/dist/server/llm-providers/mistral.d.ts +36 -2
- package/dist/server/llm-providers/mistral.js +62 -2
- package/dist/server/llm-providers/openai/completions.d.ts +2 -1
- package/dist/server/llm-providers/openai/completions.js +17 -1
- package/dist/server/llm-providers/openai/responses.d.ts +2 -1
- package/dist/server/llm-providers/openai/responses.js +17 -1
- package/dist/server/llm-providers/provider.d.ts +10 -2
- package/dist/server/llm-providers/provider.js +33 -4
- package/dist/server/manager/ai-context-datasource-manager.js +34 -7
- package/dist/server/manager/ai-manager.d.ts +2 -1
- package/dist/server/manager/ai-manager.js +4 -1
- package/dist/server/plugin.js +14 -0
- package/dist/server/resource/aiConversations.js +44 -1
- package/dist/server/utils.d.ts +5 -2
- package/dist/server/utils.js +11 -19
- package/dist/server/workflow/nodes/employee/files.d.ts +3 -1
- package/dist/server/workflow/nodes/employee/files.js +31 -5
- package/package.json +5 -5
- package/dist/client/119.c6bf8c6433167d81.js +0 -10
- package/dist/client/170.d98eacdc00d9d527.js +0 -10
- package/dist/client/228.b4b709f93b86b6b9.js +0 -10
- package/dist/client/280.003b9e9788599244.js +0 -10
- package/dist/client/290.0f7f441d8a94f03c.js +0 -10
- package/dist/client/331.d547c95410476a69.js +0 -10
- package/dist/client/406.15c09d98faa2ccf1.js +0 -10
- package/dist/client/428.5eb4f53ddbb6a3b8.js +0 -10
- package/dist/client/462.d172d0fe91519e35.js +0 -10
- package/dist/client/486.dcac8f3fcec19c33.js +0 -10
- package/dist/client/502.2b4a51e0a8122e52.js +0 -10
- package/dist/client/525.33a9c8ec28be4ec4.js +0 -10
- package/dist/client/559.959c46d0056ccdc8.js +0 -10
- package/dist/client/561.7ec804ef39ec7dcd.js +0 -10
- package/dist/client/580.35ba54ff91b7fe6d.js +0 -10
- package/dist/client/597.b0d64948d74cf6cb.js +0 -10
- package/dist/client/604.89c674f35b52b4ef.js +0 -10
- package/dist/client/614.aa766080f6b99aab.js +0 -10
- package/dist/client/646.2e395a514c511084.js +0 -10
- package/dist/client/687.224e569a99cae4bb.js +0 -10
- package/dist/client/699.57c0a1acb723202a.js +0 -10
- package/dist/client/711.92cd94681fde7e05.js +0 -10
- package/dist/client/758.a9741e81911e53c3.js +0 -10
- package/dist/client/768.5177bff46ae71a5b.js +0 -10
- package/dist/client/792.abb57765453bcbcc.js +0 -10
- package/dist/client/820.f72ef2462b61d812.js +0 -10
- package/dist/client/832.0cf69e3f43c320b2.js +0 -10
- package/dist/client/927.d95c74ebb8fd51c9.js +0 -10
- package/dist/client/ai-employees/1.x/selector/AISelectorProvider.d.ts +0 -33
- package/dist/client/ai-employees/ProfileCard.d.ts +0 -15
- package/dist/client/ai-employees/admin/ChatSettings.d.ts +0 -10
- package/dist/client/ai-employees/admin/DataSourceSettings.d.ts +0 -10
- package/dist/client/ai-employees/admin/EnableSwitch.d.ts +0 -10
- package/dist/client/ai-employees/admin/InputsFormSettings.d.ts +0 -10
- package/dist/client/ai-employees/admin/KnowledgeBaseSettings.d.ts +0 -10
- package/dist/client/ai-employees/admin/ModelSettings.d.ts +0 -10
- package/dist/client/ai-employees/admin/SkillSettings.d.ts +0 -19
- package/dist/client/ai-employees/admin/SystemPrompt.d.ts +0 -10
- package/dist/client/ai-employees/admin/Templates.d.ts +0 -10
- package/dist/client/ai-employees/admin/ToolsSettings.d.ts +0 -17
- package/dist/client/ai-employees/admin/datasource/components/DatasourceSettingForm.d.ts +0 -10
- package/dist/client/ai-employees/admin/datasource/components/DatasourceSettingGrid.d.ts +0 -10
- package/dist/client/ai-employees/admin/datasource/components/basic/FieldsTransfer.d.ts +0 -17
- package/dist/client/ai-employees/admin/datasource/components/form-steps/CollectionSetting.d.ts +0 -17
- package/dist/client/ai-employees/admin/datasource/components/form-steps/FieldsSetting.d.ts +0 -15
- package/dist/client/ai-employees/admin/datasource/components/form-steps/FilterSetting.d.ts +0 -17
- package/dist/client/ai-employees/admin/datasource/components/form-steps/Preview.d.ts +0 -13
- package/dist/client/ai-employees/admin/datasource/components/form-steps/SortSetting.d.ts +0 -15
- package/dist/client/ai-employees/admin/datasource/components/form-steps/index.d.ts +0 -13
- package/dist/client/ai-employees/admin/datasource/components/index.d.ts +0 -9
- package/dist/client/ai-employees/admin/datasource/context.d.ts +0 -17
- package/dist/client/ai-employees/admin/datasource/flow-models/index.d.ts +0 -9
- package/dist/client/ai-employees/admin/datasource/index.d.ts +0 -10
- package/dist/client/ai-employees/admin/hooks.d.ts +0 -39
- package/dist/client/ai-employees/admin/mcp/MCPSettings.d.ts +0 -10
- package/dist/client/ai-employees/admin/mcp/MCPToolsList.d.ts +0 -19
- package/dist/client/ai-employees/admin/mcp/context.d.ts +0 -15
- package/dist/client/ai-employees/admin/mcp/schemas.d.ts +0 -1314
- package/dist/client/ai-employees/ai-coding/CodeHistory.d.ts +0 -10
- package/dist/client/ai-employees/ai-coding/markdown/Code.d.ts +0 -16
- package/dist/client/ai-employees/avatars.d.ts +0 -9
- package/dist/client/ai-employees/built-in/utils.d.ts +0 -15
- package/dist/client/ai-employees/business-report/tools/index.d.ts +0 -10
- package/dist/client/ai-employees/business-report/ui/report-utils.d.ts +0 -38
- package/dist/client/ai-employees/chart-generator/tools/index.d.ts +0 -10
- package/dist/client/ai-employees/chart-generator/ui/ECharts.d.ts +0 -13
- package/dist/client/ai-employees/chatbox/AIThinking.d.ts +0 -12
- package/dist/client/ai-employees/chatbox/Attachment.d.ts +0 -14
- package/dist/client/ai-employees/chatbox/AttachmentsHeader.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/ChatBox.d.ts +0 -12
- package/dist/client/ai-employees/chatbox/ContextItemsHeader.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/DebugPanel.d.ts +0 -16
- package/dist/client/ai-employees/chatbox/EditMessageHeader.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/HintMessageHeader.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/MessageRenderer.d.ts +0 -33
- package/dist/client/ai-employees/chatbox/SenderFooter.d.ts +0 -13
- package/dist/client/ai-employees/chatbox/SenderHeader.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/SenderPrefix.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/Upload.d.ts +0 -12
- package/dist/client/ai-employees/chatbox/VirtualList.d.ts +0 -28
- package/dist/client/ai-employees/chatbox/conversations/ConversationsList.d.ts +0 -13
- package/dist/client/ai-employees/chatbox/conversations/WorkflowTasksList.d.ts +0 -13
- package/dist/client/ai-employees/chatbox/conversations/index.d.ts +0 -9
- package/dist/client/ai-employees/chatbox/generative-ui/DefaultToolCard.d.ts +0 -16
- package/dist/client/ai-employees/chatbox/hooks/useChatBoxActions.d.ts +0 -18
- package/dist/client/ai-employees/chatbox/hooks/useUploadFiles.d.ts +0 -12
- package/dist/client/ai-employees/chatbox/markdown/ECharts.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/markdown/Form.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/markdown/Generating.d.ts +0 -10
- package/dist/client/ai-employees/chatbox/markdown/Markdown.d.ts +0 -13
- package/dist/client/ai-employees/chatbox/roles.d.ts +0 -32
- package/dist/client/ai-employees/chatbox/stores/chat-box.d.ts +0 -9
- package/dist/client/ai-employees/chatbox/stores/chat-conversations.d.ts +0 -9
- package/dist/client/ai-employees/chatbox/stores/chat-messages.d.ts +0 -9
- package/dist/client/ai-employees/chatbox/stores/chat-tools.d.ts +0 -51
- package/dist/client/ai-employees/chatbox/stores/create-selectors.d.ts +0 -18
- package/dist/client/ai-employees/chatbox/stores/workflow-tasks.d.ts +0 -45
- package/dist/client/ai-employees/context/classic-pages.d.ts +0 -10
- package/dist/client/ai-employees/data-modeling/Table.d.ts +0 -12
- package/dist/client/ai-employees/data-modeling/setup.d.ts +0 -10
- package/dist/client/ai-employees/data-modeling/tools/index.d.ts +0 -10
- package/dist/client/ai-employees/data-modeling/ui/useFieldInterfaceOptions.d.ts +0 -14
- package/dist/client/ai-employees/datasource/DatasourceList.d.ts +0 -17
- package/dist/client/ai-employees/datasource/index.d.ts +0 -9
- package/dist/client/ai-employees/flow/events/index.d.ts +0 -9
- package/dist/client/ai-employees/flow/index.d.ts +0 -36
- package/dist/client/ai-employees/flow/models/AIEmployeeActionModel.d.ts +0 -18
- package/dist/client/ai-employees/flow/models/AIEmployeeShortcutModel.d.ts +0 -30
- package/dist/client/ai-employees/shortcuts/ShortcutList.d.ts +0 -10
- package/dist/client/ai-employees/shortcuts/useShortcuts.d.ts +0 -13
- package/dist/client/ai-employees/stores/context-aware.d.ts +0 -19
- package/dist/client/ai-employees/sub-agents/tools/index.d.ts +0 -10
- package/dist/client/ai-employees/suggestions/tools/index.d.ts +0 -10
- package/dist/client/ai-employees/suggestions/ui/SuggestionsOptions.d.ts +0 -13
- package/dist/client/ai-employees/types.d.ts +0 -259
- package/dist/client/ai-employees/workflow-tasks/tools/index.d.ts +0 -10
- package/dist/client/chat-settings/Messages.d.ts +0 -11
- package/dist/client/chat-settings/StructuredOutput.d.ts +0 -11
- package/dist/client/components/skill-settings.d.ts +0 -22
- package/dist/client/features/components.d.ts +0 -9
- package/dist/client/features/feature-manager.d.ts +0 -9
- package/dist/client/features/index.d.ts +0 -9
- package/dist/client/features/vector-database-provider.d.ts +0 -9
- package/dist/client/features/vector-store-provider.d.ts +0 -9
- package/dist/client/llm-providers/anthropic/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/anthropic/ProviderSettings.d.ts +0 -10
- package/dist/client/llm-providers/anthropic/index.d.ts +0 -10
- package/dist/client/llm-providers/components/Chat.d.ts +0 -10
- package/dist/client/llm-providers/components/ModelSelect.d.ts +0 -10
- package/dist/client/llm-providers/dashscope/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/dashscope/ProviderSettings.d.ts +0 -10
- package/dist/client/llm-providers/dashscope/index.d.ts +0 -10
- package/dist/client/llm-providers/deepseek/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/deepseek/index.d.ts +0 -10
- package/dist/client/llm-providers/google-genai/MessageRenderer.d.ts +0 -13
- package/dist/client/llm-providers/google-genai/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/google-genai/ProviderSettings.d.ts +0 -10
- package/dist/client/llm-providers/google-genai/index.d.ts +0 -10
- package/dist/client/llm-providers/kimi/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/kimi/index.d.ts +0 -10
- package/dist/client/llm-providers/mimo/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/mimo/index.d.ts +0 -10
- package/dist/client/llm-providers/mistral/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/mistral/index.d.ts +0 -10
- package/dist/client/llm-providers/ollama/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/ollama/ProviderSettings.d.ts +0 -10
- package/dist/client/llm-providers/ollama/index.d.ts +0 -10
- package/dist/client/llm-providers/openai/completions/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/openai/completions/index.d.ts +0 -10
- package/dist/client/llm-providers/openai/components/ProviderSettings.d.ts +0 -10
- package/dist/client/llm-providers/openai/responses/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/openai/responses/index.d.ts +0 -10
- package/dist/client/llm-providers/orcarouter/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/orcarouter/ProviderSettings.d.ts +0 -10
- package/dist/client/llm-providers/orcarouter/index.d.ts +0 -10
- package/dist/client/llm-providers/tongyi/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/tongyi/ProviderSettings.d.ts +0 -10
- package/dist/client/llm-providers/tongyi/index.d.ts +0 -10
- package/dist/client/llm-providers/xai/ModelSettings.d.ts +0 -10
- package/dist/client/llm-providers/xai/index.d.ts +0 -10
- package/dist/client/llm-services/LLMServices.d.ts +0 -13
- package/dist/client/llm-services/component/DefaultModelSelect.d.ts +0 -10
- package/dist/client/llm-services/component/EnabledModelsSelect.d.ts +0 -23
- package/dist/client/llm-services/component/LLMTestFlight.d.ts +0 -10
- package/dist/client/llm-services/component/ModelOptionsSettings.d.ts +0 -10
- package/dist/client/llm-services/component/UnifiedModelSettings.d.ts +0 -10
- package/dist/client/llm-services/hooks/useLLMServiceCatalog.d.ts +0 -18
- package/dist/client/llm-services/llm-providers.d.ts +0 -27
- package/dist/client/llm-services/utils.d.ts +0 -35
- package/dist/client/manager/ai-feature-manager.d.ts +0 -9
- package/dist/client/manager/ai-manager.d.ts +0 -35
- package/dist/client/repositories/AIConfigRepository.d.ts +0 -60
- package/dist/client/repositories/hooks/useAIConfigRepository.d.ts +0 -10
- package/dist/client/schemas/llms.d.ts +0 -347
- package/dist/client/workflow/nodes/employee/components/AIEmployeeSelect.d.ts +0 -10
- package/dist/client/workflow/nodes/employee/components/assigness.d.ts +0 -11
- package/dist/client/workflow/nodes/employee/components/file-inputs.d.ts +0 -10
- package/dist/client/workflow/nodes/employee/components/message-inputs.d.ts +0 -12
- package/dist/client/workflow/nodes/employee/components/model-options.d.ts +0 -10
- package/dist/client/workflow/nodes/employee/components/structured-output.d.ts +0 -10
- package/dist/client/workflow/nodes/employee/components/users-select.d.ts +0 -15
- package/dist/client/workflow/nodes/employee/components/web-search-options.d.ts +0 -10
- package/dist/client/workflow/nodes/employee/configuration.d.ts +0 -12
- package/dist/client/workflow/nodes/employee/flow-models/feedback.d.ts +0 -14
- package/dist/client/workflow/nodes/employee/flow-models/task.d.ts +0 -13
- package/dist/client/workflow/nodes/llm/ModelSettings.d.ts +0 -11
- package/dist/client/workflow/triggers/ai-employee/Parameters.d.ts +0 -13
- /package/dist/{client → client-v2}/ai-employees/AISelection.d.ts +0 -0
- /package/dist/{client → client-v2}/ai-employees/AISelectionControl.d.ts +0 -0
- /package/dist/{client → client-v2}/ai-employees/ai-coding/prompts.d.ts +0 -0
- /package/dist/{client → client-v2}/ai-employees/ai-coding/setup.d.ts +0 -0
- /package/dist/{client/ai-employees/chatbox/AIEmployeeSwitch.d.ts → client-v2/ai-employees/chatbox/components/AIEmployeeSwitcher.d.ts} +0 -0
- /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/ChatButton.d.ts +0 -0
- /package/dist/{client/ai-employees/chatbox/conversations → client-v2/ai-employees/chatbox/components}/Conversations.d.ts +0 -0
- /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/Messages.d.ts +0 -0
- /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/ModelSwitcher.d.ts +0 -0
- /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/SearchSwitch.d.ts +0 -0
- /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/Sender.d.ts +0 -0
- /package/dist/{client/ai-employees/chatbox/generative-ui → client-v2/ai-employees/chatbox/components}/ToolModal.d.ts +0 -0
- /package/dist/{client/ai-employees/chatbox → client-v2/ai-employees/chatbox/components}/UserPrompt.d.ts +0 -0
- /package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useChatBoxEffect.d.ts +0 -0
- /package/dist/{client → client-v2}/ai-employees/chatbox/hooks/useLoadMoreObserver.d.ts +0 -0
- /package/dist/client-v2/ai-employees/{chatbox/stores → stores}/global-store.d.ts +0 -0
- /package/dist/{client/ai-employees/flow/models → client-v2/models/ai-employees}/AIEmployeeShortcutListModel.d.ts +0 -0
- /package/dist/{client/ai-employees/flow/models → client-v2/models/ai-employees}/index.d.ts +0 -0
- /package/dist/{client/ai-employees/flow/events/ai-context-selection.d.ts → client-v2/workflow/components/index.d.ts} +0 -0
|
@@ -46,6 +46,7 @@ var import_ai_manager = require("../../manager/ai-manager");
|
|
|
46
46
|
var import_document_loader = require("../../document-loader");
|
|
47
47
|
var import_document_loader2 = require("./document-loader");
|
|
48
48
|
var import_reasoning = require("../common/reasoning");
|
|
49
|
+
const KIMI_THINKING_SWITCH_MODELS = /* @__PURE__ */ new Set(["kimi-k2.5", "kimi-k2.6"]);
|
|
49
50
|
class KimiProvider extends import_provider.LLMProvider {
|
|
50
51
|
_documentLoader;
|
|
51
52
|
get baseURL() {
|
|
@@ -55,6 +56,7 @@ class KimiProvider extends import_provider.LLMProvider {
|
|
|
55
56
|
const { apiKey } = this.serviceOptions || {};
|
|
56
57
|
const { responseFormat, structuredOutput } = this.modelOptions || {};
|
|
57
58
|
const { name, schema } = structuredOutput || {};
|
|
59
|
+
const reasoningOptions = this.resolveReasoningOptions(this.modelReasoningOptions);
|
|
58
60
|
const responseFormatOptions = {
|
|
59
61
|
type: responseFormat ?? "text"
|
|
60
62
|
};
|
|
@@ -65,8 +67,10 @@ class KimiProvider extends import_provider.LLMProvider {
|
|
|
65
67
|
apiKey,
|
|
66
68
|
...this.modelOptions,
|
|
67
69
|
modelKwargs: {
|
|
68
|
-
response_format: responseFormatOptions
|
|
70
|
+
response_format: responseFormatOptions,
|
|
71
|
+
...reasoningOptions.modelKwargs || {}
|
|
69
72
|
},
|
|
73
|
+
...reasoningOptions.modelRequestParams || {},
|
|
70
74
|
configuration: {
|
|
71
75
|
baseURL: this.getResolvedBaseURL()
|
|
72
76
|
}
|
|
@@ -100,6 +104,22 @@ class KimiProvider extends import_provider.LLMProvider {
|
|
|
100
104
|
}
|
|
101
105
|
return null;
|
|
102
106
|
}
|
|
107
|
+
resolveReasoningOptions(reasoning) {
|
|
108
|
+
var _a;
|
|
109
|
+
if (!reasoning || reasoning.mode === "default") {
|
|
110
|
+
return {};
|
|
111
|
+
}
|
|
112
|
+
if (!KIMI_THINKING_SWITCH_MODELS.has((_a = this.modelOptions) == null ? void 0 : _a.model)) {
|
|
113
|
+
return {};
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
modelKwargs: {
|
|
117
|
+
thinking: {
|
|
118
|
+
type: reasoning.mode === "off" ? "disabled" : "enabled"
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
}
|
|
103
123
|
isApiSupportedAttachment(attachment) {
|
|
104
124
|
var _a;
|
|
105
125
|
return ((_a = attachment.mimetype) == null ? void 0 : _a.startsWith("image/")) ?? false;
|
|
@@ -126,7 +146,7 @@ const kimiProviderOptions = {
|
|
|
126
146
|
title: "Kimi",
|
|
127
147
|
supportedModel: [import_ai_manager.SupportedModel.LLM],
|
|
128
148
|
models: {
|
|
129
|
-
[import_ai_manager.SupportedModel.LLM]: ["kimi-k2.
|
|
149
|
+
[import_ai_manager.SupportedModel.LLM]: ["kimi-k2.7-code", "kimi-k2.7-code-highspeed", "kimi-k2.6", "kimi-k2.5"]
|
|
130
150
|
},
|
|
131
151
|
provider: KimiProvider
|
|
132
152
|
};
|
|
@@ -10,21 +10,55 @@ import { EmbeddingsInterface } from '@langchain/core/embeddings';
|
|
|
10
10
|
import { AIMessage, AIMessageChunk } from '@langchain/core/messages';
|
|
11
11
|
import { ChatMistralAI } from '@langchain/mistralai';
|
|
12
12
|
import { AttachmentModel } from '@nocobase/plugin-file-manager';
|
|
13
|
-
import { EmbeddingProvider, LLMProvider, LLMProviderInvokeOptions } from './provider';
|
|
13
|
+
import { EmbeddingProvider, LLMProvider, LLMProviderInvokeOptions, ReasoningMode, ReasoningOptions, ResolvedReasoningOptions } from './provider';
|
|
14
14
|
import { LLMProviderMeta } from '../manager/ai-manager';
|
|
15
15
|
import { AIChatContext, AIMessageInput } from '../types/ai-chat-conversation.type';
|
|
16
16
|
import { Model } from '@nocobase/database';
|
|
17
|
+
declare const MISTRAL_REASONING_MODE_KEY = "__nb_reasoning_mode";
|
|
17
18
|
type MistralCallOptions = LLMProviderInvokeOptions & {
|
|
18
19
|
response_format?: {
|
|
19
20
|
type: 'text' | 'json_object';
|
|
20
21
|
};
|
|
21
22
|
};
|
|
22
23
|
type MistralBeforeRequestHook = (request: Request) => Request | void | Promise<Request | void>;
|
|
24
|
+
type ReasoningChatMistralAIFields = ConstructorParameters<typeof ChatMistralAI>[0] & {
|
|
25
|
+
[MISTRAL_REASONING_MODE_KEY]?: ReasoningMode;
|
|
26
|
+
};
|
|
23
27
|
export declare const injectMistralReasoningEffort: MistralBeforeRequestHook;
|
|
28
|
+
declare class ReasoningChatMistralAI extends ChatMistralAI {
|
|
29
|
+
private readonly reasoningMode?;
|
|
30
|
+
constructor(fields: ReasoningChatMistralAIFields);
|
|
31
|
+
invocationParams(options?: MistralCallOptions): Omit<import("@mistralai/mistralai/models/components/chatcompletionrequest").ChatCompletionRequest | import("@mistralai/mistralai/models/components/chatcompletionstreamrequest").ChatCompletionStreamRequest, "messages"> | {
|
|
32
|
+
__nb_reasoning_mode: "off" | "minimal" | "low" | "medium" | "high" | "xhigh";
|
|
33
|
+
model: string;
|
|
34
|
+
tools?: import("@mistralai/mistralai/models/components/tool").Tool[];
|
|
35
|
+
metadata?: {
|
|
36
|
+
[k: string]: any;
|
|
37
|
+
} | {
|
|
38
|
+
[k: string]: any;
|
|
39
|
+
};
|
|
40
|
+
stream?: boolean;
|
|
41
|
+
responseFormat?: import("@mistralai/mistralai/models/components/responseformat").ResponseFormat;
|
|
42
|
+
temperature?: number;
|
|
43
|
+
maxTokens?: number;
|
|
44
|
+
topP?: number;
|
|
45
|
+
frequencyPenalty?: number;
|
|
46
|
+
presencePenalty?: number;
|
|
47
|
+
n?: number;
|
|
48
|
+
stop?: string | string[];
|
|
49
|
+
toolChoice?: import("@mistralai/mistralai/models/components/toolchoice").ToolChoice | import("@mistralai/mistralai/models/components/toolchoiceenum").ToolChoiceEnum;
|
|
50
|
+
randomSeed?: number;
|
|
51
|
+
prediction?: import("@mistralai/mistralai/models/components/prediction").Prediction;
|
|
52
|
+
parallelToolCalls?: boolean;
|
|
53
|
+
promptMode?: import("@mistralai/mistralai/models/components/mistralpromptmode").MistralPromptMode;
|
|
54
|
+
safePrompt?: boolean;
|
|
55
|
+
};
|
|
56
|
+
}
|
|
24
57
|
export declare class MistralProvider extends LLMProvider {
|
|
25
58
|
chatModel: ChatMistralAI;
|
|
26
59
|
get baseURL(): string;
|
|
27
|
-
createModel():
|
|
60
|
+
createModel(): ReasoningChatMistralAI;
|
|
61
|
+
protected resolveReasoningOptions(reasoning?: ReasoningOptions): ResolvedReasoningOptions;
|
|
28
62
|
stream(context: AIChatContext, options?: MistralCallOptions): Promise<any>;
|
|
29
63
|
invoke(context: AIChatContext, options?: MistralCallOptions): Promise<any>;
|
|
30
64
|
listModels(): Promise<{
|
|
@@ -39,6 +39,8 @@ var import_ai_manager = require("../manager/ai-manager");
|
|
|
39
39
|
const MISTRAL_URL = "https://api.mistral.ai";
|
|
40
40
|
const MISTRAL_REASONING_EFFORT = "high";
|
|
41
41
|
const MISTRAL_REASONING_MODELS = /* @__PURE__ */ new Set(["mistral-small-latest", "mistral-medium-3-5"]);
|
|
42
|
+
const MISTRAL_REASONING_EFFORTS = /* @__PURE__ */ new Set(["off", "low", "medium", "high"]);
|
|
43
|
+
const MISTRAL_REASONING_MODE_KEY = "__nb_reasoning_mode";
|
|
42
44
|
function omitDisabledNumberOptions(options) {
|
|
43
45
|
for (const key of ["maxTokens", "maxRetries"]) {
|
|
44
46
|
if (options[key] === -1) {
|
|
@@ -73,19 +75,62 @@ const injectMistralReasoningEffort = async (request) => {
|
|
|
73
75
|
if (!body || typeof body !== "object") {
|
|
74
76
|
return;
|
|
75
77
|
}
|
|
78
|
+
const reasoningMode = body[MISTRAL_REASONING_MODE_KEY];
|
|
79
|
+
delete body[MISTRAL_REASONING_MODE_KEY];
|
|
80
|
+
const shouldRewriteBody = reasoningMode != null;
|
|
76
81
|
if (typeof body.model !== "string" || !MISTRAL_REASONING_MODELS.has(body.model)) {
|
|
82
|
+
if (shouldRewriteBody) {
|
|
83
|
+
const headers2 = new Headers(request.headers);
|
|
84
|
+
headers2.delete("content-length");
|
|
85
|
+
return new Request(request, {
|
|
86
|
+
headers: headers2,
|
|
87
|
+
body: JSON.stringify(body)
|
|
88
|
+
});
|
|
89
|
+
}
|
|
77
90
|
return;
|
|
78
91
|
}
|
|
92
|
+
if (reasoningMode === "off") {
|
|
93
|
+
delete body.reasoning_effort;
|
|
94
|
+
const headers2 = new Headers(request.headers);
|
|
95
|
+
headers2.delete("content-length");
|
|
96
|
+
return new Request(request, {
|
|
97
|
+
headers: headers2,
|
|
98
|
+
body: JSON.stringify(body)
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
if (body.reasoning_effort && !shouldRewriteBody) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
const reasoningEffort = reasoningMode && reasoningMode !== "default" ? reasoningMode : MISTRAL_REASONING_EFFORT;
|
|
79
105
|
const headers = new Headers(request.headers);
|
|
80
106
|
headers.delete("content-length");
|
|
81
107
|
return new Request(request, {
|
|
82
108
|
headers,
|
|
83
109
|
body: JSON.stringify({
|
|
84
110
|
...body,
|
|
85
|
-
reasoning_effort:
|
|
111
|
+
reasoning_effort: reasoningEffort
|
|
86
112
|
})
|
|
87
113
|
});
|
|
88
114
|
};
|
|
115
|
+
class ReasoningChatMistralAI extends import_mistralai.ChatMistralAI {
|
|
116
|
+
reasoningMode;
|
|
117
|
+
constructor(fields) {
|
|
118
|
+
const { [MISTRAL_REASONING_MODE_KEY]: reasoningMode, ...modelFields } = fields;
|
|
119
|
+
super(modelFields);
|
|
120
|
+
this.reasoningMode = reasoningMode;
|
|
121
|
+
}
|
|
122
|
+
invocationParams(options) {
|
|
123
|
+
const params = super.invocationParams(options);
|
|
124
|
+
const mode = this.reasoningMode;
|
|
125
|
+
if (!mode || mode === "default") {
|
|
126
|
+
return params;
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
...params,
|
|
130
|
+
[MISTRAL_REASONING_MODE_KEY]: mode
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
89
134
|
class MistralProvider extends import_provider.LLMProvider {
|
|
90
135
|
get baseURL() {
|
|
91
136
|
return MISTRAL_URL;
|
|
@@ -95,14 +140,29 @@ class MistralProvider extends import_provider.LLMProvider {
|
|
|
95
140
|
const { responseFormat, structuredOutput, ...modelOptions } = this.modelOptions || {};
|
|
96
141
|
omitDisabledNumberOptions(modelOptions);
|
|
97
142
|
const beforeRequestHooks = Array.isArray(modelOptions.beforeRequestHooks) ? [injectMistralReasoningEffort, ...modelOptions.beforeRequestHooks] : [injectMistralReasoningEffort];
|
|
98
|
-
|
|
143
|
+
const reasoningOptions = this.resolveReasoningOptions(this.modelReasoningOptions);
|
|
144
|
+
return new ReasoningChatMistralAI({
|
|
99
145
|
apiKey,
|
|
100
146
|
...modelOptions,
|
|
147
|
+
...reasoningOptions.modelRequestParams || {},
|
|
101
148
|
beforeRequestHooks,
|
|
102
149
|
serverURL: this.getResolvedServerURL(),
|
|
103
150
|
verbose: false
|
|
104
151
|
});
|
|
105
152
|
}
|
|
153
|
+
resolveReasoningOptions(reasoning) {
|
|
154
|
+
if (!reasoning || reasoning.mode === "default") {
|
|
155
|
+
return {};
|
|
156
|
+
}
|
|
157
|
+
if (!MISTRAL_REASONING_EFFORTS.has(reasoning.mode)) {
|
|
158
|
+
return {};
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
modelRequestParams: {
|
|
162
|
+
[MISTRAL_REASONING_MODE_KEY]: reasoning.mode
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
}
|
|
106
166
|
async stream(context, options) {
|
|
107
167
|
return super.stream(context, this.withResponseFormat(options));
|
|
108
168
|
}
|
|
@@ -7,9 +7,10 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
import { ChatOpenAI } from '@langchain/openai';
|
|
10
|
-
import { LLMProvider } from '../provider';
|
|
10
|
+
import { LLMProvider, ReasoningOptions, ResolvedReasoningOptions } from '../provider';
|
|
11
11
|
export declare class OpenAICompletionsProvider extends LLMProvider {
|
|
12
12
|
chatModel: ChatOpenAI;
|
|
13
13
|
get baseURL(): string;
|
|
14
14
|
createModel(): ChatOpenAI<import("@langchain/openai/dist/chat_models/index.cjs").ChatOpenAICallOptions>;
|
|
15
|
+
protected resolveReasoningOptions(reasoning?: ReasoningOptions): ResolvedReasoningOptions;
|
|
15
16
|
}
|
|
@@ -39,6 +39,7 @@ class OpenAICompletionsProvider extends import_provider.LLMProvider {
|
|
|
39
39
|
const { apiKey } = this.serviceOptions || {};
|
|
40
40
|
const { responseFormat, structuredOutput } = this.modelOptions || {};
|
|
41
41
|
const { name, schema } = structuredOutput || {};
|
|
42
|
+
const reasoningOptions = this.resolveReasoningOptions(this.modelReasoningOptions);
|
|
42
43
|
const responseFormatOptions = {
|
|
43
44
|
type: responseFormat ?? "text"
|
|
44
45
|
};
|
|
@@ -48,14 +49,29 @@ class OpenAICompletionsProvider extends import_provider.LLMProvider {
|
|
|
48
49
|
return new import_openai.ChatOpenAI({
|
|
49
50
|
apiKey,
|
|
50
51
|
...this.modelOptions,
|
|
52
|
+
...reasoningOptions.modelRequestParams || {},
|
|
51
53
|
modelKwargs: {
|
|
52
|
-
response_format: responseFormatOptions
|
|
54
|
+
response_format: responseFormatOptions,
|
|
55
|
+
...reasoningOptions.modelKwargs || {}
|
|
53
56
|
},
|
|
54
57
|
configuration: {
|
|
55
58
|
baseURL: this.getResolvedBaseURL()
|
|
56
59
|
}
|
|
57
60
|
});
|
|
58
61
|
}
|
|
62
|
+
resolveReasoningOptions(reasoning) {
|
|
63
|
+
if (!reasoning || reasoning.mode === "default") {
|
|
64
|
+
return {};
|
|
65
|
+
}
|
|
66
|
+
const effort = reasoning.mode === "off" ? "none" : reasoning.mode;
|
|
67
|
+
return {
|
|
68
|
+
modelRequestParams: {
|
|
69
|
+
reasoning: {
|
|
70
|
+
effort
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
59
75
|
}
|
|
60
76
|
// Annotate the CommonJS export names for ESM import in node:
|
|
61
77
|
0 && (module.exports = {
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
9
|
import { ChatOpenAI } from '@langchain/openai';
|
|
10
|
-
import { LLMProvider } from '../provider';
|
|
10
|
+
import { LLMProvider, ReasoningOptions, ResolvedReasoningOptions } from '../provider';
|
|
11
11
|
import { Model } from '@nocobase/database';
|
|
12
12
|
import { AIMessageChunk } from '@langchain/core/messages';
|
|
13
13
|
export declare class OpenAIResponsesProvider extends LLMProvider {
|
|
@@ -22,6 +22,7 @@ export declare class OpenAIResponsesProvider extends LLMProvider {
|
|
|
22
22
|
role: any;
|
|
23
23
|
};
|
|
24
24
|
protected builtInTools(): any[];
|
|
25
|
+
protected resolveReasoningOptions(reasoning?: ReasoningOptions): ResolvedReasoningOptions;
|
|
25
26
|
isToolConflict(): boolean;
|
|
26
27
|
parseWebSearchAction(chunk: AIMessageChunk): {
|
|
27
28
|
type: string;
|
|
@@ -40,6 +40,7 @@ class OpenAIResponsesProvider extends import_provider.LLMProvider {
|
|
|
40
40
|
const { apiKey } = this.serviceOptions || {};
|
|
41
41
|
const { responseFormat, structuredOutput } = this.modelOptions || {};
|
|
42
42
|
const { name, schema, strict } = structuredOutput || {};
|
|
43
|
+
const reasoningOptions = this.resolveReasoningOptions(this.modelReasoningOptions);
|
|
43
44
|
let responseFormatOptions = {
|
|
44
45
|
type: responseFormat ?? "text"
|
|
45
46
|
};
|
|
@@ -54,10 +55,12 @@ class OpenAIResponsesProvider extends import_provider.LLMProvider {
|
|
|
54
55
|
return new import_openai.ChatOpenAI({
|
|
55
56
|
apiKey,
|
|
56
57
|
...this.modelOptions,
|
|
58
|
+
...reasoningOptions.modelRequestParams || {},
|
|
57
59
|
modelKwargs: {
|
|
58
60
|
text: {
|
|
59
61
|
format: responseFormatOptions
|
|
60
|
-
}
|
|
62
|
+
},
|
|
63
|
+
...reasoningOptions.modelKwargs || {}
|
|
61
64
|
},
|
|
62
65
|
configuration: {
|
|
63
66
|
baseURL: this.getResolvedBaseURL()
|
|
@@ -130,6 +133,19 @@ class OpenAIResponsesProvider extends import_provider.LLMProvider {
|
|
|
130
133
|
}
|
|
131
134
|
return [];
|
|
132
135
|
}
|
|
136
|
+
resolveReasoningOptions(reasoning) {
|
|
137
|
+
if (!reasoning || reasoning.mode === "default") {
|
|
138
|
+
return {};
|
|
139
|
+
}
|
|
140
|
+
const effort = reasoning.mode === "off" ? "none" : reasoning.mode;
|
|
141
|
+
return {
|
|
142
|
+
modelRequestParams: {
|
|
143
|
+
reasoning: {
|
|
144
|
+
effort
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
}
|
|
133
149
|
isToolConflict() {
|
|
134
150
|
return false;
|
|
135
151
|
}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import { BaseChatModel } from '@langchain/core/language_models/chat_models';
|
|
10
10
|
import { Model } from '@nocobase/database';
|
|
11
|
-
import { AttachmentModel } from '@nocobase/plugin-file-manager';
|
|
11
|
+
import { type AttachmentModel } from '@nocobase/plugin-file-manager';
|
|
12
12
|
import { Application } from '@nocobase/server';
|
|
13
13
|
import { AIChatContext, AIMessageInput } from '../types/ai-chat-conversation.type';
|
|
14
14
|
import { EmbeddingsInterface } from '@langchain/core/embeddings';
|
|
@@ -27,6 +27,11 @@ export type LLMProviderInvokeOptions = {
|
|
|
27
27
|
modelRequestParams?: Record<string, any>;
|
|
28
28
|
[key: string]: any;
|
|
29
29
|
};
|
|
30
|
+
export type ReasoningMode = 'default' | 'off' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh';
|
|
31
|
+
export type ReasoningOptions = {
|
|
32
|
+
mode: ReasoningMode;
|
|
33
|
+
};
|
|
34
|
+
export type ResolvedReasoningOptions = Pick<LLMProviderInvokeOptions, 'modelKwargs' | 'modelRequestParams'>;
|
|
30
35
|
export type LLMModelRequestBuilderResult = {
|
|
31
36
|
context: AIChatContext;
|
|
32
37
|
options?: LLMProviderInvokeOptions;
|
|
@@ -45,10 +50,12 @@ export declare abstract class LLMProvider {
|
|
|
45
50
|
serviceOptions: Record<string, any>;
|
|
46
51
|
modelOptions: Record<string, any> | undefined;
|
|
47
52
|
chatModel: any;
|
|
53
|
+
protected modelReasoningOptions: ReasoningOptions | undefined;
|
|
48
54
|
abstract createModel(): BaseChatModel | any;
|
|
49
55
|
get baseURL(): string | null;
|
|
50
56
|
constructor(opts: LLMProviderOptions);
|
|
51
57
|
protected getModelRequestBuilder(_model?: string): LLMModelRequestBuilder | null;
|
|
58
|
+
protected resolveReasoningOptions(_reasoning?: ReasoningOptions): ResolvedReasoningOptions;
|
|
52
59
|
prepareChain(context: AIChatContext): any;
|
|
53
60
|
invoke(context: AIChatContext, options?: LLMProviderInvokeOptions): Promise<any>;
|
|
54
61
|
stream(context: AIChatContext, options?: any): Promise<any>;
|
|
@@ -69,7 +76,8 @@ export declare abstract class LLMProvider {
|
|
|
69
76
|
parseAttachment(ctx: Context, attachment: AttachmentModel): Promise<ParsedAttachmentResult>;
|
|
70
77
|
protected isApiSupportedAttachment(attachment: AttachmentModel): boolean;
|
|
71
78
|
protected isDocumentLoaderSupportedAttachment(attachment: AttachmentModel): boolean;
|
|
72
|
-
protected
|
|
79
|
+
protected encodeAttachment(ctx: Context, attachment: AttachmentModel): Promise<string>;
|
|
80
|
+
protected convertToContent(ctx: Context, attachment: AttachmentModel): Promise<ParsedAttachmentResult>;
|
|
73
81
|
protected loadDocument(ctx: Context, attachment: any): Promise<any>;
|
|
74
82
|
getStructuredOutputOptions(structuredOutput: AIChatContext['structuredOutput']): any;
|
|
75
83
|
testFlight(): Promise<{
|
|
@@ -84,6 +84,7 @@ class LLMProvider {
|
|
|
84
84
|
serviceOptions;
|
|
85
85
|
modelOptions;
|
|
86
86
|
chatModel;
|
|
87
|
+
modelReasoningOptions;
|
|
87
88
|
get baseURL() {
|
|
88
89
|
return null;
|
|
89
90
|
}
|
|
@@ -92,13 +93,18 @@ class LLMProvider {
|
|
|
92
93
|
this.app = app;
|
|
93
94
|
this.serviceOptions = resolveServiceOptions(serviceOptions, app);
|
|
94
95
|
if (modelOptions) {
|
|
95
|
-
|
|
96
|
+
const { _reasoning, ...restModelOptions } = modelOptions;
|
|
97
|
+
this.modelReasoningOptions = _reasoning;
|
|
98
|
+
this.modelOptions = restModelOptions;
|
|
96
99
|
this.chatModel = this.createModel();
|
|
97
100
|
}
|
|
98
101
|
}
|
|
99
102
|
getModelRequestBuilder(_model) {
|
|
100
103
|
return null;
|
|
101
104
|
}
|
|
105
|
+
resolveReasoningOptions(_reasoning) {
|
|
106
|
+
return {};
|
|
107
|
+
}
|
|
102
108
|
prepareChain(context) {
|
|
103
109
|
var _a, _b, _c, _d;
|
|
104
110
|
let chain = this.chatModel;
|
|
@@ -183,6 +189,15 @@ class LLMProvider {
|
|
|
183
189
|
return (0, import_utils2.stripToolCallTags)(chunk);
|
|
184
190
|
}
|
|
185
191
|
async parseAttachment(ctx, attachment) {
|
|
192
|
+
var _a;
|
|
193
|
+
const dataSourceKey = (_a = attachment == null ? void 0 : attachment.source) == null ? void 0 : _a.dataSourceKey;
|
|
194
|
+
const isExternalAttachment = Boolean(dataSourceKey && dataSourceKey !== "main");
|
|
195
|
+
if (!(attachment == null ? void 0 : attachment.storageId) && !isExternalAttachment || !(attachment == null ? void 0 : attachment.filename)) {
|
|
196
|
+
return {
|
|
197
|
+
placement: "system",
|
|
198
|
+
content: "The user provided an attachment, but it is unavailable or invalid and cannot be parsed. Do not use this attachment as evidence; tell the user the attachment is unavailable."
|
|
199
|
+
};
|
|
200
|
+
}
|
|
186
201
|
if (this.isApiSupportedAttachment(attachment)) {
|
|
187
202
|
return await this.convertToContent(ctx, attachment);
|
|
188
203
|
} else if (this.isDocumentLoaderSupportedAttachment(attachment)) {
|
|
@@ -212,10 +227,24 @@ class LLMProvider {
|
|
|
212
227
|
const ext = import_node_path.default.extname((attachment == null ? void 0 : attachment.filename) ?? "").toLocaleLowerCase();
|
|
213
228
|
return import_document_loader.SUPPORTED_DOCUMENT_EXTNAMES.includes(ext);
|
|
214
229
|
}
|
|
215
|
-
async
|
|
230
|
+
async encodeAttachment(ctx, attachment) {
|
|
216
231
|
const fileManager = this.app.pm.get("file-manager");
|
|
217
|
-
|
|
218
|
-
|
|
232
|
+
if (typeof ctx.get !== "function") {
|
|
233
|
+
const { stream: stream2 } = await fileManager.getFileStream(attachment);
|
|
234
|
+
return await (0, import_utils2.encodeReadableStream)(stream2);
|
|
235
|
+
}
|
|
236
|
+
const { stream } = await fileManager.getFileStream(attachment, {
|
|
237
|
+
requestOptions: {
|
|
238
|
+
headers: {
|
|
239
|
+
Referer: ctx.get("referer") || "",
|
|
240
|
+
"User-Agent": ctx.get("user-agent") || ""
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
return await (0, import_utils2.encodeReadableStream)(stream);
|
|
245
|
+
}
|
|
246
|
+
async convertToContent(ctx, attachment) {
|
|
247
|
+
const data = await this.encodeAttachment(ctx, attachment);
|
|
219
248
|
if (attachment.mimetype.startsWith("image/")) {
|
|
220
249
|
return {
|
|
221
250
|
placement: "contentBlocks",
|
|
@@ -60,6 +60,34 @@ function serializeQueryFieldValue(value) {
|
|
|
60
60
|
}
|
|
61
61
|
return value;
|
|
62
62
|
}
|
|
63
|
+
function getRecordFieldValue(record, field) {
|
|
64
|
+
return field.split(".").reduce((current, key) => {
|
|
65
|
+
if (current === null || current === void 0) {
|
|
66
|
+
return current;
|
|
67
|
+
}
|
|
68
|
+
if (typeof current.get === "function") {
|
|
69
|
+
return current.get(key);
|
|
70
|
+
}
|
|
71
|
+
return current[key];
|
|
72
|
+
}, record);
|
|
73
|
+
}
|
|
74
|
+
function getQueryFieldOptions(collection, field) {
|
|
75
|
+
const parts = field.split(".");
|
|
76
|
+
let currentCollection = collection;
|
|
77
|
+
for (const [index, part] of parts.entries()) {
|
|
78
|
+
const currentField = currentCollection == null ? void 0 : currentCollection.getField(part);
|
|
79
|
+
if (!currentField) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (index === parts.length - 1) {
|
|
83
|
+
return currentField.options;
|
|
84
|
+
}
|
|
85
|
+
if (!currentField.isRelationField()) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
currentCollection = currentField.targetCollection();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
63
91
|
class AIContextDatasourceManager {
|
|
64
92
|
constructor(plugin) {
|
|
65
93
|
this.plugin = plugin;
|
|
@@ -149,17 +177,16 @@ class AIContextDatasourceManager {
|
|
|
149
177
|
}
|
|
150
178
|
});
|
|
151
179
|
}
|
|
152
|
-
const { fields, filter, sort, offset, limit } = options;
|
|
153
|
-
const result = await collection.repository.find({ fields, filter, sort, offset: offset ?? 0, limit });
|
|
180
|
+
const { fields, appends, filter, sort, offset, limit } = options;
|
|
181
|
+
const result = await collection.repository.find({ fields, appends, filter, sort, offset: offset ?? 0, limit });
|
|
154
182
|
const total = await collection.repository.count({ fields, filter });
|
|
155
183
|
const records = result.map(
|
|
156
184
|
(x) => fields.map((field) => {
|
|
157
|
-
|
|
158
|
-
const
|
|
159
|
-
const value = serializeQueryFieldValue(x[field]);
|
|
185
|
+
const { name, type } = getQueryFieldOptions(collection, field) || {};
|
|
186
|
+
const value = serializeQueryFieldValue(getRecordFieldValue(x, field));
|
|
160
187
|
return {
|
|
161
|
-
name,
|
|
162
|
-
type,
|
|
188
|
+
name: field.includes(".") ? field : name || field,
|
|
189
|
+
type: type || "unknown",
|
|
163
190
|
value
|
|
164
191
|
};
|
|
165
192
|
})
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
* This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
|
|
7
7
|
* For more information, please refer to: https://www.nocobase.com/agreement.
|
|
8
8
|
*/
|
|
9
|
-
import { LLMProvider, LLMProviderOptions, EmbeddingProvider, EmbeddingProviderOptions } from '../llm-providers/provider';
|
|
9
|
+
import { LLMProvider, LLMProviderOptions, EmbeddingProvider, EmbeddingProviderOptions, ReasoningOptions } from '../llm-providers/provider';
|
|
10
10
|
import PluginAIServer from '../plugin';
|
|
11
11
|
import { ToolManager } from './tool-manager';
|
|
12
12
|
export type LLMProviderMeta = {
|
|
@@ -25,6 +25,7 @@ export type LLMModelOptions = {
|
|
|
25
25
|
llmService: string;
|
|
26
26
|
model: string;
|
|
27
27
|
webSearch?: boolean;
|
|
28
|
+
reasoning?: ReasoningOptions;
|
|
28
29
|
};
|
|
29
30
|
export type EnabledLLMModel = {
|
|
30
31
|
label: string;
|
|
@@ -123,7 +123,7 @@ class AIManager {
|
|
|
123
123
|
return (0, import_recommended_models.getRecommendedModels)(provider);
|
|
124
124
|
}
|
|
125
125
|
async getLLMService(options) {
|
|
126
|
-
const { llmService, model, webSearch } = options ?? {};
|
|
126
|
+
const { llmService, model, webSearch, reasoning } = options ?? {};
|
|
127
127
|
if (!llmService || !model) {
|
|
128
128
|
throw new Error("LLM service not configured");
|
|
129
129
|
}
|
|
@@ -134,6 +134,9 @@ class AIManager {
|
|
|
134
134
|
if (webSearch === true) {
|
|
135
135
|
modelOptions.builtIn = { webSearch: true };
|
|
136
136
|
}
|
|
137
|
+
if (reasoning) {
|
|
138
|
+
modelOptions._reasoning = reasoning;
|
|
139
|
+
}
|
|
137
140
|
const service = await this.plugin.db.getRepository("llmServices").findOne({
|
|
138
141
|
filter: {
|
|
139
142
|
name: llmService
|
package/dist/server/plugin.js
CHANGED
|
@@ -80,6 +80,7 @@ var import_sub_agents = require("./ai-employees/sub-agents");
|
|
|
80
80
|
var import_employee = require("./workflow/nodes/employee");
|
|
81
81
|
var import_ai_knowledge_base = require("./ai-employees/ai-knowledge-base");
|
|
82
82
|
var import_llm_stream_manager = require("./manager/llm-stream-manager");
|
|
83
|
+
var import_attachments = require("./attachments");
|
|
83
84
|
class PluginAIServer extends import_server.Plugin {
|
|
84
85
|
features = new import_ai_feature_manager.AIPluginFeatureManagerImpl();
|
|
85
86
|
aiManager = new import_ai_manager.AIManager(this);
|
|
@@ -218,6 +219,19 @@ class PluginAIServer extends import_server.Plugin {
|
|
|
218
219
|
},
|
|
219
220
|
{ before: "createMiddleware" }
|
|
220
221
|
);
|
|
222
|
+
this.app.resourceManager.use(
|
|
223
|
+
async (ctx, next) => {
|
|
224
|
+
const { resourceName, actionName } = ctx.action;
|
|
225
|
+
if (resourceName === "aiFiles" && actionName === "create") {
|
|
226
|
+
(0, import_attachments.appendAIFileAttachmentSource)(ctx.action.params.values);
|
|
227
|
+
}
|
|
228
|
+
await next();
|
|
229
|
+
if (resourceName === "aiFiles" && actionName === "create") {
|
|
230
|
+
(0, import_attachments.appendAIFileAttachmentSource)(ctx.body);
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
{ after: "createMiddleware" }
|
|
234
|
+
);
|
|
221
235
|
Object.entries(aiEmployeeActions).forEach(([name, action]) => {
|
|
222
236
|
this.app.resourceManager.registerActionHandler(`aiEmployees:${name}`, action);
|
|
223
237
|
});
|
|
@@ -103,6 +103,33 @@ const saveUserMessages = async (ctx, sessionId, messages, messageId) => {
|
|
|
103
103
|
await conversation.addMessages(userMessages);
|
|
104
104
|
});
|
|
105
105
|
};
|
|
106
|
+
function isRecord(value) {
|
|
107
|
+
return Boolean(value && typeof value === "object" && !Array.isArray(value));
|
|
108
|
+
}
|
|
109
|
+
function normalizeIncomingMessageAttachments(ctx, messages) {
|
|
110
|
+
for (const message of messages) {
|
|
111
|
+
if (message.attachments == null) {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
if (!Array.isArray(message.attachments)) {
|
|
115
|
+
throw new import_utils.ResourceActionError(400, ctx.t("Invalid attachment"));
|
|
116
|
+
}
|
|
117
|
+
message.attachments = message.attachments.map((attachment) => {
|
|
118
|
+
if (!isRecord(attachment) || !isRecord(attachment.source)) {
|
|
119
|
+
throw new import_utils.ResourceActionError(400, ctx.t("Invalid attachment"));
|
|
120
|
+
}
|
|
121
|
+
const source = { ...attachment.source };
|
|
122
|
+
delete source.trustworthy;
|
|
123
|
+
if (typeof source.collectionName !== "string" || !source.collectionName) {
|
|
124
|
+
throw new import_utils.ResourceActionError(400, ctx.t("Invalid attachment"));
|
|
125
|
+
}
|
|
126
|
+
return {
|
|
127
|
+
...attachment,
|
|
128
|
+
source
|
|
129
|
+
};
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
}
|
|
106
133
|
var aiConversations_default = {
|
|
107
134
|
name: "aiConversations",
|
|
108
135
|
middlewares: [
|
|
@@ -329,6 +356,7 @@ var aiConversations_default = {
|
|
|
329
356
|
if (!Array.isArray(messages)) {
|
|
330
357
|
throw new import_utils.ResourceActionError(400, ctx.t("messages must be an array"));
|
|
331
358
|
}
|
|
359
|
+
normalizeIncomingMessageAttachments(ctx, messages);
|
|
332
360
|
const userMessage = messages.find((message) => message.role === "user");
|
|
333
361
|
if (!userMessage) {
|
|
334
362
|
throw new import_utils.ResourceActionError(400, ctx.t("user message is required"));
|
|
@@ -633,6 +661,13 @@ var aiConversations_default = {
|
|
|
633
661
|
if (!message) {
|
|
634
662
|
ctx.throw(400);
|
|
635
663
|
}
|
|
664
|
+
const messageConversation = await plugin.aiConversationsManager.getConversation({
|
|
665
|
+
sessionId: message.sessionId,
|
|
666
|
+
userId
|
|
667
|
+
});
|
|
668
|
+
if (!messageConversation) {
|
|
669
|
+
ctx.throw(400);
|
|
670
|
+
}
|
|
636
671
|
const toolCalls = message.toolCalls;
|
|
637
672
|
if (!(toolCalls == null ? void 0 : toolCalls.length)) {
|
|
638
673
|
ctx.throw(400);
|
|
@@ -730,6 +765,14 @@ var aiConversations_default = {
|
|
|
730
765
|
sendErrorResponse(ctx, "message not found");
|
|
731
766
|
return next();
|
|
732
767
|
}
|
|
768
|
+
const messageConversation = await plugin.aiConversationsManager.getConversation({
|
|
769
|
+
sessionId: message.sessionId,
|
|
770
|
+
userId
|
|
771
|
+
});
|
|
772
|
+
if (!messageConversation) {
|
|
773
|
+
sendErrorResponse(ctx, "conversation not found");
|
|
774
|
+
return next();
|
|
775
|
+
}
|
|
733
776
|
const tools = message.toolCalls;
|
|
734
777
|
if (!(tools == null ? void 0 : tools.length)) {
|
|
735
778
|
sendErrorResponse(ctx, "No tool calls found");
|
|
@@ -746,7 +789,7 @@ var aiConversations_default = {
|
|
|
746
789
|
webSearch,
|
|
747
790
|
model: resolvedModel
|
|
748
791
|
});
|
|
749
|
-
const userDecisions = await plugin.aiConversationsManager.getUserDecisions(messageId);
|
|
792
|
+
const userDecisions = await plugin.aiConversationsManager.getUserDecisions(message.messageId);
|
|
750
793
|
await aiEmployee.stream({
|
|
751
794
|
userDecisions
|
|
752
795
|
});
|