@baishuyun/coze-provider 0.0.15 → 0.0.17
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 +22 -23
- package/CHANGELOG.md +12 -0
- package/dist/index.js +149 -6
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +149 -6
- package/dist/index.mjs.map +1 -1
- package/package.json +3 -3
- package/src/coze-language-model.ts +35 -17
- package/src/stream-trasnformer/fields-json-transform-stream.ts +16 -6
- package/src/types.ts +25 -2
- package/src/utils/build-generate-result-by-chat-res.ts +71 -0
- package/src/utils/create-coze-non-streaming-chat.ts +54 -0
- package/src/utils/fields-json-rebuild/index.ts +3 -0
- package/src/utils/get-coze-chat-msg-detail.ts +19 -0
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
DTS Build
|
|
21
|
-
DTS
|
|
22
|
-
DTS dist/index.d.
|
|
23
|
-
DTS dist/index.d.mts 1.57 KB
|
|
1
|
+
|
|
2
|
+
> @baishuyun/coze-provider@0.0.16 build /Users/bbbottle/Code/bs-chat-sdk/packages/coze-provider
|
|
3
|
+
> tsup --tsconfig tsconfig.json --clean
|
|
4
|
+
|
|
5
|
+
CLI Building entry: src/index.ts
|
|
6
|
+
CLI Using tsconfig: tsconfig.json
|
|
7
|
+
CLI tsup v8.5.1
|
|
8
|
+
CLI Using tsup config: /Users/bbbottle/Code/bs-chat-sdk/packages/coze-provider/tsup.config.ts
|
|
9
|
+
CLI Target: es2022
|
|
10
|
+
CLI Cleaning output folder
|
|
11
|
+
CJS Build start
|
|
12
|
+
ESM Build start
|
|
13
|
+
ESM dist/index.mjs 48.57 KB
|
|
14
|
+
ESM dist/index.mjs.map 93.10 KB
|
|
15
|
+
ESM ⚡️ Build success in 44ms
|
|
16
|
+
CJS dist/index.js 50.66 KB
|
|
17
|
+
CJS dist/index.js.map 93.51 KB
|
|
18
|
+
CJS ⚡️ Build success in 45ms
|
|
19
|
+
DTS Build start
|
|
20
|
+
DTS ⚡️ Build success in 1169ms
|
|
21
|
+
DTS dist/index.d.ts 1.57 KB
|
|
22
|
+
DTS dist/index.d.mts 1.57 KB
|
package/CHANGELOG.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -366,6 +366,118 @@ var LLMPartTrasnformStream = class extends TransformStream {
|
|
|
366
366
|
}
|
|
367
367
|
};
|
|
368
368
|
|
|
369
|
+
// src/utils/create-coze-non-streaming-chat.ts
|
|
370
|
+
var createCozeNonStreamingChat = async (botId, options, chatConfig) => {
|
|
371
|
+
const messages = convertPromptToMessages(options.prompt);
|
|
372
|
+
const url = chatConfig.url({
|
|
373
|
+
path: "/chat"
|
|
374
|
+
});
|
|
375
|
+
const user_id = (options.headers ? options.headers["x-user-id"] : "") || Date.now().toString();
|
|
376
|
+
const user_var = options.headers ? options.headers["x-user-var"] : "";
|
|
377
|
+
let customVar;
|
|
378
|
+
if (user_var) {
|
|
379
|
+
try {
|
|
380
|
+
customVar = JSON.parse(user_var);
|
|
381
|
+
} catch (e) {
|
|
382
|
+
console.warn("x-user-var parse error", e);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
const body = {
|
|
386
|
+
bot_id: botId,
|
|
387
|
+
auto_save_history: true,
|
|
388
|
+
user_id: user_id || "7543191937730215936",
|
|
389
|
+
additional_messages: messages,
|
|
390
|
+
stream: false
|
|
391
|
+
};
|
|
392
|
+
if (customVar) {
|
|
393
|
+
body.custom_var = customVar;
|
|
394
|
+
}
|
|
395
|
+
const headers = chatConfig.headers();
|
|
396
|
+
const abortSignal = options.abortSignal;
|
|
397
|
+
const response = await fetch(url, {
|
|
398
|
+
method: "POST",
|
|
399
|
+
headers,
|
|
400
|
+
credentials: "include",
|
|
401
|
+
body: JSON.stringify(body),
|
|
402
|
+
signal: abortSignal
|
|
403
|
+
});
|
|
404
|
+
return response;
|
|
405
|
+
};
|
|
406
|
+
|
|
407
|
+
// src/utils/get-coze-chat-msg-detail.ts
|
|
408
|
+
var getCozeChatMsgDetail = async (conversationId, chatId, chatConfig) => {
|
|
409
|
+
const url = chatConfig.url({
|
|
410
|
+
path: `/chat/message/list?conversation_id=${conversationId}&chat_id=${chatId}`
|
|
411
|
+
});
|
|
412
|
+
const response = await fetch(url, {
|
|
413
|
+
method: "POST",
|
|
414
|
+
headers: chatConfig.headers(),
|
|
415
|
+
credentials: "include"
|
|
416
|
+
});
|
|
417
|
+
return response;
|
|
418
|
+
};
|
|
419
|
+
|
|
420
|
+
// src/utils/build-generate-result-by-chat-res.ts
|
|
421
|
+
var BuildWarningGenerateResult = (message) => {
|
|
422
|
+
return {
|
|
423
|
+
content: [],
|
|
424
|
+
finishReason: "error",
|
|
425
|
+
request: {
|
|
426
|
+
body: null
|
|
427
|
+
},
|
|
428
|
+
usage: {
|
|
429
|
+
inputTokens: 0,
|
|
430
|
+
outputTokens: 0,
|
|
431
|
+
totalTokens: 0
|
|
432
|
+
},
|
|
433
|
+
response: {
|
|
434
|
+
body: null
|
|
435
|
+
},
|
|
436
|
+
warnings: [
|
|
437
|
+
{
|
|
438
|
+
type: "other",
|
|
439
|
+
message
|
|
440
|
+
}
|
|
441
|
+
]
|
|
442
|
+
};
|
|
443
|
+
};
|
|
444
|
+
var BuildGenerateResultByChatRes = async (response, chatConfig, reqBody) => {
|
|
445
|
+
if (!response.ok) {
|
|
446
|
+
return Promise.reject(
|
|
447
|
+
BuildWarningGenerateResult(`Coze API error: ${response.status} ${response.statusText}`)
|
|
448
|
+
);
|
|
449
|
+
}
|
|
450
|
+
const res = await response.json();
|
|
451
|
+
if (res.code !== 0) {
|
|
452
|
+
return Promise.reject(BuildWarningGenerateResult(`Coze API error: ${res.code} ${res.msg}`));
|
|
453
|
+
}
|
|
454
|
+
const msgRes = await getCozeChatMsgDetail(res.data.conversation_id, res.data.id, chatConfig);
|
|
455
|
+
if (!msgRes.ok) {
|
|
456
|
+
return Promise.reject(
|
|
457
|
+
BuildWarningGenerateResult(
|
|
458
|
+
`Failed to get message detail: ${msgRes.status} ${msgRes.statusText}`
|
|
459
|
+
)
|
|
460
|
+
);
|
|
461
|
+
}
|
|
462
|
+
const msgDetail = await msgRes.json();
|
|
463
|
+
return {
|
|
464
|
+
content: msgDetail.data.message.content,
|
|
465
|
+
finishReason: msgDetail.data.message.status === "finished" ? "stop" : "error",
|
|
466
|
+
request: {
|
|
467
|
+
body: reqBody
|
|
468
|
+
},
|
|
469
|
+
usage: {
|
|
470
|
+
inputTokens: 0,
|
|
471
|
+
outputTokens: 0,
|
|
472
|
+
totalTokens: 0
|
|
473
|
+
},
|
|
474
|
+
response: {
|
|
475
|
+
body: msgDetail
|
|
476
|
+
},
|
|
477
|
+
warnings: []
|
|
478
|
+
};
|
|
479
|
+
};
|
|
480
|
+
|
|
369
481
|
// src/coze-language-model.ts
|
|
370
482
|
var CozeLanguageModel = class {
|
|
371
483
|
specificationVersion = "v2";
|
|
@@ -379,8 +491,23 @@ var CozeLanguageModel = class {
|
|
|
379
491
|
this.supportedUrls = config.supportedUrls?.() || {};
|
|
380
492
|
this.config = config;
|
|
381
493
|
}
|
|
382
|
-
|
|
383
|
-
|
|
494
|
+
// @not-support
|
|
495
|
+
// coze 目前不支持非流式接口,为了兼容接口规范,仍然实现了 doGenerate 方法
|
|
496
|
+
async doGenerate(options) {
|
|
497
|
+
return BuildWarningGenerateResult(
|
|
498
|
+
"Coze provider does not support non-streaming calls, please use streaming interface"
|
|
499
|
+
);
|
|
500
|
+
const botIdFromProvider = options.providerOptions?.bot?.botId;
|
|
501
|
+
if (!botIdFromProvider) {
|
|
502
|
+
return BuildWarningGenerateResult("bot id missing in provider options");
|
|
503
|
+
}
|
|
504
|
+
const response = await createCozeNonStreamingChat(
|
|
505
|
+
botIdFromProvider,
|
|
506
|
+
options,
|
|
507
|
+
this.config
|
|
508
|
+
);
|
|
509
|
+
const result = await BuildGenerateResultByChatRes(response, this.config);
|
|
510
|
+
return result;
|
|
384
511
|
}
|
|
385
512
|
isVisibleMsgPart(evtData) {
|
|
386
513
|
if (evtData.type === "knowledge" && evtData.role === "assistant") {
|
|
@@ -407,20 +534,22 @@ var CozeLanguageModel = class {
|
|
|
407
534
|
const body = {
|
|
408
535
|
bot_id: this.config.botId,
|
|
409
536
|
auto_save_history: false,
|
|
410
|
-
user_id,
|
|
537
|
+
user_id: "7543191937730215936",
|
|
538
|
+
// user_id,
|
|
411
539
|
stream: true,
|
|
412
540
|
additional_messages: messages
|
|
413
541
|
};
|
|
414
|
-
console.log("Request body for Coze API:", JSON.stringify(body));
|
|
415
542
|
if (customVar) {
|
|
416
543
|
body.custom_var = customVar;
|
|
417
544
|
}
|
|
418
545
|
const headers = this.config.headers();
|
|
546
|
+
const abortSignal = options.abortSignal;
|
|
419
547
|
const response = await fetch(url, {
|
|
420
548
|
method: "POST",
|
|
421
549
|
headers,
|
|
422
550
|
credentials: "include",
|
|
423
|
-
body: JSON.stringify(body)
|
|
551
|
+
body: JSON.stringify(body),
|
|
552
|
+
signal: abortSignal
|
|
424
553
|
});
|
|
425
554
|
if (!response.ok || !response.body) {
|
|
426
555
|
const rawError = await response.text();
|
|
@@ -1689,6 +1818,9 @@ var RebuilderMap = {
|
|
|
1689
1818
|
dept: rebuildDept,
|
|
1690
1819
|
sn: rebuildSn,
|
|
1691
1820
|
deptgroup: rebuildDeptGroup,
|
|
1821
|
+
flowState: defaultBuilder,
|
|
1822
|
+
flowstate: defaultBuilder,
|
|
1823
|
+
formula: defaultBuilder,
|
|
1692
1824
|
unknown: defaultBuilder
|
|
1693
1825
|
};
|
|
1694
1826
|
var rebuildFieldsJsonStructure = (truncatedJson, subItemsOnly = false) => {
|
|
@@ -1707,6 +1839,7 @@ var rebuildFieldsJsonStructure = (truncatedJson, subItemsOnly = false) => {
|
|
|
1707
1839
|
var createFieldsJsonTransformStream = (enableJsonParser) => {
|
|
1708
1840
|
let parser;
|
|
1709
1841
|
let id;
|
|
1842
|
+
let isFirstChunk = true;
|
|
1710
1843
|
const chunkGuard = (chunk) => {
|
|
1711
1844
|
if (!enableJsonParser) {
|
|
1712
1845
|
return false;
|
|
@@ -1732,12 +1865,21 @@ var createFieldsJsonTransformStream = (enableJsonParser) => {
|
|
|
1732
1865
|
if (chunkGuard(chunk)) {
|
|
1733
1866
|
if ("id" in chunk && "delta" in chunk) {
|
|
1734
1867
|
id = chunk.id;
|
|
1735
|
-
|
|
1868
|
+
let delta = chunk.delta;
|
|
1869
|
+
if (isFirstChunk) {
|
|
1870
|
+
delta = delta.replace(/^\uFEFF/, "");
|
|
1871
|
+
isFirstChunk = false;
|
|
1872
|
+
}
|
|
1873
|
+
parser.write(delta);
|
|
1874
|
+
} else {
|
|
1875
|
+
console.warn("Unexpected chunk format for JSON parsing:", chunk);
|
|
1876
|
+
controller.enqueue(chunk);
|
|
1736
1877
|
}
|
|
1737
1878
|
} else {
|
|
1738
1879
|
controller.enqueue(chunk);
|
|
1739
1880
|
}
|
|
1740
1881
|
} catch (e) {
|
|
1882
|
+
console.log("write or enqueue error", e);
|
|
1741
1883
|
controller.error(e);
|
|
1742
1884
|
}
|
|
1743
1885
|
},
|
|
@@ -1764,6 +1906,7 @@ var createFieldsJsonTransformStream = (enableJsonParser) => {
|
|
|
1764
1906
|
let errorLogged = false;
|
|
1765
1907
|
parser.onError = (err) => {
|
|
1766
1908
|
if (!errorLogged) {
|
|
1909
|
+
console.log("is enabled", enableJsonParser);
|
|
1767
1910
|
console.error("JsonWidgetStream: JSON Parsing Error:", err);
|
|
1768
1911
|
errorLogged = true;
|
|
1769
1912
|
}
|