@cloudbase/ai 2.8.20-beta.0 → 2.8.22-beta.0

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.
Files changed (106) hide show
  1. package/dist/cjs/AI.d.ts +27 -0
  2. package/dist/cjs/AI.js +154 -0
  3. package/dist/cjs/index.d.ts +13 -38
  4. package/dist/cjs/index.js +9 -73
  5. package/dist/cjs/models/Ark/index.d.ts +4 -18
  6. package/dist/cjs/models/Ark/index.js +45 -82
  7. package/dist/cjs/models/Ark/type.d.ts +52 -19
  8. package/dist/cjs/models/Ark/type.js +1 -1
  9. package/dist/cjs/models/DashScope/index.d.ts +4 -18
  10. package/dist/cjs/models/DashScope/index.js +45 -82
  11. package/dist/cjs/models/DashScope/type.d.ts +55 -24
  12. package/dist/cjs/models/DashScope/type.js +1 -1
  13. package/dist/cjs/models/HunYuan/index.d.ts +4 -19
  14. package/dist/cjs/models/HunYuan/index.js +47 -107
  15. package/dist/cjs/models/HunYuan/type.d.ts +68 -48
  16. package/dist/cjs/models/HunYuan/type.js +1 -1
  17. package/dist/cjs/models/HunYuan/util.d.ts +4 -0
  18. package/dist/cjs/models/HunYuan/util.js +58 -0
  19. package/dist/cjs/models/HunYuanBeta/index.d.ts +4 -19
  20. package/dist/cjs/models/HunYuanBeta/index.js +42 -110
  21. package/dist/cjs/models/Moonshot/index.d.ts +4 -18
  22. package/dist/cjs/models/Moonshot/index.js +45 -82
  23. package/dist/cjs/models/Moonshot/type.d.ts +63 -9
  24. package/dist/cjs/models/Moonshot/type.js +1 -1
  25. package/dist/cjs/models/Yi/index.d.ts +4 -18
  26. package/dist/cjs/models/Yi/index.js +48 -82
  27. package/dist/cjs/models/Yi/type.d.ts +41 -15
  28. package/dist/cjs/models/Yi/type.js +1 -1
  29. package/dist/cjs/models/ZhiPu/index.d.ts +4 -18
  30. package/dist/cjs/models/ZhiPu/index.js +59 -87
  31. package/dist/cjs/models/ZhiPu/type.d.ts +19 -19
  32. package/dist/cjs/models/ZhiPu/type.js +1 -1
  33. package/dist/cjs/models/index.d.ts +16 -15
  34. package/dist/cjs/models/index.js +26 -23
  35. package/dist/cjs/models/model.d.ts +38 -0
  36. package/dist/cjs/models/model.js +481 -0
  37. package/dist/cjs/type.d.ts +76 -15
  38. package/dist/cjs/type.js +6 -12
  39. package/dist/cjs/utils.d.ts +9 -1
  40. package/dist/cjs/utils.js +46 -2
  41. package/dist/esm/AI.d.ts +27 -0
  42. package/dist/esm/AI.js +128 -0
  43. package/dist/esm/index.d.ts +13 -38
  44. package/dist/esm/index.js +4 -70
  45. package/dist/esm/models/Ark/index.d.ts +4 -18
  46. package/dist/esm/models/Ark/index.js +45 -82
  47. package/dist/esm/models/Ark/type.d.ts +52 -19
  48. package/dist/esm/models/Ark/type.js +1 -1
  49. package/dist/esm/models/DashScope/index.d.ts +4 -18
  50. package/dist/esm/models/DashScope/index.js +45 -82
  51. package/dist/esm/models/DashScope/type.d.ts +55 -24
  52. package/dist/esm/models/DashScope/type.js +1 -1
  53. package/dist/esm/models/HunYuan/index.d.ts +4 -19
  54. package/dist/esm/models/HunYuan/index.js +47 -107
  55. package/dist/esm/models/HunYuan/type.d.ts +68 -48
  56. package/dist/esm/models/HunYuan/type.js +1 -1
  57. package/dist/esm/models/HunYuan/util.d.ts +4 -0
  58. package/dist/esm/models/HunYuan/util.js +53 -0
  59. package/dist/esm/models/HunYuanBeta/index.d.ts +4 -19
  60. package/dist/esm/models/HunYuanBeta/index.js +42 -110
  61. package/dist/esm/models/Moonshot/index.d.ts +4 -18
  62. package/dist/esm/models/Moonshot/index.js +45 -82
  63. package/dist/esm/models/Moonshot/type.d.ts +63 -9
  64. package/dist/esm/models/Moonshot/type.js +1 -1
  65. package/dist/esm/models/Yi/index.d.ts +4 -18
  66. package/dist/esm/models/Yi/index.js +48 -82
  67. package/dist/esm/models/Yi/type.d.ts +41 -15
  68. package/dist/esm/models/Yi/type.js +1 -1
  69. package/dist/esm/models/ZhiPu/index.d.ts +4 -18
  70. package/dist/esm/models/ZhiPu/index.js +59 -87
  71. package/dist/esm/models/ZhiPu/type.d.ts +19 -19
  72. package/dist/esm/models/ZhiPu/type.js +1 -1
  73. package/dist/esm/models/index.d.ts +16 -15
  74. package/dist/esm/models/index.js +17 -16
  75. package/dist/esm/models/model.d.ts +38 -0
  76. package/dist/esm/models/model.js +478 -0
  77. package/dist/esm/type.d.ts +76 -15
  78. package/dist/esm/type.js +5 -11
  79. package/dist/esm/utils.d.ts +9 -1
  80. package/dist/esm/utils.js +41 -1
  81. package/package.json +3 -3
  82. package/src/AI.ts +77 -0
  83. package/src/index.ts +3 -60
  84. package/src/models/Ark/index.ts +52 -54
  85. package/src/models/Ark/type.ts +60 -19
  86. package/src/models/DashScope/index.ts +56 -55
  87. package/src/models/DashScope/type.ts +63 -21
  88. package/src/models/HunYuan/index.ts +44 -67
  89. package/src/models/HunYuan/type.ts +68 -46
  90. package/src/models/HunYuan/util.ts +59 -0
  91. package/src/models/HunYuanBeta/index.ts +41 -75
  92. package/src/models/Moonshot/index.ts +52 -54
  93. package/src/models/Moonshot/type.ts +61 -7
  94. package/src/models/Yi/index.ts +59 -55
  95. package/src/models/Yi/type.ts +47 -19
  96. package/src/models/ZhiPu/index.ts +60 -52
  97. package/src/models/ZhiPu/type.ts +20 -9
  98. package/src/models/index.ts +25 -15
  99. package/src/models/model.ts +415 -0
  100. package/src/type.ts +100 -13
  101. package/src/utils.ts +53 -1
  102. package/dist/cjs/models/HunYuanBeta/type.d.ts +0 -52
  103. package/dist/cjs/models/HunYuanBeta/type.js +0 -3
  104. package/dist/esm/models/HunYuanBeta/type.d.ts +0 -52
  105. package/dist/esm/models/HunYuanBeta/type.js +0 -2
  106. package/src/models/HunYuanBeta/type.ts +0 -61
