@baishuyun/coze-provider 0.0.16 → 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/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
- doGenerate(options) {
350
- throw new Error("Method not implemented.");
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") {
@@ -379,7 +506,6 @@ var CozeLanguageModel = class {
379
506
  stream: true,
380
507
  additional_messages: messages
381
508
  };
382
- console.log("Request body for Coze API:", JSON.stringify(body));
383
509
  if (customVar) {
384
510
  body.custom_var = customVar;
385
511
  }
@@ -1659,6 +1785,9 @@ var RebuilderMap = {
1659
1785
  dept: rebuildDept,
1660
1786
  sn: rebuildSn,
1661
1787
  deptgroup: rebuildDeptGroup,
1788
+ flowState: defaultBuilder,
1789
+ flowstate: defaultBuilder,
1790
+ formula: defaultBuilder,
1662
1791
  unknown: defaultBuilder
1663
1792
  };
1664
1793
  var rebuildFieldsJsonStructure = (truncatedJson, subItemsOnly = false) => {
@@ -1677,6 +1806,7 @@ var rebuildFieldsJsonStructure = (truncatedJson, subItemsOnly = false) => {
1677
1806
  var createFieldsJsonTransformStream = (enableJsonParser) => {
1678
1807
  let parser;
1679
1808
  let id;
1809
+ let isFirstChunk = true;
1680
1810
  const chunkGuard = (chunk) => {
1681
1811
  if (!enableJsonParser) {
1682
1812
  return false;
@@ -1702,12 +1832,21 @@ var createFieldsJsonTransformStream = (enableJsonParser) => {
1702
1832
  if (chunkGuard(chunk)) {
1703
1833
  if ("id" in chunk && "delta" in chunk) {
1704
1834
  id = chunk.id;
1705
- parser.write(chunk.delta);
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);
1706
1844
  }
1707
1845
  } else {
1708
1846
  controller.enqueue(chunk);
1709
1847
  }
1710
1848
  } catch (e) {
1849
+ console.log("write or enqueue error", e);
1711
1850
  controller.error(e);
1712
1851
  }
1713
1852
  },
@@ -1734,6 +1873,7 @@ var createFieldsJsonTransformStream = (enableJsonParser) => {
1734
1873
  let errorLogged = false;
1735
1874
  parser.onError = (err) => {
1736
1875
  if (!errorLogged) {
1876
+ console.log("is enabled", enableJsonParser);
1737
1877
  console.error("JsonWidgetStream: JSON Parsing Error:", err);
1738
1878
  errorLogged = true;
1739
1879
  }