@blueking/chat-helper 0.0.1-beta.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/README.md +1112 -0
- package/dist/agent/index.d.ts +2 -0
- package/dist/agent/index.ts.js +26 -0
- package/dist/agent/type.d.ts +87 -0
- package/dist/agent/type.ts.js +25 -0
- package/dist/agent/use-agent.d.ts +540 -0
- package/dist/agent/use-agent.ts.js +102 -0
- package/dist/event/ag-ui.d.ts +137 -0
- package/dist/event/ag-ui.ts.js +434 -0
- package/dist/event/index.d.ts +2 -0
- package/dist/event/index.ts.js +26 -0
- package/dist/event/type.d.ts +329 -0
- package/dist/event/type.ts.js +64 -0
- package/dist/http/fetch/fetch.d.ts +84 -0
- package/dist/http/fetch/fetch.ts.js +503 -0
- package/dist/http/fetch/index.d.ts +6 -0
- package/dist/http/fetch/index.ts.js +41 -0
- package/dist/http/index.d.ts +38 -0
- package/dist/http/index.ts.js +36 -0
- package/dist/http/module/agent.d.ts +9 -0
- package/dist/http/module/agent.ts.js +36 -0
- package/dist/http/module/index.d.ts +36 -0
- package/dist/http/module/index.ts.js +41 -0
- package/dist/http/module/message.d.ts +14 -0
- package/dist/http/module/message.ts.js +52 -0
- package/dist/http/module/session.d.ts +25 -0
- package/dist/http/module/session.ts.js +67 -0
- package/dist/http/transform/agent.d.ts +7 -0
- package/dist/http/transform/agent.ts.js +71 -0
- package/dist/http/transform/index.d.ts +3 -0
- package/dist/http/transform/index.ts.js +27 -0
- package/dist/http/transform/message.d.ts +13 -0
- package/dist/http/transform/message.ts.js +155 -0
- package/dist/http/transform/session.d.ts +37 -0
- package/dist/http/transform/session.ts.js +100 -0
- package/dist/index.d.ts +3363 -0
- package/dist/index.ts.js +40 -0
- package/dist/message/index.d.ts +2 -0
- package/dist/message/index.ts.js +26 -0
- package/dist/message/type.d.ts +277 -0
- package/dist/message/type.ts.js +67 -0
- package/dist/message/use-message.d.ts +912 -0
- package/dist/message/use-message.ts.js +87 -0
- package/dist/session/index.d.ts +2 -0
- package/dist/session/index.ts.js +26 -0
- package/dist/session/type.d.ts +61 -0
- package/dist/session/type.ts.js +25 -0
- package/dist/session/use-session.d.ts +1898 -0
- package/dist/session/use-session.ts.js +144 -0
- package/dist/type.d.ts +14 -0
- package/package.json +27 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Tencent is pleased to support the open source community by making
|
|
3
|
+
* 蓝鲸智云PaaS平台 (BlueKing PaaS) available.
|
|
4
|
+
*
|
|
5
|
+
* Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.
|
|
6
|
+
*
|
|
7
|
+
* 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.
|
|
8
|
+
*
|
|
9
|
+
* License for 蓝鲸智云PaaS平台 (BlueKing PaaS):
|
|
10
|
+
*
|
|
11
|
+
* ---------------------------------------------------
|
|
12
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
|
13
|
+
* documentation files (the "Software"), to deal in the Software without restriction, including without limitation
|
|
14
|
+
* the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
|
|
15
|
+
* to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
16
|
+
*
|
|
17
|
+
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of
|
|
18
|
+
* the Software.
|
|
19
|
+
*
|
|
20
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
|
21
|
+
* THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
22
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
|
23
|
+
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
24
|
+
* IN THE SOFTWARE.
|
|
25
|
+
*/ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
26
|
+
try {
|
|
27
|
+
var info = gen[key](arg);
|
|
28
|
+
var value = info.value;
|
|
29
|
+
} catch (error) {
|
|
30
|
+
reject(error);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (info.done) {
|
|
34
|
+
resolve(value);
|
|
35
|
+
} else {
|
|
36
|
+
Promise.resolve(value).then(_next, _throw);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
function _async_to_generator(fn) {
|
|
40
|
+
return function() {
|
|
41
|
+
var self = this, args = arguments;
|
|
42
|
+
return new Promise(function(resolve, reject) {
|
|
43
|
+
var gen = fn.apply(self, args);
|
|
44
|
+
function _next(value) {
|
|
45
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
46
|
+
}
|
|
47
|
+
function _throw(err) {
|
|
48
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
49
|
+
}
|
|
50
|
+
_next(undefined);
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
import { ref } from 'vue';
|
|
55
|
+
import { AGUIProtocol } from '../event/index.ts.js';
|
|
56
|
+
import { useFetch } from '../http/fetch/index.ts.js';
|
|
57
|
+
export const useAgent = (options, http, message)=>{
|
|
58
|
+
const { fetchClient } = useFetch(options);
|
|
59
|
+
const info = ref(null);
|
|
60
|
+
const isInfoLoading = ref(false);
|
|
61
|
+
let chatController = null;
|
|
62
|
+
const getAgentInfo = ()=>{
|
|
63
|
+
isInfoLoading.value = true;
|
|
64
|
+
return http.agent.getAgentInfo().then((res)=>{
|
|
65
|
+
info.value = res;
|
|
66
|
+
}).finally(()=>{
|
|
67
|
+
isInfoLoading.value = false;
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
const chat = ()=>{
|
|
71
|
+
chatController = new AbortController();
|
|
72
|
+
const protocol = options.protocol || new AGUIProtocol();
|
|
73
|
+
// ag-ui 协议需要注入消息模块
|
|
74
|
+
if (protocol instanceof AGUIProtocol) {
|
|
75
|
+
protocol.injectMessageModule(message);
|
|
76
|
+
}
|
|
77
|
+
fetchClient.streamRequest({
|
|
78
|
+
url: 'agent/chat/',
|
|
79
|
+
controller: chatController,
|
|
80
|
+
onDone: protocol.onDone,
|
|
81
|
+
onError: protocol.onError,
|
|
82
|
+
onMessage: protocol.onMessage,
|
|
83
|
+
onStart: protocol.onStart
|
|
84
|
+
});
|
|
85
|
+
};
|
|
86
|
+
const stopChat = function() {
|
|
87
|
+
var _ref = _async_to_generator(function*() {
|
|
88
|
+
chatController === null || chatController === void 0 ? void 0 : chatController.abort();
|
|
89
|
+
chatController = null;
|
|
90
|
+
});
|
|
91
|
+
return function stopChat() {
|
|
92
|
+
return _ref.apply(this, arguments);
|
|
93
|
+
};
|
|
94
|
+
}();
|
|
95
|
+
return {
|
|
96
|
+
info,
|
|
97
|
+
isInfoLoading,
|
|
98
|
+
chat,
|
|
99
|
+
stopChat,
|
|
100
|
+
getAgentInfo
|
|
101
|
+
};
|
|
102
|
+
};
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { type IMessageModule } from '../message';
|
|
2
|
+
import { type IActivityDeltaEvent, type IActivitySnapshotEvent, type ICustomEvent, type IEvent, type IMessagesSnapshotEvent, type IRawEvent, type IRunErrorEvent, type IRunFinishedEvent, type IRunStartedEvent, type IStateDeltaEvent, type IStateSnapshotEvent, type IStepFinishedEvent, type IStepStartedEvent, type ITextMessageChunkEvent, type ITextMessageContentEvent, type ITextMessageEndEvent, type ITextMessageStartEvent, type IThinkingEndEvent, type IThinkingStartEvent, type IThinkingTextMessageContentEvent, type IThinkingTextMessageEndEvent, type IThinkingTextMessageStartEvent, type IToolCallArgsEvent, type IToolCallChunkEvent, type IToolCallEndEvent, type IToolCallResultEvent, type IToolCallStartEvent } from './type';
|
|
3
|
+
import type { ISSEProtocol } from '../http/fetch';
|
|
4
|
+
/**
|
|
5
|
+
* AGUI 协议
|
|
6
|
+
* @param message - 消息模块
|
|
7
|
+
*/
|
|
8
|
+
export declare class AGUIProtocol implements ISSEProtocol {
|
|
9
|
+
private messageModule;
|
|
10
|
+
private onDoneCallback?;
|
|
11
|
+
private onErrorCallback?;
|
|
12
|
+
private onMessageCallback?;
|
|
13
|
+
private onStartCallback?;
|
|
14
|
+
constructor(params?: {
|
|
15
|
+
onDone?: () => void;
|
|
16
|
+
onError?: (error: unknown) => void;
|
|
17
|
+
onMessage?: (message: IEvent) => void;
|
|
18
|
+
onStart?: () => void;
|
|
19
|
+
});
|
|
20
|
+
/**
|
|
21
|
+
* 处理活动增量更新事件
|
|
22
|
+
* 使用 JSON Patch 格式增量更新活动数据
|
|
23
|
+
*/
|
|
24
|
+
handleActivityDeltaEvent(_event: IActivityDeltaEvent): void;
|
|
25
|
+
/**
|
|
26
|
+
* 处理活动快照事件
|
|
27
|
+
* 记录活动的完整状态
|
|
28
|
+
*/
|
|
29
|
+
handleActivitySnapshotEvent(_event: IActivitySnapshotEvent): void;
|
|
30
|
+
/**
|
|
31
|
+
* 处理自定义事件
|
|
32
|
+
*/
|
|
33
|
+
handleCustomEvent(event: ICustomEvent): void;
|
|
34
|
+
/**
|
|
35
|
+
* 处理消息快照事件
|
|
36
|
+
* 用于同步多端消息状态
|
|
37
|
+
*/
|
|
38
|
+
handleMessagesSnapshotEvent(event: IMessagesSnapshotEvent): void;
|
|
39
|
+
/**
|
|
40
|
+
* 处理原始事件
|
|
41
|
+
* 透传底层 AI 服务的原始事件
|
|
42
|
+
*/
|
|
43
|
+
handleRawEvent(_event: IRawEvent): void;
|
|
44
|
+
/**
|
|
45
|
+
* 自定义事件 处理参考文档事件
|
|
46
|
+
*/
|
|
47
|
+
handleReferenceDocumentCustomEvent(event: ICustomEvent): void;
|
|
48
|
+
/**
|
|
49
|
+
* 处理运行错误事件
|
|
50
|
+
*/
|
|
51
|
+
handleRunErrorEvent(event: IRunErrorEvent): void;
|
|
52
|
+
/**
|
|
53
|
+
* 处理运行完成事件
|
|
54
|
+
*/
|
|
55
|
+
handleRunFinishedEvent(event: IRunFinishedEvent): void;
|
|
56
|
+
/**
|
|
57
|
+
* 处理运行开始事件
|
|
58
|
+
*/
|
|
59
|
+
handleRunStartedEvent(event: IRunStartedEvent): void;
|
|
60
|
+
/**
|
|
61
|
+
* 处理状态增量更新事件
|
|
62
|
+
*/
|
|
63
|
+
handleStateDeltaEvent(_event: IStateDeltaEvent): void;
|
|
64
|
+
/**
|
|
65
|
+
* 处理状态快照事件
|
|
66
|
+
*/
|
|
67
|
+
handleStateSnapshotEvent(_event: IStateSnapshotEvent): void;
|
|
68
|
+
/**
|
|
69
|
+
* 处理步骤完成事件
|
|
70
|
+
*/
|
|
71
|
+
handleStepFinishedEvent(_event: IStepFinishedEvent): void;
|
|
72
|
+
/**
|
|
73
|
+
* 处理步骤开始事件
|
|
74
|
+
*/
|
|
75
|
+
handleStepStartedEvent(_event: IStepStartedEvent): void;
|
|
76
|
+
/**
|
|
77
|
+
* 处理文本消息块事件(流式输出)
|
|
78
|
+
*/
|
|
79
|
+
handleTextMessageChunkEvent(event: ITextMessageChunkEvent): void;
|
|
80
|
+
/**
|
|
81
|
+
* 处理文本消息内容事件
|
|
82
|
+
*/
|
|
83
|
+
handleTextMessageContentEvent(event: ITextMessageContentEvent): void;
|
|
84
|
+
/**
|
|
85
|
+
* 处理文本消息结束事件
|
|
86
|
+
*/
|
|
87
|
+
handleTextMessageEndEvent(event: ITextMessageEndEvent): void;
|
|
88
|
+
/**
|
|
89
|
+
* 处理文本消息开始事件
|
|
90
|
+
*/
|
|
91
|
+
handleTextMessageStartEvent(event: ITextMessageStartEvent): void;
|
|
92
|
+
/**
|
|
93
|
+
* 处理思考结束事件
|
|
94
|
+
*/
|
|
95
|
+
handleThinkingEndEvent(event: IThinkingEndEvent): void;
|
|
96
|
+
/**
|
|
97
|
+
* 处理思考开始事件
|
|
98
|
+
*/
|
|
99
|
+
handleThinkingStartEvent(event: IThinkingStartEvent): void;
|
|
100
|
+
/**
|
|
101
|
+
* 处理思考文本消息内容事件
|
|
102
|
+
*/
|
|
103
|
+
handleThinkingTextMessageContentEvent(event: IThinkingTextMessageContentEvent): void;
|
|
104
|
+
/**
|
|
105
|
+
* 处理思考文本消息结束事件
|
|
106
|
+
*/
|
|
107
|
+
handleThinkingTextMessageEndEvent(_event: IThinkingTextMessageEndEvent): void;
|
|
108
|
+
/**
|
|
109
|
+
* 处理思考文本消息开始事件
|
|
110
|
+
*/
|
|
111
|
+
handleThinkingTextMessageStartEvent(_event: IThinkingTextMessageStartEvent): void;
|
|
112
|
+
/**
|
|
113
|
+
* 处理工具调用参数事件
|
|
114
|
+
*/
|
|
115
|
+
handleToolCallArgsEvent(event: IToolCallArgsEvent): void;
|
|
116
|
+
/**
|
|
117
|
+
* 处理工具调用块事件
|
|
118
|
+
*/
|
|
119
|
+
handleToolCallChunkEvent(event: IToolCallChunkEvent): void;
|
|
120
|
+
/**
|
|
121
|
+
* 处理工具调用结束事件
|
|
122
|
+
*/
|
|
123
|
+
handleToolCallEndEvent(event: IToolCallEndEvent): void;
|
|
124
|
+
/**
|
|
125
|
+
* 处理工具调用结果事件
|
|
126
|
+
*/
|
|
127
|
+
handleToolCallResultEvent(event: IToolCallResultEvent): void;
|
|
128
|
+
/**
|
|
129
|
+
* 处理工具调用开始事件
|
|
130
|
+
*/
|
|
131
|
+
handleToolCallStartEvent(event: IToolCallStartEvent): void;
|
|
132
|
+
injectMessageModule(message: IMessageModule): void;
|
|
133
|
+
onDone(): void;
|
|
134
|
+
onError(error: unknown): void;
|
|
135
|
+
onMessage(message: unknown): void;
|
|
136
|
+
onStart(): void;
|
|
137
|
+
}
|
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Tencent is pleased to support the open source community by making
|
|
3
|
+
* 蓝鲸智云PaaS平台 (BlueKing PaaS) available.
|
|
4
|
+
*
|
|
5
|
+
* Copyright (C) 2021 THL A29 Limited, a Tencent company. All rights reserved.
|
|
6
|
+
*
|
|
7
|
+
* 蓝鲸智云PaaS平台 (BlueKing PaaS) is licensed under the MIT License.
|
|
8
|
+
*
|
|
9
|
+
* License for 蓝鲸智云PaaS平台 (BlueKing PaaS):
|
|
10
|
+
*
|
|
11
|
+
* ---------------------------------------------------
|
|
12
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
|
|
13
|
+
* documentation files (the "Software"), to deal in the Software without restriction, including without limitation
|
|
14
|
+
* the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
|
|
15
|
+
* to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
16
|
+
*
|
|
17
|
+
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of
|
|
18
|
+
* the Software.
|
|
19
|
+
*
|
|
20
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
|
21
|
+
* THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
22
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
|
|
23
|
+
* CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
24
|
+
* IN THE SOFTWARE.
|
|
25
|
+
*/ function _define_property(obj, key, value) {
|
|
26
|
+
if (key in obj) {
|
|
27
|
+
Object.defineProperty(obj, key, {
|
|
28
|
+
value: value,
|
|
29
|
+
enumerable: true,
|
|
30
|
+
configurable: true,
|
|
31
|
+
writable: true
|
|
32
|
+
});
|
|
33
|
+
} else {
|
|
34
|
+
obj[key] = value;
|
|
35
|
+
}
|
|
36
|
+
return obj;
|
|
37
|
+
}
|
|
38
|
+
import { transferMessageApi2Message } from '../http/transform/message.ts.js';
|
|
39
|
+
import { MessageContentStatus, MessageContentType, MessageRole, MessageStatus } from '../message/index.ts.js';
|
|
40
|
+
import { CustomEventType, EventType } from './type.ts.js';
|
|
41
|
+
// 临时存储时间戳
|
|
42
|
+
let tempTimestamp = 0;
|
|
43
|
+
/**
|
|
44
|
+
* AGUI 协议
|
|
45
|
+
* @param message - 消息模块
|
|
46
|
+
*/ export class AGUIProtocol {
|
|
47
|
+
/**
|
|
48
|
+
* 处理活动增量更新事件
|
|
49
|
+
* 使用 JSON Patch 格式增量更新活动数据
|
|
50
|
+
*/ handleActivityDeltaEvent(_event) {
|
|
51
|
+
// 可以在这里实现 JSON Patch 逻辑
|
|
52
|
+
// console.log('ActivityDelta:', event);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 处理活动快照事件
|
|
56
|
+
* 记录活动的完整状态
|
|
57
|
+
*/ handleActivitySnapshotEvent(_event) {
|
|
58
|
+
// 可以在这里存储活动快照
|
|
59
|
+
// console.log('ActivitySnapshot:', event);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 处理自定义事件
|
|
63
|
+
*/ handleCustomEvent(event) {
|
|
64
|
+
switch(event.value.type){
|
|
65
|
+
case CustomEventType.ReferenceDocument:
|
|
66
|
+
this.handleReferenceDocumentCustomEvent(event);
|
|
67
|
+
break;
|
|
68
|
+
default:
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 处理消息快照事件
|
|
74
|
+
* 用于同步多端消息状态
|
|
75
|
+
*/ handleMessagesSnapshotEvent(event) {
|
|
76
|
+
this.messageModule.list.value = event.messages.map(transferMessageApi2Message);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 处理原始事件
|
|
80
|
+
* 透传底层 AI 服务的原始事件
|
|
81
|
+
*/ handleRawEvent(_event) {
|
|
82
|
+
// console.log('Raw:', event);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* 自定义事件 处理参考文档事件
|
|
86
|
+
*/ handleReferenceDocumentCustomEvent(event) {
|
|
87
|
+
const message = this.messageModule.getCurrentLoadingMessage();
|
|
88
|
+
if (message && message.role === MessageRole.Assistant) {
|
|
89
|
+
const referenceDocumentMessageContent = {
|
|
90
|
+
type: MessageContentType.ReferenceDocument,
|
|
91
|
+
data: event.value.data,
|
|
92
|
+
status: MessageContentStatus.Streaming
|
|
93
|
+
};
|
|
94
|
+
message.content.push(referenceDocumentMessageContent);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* 处理运行错误事件
|
|
99
|
+
*/ handleRunErrorEvent(event) {
|
|
100
|
+
const message = this.messageModule.getCurrentLoadingMessage();
|
|
101
|
+
if (message) {
|
|
102
|
+
message.status = MessageStatus.Error;
|
|
103
|
+
message.content = [
|
|
104
|
+
{
|
|
105
|
+
type: MessageContentType.Text,
|
|
106
|
+
data: event.message,
|
|
107
|
+
status: MessageContentStatus.Error
|
|
108
|
+
}
|
|
109
|
+
];
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* 处理运行完成事件
|
|
114
|
+
*/ handleRunFinishedEvent(event) {
|
|
115
|
+
const message = this.messageModule.getMessageById(event.runId);
|
|
116
|
+
if (message) {
|
|
117
|
+
message.status = MessageStatus.Complete;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* 处理运行开始事件
|
|
122
|
+
*/ handleRunStartedEvent(event) {
|
|
123
|
+
this.messageModule.plusMessage({
|
|
124
|
+
id: event.runId,
|
|
125
|
+
role: MessageRole.Assistant,
|
|
126
|
+
content: [],
|
|
127
|
+
status: MessageStatus.Streaming
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* 处理状态增量更新事件
|
|
132
|
+
*/ handleStateDeltaEvent(_event) {
|
|
133
|
+
// 可以在这里实现 JSON Patch 逻辑
|
|
134
|
+
// console.log('StateDelta:', event);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* 处理状态快照事件
|
|
138
|
+
*/ handleStateSnapshotEvent(_event) {
|
|
139
|
+
// console.log('StateSnapshot:', event);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* 处理步骤完成事件
|
|
143
|
+
*/ handleStepFinishedEvent(_event) {
|
|
144
|
+
// console.log('StepFinished:', event);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* 处理步骤开始事件
|
|
148
|
+
*/ handleStepStartedEvent(_event) {
|
|
149
|
+
// console.log('StepStarted:', event);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* 处理文本消息块事件(流式输出)
|
|
153
|
+
*/ handleTextMessageChunkEvent(event) {
|
|
154
|
+
const message = this.messageModule.getCurrentLoadingMessage();
|
|
155
|
+
if (message) {
|
|
156
|
+
const messageContent = message.content.find((item)=>item.type === MessageContentType.Text && item.id === event.messageId);
|
|
157
|
+
if (messageContent) {
|
|
158
|
+
// 增量
|
|
159
|
+
messageContent.data += event.delta;
|
|
160
|
+
} else {
|
|
161
|
+
// 新增
|
|
162
|
+
message.content.push({
|
|
163
|
+
id: event.messageId,
|
|
164
|
+
status: MessageContentStatus.Complete,
|
|
165
|
+
type: MessageContentType.Text,
|
|
166
|
+
data: event.delta
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* 处理文本消息内容事件
|
|
173
|
+
*/ handleTextMessageContentEvent(event) {
|
|
174
|
+
const message = this.messageModule.getCurrentLoadingMessage();
|
|
175
|
+
if (message) {
|
|
176
|
+
const messageContent = message.content.find((item)=>item.type === MessageContentType.Text && item.id === event.messageId);
|
|
177
|
+
if (messageContent) {
|
|
178
|
+
messageContent.data += event.delta;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* 处理文本消息结束事件
|
|
184
|
+
*/ handleTextMessageEndEvent(event) {
|
|
185
|
+
const message = this.messageModule.getCurrentLoadingMessage();
|
|
186
|
+
if (message) {
|
|
187
|
+
const messageContent = message.content.find((item)=>item.type === MessageContentType.Text && item.id === event.messageId);
|
|
188
|
+
if (messageContent) {
|
|
189
|
+
messageContent.status = MessageContentStatus.Complete;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* 处理文本消息开始事件
|
|
195
|
+
*/ handleTextMessageStartEvent(event) {
|
|
196
|
+
const message = this.messageModule.getCurrentLoadingMessage();
|
|
197
|
+
if (message) {
|
|
198
|
+
message.content.push({
|
|
199
|
+
id: event.messageId,
|
|
200
|
+
status: MessageContentStatus.Streaming,
|
|
201
|
+
type: MessageContentType.Text,
|
|
202
|
+
data: ''
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* 处理思考结束事件
|
|
208
|
+
*/ handleThinkingEndEvent(event) {
|
|
209
|
+
const message = this.messageModule.getCurrentLoadingMessage();
|
|
210
|
+
if (message && message.role === MessageRole.Assistant) {
|
|
211
|
+
const lastThinkingMessageContent = message.content.findLast((item)=>item.type === MessageContentType.Thinking);
|
|
212
|
+
if (lastThinkingMessageContent) {
|
|
213
|
+
lastThinkingMessageContent.status = MessageContentStatus.Complete;
|
|
214
|
+
lastThinkingMessageContent.data.duration = event.timestamp - tempTimestamp;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* 处理思考开始事件
|
|
220
|
+
*/ handleThinkingStartEvent(event) {
|
|
221
|
+
const message = this.messageModule.getCurrentLoadingMessage();
|
|
222
|
+
if (message && message.role === MessageRole.Assistant) {
|
|
223
|
+
// 临时存储时间戳
|
|
224
|
+
tempTimestamp = event.timestamp;
|
|
225
|
+
// 创建思考消息内容
|
|
226
|
+
const thinkingMessageContent = {
|
|
227
|
+
status: MessageContentStatus.Streaming,
|
|
228
|
+
type: MessageContentType.Thinking,
|
|
229
|
+
data: {
|
|
230
|
+
text: '',
|
|
231
|
+
title: event.title
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
message.content.push(thinkingMessageContent);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* 处理思考文本消息内容事件
|
|
239
|
+
*/ handleThinkingTextMessageContentEvent(event) {
|
|
240
|
+
const message = this.messageModule.getCurrentLoadingMessage();
|
|
241
|
+
if (message && message.role === MessageRole.Assistant) {
|
|
242
|
+
const lastThinkingMessageContent = message.content.findLast((item)=>item.type === MessageContentType.Thinking);
|
|
243
|
+
if (lastThinkingMessageContent) {
|
|
244
|
+
lastThinkingMessageContent.data.text += event.delta;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* 处理思考文本消息结束事件
|
|
250
|
+
*/ handleThinkingTextMessageEndEvent(_event) {
|
|
251
|
+
// console.log(event);
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* 处理思考文本消息开始事件
|
|
255
|
+
*/ handleThinkingTextMessageStartEvent(_event) {
|
|
256
|
+
// console.log(event);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* 处理工具调用参数事件
|
|
260
|
+
*/ handleToolCallArgsEvent(event) {
|
|
261
|
+
const message = this.messageModule.getCurrentLoadingMessage();
|
|
262
|
+
if (message && message.role === MessageRole.Assistant) {
|
|
263
|
+
const toolCallMessageContent = message.content.find((item)=>item.type === MessageContentType.ToolCall && item.data.toolCallId === event.toolCallId);
|
|
264
|
+
if ((toolCallMessageContent === null || toolCallMessageContent === void 0 ? void 0 : toolCallMessageContent.type) === MessageContentType.ToolCall) {
|
|
265
|
+
toolCallMessageContent.data.args += event.delta;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* 处理工具调用块事件
|
|
271
|
+
*/ handleToolCallChunkEvent(event) {
|
|
272
|
+
const message = this.messageModule.getCurrentLoadingMessage();
|
|
273
|
+
if (message && message.role === MessageRole.Assistant) {
|
|
274
|
+
const toolCallMessageContent = message.content.find((item)=>item.type === MessageContentType.ToolCall && item.data.toolCallId === event.toolCallId);
|
|
275
|
+
if ((toolCallMessageContent === null || toolCallMessageContent === void 0 ? void 0 : toolCallMessageContent.type) === MessageContentType.ToolCall) {
|
|
276
|
+
toolCallMessageContent.data.chunk += event.delta;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* 处理工具调用结束事件
|
|
282
|
+
*/ handleToolCallEndEvent(event) {
|
|
283
|
+
const message = this.messageModule.getCurrentLoadingMessage();
|
|
284
|
+
if (message && message.role === MessageRole.Assistant) {
|
|
285
|
+
const toolCallMessageContent = message.content.find((item)=>item.type === MessageContentType.ToolCall && item.data.toolCallId === event.toolCallId);
|
|
286
|
+
if ((toolCallMessageContent === null || toolCallMessageContent === void 0 ? void 0 : toolCallMessageContent.type) === MessageContentType.ToolCall) {
|
|
287
|
+
toolCallMessageContent.status = MessageContentStatus.Complete;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* 处理工具调用结果事件
|
|
293
|
+
*/ handleToolCallResultEvent(event) {
|
|
294
|
+
const message = this.messageModule.getCurrentLoadingMessage();
|
|
295
|
+
if (message && message.role === MessageRole.Assistant) {
|
|
296
|
+
const toolCallMessageContent = message.content.find((item)=>item.type === MessageContentType.ToolCall && item.data.toolCallId === event.toolCallId);
|
|
297
|
+
if ((toolCallMessageContent === null || toolCallMessageContent === void 0 ? void 0 : toolCallMessageContent.type) === MessageContentType.ToolCall) {
|
|
298
|
+
toolCallMessageContent.data.result += event.content;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* 处理工具调用开始事件
|
|
304
|
+
*/ handleToolCallStartEvent(event) {
|
|
305
|
+
const message = this.messageModule.getCurrentLoadingMessage();
|
|
306
|
+
if (message && message.role === MessageRole.Assistant) {
|
|
307
|
+
const toolCallMessageContent = {
|
|
308
|
+
status: MessageContentStatus.Streaming,
|
|
309
|
+
type: MessageContentType.ToolCall,
|
|
310
|
+
data: {
|
|
311
|
+
toolCallId: event.toolCallId,
|
|
312
|
+
toolCallName: event.toolCallName,
|
|
313
|
+
parentMessageId: event.parentMessageId
|
|
314
|
+
}
|
|
315
|
+
};
|
|
316
|
+
message.content.push(toolCallMessageContent);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
injectMessageModule(message) {
|
|
320
|
+
this.messageModule = message;
|
|
321
|
+
}
|
|
322
|
+
onDone() {
|
|
323
|
+
var _this_onDoneCallback, _this;
|
|
324
|
+
(_this_onDoneCallback = (_this = this).onDoneCallback) === null || _this_onDoneCallback === void 0 ? void 0 : _this_onDoneCallback.call(_this);
|
|
325
|
+
}
|
|
326
|
+
onError(error) {
|
|
327
|
+
var _this_onErrorCallback, _this;
|
|
328
|
+
(_this_onErrorCallback = (_this = this).onErrorCallback) === null || _this_onErrorCallback === void 0 ? void 0 : _this_onErrorCallback.call(_this, error);
|
|
329
|
+
}
|
|
330
|
+
onMessage(message) {
|
|
331
|
+
var // 回调给上层
|
|
332
|
+
_this_onMessageCallback, _this;
|
|
333
|
+
const event = message;
|
|
334
|
+
(_this_onMessageCallback = (_this = this).onMessageCallback) === null || _this_onMessageCallback === void 0 ? void 0 : _this_onMessageCallback.call(_this, event);
|
|
335
|
+
// 处理事件
|
|
336
|
+
switch(event.type){
|
|
337
|
+
case EventType.ActivityDelta:
|
|
338
|
+
this.handleActivityDeltaEvent(event);
|
|
339
|
+
break;
|
|
340
|
+
case EventType.ActivitySnapshot:
|
|
341
|
+
this.handleActivitySnapshotEvent(event);
|
|
342
|
+
break;
|
|
343
|
+
case EventType.Custom:
|
|
344
|
+
this.handleCustomEvent(event);
|
|
345
|
+
break;
|
|
346
|
+
case EventType.MessagesSnapshot:
|
|
347
|
+
this.handleMessagesSnapshotEvent(event);
|
|
348
|
+
break;
|
|
349
|
+
case EventType.Raw:
|
|
350
|
+
this.handleRawEvent(event);
|
|
351
|
+
break;
|
|
352
|
+
case EventType.RunError:
|
|
353
|
+
this.handleRunErrorEvent(event);
|
|
354
|
+
break;
|
|
355
|
+
case EventType.RunFinished:
|
|
356
|
+
this.handleRunFinishedEvent(event);
|
|
357
|
+
break;
|
|
358
|
+
case EventType.RunStarted:
|
|
359
|
+
this.handleRunStartedEvent(event);
|
|
360
|
+
break;
|
|
361
|
+
case EventType.StateDelta:
|
|
362
|
+
this.handleStateDeltaEvent(event);
|
|
363
|
+
break;
|
|
364
|
+
case EventType.StateSnapshot:
|
|
365
|
+
this.handleStateSnapshotEvent(event);
|
|
366
|
+
break;
|
|
367
|
+
case EventType.StepFinished:
|
|
368
|
+
this.handleStepFinishedEvent(event);
|
|
369
|
+
break;
|
|
370
|
+
case EventType.StepStarted:
|
|
371
|
+
this.handleStepStartedEvent(event);
|
|
372
|
+
break;
|
|
373
|
+
case EventType.TextMessageChunk:
|
|
374
|
+
this.handleTextMessageChunkEvent(event);
|
|
375
|
+
break;
|
|
376
|
+
case EventType.TextMessageContent:
|
|
377
|
+
this.handleTextMessageContentEvent(event);
|
|
378
|
+
break;
|
|
379
|
+
case EventType.TextMessageEnd:
|
|
380
|
+
this.handleTextMessageEndEvent(event);
|
|
381
|
+
break;
|
|
382
|
+
case EventType.TextMessageStart:
|
|
383
|
+
this.handleTextMessageStartEvent(event);
|
|
384
|
+
break;
|
|
385
|
+
case EventType.ThinkingEnd:
|
|
386
|
+
this.handleThinkingEndEvent(event);
|
|
387
|
+
break;
|
|
388
|
+
case EventType.ThinkingStart:
|
|
389
|
+
this.handleThinkingStartEvent(event);
|
|
390
|
+
break;
|
|
391
|
+
case EventType.ThinkingTextMessageContent:
|
|
392
|
+
this.handleThinkingTextMessageContentEvent(event);
|
|
393
|
+
break;
|
|
394
|
+
case EventType.ThinkingTextMessageEnd:
|
|
395
|
+
this.handleThinkingTextMessageEndEvent(event);
|
|
396
|
+
break;
|
|
397
|
+
case EventType.ThinkingTextMessageStart:
|
|
398
|
+
this.handleThinkingTextMessageStartEvent(event);
|
|
399
|
+
break;
|
|
400
|
+
case EventType.ToolCallArgs:
|
|
401
|
+
this.handleToolCallArgsEvent(event);
|
|
402
|
+
break;
|
|
403
|
+
case EventType.ToolCallChunk:
|
|
404
|
+
this.handleToolCallChunkEvent(event);
|
|
405
|
+
break;
|
|
406
|
+
case EventType.ToolCallEnd:
|
|
407
|
+
this.handleToolCallEndEvent(event);
|
|
408
|
+
break;
|
|
409
|
+
case EventType.ToolCallResult:
|
|
410
|
+
this.handleToolCallResultEvent(event);
|
|
411
|
+
break;
|
|
412
|
+
case EventType.ToolCallStart:
|
|
413
|
+
this.handleToolCallStartEvent(event);
|
|
414
|
+
break;
|
|
415
|
+
default:
|
|
416
|
+
break;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
onStart() {
|
|
420
|
+
var _this_onStartCallback, _this;
|
|
421
|
+
(_this_onStartCallback = (_this = this).onStartCallback) === null || _this_onStartCallback === void 0 ? void 0 : _this_onStartCallback.call(_this);
|
|
422
|
+
}
|
|
423
|
+
constructor(params){
|
|
424
|
+
_define_property(this, "messageModule", void 0);
|
|
425
|
+
_define_property(this, "onDoneCallback", void 0);
|
|
426
|
+
_define_property(this, "onErrorCallback", void 0);
|
|
427
|
+
_define_property(this, "onMessageCallback", void 0);
|
|
428
|
+
_define_property(this, "onStartCallback", void 0);
|
|
429
|
+
this.onDoneCallback = params === null || params === void 0 ? void 0 : params.onDone;
|
|
430
|
+
this.onErrorCallback = params === null || params === void 0 ? void 0 : params.onError;
|
|
431
|
+
this.onMessageCallback = params === null || params === void 0 ? void 0 : params.onMessage;
|
|
432
|
+
this.onStartCallback = params === null || params === void 0 ? void 0 : params.onStart;
|
|
433
|
+
}
|
|
434
|
+
}
|