package/dist/esm/type.js CHANGED
@@ -1,13 +1,7 @@
1
- var ChatModel = (function () {
2
- function ChatModel() {
1
+ var SimpleChatModel = (function () {
2
+ function SimpleChatModel() {
3
3
  }
4
- return ChatModel;
4
+ return SimpleChatModel;
5
5
  }());
6
- export { ChatModel };
7
- var StreamTextResult = (function () {
8
- function StreamTextResult() {
9
- }
10
- return StreamTextResult;
11
- }());
12
- export { StreamTextResult };
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBO0lBQUE7SUFJQSxDQUFDO0lBQUQsZ0JBQUM7QUFBRCxDQUFDLEFBSkQsSUFJQzs7QUFJRDtJQUFBO0lBSUEsQ0FBQztJQUFELHVCQUFDO0FBQUQsQ0FBQyxBQUpELElBSUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIFBhcnNlZEV2ZW50IH0gZnJvbSAnLi9ldmVudHNvdXJjZV9wYXJzZXInXG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDaGF0TW9kZWwge1xuICBwdWJsaWMgYWJzdHJhY3QgZ2VuZXJhdGVUZXh0KGRhdGE6IEJhc2VDaGF0TW9kZWxJbnB1dCk6IFByb21pc2U8eyB0ZXh0OiBzdHJpbmc7IHJhd1Jlc3BvbnNlOiBhbnkgfT5cblxuICBwdWJsaWMgYWJzdHJhY3Qgc3RyZWFtVGV4dChkYXRhOiBCYXNlQ2hhdE1vZGVsSW5wdXQpOiBQcm9taXNlPFN0cmVhbVRleHRSZXN1bHQ+XG59XG5cbmV4cG9ydCB0eXBlIENoYXRNb2RlbENvbnN0cnVjdG9yID0gdHlwZW9mIENoYXRNb2RlbFxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU3RyZWFtVGV4dFJlc3VsdCB7XG4gIHB1YmxpYyBhYnN0cmFjdCBldmVudFNvdXJjZVN0cmVhbTogQXN5bmNJdGVyYWJsZVJlYWRhYmxlU3RyZWFtPFBhcnNlZEV2ZW50PlxuICBwdWJsaWMgYWJzdHJhY3QgZGF0YVN0cmVhbTogQXN5bmNJdGVyYWJsZVJlYWRhYmxlU3RyZWFtPGFueT5cbiAgcHVibGljIGFic3RyYWN0IHRleHRTdHJlYW06IEFzeW5jSXRlcmFibGVSZWFkYWJsZVN0cmVhbTxzdHJpbmc+XG59XG5cbmV4cG9ydCB0eXBlIEFzeW5jSXRlcmFibGVSZWFkYWJsZVN0cmVhbTxUPiA9IFJlYWRhYmxlU3RyZWFtPFQ+ICYge1xuICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdOiAoKSA9PiB7IG5leHQoKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxUPj4gfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNb2RlbFJlcUlucHV0IHtcbiAgdXJsOiBzdHJpbmdcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgZGF0YT86IE9iamVjdFxuICBzdHJlYW0/OiBib29sZWFuXG59XG5cbmV4cG9ydCB0eXBlIE1vZGVsUmVxID0gPFQgZXh0ZW5kcyBJTW9kZWxSZXFJbnB1dD4oXG4gIHByb3BzOiBULFxuKSA9PiBUWydzdHJlYW0nXSBleHRlbmRzIHRydWUgPyBQcm9taXNlPFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+PiA6IFByb21pc2U8T2JqZWN0PlxuXG5leHBvcnQgaW50ZXJmYWNlIElCb3RSZXFJbnB1dCB7XG4gIHVybDogc3RyaW5nXG4gIG1ldGhvZDogc3RyaW5nXG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIGRhdGE/OiBPYmplY3RcbiAgc3RyZWFtPzogYm9vbGVhblxufVxuXG5leHBvcnQgdHlwZSBCb3RSZXEgPSA8VCBleHRlbmRzIElCb3RSZXFJbnB1dD4oXG4gIHByb3BzOiBULFxuKSA9PiBUWydzdHJlYW0nXSBleHRlbmRzIHRydWUgPyBQcm9taXNlPFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+PiA6IFByb21pc2U8T2JqZWN0PlxuXG50eXBlIENoYXRNb2RlbE1lc3NhZ2UgPSB7XG4gIHJvbGU6ICd1c2VyJyB8ICdzeXN0ZW0nIHwgJ2Fzc2lzdGFudCdcbiAgY29udGVudDogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUNoYXRNb2RlbElucHV0IHtcbiAgbW9kZWw6IHN0cmluZ1xuICBtZXNzYWdlczogQXJyYXk8Q2hhdE1vZGVsTWVzc2FnZT5cbiAgdGVtcGVyYXR1cmU/OiBudW1iZXJcbiAgdG9wX3A/OiBudW1iZXJcbn1cbiJdfQ==
6
+ export { SimpleChatModel };
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0lBQUE7SUFJQSxDQUFDO0lBQUQsc0JBQUM7QUFBRCxDQUFDLEFBSkQsSUFJQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTaW1wbGVDaGF0TW9kZWwge1xuICBwdWJsaWMgYWJzdHJhY3QgZG9HZW5lcmF0ZShkYXRhOiBCYXNlQ2hhdE1vZGVsSW5wdXQpOiBQcm9taXNlPERvR2VuZXJhdGVPdXRwdXQ+XG5cbiAgcHVibGljIGFic3RyYWN0IGRvU3RyZWFtKGRhdGE6IEJhc2VDaGF0TW9kZWxJbnB1dCk6IFByb21pc2U8RG9TdHJlYW1PdXRwdXQ+XG59XG5cbnR5cGUgUmF3UmVzcG9uc2UgPSB7IHJhd1Jlc3BvbnNlPzogYW55IH1cblxuZXhwb3J0IHR5cGUgRG9HZW5lcmF0ZU91dHB1dCA9IEJhc2VEb0dlbmVyYXRlT3V0cHV0ICYgUmF3UmVzcG9uc2VcblxuZXhwb3J0IHR5cGUgRG9TdHJlYW1PdXRwdXQgPSBBc3luY0l0ZXJhYmxlUmVhZGFibGVTdHJlYW08QmFzZURvU3RyZWFtT3V0cHV0Q2h1bmsgJiBSYXdSZXNwb25zZT5cblxuZXhwb3J0IHR5cGUgQ2hhdE1vZGVsQ29uc3RydWN0b3IgPSB0eXBlb2YgU2ltcGxlQ2hhdE1vZGVsXG5cbmV4cG9ydCB0eXBlIEFzeW5jSXRlcmFibGVSZWFkYWJsZVN0cmVhbTxUPiA9IFJlYWRhYmxlU3RyZWFtPFQ+ICYge1xuICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdOiAoKSA9PiB7IG5leHQoKTogUHJvbWlzZTxJdGVyYXRvclJlc3VsdDxUPj4gfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElNb2RlbFJlcUlucHV0IHtcbiAgdXJsOiBzdHJpbmdcbiAgaGVhZGVycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgZGF0YT86IE9iamVjdFxuICBzdHJlYW0/OiBib29sZWFuXG59XG5cbmV4cG9ydCB0eXBlIE1vZGVsUmVxID0gPFQgZXh0ZW5kcyBJTW9kZWxSZXFJbnB1dD4oXG4gIHByb3BzOiBULFxuKSA9PiBUWydzdHJlYW0nXSBleHRlbmRzIHRydWUgPyBQcm9taXNlPFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+PiA6IFByb21pc2U8T2JqZWN0PlxuXG5leHBvcnQgaW50ZXJmYWNlIElCb3RSZXFJbnB1dCB7XG4gIHVybDogc3RyaW5nXG4gIG1ldGhvZDogc3RyaW5nXG4gIGhlYWRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIGRhdGE/OiBPYmplY3RcbiAgc3RyZWFtPzogYm9vbGVhblxufVxuXG5leHBvcnQgdHlwZSBCb3RSZXEgPSA8VCBleHRlbmRzIElCb3RSZXFJbnB1dD4oXG4gIHByb3BzOiBULFxuKSA9PiBUWydzdHJlYW0nXSBleHRlbmRzIHRydWUgPyBQcm9taXNlPFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+PiA6IFByb21pc2U8T2JqZWN0PlxuXG5leHBvcnQgdHlwZSBVc2VyTWVzc2FnZSA9IHtcbiAgcm9sZTogJ3VzZXInXG4gIGNvbnRlbnQ6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBTeXN0ZW1NZXNzYWdlID0ge1xuICByb2xlOiAnc3lzdGVtJ1xuICBjb250ZW50OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgQXNzaXN0YW50TWVzc2FnZSA9IFBsYWluQXNzaXN0YW50TWVzc2FnZSB8IFRvb2xDYWxsQXNzaXN0YW50TWVzc2FnZVxuXG5leHBvcnQgdHlwZSBQbGFpbkFzc2lzdGFudE1lc3NhZ2UgPSB7XG4gIHJvbGU6ICdhc3Npc3RhbnQnXG4gIGNvbnRlbnQ6IHN0cmluZ1xufVxuXG5leHBvcnQgdHlwZSBUb29sQ2FsbEFzc2lzdGFudE1lc3NhZ2UgPSB7XG4gIHJvbGU6ICdhc3Npc3RhbnQnXG4gIHRvb2xfY2FsbHM6IEFycmF5PFRvb2xDYWxsPlxuICBjb250ZW50Pzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIFRvb2xNZXNzYWdlID0ge1xuICByb2xlOiAndG9vbCdcbiAgdG9vbF9jYWxsX2lkOiBzdHJpbmdcbiAgY29udGVudDogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIENoYXRNb2RlbE1lc3NhZ2UgPSBVc2VyTWVzc2FnZSB8IFN5c3RlbU1lc3NhZ2UgfCBBc3Npc3RhbnRNZXNzYWdlIHwgVG9vbE1lc3NhZ2VcblxuZXhwb3J0IHR5cGUgRnVuY3Rpb25Ub29sID0ge1xuICBuYW1lOiBzdHJpbmdcbiAgZGVzY3JpcHRpb246IHN0cmluZ1xuICBmbjogQ2FsbGFibGVGdW5jdGlvblxuICBwYXJhbWV0ZXJzOiBvYmplY3Rcbn1cblxuLy8gI3JlZ2lvbiDlpKfmqKHlnovmoIflh4bovpPlhaXnsbvlnotcbmV4cG9ydCBpbnRlcmZhY2UgQmFzZUNoYXRNb2RlbElucHV0IHtcbiAgbW9kZWw6IHN0cmluZ1xuICBtZXNzYWdlczogQXJyYXk8Q2hhdE1vZGVsTWVzc2FnZT5cbiAgdGVtcGVyYXR1cmU/OiBudW1iZXJcbiAgdG9wX3A/OiBudW1iZXJcbiAgdG9vbHM/OiBBcnJheTxNb2RlbFRvb2w+XG4gIHRvb2xfY2hvaWNlPzogJ25vbmUnIHwgJ2F1dG8nIHwgJ2N1c3RvbSdcbn1cblxuLyoqXG4gKiDnu5kgTExNIOWPkeivt+axguaXtuimgeS8oOeahOW3peWFt1xuICovXG5leHBvcnQgdHlwZSBNb2RlbFRvb2wgPSB7XG4gIHR5cGU6IHN0cmluZ1xuICBmdW5jdGlvbj86IE1vZGVsVG9vbEZ1bmN0aW9uXG59XG5cbi8qKlxuICog57uZIExMTSDlj5Hor7fmsYLml7bopoHkvKDnmoTlt6Xlhbflh73mlbBcbiAqL1xuZXhwb3J0IHR5cGUgTW9kZWxUb29sRnVuY3Rpb24gPSB7XG4gIG5hbWU6IHN0cmluZ1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gIC8qKlxuICAgKiDmj4/ov7Dlh73mlbDlj4LmlbDnmoQgSlNPTiBTY2hlbWEg5a2X56ym5LiyXG4gICAqL1xuICBwYXJhbWV0ZXJzOiBzdHJpbmdcbn1cbi8vICNlbmRyZWdpb25cblxuLy8gI3JlZ2lvbiDlpKfmqKHlnovmoIflh4blk43lupTnsbvlnotcbmV4cG9ydCB0eXBlIFRvb2xDYWxsID0ge1xuICBpZDogc3RyaW5nXG4gIHR5cGU6IHN0cmluZ1xuICBmdW5jdGlvbjogeyBuYW1lOiBzdHJpbmc7IGFyZ3VtZW50czogc3RyaW5nIH1cbn1cblxudHlwZSBGaW5pc2hSZWFzb24gPSAndG9vbF9jYWxscycgfCAoc3RyaW5nICYge30pXG5cbmV4cG9ydCB0eXBlIFVzYWdlID0ge1xuICBjb21wbGV0aW9uX3Rva2VuczogbnVtYmVyXG4gIHByb21wdF90b2tlbnM6IG51bWJlclxuICB0b3RhbF90b2tlbnM6IG51bWJlclxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VEb0dlbmVyYXRlT3V0cHV0IHtcbiAgY2hvaWNlcz86IEFycmF5PHtcbiAgICBmaW5pc2hfcmVhc29uPzogRmluaXNoUmVhc29uXG4gICAgbWVzc2FnZT86IENoYXRNb2RlbE1lc3NhZ2VcbiAgfT5cbiAgdXNhZ2U/OiBVc2FnZVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhc2VEb1N0cmVhbU91dHB1dENodW5rIHtcbiAgY2hvaWNlcz86IEFycmF5PHtcbiAgICBmaW5pc2hfcmVhc29uPzogRmluaXNoUmVhc29uXG4gICAgZGVsdGE/OiBDaGF0TW9kZWxNZXNzYWdlXG4gIH0+XG4gIHVzYWdlPzogVXNhZ2Vcbn1cbi8vICNlbmRyZWdpb25cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { type ParsedEvent } from './eventsource_parser';
2
- import type { AsyncIterableReadableStream } from './type';
2
+ import type { AsyncIterableReadableStream, ChatModelMessage, ToolCallAssistantMessage, ModelTool, FunctionTool } from './type';
3
3
  export declare const ReadableStream: {
4
4
  new (underlyingSource: UnderlyingByteSource, strategy?: {
5
5
  highWaterMark?: number;
@@ -26,3 +26,11 @@ export declare class TextDecoderStream {
26
26
  get [Symbol.toStringTag](): string;
27
27
  }
28
28
  export declare function createAsyncIterable<T>(stream: ReadableStream<T>): AsyncIterableReadableStream<T>;
29
+ export declare function intoStandardStream<T>(stream: ReadableStream<Uint8Array>): ReadableStream<T>;
30
+ export declare function createPromise<T = unknown>(): {
31
+ promise: Promise<T>;
32
+ res: (value: T | PromiseLike<T>) => void;
33
+ rej: (reason?: any) => void;
34
+ };
35
+ export declare function isToolCallAssistantMessage(message: ChatModelMessage): message is ToolCallAssistantMessage;
36
+ export declare function functionToolToModelTool(tool: FunctionTool): ModelTool;
package/dist/esm/utils.js CHANGED
@@ -145,4 +145,44 @@ export function createAsyncIterable(stream) {
145
145
  };
146
146
  return _stream;
147
147
  }
148
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLGVBQWUsSUFBSSxnQkFBZ0IsRUFBRSxjQUFjLElBQUksZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDN0csT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0scUNBQXFDLENBQUE7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBNEMsTUFBTSxzQkFBc0IsQ0FBQTtBQUU3RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFFaEQsTUFBTSxDQUFDLElBQU0sY0FBYyxHQUFHLGVBVzdCLENBQUE7QUFFRCxNQUFNLENBQUMsSUFBTSxlQUFlLEdBQUcsZ0JBUTlCLENBQUE7QUFFRCxNQUFNLENBQUMsSUFBTSxzQ0FBc0MsR0FBRztJQUNwRCxJQUFJLE1BQTBCLENBQUE7SUFFOUIsT0FBTyxJQUFJLGVBQWUsQ0FBc0I7UUFDOUMsS0FBSyxZQUFDLFVBQVU7WUFDZCxNQUFNLEdBQUcsWUFBWSxDQUFDLFVBQUMsS0FBSztnQkFDMUIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtvQkFDMUIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtpQkFDMUI7WUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUM7UUFDRCxTQUFTLFlBQUMsS0FBSztZQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDcEIsQ0FBQztLQUNGLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxJQUFNLGtCQUFrQixHQUFHLDJCQUEyQixDQUFDLGNBQWMsQ0FBQyxDQUFBO0FBRTdFO0lBcUJFLDJCQUFZLFFBQWtCLEVBQUUsT0FBZ0M7UUFBcEQseUJBQUEsRUFBQSxrQkFBa0I7UUFBRSx3QkFBQSxFQUFBLFlBQWdDO1FBQWhFLGlCQUVDO1FBcEJPLGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBQztZQUN0QyxTQUFTLEVBQUUsVUFBQyxLQUFLLEVBQUUsVUFBVTtnQkFDM0IsSUFBTSxLQUFLLEdBQUcsS0FBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtnQkFFekUsSUFBSSxLQUFLLEVBQUU7b0JBQ1QsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtpQkFDMUI7WUFDSCxDQUFDO1lBQ0QsS0FBSyxFQUFFLFVBQUMsVUFBVTtnQkFDaEIsSUFBTSxLQUFLLEdBQUcsS0FBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQTtnQkFDbEMsSUFBSSxLQUFLLEVBQUU7b0JBQ1QsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtpQkFDMUI7Z0JBRUQsVUFBVSxDQUFDLFNBQVMsRUFBRSxDQUFBO1lBQ3hCLENBQUM7U0FDRixDQUFDLENBQUE7UUFHQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUNsRCxDQUFDO0lBRUQsc0JBQUksdUNBQVE7YUFBWjtZQUNFLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUE7UUFDN0IsQ0FBQzs7O09BQUE7SUFFRCxzQkFBSSxvQ0FBSzthQUFUO1lBQ0UsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQTtRQUMxQixDQUFDOzs7T0FBQTtJQUVELHNCQUFJLHdDQUFTO2FBQWI7WUFDRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFBO1FBQzlCLENBQUM7OztPQUFBO0lBRUQsc0JBQUksdUNBQVE7YUFBWjtZQUNFLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUE7UUFDaEMsQ0FBQzs7O09BQUE7SUFFRCxzQkFBSSx1Q0FBUTthQUFaO1lBQ0UsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQTtRQUNoQyxDQUFDOzs7T0FBQTtJQUVELHNCQUFJLDZCQUFDLE1BQU0sQ0FBQyxXQUFZO2FBQXhCO1lBQ0UsT0FBTyxtQkFBbUIsQ0FBQTtRQUM1QixDQUFDOzs7T0FBQTtJQUNILHdCQUFDO0FBQUQsQ0FBQyxBQWhERCxJQWdEQzs7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUksTUFBeUI7SUFDOUQsSUFBTSxPQUFPLEdBQUcsTUFBd0MsQ0FBQTtJQUN4RCxPQUFPLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHO1FBQzlCLElBQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQTtRQUNqQyxPQUFPO1lBQ0MsSUFBSTs7Ozs7b0NBQ2dCLFdBQU0sTUFBTSxDQUFDLElBQUksRUFBRSxFQUFBOztnQ0FBckMsS0FBa0IsU0FBbUIsRUFBbkMsSUFBSSxVQUFBLEVBQUUsS0FBSyxXQUFBO2dDQUNuQixXQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssT0FBQSxFQUFFLEVBQUE7Ozs7YUFDeEU7U0FDRixDQUFBO0lBQ0gsQ0FBQyxDQUFBO0lBQ0QsT0FBTyxPQUFPLENBQUE7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zZm9ybVN0cmVhbSBhcyBfVHJhbnNmb3JtU3RyZWFtLCBSZWFkYWJsZVN0cmVhbSBhcyBfUmVhZGFibGVTdHJlYW0gfSBmcm9tICd3ZWItc3RyZWFtcy1wb2x5ZmlsbCdcbmltcG9ydCB7IGNyZWF0ZVJlYWRhYmxlU3RyZWFtV3JhcHBlciB9IGZyb20gJ0BtYXR0aWFzYnVlbGVucy93ZWItc3RyZWFtcy1hZGFwdGVyJ1xuaW1wb3J0IHsgY3JlYXRlUGFyc2VyLCB0eXBlIEV2ZW50U291cmNlUGFyc2VyLCB0eXBlIFBhcnNlZEV2ZW50IH0gZnJvbSAnLi9ldmVudHNvdXJjZV9wYXJzZXInXG5pbXBvcnQgdHlwZSB7IEFzeW5jSXRlcmFibGVSZWFkYWJsZVN0cmVhbSB9IGZyb20gJy4vdHlwZSdcbmltcG9ydCB7IFRleHREZWNvZGVyIH0gZnJvbSAndGV4dC1lbmNvZGluZy1zaGltJ1xuXG5leHBvcnQgY29uc3QgUmVhZGFibGVTdHJlYW0gPSBfUmVhZGFibGVTdHJlYW0gYXMge1xuICBwcm90b3R5cGU6IFJlYWRhYmxlU3RyZWFtXG5cbiAgbmV3IChcbiAgICB1bmRlcmx5aW5nU291cmNlOiBVbmRlcmx5aW5nQnl0ZVNvdXJjZSxcbiAgICBzdHJhdGVneT86IHtcbiAgICAgIGhpZ2hXYXRlck1hcms/OiBudW1iZXJcbiAgICB9LFxuICApOiBSZWFkYWJsZVN0cmVhbTxVaW50OEFycmF5PlxuICBuZXcgPFIgPSBhbnk+KHVuZGVybHlpbmdTb3VyY2U6IFVuZGVybHlpbmdEZWZhdWx0U291cmNlPFI+LCBzdHJhdGVneT86IFF1ZXVpbmdTdHJhdGVneTxSPik6IFJlYWRhYmxlU3RyZWFtPFI+XG4gIG5ldyA8UiA9IGFueT4odW5kZXJseWluZ1NvdXJjZT86IFVuZGVybHlpbmdTb3VyY2U8Uj4sIHN0cmF0ZWd5PzogUXVldWluZ1N0cmF0ZWd5PFI+KTogUmVhZGFibGVTdHJlYW08Uj5cbn1cblxuZXhwb3J0IGNvbnN0IFRyYW5zZm9ybVN0cmVhbSA9IF9UcmFuc2Zvcm1TdHJlYW0gYXMge1xuICBwcm90b3R5cGU6IFRyYW5zZm9ybVN0cmVhbVxuXG4gIG5ldyA8SSA9IGFueSwgTyA9IGFueT4oXG4gICAgdHJhbnNmb3JtZXI/OiBUcmFuc2Zvcm1lcjxJLCBPPixcbiAgICB3cml0YWJsZVN0cmF0ZWd5PzogUXVldWluZ1N0cmF0ZWd5PEk+LFxuICAgIHJlYWRhYmxlU3RyYXRlZ3k/OiBRdWV1aW5nU3RyYXRlZ3k8Tz4sXG4gICk6IFRyYW5zZm9ybVN0cmVhbTxJLCBPPlxufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlRXZlbnRTb3VyY2VQYXJzZXJUcmFuc2Zvcm1TdHJlYW0gPSAoKSA9PiB7XG4gIGxldCBwYXJzZXIhOiBFdmVudFNvdXJjZVBhcnNlclxuXG4gIHJldHVybiBuZXcgVHJhbnNmb3JtU3RyZWFtPHN0cmluZywgUGFyc2VkRXZlbnQ+KHtcbiAgICBzdGFydChjb250cm9sbGVyKSB7XG4gICAgICBwYXJzZXIgPSBjcmVhdGVQYXJzZXIoKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudC50eXBlID09PSAnZXZlbnQnKSB7XG4gICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG4gICAgdHJhbnNmb3JtKGNodW5rKSB7XG4gICAgICBwYXJzZXIuZmVlZChjaHVuaylcbiAgICB9LFxuICB9KVxufVxuXG5leHBvcnQgY29uc3QgdG9Qb2x5ZmlsbFJlYWRhYmxlID0gY3JlYXRlUmVhZGFibGVTdHJlYW1XcmFwcGVyKFJlYWRhYmxlU3RyZWFtKVxuXG5leHBvcnQgY2xhc3MgVGV4dERlY29kZXJTdHJlYW0ge1xuICBwcml2YXRlIGhhbmRsZTogVGV4dERlY29kZXJcblxuICBwcml2YXRlIHRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe1xuICAgIHRyYW5zZm9ybTogKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaGFuZGxlLmRlY29kZShuZXcgVWludDhBcnJheShjaHVuayksIHsgc3RyZWFtOiB0cnVlIH0pXG5cbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBjb250cm9sbGVyLmVucXVldWUodmFsdWUpXG4gICAgICB9XG4gICAgfSxcbiAgICBmbHVzaDogKGNvbnRyb2xsZXIpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5oYW5kbGUuZGVjb2RlKClcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBjb250cm9sbGVyLmVucXVldWUodmFsdWUpXG4gICAgICB9XG5cbiAgICAgIGNvbnRyb2xsZXIudGVybWluYXRlKClcbiAgICB9LFxuICB9KVxuXG4gIGNvbnN0cnVjdG9yKGVuY29kaW5nID0gJ3V0Zi04Jywgb3B0aW9uczogVGV4dERlY29kZXJPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLmhhbmRsZSA9IG5ldyBUZXh0RGVjb2RlcihlbmNvZGluZywgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBlbmNvZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGUuZW5jb2RpbmdcbiAgfVxuXG4gIGdldCBmYXRhbCgpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGUuZmF0YWxcbiAgfVxuXG4gIGdldCBpZ25vcmVCT00oKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlLmlnbm9yZUJPTVxuICB9XG5cbiAgZ2V0IHJlYWRhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybS5yZWFkYWJsZVxuICB9XG5cbiAgZ2V0IHdyaXRhYmxlKCkge1xuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybS53cml0YWJsZVxuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnVGV4dERlY29kZXJTdHJlYW0nXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFzeW5jSXRlcmFibGU8VD4oc3RyZWFtOiBSZWFkYWJsZVN0cmVhbTxUPikge1xuICBjb25zdCBfc3RyZWFtID0gc3RyZWFtIGFzIEFzeW5jSXRlcmFibGVSZWFkYWJsZVN0cmVhbTxUPlxuICBfc3RyZWFtW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9ICgpID0+IHtcbiAgICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKClcbiAgICByZXR1cm4ge1xuICAgICAgYXN5bmMgbmV4dCgpOiBQcm9taXNlPEl0ZXJhdG9yUmVzdWx0PFQ+PiB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICAgICAgcmV0dXJuIGRvbmUgPyB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmRlZmluZWQgfSA6IHsgZG9uZTogZmFsc2UsIHZhbHVlIH1cbiAgICAgIH0sXG4gICAgfVxuICB9XG4gIHJldHVybiBfc3RyZWFtXG59XG4iXX0=
148
+ export function intoStandardStream(stream) {
149
+ return createAsyncIterable(stream
150
+ .pipeThrough(new TextDecoderStream())
151
+ .pipeThrough(createEventSourceParserTransformStream())
152
+ .pipeThrough(new TransformStream({
153
+ transform: function (chunk, controller) {
154
+ try {
155
+ var data = JSON.parse(chunk.data);
156
+ controller.enqueue(data);
157
+ }
158
+ catch (e) {
159
+ if (chunk.data !== '[DONE]') {
160
+ console.warn('Error when transforming event source data to json', e);
161
+ }
162
+ }
163
+ },
164
+ })));
165
+ }
166
+ export function createPromise() {
167
+ var res;
168
+ var rej;
169
+ var promise = new Promise(function (resolve, reject) {
170
+ res = resolve;
171
+ rej = reject;
172
+ });
173
+ return { promise: promise, res: res, rej: rej };
174
+ }
175
+ export function isToolCallAssistantMessage(message) {
176
+ return message.role === 'assistant' && 'tool_calls' in message && message.tool_calls[0] != null;
177
+ }
178
+ export function functionToolToModelTool(tool) {
179
+ return {
180
+ type: 'function',
181
+ function: {
182
+ description: tool.description,
183
+ name: tool.name,
184
+ parameters: JSON.stringify(tool.parameters),
185
+ },
186
+ };
187
+ }
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLGVBQWUsSUFBSSxnQkFBZ0IsRUFBRSxjQUFjLElBQUksZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDN0csT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0scUNBQXFDLENBQUE7QUFDakYsT0FBTyxFQUFFLFlBQVksRUFBNEMsTUFBTSxzQkFBc0IsQ0FBQTtBQVE3RixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFFaEQsTUFBTSxDQUFDLElBQU0sY0FBYyxHQUFHLGVBVzdCLENBQUE7QUFFRCxNQUFNLENBQUMsSUFBTSxlQUFlLEdBQUcsZ0JBUTlCLENBQUE7QUFFRCxNQUFNLENBQUMsSUFBTSxzQ0FBc0MsR0FBRztJQUNwRCxJQUFJLE1BQTBCLENBQUE7SUFFOUIsT0FBTyxJQUFJLGVBQWUsQ0FBc0I7UUFDOUMsS0FBSyxZQUFDLFVBQVU7WUFDZCxNQUFNLEdBQUcsWUFBWSxDQUFDLFVBQUMsS0FBSztnQkFDMUIsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtvQkFDMUIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQTtpQkFDMUI7WUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUM7UUFDRCxTQUFTLFlBQUMsS0FBSztZQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDcEIsQ0FBQztLQUNGLENBQUMsQ0FBQTtBQUNKLENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxJQUFNLGtCQUFrQixHQUFHLDJCQUEyQixDQUFDLGNBQWMsQ0FBQyxDQUFBO0FBRTdFO0lBcUJFLDJCQUFZLFFBQWtCLEVBQUUsT0FBZ0M7UUFBcEQseUJBQUEsRUFBQSxr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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRyYW5zZm9ybVN0cmVhbSBhcyBfVHJhbnNmb3JtU3RyZWFtLCBSZWFkYWJsZVN0cmVhbSBhcyBfUmVhZGFibGVTdHJlYW0gfSBmcm9tICd3ZWItc3RyZWFtcy1wb2x5ZmlsbCdcbmltcG9ydCB7IGNyZWF0ZVJlYWRhYmxlU3RyZWFtV3JhcHBlciB9IGZyb20gJ0BtYXR0aWFzYnVlbGVucy93ZWItc3RyZWFtcy1hZGFwdGVyJ1xuaW1wb3J0IHsgY3JlYXRlUGFyc2VyLCB0eXBlIEV2ZW50U291cmNlUGFyc2VyLCB0eXBlIFBhcnNlZEV2ZW50IH0gZnJvbSAnLi9ldmVudHNvdXJjZV9wYXJzZXInXG5pbXBvcnQgdHlwZSB7XG4gIEFzeW5jSXRlcmFibGVSZWFkYWJsZVN0cmVhbSxcbiAgQ2hhdE1vZGVsTWVzc2FnZSxcbiAgVG9vbENhbGxBc3Npc3RhbnRNZXNzYWdlLFxuICBNb2RlbFRvb2wsXG4gIEZ1bmN0aW9uVG9vbCxcbn0gZnJvbSAnLi90eXBlJ1xuaW1wb3J0IHsgVGV4dERlY29kZXIgfSBmcm9tICd0ZXh0LWVuY29kaW5nLXNoaW0nXG5cbmV4cG9ydCBjb25zdCBSZWFkYWJsZVN0cmVhbSA9IF9SZWFkYWJsZVN0cmVhbSBhcyB7XG4gIHByb3RvdHlwZTogUmVhZGFibGVTdHJlYW1cblxuICBuZXcgKFxuICAgIHVuZGVybHlpbmdTb3VyY2U6IFVuZGVybHlpbmdCeXRlU291cmNlLFxuICAgIHN0cmF0ZWd5Pzoge1xuICAgICAgaGlnaFdhdGVyTWFyaz86IG51bWJlclxuICAgIH0sXG4gICk6IFJlYWRhYmxlU3RyZWFtPFVpbnQ4QXJyYXk+XG4gIG5ldyA8UiA9IGFueT4odW5kZXJseWluZ1NvdXJjZTogVW5kZXJseWluZ0RlZmF1bHRTb3VyY2U8Uj4sIHN0cmF0ZWd5PzogUXVldWluZ1N0cmF0ZWd5PFI+KTogUmVhZGFibGVTdHJlYW08Uj5cbiAgbmV3IDxSID0gYW55Pih1bmRlcmx5aW5nU291cmNlPzogVW5kZXJseWluZ1NvdXJjZTxSPiwgc3RyYXRlZ3k/OiBRdWV1aW5nU3RyYXRlZ3k8Uj4pOiBSZWFkYWJsZVN0cmVhbTxSPlxufVxuXG5leHBvcnQgY29uc3QgVHJhbnNmb3JtU3RyZWFtID0gX1RyYW5zZm9ybVN0cmVhbSBhcyB7XG4gIHByb3RvdHlwZTogVHJhbnNmb3JtU3RyZWFtXG5cbiAgbmV3IDxJID0gYW55LCBPID0gYW55PihcbiAgICB0cmFuc2Zvcm1lcj86IFRyYW5zZm9ybWVyPEksIE8+LFxuICAgIHdyaXRhYmxlU3RyYXRlZ3k/OiBRdWV1aW5nU3RyYXRlZ3k8ST4sXG4gICAgcmVhZGFibGVTdHJhdGVneT86IFF1ZXVpbmdTdHJhdGVneTxPPixcbiAgKTogVHJhbnNmb3JtU3RyZWFtPEksIE8+XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVFdmVudFNvdXJjZVBhcnNlclRyYW5zZm9ybVN0cmVhbSA9ICgpID0+IHtcbiAgbGV0IHBhcnNlciE6IEV2ZW50U291cmNlUGFyc2VyXG5cbiAgcmV0dXJuIG5ldyBUcmFuc2Zvcm1TdHJlYW08c3RyaW5nLCBQYXJzZWRFdmVudD4oe1xuICAgIHN0YXJ0KGNvbnRyb2xsZXIpIHtcbiAgICAgIHBhcnNlciA9IGNyZWF0ZVBhcnNlcigoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdldmVudCcpIHtcbiAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcbiAgICB0cmFuc2Zvcm0oY2h1bmspIHtcbiAgICAgIHBhcnNlci5mZWVkKGNodW5rKVxuICAgIH0sXG4gIH0pXG59XG5cbmV4cG9ydCBjb25zdCB0b1BvbHlmaWxsUmVhZGFibGUgPSBjcmVhdGVSZWFkYWJsZVN0cmVhbVdyYXBwZXIoUmVhZGFibGVTdHJlYW0pXG5cbmV4cG9ydCBjbGFzcyBUZXh0RGVjb2RlclN0cmVhbSB7XG4gIHByaXZhdGUgaGFuZGxlOiBUZXh0RGVjb2RlclxuXG4gIHByaXZhdGUgdHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7XG4gICAgdHJhbnNmb3JtOiAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5oYW5kbGUuZGVjb2RlKG5ldyBVaW50OEFycmF5KGNodW5rKSwgeyBzdHJlYW06IHRydWUgfSlcblxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZSh2YWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIGZsdXNoOiAoY29udHJvbGxlcikgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhbmRsZS5kZWNvZGUoKVxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZSh2YWx1ZSlcbiAgICAgIH1cblxuICAgICAgY29udHJvbGxlci50ZXJtaW5hdGUoKVxuICAgIH0sXG4gIH0pXG5cbiAgY29uc3RydWN0b3IoZW5jb2RpbmcgPSAndXRmLTgnLCBvcHRpb25zOiBUZXh0RGVjb2Rlck9wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuaGFuZGxlID0gbmV3IFRleHREZWNvZGVyKGVuY29kaW5nLCBvcHRpb25zKVxuICB9XG5cbiAgZ2V0IGVuY29kaW5nKCkge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZS5lbmNvZGluZ1xuICB9XG5cbiAgZ2V0IGZhdGFsKCkge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZS5mYXRhbFxuICB9XG5cbiAgZ2V0IGlnbm9yZUJPTSgpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGUuaWdub3JlQk9NXG4gIH1cblxuICBnZXQgcmVhZGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtLnJlYWRhYmxlXG4gIH1cblxuICBnZXQgd3JpdGFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHJhbnNmb3JtLndyaXRhYmxlXG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdUZXh0RGVjb2RlclN0cmVhbSdcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXN5bmNJdGVyYWJsZTxUPihzdHJlYW06IFJlYWRhYmxlU3RyZWFtPFQ+KSB7XG4gIGNvbnN0IF9zdHJlYW0gPSBzdHJlYW0gYXMgQXN5bmNJdGVyYWJsZVJlYWRhYmxlU3RyZWFtPFQ+XG4gIF9zdHJlYW1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gKCkgPT4ge1xuICAgIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKVxuICAgIHJldHVybiB7XG4gICAgICBhc3luYyBuZXh0KCk6IFByb21pc2U8SXRlcmF0b3JSZXN1bHQ8VD4+IHtcbiAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuICAgICAgICByZXR1cm4gZG9uZSA/IHsgZG9uZTogdHJ1ZSwgdmFsdWU6IHVuZGVmaW5lZCB9IDogeyBkb25lOiBmYWxzZSwgdmFsdWUgfVxuICAgICAgfSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIF9zdHJlYW1cbn1cblxuLyoqXG4gKiDlsIYgU1NFIOS6jOi/m+WItua1gei9rOaNouS4uiBUIOexu+Wei+eahOa1gVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW50b1N0YW5kYXJkU3RyZWFtPFQ+KHN0cmVhbTogUmVhZGFibGVTdHJlYW08VWludDhBcnJheT4pOiBSZWFkYWJsZVN0cmVhbTxUPiB7XG4gIHJldHVybiBjcmVhdGVBc3luY0l0ZXJhYmxlKHN0cmVhbVxuICAgIC5waXBlVGhyb3VnaChuZXcgVGV4dERlY29kZXJTdHJlYW0oKSlcbiAgICAucGlwZVRocm91Z2goY3JlYXRlRXZlbnRTb3VyY2VQYXJzZXJUcmFuc2Zvcm1TdHJlYW0oKSlcbiAgICAucGlwZVRocm91Z2gobmV3IFRyYW5zZm9ybVN0cmVhbTxQYXJzZWRFdmVudCwgVD4oe1xuICAgICAgdHJhbnNmb3JtKGNodW5rLCBjb250cm9sbGVyKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoY2h1bmsuZGF0YSkgYXMgVFxuICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShkYXRhKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgaWYgKGNodW5rLmRhdGEgIT09ICdbRE9ORV0nKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0Vycm9yIHdoZW4gdHJhbnNmb3JtaW5nIGV2ZW50IHNvdXJjZSBkYXRhIHRvIGpzb24nLCBlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9KSwpLClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVByb21pc2U8VCA9IHVua25vd24+KCkge1xuICBsZXQgcmVzOiAodmFsdWU6IFQgfCBQcm9taXNlTGlrZTxUPikgPT4gdm9pZFxuICBsZXQgcmVqOiAocmVhc29uPzogYW55KSA9PiB2b2lkXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxUPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzID0gcmVzb2x2ZVxuICAgIHJlaiA9IHJlamVjdFxuICB9KVxuICByZXR1cm4geyBwcm9taXNlLCByZXMsIHJlaiB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rvb2xDYWxsQXNzaXN0YW50TWVzc2FnZShtZXNzYWdlOiBDaGF0TW9kZWxNZXNzYWdlKTogbWVzc2FnZSBpcyBUb29sQ2FsbEFzc2lzdGFudE1lc3NhZ2Uge1xuICByZXR1cm4gbWVzc2FnZS5yb2xlID09PSAnYXNzaXN0YW50JyAmJiAndG9vbF9jYWxscycgaW4gbWVzc2FnZSAmJiBtZXNzYWdlLnRvb2xfY2FsbHNbMF0gIT0gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZnVuY3Rpb25Ub29sVG9Nb2RlbFRvb2wodG9vbDogRnVuY3Rpb25Ub29sKTogTW9kZWxUb29sIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnZnVuY3Rpb24nLFxuICAgIGZ1bmN0aW9uOiB7XG4gICAgICBkZXNjcmlwdGlvbjogdG9vbC5kZXNjcmlwdGlvbixcbiAgICAgIG5hbWU6IHRvb2wubmFtZSxcbiAgICAgIHBhcmFtZXRlcnM6IEpTT04uc3RyaW5naWZ5KHRvb2wucGFyYW1ldGVycyksXG4gICAgfSxcbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudbase/ai",
3
- "version": "2.8.20-beta.0",
3
+ "version": "2.8.22-beta.0",
4
4
  "description": "cloudbase js sdk ai module",
5
5
  "main": "dist/cjs/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -27,7 +27,7 @@
27
27
  "author": "",
28
28
  "license": "Apache-2.0",
29
29
  "dependencies": {
30
- "@cloudbase/types": "^2.8.20-beta.0",
30
+ "@cloudbase/types": "^2.8.22-beta.0",
31
31
  "@mattiasbuelens/web-streams-adapter": "^0.1.0",
32
32
  "text-encoding-shim": "^1.0.5",
33
33
  "web-streams-polyfill": "^4.0.0"
@@ -35,5 +35,5 @@
35
35
  "devDependencies": {
36
36
  "@cloudbase/adapter-interface": "^0.5.0"
37
37
  },
38
- "gitHead": "817ebe4ea202091817e3a16617c4688aeb2619aa"
38
+ "gitHead": "3771e80b46ea5b6f4b138767e94f466b24e1b8f5"
39
39
  }
package/src/AI.ts ADDED
@@ -0,0 +1,77 @@
1
+ import type { SDKRequestInterface } from '@cloudbase/adapter-interface'
2
+ import { Bot } from './bot'
3
+ import * as models from './models'
4
+ import * as types from './type'
5
+
6
+ const { MODELS } = models
7
+
8
+ class AI {
9
+ public aiBaseUrl: string
10
+ public aiBotBaseUrl: string
11
+ public bot: Bot
12
+
13
+ constructor(private req: SDKRequestInterface, public baseUrl: string) {
14
+ this.aiBaseUrl = `${baseUrl}/ai`
15
+ this.aiBotBaseUrl = `${baseUrl}/aibot`
16
+ this.bot = new Bot(this.botRequest, this.aiBotBaseUrl)
17
+ }
18
+
19
+ createModel<T extends keyof typeof MODELS>(model: T) {
20
+ const SimpleModelConstructor = MODELS[model]
21
+ const simpleModel: types.SimpleChatModel = new SimpleModelConstructor(this.modelRequest, this.aiBaseUrl)
22
+ const reactModel = new models.ReactModel(simpleModel)
23
+ return reactModel
24
+ }
25
+
26
+ registerModel(name: string, model: types.ChatModelConstructor) {
27
+ if (MODELS[name] != null) {
28
+ console.warn(`AI model ${name} already exists!`)
29
+ return
30
+ }
31
+ MODELS[name] = model
32
+ }
33
+
34
+ modelRequest: types.ModelReq = async ({ url, data, headers, stream }) => (
35
+ await this.req.fetch({
36
+ method: 'post',
37
+ headers: {
38
+ 'Content-Type': 'application/json',
39
+ ...headers,
40
+ },
41
+ body: JSON.stringify(data),
42
+ url,
43
+ stream,
44
+ })
45
+ ).data
46
+
47
+ botRequest: types.BotReq = async ({ method, url, data = {}, headers, stream }) => {
48
+ if (method === 'get') {
49
+ return (await this.req.fetch({ url: `${url}?${objectToParam(data)}`, method, headers, stream })).data
50
+ }
51
+
52
+ return (
53
+ await this.req.fetch({
54
+ url,
55
+ body: JSON.stringify(data),
56
+ headers: { 'Content-Type': 'application/json', ...headers },
57
+ stream,
58
+ method,
59
+ })
60
+ ).data
61
+
62
+ function objectToParam(obj: Object) {
63
+ return Object.entries(obj)
64
+ .map(([key, value]) => `${key}=${value}`)
65
+ .join('&')
66
+ }
67
+ }
68
+
69
+ registerFunctionTool(functionTool: types.FunctionTool) {
70
+ if (models.toolMap.has(functionTool.name)) {
71
+ console.warn(`AI function tool ${functionTool.name} already exists and will be overwritten!`)
72
+ }
73
+ models.toolMap.set(functionTool.name, functionTool.fn)
74
+ }
75
+ }
76
+
77
+ export { AI }
package/src/index.ts CHANGED
@@ -1,73 +1,15 @@
1
1
  import type { IFetchOptions, SDKRequestInterface } from '@cloudbase/adapter-interface'
2
2
  import type { ICloudbase } from '@cloudbase/types'
3
3
  import type { ICloudbaseComponent } from '@cloudbase/types/component'
4
+ import { AI } from './AI'
4
5
  import { Bot } from './bot'
5
6
  import * as models from './models'
6
- import * as types from './type'
7
7
  import * as utils from './utils'
8
8
 
9
9
  const COMPONENT_NAME = 'ai'
10
10
 
11
11
  const { MODELS, ...restModels } = models
12
12
 
13
- class AI {
14
- public aiBaseUrl: string
15
- public aiBotBaseUrl: string
16
- public bot: Bot
17
-
18
- constructor(private req: SDKRequestInterface, public baseUrl: string) {
19
- this.aiBaseUrl = `${baseUrl}/ai`
20
- this.aiBotBaseUrl = `${baseUrl}/aibot`
21
- this.bot = new Bot(this.botRequest, this.aiBotBaseUrl)
22
- }
23
-
24
- createModel<T extends keyof typeof MODELS>(model: T) {
25
- return new MODELS[model](this.modelRequest, this.aiBaseUrl) as InstanceType<(typeof MODELS)[T]>
26
- }
27
-
28
- registerModel(name: string, model: types.ChatModelConstructor) {
29
- if (MODELS[name] != null) {
30
- console.warn(`AI model ${name} already exists!`)
31
- return
32
- }
33
- MODELS[name] = model
34
- }
35
-
36
- modelRequest: types.ModelReq = async ({ url, data, headers, stream }) => (
37
- await this.req.fetch({
38
- method: 'post',
39
- headers: {
40
- ...headers,
41
- },
42
- body: JSON.stringify(data),
43
- url,
44
- stream,
45
- })
46
- ).data
47
-
48
- botRequest: types.BotReq = async ({ method, url, data = {}, headers, stream }) => {
49
- if (method === 'get') {
50
- return (await this.req.fetch({ url: `${url}?${objectToParam(data)}`, method, headers, stream })).data
51
- }
52
-
53
- return (
54
- await this.req.fetch({
55
- url,
56
- body: JSON.stringify(data),
57
- headers: { 'Content-Type': 'application/json', ...headers },
58
- stream,
59
- method,
60
- })
61
- ).data
62
-
63
- function objectToParam(obj: Object) {
64
- return Object.entries(obj)
65
- .map(([key, value]) => `${key}=${value}`)
66
- .join('&')
67
- }
68
- }
69
- }
70
-
71
13
  interface IHandleRequestInstance {
72
14
  req: SDKRequestInterface
73
15
  }
@@ -198,4 +140,5 @@ function registerAi(app: ICloudbase) {
198
140
  }
199
141
  }
200
142
 
201
- export { AI, Bot, createAi, restModels as models, registerAi, types, utils }
143
+ export { AI, Bot, createAi, restModels as models, registerAi, utils }
144
+ export * from './type'
@@ -1,15 +1,37 @@
1
- import { type ParsedEvent } from '../../eventsource_parser'
2
1
  import {
3
2
  createAsyncIterable,
4
3
  TransformStream,
5
- TextDecoderStream,
6
- createEventSourceParserTransformStream,
7
4
  toPolyfillReadable,
5
+ intoStandardStream,
6
+ isToolCallAssistantMessage,
8
7
  } from '../../utils'
9
- import type { ArkInputData, ArkGenerateTextOutput, ArkStreamTextOutput } from './type'
10
- import type { ChatModel, StreamTextResult, ModelReq } from '../../type'
8
+ import type { ArkGenerateTextOutput, ArkInputData, ArkStreamTextOutput } from './type'
9
+ import type {
10
+ ModelReq,
11
+ BaseChatModelInput,
12
+ SimpleChatModel,
13
+ DoGenerateOutput,
14
+ DoStreamOutput,
15
+ BaseDoStreamOutputChunk,
16
+ } from '../../type'
11
17
 
12
- export class ArkModel implements ChatModel {
18
+ function processInput(input: BaseChatModelInput): ArkInputData {
19
+ const { messages, model, temperature, tools, top_p } = input
20
+
21
+ return {
22
+ ...input,
23
+ messages,
24
+ model,
25
+ tools: tools?.map(tool => ({
26
+ ...tool,
27
+ function: { ...tool.function, parameters: JSON.parse(tool.function.parameters) },
28
+ })),
29
+ top_p,
30
+ temperature,
31
+ }
32
+ }
33
+
34
+ export class ArkSimpleModel implements SimpleChatModel {
13
35
  public subUrl = 'ark/api/v3/chat/completions'
14
36
  constructor(private req: ModelReq, public baseUrl: string, subUrl?: string) {
15
37
  if (subUrl != null) {
@@ -21,74 +43,50 @@ export class ArkModel implements ChatModel {
21
43
  return `${this.baseUrl}/${this.subUrl}`
22
44
  }
23
45
 
24
- async generateText(data: ArkInputData) {
46
+ public async doGenerate(data: BaseChatModelInput): Promise<DoGenerateOutput> {
25
47
  const res = (await this.req({
26
48
  url: this.url,
27
49
  data: {
28
- ...data,
50
+ ...processInput(data),
29
51
  stream: false,
30
52
  },
31
53
  stream: false,
32
54
  })) as ArkGenerateTextOutput
33
- return {
34
- text: (res?.choices?.[0]?.message?.content as string) ?? '',
35
- rawResponse: res,
36
- }
55
+ return { ...res, rawResponse: res }
37
56
  }
38
57
 
39
- async streamText(data: ArkInputData) {
40
- const stream = await this.req({
58
+ public async doStream(data: BaseChatModelInput): Promise<DoStreamOutput> {
59
+ let isToolCall: null | boolean = null
60
+ const _stream = await this.req({
41
61
  url: this.url,
42
62
  data: {
43
- ...data,
63
+ ...processInput(data),
44
64
  stream: true,
45
65
  },
46
66
  stream: true,
47
67
  })
48
- return new ArkModelStreamResult(stream)
49
- }
50
- }
51
-
52
- class ArkModelStreamResult implements StreamTextResult {
53
- private _eventSourceStream: ReadableStream<ParsedEvent>
54
-
55
- constructor(_stream: ReadableStream<Uint8Array>) {
56
68
  const stream = toPolyfillReadable(_stream) as typeof _stream
57
- this._eventSourceStream = stream
58
- .pipeThrough(new TextDecoderStream())
59
- .pipeThrough(createEventSourceParserTransformStream())
60
- }
61
-
62
- private get teeedStream() {
63
- const [s1, s2] = this._eventSourceStream.tee()
64
- this._eventSourceStream = s2
65
- return s1
66
- }
67
-
68
- get eventSourceStream() {
69
- return createAsyncIterable(this.teeedStream)
70
- }
71
69
 
72
- get dataStream() {
73
- return createAsyncIterable(this.eventSourceStream.pipeThrough(new TransformStream<ParsedEvent, ArkStreamTextOutput>({
70
+ const arkStream = intoStandardStream<ArkStreamTextOutput>(stream)
71
+ const streamWithRaw = arkStream.pipeThrough(new TransformStream<ArkStreamTextOutput, BaseDoStreamOutputChunk & { rawResponse?: any }>({
74
72
  transform(chunk, controller) {
75
- try {
76
- const data = JSON.parse(chunk.data) as ArkStreamTextOutput
77
- controller.enqueue(data)
78
- } catch (e) {
79
- if (chunk.data !== '[DONE]') {
80
- console.warn('Error when transforming event source data to json', e)
73
+ const newChoices = chunk.choices.map((choice) => {
74
+ const message = choice.delta
75
+ if (isToolCall == null) isToolCall = isToolCallAssistantMessage(message)
76
+ if (isToolCall) {
77
+ return {
78
+ ...choice,
79
+ finish_reason: 'tool_calls' as const,
80
+ delta: message,
81
+ }
81
82
  }
82
- }
83
+ return choice
84
+ })
85
+ const newChunk = { ...chunk, choices: newChoices }
86
+ controller.enqueue({ ...newChunk, rawResponse: chunk })
83
87
  },
84
- }),),)
85
- }
88
+ }),)
86
89
 
87
- get textStream() {
88
- return createAsyncIterable(this.dataStream.pipeThrough(new TransformStream<ArkStreamTextOutput, string>({
89
- transform(chunk, controller) {
90
- controller.enqueue(chunk?.choices?.[0]?.message?.content ?? '')
91
- },
92
- }),),)
90
+ return createAsyncIterable(streamWithRaw)
93
91
  }
94
92
  }
@@ -1,18 +1,41 @@
1
- type ArkMessage = {
2
- role: 'user' | 'system' | 'assistant'
3
- content:
4
- | string
5
- | Array<{
6
- type: 'image_url'
7
- image_url: {
8
- url: string
9
- image_bytes: string
10
- detail: string
11
- }
12
- }>
1
+ type UserMessage = {
2
+ role: 'user'
3
+ content: string
4
+ }
5
+
6
+ type SystemMessage = {
7
+ role: 'system'
8
+ content: string
9
+ }
10
+
11
+ type ToolMessage = {
12
+ role: 'tool'
13
+ content: string
14
+ tool_call_id: string
15
+ }
16
+
17
+ type AssistantMessage =
18
+ | {
19
+ role: 'assistant'
20
+ content: string
21
+ }
22
+ | {
23
+ role: 'assistant'
24
+ tool_calls: Array<ToolCall>
25
+ content?: string
26
+ }
27
+
28
+ type ToolCall = {
29
+ id: string
30
+ type: string
31
+ function: {
32
+ name: string
33
+ arguments: string
34
+ }
13
35
  }
14
36
 
15
- // 文档描述模糊,暂只提供基础定义
37
+ type ArkMessage = UserMessage | SystemMessage | AssistantMessage | ToolMessage
38
+
16
39
  export type ArkInputData = {
17
40
  model: string
18
41
  messages: Array<ArkMessage>
@@ -21,21 +44,39 @@ export type ArkInputData = {
21
44
  frequency_penalty?: number
22
45
  temperature?: number
23
46
  top_p?: number
24
- logprobs?: boolean
25
- top_logprobs?: number
26
- logit_bias?: Record<string, number>
47
+ tools?: Array<Tool>
48
+ }
49
+
50
+ type Tool = {
51
+ type: string
52
+ function: {
53
+ name: string
54
+ description?: string
55
+ parameters?: object
56
+ }
27
57
  }
28
58
 
29
- // todo: more precise
30
59
  export type ArkGenerateTextOutput = {
31
60
  choices?: Array<{
32
- message?: { content?: string }
61
+ finish_reason: string
62
+ message?: AssistantMessage
33
63
  }>
64
+ usage?: {
65
+ prompt_tokens: number
66
+ completion_tokens: number
67
+ total_tokens: number
68
+ }
34
69
  }
35
70
 
36
71
  // todo: more precise
37
72
  export type ArkStreamTextOutput = {
38
73
  choices?: Array<{
39
- message?: { content?: string }
74
+ finish_reason: string
75
+ delta: AssistantMessage
40
76
  }>
77
+ usage?: {
78
+ prompt_tokens: number
79
+ completion_tokens: number
80
+ total_tokens: number
81
+ }
41
82
  }