@tdesign-react/chat 1.0.2-alpha.9 → 1.1.0-alpha.1
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/es/_chunks/dep-f2051ebd.js +839 -0
- package/es/_chunks/dep-f2051ebd.js.map +1 -0
- package/es/_util/reactify.js +1 -1
- package/es/_util/useDynamicStyle.js +1 -1
- package/es/attachments/index.js +1 -1
- package/es/chat-actionbar/index.js +1 -1
- package/es/chat-engine/components/a2ui/A2UIActivityRenderer.d.ts +196 -0
- package/es/chat-engine/components/a2ui/A2UIActivityRenderer.js +301 -0
- package/es/chat-engine/components/a2ui/A2UIActivityRenderer.js.map +1 -0
- package/es/chat-engine/components/a2ui/A2UIComponentRenderer.d.ts +37 -0
- package/es/chat-engine/components/a2ui/A2UIComponentRenderer.js +116 -0
- package/es/chat-engine/components/a2ui/A2UIComponentRenderer.js.map +1 -0
- package/es/chat-engine/components/a2ui/A2UIErrorBoundary.d.ts +42 -0
- package/es/chat-engine/components/a2ui/A2UIErrorBoundary.js +113 -0
- package/es/chat-engine/components/a2ui/A2UIErrorBoundary.js.map +1 -0
- package/es/chat-engine/components/a2ui/A2UISkeleton.d.ts +60 -0
- package/es/chat-engine/components/a2ui/A2UISkeleton.js +197 -0
- package/es/chat-engine/components/a2ui/A2UISkeleton.js.map +1 -0
- package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.d.ts +44 -0
- package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.js +139 -0
- package/es/chat-engine/components/a2ui/A2UISurfaceRenderer.js.map +1 -0
- package/es/chat-engine/components/a2ui/containers/A2UICard.d.ts +22 -0
- package/es/chat-engine/components/a2ui/containers/A2UICard.js +82 -0
- package/es/chat-engine/components/a2ui/containers/A2UICard.js.map +1 -0
- package/es/chat-engine/components/a2ui/containers/A2UIColumn.d.ts +18 -0
- package/es/chat-engine/components/a2ui/containers/A2UIColumn.js +81 -0
- package/es/chat-engine/components/a2ui/containers/A2UIColumn.js.map +1 -0
- package/es/chat-engine/components/a2ui/containers/A2UIList.d.ts +14 -0
- package/es/chat-engine/components/a2ui/containers/A2UIList.js +62 -0
- package/es/chat-engine/components/a2ui/containers/A2UIList.js.map +1 -0
- package/es/chat-engine/components/a2ui/containers/A2UIRow.d.ts +20 -0
- package/es/chat-engine/components/a2ui/containers/A2UIRow.js +84 -0
- package/es/chat-engine/components/a2ui/containers/A2UIRow.js.map +1 -0
- package/es/chat-engine/components/a2ui/containers/A2UITabs.d.ts +14 -0
- package/es/chat-engine/components/a2ui/containers/A2UITabs.js +69 -0
- package/es/chat-engine/components/a2ui/containers/A2UITabs.js.map +1 -0
- package/es/chat-engine/components/a2ui/containers/index.d.ts +8 -0
- package/es/chat-engine/components/a2ui/containers/index.js +30 -0
- package/es/chat-engine/components/a2ui/containers/index.js.map +1 -0
- package/es/chat-engine/components/a2ui/index.d.ts +11 -0
- package/es/chat-engine/components/a2ui/index.js +62 -0
- package/es/chat-engine/components/a2ui/index.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIButton.d.ts +33 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIButton.js +80 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIButton.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.d.ts +12 -0
- package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.js +43 -0
- package/es/chat-engine/components/a2ui/primitives/A2UICheckBox.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.d.ts +50 -0
- package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.js +54 -0
- package/es/chat-engine/components/a2ui/primitives/A2UICheckboxGroup.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.d.ts +13 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.js +89 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIChoicePicker.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIDivider.d.ts +12 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIDivider.js +25 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIDivider.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIIcon.d.ts +13 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIIcon.js +138942 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIIcon.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIImage.d.ts +12 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIImage.js +75 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIImage.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIInput.d.ts +20 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIInput.js +63 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIInput.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.d.ts +56 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.js +64 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIRadioGroup.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UISlider.d.ts +12 -0
- package/es/chat-engine/components/a2ui/primitives/A2UISlider.js +55 -0
- package/es/chat-engine/components/a2ui/primitives/A2UISlider.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIText.d.ts +12 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIText.js +104 -0
- package/es/chat-engine/components/a2ui/primitives/A2UIText.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/A2UITextField.d.ts +12 -0
- package/es/chat-engine/components/a2ui/primitives/A2UITextField.js +80 -0
- package/es/chat-engine/components/a2ui/primitives/A2UITextField.js.map +1 -0
- package/es/chat-engine/components/a2ui/primitives/index.d.ts +15 -0
- package/es/chat-engine/components/a2ui/primitives/index.js +39 -0
- package/es/chat-engine/components/a2ui/primitives/index.js.map +1 -0
- package/es/chat-engine/components/a2ui/registry.d.ts +35 -0
- package/es/chat-engine/components/a2ui/registry.js +74 -0
- package/es/chat-engine/components/a2ui/registry.js.map +1 -0
- package/es/chat-engine/components/activity/index.js +1 -1
- package/es/chat-engine/components/activity/registry.d.ts +1 -1
- package/es/chat-engine/components/activity/registry.js +1 -1
- package/es/chat-engine/components/activity/registry.js.map +1 -1
- package/es/chat-engine/components/activity/render.d.ts +2 -2
- package/es/chat-engine/components/activity/render.js +1 -1
- package/es/chat-engine/components/activity/render.js.map +1 -1
- package/es/chat-engine/components/activity/types.js +1 -1
- package/es/chat-engine/components/index.d.ts +1 -0
- package/es/chat-engine/components/index.js +57 -9
- package/es/chat-engine/components/index.js.map +1 -1
- package/es/chat-engine/components/json-render/A2UIJsonRenderActivityRenderer.d.ts +36 -0
- package/es/chat-engine/components/json-render/A2UIJsonRenderActivityRenderer.js +36 -0
- package/es/chat-engine/components/json-render/A2UIJsonRenderActivityRenderer.js.map +1 -0
- package/es/chat-engine/components/json-render/JsonRenderActivityRenderer.d.ts +46 -0
- package/es/chat-engine/components/json-render/JsonRenderActivityRenderer.js +36 -0
- package/es/chat-engine/components/json-render/JsonRenderActivityRenderer.js.map +1 -0
- package/es/chat-engine/components/json-render/SurfaceStateManager.d.ts +113 -0
- package/es/chat-engine/components/json-render/SurfaceStateManager.js +195 -0
- package/es/chat-engine/components/json-render/SurfaceStateManager.js.map +1 -0
- package/es/chat-engine/components/json-render/adapters/a2ui-to-jsonrender.d.ts +49 -0
- package/es/chat-engine/components/json-render/adapters/a2ui-to-jsonrender.js +307 -0
- package/es/chat-engine/components/json-render/adapters/a2ui-to-jsonrender.js.map +1 -0
- package/es/chat-engine/components/json-render/adapters/a2ui-types.d.ts +96 -0
- package/es/chat-engine/components/json-render/adapters/a2ui-types.js +7 -0
- package/es/chat-engine/components/json-render/adapters/a2ui-types.js.map +1 -0
- package/es/chat-engine/components/json-render/adapters/index.d.ts +7 -0
- package/es/chat-engine/components/json-render/adapters/index.js +11 -0
- package/es/chat-engine/components/json-render/adapters/index.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/a2ui-binding.d.ts +64 -0
- package/es/chat-engine/components/json-render/catalog/a2ui-binding.js +36 -0
- package/es/chat-engine/components/json-render/catalog/a2ui-binding.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/a2ui-registry.d.ts +78 -0
- package/es/chat-engine/components/json-render/catalog/a2ui-registry.js +36 -0
- package/es/chat-engine/components/json-render/catalog/a2ui-registry.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/button.d.ts +14 -0
- package/es/chat-engine/components/json-render/catalog/button.js +71 -0
- package/es/chat-engine/components/json-render/catalog/button.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/card.d.ts +11 -0
- package/es/chat-engine/components/json-render/catalog/card.js +57 -0
- package/es/chat-engine/components/json-render/catalog/card.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/index.d.ts +127 -0
- package/es/chat-engine/components/json-render/catalog/index.js +36 -0
- package/es/chat-engine/components/json-render/catalog/index.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/input.d.ts +20 -0
- package/es/chat-engine/components/json-render/catalog/input.js +36 -0
- package/es/chat-engine/components/json-render/catalog/input.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/layout.d.ts +44 -0
- package/es/chat-engine/components/json-render/catalog/layout.js +129 -0
- package/es/chat-engine/components/json-render/catalog/layout.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog/text.d.ts +11 -0
- package/es/chat-engine/components/json-render/catalog/text.js +31 -0
- package/es/chat-engine/components/json-render/catalog/text.js.map +1 -0
- package/es/chat-engine/components/json-render/catalog.d.ts +549 -0
- package/es/chat-engine/components/json-render/catalog.js +147 -0
- package/es/chat-engine/components/json-render/catalog.js.map +1 -0
- package/es/chat-engine/components/json-render/config.d.ts +154 -0
- package/es/chat-engine/components/json-render/config.js +36 -0
- package/es/chat-engine/components/json-render/config.js.map +1 -0
- package/es/chat-engine/components/json-render/contexts/actions.d.ts +74 -0
- package/es/chat-engine/components/json-render/contexts/actions.js +290 -0
- package/es/chat-engine/components/json-render/contexts/actions.js.map +1 -0
- package/es/chat-engine/components/json-render/contexts/data.d.ts +45 -0
- package/es/chat-engine/components/json-render/contexts/data.js +104 -0
- package/es/chat-engine/components/json-render/contexts/data.js.map +1 -0
- package/es/chat-engine/components/json-render/contexts/validation.d.ts +59 -0
- package/es/chat-engine/components/json-render/contexts/validation.js +151 -0
- package/es/chat-engine/components/json-render/contexts/validation.js.map +1 -0
- package/es/chat-engine/components/json-render/contexts/visibility.d.ts +29 -0
- package/es/chat-engine/components/json-render/contexts/visibility.js +56 -0
- package/es/chat-engine/components/json-render/contexts/visibility.js.map +1 -0
- package/es/chat-engine/components/json-render/engine.d.ts +58 -0
- package/es/chat-engine/components/json-render/engine.js +88 -0
- package/es/chat-engine/components/json-render/engine.js.map +1 -0
- package/es/chat-engine/components/json-render/index.d.ts +34 -0
- package/es/chat-engine/components/json-render/index.js +36 -0
- package/es/chat-engine/components/json-render/index.js.map +1 -0
- package/es/chat-engine/components/json-render/performance.d.ts +91 -0
- package/es/chat-engine/components/json-render/performance.js +135 -0
- package/es/chat-engine/components/json-render/performance.js.map +1 -0
- package/es/chat-engine/components/json-render/renderer.d.ts +71 -0
- package/es/chat-engine/components/json-render/renderer.js +124 -0
- package/es/chat-engine/components/json-render/renderer.js.map +1 -0
- package/es/chat-engine/components/json-render/types.d.ts +69 -0
- package/es/chat-engine/components/json-render/types.js +7 -0
- package/es/chat-engine/components/json-render/types.js.map +1 -0
- package/es/chat-engine/components/provider/agent-state.js +39 -2
- package/es/chat-engine/components/provider/agent-state.js.map +1 -1
- package/es/chat-engine/components/toolcall/index.js +32 -2
- package/es/chat-engine/components/toolcall/index.js.map +1 -1
- package/es/chat-engine/components/toolcall/registry.js +1 -1
- package/es/chat-engine/components/toolcall/render.d.ts +1 -1
- package/es/chat-engine/components/toolcall/render.js +33 -4
- package/es/chat-engine/components/toolcall/render.js.map +1 -1
- package/es/chat-engine/components/toolcall/types.js +1 -1
- package/es/chat-engine/core/a2ui/index.d.ts +10 -0
- package/es/chat-engine/core/a2ui/index.js +24 -0
- package/es/chat-engine/core/a2ui/index.js.map +1 -0
- package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.d.ts +197 -0
- package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.js +438 -0
- package/es/chat-engine/core/a2ui/processor/A2uiMessageProcessor.js.map +1 -0
- package/es/chat-engine/core/a2ui/processor/ComponentTree.d.ts +53 -0
- package/es/chat-engine/core/a2ui/processor/ComponentTree.js +158 -0
- package/es/chat-engine/core/a2ui/processor/ComponentTree.js.map +1 -0
- package/es/chat-engine/core/a2ui/processor/DataStore.d.ts +63 -0
- package/es/chat-engine/core/a2ui/processor/DataStore.js +172 -0
- package/es/chat-engine/core/a2ui/processor/DataStore.js.map +1 -0
- package/es/chat-engine/core/a2ui/processor/PathResolver.d.ts +47 -0
- package/es/chat-engine/core/a2ui/processor/PathResolver.js +99 -0
- package/es/chat-engine/core/a2ui/processor/PathResolver.js.map +1 -0
- package/es/chat-engine/core/a2ui/types/index.d.ts +4 -0
- package/es/chat-engine/core/a2ui/types/index.js +9 -0
- package/es/chat-engine/core/a2ui/types/index.js.map +1 -0
- package/es/chat-engine/core/a2ui/types/types.d.ts +770 -0
- package/es/chat-engine/core/a2ui/types/types.js +104 -0
- package/es/chat-engine/core/a2ui/types/types.js.map +1 -0
- package/es/chat-engine/core/a2ui/utils/binding.d.ts +34 -0
- package/es/chat-engine/core/a2ui/utils/binding.js +1784 -0
- package/es/chat-engine/core/a2ui/utils/binding.js.map +1 -0
- package/es/chat-engine/core/a2ui/utils/index.d.ts +5 -0
- package/es/chat-engine/core/a2ui/utils/index.js +13 -0
- package/es/chat-engine/core/a2ui/utils/index.js.map +1 -0
- package/es/chat-engine/core/a2ui/utils/validation.d.ts +70 -0
- package/es/chat-engine/core/a2ui/utils/validation.js +333 -0
- package/es/chat-engine/core/a2ui/utils/validation.js.map +1 -0
- package/es/chat-engine/core/adapters/agui/activity-manager.d.ts +102 -0
- package/es/chat-engine/core/adapters/agui/activity-manager.js +144 -0
- package/es/chat-engine/core/adapters/agui/activity-manager.js.map +1 -0
- package/es/chat-engine/core/adapters/agui/event-mapper.d.ts +42 -2
- package/es/chat-engine/core/adapters/agui/event-mapper.js +90 -50
- package/es/chat-engine/core/adapters/agui/event-mapper.js.map +1 -1
- package/es/chat-engine/core/adapters/agui/events.d.ts +222 -222
- package/es/chat-engine/core/adapters/agui/events.js +34 -34
- package/es/chat-engine/core/adapters/agui/events.js.map +1 -1
- package/es/chat-engine/core/adapters/agui/index.d.ts +22 -2
- package/es/chat-engine/core/adapters/agui/index.js +34 -14
- package/es/chat-engine/core/adapters/agui/index.js.map +1 -1
- package/es/chat-engine/core/adapters/agui/state-manager.js +1 -1
- package/es/chat-engine/core/adapters/agui/types.d.ts +57 -56
- package/es/chat-engine/core/adapters/agui/types.js +5 -5
- package/es/chat-engine/core/adapters/agui/types.js.map +1 -1
- package/es/chat-engine/core/adapters/agui/utils.d.ts +9 -3
- package/es/chat-engine/core/adapters/agui/utils.js +23 -4
- package/es/chat-engine/core/adapters/agui/utils.js.map +1 -1
- package/es/chat-engine/core/event-bus/ChatEventBus.d.ts +88 -0
- package/es/chat-engine/core/event-bus/ChatEventBus.js +295 -0
- package/es/chat-engine/core/event-bus/ChatEventBus.js.map +1 -0
- package/es/chat-engine/core/event-bus/index.d.ts +5 -0
- package/es/chat-engine/core/event-bus/index.js +13 -0
- package/es/chat-engine/core/event-bus/index.js.map +1 -0
- package/es/chat-engine/core/event-bus/types.d.ts +230 -0
- package/es/chat-engine/core/event-bus/types.js +32 -0
- package/es/chat-engine/core/event-bus/types.js.map +1 -0
- package/es/chat-engine/core/index.d.ts +16 -1
- package/es/chat-engine/core/index.js +174 -17
- package/es/chat-engine/core/index.js.map +1 -1
- package/es/chat-engine/core/processor/index.js +1 -1
- package/es/chat-engine/core/server/batch-client.js +1 -1
- package/es/chat-engine/core/server/connection-manager.js +1 -1
- package/es/chat-engine/core/server/errors.js +1 -1
- package/es/chat-engine/core/server/index.js +1 -1
- package/es/chat-engine/core/server/llm-service.js +17 -15
- package/es/chat-engine/core/server/llm-service.js.map +1 -1
- package/es/chat-engine/core/server/sse-client.js +1 -1
- package/es/chat-engine/core/server/sse-parser.js +1 -1
- package/es/chat-engine/core/server/types.js +1 -1
- package/es/chat-engine/core/store/message.js +2 -2
- package/es/chat-engine/core/store/message.js.map +1 -1
- package/es/chat-engine/core/store/model.js +1 -1
- package/es/chat-engine/core/store/reactiveState.js +1 -1
- package/es/chat-engine/core/type.d.ts +18 -2
- package/es/chat-engine/core/type.js +1 -1
- package/es/chat-engine/core/utils/eventEmitter.js +1 -1
- package/es/chat-engine/core/utils/index.js +1 -1
- package/es/chat-engine/core/utils/logger.js +1 -1
- package/es/chat-engine/hooks/a2ui/A2UIContext.d.ts +90 -0
- package/es/chat-engine/hooks/a2ui/A2UIContext.js +97 -0
- package/es/chat-engine/hooks/a2ui/A2UIContext.js.map +1 -0
- package/es/chat-engine/hooks/a2ui/index.d.ts +12 -0
- package/es/chat-engine/hooks/a2ui/index.js +19 -0
- package/es/chat-engine/hooks/a2ui/index.js.map +1 -0
- package/es/chat-engine/hooks/a2ui/useA2UIAction.d.ts +40 -0
- package/es/chat-engine/hooks/a2ui/useA2UIAction.js +74 -0
- package/es/chat-engine/hooks/a2ui/useA2UIAction.js.map +1 -0
- package/es/chat-engine/hooks/a2ui/useA2UISurface.d.ts +36 -0
- package/es/chat-engine/hooks/a2ui/useA2UISurface.js +39 -0
- package/es/chat-engine/hooks/a2ui/useA2UISurface.js.map +1 -0
- package/es/chat-engine/hooks/a2ui/useDataBinding.d.ts +53 -0
- package/es/chat-engine/hooks/a2ui/useDataBinding.js +111 -0
- package/es/chat-engine/hooks/a2ui/useDataBinding.js.map +1 -0
- package/es/chat-engine/hooks/index.js +38 -4
- package/es/chat-engine/hooks/index.js.map +1 -1
- package/es/chat-engine/hooks/useAgentActivity.d.ts +1 -2
- package/es/chat-engine/hooks/useAgentActivity.js +1 -1
- package/es/chat-engine/hooks/useAgentActivity.js.map +1 -1
- package/es/chat-engine/hooks/useAgentState.js +39 -2
- package/es/chat-engine/hooks/useAgentState.js.map +1 -1
- package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
- package/es/chat-engine/hooks/useChat.d.ts +3 -3
- package/es/chat-engine/hooks/useChat.js +40 -2
- package/es/chat-engine/hooks/useChat.js.map +1 -1
- package/es/chat-engine/hooks/useJsonRenderActivity.d.ts +56 -0
- package/es/chat-engine/hooks/useJsonRenderActivity.js +63 -0
- package/es/chat-engine/hooks/useJsonRenderActivity.js.map +1 -0
- package/es/chat-engine/index.d.ts +1 -3
- package/es/chat-engine/index.js +30 -8
- package/es/chat-engine/index.js.map +1 -1
- package/es/chat-filecard/index.js +1 -1
- package/es/chat-loading/index.js +1 -1
- package/es/chat-markdown/index.js +1 -1
- package/es/chat-message/index.js +1 -1
- package/es/chat-sender/index.js +1 -1
- package/es/chat-thinking/index.js +1 -1
- package/es/chatbot/docs/react-best-practice.d.ts +13 -0
- package/es/chatbot/index.js +1 -1
- package/es/index.js +27 -5
- package/es/index.js.map +1 -1
- package/es/style/index.js +1 -1
- package/package.json +6 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../pro-components/chat/chat-engine/core/index.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\n/* eslint-disable class-methods-use-this */\nimport { AGUIAdapter } from './adapters/agui';\nimport { MessageStore } from './store/message';\nimport MessageProcessor from './processor';\nimport { LLMService } from './server';\nimport type {\n AIContentChunkUpdate,\n AIMessageContent,\n ChatMessagesData,\n ChatMessageSetterMode,\n ChatRequestParams,\n ChatServiceConfig,\n ChatServiceConfigSetter,\n ChatStatus,\n IChatEngine,\n SSEChunkData,\n SystemMessage,\n ToolCall,\n} from './type';\nimport { isAIMessage } from './utils';\n\nexport default class ChatEngine implements IChatEngine {\n public messageStore: MessageStore;\n\n private messageProcessor: MessageProcessor;\n\n private llmService!: LLMService;\n\n private config!: ChatServiceConfig;\n\n private lastRequestParams: ChatRequestParams | undefined;\n\n private stopReceive = false;\n\n private aguiAdapter: AGUIAdapter | null = null;\n\n constructor() {\n this.messageProcessor = new MessageProcessor();\n this.messageStore = new MessageStore();\n }\n\n /**\n * 获取当前所有消息\n * @returns 消息数组\n * @description 返回消息存储中的所有消息\n */\n get messages(): ChatMessagesData[] {\n return this.messageStore.messages;\n }\n\n /**\n * 获取当前聊天状态\n * @returns 聊天状态:'idle'、'pending'、'streaming'、'complete'、'stop'或'error'\n * @description 返回最后一条消息的状态,如果没有消息则返回'idle'\n */\n get status(): ChatStatus {\n return this.messages.at(-1)?.status || 'idle';\n }\n\n /**\n * 销毁聊天引擎实例\n * @description 中止请求,清理消息存储和适配器,释放资源\n */\n destroy(): void {\n // 中止当前请求\n this.abortChat();\n\n // 清理消息存储\n this.messageStore.clearHistory();\n\n // 清理适配器\n this.aguiAdapter = null;\n }\n\n /**\n * 初始化聊天引擎\n * @param configSetter 聊天服务配置或配置生成函数\n * @param initialMessages 初始消息列表,用于恢复历史对话\n * @description 设置初始消息、配置服务参数,并根据协议类型初始化适配器\n */\n public init(configSetter: ChatServiceConfigSetter, initialMessages?: ChatMessagesData[]) {\n this.messageStore.initialize(this.convertMessages(initialMessages));\n this.config = typeof configSetter === 'function' ? configSetter() : configSetter || {};\n this.llmService = new LLMService();\n // 初始化AGUI适配器\n if (this.config.protocol === 'agui') {\n this.aguiAdapter = new AGUIAdapter();\n }\n }\n\n /**\n * 发送用户消息并获取AI回复\n * @param requestParams 请求参数,包含用户输入的文本和附件\n * @param sendRequest 是否立即发送\n * @description 创建用户消息和AI消息,并发送请求获取AI回复\n */\n public async sendUserMessage(requestParams: ChatRequestParams, sendRequest = true) {\n const { prompt, attachments, ...customParams } = requestParams;\n\n // 检查条件:prompt和attachments至少传入一个,且如果设置了就不能为空\n const hasValidPrompt = prompt && prompt.trim() !== '';\n const hasValidAttachments = Array.isArray(attachments) && attachments.length > 0;\n\n // 如果两者都没有有效值,则直接返回\n if (!hasValidPrompt && !hasValidAttachments) {\n console.warn('[ChatEngine] sendUserMessage: 必须提供有效的prompt或attachments');\n return;\n }\n\n const userMessage = this.messageProcessor.createUserMessage(prompt, attachments);\n const aiMessage = this.messageProcessor.createAssistantMessage();\n this.messageStore.createMultiMessages([userMessage, aiMessage]);\n if (sendRequest) {\n const params = {\n ...requestParams,\n messageID: aiMessage.id,\n ...customParams, // 透传用户自定义参数\n };\n this.sendRequest(params);\n }\n }\n\n /**\n * 发送系统消息\n * @param msg 系统消息文本内容\n * @description 创建并存储一条系统消息,通常用于设置上下文或控制对话流程\n */\n public async sendSystemMessage(msg: string) {\n this.messageStore.createMessage({\n role: 'system',\n content: [\n {\n type: 'text',\n data: msg,\n },\n ],\n } as SystemMessage);\n }\n\n /**\n * 手动发送AI消息\n * @param options 包含请求参数params、发送消息内容content和是否发送请求的标志sendRequest\n * @description 创建并存储一条AI消息,可选择是否同时发送请求\n */\n public async sendAIMessage(\n options: { params?: ChatRequestParams; content?: AIMessageContent[]; sendRequest?: boolean } = {},\n ) {\n const { params = {}, content, sendRequest = true } = options;\n const newAIMessage = this.messageProcessor.createAssistantMessage({\n content,\n status: sendRequest ? 'pending' : 'complete',\n });\n this.messageStore.createMessage(newAIMessage);\n if (sendRequest) {\n params.messageID = newAIMessage.id;\n await this.sendRequest(params);\n }\n }\n\n /**\n * 中止当前进行中的聊天请求\n * @description 停止接收流式响应,关闭连接,并调用配置的onAbort回调\n */\n public async abortChat() {\n this.stopReceive = true;\n\n if (this.config?.onAbort) {\n await this.config.onAbort();\n }\n\n try {\n this.llmService.closeConnect();\n if (!this.config.stream) {\n // 只有在批量模式下才删除最后一条AI消息\n if (this.messageStore.lastAIMessage?.id) {\n this.messageStore.removeMessage(this.messageStore.lastAIMessage.id);\n }\n }\n } catch (error) {\n console.warn('Error during service cleanup:', error);\n }\n }\n\n /**\n * 注册内容块合并策略\n * @param type 内容类型,如'text'、'markdown'等\n * @param handler 合并处理函数,接收新块和现有块,返回合并后的内容块\n * @description 用于自定义不同类型内容的增量更新逻辑\n */\n public registerMergeStrategy<T extends AIMessageContent>(\n type: T['type'], // 使用类型中定义的type字段作为参数类型\n handler: (chunk: T, existing?: T) => T,\n ) {\n this.messageProcessor.registerHandler(type, handler);\n }\n\n /**\n * 设置消息列表\n * @param messages 要设置的消息数组\n * @param mode 设置模式:'replace'(替换)、'prepend'(前置)、'append'(追加),默认为'replace'\n * @description 用于批量更新消息,如加载历史消息或重置对话\n */\n public setMessages(messages: ChatMessagesData[], mode: ChatMessageSetterMode = 'replace') {\n this.messageStore.setMessages(messages, mode);\n }\n\n /**\n * 清空所有消息\n * @description 清除消息存储中的所有历史记录\n */\n public clearMessages(): void {\n this.messageStore.clearHistory();\n }\n\n /**\n * 重新生成AI回复\n * @param keepVersion 是否保留历史版本,默认为false\n * @description\n * - 当keepVersion=false时:删除最后一条AI消息,创建新消息并重新请求\n * - 当keepVersion=true时:保留旧消息,创建分支消息并重新请求\n */\n public async regenerateAIMessage(keepVersion = false) {\n const { lastAIMessage } = this.messageStore;\n if (!lastAIMessage) return;\n\n if (!keepVersion) {\n // 删除最后一条AI消息\n this.messageStore.removeMessage(lastAIMessage.id);\n } else {\n // todo: 保留历史版本,创建新分支\n this.messageStore.createMessageBranch(lastAIMessage.id);\n }\n\n // 创建新的AI消息\n const newAIMessage = this.messageProcessor.createAssistantMessage();\n this.messageStore.createMessage(newAIMessage);\n\n // 重新发起请求\n const params = {\n ...(this.lastRequestParams || {}),\n messageID: newAIMessage.id,\n prompt: this.lastRequestParams?.prompt ?? '',\n };\n\n await this.sendRequest(params);\n }\n\n /**\n * 发送请求获取AI回复\n * @param params 请求参数\n * @description 根据配置选择流式或批量请求模式,处理响应并更新消息状态\n */\n public async sendRequest(params: ChatRequestParams) {\n const { messageID: id } = params;\n try {\n if (this.config.stream) {\n // 处理sse流式响应模式\n this.stopReceive = false;\n await this.handleStreamRequest(params);\n } else {\n // 处理批量响应模式\n await this.handleBatchRequest(params);\n }\n this.lastRequestParams = params;\n } catch (error) {\n this.setMessageStatus(id!, 'error');\n throw error;\n }\n }\n\n /**\n * 根据名称获取工具调用\n * @param name 工具调用名称\n * @returns 匹配的工具调用对象,如果未找到则返回undefined\n * @description 用于获取特定名称的工具调用信息,仅在AGUI协议下可用\n */\n public getToolcallByName(name: string): ToolCall | undefined {\n return this.aguiAdapter?.getToolcallByName(name);\n }\n\n private async handleBatchRequest(params: ChatRequestParams) {\n const id = params.messageID;\n if (!id) return;\n this.setMessageStatus(id, 'pending');\n const result = await this.llmService.handleBatchRequest(params, this.config);\n if (result) {\n this.processMessageResult(id, result);\n this.setMessageStatus(id, 'complete');\n } else {\n this.setMessageStatus(id, 'error');\n }\n }\n\n private handleError(id: string, error: any) {\n this.setMessageStatus(id, 'error');\n this.config.onError?.(error);\n }\n\n private handleComplete(id: string, isAborted: boolean, params: ChatRequestParams, chunk?: any) {\n // 先调用用户自定义的 onComplete 回调,让业务层决定如何处理\n const customResult = this.config.onComplete?.(isAborted, params, chunk);\n // 如果用户返回了自定义内容,处理这些内容\n if (Array.isArray(customResult) || (customResult && 'status' in customResult)) {\n this.processMessageResult(id, customResult);\n } else {\n // 所有消息内容块都失败才算消息体失败\n const allContentFailed = this.messageStore.messages.every((content) => content.status === 'error');\n // eslint-disable-next-line no-nested-ternary\n this.setMessageStatus(id, isAborted ? 'stop' : allContentFailed ? 'error' : 'complete');\n }\n }\n\n /**\n * 处理流式请求\n * 根据协议类型选择不同的处理策略\n */\n private async handleStreamRequest(params: ChatRequestParams) {\n const id = params.messageID;\n const isAGUI = this.config.protocol === 'agui';\n\n if (id) {\n this.setMessageStatus(id, 'streaming');\n }\n\n // 根据协议类型选择处理策略\n if (isAGUI && this.aguiAdapter) {\n await this.handleAGUIStreamRequest(params, id);\n } else {\n await this.handleDefaultStreamRequest(params, id);\n }\n }\n\n /**\n * 处理AGUI协议的流式请求\n */\n private async handleAGUIStreamRequest(params: ChatRequestParams, messageId?: string) {\n await this.llmService.handleStreamRequest(params, {\n ...this.config,\n onMessage: (chunk: SSEChunkData) => {\n if (this.stopReceive || !messageId) return null;\n\n let result;\n\n // SSE数据 → AGUIEventMapper.mapEvent → 用户自定义onMessage(解析后数据 + 原始chunk)\n // 首先使用AGUI适配器进行通用协议解析\n if (this.aguiAdapter) {\n result = this.aguiAdapter.handleAGUIEvent(chunk, {\n onRunStart: (event) => this.config.onStart?.(JSON.stringify(event)),\n onRunComplete: (isAborted, params, event) => this.handleComplete(messageId, isAborted, params, event),\n onRunError: (error) => this.handleError(messageId, error),\n });\n }\n\n // 然后调用用户自定义的onMessage,传入解析后的结果和原始数据\n if (this.config.onMessage) {\n const userResult = this.config.onMessage(chunk, this.messageStore.getMessageByID(messageId), result);\n // 如果用户返回了自定义结果,使用用户的结果\n if (userResult) {\n result = userResult;\n }\n }\n // 处理消息结果\n this.processMessageResult(messageId, result);\n return result;\n },\n onError: (error) => {\n if (messageId) this.handleError(messageId, error);\n },\n onComplete: (isAborted) => {\n // AGUI的完成事件由AGUIAdapter内部处理,这里只处理中断情况\n if (isAborted && messageId) {\n this.handleComplete(messageId, isAborted, params);\n }\n },\n });\n }\n\n /**\n * 处理默认协议的流式请求\n */\n private async handleDefaultStreamRequest(params: ChatRequestParams, messageId?: string) {\n await this.llmService.handleStreamRequest(params, {\n ...this.config,\n onStart: (chunk) => {\n this.config.onStart?.(chunk);\n },\n onMessage: (chunk: SSEChunkData) => {\n if (this.stopReceive || !messageId) return null;\n\n let result = null;\n\n // 使用默认的消息处理\n if (this.config.onMessage) {\n result = this.config.onMessage(chunk, this.messageStore.getMessageByID(messageId));\n }\n\n // 处理消息结果\n this.processMessageResult(messageId, result);\n return result;\n },\n onError: (error) => {\n if (messageId) this.handleError(messageId, error);\n },\n onComplete: (isAborted) => {\n if (messageId) {\n this.handleComplete(messageId, isAborted, params);\n }\n },\n });\n }\n\n /**\n * 统一处理消息结果\n * 支持单个内容块、多个内容块和增量更新\n */\n private processMessageResult(messageId: string, result: AIMessageContent | AIMessageContent[] | null) {\n if (!result) return;\n\n // 处理工具调用 - 仅在AGUI协议下处理\n // if (this.aguiAdapter) {\n // const toolCalls = this.aguiAdapter.processToolCalls(result);\n // if (toolCalls.length > 0) {\n // this.messageStore.setMessageToolCalls(messageId, toolCalls);\n // }\n // }\n\n if (Array.isArray(result)) {\n // 处理多个内容块\n this.messageStore.updateMultipleContents(messageId, result);\n } else {\n // 处理单个内容块\n this.processContentUpdate(messageId, result);\n }\n }\n\n private convertMessages(messages?: ChatMessagesData[]) {\n if (!messages) return { messageIds: [], messages: [] };\n\n return {\n messageIds: messages.map((msg) => msg.id),\n messages,\n };\n }\n\n private setMessageStatus(messageId: string, status: ChatMessagesData['status']) {\n this.messageStore.setMessageStatus(messageId, status);\n }\n\n // 处理内容更新逻辑\n private processContentUpdate(messageId: string, rawChunk: AIContentChunkUpdate) {\n const message = this.messageStore.messages.find((m) => m.id === messageId);\n if (!message || !isAIMessage(message) || !message.content) return;\n\n let targetIndex: number;\n // 作为新的内容块追加\n if (rawChunk?.strategy === 'append') {\n targetIndex = -1;\n } else {\n // merge 策略:按 type 查找最后一个匹配的类型\n // 通过 type (如 toolcall-${toolCallName}) 来定位要更新的内容块\n targetIndex = message.content.findIndex((content: AIMessageContent) => content.type === rawChunk.type);\n if (targetIndex !== -1) {\n // 找到最后一个匹配的类型(从后往前查找)\n for (let i = message.content.length - 1; i >= 0; i--) {\n if (message.content[i].type === rawChunk.type) {\n targetIndex = i;\n break;\n }\n }\n }\n }\n const processed = this.messageProcessor.processContentUpdate(\n targetIndex !== -1 ? message.content[targetIndex] : undefined,\n rawChunk,\n );\n\n this.messageStore.appendContent(messageId, processed, targetIndex);\n }\n}\n\nexport * from './utils';\nexport * from './adapters/agui';\nexport type * from './type';\n"],"names":["ChatEngine","_classCallCheck","_defineProperty","messageProcessor","MessageProcessor","messageStore","MessageStore","_createClass","key","get","messages","_this$messages$at","at","status","value","destroy","abortChat","clearHistory","aguiAdapter","init","configSetter","initialMessages","initialize","convertMessages","config","llmService","LLMService","protocol","AGUIAdapter","_sendUserMessage","_asyncToGenerator","_regeneratorRuntime","mark","_callee","requestParams","sendRequest","prompt","attachments","customParams","hasValidPrompt","hasValidAttachments","userMessage","aiMessage","params","_args","arguments","wrap","_context","prev","next","length","undefined","_objectWithoutProperties","_excluded","trim","Array","isArray","console","warn","abrupt","createUserMessage","createAssistantMessage","createMultiMessages","_objectSpread","messageID","id","stop","sendUserMessage","_x","apply","_sendSystemMessage","_callee2","msg","_context2","createMessage","role","content","type","data","sendSystemMessage","_callee3","options","_options$params","_options$sendRequest","newAIMessage","_args3","_context3","sendAIMessage","_sendAIMessage","_abortChat","_callee4","_this$config","_this$messageStore$la","_context4","stopReceive","onAbort","closeConnect","stream","lastAIMessage","removeMessage","error","registerMergeStrategy","handler","registerHandler","setMessages","mode","clearMessages","_regenerateAIMessage","_callee5","_this$lastRequestPara","_this$lastRequestPara2","keepVersion","_args5","_context5","createMessageBranch","lastRequestParams","regenerateAIMessage","_sendRequest","_callee6","_t","_context6","handleStreamRequest","handleBatchRequest","setMessageStatus","getToolcallByName","name","_this$aguiAdapter","_handleBatchRequest","_callee7","result","_context7","processMessageResult","handleError","_this$config$onError","_this$config2","onError","call","handleComplete","isAborted","chunk","_this$config$onComple","_this$config3","customResult","onComplete","allContentFailed","every","_handleStreamRequest","_callee8","isAGUI","_context8","handleAGUIStreamRequest","handleDefaultStreamRequest","_callee9","messageId","_this","_context9","onMessage","handleAGUIEvent","onRunStart","event","_this$config$onStart","_this$config4","onStart","JSON","stringify","onRunComplete","onRunError","userResult","getMessageByID","_x6","_x7","_handleAGUIStreamRequest","_handleDefaultStreamRequest","_callee0","_this2","_context0","_this2$config$onStart","_this2$config","_x8","_x9","updateMultipleContents","processContentUpdate","messageIds","map","rawChunk","message","find","m","isAIMessage","targetIndex","strategy","findIndex","i","processed","appendContent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../pro-components/chat/chat-engine/core/index.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\n/* eslint-disable class-methods-use-this */\nimport { AGUIAdapter } from './adapters/agui';\nimport { ChatEventBus, ChatEngineEventType } from './event-bus';\nimport type { ChatEventBusOptions, IChatEventBus } from './event-bus';\nimport { MessageStore } from './store/message';\nimport MessageProcessor from './processor';\nimport { LLMService } from './server';\nimport type {\n AIContentChunkUpdate,\n AIMessageContent,\n ChatMessagesData,\n ChatMessageSetterMode,\n ChatRequestParams,\n ChatServiceConfig,\n ChatServiceConfigSetter,\n ChatStatus,\n IChatEngine,\n SSEChunkData,\n SystemMessage,\n ToolCall,\n} from './type';\nimport { isAIMessage } from './utils';\n\nexport default class ChatEngine implements IChatEngine {\n public messageStore: MessageStore;\n\n /**\n * 事件总线实例\n * @description 用于发布/订阅引擎事件,支持无 UI 场景下的事件分发\n */\n public readonly eventBus: IChatEventBus;\n\n private messageProcessor: MessageProcessor;\n\n private llmService!: LLMService;\n\n private config!: ChatServiceConfig;\n\n private lastRequestParams: ChatRequestParams | undefined;\n\n private stopReceive = false;\n\n private aguiAdapter: AGUIAdapter | null = null;\n\n constructor(eventBusOptions?: ChatEventBusOptions) {\n this.messageProcessor = new MessageProcessor();\n this.messageStore = new MessageStore();\n this.eventBus = new ChatEventBus(eventBusOptions);\n }\n\n /**\n * 获取当前所有消息\n * @returns 消息数组\n * @description 返回消息存储中的所有消息\n */\n get messages(): ChatMessagesData[] {\n return this.messageStore.messages;\n }\n\n /**\n * 获取当前聊天状态\n * @returns 聊天状态:'idle'、'pending'、'streaming'、'complete'、'stop'或'error'\n * @description 返回最后一条消息的状态,如果没有消息则返回'idle'\n */\n get status(): ChatStatus {\n return this.messages.at(-1)?.status || 'idle';\n }\n\n /**\n * 销毁聊天引擎实例\n * @description 中止请求,清理消息存储和适配器,释放资源\n */\n destroy(): void {\n // 发布销毁事件\n this.eventBus.emit(ChatEngineEventType.ENGINE_DESTROY, {\n timestamp: Date.now(),\n });\n\n // 中止当前请求\n this.abortChat();\n\n // 清理消息存储\n this.messageStore.clearHistory();\n\n // 清理适配器\n this.aguiAdapter = null;\n\n // 销毁事件总线\n this.eventBus.destroy();\n }\n\n /**\n * 初始化聊天引擎\n * @param configSetter 聊天服务配置或配置生成函数\n * @param initialMessages 初始消息列表,用于恢复历史对话\n * @description 设置初始消息、配置服务参数,并根据协议类型初始化适配器\n */\n public init(configSetter: ChatServiceConfigSetter, initialMessages?: ChatMessagesData[]) {\n this.messageStore.initialize(this.convertMessages(initialMessages));\n this.config = typeof configSetter === 'function' ? configSetter() : configSetter || {};\n this.llmService = new LLMService();\n\n // 初始化AGUI适配器\n if (this.config.protocol === 'agui') {\n this.aguiAdapter = new AGUIAdapter();\n }\n\n // 发布初始化事件\n this.eventBus.emit(ChatEngineEventType.ENGINE_INIT, {\n timestamp: Date.now(),\n });\n }\n\n /**\n * 发送用户消息并获取AI回复\n * @param requestParams 请求参数,包含用户输入的文本和附件\n * @param sendRequest 是否立即发送\n * @description 创建用户消息和AI消息,并发送请求获取AI回复\n */\n public async sendUserMessage(requestParams: ChatRequestParams, sendRequest = true) {\n const { prompt, attachments, ...customParams } = requestParams;\n\n // 检查条件:prompt和attachments至少传入一个,且如果设置了就不能为空\n const hasValidPrompt = prompt && prompt.trim() !== '';\n const hasValidAttachments = Array.isArray(attachments) && attachments.length > 0;\n\n // 如果两者都没有有效值,则直接返回\n if (!hasValidPrompt && !hasValidAttachments) {\n console.warn('[ChatEngine] sendUserMessage: 必须提供有效的prompt或attachments');\n return;\n }\n\n const userMessage = this.messageProcessor.createUserMessage(prompt, attachments);\n const aiMessage = this.messageProcessor.createAssistantMessage();\n this.messageStore.createMultiMessages([userMessage, aiMessage]);\n\n // 发布消息创建事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_CREATE, {\n message: userMessage,\n messages: this.messages,\n });\n\n if (sendRequest) {\n const params = {\n ...requestParams,\n messageID: aiMessage.id,\n ...customParams, // 透传用户自定义参数\n };\n this.sendRequest(params);\n }\n }\n\n /**\n * 发送系统消息\n * @param msg 系统消息文本内容\n * @description 创建并存储一条系统消息,通常用于设置上下文或控制对话流程\n */\n public async sendSystemMessage(msg: string) {\n const systemMessage = {\n role: 'system',\n content: [\n {\n type: 'text',\n data: msg,\n },\n ],\n } as SystemMessage;\n this.messageStore.createMessage(systemMessage);\n\n // 发布消息创建事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_CREATE, {\n message: systemMessage,\n messages: this.messages,\n });\n }\n\n /**\n * 手动发送AI消息\n * @param options 包含请求参数params、发送消息内容content和是否发送请求的标志sendRequest\n * @description 创建并存储一条AI消息,可选择是否同时发送请求\n */\n public async sendAIMessage(\n options: { params?: ChatRequestParams; content?: AIMessageContent[]; sendRequest?: boolean } = {},\n ) {\n const { params = {}, content, sendRequest = true } = options;\n const newAIMessage = this.messageProcessor.createAssistantMessage({\n content,\n status: sendRequest ? 'pending' : 'complete',\n });\n this.messageStore.createMessage(newAIMessage);\n\n // 发布消息创建事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_CREATE, {\n message: newAIMessage,\n messages: this.messages,\n });\n\n if (sendRequest) {\n params.messageID = newAIMessage.id;\n await this.sendRequest(params);\n }\n }\n\n /**\n * 中止当前进行中的聊天请求\n * @description 停止接收流式响应,关闭连接,并调用配置的onAbort回调\n */\n public async abortChat() {\n this.stopReceive = true;\n\n if (this.config?.onAbort) {\n await this.config.onAbort();\n }\n\n try {\n this.llmService.closeConnect();\n if (!this.config.stream) {\n // 只有在批量模式下才删除最后一条AI消息\n if (this.messageStore.lastAIMessage?.id) {\n const messageId = this.messageStore.lastAIMessage.id;\n this.messageStore.removeMessage(messageId);\n\n // 发布消息删除事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_DELETE, {\n messageId,\n messages: this.messages,\n });\n }\n }\n } catch (error) {\n console.warn('Error during service cleanup:', error);\n }\n }\n\n /**\n * 注册内容块合并策略\n * @param type 内容类型,如'text'、'markdown'等\n * @param handler 合并处理函数,接收新块和现有块,返回合并后的内容块\n * @description 用于自定义不同类型内容的增量更新逻辑\n */\n public registerMergeStrategy<T extends AIMessageContent>(\n type: T['type'], // 使用类型中定义的type字段作为参数类型\n handler: (chunk: T, existing?: T) => T,\n ) {\n this.messageProcessor.registerHandler(type, handler);\n }\n\n /**\n * 设置消息列表\n * @param messages 要设置的消息数组\n * @param mode 设置模式:'replace'(替换)、'prepend'(前置)、'append'(追加),默认为'replace'\n * @description 用于批量更新消息,如加载历史消息或重置对话\n */\n public setMessages(messages: ChatMessagesData[], mode: ChatMessageSetterMode = 'replace') {\n this.messageStore.setMessages(messages, mode);\n }\n\n /**\n * 清空所有消息\n * @description 清除消息存储中的所有历史记录\n */\n public clearMessages(): void {\n this.messageStore.clearHistory();\n\n // 发布消息清空事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_CLEAR, {\n timestamp: Date.now(),\n });\n }\n\n /**\n * 重新生成AI回复\n * @param keepVersion 是否保留历史版本,默认为false\n * @description\n * - 当keepVersion=false时:删除最后一条AI消息,创建新消息并重新请求\n * - 当keepVersion=true时:保留旧消息,创建分支消息并重新请求\n */\n public async regenerateAIMessage(keepVersion = false) {\n const { lastAIMessage } = this.messageStore;\n if (!lastAIMessage) return;\n\n if (!keepVersion) {\n // 删除最后一条AI消息\n this.messageStore.removeMessage(lastAIMessage.id);\n } else {\n // todo: 保留历史版本,创建新分支\n this.messageStore.createMessageBranch(lastAIMessage.id);\n }\n\n // 创建新的AI消息\n const newAIMessage = this.messageProcessor.createAssistantMessage();\n this.messageStore.createMessage(newAIMessage);\n\n // 重新发起请求\n const params = {\n ...(this.lastRequestParams || {}),\n messageID: newAIMessage.id,\n prompt: this.lastRequestParams?.prompt ?? '',\n };\n\n await this.sendRequest(params);\n }\n\n /**\n * 发送请求获取AI回复\n * @param params 请求参数\n * @description 根据配置选择流式或批量请求模式,处理响应并更新消息状态\n */\n public async sendRequest(params: ChatRequestParams) {\n const { messageID: id } = params;\n\n // 发布请求开始事件\n this.eventBus.emit(ChatEngineEventType.REQUEST_START, {\n params,\n messageId: id,\n });\n\n try {\n if (this.config.stream) {\n // 处理sse流式响应模式\n this.stopReceive = false;\n await this.handleStreamRequest(params);\n } else {\n // 处理批量响应模式\n await this.handleBatchRequest(params);\n }\n this.lastRequestParams = params;\n } catch (error) {\n this.setMessageStatus(id!, 'error');\n\n // 发布请求错误事件\n this.eventBus.emit(ChatEngineEventType.REQUEST_ERROR, {\n messageId: id!,\n error,\n params,\n });\n\n throw error;\n }\n }\n\n /**\n * 根据名称获取工具调用\n * @param name 工具调用名称\n * @returns 匹配的工具调用对象,如果未找到则返回undefined\n * @description 用于获取特定名称的工具调用信息,仅在AGUI协议下可用\n */\n public getToolcallByName(name: string): ToolCall | undefined {\n return this.aguiAdapter?.getToolcallByName(name);\n }\n\n private async handleBatchRequest(params: ChatRequestParams) {\n const id = params.messageID;\n if (!id) return;\n this.setMessageStatus(id, 'pending');\n const result = await this.llmService.handleBatchRequest(params, this.config);\n if (result) {\n this.processMessageResult(id, result);\n this.setMessageStatus(id, 'complete');\n\n // 发布请求完成事件\n const message = this.messageStore.getMessageByID(id);\n if (message) {\n this.eventBus.emit(ChatEngineEventType.REQUEST_COMPLETE, {\n messageId: id,\n params,\n message,\n });\n }\n } else {\n this.setMessageStatus(id, 'error');\n\n // 发布请求错误事件\n this.eventBus.emit(ChatEngineEventType.REQUEST_ERROR, {\n messageId: id,\n error: new Error('Batch request returned empty result'),\n params,\n });\n }\n }\n\n private handleError(id: string, error: unknown) {\n\n this.setMessageStatus(id, 'error');\n this.config.onError?.(error as Error);\n\n // 发布请求错误事件\n this.eventBus.emit(ChatEngineEventType.REQUEST_ERROR, {\n messageId: id,\n error,\n });\n }\n\n private handleComplete(id: string, isAborted: boolean, params: ChatRequestParams, chunk?: unknown) {\n // 先调用用户自定义的 onComplete 回调,让业务层决定如何处理\n const customResult = this.config.onComplete?.(isAborted, params, chunk);\n // 如果用户返回了自定义内容,处理这些内容\n if (Array.isArray(customResult) || (customResult && 'status' in customResult)) {\n this.processMessageResult(id, customResult);\n } else {\n // 所有消息内容块检查,只要有一个失败,消息的status就是失败\n const allContentFailed = this.messageStore.messages.find((content) => content.status === 'error');\n // eslint-disable-next-line no-nested-ternary\n this.setMessageStatus(id, isAborted ? 'stop' : allContentFailed ? 'error' : 'complete');\n }\n\n // 发布请求完成/中止事件\n const message = this.messageStore.getMessageByID(id);\n if (message) {\n if (isAborted) {\n this.eventBus.emit(ChatEngineEventType.REQUEST_ABORT, {\n messageId: id,\n params,\n });\n } else {\n this.eventBus.emit(ChatEngineEventType.REQUEST_COMPLETE, {\n messageId: id,\n params,\n message,\n });\n }\n }\n }\n\n /**\n * 处理流式请求\n * 根据协议类型选择不同的处理策略\n */\n private async handleStreamRequest(params: ChatRequestParams) {\n const id = params.messageID;\n const isAGUI = this.config.protocol === 'agui';\n\n if (id) {\n this.setMessageStatus(id, 'streaming');\n }\n\n // 根据协议类型选择处理策略\n if (isAGUI && this.aguiAdapter) {\n await this.handleAGUIStreamRequest(params, id);\n } else {\n await this.handleDefaultStreamRequest(params, id);\n }\n }\n\n /**\n * 处理AGUI协议的流式请求\n */\n private async handleAGUIStreamRequest(params: ChatRequestParams, messageId?: string) {\n await this.llmService.handleStreamRequest(params, {\n ...this.config,\n onMessage: (chunk: SSEChunkData) => {\n if (this.stopReceive || !messageId) return null;\n\n let result: AIMessageContent | AIMessageContent[] | null = null;\n\n // SSE数据 → AGUIEventMapper.mapEvent → 用户自定义onMessage(解析后数据 + 原始chunk)\n // 首先使用AGUI适配器进行通用协议解析\n if (this.aguiAdapter) {\n result = this.aguiAdapter.handleAGUIEvent(chunk, {\n onRunStart: (event) => {\n // 重置适配器状态,确保新一轮对话从干净状态开始\n this.aguiAdapter?.reset();\n this.config.onStart?.(JSON.stringify(event));\n // 发布 AGUI 运行开始事件\n this.eventBus.emit(ChatEngineEventType.AGUI_RUN_START, {\n runId: event.runId || '',\n threadId: event.threadId,\n timestamp: Date.now(),\n });\n },\n onRunComplete: (isAborted, requestParams, event) => {\n this.handleComplete(messageId, isAborted, requestParams, event);\n // 发布 AGUI 运行完成事件\n if (!isAborted) {\n this.eventBus.emit(ChatEngineEventType.AGUI_RUN_COMPLETE, {\n runId: event?.runId || '',\n threadId: event?.threadId,\n timestamp: Date.now(),\n });\n }\n },\n onRunError: (error) => {\n this.handleError(messageId, error);\n // 发布 AGUI 运行错误事件\n this.eventBus.emit(ChatEngineEventType.AGUI_RUN_ERROR, {\n error,\n });\n },\n });\n }\n\n // 然后调用用户自定义的onMessage,传入解析后的结果和原始数据\n if (this.config.onMessage) {\n const userResult = this.config.onMessage(chunk, this.messageStore.getMessageByID(messageId), result);\n // 如果用户返回了自定义结果,使用用户的结果\n if (userResult) {\n result = userResult;\n }\n }\n\n // 发布流数据事件\n this.eventBus.emit(ChatEngineEventType.REQUEST_STREAM, {\n messageId,\n chunk,\n content: result,\n });\n\n // 处理消息结果\n this.processMessageResult(messageId, result);\n return result;\n },\n onError: (error) => {\n if (messageId) this.handleError(messageId, error);\n },\n onComplete: (isAborted) => {\n // AGUI的完成事件由AGUIAdapter内部处理,这里只处理中断情况\n if (isAborted && messageId) {\n this.handleComplete(messageId, isAborted, params);\n }\n },\n });\n }\n\n /**\n * 处理默认协议的流式请求\n */\n private async handleDefaultStreamRequest(params: ChatRequestParams, messageId?: string) {\n await this.llmService.handleStreamRequest(params, {\n ...this.config,\n onStart: (chunk) => {\n this.config.onStart?.(chunk);\n },\n onMessage: (chunk: SSEChunkData) => {\n if (this.stopReceive || !messageId) return null;\n\n let result = null;\n\n // 使用默认的消息处理\n if (this.config.onMessage) {\n result = this.config.onMessage(chunk, this.messageStore.getMessageByID(messageId));\n }\n\n // 发布流数据事件\n this.eventBus.emit(ChatEngineEventType.REQUEST_STREAM, {\n messageId,\n chunk,\n content: result,\n });\n\n // 处理消息结果\n this.processMessageResult(messageId, result);\n return result;\n },\n onError: (error) => {\n if (messageId) this.handleError(messageId, error);\n },\n onComplete: (isAborted) => {\n if (messageId) {\n this.handleComplete(messageId, isAborted, params);\n }\n },\n });\n }\n\n /**\n * 统一处理消息结果\n * 支持单个内容块、多个内容块和增量更新\n */\n private processMessageResult(messageId: string, result: AIMessageContent | AIMessageContent[] | null) {\n if (!result) return;\n\n // 处理工具调用 - 仅在AGUI协议下处理\n // if (this.aguiAdapter) {\n // const toolCalls = this.aguiAdapter.processToolCalls(result);\n // if (toolCalls.length > 0) {\n // this.messageStore.setMessageToolCalls(messageId, toolCalls);\n // }\n // }\n\n if (Array.isArray(result)) {\n // 处理多个内容块\n this.messageStore.updateMultipleContents(messageId, result);\n } else {\n // 处理单个内容块\n this.processContentUpdate(messageId, result);\n }\n\n // 发布消息更新事件\n const message = this.messageStore.getMessageByID(messageId);\n if (message) {\n this.eventBus.emit(ChatEngineEventType.MESSAGE_UPDATE, {\n messageId,\n content: result,\n message,\n });\n\n // AG-UI 协议:发布细粒度事件\n if (this.aguiAdapter) {\n this.emitAGUIDetailEvents(messageId, result);\n }\n }\n }\n\n /**\n * 发布 AG-UI 细粒度事件\n * 根据内容类型分发到对应的事件通道\n * todo: 这里的类型 any问题\n */\n private emitAGUIDetailEvents(messageId: string, result: AIMessageContent | AIMessageContent[]) {\n const contents = Array.isArray(result) ? result : [result];\n for (const content of contents) {\n // Activity 事件\n if ((content as any).data.activityType) {\n this.eventBus.emit(ChatEngineEventType.AGUI_ACTIVITY, {\n activityType: (content as any).data.activityType,\n messageId,\n content: (content as any)?.data?.content,\n });\n }\n\n // ToolCall 事件\n if ((content as any)?.data?.eventType?.startsWith('TOOL_CALL')) {\n this.eventBus.emit(ChatEngineEventType.AGUI_TOOLCALL, {\n toolCall: (content as any).data,\n eventType: (content as any).data.eventType,\n });\n }\n }\n }\n\n private convertMessages(messages?: ChatMessagesData[]) {\n if (!messages) return { messageIds: [], messages: [] };\n\n return {\n messageIds: messages.map((msg) => msg.id),\n messages,\n };\n }\n\n private setMessageStatus(messageId: string, status: ChatMessagesData['status']) {\n const previousStatus = this.messageStore.getMessageByID(messageId)?.status;\n this.messageStore.setMessageStatus(messageId, status);\n\n // 发布消息状态变化事件\n if (status) {\n this.eventBus.emit(ChatEngineEventType.MESSAGE_STATUS_CHANGE, {\n messageId,\n status,\n previousStatus,\n });\n }\n }\n\n // 处理内容更新逻辑\n private processContentUpdate(messageId: string, rawChunk: AIContentChunkUpdate) {\n const message = this.messageStore.messages.find((m) => m.id === messageId);\n if (!message || !isAIMessage(message) || !message.content) return;\n\n let targetIndex: number;\n // 作为新的内容块追加\n if ((rawChunk as any)?.strategy === 'append') {\n targetIndex = -1;\n } else {\n // merge 策略:按 type 查找最后一个匹配的类型\n // 通过 type (如 toolcall-${toolCallName}) 来定位要更新的内容块\n targetIndex = message.content.findIndex((content: AIMessageContent) => content.type === rawChunk.type);\n if (targetIndex !== -1) {\n // 找到最后一个匹配的类型(从后往前查找)\n for (let i = message.content.length - 1; i >= 0; i--) {\n if (message.content[i].type === rawChunk.type) {\n targetIndex = i;\n break;\n }\n }\n }\n }\n const processed = this.messageProcessor.processContentUpdate(\n targetIndex !== -1 ? message.content[targetIndex] : undefined,\n rawChunk,\n );\n\n this.messageStore.appendContent(messageId, processed, targetIndex);\n }\n}\n\nexport * from './utils';\nexport * from './adapters/agui';\nexport * from './event-bus';\nexport { stateManager } from './adapters/agui/state-manager';\nexport { activityManager } from './adapters/agui/activity-manager';\nexport type * from './type';\n"],"names":["ChatEngine","eventBusOptions","_classCallCheck","_defineProperty","messageProcessor","MessageProcessor","messageStore","MessageStore","eventBus","ChatEventBus","_createClass","key","get","messages","_this$messages$at","at","status","value","destroy","emit","ChatEngineEventType","ENGINE_DESTROY","timestamp","Date","now","abortChat","clearHistory","aguiAdapter","init","configSetter","initialMessages","initialize","convertMessages","config","llmService","LLMService","protocol","AGUIAdapter","ENGINE_INIT","_sendUserMessage","_asyncToGenerator","_regeneratorRuntime","mark","_callee","requestParams","sendRequest","prompt","attachments","customParams","hasValidPrompt","hasValidAttachments","userMessage","aiMessage","params","_args","arguments","wrap","_context","prev","next","length","undefined","_objectWithoutProperties","_excluded","trim","Array","isArray","console","warn","abrupt","createUserMessage","createAssistantMessage","createMultiMessages","MESSAGE_CREATE","message","_objectSpread","messageID","id","stop","sendUserMessage","_x","apply","_sendSystemMessage","_callee2","msg","systemMessage","_context2","role","content","type","data","createMessage","sendSystemMessage","_callee3","options","_options$params","_options$sendRequest","newAIMessage","_args3","_context3","sendAIMessage","_sendAIMessage","_abortChat","_callee4","_this$config","_this$messageStore$la","messageId","_context4","stopReceive","onAbort","closeConnect","stream","lastAIMessage","removeMessage","MESSAGE_DELETE","error","registerMergeStrategy","handler","registerHandler","setMessages","mode","clearMessages","MESSAGE_CLEAR","_regenerateAIMessage","_callee5","_this$lastRequestPara","_this$lastRequestPara2","keepVersion","_args5","_context5","createMessageBranch","lastRequestParams","regenerateAIMessage","_sendRequest","_callee6","_t","_context6","REQUEST_START","handleStreamRequest","handleBatchRequest","setMessageStatus","REQUEST_ERROR","getToolcallByName","name","_this$aguiAdapter","_handleBatchRequest","_callee7","result","_context7","processMessageResult","getMessageByID","REQUEST_COMPLETE","Error","handleError","_this$config$onError","_this$config2","onError","call","handleComplete","isAborted","chunk","_this$config$onComple","_this$config3","customResult","onComplete","allContentFailed","find","REQUEST_ABORT","_handleStreamRequest","_callee8","isAGUI","_context8","handleAGUIStreamRequest","handleDefaultStreamRequest","_callee9","_this","_context9","onMessage","handleAGUIEvent","onRunStart","event","_this$aguiAdapter2","_this$config$onStart","_this$config4","reset","onStart","JSON","stringify","AGUI_RUN_START","runId","threadId","onRunComplete","AGUI_RUN_COMPLETE","onRunError","AGUI_RUN_ERROR","userResult","REQUEST_STREAM","_x6","_x7","_handleAGUIStreamRequest","_handleDefaultStreamRequest","_callee0","_this2","_context0","_this2$config$onStart","_this2$config","_x8","_x9","updateMultipleContents","processContentUpdate","MESSAGE_UPDATE","emitAGUIDetailEvents","contents","_iterator","_createForOfIteratorHelper","_step","s","n","done","_content$data2","activityType","_content$data","AGUI_ACTIVITY","eventType","startsWith","AGUI_TOOLCALL","toolCall","err","e","f","messageIds","map","_this$messageStore$ge","previousStatus","MESSAGE_STATUS_CHANGE","rawChunk","m","isAIMessage","targetIndex","strategy","findIndex","i","processed","appendContent"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tdesign v1.0.2-alpha.
|
|
2
|
+
* tdesign v1.0.2-alpha.15
|
|
3
3
|
* (c) 2026 tdesign
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
@@ -37,7 +37,7 @@ var LLMService = /*#__PURE__*/function () {
|
|
|
37
37
|
value: function () {
|
|
38
38
|
var _handleBatchRequest = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(params, config) {
|
|
39
39
|
var _config$onRequest;
|
|
40
|
-
var req, data, _config$onComplete, result, _config$onError2, _t, _t2;
|
|
40
|
+
var req, url, data, _config$onComplete, result, _config$onError2, _t, _t2;
|
|
41
41
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
42
42
|
while (1) switch (_context.prev = _context.next) {
|
|
43
43
|
case 0:
|
|
@@ -57,9 +57,10 @@ var LLMService = /*#__PURE__*/function () {
|
|
|
57
57
|
_t = params;
|
|
58
58
|
case 2:
|
|
59
59
|
req = _t;
|
|
60
|
+
url = req.url || config.endpoint;
|
|
60
61
|
_context.prev = 3;
|
|
61
62
|
_context.next = 4;
|
|
62
|
-
return this.batchClient.request(
|
|
63
|
+
return this.batchClient.request(url, {
|
|
63
64
|
method: "POST",
|
|
64
65
|
headers: _objectSpread({
|
|
65
66
|
"Content-Type": "application/json"
|
|
@@ -97,28 +98,29 @@ var LLMService = /*#__PURE__*/function () {
|
|
|
97
98
|
value: function () {
|
|
98
99
|
var _handleStreamRequest = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(params, config) {
|
|
99
100
|
var _config$onRequest2;
|
|
100
|
-
var req, _t3;
|
|
101
|
+
var req, url, _t3;
|
|
101
102
|
return _regeneratorRuntime.wrap(function (_context2) {
|
|
102
103
|
while (1) switch (_context2.prev = _context2.next) {
|
|
103
104
|
case 0:
|
|
104
|
-
|
|
105
|
-
_context2.next = 1;
|
|
106
|
-
break;
|
|
107
|
-
}
|
|
108
|
-
return _context2.abrupt("return");
|
|
109
|
-
case 1:
|
|
110
|
-
this.sseClient = new SSEClient(config.endpoint);
|
|
111
|
-
_context2.next = 2;
|
|
105
|
+
_context2.next = 1;
|
|
112
106
|
return (_config$onRequest2 = config.onRequest) === null || _config$onRequest2 === void 0 ? void 0 : _config$onRequest2.call(config, params);
|
|
113
|
-
case
|
|
107
|
+
case 1:
|
|
114
108
|
_t3 = _context2.sent;
|
|
115
109
|
if (_t3) {
|
|
116
|
-
_context2.next =
|
|
110
|
+
_context2.next = 2;
|
|
117
111
|
break;
|
|
118
112
|
}
|
|
119
113
|
_t3 = {};
|
|
120
|
-
case
|
|
114
|
+
case 2:
|
|
121
115
|
req = _t3;
|
|
116
|
+
url = req.url || config.endpoint;
|
|
117
|
+
if (url) {
|
|
118
|
+
_context2.next = 3;
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
return _context2.abrupt("return");
|
|
122
|
+
case 3:
|
|
123
|
+
this.sseClient = new SSEClient(url);
|
|
122
124
|
this.sseClient.on("start", function (chunk) {
|
|
123
125
|
var _config$onStart;
|
|
124
126
|
(_config$onStart = config.onStart) === null || _config$onStart === void 0 || _config$onStart.call(config, chunk);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-service.js","sources":["../../../../../pro-components/chat/chat-engine/core/server/llm-service.ts"],"sourcesContent":["import type { AIMessageContent, ChatRequestParams, ChatServiceConfig, SSEChunkData } from '../type';\nimport { LoggerManager } from '../utils/logger';\nimport { BatchClient } from './batch-client';\nimport { SSEClient } from './sse-client';\n\n// 与原有接口保持兼容\nexport interface ILLMService {\n /**\n * 处理批量请求(非流式)\n */\n handleBatchRequest(\n params: ChatRequestParams,\n config: ChatServiceConfig,\n ): Promise<AIMessageContent | AIMessageContent[]>;\n\n /**\n * 处理流式请求\n */\n handleStreamRequest(params: ChatRequestParams, config: ChatServiceConfig): Promise<void>;\n}\n\n/**\n * Enhanced LLM Service with error handling and connection management\n */\nexport class LLMService implements ILLMService {\n private sseClient: SSEClient | null = null;\n\n private batchClient: BatchClient | null = null;\n\n private isDestroyed = false;\n\n private logger = LoggerManager.getLogger();\n\n /**\n * 处理批量请求(非流式)\n */\n async handleBatchRequest(\n params: ChatRequestParams,\n config: ChatServiceConfig,\n ): Promise<AIMessageContent | AIMessageContent[]> {\n // 确保只有一个客户端实例\n this.batchClient = this.batchClient || new BatchClient();\n this.batchClient.on('error', (error) => {\n config.onError?.(error);\n });\n\n const req = (await config.onRequest?.(params)) || params;\n\n try {\n const data = await this.batchClient.request<AIMessageContent>(\n config.endpoint!,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...req.headers,\n },\n body: req.body,\n },\n config.timeout, // 现在timeout属性已存在\n );\n if (data) {\n const result = config.onComplete?.(false, req, data);\n // 如果onComplete返回了内容,使用它;否则使用原始data\n return result || data;\n }\n // 如果没有data,返回空数组\n return [];\n } catch (error) {\n config.onError?.(error as Error | Response);\n throw error;\n }\n }\n\n /**\n * 处理流式请求\n */\n async handleStreamRequest(params: ChatRequestParams, config: ChatServiceConfig): Promise<void> {\n if (!config.endpoint) return;\n this.sseClient = new SSEClient(config.endpoint);\n\n const req = (await config.onRequest?.(params)) || {};\n\n // 设置事件处理器\n this.sseClient.on('start', (chunk) => {\n config.onStart?.(chunk);\n });\n\n this.sseClient.on('message', (msg) => {\n config.onMessage?.(msg as SSEChunkData);\n });\n\n this.sseClient.on('error', (error) => {\n config.onError?.(error);\n });\n\n this.sseClient.on('complete', (isAborted) => {\n config.onComplete?.(isAborted, req);\n });\n\n await this.sseClient.connect(req);\n }\n\n /**\n * 关闭所有客户端连接\n */\n closeConnect(): void {\n if (this.sseClient) {\n this.sseClient.abort();\n this.sseClient = null;\n }\n if (this.batchClient) {\n this.batchClient.abort();\n this.batchClient = null;\n }\n }\n\n /**\n * 获取连接统计\n */\n getSSEStats(): { id: string; status: string; info: any } | null {\n if (!this.sseClient) return null;\n\n return {\n id: this.sseClient.connectionId,\n status: this.sseClient.getStatus(),\n info: this.sseClient.getInfo(),\n };\n }\n\n /**\n * 销毁服务\n */\n async destroy(): Promise<void> {\n this.isDestroyed = true;\n this.closeConnect();\n this.logger.info('Enhanced LLM Service destroyed');\n }\n}\n"],"names":["LLMService","_classCallCheck","_defineProperty","LoggerManager","getLogger","_createClass","key","value","_handleBatchRequest","_asyncToGenerator","_regeneratorRuntime","mark","_callee","params","config","_config$onRequest","req","data","_config$onComplete","result","_config$onError2","_t","_t2","wrap","_context","prev","next","batchClient","BatchClient","on","error","_config$onError","onError","call","onRequest","sent","request","endpoint","method","headers","_objectSpread","body","timeout","onComplete","abrupt","stop","handleBatchRequest","_x","_x2","apply","arguments","_handleStreamRequest","_callee2","_config$onRequest2","_t3","_context2","sseClient","SSEClient","chunk","_config$onStart","onStart","msg","_config$onMessage","onMessage","_config$onError3","isAborted","_config$onComplete2","connect","handleStreamRequest","_x3","_x4","closeConnect","abort","getSSEStats","id","connectionId","status","getStatus","info","getInfo","_destroy","_callee3","_context3","isDestroyed","logger","destroy"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"llm-service.js","sources":["../../../../../pro-components/chat/chat-engine/core/server/llm-service.ts"],"sourcesContent":["import type { AIMessageContent, ChatRequestParams, ChatServiceConfig, SSEChunkData } from '../type';\nimport { LoggerManager } from '../utils/logger';\nimport { BatchClient } from './batch-client';\nimport { SSEClient } from './sse-client';\n\n// 与原有接口保持兼容\nexport interface ILLMService {\n /**\n * 处理批量请求(非流式)\n */\n handleBatchRequest(\n params: ChatRequestParams,\n config: ChatServiceConfig,\n ): Promise<AIMessageContent | AIMessageContent[]>;\n\n /**\n * 处理流式请求\n */\n handleStreamRequest(params: ChatRequestParams, config: ChatServiceConfig): Promise<void>;\n}\n\n/**\n * Enhanced LLM Service with error handling and connection management\n */\nexport class LLMService implements ILLMService {\n private sseClient: SSEClient | null = null;\n\n private batchClient: BatchClient | null = null;\n\n private isDestroyed = false;\n\n private logger = LoggerManager.getLogger();\n\n /**\n * 处理批量请求(非流式)\n */\n async handleBatchRequest(\n params: ChatRequestParams,\n config: ChatServiceConfig,\n ): Promise<AIMessageContent | AIMessageContent[]> {\n // 确保只有一个客户端实例\n this.batchClient = this.batchClient || new BatchClient();\n this.batchClient.on('error', (error) => {\n config.onError?.(error);\n });\n\n const req = (await config.onRequest?.(params)) || params;\n // 支持 onRequest 返回 url 覆盖默认 endpoint\n const url = (req as any).url || config.endpoint;\n\n try {\n const data = await this.batchClient.request<AIMessageContent>(\n url!,\n {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...req.headers,\n },\n body: req.body,\n },\n config.timeout,\n );\n if (data) {\n const result = config.onComplete?.(false, req, data);\n // 如果onComplete返回了内容,使用它;否则使用原始data\n return result || data;\n }\n // 如果没有data,返回空数组\n return [];\n } catch (error) {\n config.onError?.(error as Error | Response);\n throw error;\n }\n }\n\n /**\n * 处理流式请求\n */\n async handleStreamRequest(params: ChatRequestParams, config: ChatServiceConfig): Promise<void> {\n const req = (await config.onRequest?.(params)) || {};\n // 支持 onRequest 返回 url 覆盖默认 endpoint\n const url = (req as any).url || config.endpoint;\n\n if (!url) return;\n this.sseClient = new SSEClient(url);\n\n // 设置事件处理器\n this.sseClient.on('start', (chunk) => {\n config.onStart?.(chunk);\n });\n\n this.sseClient.on('message', (msg) => {\n config.onMessage?.(msg as SSEChunkData);\n });\n\n this.sseClient.on('error', (error) => {\n config.onError?.(error);\n });\n\n this.sseClient.on('complete', (isAborted) => {\n config.onComplete?.(isAborted, req);\n });\n\n await this.sseClient.connect(req);\n }\n\n /**\n * 关闭所有客户端连接\n */\n closeConnect(): void {\n if (this.sseClient) {\n this.sseClient.abort();\n this.sseClient = null;\n }\n if (this.batchClient) {\n this.batchClient.abort();\n this.batchClient = null;\n }\n }\n\n /**\n * 获取连接统计\n */\n getSSEStats(): { id: string; status: string; info: any } | null {\n if (!this.sseClient) return null;\n\n return {\n id: this.sseClient.connectionId,\n status: this.sseClient.getStatus(),\n info: this.sseClient.getInfo(),\n };\n }\n\n /**\n * 销毁服务\n */\n async destroy(): Promise<void> {\n this.isDestroyed = true;\n this.closeConnect();\n this.logger.info('Enhanced LLM Service destroyed');\n }\n}\n"],"names":["LLMService","_classCallCheck","_defineProperty","LoggerManager","getLogger","_createClass","key","value","_handleBatchRequest","_asyncToGenerator","_regeneratorRuntime","mark","_callee","params","config","_config$onRequest","req","url","data","_config$onComplete","result","_config$onError2","_t","_t2","wrap","_context","prev","next","batchClient","BatchClient","on","error","_config$onError","onError","call","onRequest","sent","endpoint","request","method","headers","_objectSpread","body","timeout","onComplete","abrupt","stop","handleBatchRequest","_x","_x2","apply","arguments","_handleStreamRequest","_callee2","_config$onRequest2","_t3","_context2","sseClient","SSEClient","chunk","_config$onStart","onStart","msg","_config$onMessage","onMessage","_config$onError3","isAborted","_config$onComplete2","connect","handleStreamRequest","_x3","_x4","closeConnect","abort","getSSEStats","id","connectionId","status","getStatus","info","getInfo","_destroy","_callee3","_context3","isDestroyed","logger","destroy"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAwBO,IAAMA,UAAkC,gBAAA,YAAA;AAAA,EAAA,SAAAA,UAAA,GAAA;AAAAC,IAAAA,eAAA,OAAAD,UAAA,CAAA,CAAA;AAAAE,IAAAA,eAAA,oBACP,IAAA,CAAA,CAAA;AAAAA,IAAAA,eAAA,sBAEI,IAAA,CAAA,CAAA;AAAAA,IAAAA,eAAA,sBAEpB,KAAA,CAAA,CAAA;AAAAA,IAAAA,eAAA,CAELC,IAAAA,EAAAA,QAAAA,EAAAA,cAAcC,SAAU,EAAA,CAAA,CAAA;AAAA,GAAA;EAAA,OAAAC,YAAA,CAAAL,UAAA,EAAA,CAAA;IAAAM,GAAA,EAAA,oBAAA;IAAAC,KAAA,EAAA,YAAA;AAAA,MAAA,IAAAC,mBAAA,GAAAC,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CAKzC,SAAAC,OAAAA,CACEC,MAAA,EACAC,MACgD,EAAA;AAAA,QAAA,IAAAC,iBAAA,CAAA;AAAA,QAAA,IAAAC,GAAA,EAAAC,GAAA,EAAAC,IAAA,EAAAC,kBAAA,EAAAC,MAAA,EAAAC,gBAAA,EAAAC,EAAA,EAAAC,GAAA,CAAA;AAAA,QAAA,OAAAb,mBAAA,CAAAc,IAAA,CAAA,UAAAC,QAAA,EAAA;AAAA,UAAA,OAAA,CAAA,EAAA,QAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;AAAA,YAAA,KAAA,CAAA;cAEhD,IAAA,CAAKC,WAAc,GAAA,IAAA,CAAKA,WAAe,IAAA,IAAIC,WAAY,EAAA,CAAA;cACvD,IAAA,CAAKD,WAAY,CAAAE,EAAA,CAAG,OAAS,EAAA,UAACC,KAAU,EAAA;AAAA,gBAAA,IAAAC,eAAA,CAAA;AACtC,gBAAA,CAAAA,eAAA,GAAAlB,MAAA,CAAOmB,yCAAPD,KAAAA,CAAAA,IAAAA,eAAA,CAAAE,IAAA,CAAApB,MAAA,EAAiBiB,KAAK,CAAA,CAAA;AACxB,eAAC,CAAA,CAAA;AAAAN,cAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OAAA,CAAAZ,iBAAA,GAEkBD,MAAO,CAAAqB,SAAA,MAAApB,IAAAA,IAAAA,iBAAA,KAAPA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,iBAAA,CAAAmB,IAAA,CAAApB,MAAO,EAAYD,MAAM,CAAM,CAAA;AAAA,YAAA,KAAA,CAAA;cAAAS,EAAA,GAAAG,QAAA,CAAAW,IAAA,CAAA;AAAA,cAAA,IAAAd,EAAA,EAAA;AAAAG,gBAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;AAAA,gBAAA,MAAA;AAAA,eAAA;AAAAL,cAAAA,EAAA,GAAAT,MAAA,CAAA;AAAA,YAAA,KAAA,CAAA;AAA5CG,cAAAA,GAAO,GAAAM,EAAA,CAAA;AAEPL,cAAAA,GAAA,GAAOD,GAAY,CAAAC,GAAA,IAAOH,MAAO,CAAAuB,QAAA,CAAA;AAAAZ,cAAAA,QAAA,CAAAC,IAAA,GAAA,CAAA,CAAA;AAAAD,cAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OAGlB,IAAA,CAAKC,WAAY,CAAAU,OAAA,CAClCrB,GAAA,EACA;AACEsB,gBAAAA,MAAQ,EAAA,MAAA;AACRC,gBAAAA,OAAS,EAAAC,aAAA,CAAA;AACP,kBAAA,cAAgB,EAAA,kBAAA;iBACbzB,EAAAA,GAAI,CAAAwB,OAAA,CACT;gBACAE,MAAM1B,GAAI,CAAA0B,IAAAA;AACZ,eAAA,EACA5B,MAAO,CAAA6B,OACT,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;cAXMzB,IAAA,GAAAO,QAAA,CAAAW,IAAA,CAAA;AAAA,cAAA,IAAA,CAYFlB,IAAM,EAAA;AAAAO,gBAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;AAAA,gBAAA,MAAA;AAAA,eAAA;cACFP,MAAS,GAAA,CAAAD,kBAAA,GAAAL,MAAA,CAAO8B,UAAa,MAAA,IAAA,IAAAzB,kBAAA,KAApBA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,kBAAA,CAAAe,IAAA,CAAApB,MAAA,EAAoB,KAAA,EAAOE,KAAKE,IAAI,CAAA,CAAA;AAAA,cAAA,OAAAO,QAAA,CAAAoB,MAAA,CAE5CzB,QAAAA,EAAAA,MAAU,IAAAF,IAAA,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,OAAAO,QAAA,CAAAoB,MAAA,CAAA,QAAA,EAGZ,EAAC,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;AAAApB,cAAAA,QAAA,CAAAC,IAAA,GAAA,CAAA,CAAA;AAAAH,cAAAA,GAAA,GAAAE,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAER,cAAA,CAAAJ,gBAAA,GAAAP,MAAA,CAAOmB,0CAAPZ,KAAAA,CAAAA,IAAAA,gBAAA,CAAAa,IAAA,CAAApB,MAAA,EAAAS,GAA0C,CAAA,CAAA;AAAA,cAAA,MAAAA,GAAA,CAAA;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;cAAA,OAAAE,QAAA,CAAAqB,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA,EAAAlC,OAAA,EAAA,IAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;OAG9C,CAAA,CAAA,CAAA;AAAA,MAAA,SAtCMmC,kBACJA,CAAAC,EAAA,EAAAC,GAAA,EAAA;AAAA,QAAA,OAAAzC,mBAAA,CAAA0C,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,OAAA;AAAA,MAAA,OADIJ,kBACJ,CAAA;AAAA,KAAA,EAAA;AAAA,GAAA,EAAA;IAAAzC,GAAA,EAAA,qBAAA;IAAAC,KAAA,EAAA,YAAA;AAAA,MAAA,IAAA6C,oBAAA,GAAA3C,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CA0CF,SAAA0C,QAAAA,CAA0BxC,MAAA,EAA2BC,MAA0C,EAAA;AAAA,QAAA,IAAAwC,kBAAA,CAAA;AAAA,QAAA,IAAAtC,GAAA,EAAAC,GAAA,EAAAsC,GAAA,CAAA;AAAA,QAAA,OAAA7C,mBAAA,CAAAc,IAAA,CAAA,UAAAgC,SAAA,EAAA;AAAA,UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAA9B,IAAA,GAAA8B,SAAA,CAAA7B,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA6B,cAAAA,SAAA,CAAA7B,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OAAA,CAAA2B,kBAAA,GAC1ExC,MAAA,CAAOqB,SAAY,MAAAmB,IAAAA,IAAAA,kBAAA,KAAnBA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,kBAAA,CAAApB,IAAA,CAAApB,MAAA,EAAmBD,MAAM;;;;;;;oBAAM,EAAC,CAAA;AAAA,YAAA,KAAA,CAAA;AAA7CG,cAAAA;AAEAC,cAAAA,GAAA,GAAOD,GAAY,CAAAC,GAAA,IAAOH,MAAO,CAAAuB,QAAA,CAAA;AAAA,cAAA,IAElCpB,GAAA,EAAA;AAAAuC,gBAAAA,SAAA,CAAA7B,IAAA,GAAA,CAAA,CAAA;AAAA,gBAAA,MAAA;AAAA,eAAA;cAAA,OAAA6B,SAAA,CAAAX,MAAA,CAAA,QAAA,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;AACA,cAAA,IAAA,CAAAY,SAAA,GAAY,IAAIC,SAAA,CAAUzC,GAAG,CAAA,CAAA;cAGlC,IAAA,CAAKwC,SAAU,CAAA3B,EAAA,CAAG,OAAS,EAAA,UAAC6B,KAAU,EAAA;AAAA,gBAAA,IAAAC,eAAA,CAAA;AACpC,gBAAA,CAAAA,eAAA,GAAA9C,MAAA,CAAO+C,yCAAPD,KAAAA,CAAAA,IAAAA,eAAA,CAAA1B,IAAA,CAAApB,MAAA,EAAiB6C,KAAK,CAAA,CAAA;AACxB,eAAC,CAAA,CAAA;cAED,IAAA,CAAKF,SAAU,CAAA3B,EAAA,CAAG,SAAW,EAAA,UAACgC,GAAQ,EAAA;AAAA,gBAAA,IAAAC,iBAAA,CAAA;AACpC,gBAAA,CAAAA,iBAAA,GAAAjD,MAAA,CAAOkD,6CAAPD,KAAAA,CAAAA,IAAAA,iBAAA,CAAA7B,IAAA,CAAApB,MAAA,EAAmBgD,GAAmB,CAAA,CAAA;AACxC,eAAC,CAAA,CAAA;cAED,IAAA,CAAKL,SAAU,CAAA3B,EAAA,CAAG,OAAS,EAAA,UAACC,KAAU,EAAA;AAAA,gBAAA,IAAAkC,gBAAA,CAAA;AACpC,gBAAA,CAAAA,gBAAA,GAAAnD,MAAA,CAAOmB,0CAAPgC,KAAAA,CAAAA,IAAAA,gBAAA,CAAA/B,IAAA,CAAApB,MAAA,EAAiBiB,KAAK,CAAA,CAAA;AACxB,eAAC,CAAA,CAAA;cAED,IAAA,CAAK0B,SAAU,CAAA3B,EAAA,CAAG,UAAY,EAAA,UAACoC,SAAc,EAAA;AAAA,gBAAA,IAAAC,mBAAA,CAAA;AACpC,gBAAA,CAAAA,mBAAA,GAAArD,MAAA,CAAA8B,UAAA,cAAAuB,mBAAA,KAAA,KAAA,CAAA,IAAAA,mBAAA,CAAAjC,IAAA,CAAApB,MAAA,EAAaoD,WAAWlD,GAAG,CAAA,CAAA;AACpC,eAAC,CAAA,CAAA;AAAAwC,cAAAA,SAAA,CAAA7B,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OAEK,IAAA,CAAK8B,SAAU,CAAAW,OAAA,CAAQpD,GAAG,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;cAAA,OAAAwC,SAAA,CAAAV,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA,EAAAO,QAAA,EAAA,IAAA,CAAA,CAAA;OAClC,CAAA,CAAA,CAAA;AAAA,MAAA,SA1BMgB,mBAAoBA,CAAAC,GAAA,EAAAC,GAAA,EAAA;AAAA,QAAA,OAAAnB,oBAAA,CAAAF,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,OAAA;AAAA,MAAA,OAApBkB,mBAAoB,CAAA;AAAA,KAAA,EAAA;AAAA,GAAA,EAAA;IAAA/D,GAAA,EAAA,cAAA;AAAAC,IAAAA,KAAA,EA+B1B,SAAAiE,YAAqBA,GAAA;MACnB,IAAI,KAAKf,SAAW,EAAA;AAClB,QAAA,IAAA,CAAKA,UAAUgB,KAAM,EAAA,CAAA;QACrB,IAAA,CAAKhB,SAAY,GAAA,IAAA,CAAA;AACnB,OAAA;MACA,IAAI,KAAK7B,WAAa,EAAA;AACpB,QAAA,IAAA,CAAKA,YAAY6C,KAAM,EAAA,CAAA;QACvB,IAAA,CAAK7C,WAAc,GAAA,IAAA,CAAA;AACrB,OAAA;AACF,KAAA;AAAA,GAAA,EAAA;IAAAtB,GAAA,EAAA,aAAA;AAAAC,IAAAA,KAAA,EAKA,SAAAmE,WAAgEA,GAAA;AAC9D,MAAA,IAAI,CAAC,IAAK,CAAAjB,SAAA,EAAkB,OAAA,IAAA,CAAA;MAErB,OAAA;AACLkB,QAAAA,EAAA,EAAI,KAAKlB,SAAU,CAAAmB,YAAA;AACnBC,QAAAA,MAAA,EAAQ,IAAK,CAAApB,SAAA,CAAUqB,SAAU,EAAA;AACjCC,QAAAA,IAAA,EAAM,IAAK,CAAAtB,SAAA,CAAUuB,OAAQ,EAAA;OAC/B,CAAA;AACF,KAAA;AAAA,GAAA,EAAA;IAAA1E,GAAA,EAAA,SAAA;IAAAC,KAAA,EAAA,YAAA;MAAA,IAAA0E,QAAA,GAAAxE,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CAKA,SAAAuE,QAAA,GAAA;AAAA,QAAA,OAAAxE,mBAAA,CAAAc,IAAA,CAAA,UAAA2D,SAAA,EAAA;AAAA,UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAzD,IAAA,GAAAyD,SAAA,CAAAxD,IAAA;AAAA,YAAA,KAAA,CAAA;cACE,IAAA,CAAKyD,WAAc,GAAA,IAAA,CAAA;cACnB,IAAA,CAAKZ,YAAa,EAAA,CAAA;AACb,cAAA,IAAA,CAAAa,MAAA,CAAON,KAAK,gCAAgC,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;cAAA,OAAAI,SAAA,CAAArC,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA,EAAAoC,QAAA,EAAA,IAAA,CAAA,CAAA;OACnD,CAAA,CAAA,CAAA;AAAA,MAAA,SAJMI,OAAyBA,GAAA;AAAA,QAAA,OAAAL,QAAA,CAAA/B,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,OAAA;AAAA,MAAA,OAAzBmC,OAAyB,CAAA;AAAA,KAAA,EAAA;AAAA,GAAA,CAAA,CAAA,CAAA;AAAA,CAAA;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tdesign v1.0.2-alpha.
|
|
2
|
+
* tdesign v1.0.2-alpha.15
|
|
3
3
|
* (c) 2026 tdesign
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
@@ -119,7 +119,7 @@ var MessageStore = /*#__PURE__*/function (_ReactiveState) {
|
|
|
119
119
|
message.status = status;
|
|
120
120
|
if (isAIMessage(message) && message.content && message.content.length > 0) {
|
|
121
121
|
var lastContent = message.content[message.content.length - 1];
|
|
122
|
-
if ("status" in lastContent) {
|
|
122
|
+
if ("status" in lastContent && lastContent.status !== "error") {
|
|
123
123
|
lastContent.status = status;
|
|
124
124
|
}
|
|
125
125
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"message.js","sources":["../../../../../pro-components/chat/chat-engine/core/store/message.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\n/* eslint-disable class-methods-use-this */\nimport type {\n AIMessage,\n AIMessageContent,\n ChatMessagesData,\n ChatMessageSetterMode,\n ChatMessageStore,\n UserMessage,\n} from '../type';\nimport { isAIMessage, isUserMessage } from '../utils';\nimport ReactiveState from './reactiveState';\n\n// 专注消息生命周期管理\nexport class MessageStore extends ReactiveState<ChatMessageStore> {\n initialize(initialState?: Partial<ChatMessageStore>) {\n super.initialize({\n messageIds: [],\n messages: [],\n ...initialState,\n });\n }\n\n createMessage(message: ChatMessagesData) {\n const { id } = message;\n this.setState((draft) => {\n draft.messageIds.push(id);\n draft.messages.push(message);\n });\n }\n\n createMultiMessages(messages: ChatMessagesData[]) {\n this.setState((draft) => {\n messages.forEach((msg) => {\n draft.messageIds.push(msg.id);\n });\n draft.messages.push(...messages);\n });\n }\n\n setMessages(messages: ChatMessagesData[], mode: ChatMessageSetterMode = 'replace') {\n this.setState((draft) => {\n if (mode === 'replace') {\n draft.messageIds = messages.map((msg) => msg.id);\n draft.messages = [...messages];\n } else if (mode === 'prepend') {\n draft.messageIds = [...messages.map((msg) => msg.id), ...draft.messageIds];\n draft.messages = [...messages, ...draft.messages];\n } else {\n draft.messageIds.push(...messages.map((msg) => msg.id));\n draft.messages.push(...messages);\n }\n });\n }\n\n // 追加内容到指定类型的content\n appendContent(messageId: string, processedContent: AIMessageContent, targetIndex = -1) {\n this.setState((draft) => {\n const message = draft.messages.find((m) => m.id === messageId);\n if (!message || !isAIMessage(message) || !message.content) return;\n\n if (targetIndex >= 0 && targetIndex < message.content.length) {\n // 合并到指定位置\n message.content[targetIndex] = processedContent;\n } else {\n // 添加新内容块\n message.content.push(processedContent);\n }\n\n // 移除消息整体状态的自动推断,让ChatEngine控制\n // this.updateMessageStatusByContent(message);\n });\n }\n\n // 完整替换消息的content数组\n replaceContent(messageId: string, processedContent: AIMessageContent[]) {\n this.setState((draft) => {\n const message = draft.messages.find((m) => m.id === messageId);\n if (!message || !isAIMessage(message)) return;\n message.content = processedContent;\n });\n }\n\n // 更新消息整体状态\n setMessageStatus(messageId: string, status: ChatMessagesData['status']) {\n this.setState((draft) => {\n const message = draft.messages.find((m) => m.id === messageId);\n if (message) {\n message.status = status;\n if (isAIMessage(message) && message.content && message.content.length > 0) {\n const lastContent = message.content[message.content.length - 1];\n // 添加类型检查,确保content有status属性\n if ('status' in lastContent) {\n lastContent.status = status;\n }\n }\n }\n });\n }\n\n // 为消息设置扩展属性\n setMessageExt(messageId: string, attr = {}) {\n this.setState((draft) => {\n const message = draft.messages.find((m) => m.id === messageId);\n if (message) {\n message.ext = { ...message.ext, ...attr };\n }\n });\n }\n\n // 为AI消息设置工具调用\n // setMessageToolCalls(messageId: string, toolCalls: ToolCall[]) {\n // this.setState((draft) => {\n // const message = draft.messages.find((m) => m.id === messageId);\n // if (message && isAIMessage(message)) {\n // message.toolCalls = toolCalls;\n // }\n // });\n // }\n\n clearHistory() {\n this.setState((draft) => {\n draft.messageIds = [];\n draft.messages = [];\n });\n }\n\n // 删除指定消息\n removeMessage(messageId: string) {\n this.setState((draft) => {\n // 从ID列表删除\n const idIndex = draft.messageIds.indexOf(messageId);\n if (idIndex !== -1) {\n draft.messageIds.splice(idIndex, 1);\n }\n\n // 从消息列表删除\n draft.messages = draft.messages.filter((msg) => msg.id !== messageId);\n });\n }\n\n // 创建消息分支(用于保留历史版本)\n createMessageBranch(messageId: string) {\n const original = this.getState().messages.find((m) => m.id === messageId);\n if (!original || !original.content) return;\n\n // 克隆消息并生成新ID\n const branchedMessage = {\n ...original,\n content: original.content.map((c) => ({ ...c })),\n } as ChatMessagesData;\n\n this.createMessage(branchedMessage);\n }\n\n get messages() {\n return this.getState().messages;\n }\n\n getMessageByID(id: string) {\n return this.getState().messages.find((m) => m.id === id);\n }\n\n get currentMessage(): ChatMessagesData {\n const { messages } = this.getState();\n return messages[messages.length - 1];\n }\n\n get lastAIMessage(): AIMessage | undefined {\n const { messages } = this.getState();\n const aiMessages = messages.filter((msg) => isAIMessage(msg));\n return aiMessages[aiMessages.length - 1];\n }\n\n get lastUserMessage(): UserMessage | undefined {\n const { messages } = this.getState();\n const userMessages = messages.filter((msg) => isUserMessage(msg));\n return userMessages[userMessages.length - 1];\n }\n\n // 更新消息整体状态(自动推断)\n private updateMessageStatusByContent(message: AIMessage) {\n if (!message.content) return;\n\n // 优先处理错误状态\n if (message.content.some((c) => c.status === 'error')) {\n message.status = 'error';\n message.content.forEach((content) => {\n if (content.status) {\n const resolvedStatus = content.status || 'streaming';\n content.status = resolvedStatus === 'streaming' ? 'stop' : content.status;\n }\n });\n return;\n }\n\n // 非最后一个内容块处理\n message.content.slice(0, -1).forEach((content) => {\n content.status = content.status !== 'error' && content.status !== 'stop' ? 'complete' : content.status;\n });\n }\n\n /**\n * 更新多个内容块\n * @param messageId 消息ID\n * @param contents 要更新的内容块数组\n */\n updateMultipleContents(messageId: string, contents: AIMessageContent[]) {\n this.setState((draft) => {\n const message = draft.messages.find((m) => m.id === messageId);\n if (!message || !isAIMessage(message) || !message.content) return;\n\n const messageContent = message.content; // 确保TypeScript知道content存在\n\n // 更新或添加每个内容块\n contents.forEach((content) => {\n const existingIndex = messageContent.findIndex((c) => c.id === content.id || c.type === content.type);\n\n if (existingIndex >= 0) {\n // 更新现有内容块\n messageContent[existingIndex] = {\n ...messageContent[existingIndex],\n ...content,\n };\n } else {\n // 添加新内容块\n messageContent.push(content);\n }\n });\n\n // 消息整体状态的自动推断\n this.updateMessageStatusByContent(message);\n });\n }\n}\n\n// 订阅消息列表变化\n// useEffect(() => {\n// return service.messageStore.subscribe(state => {\n// setMessages(state.messages);\n// });\n// }, []);\n"],"names":["MessageStore","initialize","initialState","_superPropGet","_objectSpread","messageIds","messages","key","value","createMessage","message","id","setState","draft","push","createMultiMessages","_draft$messages","forEach","msg","apply","_toConsumableArray","setMessages","mode","arguments","length","undefined","map","concat","_draft$messageIds","_draft$messages2","appendContent","messageId","processedContent","targetIndex","find","m","isAIMessage","content","replaceContent","setMessageStatus","status","lastContent","setMessageExt","attr","ext","clearHistory","removeMessage","idIndex","indexOf","splice","filter","createMessageBranch","original","getState","branchedMessage","c","get","getMessageByID","_this$getState","_this$getState2","aiMessages","_this$getState3","userMessages","isUserMessage","updateMessageStatusByContent","some","resolvedStatus","slice","updateMultipleContents","contents","_this","messageContent","existingIndex","findIndex","type","ReactiveState"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"message.js","sources":["../../../../../pro-components/chat/chat-engine/core/store/message.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\n/* eslint-disable class-methods-use-this */\nimport type {\n AIMessage,\n AIMessageContent,\n ChatMessagesData,\n ChatMessageSetterMode,\n ChatMessageStore,\n UserMessage,\n} from '../type';\nimport { isAIMessage, isUserMessage } from '../utils';\nimport ReactiveState from './reactiveState';\n\n// 专注消息生命周期管理\nexport class MessageStore extends ReactiveState<ChatMessageStore> {\n initialize(initialState?: Partial<ChatMessageStore>) {\n super.initialize({\n messageIds: [],\n messages: [],\n ...initialState,\n });\n }\n\n createMessage(message: ChatMessagesData) {\n const { id } = message;\n this.setState((draft) => {\n draft.messageIds.push(id);\n draft.messages.push(message);\n });\n }\n\n createMultiMessages(messages: ChatMessagesData[]) {\n this.setState((draft) => {\n messages.forEach((msg) => {\n draft.messageIds.push(msg.id);\n });\n draft.messages.push(...messages);\n });\n }\n\n setMessages(messages: ChatMessagesData[], mode: ChatMessageSetterMode = 'replace') {\n this.setState((draft) => {\n if (mode === 'replace') {\n draft.messageIds = messages.map((msg) => msg.id);\n draft.messages = [...messages];\n } else if (mode === 'prepend') {\n draft.messageIds = [...messages.map((msg) => msg.id), ...draft.messageIds];\n draft.messages = [...messages, ...draft.messages];\n } else {\n draft.messageIds.push(...messages.map((msg) => msg.id));\n draft.messages.push(...messages);\n }\n });\n }\n\n // 追加内容到指定类型的content\n appendContent(messageId: string, processedContent: AIMessageContent, targetIndex = -1) {\n this.setState((draft) => {\n const message = draft.messages.find((m) => m.id === messageId);\n if (!message || !isAIMessage(message) || !message.content) return;\n\n if (targetIndex >= 0 && targetIndex < message.content.length) {\n // 合并到指定位置\n message.content[targetIndex] = processedContent;\n } else {\n // 添加新内容块\n message.content.push(processedContent);\n }\n\n // 移除消息整体状态的自动推断,让ChatEngine控制\n // this.updateMessageStatusByContent(message);\n });\n }\n\n // 完整替换消息的content数组\n replaceContent(messageId: string, processedContent: AIMessageContent[]) {\n this.setState((draft) => {\n const message = draft.messages.find((m) => m.id === messageId);\n if (!message || !isAIMessage(message)) return;\n message.content = processedContent;\n });\n }\n\n // 更新消息整体状态\n setMessageStatus(messageId: string, status: ChatMessagesData['status']) {\n this.setState((draft) => {\n const message = draft.messages.find((m) => m.id === messageId);\n if (message) {\n message.status = status;\n if (isAIMessage(message) && message.content && message.content.length > 0) {\n const lastContent = message.content[message.content.length - 1];\n // 添加类型检查,确保content有status属性\n if ('status' in lastContent && lastContent.status !== 'error') {\n lastContent.status = status;\n }\n }\n }\n });\n }\n\n // 为消息设置扩展属性\n setMessageExt(messageId: string, attr = {}) {\n this.setState((draft) => {\n const message = draft.messages.find((m) => m.id === messageId);\n if (message) {\n message.ext = { ...message.ext, ...attr };\n }\n });\n }\n\n // 为AI消息设置工具调用\n // setMessageToolCalls(messageId: string, toolCalls: ToolCall[]) {\n // this.setState((draft) => {\n // const message = draft.messages.find((m) => m.id === messageId);\n // if (message && isAIMessage(message)) {\n // message.toolCalls = toolCalls;\n // }\n // });\n // }\n\n clearHistory() {\n this.setState((draft) => {\n draft.messageIds = [];\n draft.messages = [];\n });\n }\n\n // 删除指定消息\n removeMessage(messageId: string) {\n this.setState((draft) => {\n // 从ID列表删除\n const idIndex = draft.messageIds.indexOf(messageId);\n if (idIndex !== -1) {\n draft.messageIds.splice(idIndex, 1);\n }\n\n // 从消息列表删除\n draft.messages = draft.messages.filter((msg) => msg.id !== messageId);\n });\n }\n\n // 创建消息分支(用于保留历史版本)\n createMessageBranch(messageId: string) {\n const original = this.getState().messages.find((m) => m.id === messageId);\n if (!original || !original.content) return;\n\n // 克隆消息并生成新ID\n const branchedMessage = {\n ...original,\n content: original.content.map((c) => ({ ...c })),\n } as ChatMessagesData;\n\n this.createMessage(branchedMessage);\n }\n\n get messages() {\n return this.getState().messages;\n }\n\n getMessageByID(id: string) {\n return this.getState().messages.find((m) => m.id === id);\n }\n\n get currentMessage(): ChatMessagesData {\n const { messages } = this.getState();\n return messages[messages.length - 1];\n }\n\n get lastAIMessage(): AIMessage | undefined {\n const { messages } = this.getState();\n const aiMessages = messages.filter((msg) => isAIMessage(msg));\n return aiMessages[aiMessages.length - 1];\n }\n\n get lastUserMessage(): UserMessage | undefined {\n const { messages } = this.getState();\n const userMessages = messages.filter((msg) => isUserMessage(msg));\n return userMessages[userMessages.length - 1];\n }\n\n // 更新消息整体状态(自动推断)\n private updateMessageStatusByContent(message: AIMessage) {\n if (!message.content) return;\n\n // 优先处理错误状态\n if (message.content.some((c) => c.status === 'error')) {\n message.status = 'error';\n message.content.forEach((content) => {\n if (content.status) {\n const resolvedStatus = content.status || 'streaming';\n content.status = resolvedStatus === 'streaming' ? 'stop' : content.status;\n }\n });\n return;\n }\n\n // 非最后一个内容块处理\n message.content.slice(0, -1).forEach((content) => {\n content.status = content.status !== 'error' && content.status !== 'stop' ? 'complete' : content.status;\n });\n }\n\n /**\n * 更新多个内容块\n * @param messageId 消息ID\n * @param contents 要更新的内容块数组\n */\n updateMultipleContents(messageId: string, contents: AIMessageContent[]) {\n this.setState((draft) => {\n const message = draft.messages.find((m) => m.id === messageId);\n if (!message || !isAIMessage(message) || !message.content) return;\n\n const messageContent = message.content; // 确保TypeScript知道content存在\n\n // 更新或添加每个内容块\n contents.forEach((content) => {\n const existingIndex = messageContent.findIndex((c) => c.id === content.id || c.type === content.type);\n\n if (existingIndex >= 0) {\n // 更新现有内容块\n messageContent[existingIndex] = {\n ...messageContent[existingIndex],\n ...content,\n };\n } else {\n // 添加新内容块\n messageContent.push(content);\n }\n });\n\n // 消息整体状态的自动推断\n this.updateMessageStatusByContent(message);\n });\n }\n}\n\n// 订阅消息列表变化\n// useEffect(() => {\n// return service.messageStore.subscribe(state => {\n// setMessages(state.messages);\n// });\n// }, []);\n"],"names":["MessageStore","initialize","initialState","_superPropGet","_objectSpread","messageIds","messages","key","value","createMessage","message","id","setState","draft","push","createMultiMessages","_draft$messages","forEach","msg","apply","_toConsumableArray","setMessages","mode","arguments","length","undefined","map","concat","_draft$messageIds","_draft$messages2","appendContent","messageId","processedContent","targetIndex","find","m","isAIMessage","content","replaceContent","setMessageStatus","status","lastContent","setMessageExt","attr","ext","clearHistory","removeMessage","idIndex","indexOf","splice","filter","createMessageBranch","original","getState","branchedMessage","c","get","getMessageByID","_this$getState","_this$getState2","aiMessages","_this$getState3","userMessages","isUserMessage","updateMessageStatusByContent","some","resolvedStatus","slice","updateMultipleContents","contents","_this","messageContent","existingIndex","findIndex","type","ReactiveState"],"mappings":"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"}
|
|
@@ -137,12 +137,28 @@ export interface ChatNetworkConfig {
|
|
|
137
137
|
/** 协议类型 */
|
|
138
138
|
protocol?: 'default' | 'agui';
|
|
139
139
|
}
|
|
140
|
+
export type OnRequestResult = ChatRequestParams & RequestInit & {
|
|
141
|
+
url?: string;
|
|
142
|
+
};
|
|
140
143
|
export interface DefaultEngineCallbacks {
|
|
141
|
-
/**
|
|
142
|
-
onRequest?: (params: ChatRequestParams) =>
|
|
144
|
+
/** 请求发送前配置,可返回 url 覆盖默认 endpoint */
|
|
145
|
+
onRequest?: (params: ChatRequestParams) => OnRequestResult | Promise<OnRequestResult>;
|
|
143
146
|
onStart?: (chunk: string) => void;
|
|
144
147
|
/** 接收到消息数据块 - 用于解析和处理聊天内容 */
|
|
145
148
|
onMessage?: (chunk: SSEChunkData, message?: ChatMessagesData, parsedResult?: AIMessageContent | AIMessageContent[] | null) => AIMessageContent | AIMessageContent[] | null;
|
|
149
|
+
/**
|
|
150
|
+
* 流式输出状态变化回调
|
|
151
|
+
* @param isStreaming 是否正在接收流式数据(true 表示有数据流入,false 表示暂停/停止)
|
|
152
|
+
* @param messageId 当前消息 ID
|
|
153
|
+
* @description 用于感知流式输出的活跃状态,当服务端 SSE chunk 暂停输出时可用于显示 loading
|
|
154
|
+
*/
|
|
155
|
+
onStreaming?: (isStreaming: boolean, messageId?: string) => void;
|
|
156
|
+
/**
|
|
157
|
+
* 流式输出超时时间(毫秒)
|
|
158
|
+
* @default 3000
|
|
159
|
+
* @description 超过此时间未收到新的流式数据,则认为流式输出暂停,触发 onStreaming(false)
|
|
160
|
+
*/
|
|
161
|
+
streamingTimeout?: number;
|
|
146
162
|
onComplete?: (isAborted: boolean, params?: ChatRequestParams, result?: any) => AIMessageContent | AIMessageContent[] | void;
|
|
147
163
|
onAbort?: () => Promise<void>;
|
|
148
164
|
/** 错误处理 */
|