@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/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") {
@@ -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
- 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);
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
  }