@baishuyun/coze-provider 0.0.5 → 0.0.7
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/.turbo/turbo-build.log +12 -15
- package/CHANGELOG.md +12 -0
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +83 -34
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +80 -31
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/coze-language-model.ts +54 -35
- package/src/coze-provider.ts +16 -19
- package/src/stream-trasnformer/fields-json-transform-stream.ts +16 -16
- package/src/stream-trasnformer/llm-chunk-injector-transform-stream.ts +8 -14
- package/src/stream-trasnformer/llm-part-transform-stream.ts +6 -10
- package/src/stream-trasnformer/mcp-chunk-filter-transform-stream.ts +6 -11
- package/src/types.ts +6 -6
- package/src/utils/create-error-stream.ts +32 -0
- package/src/utils/enqueue-text-info.ts +30 -20
- package/src/utils/mcp-to-llm-chunk.ts +30 -26
- package/src/utils/prompt-to-model-msg.ts +0 -2
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,26 +1,23 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
|
-
> @baishuyun/coze-provider@0.0.
|
|
4
|
-
>
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
> @baishuyun/coze-provider@0.0.1-alpha.1 clean /Users/bbbottle/Code/bs-chat-sdk/packages/coze-provider
|
|
8
|
-
> del-cli dist *.tsbuildinfo
|
|
3
|
+
> @baishuyun/coze-provider@0.0.6 build /Users/bbbottle/Code/bs-chat-sdk/packages/coze-provider
|
|
4
|
+
> tsup --tsconfig tsconfig.json --clean
|
|
9
5
|
|
|
10
6
|
[34mCLI[39m Building entry: src/index.ts
|
|
11
7
|
[34mCLI[39m Using tsconfig: tsconfig.json
|
|
12
8
|
[34mCLI[39m tsup v8.5.1
|
|
13
9
|
[34mCLI[39m Using tsup config: /Users/bbbottle/Code/bs-chat-sdk/packages/coze-provider/tsup.config.ts
|
|
14
10
|
[34mCLI[39m Target: es2022
|
|
11
|
+
[34mCLI[39m Cleaning output folder
|
|
15
12
|
[34mCJS[39m Build start
|
|
16
13
|
[34mESM[39m Build start
|
|
17
|
-
[
|
|
18
|
-
[
|
|
19
|
-
[
|
|
20
|
-
[
|
|
21
|
-
[
|
|
22
|
-
[
|
|
14
|
+
[32mESM[39m [1mdist/index.mjs [22m[32m44.72 KB[39m
|
|
15
|
+
[32mESM[39m [1mdist/index.mjs.map [22m[32m85.63 KB[39m
|
|
16
|
+
[32mESM[39m ⚡️ Build success in 21ms
|
|
17
|
+
[32mCJS[39m [1mdist/index.js [22m[32m46.81 KB[39m
|
|
18
|
+
[32mCJS[39m [1mdist/index.js.map [22m[32m86.03 KB[39m
|
|
19
|
+
[32mCJS[39m ⚡️ Build success in 21ms
|
|
23
20
|
DTS Build start
|
|
24
|
-
DTS ⚡️ Build success in
|
|
25
|
-
DTS dist/index.d.ts 1.
|
|
26
|
-
DTS dist/index.d.mts 1.
|
|
21
|
+
DTS ⚡️ Build success in 802ms
|
|
22
|
+
DTS dist/index.d.ts 1.57 KB
|
|
23
|
+
DTS dist/index.d.mts 1.57 KB
|
package/CHANGELOG.md
CHANGED
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { LanguageModelV2StreamPart, ProviderV2, LanguageModelV2, JSONValue } from '@ai-sdk/provider';
|
|
2
2
|
import { FetchFunction } from '@ai-sdk/provider-utils';
|
|
3
3
|
|
|
4
|
-
type CozeChatModelId =
|
|
4
|
+
type CozeChatModelId = 'chat';
|
|
5
5
|
|
|
6
6
|
interface CozeProviderSettings {
|
|
7
7
|
apiKey?: string;
|
|
@@ -19,7 +19,7 @@ interface CozeProviderSettings {
|
|
|
19
19
|
or to provide a custom fetch implementation for e.g. testing.
|
|
20
20
|
*/
|
|
21
21
|
fetch?: FetchFunction;
|
|
22
|
-
extraStreamTransformers?: TransformStream<LanguageModelV2StreamPart, any>[];
|
|
22
|
+
extraStreamTransformers?: (() => TransformStream<LanguageModelV2StreamPart, any>)[];
|
|
23
23
|
}
|
|
24
24
|
interface CozeProvider extends ProviderV2 {
|
|
25
25
|
(modelId: CozeChatModelId): LanguageModelV2;
|
|
@@ -37,6 +37,6 @@ declare class SuggestionTransformStream extends TransformStream<any, any> {
|
|
|
37
37
|
constructor(enable: boolean);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
declare const createTextInfoEnqueuer: (controller: TransformStreamDefaultController<LanguageModelV2StreamPart>) => (textInfo: string, metaPayload?: JSONValue, id?: string) => void;
|
|
40
|
+
declare const createTextInfoEnqueuer: (controller: TransformStreamDefaultController<LanguageModelV2StreamPart>) => (textInfo: string, metaPayload?: JSONValue, id?: string, deltaOnly?: boolean) => void;
|
|
41
41
|
|
|
42
42
|
export { SuggestionTransformStream, createCoze, createFieldsJsonTransformStream, createTextInfoEnqueuer };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { LanguageModelV2StreamPart, ProviderV2, LanguageModelV2, JSONValue } from '@ai-sdk/provider';
|
|
2
2
|
import { FetchFunction } from '@ai-sdk/provider-utils';
|
|
3
3
|
|
|
4
|
-
type CozeChatModelId =
|
|
4
|
+
type CozeChatModelId = 'chat';
|
|
5
5
|
|
|
6
6
|
interface CozeProviderSettings {
|
|
7
7
|
apiKey?: string;
|
|
@@ -19,7 +19,7 @@ interface CozeProviderSettings {
|
|
|
19
19
|
or to provide a custom fetch implementation for e.g. testing.
|
|
20
20
|
*/
|
|
21
21
|
fetch?: FetchFunction;
|
|
22
|
-
extraStreamTransformers?: TransformStream<LanguageModelV2StreamPart, any>[];
|
|
22
|
+
extraStreamTransformers?: (() => TransformStream<LanguageModelV2StreamPart, any>)[];
|
|
23
23
|
}
|
|
24
24
|
interface CozeProvider extends ProviderV2 {
|
|
25
25
|
(modelId: CozeChatModelId): LanguageModelV2;
|
|
@@ -37,6 +37,6 @@ declare class SuggestionTransformStream extends TransformStream<any, any> {
|
|
|
37
37
|
constructor(enable: boolean);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
declare const createTextInfoEnqueuer: (controller: TransformStreamDefaultController<LanguageModelV2StreamPart>) => (textInfo: string, metaPayload?: JSONValue, id?: string) => void;
|
|
40
|
+
declare const createTextInfoEnqueuer: (controller: TransformStreamDefaultController<LanguageModelV2StreamPart>) => (textInfo: string, metaPayload?: JSONValue, id?: string, deltaOnly?: boolean) => void;
|
|
41
41
|
|
|
42
42
|
export { SuggestionTransformStream, createCoze, createFieldsJsonTransformStream, createTextInfoEnqueuer };
|
package/dist/index.js
CHANGED
|
@@ -39,7 +39,7 @@ module.exports = __toCommonJS(index_exports);
|
|
|
39
39
|
|
|
40
40
|
// src/coze-provider.ts
|
|
41
41
|
var import_provider = require("@ai-sdk/provider");
|
|
42
|
-
var
|
|
42
|
+
var import_provider_utils2 = require("@ai-sdk/provider-utils");
|
|
43
43
|
|
|
44
44
|
// src/const.ts
|
|
45
45
|
var VERSION = "0.0.1";
|
|
@@ -105,7 +105,6 @@ var parseMessageContent = (message, isMultiModalMsg) => {
|
|
|
105
105
|
const isExcel = part.mediaType === "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
|
106
106
|
if (isImg) {
|
|
107
107
|
const meta = part.providerOptions?.uploadMetadata;
|
|
108
|
-
console.log("img meta", meta);
|
|
109
108
|
return meta?.parsedData;
|
|
110
109
|
}
|
|
111
110
|
if (isExcel) {
|
|
@@ -141,6 +140,33 @@ var convertPromptToMessages = (messages) => {
|
|
|
141
140
|
});
|
|
142
141
|
};
|
|
143
142
|
|
|
143
|
+
// src/utils/create-error-stream.ts
|
|
144
|
+
var import_provider_utils = require("@ai-sdk/provider-utils");
|
|
145
|
+
var createErrorStream = (error) => {
|
|
146
|
+
return new ReadableStream({
|
|
147
|
+
start(controller) {
|
|
148
|
+
const id = (0, import_provider_utils.generateId)();
|
|
149
|
+
controller.enqueue({
|
|
150
|
+
id,
|
|
151
|
+
type: "text-start"
|
|
152
|
+
});
|
|
153
|
+
controller.enqueue({
|
|
154
|
+
id,
|
|
155
|
+
type: "text-delta",
|
|
156
|
+
providerMetadata: {
|
|
157
|
+
raw: { data: { type: "agent-error", error } }
|
|
158
|
+
},
|
|
159
|
+
delta: error
|
|
160
|
+
});
|
|
161
|
+
controller.enqueue({
|
|
162
|
+
type: "text-end",
|
|
163
|
+
id
|
|
164
|
+
});
|
|
165
|
+
controller.close();
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
};
|
|
169
|
+
|
|
144
170
|
// src/evt-sample.ts
|
|
145
171
|
var EvtSample = class {
|
|
146
172
|
_evtSampleMap = /* @__PURE__ */ new Map();
|
|
@@ -212,7 +238,6 @@ var MCPChunkFilterTransformStream = class extends TransformStream {
|
|
|
212
238
|
super({
|
|
213
239
|
transform: (evt, controller) => {
|
|
214
240
|
if (!evt) return;
|
|
215
|
-
console.log("origin event", evt);
|
|
216
241
|
const part = {
|
|
217
242
|
event: evt.type,
|
|
218
243
|
data: JSON.parse(evt.data) || {}
|
|
@@ -264,11 +289,17 @@ var mcp2llmChunk = (part) => {
|
|
|
264
289
|
rawValue: part.data
|
|
265
290
|
};
|
|
266
291
|
}
|
|
292
|
+
if (part.status === "completed") {
|
|
293
|
+
return {
|
|
294
|
+
type: "text-end",
|
|
295
|
+
id: part.data.conversation_id,
|
|
296
|
+
// delta: part.data.content || part.data.reasoning_content || "",
|
|
297
|
+
providerMetadata: {}
|
|
298
|
+
};
|
|
299
|
+
}
|
|
267
300
|
return {
|
|
268
|
-
type: "
|
|
269
|
-
|
|
270
|
-
// delta: part.data.content || part.data.reasoning_content || "",
|
|
271
|
-
providerMetadata: {}
|
|
301
|
+
type: "raw",
|
|
302
|
+
rawValue: part.data
|
|
272
303
|
};
|
|
273
304
|
break;
|
|
274
305
|
case import_api3.ChatEventType.CONVERSATION_CHAT_COMPLETED:
|
|
@@ -364,14 +395,27 @@ var CozeLanguageModel = class {
|
|
|
364
395
|
path: "/chat"
|
|
365
396
|
});
|
|
366
397
|
const user_id = options.headers ? options.headers["x-user-id"] : "";
|
|
398
|
+
const user_var = options.headers ? options.headers["x-user-var"] : "";
|
|
399
|
+
const user_token = options.headers ? options.headers["x-user-token"] : "";
|
|
400
|
+
const idFromToken = user_token?.slice(-16);
|
|
401
|
+
let customVar;
|
|
402
|
+
if (user_var) {
|
|
403
|
+
try {
|
|
404
|
+
customVar = JSON.parse(user_var);
|
|
405
|
+
} catch (e) {
|
|
406
|
+
console.warn("x-user-var parse error", e);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
367
409
|
const body = {
|
|
368
410
|
bot_id: this.config.botId,
|
|
369
411
|
auto_save_history: false,
|
|
370
|
-
user_id: user_id || "
|
|
412
|
+
user_id: user_id || idFromToken || "guest_" + Date.now(),
|
|
371
413
|
stream: true,
|
|
372
414
|
additional_messages: messages
|
|
373
415
|
};
|
|
374
|
-
|
|
416
|
+
if (customVar) {
|
|
417
|
+
body.custom_var = customVar;
|
|
418
|
+
}
|
|
375
419
|
const headers = this.config.headers();
|
|
376
420
|
const response = await fetch(url, {
|
|
377
421
|
method: "POST",
|
|
@@ -387,19 +431,21 @@ var CozeLanguageModel = class {
|
|
|
387
431
|
} catch {
|
|
388
432
|
errorDetail = rawError;
|
|
389
433
|
}
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
434
|
+
const errorMessage = typeof errorDetail === "object" && errorDetail?.msg ? errorDetail.msg : `Coze API error: ${response.status} ${response.statusText}`;
|
|
435
|
+
console.error(errorMessage);
|
|
436
|
+
return {
|
|
437
|
+
stream: createErrorStream("\u4F1A\u8BDD\u5F02\u5E38\uFF0C\u8BF7\u91CD\u8BD5")
|
|
438
|
+
};
|
|
393
439
|
}
|
|
394
|
-
let externalTransformers = this.config.extraStreamTransformers || []
|
|
440
|
+
let externalTransformers = (this.config.extraStreamTransformers || []).map(
|
|
441
|
+
(factory) => factory()
|
|
442
|
+
);
|
|
395
443
|
const stage = options.headers ? options.headers["x-user-stage"] : "";
|
|
396
444
|
const isBuildStage = stage === "build";
|
|
397
445
|
const isFillStage = stage === "fill";
|
|
398
446
|
const result = response.body.pipeThrough(
|
|
399
447
|
new import_web.TextDecoderStream()
|
|
400
|
-
).pipeThrough(new import_parse_sse.ServerSentEventTransformStream()).pipeThrough(
|
|
401
|
-
new MCPChunkFilterTransformStream(isBuildStage || isFillStage)
|
|
402
|
-
).pipeThrough(new LLMChunkInjectorTransformStream()).pipeThrough(new LLMPartTrasnformStream());
|
|
448
|
+
).pipeThrough(new import_parse_sse.ServerSentEventTransformStream()).pipeThrough(new MCPChunkFilterTransformStream(isBuildStage || isFillStage)).pipeThrough(new LLMChunkInjectorTransformStream()).pipeThrough(new LLMPartTrasnformStream());
|
|
403
449
|
let finalResult = result;
|
|
404
450
|
if (externalTransformers.length > 0) {
|
|
405
451
|
finalResult = externalTransformers.reduce(
|
|
@@ -418,12 +464,9 @@ var CozeLanguageModel = class {
|
|
|
418
464
|
function createCoze(options = {
|
|
419
465
|
botId: ""
|
|
420
466
|
}) {
|
|
421
|
-
const baseURL = (0,
|
|
422
|
-
const agentPartHeader = (0,
|
|
423
|
-
|
|
424
|
-
`ai-sdk/coze/${VERSION}`
|
|
425
|
-
);
|
|
426
|
-
const authorizationHeader = `Bearer ${(0, import_provider_utils.loadApiKey)({
|
|
467
|
+
const baseURL = (0, import_provider_utils2.withoutTrailingSlash)(options.baseURL);
|
|
468
|
+
const agentPartHeader = (0, import_provider_utils2.withUserAgentSuffix)(options.headers || {}, `ai-sdk/coze/${VERSION}`);
|
|
469
|
+
const authorizationHeader = `Bearer ${(0, import_provider_utils2.loadApiKey)({
|
|
427
470
|
apiKey: options.apiKey,
|
|
428
471
|
environmentVariableName: "COZE_API_KEY",
|
|
429
472
|
description: ""
|
|
@@ -463,25 +506,32 @@ function createCoze(options = {
|
|
|
463
506
|
var import_json = require("@streamparser/json");
|
|
464
507
|
|
|
465
508
|
// src/utils/enqueue-text-info.ts
|
|
466
|
-
var
|
|
467
|
-
var createTextInfoEnqueuer = (controller) => (textInfo, metaPayload, id = (0,
|
|
468
|
-
|
|
509
|
+
var import_provider_utils3 = require("@ai-sdk/provider-utils");
|
|
510
|
+
var createTextInfoEnqueuer = (controller) => (textInfo, metaPayload, id = (0, import_provider_utils3.generateId)(), deltaOnly = false) => {
|
|
511
|
+
const i = id ?? (0, import_provider_utils3.generateId)();
|
|
512
|
+
const startPart = {
|
|
469
513
|
type: "text-start",
|
|
470
|
-
id
|
|
471
|
-
}
|
|
472
|
-
const
|
|
514
|
+
id: i
|
|
515
|
+
};
|
|
516
|
+
const deltaPart = {
|
|
473
517
|
type: "text-delta",
|
|
474
|
-
id,
|
|
518
|
+
id: i,
|
|
475
519
|
delta: textInfo,
|
|
476
520
|
providerMetadata: metaPayload ? {
|
|
477
521
|
raw: { data: metaPayload }
|
|
478
522
|
} : void 0
|
|
479
523
|
};
|
|
480
|
-
|
|
481
|
-
controller.enqueue({
|
|
524
|
+
const endPart = {
|
|
482
525
|
type: "text-end",
|
|
483
|
-
id
|
|
484
|
-
}
|
|
526
|
+
id: i
|
|
527
|
+
};
|
|
528
|
+
if (deltaOnly) {
|
|
529
|
+
controller.enqueue(deltaPart);
|
|
530
|
+
return;
|
|
531
|
+
}
|
|
532
|
+
controller.enqueue(startPart);
|
|
533
|
+
controller.enqueue(deltaPart);
|
|
534
|
+
controller.enqueue(endPart);
|
|
485
535
|
};
|
|
486
536
|
|
|
487
537
|
// src/utils/fields-json-rebuild/rebuild-text.ts
|
|
@@ -1677,7 +1727,6 @@ var createFieldsJsonTransformStream = (enableJsonParser) => {
|
|
|
1677
1727
|
},
|
|
1678
1728
|
transform: (chunk, controller) => {
|
|
1679
1729
|
if (!parser) {
|
|
1680
|
-
console.log("parser not init");
|
|
1681
1730
|
return;
|
|
1682
1731
|
}
|
|
1683
1732
|
try {
|