@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/dist/index.mjs
CHANGED
|
@@ -333,6 +333,118 @@ var LLMPartTrasnformStream = class extends TransformStream {
|
|
|
333
333
|
}
|
|
334
334
|
};
|
|
335
335
|
|
|
336
|
+
// src/utils/create-coze-non-streaming-chat.ts
|
|
337
|
+
var createCozeNonStreamingChat = async (botId, options, chatConfig) => {
|
|
338
|
+
const messages = convertPromptToMessages(options.prompt);
|
|
339
|
+
const url = chatConfig.url({
|
|
340
|
+
path: "/chat"
|
|
341
|
+
});
|
|
342
|
+
const user_id = (options.headers ? options.headers["x-user-id"] : "") || Date.now().toString();
|
|
343
|
+
const user_var = options.headers ? options.headers["x-user-var"] : "";
|
|
344
|
+
let customVar;
|
|
345
|
+
if (user_var) {
|
|
346
|
+
try {
|
|
347
|
+
customVar = JSON.parse(user_var);
|
|
348
|
+
} catch (e) {
|
|
349
|
+
console.warn("x-user-var parse error", e);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
const body = {
|
|
353
|
+
bot_id: botId,
|
|
354
|
+
auto_save_history: true,
|
|
355
|
+
user_id: user_id || "7543191937730215936",
|
|
356
|
+
additional_messages: messages,
|
|
357
|
+
stream: false
|
|
358
|
+
};
|
|
359
|
+
if (customVar) {
|
|
360
|
+
body.custom_var = customVar;
|
|
361
|
+
}
|
|
362
|
+
const headers = chatConfig.headers();
|
|
363
|
+
const abortSignal = options.abortSignal;
|
|
364
|
+
const response = await fetch(url, {
|
|
365
|
+
method: "POST",
|
|
366
|
+
headers,
|
|
367
|
+
credentials: "include",
|
|
368
|
+
body: JSON.stringify(body),
|
|
369
|
+
signal: abortSignal
|
|
370
|
+
});
|
|
371
|
+
return response;
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
// src/utils/get-coze-chat-msg-detail.ts
|
|
375
|
+
var getCozeChatMsgDetail = async (conversationId, chatId, chatConfig) => {
|
|
376
|
+
const url = chatConfig.url({
|
|
377
|
+
path: `/chat/message/list?conversation_id=${conversationId}&chat_id=${chatId}`
|
|
378
|
+
});
|
|
379
|
+
const response = await fetch(url, {
|
|
380
|
+
method: "POST",
|
|
381
|
+
headers: chatConfig.headers(),
|
|
382
|
+
credentials: "include"
|
|
383
|
+
});
|
|
384
|
+
return response;
|
|
385
|
+
};
|
|
386
|
+
|
|
387
|
+
// src/utils/build-generate-result-by-chat-res.ts
|
|
388
|
+
var BuildWarningGenerateResult = (message) => {
|
|
389
|
+
return {
|
|
390
|
+
content: [],
|
|
391
|
+
finishReason: "error",
|
|
392
|
+
request: {
|
|
393
|
+
body: null
|
|
394
|
+
},
|
|
395
|
+
usage: {
|
|
396
|
+
inputTokens: 0,
|
|
397
|
+
outputTokens: 0,
|
|
398
|
+
totalTokens: 0
|
|
399
|
+
},
|
|
400
|
+
response: {
|
|
401
|
+
body: null
|
|
402
|
+
},
|
|
403
|
+
warnings: [
|
|
404
|
+
{
|
|
405
|
+
type: "other",
|
|
406
|
+
message
|
|
407
|
+
}
|
|
408
|
+
]
|
|
409
|
+
};
|
|
410
|
+
};
|
|
411
|
+
var BuildGenerateResultByChatRes = async (response, chatConfig, reqBody) => {
|
|
412
|
+
if (!response.ok) {
|
|
413
|
+
return Promise.reject(
|
|
414
|
+
BuildWarningGenerateResult(`Coze API error: ${response.status} ${response.statusText}`)
|
|
415
|
+
);
|
|
416
|
+
}
|
|
417
|
+
const res = await response.json();
|
|
418
|
+
if (res.code !== 0) {
|
|
419
|
+
return Promise.reject(BuildWarningGenerateResult(`Coze API error: ${res.code} ${res.msg}`));
|
|
420
|
+
}
|
|
421
|
+
const msgRes = await getCozeChatMsgDetail(res.data.conversation_id, res.data.id, chatConfig);
|
|
422
|
+
if (!msgRes.ok) {
|
|
423
|
+
return Promise.reject(
|
|
424
|
+
BuildWarningGenerateResult(
|
|
425
|
+
`Failed to get message detail: ${msgRes.status} ${msgRes.statusText}`
|
|
426
|
+
)
|
|
427
|
+
);
|
|
428
|
+
}
|
|
429
|
+
const msgDetail = await msgRes.json();
|
|
430
|
+
return {
|
|
431
|
+
content: msgDetail.data.message.content,
|
|
432
|
+
finishReason: msgDetail.data.message.status === "finished" ? "stop" : "error",
|
|
433
|
+
request: {
|
|
434
|
+
body: reqBody
|
|
435
|
+
},
|
|
436
|
+
usage: {
|
|
437
|
+
inputTokens: 0,
|
|
438
|
+
outputTokens: 0,
|
|
439
|
+
totalTokens: 0
|
|
440
|
+
},
|
|
441
|
+
response: {
|
|
442
|
+
body: msgDetail
|
|
443
|
+
},
|
|
444
|
+
warnings: []
|
|
445
|
+
};
|
|
446
|
+
};
|
|
447
|
+
|
|
336
448
|
// src/coze-language-model.ts
|
|
337
449
|
var CozeLanguageModel = class {
|
|
338
450
|
specificationVersion = "v2";
|
|
@@ -346,8 +458,23 @@ var CozeLanguageModel = class {
|
|
|
346
458
|
this.supportedUrls = config.supportedUrls?.() || {};
|
|
347
459
|
this.config = config;
|
|
348
460
|
}
|
|
349
|
-
|
|
350
|
-
|
|
461
|
+
// @not-support
|
|
462
|
+
// coze 目前不支持非流式接口,为了兼容接口规范,仍然实现了 doGenerate 方法
|
|
463
|
+
async doGenerate(options) {
|
|
464
|
+
return BuildWarningGenerateResult(
|
|
465
|
+
"Coze provider does not support non-streaming calls, please use streaming interface"
|
|
466
|
+
);
|
|
467
|
+
const botIdFromProvider = options.providerOptions?.bot?.botId;
|
|
468
|
+
if (!botIdFromProvider) {
|
|
469
|
+
return BuildWarningGenerateResult("bot id missing in provider options");
|
|
470
|
+
}
|
|
471
|
+
const response = await createCozeNonStreamingChat(
|
|
472
|
+
botIdFromProvider,
|
|
473
|
+
options,
|
|
474
|
+
this.config
|
|
475
|
+
);
|
|
476
|
+
const result = await BuildGenerateResultByChatRes(response, this.config);
|
|
477
|
+
return result;
|
|
351
478
|
}
|
|
352
479
|
isVisibleMsgPart(evtData) {
|
|
353
480
|
if (evtData.type === "knowledge" && evtData.role === "assistant") {
|
|
@@ -374,20 +501,22 @@ var CozeLanguageModel = class {
|
|
|
374
501
|
const body = {
|
|
375
502
|
bot_id: this.config.botId,
|
|
376
503
|
auto_save_history: false,
|
|
377
|
-
user_id,
|
|
504
|
+
user_id: "7543191937730215936",
|
|
505
|
+
// user_id,
|
|
378
506
|
stream: true,
|
|
379
507
|
additional_messages: messages
|
|
380
508
|
};
|
|
381
|
-
console.log("Request body for Coze API:", JSON.stringify(body));
|
|
382
509
|
if (customVar) {
|
|
383
510
|
body.custom_var = customVar;
|
|
384
511
|
}
|
|
385
512
|
const headers = this.config.headers();
|
|
513
|
+
const abortSignal = options.abortSignal;
|
|
386
514
|
const response = await fetch(url, {
|
|
387
515
|
method: "POST",
|
|
388
516
|
headers,
|
|
389
517
|
credentials: "include",
|
|
390
|
-
body: JSON.stringify(body)
|
|
518
|
+
body: JSON.stringify(body),
|
|
519
|
+
signal: abortSignal
|
|
391
520
|
});
|
|
392
521
|
if (!response.ok || !response.body) {
|
|
393
522
|
const rawError = await response.text();
|
|
@@ -1656,6 +1785,9 @@ var RebuilderMap = {
|
|
|
1656
1785
|
dept: rebuildDept,
|
|
1657
1786
|
sn: rebuildSn,
|
|
1658
1787
|
deptgroup: rebuildDeptGroup,
|
|
1788
|
+
flowState: defaultBuilder,
|
|
1789
|
+
flowstate: defaultBuilder,
|
|
1790
|
+
formula: defaultBuilder,
|
|
1659
1791
|
unknown: defaultBuilder
|
|
1660
1792
|
};
|
|
1661
1793
|
var rebuildFieldsJsonStructure = (truncatedJson, subItemsOnly = false) => {
|
|
@@ -1674,6 +1806,7 @@ var rebuildFieldsJsonStructure = (truncatedJson, subItemsOnly = false) => {
|
|
|
1674
1806
|
var createFieldsJsonTransformStream = (enableJsonParser) => {
|
|
1675
1807
|
let parser;
|
|
1676
1808
|
let id;
|
|
1809
|
+
let isFirstChunk = true;
|
|
1677
1810
|
const chunkGuard = (chunk) => {
|
|
1678
1811
|
if (!enableJsonParser) {
|
|
1679
1812
|
return false;
|
|
@@ -1699,12 +1832,21 @@ var createFieldsJsonTransformStream = (enableJsonParser) => {
|
|
|
1699
1832
|
if (chunkGuard(chunk)) {
|
|
1700
1833
|
if ("id" in chunk && "delta" in chunk) {
|
|
1701
1834
|
id = chunk.id;
|
|
1702
|
-
|
|
1835
|
+
let delta = chunk.delta;
|
|
1836
|
+
if (isFirstChunk) {
|
|
1837
|
+
delta = delta.replace(/^\uFEFF/, "");
|
|
1838
|
+
isFirstChunk = false;
|
|
1839
|
+
}
|
|
1840
|
+
parser.write(delta);
|
|
1841
|
+
} else {
|
|
1842
|
+
console.warn("Unexpected chunk format for JSON parsing:", chunk);
|
|
1843
|
+
controller.enqueue(chunk);
|
|
1703
1844
|
}
|
|
1704
1845
|
} else {
|
|
1705
1846
|
controller.enqueue(chunk);
|
|
1706
1847
|
}
|
|
1707
1848
|
} catch (e) {
|
|
1849
|
+
console.log("write or enqueue error", e);
|
|
1708
1850
|
controller.error(e);
|
|
1709
1851
|
}
|
|
1710
1852
|
},
|
|
@@ -1731,6 +1873,7 @@ var createFieldsJsonTransformStream = (enableJsonParser) => {
|
|
|
1731
1873
|
let errorLogged = false;
|
|
1732
1874
|
parser.onError = (err) => {
|
|
1733
1875
|
if (!errorLogged) {
|
|
1876
|
+
console.log("is enabled", enableJsonParser);
|
|
1734
1877
|
console.error("JsonWidgetStream: JSON Parsing Error:", err);
|
|
1735
1878
|
errorLogged = true;
|
|
1736
1879
|
}
|