@agentscope-ai/agentscope 0.0.3 → 0.0.5
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/dist/agent/index.d.mts +7 -7
- package/dist/agent/index.d.ts +7 -7
- package/dist/agent/index.js +14 -7
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/index.mjs +14 -7
- package/dist/agent/index.mjs.map +1 -1
- package/dist/{base-Dh5vEBQD.d.mts → base-BB9eTlit.d.mts} +1 -1
- package/dist/{base-D9uCcDjZ.d.mts → base-BDyDUIhj.d.mts} +3 -3
- package/dist/{base-Bo8TzBQq.d.mts → base-BI5s2ksj.d.mts} +2 -2
- package/dist/{base-t7G4uaR_.d.ts → base-CFDeoJRe.d.ts} +2 -2
- package/dist/{base-Co-MzdN5.d.ts → base-DHtZCg94.d.ts} +1 -1
- package/dist/{base-TYjCCv7T.d.ts → base-qmU135_k.d.ts} +3 -3
- package/dist/{block-7fd6byyN.d.mts → block-BqWf-Qcb.d.mts} +19 -3
- package/dist/{block-7fd6byyN.d.ts → block-BqWf-Qcb.d.ts} +19 -3
- package/dist/event/index.d.mts +1 -14
- package/dist/event/index.d.ts +1 -14
- package/dist/formatter/index.d.mts +4 -3
- package/dist/formatter/index.d.ts +4 -3
- package/dist/formatter/index.js.map +1 -1
- package/dist/formatter/index.mjs.map +1 -1
- package/dist/{index-DaopL-Vp.d.ts → index-9YC8onn7.d.ts} +1 -1
- package/dist/{index-BVNbIN62.d.mts → index-DpRGxYeT.d.mts} +1 -1
- package/dist/mcp/index.d.mts +2 -2
- package/dist/mcp/index.d.ts +2 -2
- package/dist/message/index.d.mts +3 -2
- package/dist/message/index.d.ts +3 -2
- package/dist/message/index.js +181 -0
- package/dist/message/index.js.map +1 -1
- package/dist/message/index.mjs +180 -0
- package/dist/message/index.mjs.map +1 -1
- package/dist/{message-CYnHiEVt.d.mts → message-D-LObC06.d.mts} +13 -2
- package/dist/{message-DZN7LetB.d.ts → message-DU0_qm3u.d.ts} +13 -2
- package/dist/model/index.d.mts +6 -5
- package/dist/model/index.d.ts +6 -5
- package/dist/model/index.js +22 -11
- package/dist/model/index.js.map +1 -1
- package/dist/model/index.mjs +22 -11
- package/dist/model/index.mjs.map +1 -1
- package/dist/storage/index.d.mts +4 -3
- package/dist/storage/index.d.ts +4 -3
- package/dist/tool/index.d.mts +4 -4
- package/dist/tool/index.d.ts +4 -4
- package/dist/{toolkit-BuMTkbGg.d.ts → toolkit-CLGa-xW0.d.ts} +2 -2
- package/dist/{toolkit-CH9qKAy9.d.mts → toolkit-DvER4yhm.d.mts} +2 -2
- package/package.json +1 -1
- package/src/agent/agent.test.ts +41 -8
- package/src/agent/agent.ts +15 -9
- package/src/formatter/dashscope-chat-formatter.test.ts +3 -0
- package/src/formatter/openai-chat-formatter.test.ts +9 -1
- package/src/mcp/http.test.ts +2 -0
- package/src/mcp/stdio.test.ts +1 -0
- package/src/message/append-event.test.ts +783 -0
- package/src/message/block.ts +9 -2
- package/src/message/index.ts +3 -0
- package/src/message/message.test.ts +2 -0
- package/src/message/message.ts +227 -0
- package/src/model/dashscope-model.test.ts +4 -0
- package/src/model/dashscope-model.ts +3 -0
- package/src/model/deepseek-model.test.ts +2 -0
- package/src/model/deepseek-model.ts +3 -0
- package/src/model/ollama-model.test.ts +1 -0
- package/src/model/ollama-model.ts +2 -0
- package/src/model/openai-model.ts +3 -0
- package/src/storage/file-system.test.ts +1 -0
- package/src/tool/toolkit.test.ts +12 -0
package/dist/message/index.mjs
CHANGED
|
@@ -49,6 +49,185 @@ function getContentBlocks(msg, blockType) {
|
|
|
49
49
|
if (!blockType) return msg.content;
|
|
50
50
|
return msg.content.filter((block) => block.type === blockType);
|
|
51
51
|
}
|
|
52
|
+
function findBlock(msg, blockType, blockId) {
|
|
53
|
+
return msg.content.find((block) => block.type === blockType && block.id === blockId);
|
|
54
|
+
}
|
|
55
|
+
function appendEvent(msg, event) {
|
|
56
|
+
if (!("reply_id" in event)) return msg;
|
|
57
|
+
if (event.reply_id !== msg.id) {
|
|
58
|
+
console.warn(
|
|
59
|
+
`Event reply_id "${event.reply_id}" does not match message id "${msg.id}", skipping.`
|
|
60
|
+
);
|
|
61
|
+
return msg;
|
|
62
|
+
}
|
|
63
|
+
switch (event.type) {
|
|
64
|
+
case "REPLY_END" /* REPLY_END */:
|
|
65
|
+
msg.finished_at = event.created_at;
|
|
66
|
+
break;
|
|
67
|
+
case "TEXT_BLOCK_START" /* TEXT_BLOCK_START */:
|
|
68
|
+
msg.content.push({ type: "text", id: event.block_id, text: "" });
|
|
69
|
+
break;
|
|
70
|
+
case "TEXT_BLOCK_DELTA" /* TEXT_BLOCK_DELTA */: {
|
|
71
|
+
const block = findBlock(msg, "text", event.block_id);
|
|
72
|
+
if (!block) {
|
|
73
|
+
console.warn(`TextBlock "${event.block_id}" not found, skipping.`);
|
|
74
|
+
} else {
|
|
75
|
+
block.text += event.delta;
|
|
76
|
+
}
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
case "TEXT_BLOCK_END" /* TEXT_BLOCK_END */:
|
|
80
|
+
break;
|
|
81
|
+
case "THINKING_BLOCK_START" /* THINKING_BLOCK_START */:
|
|
82
|
+
msg.content.push({ type: "thinking", id: event.block_id, thinking: "" });
|
|
83
|
+
break;
|
|
84
|
+
case "THINKING_BLOCK_DELTA" /* THINKING_BLOCK_DELTA */: {
|
|
85
|
+
const block = findBlock(msg, "thinking", event.block_id);
|
|
86
|
+
if (!block) {
|
|
87
|
+
console.warn(`ThinkingBlock "${event.block_id}" not found, skipping.`);
|
|
88
|
+
} else {
|
|
89
|
+
block.thinking += event.delta;
|
|
90
|
+
}
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
case "THINKING_BLOCK_END" /* THINKING_BLOCK_END */:
|
|
94
|
+
break;
|
|
95
|
+
case "DATA_BLOCK_START" /* DATA_BLOCK_START */:
|
|
96
|
+
msg.content.push({
|
|
97
|
+
type: "data",
|
|
98
|
+
id: event.block_id,
|
|
99
|
+
source: { type: "base64", data: "", media_type: event.media_type }
|
|
100
|
+
});
|
|
101
|
+
break;
|
|
102
|
+
case "DATA_BLOCK_DELTA" /* DATA_BLOCK_DELTA */: {
|
|
103
|
+
const block = findBlock(msg, "data", event.block_id);
|
|
104
|
+
if (!block) {
|
|
105
|
+
console.warn(`DataBlock "${event.block_id}" not found, skipping.`);
|
|
106
|
+
} else {
|
|
107
|
+
block.source.data += event.data;
|
|
108
|
+
}
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
case "DATA_BLOCK_END" /* DATA_BLOCK_END */:
|
|
112
|
+
break;
|
|
113
|
+
case "TOOL_CALL_START" /* TOOL_CALL_START */:
|
|
114
|
+
msg.content.push({
|
|
115
|
+
type: "tool_call",
|
|
116
|
+
id: event.tool_call_id,
|
|
117
|
+
name: event.tool_call_name,
|
|
118
|
+
input: "",
|
|
119
|
+
state: "pending"
|
|
120
|
+
});
|
|
121
|
+
break;
|
|
122
|
+
case "TOOL_CALL_DELTA" /* TOOL_CALL_DELTA */: {
|
|
123
|
+
const block = findBlock(msg, "tool_call", event.tool_call_id);
|
|
124
|
+
if (!block) {
|
|
125
|
+
console.warn(`ToolCallBlock "${event.tool_call_id}" not found, skipping.`);
|
|
126
|
+
} else {
|
|
127
|
+
block.input += event.delta;
|
|
128
|
+
}
|
|
129
|
+
break;
|
|
130
|
+
}
|
|
131
|
+
case "TOOL_CALL_END" /* TOOL_CALL_END */:
|
|
132
|
+
break;
|
|
133
|
+
case "TOOL_RESULT_START" /* TOOL_RESULT_START */:
|
|
134
|
+
msg.content.push({
|
|
135
|
+
type: "tool_result",
|
|
136
|
+
id: event.tool_call_id,
|
|
137
|
+
name: event.tool_call_name,
|
|
138
|
+
output: [],
|
|
139
|
+
state: "running"
|
|
140
|
+
});
|
|
141
|
+
break;
|
|
142
|
+
case "TOOL_RESULT_TEXT_DELTA" /* TOOL_RESULT_TEXT_DELTA */: {
|
|
143
|
+
const block = findBlock(msg, "tool_result", event.tool_call_id);
|
|
144
|
+
if (!block) {
|
|
145
|
+
console.warn(`ToolResultBlock "${event.tool_call_id}" not found, skipping.`);
|
|
146
|
+
} else {
|
|
147
|
+
const trb = block;
|
|
148
|
+
if (typeof trb.output === "string") {
|
|
149
|
+
trb.output = [{ type: "text", id: crypto.randomUUID(), text: trb.output }];
|
|
150
|
+
}
|
|
151
|
+
const last = trb.output[trb.output.length - 1];
|
|
152
|
+
if (!last || last.type !== "text") {
|
|
153
|
+
trb.output.push({
|
|
154
|
+
type: "text",
|
|
155
|
+
id: event.block_id ?? crypto.randomUUID(),
|
|
156
|
+
text: event.delta
|
|
157
|
+
});
|
|
158
|
+
} else {
|
|
159
|
+
last.text += event.delta;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
case "TOOL_RESULT_DATA_DELTA" /* TOOL_RESULT_DATA_DELTA */: {
|
|
165
|
+
const block = findBlock(msg, "tool_result", event.tool_call_id);
|
|
166
|
+
if (!block) {
|
|
167
|
+
console.warn(`ToolResultBlock "${event.tool_call_id}" not found, skipping.`);
|
|
168
|
+
} else {
|
|
169
|
+
const trb = block;
|
|
170
|
+
if (typeof trb.output === "string") {
|
|
171
|
+
trb.output = [{ type: "text", id: crypto.randomUUID(), text: trb.output }];
|
|
172
|
+
}
|
|
173
|
+
const source = event.data != null ? { type: "base64", data: event.data, media_type: event.media_type } : { type: "url", url: event.url, media_type: event.media_type };
|
|
174
|
+
trb.output.push({ type: "data", id: event.block_id, source });
|
|
175
|
+
}
|
|
176
|
+
break;
|
|
177
|
+
}
|
|
178
|
+
case "TOOL_RESULT_END" /* TOOL_RESULT_END */: {
|
|
179
|
+
const block = findBlock(msg, "tool_result", event.tool_call_id);
|
|
180
|
+
if (!block) {
|
|
181
|
+
console.warn(`ToolResultBlock "${event.tool_call_id}" not found, skipping.`);
|
|
182
|
+
} else {
|
|
183
|
+
block.state = event.state;
|
|
184
|
+
}
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
case "MODEL_CALL_END" /* MODEL_CALL_END */:
|
|
188
|
+
if (msg.usage) {
|
|
189
|
+
msg.usage.inputTokens += event.input_tokens;
|
|
190
|
+
msg.usage.outputTokens += event.output_tokens;
|
|
191
|
+
} else {
|
|
192
|
+
msg.usage = {
|
|
193
|
+
inputTokens: event.input_tokens,
|
|
194
|
+
outputTokens: event.output_tokens
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
break;
|
|
198
|
+
case "REQUIRE_USER_CONFIRM" /* REQUIRE_USER_CONFIRM */:
|
|
199
|
+
for (const tc of event.tool_calls) {
|
|
200
|
+
const b = findBlock(msg, "tool_call", tc.id);
|
|
201
|
+
if (b) {
|
|
202
|
+
b.state = "asking";
|
|
203
|
+
if (tc.suggested_rules !== void 0) {
|
|
204
|
+
b.suggested_rules = tc.suggested_rules;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
break;
|
|
209
|
+
case "USER_CONFIRM_RESULT" /* USER_CONFIRM_RESULT */:
|
|
210
|
+
for (const result of event.confirm_results) {
|
|
211
|
+
const b = findBlock(msg, "tool_call", result.tool_call.id);
|
|
212
|
+
if (b) {
|
|
213
|
+
b.state = result.confirmed ? "allowed" : "finished";
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
break;
|
|
217
|
+
case "REQUIRE_EXTERNAL_EXECUTION" /* REQUIRE_EXTERNAL_EXECUTION */:
|
|
218
|
+
for (const tc of event.tool_calls) {
|
|
219
|
+
const b = findBlock(msg, "tool_call", tc.id);
|
|
220
|
+
if (b) b.state = "submitted";
|
|
221
|
+
}
|
|
222
|
+
break;
|
|
223
|
+
case "EXTERNAL_EXECUTION_RESULT" /* EXTERNAL_EXECUTION_RESULT */:
|
|
224
|
+
for (const result of event.execution_results) {
|
|
225
|
+
msg.content.push(result);
|
|
226
|
+
}
|
|
227
|
+
break;
|
|
228
|
+
}
|
|
229
|
+
return msg;
|
|
230
|
+
}
|
|
52
231
|
|
|
53
232
|
// src/message/enums.ts
|
|
54
233
|
var GenerateReason = /* @__PURE__ */ ((GenerateReason2) => {
|
|
@@ -61,6 +240,7 @@ export {
|
|
|
61
240
|
GenerateReason,
|
|
62
241
|
SystemMsg,
|
|
63
242
|
UserMsg,
|
|
243
|
+
appendEvent,
|
|
64
244
|
createMsg,
|
|
65
245
|
getContentBlocks,
|
|
66
246
|
getTextContent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/message/message.ts","../../src/message/enums.ts"],"sourcesContent":["import { JSONSerializableObject } from '../type';\nimport {\n ContentBlock,\n TextBlock,\n ThinkingBlock,\n ToolResultBlock,\n ToolCallBlock,\n DataBlock,\n} from './block';\n\n/** A chat message exchanged between agents or between an agent and a model. */\nexport interface Msg {\n /** Unique identifier for the message. */\n id: string;\n /** Display name of the message sender. */\n name: string;\n /** Conversation role of the sender. */\n role: 'user' | 'assistant' | 'system';\n /** Message body. */\n content: ContentBlock[];\n /** Arbitrary key-value metadata attached to the message. */\n metadata: Record<string, JSONSerializableObject>;\n /** ISO-8601 creation timestamp. */\n created_at: string;\n /** ISO-8601 finished timestamp. */\n finished_at?: string | null;\n /** Usage information for the message, such as token counts. */\n usage?: {\n inputTokens: number;\n outputTokens: number;\n };\n}\n\n/**\n * Create a new {@link Msg} object, filling in `id` and `created_at` when omitted.\n * A plain string `content` is automatically wrapped in a single {@link TextBlock}.\n * @param root0\n * @param root0.name\n * @param root0.content\n * @param root0.role\n * @param root0.metadata\n * @param root0.id\n * @param root0.created_at\n * @param root0.finished_at\n * @param root0.usage\n * @returns A Msg object.\n */\nexport function createMsg({\n name,\n content,\n role,\n metadata = {},\n id = crypto.randomUUID(),\n created_at = new Date().toISOString(),\n finished_at,\n usage,\n}: Omit<Msg, 'id' | 'created_at' | 'metadata' | 'content'> &\n Partial<Pick<Msg, 'id' | 'created_at' | 'metadata'>> & {\n content: string | ContentBlock[];\n }): Msg {\n const contentBlocks: ContentBlock[] =\n typeof content === 'string'\n ? [{ id: crypto.randomUUID(), type: 'text', text: content } as TextBlock]\n : content;\n return { id, name, role, content: contentBlocks, metadata, created_at, finished_at, usage };\n}\n\n/**\n * Create a user {@link Msg}.\n * @param root0\n * @param root0.name\n * @param root0.content\n * @param root0.metadata\n * @param root0.id\n * @param root0.created_at\n * @returns A Msg object with role 'user'.\n */\nexport function UserMsg({\n name,\n content,\n metadata = {},\n id = crypto.randomUUID(),\n created_at = new Date().toISOString(),\n}: {\n name: string;\n content: string | ContentBlock[];\n metadata?: Record<string, JSONSerializableObject>;\n id?: string;\n created_at?: string;\n}): Msg {\n return createMsg({ name, content, role: 'user', metadata, id, created_at });\n}\n\n/**\n * Create an assistant {@link Msg}.\n * @param root0\n * @param root0.name\n * @param root0.content\n * @param root0.metadata\n * @param root0.id\n * @param root0.created_at\n * @param root0.usage\n * @returns A Msg object with role 'assistant'.\n */\nexport function AssistantMsg({\n name,\n content,\n metadata = {},\n id = crypto.randomUUID(),\n created_at = new Date().toISOString(),\n usage,\n}: {\n name: string;\n content: string | ContentBlock[];\n metadata?: Record<string, JSONSerializableObject>;\n id?: string;\n created_at?: string;\n usage?: Msg['usage'];\n}): Msg {\n return createMsg({ name, content, role: 'assistant', metadata, id, created_at, usage });\n}\n\n/**\n * Create a system {@link Msg}.\n * @param root0\n * @param root0.name\n * @param root0.content\n * @param root0.metadata\n * @param root0.id\n * @param root0.created_at\n * @returns A Msg object with role 'system'.\n */\nexport function SystemMsg({\n name,\n content,\n metadata = {},\n id = crypto.randomUUID(),\n created_at = new Date().toISOString(),\n}: {\n name: string;\n content: string | ContentBlock[];\n metadata?: Record<string, JSONSerializableObject>;\n id?: string;\n created_at?: string;\n}): Msg {\n return createMsg({ name, content, role: 'system', metadata, id, created_at });\n}\n\n/**\n * Extract the plain-text content from a message.\n *\n * When `content` is a string it is returned as-is. When it is an array of\n * content blocks, all {@link TextBlock} texts are joined with `separator`.\n *\n * @param msg - The message to read.\n * @param separator - String inserted between consecutive text blocks. Defaults to `'\\n'`.\n * @returns The concatenated text, or `null` when no text blocks are present.\n */\nexport function getTextContent(msg: Msg, separator: string = '\\n'): string | null {\n const textBlocks = msg.content.filter(block => block.type === 'text');\n if (textBlocks.length === 0) return null;\n return textBlocks.map(block => (block as TextBlock).text).join(separator);\n}\n\n/**\n * Return all content blocks from a message, regardless of type.\n *\n * When `content` is a plain string it is wrapped in a single {@link TextBlock}.\n *\n * @param msg - The message to read.\n * @returns An array of all {@link ContentBlock} objects.\n */\nexport function getContentBlocks(msg: Msg): ContentBlock[];\nexport function getContentBlocks(msg: Msg, blockType: 'text'): TextBlock[];\nexport function getContentBlocks(msg: Msg, blockType: 'thinking'): ThinkingBlock[];\nexport function getContentBlocks(msg: Msg, blockType: 'data'): DataBlock[];\nexport function getContentBlocks(msg: Msg, blockType: 'tool_call'): ToolCallBlock[];\nexport function getContentBlocks(msg: Msg, blockType: 'tool_result'): ToolResultBlock[];\nexport function getContentBlocks(\n msg: Msg,\n blockType?: 'text' | 'thinking' | 'data' | 'tool_call' | 'tool_result'\n): ContentBlock[] {\n if (!blockType) return msg.content;\n return msg.content.filter(block => block.type === blockType);\n}\n","export enum GenerateReason {\n AWAITING_TOOL_RESULT = 'AWAITING_TOOL_RESULT',\n AWAITING_USER_CONFIRMATION = 'AWAITING_USER_CONFIRMATION',\n}\n"],"mappings":";AA+CO,SAAS,UAAU;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW,CAAC;AAAA,EACZ,KAAK,OAAO,WAAW;AAAA,EACvB,cAAa,oBAAI,KAAK,GAAE,YAAY;AAAA,EACpC;AAAA,EACA;AACJ,GAGY;AACR,QAAM,gBACF,OAAO,YAAY,WACb,CAAC,EAAE,IAAI,OAAO,WAAW,GAAG,MAAM,QAAQ,MAAM,QAAQ,CAAc,IACtE;AACV,SAAO,EAAE,IAAI,MAAM,MAAM,SAAS,eAAe,UAAU,YAAY,aAAa,MAAM;AAC9F;AAYO,SAAS,QAAQ;AAAA,EACpB;AAAA,EACA;AAAA,EACA,WAAW,CAAC;AAAA,EACZ,KAAK,OAAO,WAAW;AAAA,EACvB,cAAa,oBAAI,KAAK,GAAE,YAAY;AACxC,GAMQ;AACJ,SAAO,UAAU,EAAE,MAAM,SAAS,MAAM,QAAQ,UAAU,IAAI,WAAW,CAAC;AAC9E;AAaO,SAAS,aAAa;AAAA,EACzB;AAAA,EACA;AAAA,EACA,WAAW,CAAC;AAAA,EACZ,KAAK,OAAO,WAAW;AAAA,EACvB,cAAa,oBAAI,KAAK,GAAE,YAAY;AAAA,EACpC;AACJ,GAOQ;AACJ,SAAO,UAAU,EAAE,MAAM,SAAS,MAAM,aAAa,UAAU,IAAI,YAAY,MAAM,CAAC;AAC1F;AAYO,SAAS,UAAU;AAAA,EACtB;AAAA,EACA;AAAA,EACA,WAAW,CAAC;AAAA,EACZ,KAAK,OAAO,WAAW;AAAA,EACvB,cAAa,oBAAI,KAAK,GAAE,YAAY;AACxC,GAMQ;AACJ,SAAO,UAAU,EAAE,MAAM,SAAS,MAAM,UAAU,UAAU,IAAI,WAAW,CAAC;AAChF;AAYO,SAAS,eAAe,KAAU,YAAoB,MAAqB;AAC9E,QAAM,aAAa,IAAI,QAAQ,OAAO,WAAS,MAAM,SAAS,MAAM;AACpE,MAAI,WAAW,WAAW,EAAG,QAAO;AACpC,SAAO,WAAW,IAAI,WAAU,MAAoB,IAAI,EAAE,KAAK,SAAS;AAC5E;AAgBO,SAAS,iBACZ,KACA,WACc;AACd,MAAI,CAAC,UAAW,QAAO,IAAI;AAC3B,SAAO,IAAI,QAAQ,OAAO,WAAS,MAAM,SAAS,SAAS;AAC/D;;;ACxLO,IAAK,iBAAL,kBAAKA,oBAAL;AACH,EAAAA,gBAAA,0BAAuB;AACvB,EAAAA,gBAAA,gCAA6B;AAFrB,SAAAA;AAAA,GAAA;","names":["GenerateReason"]}
|
|
1
|
+
{"version":3,"sources":["../../src/message/message.ts","../../src/message/enums.ts"],"sourcesContent":["import { JSONSerializableObject } from '../type';\nimport {\n ContentBlock,\n TextBlock,\n ThinkingBlock,\n ToolResultBlock,\n ToolCallBlock,\n DataBlock,\n Base64Source,\n URLSource,\n} from './block';\nimport { AgentEvent, EventType } from '../event';\n\n/** A chat message exchanged between agents or between an agent and a model. */\nexport interface Msg {\n /** Unique identifier for the message. */\n id: string;\n /** Display name of the message sender. */\n name: string;\n /** Conversation role of the sender. */\n role: 'user' | 'assistant' | 'system';\n /** Message body. */\n content: ContentBlock[];\n /** Arbitrary key-value metadata attached to the message. */\n metadata: Record<string, JSONSerializableObject>;\n /** ISO-8601 creation timestamp. */\n created_at: string;\n /** ISO-8601 finished timestamp. */\n finished_at?: string | null;\n /** Usage information for the message, such as token counts. */\n usage?: {\n inputTokens: number;\n outputTokens: number;\n };\n}\n\n/**\n * Create a new {@link Msg} object, filling in `id` and `created_at` when omitted.\n * A plain string `content` is automatically wrapped in a single {@link TextBlock}.\n * @param root0\n * @param root0.name\n * @param root0.content\n * @param root0.role\n * @param root0.metadata\n * @param root0.id\n * @param root0.created_at\n * @param root0.finished_at\n * @param root0.usage\n * @returns A Msg object.\n */\nexport function createMsg({\n name,\n content,\n role,\n metadata = {},\n id = crypto.randomUUID(),\n created_at = new Date().toISOString(),\n finished_at,\n usage,\n}: Omit<Msg, 'id' | 'created_at' | 'metadata' | 'content'> &\n Partial<Pick<Msg, 'id' | 'created_at' | 'metadata'>> & {\n content: string | ContentBlock[];\n }): Msg {\n const contentBlocks: ContentBlock[] =\n typeof content === 'string'\n ? [{ id: crypto.randomUUID(), type: 'text', text: content } as TextBlock]\n : content;\n return { id, name, role, content: contentBlocks, metadata, created_at, finished_at, usage };\n}\n\n/**\n * Create a user {@link Msg}.\n * @param root0\n * @param root0.name\n * @param root0.content\n * @param root0.metadata\n * @param root0.id\n * @param root0.created_at\n * @returns A Msg object with role 'user'.\n */\nexport function UserMsg({\n name,\n content,\n metadata = {},\n id = crypto.randomUUID(),\n created_at = new Date().toISOString(),\n}: {\n name: string;\n content: string | ContentBlock[];\n metadata?: Record<string, JSONSerializableObject>;\n id?: string;\n created_at?: string;\n}): Msg {\n return createMsg({ name, content, role: 'user', metadata, id, created_at });\n}\n\n/**\n * Create an assistant {@link Msg}.\n * @param root0\n * @param root0.name\n * @param root0.content\n * @param root0.metadata\n * @param root0.id\n * @param root0.created_at\n * @param root0.usage\n * @returns A Msg object with role 'assistant'.\n */\nexport function AssistantMsg({\n name,\n content,\n metadata = {},\n id = crypto.randomUUID(),\n created_at = new Date().toISOString(),\n usage,\n}: {\n name: string;\n content: string | ContentBlock[];\n metadata?: Record<string, JSONSerializableObject>;\n id?: string;\n created_at?: string;\n usage?: Msg['usage'];\n}): Msg {\n return createMsg({ name, content, role: 'assistant', metadata, id, created_at, usage });\n}\n\n/**\n * Create a system {@link Msg}.\n * @param root0\n * @param root0.name\n * @param root0.content\n * @param root0.metadata\n * @param root0.id\n * @param root0.created_at\n * @returns A Msg object with role 'system'.\n */\nexport function SystemMsg({\n name,\n content,\n metadata = {},\n id = crypto.randomUUID(),\n created_at = new Date().toISOString(),\n}: {\n name: string;\n content: string | ContentBlock[];\n metadata?: Record<string, JSONSerializableObject>;\n id?: string;\n created_at?: string;\n}): Msg {\n return createMsg({ name, content, role: 'system', metadata, id, created_at });\n}\n\n/**\n * Extract the plain-text content from a message.\n *\n * When `content` is a string it is returned as-is. When it is an array of\n * content blocks, all {@link TextBlock} texts are joined with `separator`.\n *\n * @param msg - The message to read.\n * @param separator - String inserted between consecutive text blocks. Defaults to `'\\n'`.\n * @returns The concatenated text, or `null` when no text blocks are present.\n */\nexport function getTextContent(msg: Msg, separator: string = '\\n'): string | null {\n const textBlocks = msg.content.filter(block => block.type === 'text');\n if (textBlocks.length === 0) return null;\n return textBlocks.map(block => (block as TextBlock).text).join(separator);\n}\n\n/**\n * Return all content blocks from a message, regardless of type.\n *\n * When `content` is a plain string it is wrapped in a single {@link TextBlock}.\n *\n * @param msg - The message to read.\n * @returns An array of all {@link ContentBlock} objects.\n */\nexport function getContentBlocks(msg: Msg): ContentBlock[];\nexport function getContentBlocks(msg: Msg, blockType: 'text'): TextBlock[];\nexport function getContentBlocks(msg: Msg, blockType: 'thinking'): ThinkingBlock[];\nexport function getContentBlocks(msg: Msg, blockType: 'data'): DataBlock[];\nexport function getContentBlocks(msg: Msg, blockType: 'tool_call'): ToolCallBlock[];\nexport function getContentBlocks(msg: Msg, blockType: 'tool_result'): ToolResultBlock[];\nexport function getContentBlocks(\n msg: Msg,\n blockType?: 'text' | 'thinking' | 'data' | 'tool_call' | 'tool_result'\n): ContentBlock[] {\n if (!blockType) return msg.content;\n return msg.content.filter(block => block.type === blockType);\n}\n\n/**\n * Find a content block by type and id within a message.\n * @param msg\n * @param blockType\n * @param blockId\n * @returns The matching {@link ContentBlock}, or `undefined` if not found.\n */\nfunction findBlock(msg: Msg, blockType: string, blockId: string): ContentBlock | undefined {\n return msg.content.find(block => block.type === blockType && block.id === blockId);\n}\n\n/**\n * Apply a streaming {@link AgentEvent} to a {@link Msg}, mutating it in place.\n *\n * Only `content` and `finished_at` are ever modified. Events whose\n * `reply_id` does not match `msg.id` are skipped with a warning.\n * @param msg\n * @param event\n * @returns The mutated {@link Msg} object.\n */\nexport function appendEvent(msg: Msg, event: AgentEvent): Msg {\n if (!('reply_id' in event)) return msg;\n if (event.reply_id !== msg.id) {\n console.warn(\n `Event reply_id \"${event.reply_id}\" does not match message id \"${msg.id}\", skipping.`\n );\n return msg;\n }\n\n switch (event.type) {\n case EventType.REPLY_END:\n msg.finished_at = event.created_at;\n break;\n\n case EventType.TEXT_BLOCK_START:\n msg.content.push({ type: 'text', id: event.block_id, text: '' });\n break;\n\n case EventType.TEXT_BLOCK_DELTA: {\n const block = findBlock(msg, 'text', event.block_id);\n if (!block) {\n console.warn(`TextBlock \"${event.block_id}\" not found, skipping.`);\n } else {\n (block as TextBlock).text += event.delta;\n }\n break;\n }\n\n case EventType.TEXT_BLOCK_END:\n break;\n\n case EventType.THINKING_BLOCK_START:\n msg.content.push({ type: 'thinking', id: event.block_id, thinking: '' });\n break;\n\n case EventType.THINKING_BLOCK_DELTA: {\n const block = findBlock(msg, 'thinking', event.block_id);\n if (!block) {\n console.warn(`ThinkingBlock \"${event.block_id}\" not found, skipping.`);\n } else {\n (block as ThinkingBlock).thinking += event.delta;\n }\n break;\n }\n\n case EventType.THINKING_BLOCK_END:\n break;\n\n case EventType.DATA_BLOCK_START:\n msg.content.push({\n type: 'data',\n id: event.block_id,\n source: { type: 'base64', data: '', media_type: event.media_type },\n });\n break;\n\n case EventType.DATA_BLOCK_DELTA: {\n const block = findBlock(msg, 'data', event.block_id);\n if (!block) {\n console.warn(`DataBlock \"${event.block_id}\" not found, skipping.`);\n } else {\n ((block as DataBlock).source as Base64Source).data += event.data;\n }\n break;\n }\n\n case EventType.DATA_BLOCK_END:\n break;\n\n case EventType.TOOL_CALL_START:\n msg.content.push({\n type: 'tool_call',\n id: event.tool_call_id,\n name: event.tool_call_name,\n input: '',\n state: 'pending',\n });\n break;\n\n case EventType.TOOL_CALL_DELTA: {\n const block = findBlock(msg, 'tool_call', event.tool_call_id);\n if (!block) {\n console.warn(`ToolCallBlock \"${event.tool_call_id}\" not found, skipping.`);\n } else {\n (block as ToolCallBlock).input += event.delta;\n }\n break;\n }\n\n case EventType.TOOL_CALL_END:\n break;\n\n case EventType.TOOL_RESULT_START:\n msg.content.push({\n type: 'tool_result',\n id: event.tool_call_id,\n name: event.tool_call_name,\n output: [],\n state: 'running',\n });\n break;\n\n case EventType.TOOL_RESULT_TEXT_DELTA: {\n const block = findBlock(msg, 'tool_result', event.tool_call_id);\n if (!block) {\n console.warn(`ToolResultBlock \"${event.tool_call_id}\" not found, skipping.`);\n } else {\n const trb = block as ToolResultBlock;\n if (typeof trb.output === 'string') {\n trb.output = [{ type: 'text', id: crypto.randomUUID(), text: trb.output }];\n }\n const last = trb.output[trb.output.length - 1];\n if (!last || last.type !== 'text') {\n trb.output.push({\n type: 'text',\n id: event.block_id ?? crypto.randomUUID(),\n text: event.delta,\n });\n } else {\n (last as TextBlock).text += event.delta;\n }\n }\n break;\n }\n\n case EventType.TOOL_RESULT_DATA_DELTA: {\n const block = findBlock(msg, 'tool_result', event.tool_call_id);\n if (!block) {\n console.warn(`ToolResultBlock \"${event.tool_call_id}\" not found, skipping.`);\n } else {\n const trb = block as ToolResultBlock;\n if (typeof trb.output === 'string') {\n trb.output = [{ type: 'text', id: crypto.randomUUID(), text: trb.output }];\n }\n const source: Base64Source | URLSource =\n event.data != null\n ? { type: 'base64', data: event.data, media_type: event.media_type }\n : { type: 'url', url: event.url!, media_type: event.media_type };\n trb.output.push({ type: 'data', id: event.block_id, source });\n }\n break;\n }\n\n case EventType.TOOL_RESULT_END: {\n const block = findBlock(msg, 'tool_result', event.tool_call_id);\n if (!block) {\n console.warn(`ToolResultBlock \"${event.tool_call_id}\" not found, skipping.`);\n } else {\n (block as ToolResultBlock).state = event.state;\n }\n break;\n }\n\n case EventType.MODEL_CALL_END:\n // Accumulated the input and output tokens here.\n if (msg.usage) {\n msg.usage.inputTokens += event.input_tokens;\n msg.usage.outputTokens += event.output_tokens;\n } else {\n msg.usage = {\n inputTokens: event.input_tokens,\n outputTokens: event.output_tokens,\n };\n }\n break;\n\n case EventType.REQUIRE_USER_CONFIRM:\n for (const tc of event.tool_calls) {\n const b = findBlock(msg, 'tool_call', tc.id);\n if (b) {\n (b as ToolCallBlock).state = 'asking';\n if (tc.suggested_rules !== undefined) {\n (b as ToolCallBlock).suggested_rules = tc.suggested_rules;\n }\n }\n }\n break;\n\n case EventType.USER_CONFIRM_RESULT:\n for (const result of event.confirm_results) {\n const b = findBlock(msg, 'tool_call', result.tool_call.id);\n if (b) {\n (b as ToolCallBlock).state = result.confirmed ? 'allowed' : 'finished';\n }\n }\n break;\n\n case EventType.REQUIRE_EXTERNAL_EXECUTION:\n for (const tc of event.tool_calls) {\n const b = findBlock(msg, 'tool_call', tc.id);\n if (b) (b as ToolCallBlock).state = 'submitted';\n }\n break;\n\n case EventType.EXTERNAL_EXECUTION_RESULT:\n for (const result of event.execution_results) {\n msg.content.push(result);\n }\n break;\n }\n\n return msg;\n}\n","export enum GenerateReason {\n AWAITING_TOOL_RESULT = 'AWAITING_TOOL_RESULT',\n AWAITING_USER_CONFIRMATION = 'AWAITING_USER_CONFIRMATION',\n}\n"],"mappings":"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","names":["GenerateReason"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { J as JSONSerializableObject } from './index-CAxQAkiP.mjs';
|
|
2
|
-
import { C as ContentBlock, T as TextBlock, a as ThinkingBlock, D as DataBlock, b as ToolCallBlock,
|
|
2
|
+
import { C as ContentBlock, T as TextBlock, a as ThinkingBlock, D as DataBlock, b as ToolCallBlock, d as ToolResultBlock } from './block-BqWf-Qcb.mjs';
|
|
3
|
+
import { AgentEvent } from './event/index.mjs';
|
|
3
4
|
|
|
4
5
|
/** A chat message exchanged between agents or between an agent and a model. */
|
|
5
6
|
interface Msg {
|
|
@@ -118,5 +119,15 @@ declare function getContentBlocks(msg: Msg, blockType: 'thinking'): ThinkingBloc
|
|
|
118
119
|
declare function getContentBlocks(msg: Msg, blockType: 'data'): DataBlock[];
|
|
119
120
|
declare function getContentBlocks(msg: Msg, blockType: 'tool_call'): ToolCallBlock[];
|
|
120
121
|
declare function getContentBlocks(msg: Msg, blockType: 'tool_result'): ToolResultBlock[];
|
|
122
|
+
/**
|
|
123
|
+
* Apply a streaming {@link AgentEvent} to a {@link Msg}, mutating it in place.
|
|
124
|
+
*
|
|
125
|
+
* Only `content` and `finished_at` are ever modified. Events whose
|
|
126
|
+
* `reply_id` does not match `msg.id` are skipped with a warning.
|
|
127
|
+
* @param msg
|
|
128
|
+
* @param event
|
|
129
|
+
* @returns The mutated {@link Msg} object.
|
|
130
|
+
*/
|
|
131
|
+
declare function appendEvent(msg: Msg, event: AgentEvent): Msg;
|
|
121
132
|
|
|
122
|
-
export { AssistantMsg as A, type Msg as M, SystemMsg as S, UserMsg as U,
|
|
133
|
+
export { AssistantMsg as A, type Msg as M, SystemMsg as S, UserMsg as U, appendEvent as a, getTextContent as b, createMsg as c, getContentBlocks as g };
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { J as JSONSerializableObject } from './index-CAxQAkiP.js';
|
|
2
|
-
import { C as ContentBlock, T as TextBlock, a as ThinkingBlock, D as DataBlock, b as ToolCallBlock,
|
|
2
|
+
import { C as ContentBlock, T as TextBlock, a as ThinkingBlock, D as DataBlock, b as ToolCallBlock, d as ToolResultBlock } from './block-BqWf-Qcb.js';
|
|
3
|
+
import { AgentEvent } from './event/index.js';
|
|
3
4
|
|
|
4
5
|
/** A chat message exchanged between agents or between an agent and a model. */
|
|
5
6
|
interface Msg {
|
|
@@ -118,5 +119,15 @@ declare function getContentBlocks(msg: Msg, blockType: 'thinking'): ThinkingBloc
|
|
|
118
119
|
declare function getContentBlocks(msg: Msg, blockType: 'data'): DataBlock[];
|
|
119
120
|
declare function getContentBlocks(msg: Msg, blockType: 'tool_call'): ToolCallBlock[];
|
|
120
121
|
declare function getContentBlocks(msg: Msg, blockType: 'tool_result'): ToolResultBlock[];
|
|
122
|
+
/**
|
|
123
|
+
* Apply a streaming {@link AgentEvent} to a {@link Msg}, mutating it in place.
|
|
124
|
+
*
|
|
125
|
+
* Only `content` and `finished_at` are ever modified. Events whose
|
|
126
|
+
* `reply_id` does not match `msg.id` are skipped with a warning.
|
|
127
|
+
* @param msg
|
|
128
|
+
* @param event
|
|
129
|
+
* @returns The mutated {@link Msg} object.
|
|
130
|
+
*/
|
|
131
|
+
declare function appendEvent(msg: Msg, event: AgentEvent): Msg;
|
|
121
132
|
|
|
122
|
-
export { AssistantMsg as A, type Msg as M, SystemMsg as S, UserMsg as U,
|
|
133
|
+
export { AssistantMsg as A, type Msg as M, SystemMsg as S, UserMsg as U, appendEvent as a, getTextContent as b, createMsg as c, getContentBlocks as g };
|
package/dist/model/index.d.mts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { C as ChatModelBase, c as ChatModelOptions, d as ChatModelRequestOptions, b as ChatResponse } from '../base-
|
|
2
|
-
export { a as ChatUsage } from '../base-
|
|
1
|
+
import { C as ChatModelBase, c as ChatModelOptions, d as ChatModelRequestOptions, b as ChatResponse } from '../base-BDyDUIhj.mjs';
|
|
2
|
+
export { a as ChatUsage } from '../base-BDyDUIhj.mjs';
|
|
3
3
|
import { a as ToolChoice, T as ToolSchema } from '../index-CAxQAkiP.mjs';
|
|
4
|
-
import { b as ToolCallBlock, T as TextBlock, a as ThinkingBlock } from '../block-
|
|
4
|
+
import { b as ToolCallBlock, T as TextBlock, a as ThinkingBlock } from '../block-BqWf-Qcb.mjs';
|
|
5
5
|
import { Ollama, AbortableAsyncIterator, ChatResponse as ChatResponse$1 } from 'ollama';
|
|
6
6
|
import { OpenAI } from 'openai';
|
|
7
7
|
import { ChatCompletionMessageParam, ChatCompletionToolChoiceOption } from 'openai/resources/chat/completions';
|
|
8
8
|
import 'zod';
|
|
9
|
-
import '../base-
|
|
10
|
-
import '../message-
|
|
9
|
+
import '../base-BI5s2ksj.mjs';
|
|
10
|
+
import '../message-D-LObC06.mjs';
|
|
11
|
+
import '../event/index.mjs';
|
|
11
12
|
|
|
12
13
|
interface DashScopeThinkingConfig {
|
|
13
14
|
/**
|
package/dist/model/index.d.ts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { C as ChatModelBase, c as ChatModelOptions, d as ChatModelRequestOptions, b as ChatResponse } from '../base-
|
|
2
|
-
export { a as ChatUsage } from '../base-
|
|
1
|
+
import { C as ChatModelBase, c as ChatModelOptions, d as ChatModelRequestOptions, b as ChatResponse } from '../base-qmU135_k.js';
|
|
2
|
+
export { a as ChatUsage } from '../base-qmU135_k.js';
|
|
3
3
|
import { a as ToolChoice, T as ToolSchema } from '../index-CAxQAkiP.js';
|
|
4
|
-
import { b as ToolCallBlock, T as TextBlock, a as ThinkingBlock } from '../block-
|
|
4
|
+
import { b as ToolCallBlock, T as TextBlock, a as ThinkingBlock } from '../block-BqWf-Qcb.js';
|
|
5
5
|
import { Ollama, AbortableAsyncIterator, ChatResponse as ChatResponse$1 } from 'ollama';
|
|
6
6
|
import { OpenAI } from 'openai';
|
|
7
7
|
import { ChatCompletionMessageParam, ChatCompletionToolChoiceOption } from 'openai/resources/chat/completions';
|
|
8
8
|
import 'zod';
|
|
9
|
-
import '../base-
|
|
10
|
-
import '../message-
|
|
9
|
+
import '../base-CFDeoJRe.js';
|
|
10
|
+
import '../message-DU0_qm3u.js';
|
|
11
|
+
import '../event/index.js';
|
|
11
12
|
|
|
12
13
|
interface DashScopeThinkingConfig {
|
|
13
14
|
/**
|
package/dist/model/index.js
CHANGED
|
@@ -938,7 +938,8 @@ var DashScopeChatModel = class extends ChatModelBase {
|
|
|
938
938
|
type: "tool_call",
|
|
939
939
|
id: String(toolCall.id),
|
|
940
940
|
name: String(toolCall.function.name),
|
|
941
|
-
input: inputString
|
|
941
|
+
input: inputString,
|
|
942
|
+
state: "pending"
|
|
942
943
|
});
|
|
943
944
|
}
|
|
944
945
|
});
|
|
@@ -1037,7 +1038,8 @@ var DashScopeChatModel = class extends ChatModelBase {
|
|
|
1037
1038
|
type: "tool_call",
|
|
1038
1039
|
id: meta.id,
|
|
1039
1040
|
name: meta.name,
|
|
1040
|
-
input: deltaArgs
|
|
1041
|
+
input: deltaArgs,
|
|
1042
|
+
state: "pending"
|
|
1041
1043
|
});
|
|
1042
1044
|
}
|
|
1043
1045
|
});
|
|
@@ -1064,7 +1066,8 @@ var DashScopeChatModel = class extends ChatModelBase {
|
|
|
1064
1066
|
type: "tool_call",
|
|
1065
1067
|
id: meta.id,
|
|
1066
1068
|
name: meta.name,
|
|
1067
|
-
input: accToolInputs.get(index) || "{}"
|
|
1069
|
+
input: accToolInputs.get(index) || "{}",
|
|
1070
|
+
state: "pending"
|
|
1068
1071
|
});
|
|
1069
1072
|
});
|
|
1070
1073
|
const blocks = this._dataToBlocks(accText, accThinking, finalToolCalls);
|
|
@@ -1212,7 +1215,8 @@ var DeepSeekChatModel = class extends ChatModelBase {
|
|
|
1212
1215
|
type: "tool_call",
|
|
1213
1216
|
id: String(toolCall.id),
|
|
1214
1217
|
name: String(toolCall.function.name),
|
|
1215
|
-
input: inputString
|
|
1218
|
+
input: inputString,
|
|
1219
|
+
state: "pending"
|
|
1216
1220
|
});
|
|
1217
1221
|
}
|
|
1218
1222
|
});
|
|
@@ -1309,7 +1313,8 @@ var DeepSeekChatModel = class extends ChatModelBase {
|
|
|
1309
1313
|
type: "tool_call",
|
|
1310
1314
|
id: meta.id,
|
|
1311
1315
|
name: meta.name,
|
|
1312
|
-
input: deltaArgs
|
|
1316
|
+
input: deltaArgs,
|
|
1317
|
+
state: "pending"
|
|
1313
1318
|
});
|
|
1314
1319
|
}
|
|
1315
1320
|
});
|
|
@@ -1336,7 +1341,8 @@ var DeepSeekChatModel = class extends ChatModelBase {
|
|
|
1336
1341
|
type: "tool_call",
|
|
1337
1342
|
id: meta.id,
|
|
1338
1343
|
name: meta.name,
|
|
1339
|
-
input: accToolInputs.get(index) || "{}"
|
|
1344
|
+
input: accToolInputs.get(index) || "{}",
|
|
1345
|
+
state: "pending"
|
|
1340
1346
|
});
|
|
1341
1347
|
});
|
|
1342
1348
|
const blocks = this._accDataToBlocks(accText, accThinking, finalToolCalls);
|
|
@@ -1509,7 +1515,8 @@ var OllamaChatModel = class extends ChatModelBase {
|
|
|
1509
1515
|
type: "tool_call",
|
|
1510
1516
|
id: toolId,
|
|
1511
1517
|
name: func.name,
|
|
1512
|
-
input: JSON.stringify(func.arguments)
|
|
1518
|
+
input: JSON.stringify(func.arguments),
|
|
1519
|
+
state: "pending"
|
|
1513
1520
|
};
|
|
1514
1521
|
toolCalls.set(toolId, toolCallBlock);
|
|
1515
1522
|
deltaToolCalls.set(toolId, toolCallBlock);
|
|
@@ -1569,7 +1576,8 @@ var OllamaChatModel = class extends ChatModelBase {
|
|
|
1569
1576
|
type: "tool_call",
|
|
1570
1577
|
id: `${idx}_${toolCall.function.name}`,
|
|
1571
1578
|
name: toolCall.function.name,
|
|
1572
|
-
input: JSON.stringify(toolCall.function.arguments)
|
|
1579
|
+
input: JSON.stringify(toolCall.function.arguments),
|
|
1580
|
+
state: "pending"
|
|
1573
1581
|
});
|
|
1574
1582
|
}
|
|
1575
1583
|
}
|
|
@@ -1706,7 +1714,8 @@ var OpenAIChatModel = class extends ChatModelBase {
|
|
|
1706
1714
|
type: "tool_call",
|
|
1707
1715
|
id: toolCall.id,
|
|
1708
1716
|
name: toolCall.function.name,
|
|
1709
|
-
input: toolCall.function.arguments
|
|
1717
|
+
input: toolCall.function.arguments,
|
|
1718
|
+
state: "pending"
|
|
1710
1719
|
});
|
|
1711
1720
|
}
|
|
1712
1721
|
});
|
|
@@ -1800,7 +1809,8 @@ var OpenAIChatModel = class extends ChatModelBase {
|
|
|
1800
1809
|
type: "tool_call",
|
|
1801
1810
|
id: meta.id,
|
|
1802
1811
|
name: meta.name,
|
|
1803
|
-
input: deltaArgs
|
|
1812
|
+
input: deltaArgs,
|
|
1813
|
+
state: "pending"
|
|
1804
1814
|
});
|
|
1805
1815
|
}
|
|
1806
1816
|
});
|
|
@@ -1829,7 +1839,8 @@ var OpenAIChatModel = class extends ChatModelBase {
|
|
|
1829
1839
|
type: "tool_call",
|
|
1830
1840
|
id: meta.id,
|
|
1831
1841
|
name: meta.name,
|
|
1832
|
-
input: accToolInputs.get(index) || "{}"
|
|
1842
|
+
input: accToolInputs.get(index) || "{}",
|
|
1843
|
+
state: "pending"
|
|
1833
1844
|
});
|
|
1834
1845
|
});
|
|
1835
1846
|
const blocks = this._accDataToBlocks(accText, finalToolCalls);
|