modelmix 1.0.2

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 (1112) hide show
  1. package/.gitattributes +2 -0
  2. package/README.md +147 -0
  3. package/demo/default.env +3 -0
  4. package/demo/demo.mjs +49 -0
  5. package/demo/node_modules/.package-lock.json +272 -0
  6. package/demo/node_modules/@anthropic-ai/sdk/CHANGELOG.md +859 -0
  7. package/demo/node_modules/@anthropic-ai/sdk/LICENSE +8 -0
  8. package/demo/node_modules/@anthropic-ai/sdk/README.md +424 -0
  9. package/demo/node_modules/@anthropic-ai/sdk/_shims/MultipartBody.d.ts +9 -0
  10. package/demo/node_modules/@anthropic-ai/sdk/_shims/MultipartBody.d.ts.map +1 -0
  11. package/demo/node_modules/@anthropic-ai/sdk/_shims/MultipartBody.js +16 -0
  12. package/demo/node_modules/@anthropic-ai/sdk/_shims/MultipartBody.js.map +1 -0
  13. package/demo/node_modules/@anthropic-ai/sdk/_shims/MultipartBody.mjs +12 -0
  14. package/demo/node_modules/@anthropic-ai/sdk/_shims/MultipartBody.mjs.map +1 -0
  15. package/demo/node_modules/@anthropic-ai/sdk/_shims/README.md +46 -0
  16. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/runtime-bun.d.ts +5 -0
  17. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/runtime-bun.d.ts.map +1 -0
  18. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/runtime-bun.js +21 -0
  19. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/runtime-bun.js.map +1 -0
  20. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/runtime-bun.mjs +2 -0
  21. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/runtime-bun.mjs.map +1 -0
  22. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/runtime-node.d.ts +5 -0
  23. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/runtime-node.d.ts.map +1 -0
  24. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/runtime-node.js +21 -0
  25. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/runtime-node.js.map +1 -0
  26. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/runtime-node.mjs +2 -0
  27. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/runtime-node.mjs.map +1 -0
  28. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/runtime.d.ts +5 -0
  29. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/runtime.d.ts.map +1 -0
  30. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/runtime.js +21 -0
  31. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/runtime.js.map +1 -0
  32. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/runtime.mjs +2 -0
  33. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/runtime.mjs.map +1 -0
  34. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/types-node.d.ts +5 -0
  35. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/types-node.d.ts.map +1 -0
  36. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/types-node.js +21 -0
  37. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/types-node.js.map +1 -0
  38. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/types-node.mjs +2 -0
  39. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/types-node.mjs.map +1 -0
  40. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/types.d.ts +101 -0
  41. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/types.js +3 -0
  42. package/demo/node_modules/@anthropic-ai/sdk/_shims/auto/types.mjs +3 -0
  43. package/demo/node_modules/@anthropic-ai/sdk/_shims/bun-runtime.d.ts +6 -0
  44. package/demo/node_modules/@anthropic-ai/sdk/_shims/bun-runtime.d.ts.map +1 -0
  45. package/demo/node_modules/@anthropic-ai/sdk/_shims/bun-runtime.js +14 -0
  46. package/demo/node_modules/@anthropic-ai/sdk/_shims/bun-runtime.js.map +1 -0
  47. package/demo/node_modules/@anthropic-ai/sdk/_shims/bun-runtime.mjs +10 -0
  48. package/demo/node_modules/@anthropic-ai/sdk/_shims/bun-runtime.mjs.map +1 -0
  49. package/demo/node_modules/@anthropic-ai/sdk/_shims/index.d.ts +81 -0
  50. package/demo/node_modules/@anthropic-ai/sdk/_shims/index.js +13 -0
  51. package/demo/node_modules/@anthropic-ai/sdk/_shims/index.mjs +7 -0
  52. package/demo/node_modules/@anthropic-ai/sdk/_shims/manual-types.d.ts +12 -0
  53. package/demo/node_modules/@anthropic-ai/sdk/_shims/manual-types.js +3 -0
  54. package/demo/node_modules/@anthropic-ai/sdk/_shims/manual-types.mjs +3 -0
  55. package/demo/node_modules/@anthropic-ai/sdk/_shims/node-runtime.d.ts +3 -0
  56. package/demo/node_modules/@anthropic-ai/sdk/_shims/node-runtime.d.ts.map +1 -0
  57. package/demo/node_modules/@anthropic-ai/sdk/_shims/node-runtime.js +90 -0
  58. package/demo/node_modules/@anthropic-ai/sdk/_shims/node-runtime.js.map +1 -0
  59. package/demo/node_modules/@anthropic-ai/sdk/_shims/node-runtime.mjs +56 -0
  60. package/demo/node_modules/@anthropic-ai/sdk/_shims/node-runtime.mjs.map +1 -0
  61. package/demo/node_modules/@anthropic-ai/sdk/_shims/node-types.d.ts +42 -0
  62. package/demo/node_modules/@anthropic-ai/sdk/_shims/node-types.js +3 -0
  63. package/demo/node_modules/@anthropic-ai/sdk/_shims/node-types.mjs +3 -0
  64. package/demo/node_modules/@anthropic-ai/sdk/_shims/registry.d.ts +37 -0
  65. package/demo/node_modules/@anthropic-ai/sdk/_shims/registry.d.ts.map +1 -0
  66. package/demo/node_modules/@anthropic-ai/sdk/_shims/registry.js +41 -0
  67. package/demo/node_modules/@anthropic-ai/sdk/_shims/registry.js.map +1 -0
  68. package/demo/node_modules/@anthropic-ai/sdk/_shims/registry.mjs +37 -0
  69. package/demo/node_modules/@anthropic-ai/sdk/_shims/registry.mjs.map +1 -0
  70. package/demo/node_modules/@anthropic-ai/sdk/_shims/web-runtime.d.ts +5 -0
  71. package/demo/node_modules/@anthropic-ai/sdk/_shims/web-runtime.d.ts.map +1 -0
  72. package/demo/node_modules/@anthropic-ai/sdk/_shims/web-runtime.js +78 -0
  73. package/demo/node_modules/@anthropic-ai/sdk/_shims/web-runtime.js.map +1 -0
  74. package/demo/node_modules/@anthropic-ai/sdk/_shims/web-runtime.mjs +71 -0
  75. package/demo/node_modules/@anthropic-ai/sdk/_shims/web-runtime.mjs.map +1 -0
  76. package/demo/node_modules/@anthropic-ai/sdk/_shims/web-types.d.ts +83 -0
  77. package/demo/node_modules/@anthropic-ai/sdk/_shims/web-types.js +3 -0
  78. package/demo/node_modules/@anthropic-ai/sdk/_shims/web-types.mjs +3 -0
  79. package/demo/node_modules/@anthropic-ai/sdk/core.d.ts +239 -0
  80. package/demo/node_modules/@anthropic-ai/sdk/core.d.ts.map +1 -0
  81. package/demo/node_modules/@anthropic-ai/sdk/core.js +879 -0
  82. package/demo/node_modules/@anthropic-ai/sdk/core.js.map +1 -0
  83. package/demo/node_modules/@anthropic-ai/sdk/core.mjs +848 -0
  84. package/demo/node_modules/@anthropic-ai/sdk/core.mjs.map +1 -0
  85. package/demo/node_modules/@anthropic-ai/sdk/error.d.ts +53 -0
  86. package/demo/node_modules/@anthropic-ai/sdk/error.d.ts.map +1 -0
  87. package/demo/node_modules/@anthropic-ai/sdk/error.js +143 -0
  88. package/demo/node_modules/@anthropic-ai/sdk/error.js.map +1 -0
  89. package/demo/node_modules/@anthropic-ai/sdk/error.mjs +127 -0
  90. package/demo/node_modules/@anthropic-ai/sdk/error.mjs.map +1 -0
  91. package/demo/node_modules/@anthropic-ai/sdk/index.d.mts +147 -0
  92. package/demo/node_modules/@anthropic-ai/sdk/index.d.ts +147 -0
  93. package/demo/node_modules/@anthropic-ai/sdk/index.d.ts.map +1 -0
  94. package/demo/node_modules/@anthropic-ai/sdk/index.js +149 -0
  95. package/demo/node_modules/@anthropic-ai/sdk/index.js.map +1 -0
  96. package/demo/node_modules/@anthropic-ai/sdk/index.mjs +121 -0
  97. package/demo/node_modules/@anthropic-ai/sdk/index.mjs.map +1 -0
  98. package/demo/node_modules/@anthropic-ai/sdk/lib/MessageStream.d.ts +94 -0
  99. package/demo/node_modules/@anthropic-ai/sdk/lib/MessageStream.d.ts.map +1 -0
  100. package/demo/node_modules/@anthropic-ai/sdk/lib/MessageStream.js +436 -0
  101. package/demo/node_modules/@anthropic-ai/sdk/lib/MessageStream.js.map +1 -0
  102. package/demo/node_modules/@anthropic-ai/sdk/lib/MessageStream.mjs +432 -0
  103. package/demo/node_modules/@anthropic-ai/sdk/lib/MessageStream.mjs.map +1 -0
  104. package/demo/node_modules/@anthropic-ai/sdk/package.json +104 -0
  105. package/demo/node_modules/@anthropic-ai/sdk/resource.d.ts +6 -0
  106. package/demo/node_modules/@anthropic-ai/sdk/resource.d.ts.map +1 -0
  107. package/demo/node_modules/@anthropic-ai/sdk/resource.js +11 -0
  108. package/demo/node_modules/@anthropic-ai/sdk/resource.js.map +1 -0
  109. package/demo/node_modules/@anthropic-ai/sdk/resource.mjs +7 -0
  110. package/demo/node_modules/@anthropic-ai/sdk/resource.mjs.map +1 -0
  111. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/beta.d.ts +9 -0
  112. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/beta.d.ts.map +1 -0
  113. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/beta.js +40 -0
  114. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/beta.js.map +1 -0
  115. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/beta.mjs +13 -0
  116. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/beta.mjs.map +1 -0
  117. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/index.d.ts +3 -0
  118. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/index.d.ts.map +1 -0
  119. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/index.js +9 -0
  120. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/index.js.map +1 -0
  121. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/index.mjs +4 -0
  122. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/index.mjs.map +1 -0
  123. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/tools/index.d.ts +3 -0
  124. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/tools/index.d.ts.map +1 -0
  125. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/tools/index.js +9 -0
  126. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/tools/index.js.map +1 -0
  127. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/tools/index.mjs +4 -0
  128. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/tools/index.mjs.map +1 -0
  129. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/tools/messages.d.ts +462 -0
  130. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/tools/messages.d.ts.map +1 -0
  131. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/tools/messages.js +20 -0
  132. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/tools/messages.js.map +1 -0
  133. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/tools/messages.mjs +16 -0
  134. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/tools/messages.mjs.map +1 -0
  135. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/tools/tools.d.ts +19 -0
  136. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/tools/tools.d.ts.map +1 -0
  137. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/tools/tools.js +40 -0
  138. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/tools/tools.js.map +1 -0
  139. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/tools/tools.mjs +13 -0
  140. package/demo/node_modules/@anthropic-ai/sdk/resources/beta/tools/tools.mjs.map +1 -0
  141. package/demo/node_modules/@anthropic-ai/sdk/resources/completions.d.ts +184 -0
  142. package/demo/node_modules/@anthropic-ai/sdk/resources/completions.d.ts.map +1 -0
  143. package/demo/node_modules/@anthropic-ai/sdk/resources/completions.js +19 -0
  144. package/demo/node_modules/@anthropic-ai/sdk/resources/completions.js.map +1 -0
  145. package/demo/node_modules/@anthropic-ai/sdk/resources/completions.mjs +15 -0
  146. package/demo/node_modules/@anthropic-ai/sdk/resources/completions.mjs.map +1 -0
  147. package/demo/node_modules/@anthropic-ai/sdk/resources/index.d.ts +4 -0
  148. package/demo/node_modules/@anthropic-ai/sdk/resources/index.d.ts.map +1 -0
  149. package/demo/node_modules/@anthropic-ai/sdk/resources/index.js +11 -0
  150. package/demo/node_modules/@anthropic-ai/sdk/resources/index.js.map +1 -0
  151. package/demo/node_modules/@anthropic-ai/sdk/resources/index.mjs +5 -0
  152. package/demo/node_modules/@anthropic-ai/sdk/resources/index.mjs.map +1 -0
  153. package/demo/node_modules/@anthropic-ai/sdk/resources/messages.d.ts +619 -0
  154. package/demo/node_modules/@anthropic-ai/sdk/resources/messages.d.ts.map +1 -0
  155. package/demo/node_modules/@anthropic-ai/sdk/resources/messages.js +28 -0
  156. package/demo/node_modules/@anthropic-ai/sdk/resources/messages.js.map +1 -0
  157. package/demo/node_modules/@anthropic-ai/sdk/resources/messages.mjs +23 -0
  158. package/demo/node_modules/@anthropic-ai/sdk/resources/messages.mjs.map +1 -0
  159. package/demo/node_modules/@anthropic-ai/sdk/resources/top-level.d.ts +2 -0
  160. package/demo/node_modules/@anthropic-ai/sdk/resources/top-level.d.ts.map +1 -0
  161. package/demo/node_modules/@anthropic-ai/sdk/resources/top-level.js +4 -0
  162. package/demo/node_modules/@anthropic-ai/sdk/resources/top-level.js.map +1 -0
  163. package/demo/node_modules/@anthropic-ai/sdk/resources/top-level.mjs +3 -0
  164. package/demo/node_modules/@anthropic-ai/sdk/resources/top-level.mjs.map +1 -0
  165. package/demo/node_modules/@anthropic-ai/sdk/shims/node.d.ts +29 -0
  166. package/demo/node_modules/@anthropic-ai/sdk/shims/node.d.ts.map +1 -0
  167. package/demo/node_modules/@anthropic-ai/sdk/shims/node.js +31 -0
  168. package/demo/node_modules/@anthropic-ai/sdk/shims/node.js.map +1 -0
  169. package/demo/node_modules/@anthropic-ai/sdk/shims/node.mjs +5 -0
  170. package/demo/node_modules/@anthropic-ai/sdk/shims/node.mjs.map +1 -0
  171. package/demo/node_modules/@anthropic-ai/sdk/shims/web.d.ts +26 -0
  172. package/demo/node_modules/@anthropic-ai/sdk/shims/web.d.ts.map +1 -0
  173. package/demo/node_modules/@anthropic-ai/sdk/shims/web.js +31 -0
  174. package/demo/node_modules/@anthropic-ai/sdk/shims/web.js.map +1 -0
  175. package/demo/node_modules/@anthropic-ai/sdk/shims/web.mjs +5 -0
  176. package/demo/node_modules/@anthropic-ai/sdk/shims/web.mjs.map +1 -0
  177. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/MultipartBody.ts +9 -0
  178. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/README.md +46 -0
  179. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/auto/runtime-bun.ts +4 -0
  180. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/auto/runtime-node.ts +4 -0
  181. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/auto/runtime.ts +4 -0
  182. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/auto/types-node.ts +4 -0
  183. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/auto/types.d.ts +101 -0
  184. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/auto/types.js +3 -0
  185. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/auto/types.mjs +3 -0
  186. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/bun-runtime.ts +14 -0
  187. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/index.d.ts +81 -0
  188. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/index.js +13 -0
  189. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/index.mjs +7 -0
  190. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/manual-types.d.ts +12 -0
  191. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/manual-types.js +3 -0
  192. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/manual-types.mjs +3 -0
  193. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/node-runtime.ts +83 -0
  194. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/node-types.d.ts +42 -0
  195. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/node-types.js +3 -0
  196. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/node-types.mjs +3 -0
  197. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/registry.ts +67 -0
  198. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/web-runtime.ts +103 -0
  199. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/web-types.d.ts +83 -0
  200. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/web-types.js +3 -0
  201. package/demo/node_modules/@anthropic-ai/sdk/src/_shims/web-types.mjs +3 -0
  202. package/demo/node_modules/@anthropic-ai/sdk/src/core.ts +1162 -0
  203. package/demo/node_modules/@anthropic-ai/sdk/src/error.ts +146 -0
  204. package/demo/node_modules/@anthropic-ai/sdk/src/index.ts +264 -0
  205. package/demo/node_modules/@anthropic-ai/sdk/src/lib/.keep +4 -0
  206. package/demo/node_modules/@anthropic-ai/sdk/src/lib/MessageStream.ts +535 -0
  207. package/demo/node_modules/@anthropic-ai/sdk/src/resource.ts +11 -0
  208. package/demo/node_modules/@anthropic-ai/sdk/src/resources/beta/beta.ts +12 -0
  209. package/demo/node_modules/@anthropic-ai/sdk/src/resources/beta/index.ts +4 -0
  210. package/demo/node_modules/@anthropic-ai/sdk/src/resources/beta/tools/index.ts +16 -0
  211. package/demo/node_modules/@anthropic-ai/sdk/src/resources/beta/tools/messages.ts +531 -0
  212. package/demo/node_modules/@anthropic-ai/sdk/src/resources/beta/tools/tools.ts +22 -0
  213. package/demo/node_modules/@anthropic-ai/sdk/src/resources/completions.ts +223 -0
  214. package/demo/node_modules/@anthropic-ai/sdk/src/resources/index.ts +33 -0
  215. package/demo/node_modules/@anthropic-ai/sdk/src/resources/messages.ts +729 -0
  216. package/demo/node_modules/@anthropic-ai/sdk/src/resources/top-level.ts +3 -0
  217. package/demo/node_modules/@anthropic-ai/sdk/src/shims/node.ts +50 -0
  218. package/demo/node_modules/@anthropic-ai/sdk/src/shims/web.ts +50 -0
  219. package/demo/node_modules/@anthropic-ai/sdk/src/streaming.ts +509 -0
  220. package/demo/node_modules/@anthropic-ai/sdk/src/tsconfig.json +11 -0
  221. package/demo/node_modules/@anthropic-ai/sdk/src/uploads.ts +248 -0
  222. package/demo/node_modules/@anthropic-ai/sdk/src/version.ts +1 -0
  223. package/demo/node_modules/@anthropic-ai/sdk/streaming.d.ts +41 -0
  224. package/demo/node_modules/@anthropic-ai/sdk/streaming.d.ts.map +1 -0
  225. package/demo/node_modules/@anthropic-ai/sdk/streaming.js +431 -0
  226. package/demo/node_modules/@anthropic-ai/sdk/streaming.js.map +1 -0
  227. package/demo/node_modules/@anthropic-ai/sdk/streaming.mjs +424 -0
  228. package/demo/node_modules/@anthropic-ai/sdk/streaming.mjs.map +1 -0
  229. package/demo/node_modules/@anthropic-ai/sdk/uploads.d.ts +75 -0
  230. package/demo/node_modules/@anthropic-ai/sdk/uploads.d.ts.map +1 -0
  231. package/demo/node_modules/@anthropic-ai/sdk/uploads.js +165 -0
  232. package/demo/node_modules/@anthropic-ai/sdk/uploads.js.map +1 -0
  233. package/demo/node_modules/@anthropic-ai/sdk/uploads.mjs +152 -0
  234. package/demo/node_modules/@anthropic-ai/sdk/uploads.mjs.map +1 -0
  235. package/demo/node_modules/@anthropic-ai/sdk/version.d.ts +2 -0
  236. package/demo/node_modules/@anthropic-ai/sdk/version.d.ts.map +1 -0
  237. package/demo/node_modules/@anthropic-ai/sdk/version.js +5 -0
  238. package/demo/node_modules/@anthropic-ai/sdk/version.js.map +1 -0
  239. package/demo/node_modules/@anthropic-ai/sdk/version.mjs +2 -0
  240. package/demo/node_modules/@anthropic-ai/sdk/version.mjs.map +1 -0
  241. package/demo/node_modules/@types/node/LICENSE +21 -0
  242. package/demo/node_modules/@types/node/README.md +15 -0
  243. package/demo/node_modules/@types/node/assert/strict.d.ts +8 -0
  244. package/demo/node_modules/@types/node/assert.d.ts +985 -0
  245. package/demo/node_modules/@types/node/async_hooks.d.ts +522 -0
  246. package/demo/node_modules/@types/node/buffer.d.ts +2353 -0
  247. package/demo/node_modules/@types/node/child_process.d.ts +1544 -0
  248. package/demo/node_modules/@types/node/cluster.d.ts +578 -0
  249. package/demo/node_modules/@types/node/console.d.ts +452 -0
  250. package/demo/node_modules/@types/node/constants.d.ts +19 -0
  251. package/demo/node_modules/@types/node/crypto.d.ts +4457 -0
  252. package/demo/node_modules/@types/node/dgram.d.ts +596 -0
  253. package/demo/node_modules/@types/node/diagnostics_channel.d.ts +546 -0
  254. package/demo/node_modules/@types/node/dns/promises.d.ts +473 -0
  255. package/demo/node_modules/@types/node/dns.d.ts +853 -0
  256. package/demo/node_modules/@types/node/dom-events.d.ts +124 -0
  257. package/demo/node_modules/@types/node/domain.d.ts +170 -0
  258. package/demo/node_modules/@types/node/events.d.ts +819 -0
  259. package/demo/node_modules/@types/node/fs/promises.d.ts +1205 -0
  260. package/demo/node_modules/@types/node/fs.d.ts +4237 -0
  261. package/demo/node_modules/@types/node/globals.d.ts +377 -0
  262. package/demo/node_modules/@types/node/globals.global.d.ts +1 -0
  263. package/demo/node_modules/@types/node/http.d.ts +1803 -0
  264. package/demo/node_modules/@types/node/http2.d.ts +2392 -0
  265. package/demo/node_modules/@types/node/https.d.ts +544 -0
  266. package/demo/node_modules/@types/node/index.d.ts +88 -0
  267. package/demo/node_modules/@types/node/inspector.d.ts +2738 -0
  268. package/demo/node_modules/@types/node/module.d.ts +298 -0
  269. package/demo/node_modules/@types/node/net.d.ts +918 -0
  270. package/demo/node_modules/@types/node/os.d.ts +473 -0
  271. package/demo/node_modules/@types/node/package.json +222 -0
  272. package/demo/node_modules/@types/node/path.d.ts +191 -0
  273. package/demo/node_modules/@types/node/perf_hooks.d.ts +626 -0
  274. package/demo/node_modules/@types/node/process.d.ts +1548 -0
  275. package/demo/node_modules/@types/node/punycode.d.ts +117 -0
  276. package/demo/node_modules/@types/node/querystring.d.ts +141 -0
  277. package/demo/node_modules/@types/node/readline/promises.d.ts +143 -0
  278. package/demo/node_modules/@types/node/readline.d.ts +666 -0
  279. package/demo/node_modules/@types/node/repl.d.ts +430 -0
  280. package/demo/node_modules/@types/node/stream/consumers.d.ts +12 -0
  281. package/demo/node_modules/@types/node/stream/promises.d.ts +83 -0
  282. package/demo/node_modules/@types/node/stream/web.d.ts +352 -0
  283. package/demo/node_modules/@types/node/stream.d.ts +1731 -0
  284. package/demo/node_modules/@types/node/string_decoder.d.ts +67 -0
  285. package/demo/node_modules/@types/node/test.d.ts +1113 -0
  286. package/demo/node_modules/@types/node/timers/promises.d.ts +93 -0
  287. package/demo/node_modules/@types/node/timers.d.ts +126 -0
  288. package/demo/node_modules/@types/node/tls.d.ts +1203 -0
  289. package/demo/node_modules/@types/node/trace_events.d.ts +171 -0
  290. package/demo/node_modules/@types/node/tty.d.ts +206 -0
  291. package/demo/node_modules/@types/node/url.d.ts +954 -0
  292. package/demo/node_modules/@types/node/util.d.ts +2075 -0
  293. package/demo/node_modules/@types/node/v8.d.ts +753 -0
  294. package/demo/node_modules/@types/node/vm.d.ts +667 -0
  295. package/demo/node_modules/@types/node/wasi.d.ts +160 -0
  296. package/demo/node_modules/@types/node/worker_threads.d.ts +692 -0
  297. package/demo/node_modules/@types/node/zlib.d.ts +517 -0
  298. package/demo/node_modules/@types/node-fetch/LICENSE +21 -0
  299. package/demo/node_modules/@types/node-fetch/README.md +15 -0
  300. package/demo/node_modules/@types/node-fetch/externals.d.ts +32 -0
  301. package/demo/node_modules/@types/node-fetch/index.d.ts +238 -0
  302. package/demo/node_modules/@types/node-fetch/package.json +83 -0
  303. package/demo/node_modules/abort-controller/LICENSE +21 -0
  304. package/demo/node_modules/abort-controller/README.md +98 -0
  305. package/demo/node_modules/abort-controller/browser.js +13 -0
  306. package/demo/node_modules/abort-controller/browser.mjs +11 -0
  307. package/demo/node_modules/abort-controller/package.json +97 -0
  308. package/demo/node_modules/abort-controller/polyfill.js +21 -0
  309. package/demo/node_modules/abort-controller/polyfill.mjs +19 -0
  310. package/demo/node_modules/agentkeepalive/History.md +268 -0
  311. package/demo/node_modules/agentkeepalive/LICENSE +23 -0
  312. package/demo/node_modules/agentkeepalive/README.md +256 -0
  313. package/demo/node_modules/agentkeepalive/browser.js +5 -0
  314. package/demo/node_modules/agentkeepalive/index.d.ts +65 -0
  315. package/demo/node_modules/agentkeepalive/index.js +5 -0
  316. package/demo/node_modules/agentkeepalive/lib/agent.js +402 -0
  317. package/demo/node_modules/agentkeepalive/lib/constants.js +14 -0
  318. package/demo/node_modules/agentkeepalive/lib/https_agent.js +51 -0
  319. package/demo/node_modules/agentkeepalive/package.json +56 -0
  320. package/demo/node_modules/asynckit/LICENSE +21 -0
  321. package/demo/node_modules/asynckit/README.md +233 -0
  322. package/demo/node_modules/asynckit/bench.js +76 -0
  323. package/demo/node_modules/asynckit/index.js +6 -0
  324. package/demo/node_modules/asynckit/lib/abort.js +29 -0
  325. package/demo/node_modules/asynckit/lib/async.js +34 -0
  326. package/demo/node_modules/asynckit/lib/defer.js +26 -0
  327. package/demo/node_modules/asynckit/lib/iterate.js +75 -0
  328. package/demo/node_modules/asynckit/lib/readable_asynckit.js +91 -0
  329. package/demo/node_modules/asynckit/lib/readable_parallel.js +25 -0
  330. package/demo/node_modules/asynckit/lib/readable_serial.js +25 -0
  331. package/demo/node_modules/asynckit/lib/readable_serial_ordered.js +29 -0
  332. package/demo/node_modules/asynckit/lib/state.js +37 -0
  333. package/demo/node_modules/asynckit/lib/streamify.js +141 -0
  334. package/demo/node_modules/asynckit/lib/terminator.js +29 -0
  335. package/demo/node_modules/asynckit/package.json +63 -0
  336. package/demo/node_modules/asynckit/parallel.js +43 -0
  337. package/demo/node_modules/asynckit/serial.js +17 -0
  338. package/demo/node_modules/asynckit/serialOrdered.js +75 -0
  339. package/demo/node_modules/asynckit/stream.js +21 -0
  340. package/demo/node_modules/combined-stream/License +19 -0
  341. package/demo/node_modules/combined-stream/Readme.md +138 -0
  342. package/demo/node_modules/combined-stream/lib/combined_stream.js +208 -0
  343. package/demo/node_modules/combined-stream/package.json +25 -0
  344. package/demo/node_modules/combined-stream/yarn.lock +17 -0
  345. package/demo/node_modules/delayed-stream/License +19 -0
  346. package/demo/node_modules/delayed-stream/Makefile +7 -0
  347. package/demo/node_modules/delayed-stream/Readme.md +141 -0
  348. package/demo/node_modules/delayed-stream/lib/delayed_stream.js +107 -0
  349. package/demo/node_modules/delayed-stream/package.json +27 -0
  350. package/demo/node_modules/dotenv/CHANGELOG.md +475 -0
  351. package/demo/node_modules/dotenv/LICENSE +23 -0
  352. package/demo/node_modules/dotenv/README-es.md +448 -0
  353. package/demo/node_modules/dotenv/README.md +728 -0
  354. package/demo/node_modules/dotenv/config.d.ts +1 -0
  355. package/demo/node_modules/dotenv/config.js +9 -0
  356. package/demo/node_modules/dotenv/lib/cli-options.js +11 -0
  357. package/demo/node_modules/dotenv/lib/env-options.js +24 -0
  358. package/demo/node_modules/dotenv/lib/main.d.ts +153 -0
  359. package/demo/node_modules/dotenv/lib/main.js +361 -0
  360. package/demo/node_modules/dotenv/package.json +65 -0
  361. package/demo/node_modules/event-target-shim/LICENSE +22 -0
  362. package/demo/node_modules/event-target-shim/README.md +293 -0
  363. package/demo/node_modules/event-target-shim/index.d.ts +399 -0
  364. package/demo/node_modules/event-target-shim/package.json +82 -0
  365. package/demo/node_modules/form-data/License +19 -0
  366. package/demo/node_modules/form-data/README.md.bak +358 -0
  367. package/demo/node_modules/form-data/Readme.md +358 -0
  368. package/demo/node_modules/form-data/index.d.ts +62 -0
  369. package/demo/node_modules/form-data/lib/browser.js +2 -0
  370. package/demo/node_modules/form-data/lib/form_data.js +501 -0
  371. package/demo/node_modules/form-data/lib/populate.js +10 -0
  372. package/demo/node_modules/form-data/package.json +68 -0
  373. package/demo/node_modules/form-data-encoder/@type/FileLike.d.ts +23 -0
  374. package/demo/node_modules/form-data-encoder/@type/FormDataEncoder.d.ts +160 -0
  375. package/demo/node_modules/form-data-encoder/@type/FormDataLike.d.ts +40 -0
  376. package/demo/node_modules/form-data-encoder/@type/index.d.ts +5 -0
  377. package/demo/node_modules/form-data-encoder/@type/util/createBoundary.d.ts +13 -0
  378. package/demo/node_modules/form-data-encoder/@type/util/escapeName.d.ts +11 -0
  379. package/demo/node_modules/form-data-encoder/@type/util/isFileLike.d.ts +28 -0
  380. package/demo/node_modules/form-data-encoder/@type/util/isFormData.d.ts +15 -0
  381. package/demo/node_modules/form-data-encoder/@type/util/isFunction.d.ts +7 -0
  382. package/demo/node_modules/form-data-encoder/@type/util/isPlainObject.d.ts +2 -0
  383. package/demo/node_modules/form-data-encoder/@type/util/normalizeValue.d.ts +11 -0
  384. package/demo/node_modules/form-data-encoder/lib/cjs/FileLike.js +2 -0
  385. package/demo/node_modules/form-data-encoder/lib/cjs/FormDataEncoder.js +126 -0
  386. package/demo/node_modules/form-data-encoder/lib/cjs/FormDataLike.js +2 -0
  387. package/demo/node_modules/form-data-encoder/lib/cjs/index.js +17 -0
  388. package/demo/node_modules/form-data-encoder/lib/cjs/package.json +3 -0
  389. package/demo/node_modules/form-data-encoder/lib/cjs/util/createBoundary.js +12 -0
  390. package/demo/node_modules/form-data-encoder/lib/cjs/util/escapeName.js +7 -0
  391. package/demo/node_modules/form-data-encoder/lib/cjs/util/isFileLike.js +16 -0
  392. package/demo/node_modules/form-data-encoder/lib/cjs/util/isFormData.js +16 -0
  393. package/demo/node_modules/form-data-encoder/lib/cjs/util/isFunction.js +4 -0
  394. package/demo/node_modules/form-data-encoder/lib/cjs/util/isPlainObject.js +15 -0
  395. package/demo/node_modules/form-data-encoder/lib/cjs/util/normalizeValue.js +11 -0
  396. package/demo/node_modules/form-data-encoder/lib/esm/FileLike.js +1 -0
  397. package/demo/node_modules/form-data-encoder/lib/esm/FormDataEncoder.js +119 -0
  398. package/demo/node_modules/form-data-encoder/lib/esm/FormDataLike.js +1 -0
  399. package/demo/node_modules/form-data-encoder/lib/esm/index.js +5 -0
  400. package/demo/node_modules/form-data-encoder/lib/esm/package.json +3 -0
  401. package/demo/node_modules/form-data-encoder/lib/esm/util/createBoundary.js +10 -0
  402. package/demo/node_modules/form-data-encoder/lib/esm/util/escapeName.js +5 -0
  403. package/demo/node_modules/form-data-encoder/lib/esm/util/isFileLike.js +9 -0
  404. package/demo/node_modules/form-data-encoder/lib/esm/util/isFormData.js +9 -0
  405. package/demo/node_modules/form-data-encoder/lib/esm/util/isFunction.js +2 -0
  406. package/demo/node_modules/form-data-encoder/lib/esm/util/isPlainObject.js +13 -0
  407. package/demo/node_modules/form-data-encoder/lib/esm/util/normalizeValue.js +9 -0
  408. package/demo/node_modules/form-data-encoder/license +21 -0
  409. package/demo/node_modules/form-data-encoder/package.json +63 -0
  410. package/demo/node_modules/form-data-encoder/readme.md +366 -0
  411. package/demo/node_modules/formdata-node/@type/Blob.d.ts +66 -0
  412. package/demo/node_modules/formdata-node/@type/BlobPart.d.ts +2 -0
  413. package/demo/node_modules/formdata-node/@type/File.d.ts +53 -0
  414. package/demo/node_modules/formdata-node/@type/FormData.d.ts +105 -0
  415. package/demo/node_modules/formdata-node/@type/blobHelpers.d.ts +9 -0
  416. package/demo/node_modules/formdata-node/@type/browser.d.ts +10 -0
  417. package/demo/node_modules/formdata-node/@type/deprecateConstructorEntries.d.ts +1 -0
  418. package/demo/node_modules/formdata-node/@type/fileFromPath.d.ts +55 -0
  419. package/demo/node_modules/formdata-node/@type/index.d.ts +3 -0
  420. package/demo/node_modules/formdata-node/@type/isBlob.d.ts +2 -0
  421. package/demo/node_modules/formdata-node/@type/isFile.d.ts +7 -0
  422. package/demo/node_modules/formdata-node/@type/isFunction.d.ts +1 -0
  423. package/demo/node_modules/formdata-node/@type/isPlainObject.d.ts +2 -0
  424. package/demo/node_modules/formdata-node/lib/cjs/Blob.js +122 -0
  425. package/demo/node_modules/formdata-node/lib/cjs/BlobPart.js +2 -0
  426. package/demo/node_modules/formdata-node/lib/cjs/File.js +52 -0
  427. package/demo/node_modules/formdata-node/lib/cjs/FormData.js +148 -0
  428. package/demo/node_modules/formdata-node/lib/cjs/blobHelpers.js +80 -0
  429. package/demo/node_modules/formdata-node/lib/cjs/browser.js +13 -0
  430. package/demo/node_modules/formdata-node/lib/cjs/deprecateConstructorEntries.js +6 -0
  431. package/demo/node_modules/formdata-node/lib/cjs/fileFromPath.js +97 -0
  432. package/demo/node_modules/formdata-node/lib/cjs/index.js +15 -0
  433. package/demo/node_modules/formdata-node/lib/cjs/isBlob.js +6 -0
  434. package/demo/node_modules/formdata-node/lib/cjs/isFile.js +6 -0
  435. package/demo/node_modules/formdata-node/lib/cjs/isFunction.js +5 -0
  436. package/demo/node_modules/formdata-node/lib/cjs/isPlainObject.js +15 -0
  437. package/demo/node_modules/formdata-node/lib/cjs/package.json +3 -0
  438. package/demo/node_modules/formdata-node/lib/esm/Blob.js +118 -0
  439. package/demo/node_modules/formdata-node/lib/esm/BlobPart.js +1 -0
  440. package/demo/node_modules/formdata-node/lib/esm/File.js +48 -0
  441. package/demo/node_modules/formdata-node/lib/esm/FormData.js +144 -0
  442. package/demo/node_modules/formdata-node/lib/esm/blobHelpers.js +75 -0
  443. package/demo/node_modules/formdata-node/lib/esm/browser.js +10 -0
  444. package/demo/node_modules/formdata-node/lib/esm/deprecateConstructorEntries.js +3 -0
  445. package/demo/node_modules/formdata-node/lib/esm/fileFromPath.js +79 -0
  446. package/demo/node_modules/formdata-node/lib/esm/index.js +3 -0
  447. package/demo/node_modules/formdata-node/lib/esm/isBlob.js +2 -0
  448. package/demo/node_modules/formdata-node/lib/esm/isFile.js +2 -0
  449. package/demo/node_modules/formdata-node/lib/esm/isFunction.js +1 -0
  450. package/demo/node_modules/formdata-node/lib/esm/isPlainObject.js +13 -0
  451. package/demo/node_modules/formdata-node/lib/esm/package.json +3 -0
  452. package/demo/node_modules/formdata-node/lib/node-domexception.d.ts +5 -0
  453. package/demo/node_modules/formdata-node/license +21 -0
  454. package/demo/node_modules/formdata-node/node_modules/web-streams-polyfill/LICENSE +22 -0
  455. package/demo/node_modules/formdata-node/node_modules/web-streams-polyfill/README.md +135 -0
  456. package/demo/node_modules/formdata-node/node_modules/web-streams-polyfill/es5/package.json +6 -0
  457. package/demo/node_modules/formdata-node/node_modules/web-streams-polyfill/package.json +101 -0
  458. package/demo/node_modules/formdata-node/node_modules/web-streams-polyfill/polyfill/es5/package.json +5 -0
  459. package/demo/node_modules/formdata-node/node_modules/web-streams-polyfill/polyfill/package.json +5 -0
  460. package/demo/node_modules/formdata-node/node_modules/web-streams-polyfill/types/polyfill.d.ts +62 -0
  461. package/demo/node_modules/formdata-node/node_modules/web-streams-polyfill/types/ponyfill.d.ts +775 -0
  462. package/demo/node_modules/formdata-node/node_modules/web-streams-polyfill/types/tsdoc-metadata.json +11 -0
  463. package/demo/node_modules/formdata-node/package.json +94 -0
  464. package/demo/node_modules/formdata-node/readme.md +444 -0
  465. package/demo/node_modules/humanize-ms/History.md +25 -0
  466. package/demo/node_modules/humanize-ms/LICENSE +17 -0
  467. package/demo/node_modules/humanize-ms/README.md +40 -0
  468. package/demo/node_modules/humanize-ms/index.js +24 -0
  469. package/demo/node_modules/humanize-ms/package.json +37 -0
  470. package/demo/node_modules/mime-db/HISTORY.md +507 -0
  471. package/demo/node_modules/mime-db/LICENSE +23 -0
  472. package/demo/node_modules/mime-db/README.md +100 -0
  473. package/demo/node_modules/mime-db/db.json +8519 -0
  474. package/demo/node_modules/mime-db/index.js +12 -0
  475. package/demo/node_modules/mime-db/package.json +60 -0
  476. package/demo/node_modules/mime-types/HISTORY.md +397 -0
  477. package/demo/node_modules/mime-types/LICENSE +23 -0
  478. package/demo/node_modules/mime-types/README.md +113 -0
  479. package/demo/node_modules/mime-types/index.js +188 -0
  480. package/demo/node_modules/mime-types/package.json +44 -0
  481. package/demo/node_modules/ms/index.js +162 -0
  482. package/demo/node_modules/ms/license.md +21 -0
  483. package/demo/node_modules/ms/package.json +38 -0
  484. package/demo/node_modules/ms/readme.md +59 -0
  485. package/demo/node_modules/node-domexception/.history/README_20210527203617.md +2 -0
  486. package/demo/node_modules/node-domexception/.history/README_20210527212714.md +41 -0
  487. package/demo/node_modules/node-domexception/.history/README_20210527213345.md +36 -0
  488. package/demo/node_modules/node-domexception/.history/README_20210527213411.md +36 -0
  489. package/demo/node_modules/node-domexception/.history/README_20210527213803.md +36 -0
  490. package/demo/node_modules/node-domexception/.history/README_20210527214323.md +38 -0
  491. package/demo/node_modules/node-domexception/.history/README_20210527214408.md +38 -0
  492. package/demo/node_modules/node-domexception/.history/index_20210527203842.js +0 -0
  493. package/demo/node_modules/node-domexception/.history/index_20210527203947.js +8 -0
  494. package/demo/node_modules/node-domexception/.history/index_20210527204259.js +9 -0
  495. package/demo/node_modules/node-domexception/.history/index_20210527204418.js +9 -0
  496. package/demo/node_modules/node-domexception/.history/index_20210527204756.js +11 -0
  497. package/demo/node_modules/node-domexception/.history/index_20210527204833.js +11 -0
  498. package/demo/node_modules/node-domexception/.history/index_20210527211208.js +15 -0
  499. package/demo/node_modules/node-domexception/.history/index_20210527211248.js +15 -0
  500. package/demo/node_modules/node-domexception/.history/index_20210527212722.js +23 -0
  501. package/demo/node_modules/node-domexception/.history/index_20210527212731.js +23 -0
  502. package/demo/node_modules/node-domexception/.history/index_20210527212746.js +15 -0
  503. package/demo/node_modules/node-domexception/.history/index_20210527212900.js +16 -0
  504. package/demo/node_modules/node-domexception/.history/index_20210527213022.js +16 -0
  505. package/demo/node_modules/node-domexception/.history/index_20210527213822.js +16 -0
  506. package/demo/node_modules/node-domexception/.history/index_20210527213843.js +17 -0
  507. package/demo/node_modules/node-domexception/.history/index_20210527213852.js +17 -0
  508. package/demo/node_modules/node-domexception/.history/index_20210527213910.js +16 -0
  509. package/demo/node_modules/node-domexception/.history/index_20210527214034.js +16 -0
  510. package/demo/node_modules/node-domexception/.history/index_20210527214643.js +41 -0
  511. package/demo/node_modules/node-domexception/.history/index_20210527214654.js +41 -0
  512. package/demo/node_modules/node-domexception/.history/index_20210527214700.js +16 -0
  513. package/demo/node_modules/node-domexception/.history/package_20210527203733.json +19 -0
  514. package/demo/node_modules/node-domexception/.history/package_20210527203825.json +16 -0
  515. package/demo/node_modules/node-domexception/.history/package_20210527204621.json +19 -0
  516. package/demo/node_modules/node-domexception/.history/package_20210527204913.json +25 -0
  517. package/demo/node_modules/node-domexception/.history/package_20210527204925.json +25 -0
  518. package/demo/node_modules/node-domexception/.history/package_20210527205145.json +29 -0
  519. package/demo/node_modules/node-domexception/.history/package_20210527205156.json +29 -0
  520. package/demo/node_modules/node-domexception/.history/test_20210527205603.js +0 -0
  521. package/demo/node_modules/node-domexception/.history/test_20210527205957.js +3 -0
  522. package/demo/node_modules/node-domexception/.history/test_20210527210021.js +3 -0
  523. package/demo/node_modules/node-domexception/LICENSE +21 -0
  524. package/demo/node_modules/node-domexception/README.md +46 -0
  525. package/demo/node_modules/node-domexception/index.js +16 -0
  526. package/demo/node_modules/node-domexception/package.json +29 -0
  527. package/demo/node_modules/node-fetch/LICENSE.md +22 -0
  528. package/demo/node_modules/node-fetch/README.md +634 -0
  529. package/demo/node_modules/node-fetch/browser.js +25 -0
  530. package/demo/node_modules/node-fetch/lib/index.es.js +1777 -0
  531. package/demo/node_modules/node-fetch/lib/index.js +1787 -0
  532. package/demo/node_modules/node-fetch/lib/index.mjs +1775 -0
  533. package/demo/node_modules/node-fetch/package.json +89 -0
  534. package/demo/node_modules/openai/CHANGELOG.md +1176 -0
  535. package/demo/node_modules/openai/LICENSE +201 -0
  536. package/demo/node_modules/openai/README.md +616 -0
  537. package/demo/node_modules/openai/_shims/MultipartBody.d.ts +9 -0
  538. package/demo/node_modules/openai/_shims/MultipartBody.d.ts.map +1 -0
  539. package/demo/node_modules/openai/_shims/MultipartBody.js +16 -0
  540. package/demo/node_modules/openai/_shims/MultipartBody.js.map +1 -0
  541. package/demo/node_modules/openai/_shims/MultipartBody.mjs +12 -0
  542. package/demo/node_modules/openai/_shims/MultipartBody.mjs.map +1 -0
  543. package/demo/node_modules/openai/_shims/README.md +46 -0
  544. package/demo/node_modules/openai/_shims/auto/runtime-bun.d.ts +5 -0
  545. package/demo/node_modules/openai/_shims/auto/runtime-bun.d.ts.map +1 -0
  546. package/demo/node_modules/openai/_shims/auto/runtime-bun.js +21 -0
  547. package/demo/node_modules/openai/_shims/auto/runtime-bun.js.map +1 -0
  548. package/demo/node_modules/openai/_shims/auto/runtime-bun.mjs +2 -0
  549. package/demo/node_modules/openai/_shims/auto/runtime-bun.mjs.map +1 -0
  550. package/demo/node_modules/openai/_shims/auto/runtime-node.d.ts +5 -0
  551. package/demo/node_modules/openai/_shims/auto/runtime-node.d.ts.map +1 -0
  552. package/demo/node_modules/openai/_shims/auto/runtime-node.js +21 -0
  553. package/demo/node_modules/openai/_shims/auto/runtime-node.js.map +1 -0
  554. package/demo/node_modules/openai/_shims/auto/runtime-node.mjs +2 -0
  555. package/demo/node_modules/openai/_shims/auto/runtime-node.mjs.map +1 -0
  556. package/demo/node_modules/openai/_shims/auto/runtime.d.ts +5 -0
  557. package/demo/node_modules/openai/_shims/auto/runtime.d.ts.map +1 -0
  558. package/demo/node_modules/openai/_shims/auto/runtime.js +21 -0
  559. package/demo/node_modules/openai/_shims/auto/runtime.js.map +1 -0
  560. package/demo/node_modules/openai/_shims/auto/runtime.mjs +2 -0
  561. package/demo/node_modules/openai/_shims/auto/runtime.mjs.map +1 -0
  562. package/demo/node_modules/openai/_shims/auto/types-node.d.ts +5 -0
  563. package/demo/node_modules/openai/_shims/auto/types-node.d.ts.map +1 -0
  564. package/demo/node_modules/openai/_shims/auto/types-node.js +21 -0
  565. package/demo/node_modules/openai/_shims/auto/types-node.js.map +1 -0
  566. package/demo/node_modules/openai/_shims/auto/types-node.mjs +2 -0
  567. package/demo/node_modules/openai/_shims/auto/types-node.mjs.map +1 -0
  568. package/demo/node_modules/openai/_shims/auto/types.d.ts +101 -0
  569. package/demo/node_modules/openai/_shims/auto/types.js +3 -0
  570. package/demo/node_modules/openai/_shims/auto/types.mjs +3 -0
  571. package/demo/node_modules/openai/_shims/bun-runtime.d.ts +6 -0
  572. package/demo/node_modules/openai/_shims/bun-runtime.d.ts.map +1 -0
  573. package/demo/node_modules/openai/_shims/bun-runtime.js +14 -0
  574. package/demo/node_modules/openai/_shims/bun-runtime.js.map +1 -0
  575. package/demo/node_modules/openai/_shims/bun-runtime.mjs +10 -0
  576. package/demo/node_modules/openai/_shims/bun-runtime.mjs.map +1 -0
  577. package/demo/node_modules/openai/_shims/index.d.ts +81 -0
  578. package/demo/node_modules/openai/_shims/index.js +13 -0
  579. package/demo/node_modules/openai/_shims/index.mjs +7 -0
  580. package/demo/node_modules/openai/_shims/manual-types.d.ts +12 -0
  581. package/demo/node_modules/openai/_shims/manual-types.js +3 -0
  582. package/demo/node_modules/openai/_shims/manual-types.mjs +3 -0
  583. package/demo/node_modules/openai/_shims/node-runtime.d.ts +3 -0
  584. package/demo/node_modules/openai/_shims/node-runtime.d.ts.map +1 -0
  585. package/demo/node_modules/openai/_shims/node-runtime.js +90 -0
  586. package/demo/node_modules/openai/_shims/node-runtime.js.map +1 -0
  587. package/demo/node_modules/openai/_shims/node-runtime.mjs +56 -0
  588. package/demo/node_modules/openai/_shims/node-runtime.mjs.map +1 -0
  589. package/demo/node_modules/openai/_shims/node-types.d.ts +42 -0
  590. package/demo/node_modules/openai/_shims/node-types.js +3 -0
  591. package/demo/node_modules/openai/_shims/node-types.mjs +3 -0
  592. package/demo/node_modules/openai/_shims/registry.d.ts +37 -0
  593. package/demo/node_modules/openai/_shims/registry.d.ts.map +1 -0
  594. package/demo/node_modules/openai/_shims/registry.js +41 -0
  595. package/demo/node_modules/openai/_shims/registry.js.map +1 -0
  596. package/demo/node_modules/openai/_shims/registry.mjs +37 -0
  597. package/demo/node_modules/openai/_shims/registry.mjs.map +1 -0
  598. package/demo/node_modules/openai/_shims/web-runtime.d.ts +5 -0
  599. package/demo/node_modules/openai/_shims/web-runtime.d.ts.map +1 -0
  600. package/demo/node_modules/openai/_shims/web-runtime.js +78 -0
  601. package/demo/node_modules/openai/_shims/web-runtime.js.map +1 -0
  602. package/demo/node_modules/openai/_shims/web-runtime.mjs +71 -0
  603. package/demo/node_modules/openai/_shims/web-runtime.mjs.map +1 -0
  604. package/demo/node_modules/openai/_shims/web-types.d.ts +83 -0
  605. package/demo/node_modules/openai/_shims/web-types.js +3 -0
  606. package/demo/node_modules/openai/_shims/web-types.mjs +3 -0
  607. package/demo/node_modules/openai/bin/cli +49 -0
  608. package/demo/node_modules/openai/core.d.ts +239 -0
  609. package/demo/node_modules/openai/core.d.ts.map +1 -0
  610. package/demo/node_modules/openai/core.js +879 -0
  611. package/demo/node_modules/openai/core.js.map +1 -0
  612. package/demo/node_modules/openai/core.mjs +848 -0
  613. package/demo/node_modules/openai/core.mjs.map +1 -0
  614. package/demo/node_modules/openai/error.d.ts +57 -0
  615. package/demo/node_modules/openai/error.d.ts.map +1 -0
  616. package/demo/node_modules/openai/error.js +148 -0
  617. package/demo/node_modules/openai/error.js.map +1 -0
  618. package/demo/node_modules/openai/error.mjs +132 -0
  619. package/demo/node_modules/openai/error.mjs.map +1 -0
  620. package/demo/node_modules/openai/index.d.mts +267 -0
  621. package/demo/node_modules/openai/index.d.ts +267 -0
  622. package/demo/node_modules/openai/index.d.ts.map +1 -0
  623. package/demo/node_modules/openai/index.js +262 -0
  624. package/demo/node_modules/openai/index.js.map +1 -0
  625. package/demo/node_modules/openai/index.mjs +232 -0
  626. package/demo/node_modules/openai/index.mjs.map +1 -0
  627. package/demo/node_modules/openai/lib/AbstractAssistantStreamRunner.d.ts +74 -0
  628. package/demo/node_modules/openai/lib/AbstractAssistantStreamRunner.d.ts.map +1 -0
  629. package/demo/node_modules/openai/lib/AbstractAssistantStreamRunner.js +246 -0
  630. package/demo/node_modules/openai/lib/AbstractAssistantStreamRunner.js.map +1 -0
  631. package/demo/node_modules/openai/lib/AbstractAssistantStreamRunner.mjs +242 -0
  632. package/demo/node_modules/openai/lib/AbstractAssistantStreamRunner.mjs.map +1 -0
  633. package/demo/node_modules/openai/lib/AbstractChatCompletionRunner.d.ts +114 -0
  634. package/demo/node_modules/openai/lib/AbstractChatCompletionRunner.d.ts.map +1 -0
  635. package/demo/node_modules/openai/lib/AbstractChatCompletionRunner.js +519 -0
  636. package/demo/node_modules/openai/lib/AbstractChatCompletionRunner.js.map +1 -0
  637. package/demo/node_modules/openai/lib/AbstractChatCompletionRunner.mjs +515 -0
  638. package/demo/node_modules/openai/lib/AbstractChatCompletionRunner.mjs.map +1 -0
  639. package/demo/node_modules/openai/lib/AssistantStream.d.ts +58 -0
  640. package/demo/node_modules/openai/lib/AssistantStream.d.ts.map +1 -0
  641. package/demo/node_modules/openai/lib/AssistantStream.js +548 -0
  642. package/demo/node_modules/openai/lib/AssistantStream.js.map +1 -0
  643. package/demo/node_modules/openai/lib/AssistantStream.mjs +521 -0
  644. package/demo/node_modules/openai/lib/AssistantStream.mjs.map +1 -0
  645. package/demo/node_modules/openai/lib/ChatCompletionRunFunctions.test.d.ts +2 -0
  646. package/demo/node_modules/openai/lib/ChatCompletionRunFunctions.test.d.ts.map +1 -0
  647. package/demo/node_modules/openai/lib/ChatCompletionRunFunctions.test.js +2177 -0
  648. package/demo/node_modules/openai/lib/ChatCompletionRunFunctions.test.js.map +1 -0
  649. package/demo/node_modules/openai/lib/ChatCompletionRunFunctions.test.mjs +2172 -0
  650. package/demo/node_modules/openai/lib/ChatCompletionRunFunctions.test.mjs.map +1 -0
  651. package/demo/node_modules/openai/lib/ChatCompletionRunner.d.ts +19 -0
  652. package/demo/node_modules/openai/lib/ChatCompletionRunner.d.ts.map +1 -0
  653. package/demo/node_modules/openai/lib/ChatCompletionRunner.js +34 -0
  654. package/demo/node_modules/openai/lib/ChatCompletionRunner.js.map +1 -0
  655. package/demo/node_modules/openai/lib/ChatCompletionRunner.mjs +30 -0
  656. package/demo/node_modules/openai/lib/ChatCompletionRunner.mjs.map +1 -0
  657. package/demo/node_modules/openai/lib/ChatCompletionStream.d.ts +149 -0
  658. package/demo/node_modules/openai/lib/ChatCompletionStream.d.ts.map +1 -0
  659. package/demo/node_modules/openai/lib/ChatCompletionStream.js +312 -0
  660. package/demo/node_modules/openai/lib/ChatCompletionStream.js.map +1 -0
  661. package/demo/node_modules/openai/lib/ChatCompletionStream.mjs +308 -0
  662. package/demo/node_modules/openai/lib/ChatCompletionStream.mjs.map +1 -0
  663. package/demo/node_modules/openai/lib/ChatCompletionStreamingRunner.d.ts +22 -0
  664. package/demo/node_modules/openai/lib/ChatCompletionStreamingRunner.d.ts.map +1 -0
  665. package/demo/node_modules/openai/lib/ChatCompletionStreamingRunner.js +32 -0
  666. package/demo/node_modules/openai/lib/ChatCompletionStreamingRunner.js.map +1 -0
  667. package/demo/node_modules/openai/lib/ChatCompletionStreamingRunner.mjs +28 -0
  668. package/demo/node_modules/openai/lib/ChatCompletionStreamingRunner.mjs.map +1 -0
  669. package/demo/node_modules/openai/lib/RunnableFunction.d.ts +95 -0
  670. package/demo/node_modules/openai/lib/RunnableFunction.d.ts.map +1 -0
  671. package/demo/node_modules/openai/lib/RunnableFunction.js +35 -0
  672. package/demo/node_modules/openai/lib/RunnableFunction.js.map +1 -0
  673. package/demo/node_modules/openai/lib/RunnableFunction.mjs +29 -0
  674. package/demo/node_modules/openai/lib/RunnableFunction.mjs.map +1 -0
  675. package/demo/node_modules/openai/lib/Util.d.ts +5 -0
  676. package/demo/node_modules/openai/lib/Util.d.ts.map +1 -0
  677. package/demo/node_modules/openai/lib/Util.js +26 -0
  678. package/demo/node_modules/openai/lib/Util.js.map +1 -0
  679. package/demo/node_modules/openai/lib/Util.mjs +22 -0
  680. package/demo/node_modules/openai/lib/Util.mjs.map +1 -0
  681. package/demo/node_modules/openai/lib/chatCompletionUtils.d.ts +6 -0
  682. package/demo/node_modules/openai/lib/chatCompletionUtils.d.ts.map +1 -0
  683. package/demo/node_modules/openai/lib/chatCompletionUtils.js +20 -0
  684. package/demo/node_modules/openai/lib/chatCompletionUtils.js.map +1 -0
  685. package/demo/node_modules/openai/lib/chatCompletionUtils.mjs +13 -0
  686. package/demo/node_modules/openai/lib/chatCompletionUtils.mjs.map +1 -0
  687. package/demo/node_modules/openai/lib/jsonschema.d.ts +106 -0
  688. package/demo/node_modules/openai/lib/jsonschema.d.ts.map +1 -0
  689. package/demo/node_modules/openai/lib/jsonschema.js +11 -0
  690. package/demo/node_modules/openai/lib/jsonschema.js.map +1 -0
  691. package/demo/node_modules/openai/lib/jsonschema.mjs +10 -0
  692. package/demo/node_modules/openai/lib/jsonschema.mjs.map +1 -0
  693. package/demo/node_modules/openai/package.json +105 -0
  694. package/demo/node_modules/openai/pagination.d.ts +37 -0
  695. package/demo/node_modules/openai/pagination.d.ts.map +1 -0
  696. package/demo/node_modules/openai/pagination.js +64 -0
  697. package/demo/node_modules/openai/pagination.js.map +1 -0
  698. package/demo/node_modules/openai/pagination.mjs +59 -0
  699. package/demo/node_modules/openai/pagination.mjs.map +1 -0
  700. package/demo/node_modules/openai/resource.d.ts +6 -0
  701. package/demo/node_modules/openai/resource.d.ts.map +1 -0
  702. package/demo/node_modules/openai/resource.js +11 -0
  703. package/demo/node_modules/openai/resource.js.map +1 -0
  704. package/demo/node_modules/openai/resource.mjs +7 -0
  705. package/demo/node_modules/openai/resource.mjs.map +1 -0
  706. package/demo/node_modules/openai/resources/audio/audio.d.ts +20 -0
  707. package/demo/node_modules/openai/resources/audio/audio.d.ts.map +1 -0
  708. package/demo/node_modules/openai/resources/audio/audio.js +46 -0
  709. package/demo/node_modules/openai/resources/audio/audio.js.map +1 -0
  710. package/demo/node_modules/openai/resources/audio/audio.mjs +19 -0
  711. package/demo/node_modules/openai/resources/audio/audio.mjs.map +1 -0
  712. package/demo/node_modules/openai/resources/audio/index.d.ts +5 -0
  713. package/demo/node_modules/openai/resources/audio/index.d.ts.map +1 -0
  714. package/demo/node_modules/openai/resources/audio/index.js +13 -0
  715. package/demo/node_modules/openai/resources/audio/index.js.map +1 -0
  716. package/demo/node_modules/openai/resources/audio/index.mjs +6 -0
  717. package/demo/node_modules/openai/resources/audio/index.mjs.map +1 -0
  718. package/demo/node_modules/openai/resources/audio/speech.d.ts +42 -0
  719. package/demo/node_modules/openai/resources/audio/speech.d.ts.map +1 -0
  720. package/demo/node_modules/openai/resources/audio/speech.js +17 -0
  721. package/demo/node_modules/openai/resources/audio/speech.js.map +1 -0
  722. package/demo/node_modules/openai/resources/audio/speech.mjs +13 -0
  723. package/demo/node_modules/openai/resources/audio/speech.mjs.map +1 -0
  724. package/demo/node_modules/openai/resources/audio/transcriptions.d.ts +71 -0
  725. package/demo/node_modules/openai/resources/audio/transcriptions.d.ts.map +1 -0
  726. package/demo/node_modules/openai/resources/audio/transcriptions.js +18 -0
  727. package/demo/node_modules/openai/resources/audio/transcriptions.js.map +1 -0
  728. package/demo/node_modules/openai/resources/audio/transcriptions.mjs +14 -0
  729. package/demo/node_modules/openai/resources/audio/transcriptions.mjs.map +1 -0
  730. package/demo/node_modules/openai/resources/audio/translations.d.ts +50 -0
  731. package/demo/node_modules/openai/resources/audio/translations.d.ts.map +1 -0
  732. package/demo/node_modules/openai/resources/audio/translations.js +18 -0
  733. package/demo/node_modules/openai/resources/audio/translations.js.map +1 -0
  734. package/demo/node_modules/openai/resources/audio/translations.mjs +14 -0
  735. package/demo/node_modules/openai/resources/audio/translations.mjs.map +1 -0
  736. package/demo/node_modules/openai/resources/batches.d.ts +189 -0
  737. package/demo/node_modules/openai/resources/batches.d.ts.map +1 -0
  738. package/demo/node_modules/openai/resources/batches.js +65 -0
  739. package/demo/node_modules/openai/resources/batches.js.map +1 -0
  740. package/demo/node_modules/openai/resources/batches.mjs +37 -0
  741. package/demo/node_modules/openai/resources/batches.mjs.map +1 -0
  742. package/demo/node_modules/openai/resources/beta/assistants.d.ts +1048 -0
  743. package/demo/node_modules/openai/resources/beta/assistants.d.ts.map +1 -0
  744. package/demo/node_modules/openai/resources/beta/assistants.js +89 -0
  745. package/demo/node_modules/openai/resources/beta/assistants.js.map +1 -0
  746. package/demo/node_modules/openai/resources/beta/assistants.mjs +61 -0
  747. package/demo/node_modules/openai/resources/beta/assistants.mjs.map +1 -0
  748. package/demo/node_modules/openai/resources/beta/beta.d.ts +53 -0
  749. package/demo/node_modules/openai/resources/beta/beta.d.ts.map +1 -0
  750. package/demo/node_modules/openai/resources/beta/beta.js +51 -0
  751. package/demo/node_modules/openai/resources/beta/beta.js.map +1 -0
  752. package/demo/node_modules/openai/resources/beta/beta.mjs +24 -0
  753. package/demo/node_modules/openai/resources/beta/beta.mjs.map +1 -0
  754. package/demo/node_modules/openai/resources/beta/chat/chat.d.ts +9 -0
  755. package/demo/node_modules/openai/resources/beta/chat/chat.d.ts.map +1 -0
  756. package/demo/node_modules/openai/resources/beta/chat/chat.js +40 -0
  757. package/demo/node_modules/openai/resources/beta/chat/chat.js.map +1 -0
  758. package/demo/node_modules/openai/resources/beta/chat/chat.mjs +13 -0
  759. package/demo/node_modules/openai/resources/beta/chat/chat.mjs.map +1 -0
  760. package/demo/node_modules/openai/resources/beta/chat/completions.d.ts +37 -0
  761. package/demo/node_modules/openai/resources/beta/chat/completions.d.ts.map +1 -0
  762. package/demo/node_modules/openai/resources/beta/chat/completions.js +39 -0
  763. package/demo/node_modules/openai/resources/beta/chat/completions.js.map +1 -0
  764. package/demo/node_modules/openai/resources/beta/chat/completions.mjs +30 -0
  765. package/demo/node_modules/openai/resources/beta/chat/completions.mjs.map +1 -0
  766. package/demo/node_modules/openai/resources/beta/chat/index.d.ts +3 -0
  767. package/demo/node_modules/openai/resources/beta/chat/index.d.ts.map +1 -0
  768. package/demo/node_modules/openai/resources/beta/chat/index.js +9 -0
  769. package/demo/node_modules/openai/resources/beta/chat/index.js.map +1 -0
  770. package/demo/node_modules/openai/resources/beta/chat/index.mjs +4 -0
  771. package/demo/node_modules/openai/resources/beta/chat/index.mjs.map +1 -0
  772. package/demo/node_modules/openai/resources/beta/index.d.ts +6 -0
  773. package/demo/node_modules/openai/resources/beta/index.d.ts.map +1 -0
  774. package/demo/node_modules/openai/resources/beta/index.js +17 -0
  775. package/demo/node_modules/openai/resources/beta/index.js.map +1 -0
  776. package/demo/node_modules/openai/resources/beta/index.mjs +7 -0
  777. package/demo/node_modules/openai/resources/beta/index.mjs.map +1 -0
  778. package/demo/node_modules/openai/resources/beta/threads/index.d.ts +4 -0
  779. package/demo/node_modules/openai/resources/beta/threads/index.d.ts.map +1 -0
  780. package/demo/node_modules/openai/resources/beta/threads/index.js +13 -0
  781. package/demo/node_modules/openai/resources/beta/threads/index.js.map +1 -0
  782. package/demo/node_modules/openai/resources/beta/threads/index.mjs +5 -0
  783. package/demo/node_modules/openai/resources/beta/threads/index.mjs.map +1 -0
  784. package/demo/node_modules/openai/resources/beta/threads/messages.d.ts +552 -0
  785. package/demo/node_modules/openai/resources/beta/threads/messages.d.ts.map +1 -0
  786. package/demo/node_modules/openai/resources/beta/threads/messages.js +89 -0
  787. package/demo/node_modules/openai/resources/beta/threads/messages.js.map +1 -0
  788. package/demo/node_modules/openai/resources/beta/threads/messages.mjs +61 -0
  789. package/demo/node_modules/openai/resources/beta/threads/messages.mjs.map +1 -0
  790. package/demo/node_modules/openai/resources/beta/threads/runs/index.d.ts +3 -0
  791. package/demo/node_modules/openai/resources/beta/threads/runs/index.d.ts.map +1 -0
  792. package/demo/node_modules/openai/resources/beta/threads/runs/index.js +11 -0
  793. package/demo/node_modules/openai/resources/beta/threads/runs/index.js.map +1 -0
  794. package/demo/node_modules/openai/resources/beta/threads/runs/index.mjs +4 -0
  795. package/demo/node_modules/openai/resources/beta/threads/runs/index.mjs.map +1 -0
  796. package/demo/node_modules/openai/resources/beta/threads/runs/runs.d.ts +1194 -0
  797. package/demo/node_modules/openai/resources/beta/threads/runs/runs.d.ts.map +1 -0
  798. package/demo/node_modules/openai/resources/beta/threads/runs/runs.js +190 -0
  799. package/demo/node_modules/openai/resources/beta/threads/runs/runs.js.map +1 -0
  800. package/demo/node_modules/openai/resources/beta/threads/runs/runs.mjs +162 -0
  801. package/demo/node_modules/openai/resources/beta/threads/runs/runs.mjs.map +1 -0
  802. package/demo/node_modules/openai/resources/beta/threads/runs/steps.d.ts +520 -0
  803. package/demo/node_modules/openai/resources/beta/threads/runs/steps.d.ts.map +1 -0
  804. package/demo/node_modules/openai/resources/beta/threads/runs/steps.js +60 -0
  805. package/demo/node_modules/openai/resources/beta/threads/runs/steps.js.map +1 -0
  806. package/demo/node_modules/openai/resources/beta/threads/runs/steps.mjs +32 -0
  807. package/demo/node_modules/openai/resources/beta/threads/runs/steps.mjs.map +1 -0
  808. package/demo/node_modules/openai/resources/beta/threads/threads.d.ts +1240 -0
  809. package/demo/node_modules/openai/resources/beta/threads/threads.d.ts.map +1 -0
  810. package/demo/node_modules/openai/resources/beta/threads/threads.js +108 -0
  811. package/demo/node_modules/openai/resources/beta/threads/threads.js.map +1 -0
  812. package/demo/node_modules/openai/resources/beta/threads/threads.mjs +81 -0
  813. package/demo/node_modules/openai/resources/beta/threads/threads.mjs.map +1 -0
  814. package/demo/node_modules/openai/resources/beta/vector-stores/file-batches.d.ts +142 -0
  815. package/demo/node_modules/openai/resources/beta/vector-stores/file-batches.d.ts.map +1 -0
  816. package/demo/node_modules/openai/resources/beta/vector-stores/file-batches.js +129 -0
  817. package/demo/node_modules/openai/resources/beta/vector-stores/file-batches.js.map +1 -0
  818. package/demo/node_modules/openai/resources/beta/vector-stores/file-batches.mjs +125 -0
  819. package/demo/node_modules/openai/resources/beta/vector-stores/file-batches.mjs.map +1 -0
  820. package/demo/node_modules/openai/resources/beta/vector-stores/files.d.ts +154 -0
  821. package/demo/node_modules/openai/resources/beta/vector-stores/files.d.ts.map +1 -0
  822. package/demo/node_modules/openai/resources/beta/vector-stores/files.js +149 -0
  823. package/demo/node_modules/openai/resources/beta/vector-stores/files.js.map +1 -0
  824. package/demo/node_modules/openai/resources/beta/vector-stores/files.mjs +121 -0
  825. package/demo/node_modules/openai/resources/beta/vector-stores/files.mjs.map +1 -0
  826. package/demo/node_modules/openai/resources/beta/vector-stores/index.d.ts +4 -0
  827. package/demo/node_modules/openai/resources/beta/vector-stores/index.d.ts.map +1 -0
  828. package/demo/node_modules/openai/resources/beta/vector-stores/index.js +13 -0
  829. package/demo/node_modules/openai/resources/beta/vector-stores/index.js.map +1 -0
  830. package/demo/node_modules/openai/resources/beta/vector-stores/index.mjs +5 -0
  831. package/demo/node_modules/openai/resources/beta/vector-stores/index.mjs.map +1 -0
  832. package/demo/node_modules/openai/resources/beta/vector-stores/vector-stores.d.ts +233 -0
  833. package/demo/node_modules/openai/resources/beta/vector-stores/vector-stores.d.ts.map +1 -0
  834. package/demo/node_modules/openai/resources/beta/vector-stores/vector-stores.js +99 -0
  835. package/demo/node_modules/openai/resources/beta/vector-stores/vector-stores.js.map +1 -0
  836. package/demo/node_modules/openai/resources/beta/vector-stores/vector-stores.mjs +71 -0
  837. package/demo/node_modules/openai/resources/beta/vector-stores/vector-stores.mjs.map +1 -0
  838. package/demo/node_modules/openai/resources/chat/chat.d.ts +42 -0
  839. package/demo/node_modules/openai/resources/chat/chat.d.ts.map +1 -0
  840. package/demo/node_modules/openai/resources/chat/chat.js +40 -0
  841. package/demo/node_modules/openai/resources/chat/chat.js.map +1 -0
  842. package/demo/node_modules/openai/resources/chat/chat.mjs +13 -0
  843. package/demo/node_modules/openai/resources/chat/chat.mjs.map +1 -0
  844. package/demo/node_modules/openai/resources/chat/completions.d.ts +845 -0
  845. package/demo/node_modules/openai/resources/chat/completions.d.ts.map +1 -0
  846. package/demo/node_modules/openai/resources/chat/completions.js +14 -0
  847. package/demo/node_modules/openai/resources/chat/completions.js.map +1 -0
  848. package/demo/node_modules/openai/resources/chat/completions.mjs +10 -0
  849. package/demo/node_modules/openai/resources/chat/completions.mjs.map +1 -0
  850. package/demo/node_modules/openai/resources/chat/index.d.ts +3 -0
  851. package/demo/node_modules/openai/resources/chat/index.d.ts.map +1 -0
  852. package/demo/node_modules/openai/resources/chat/index.js +9 -0
  853. package/demo/node_modules/openai/resources/chat/index.js.map +1 -0
  854. package/demo/node_modules/openai/resources/chat/index.mjs +4 -0
  855. package/demo/node_modules/openai/resources/chat/index.mjs.map +1 -0
  856. package/demo/node_modules/openai/resources/completions.d.ts +272 -0
  857. package/demo/node_modules/openai/resources/completions.d.ts.map +1 -0
  858. package/demo/node_modules/openai/resources/completions.js +14 -0
  859. package/demo/node_modules/openai/resources/completions.js.map +1 -0
  860. package/demo/node_modules/openai/resources/completions.mjs +10 -0
  861. package/demo/node_modules/openai/resources/completions.mjs.map +1 -0
  862. package/demo/node_modules/openai/resources/embeddings.d.ts +103 -0
  863. package/demo/node_modules/openai/resources/embeddings.d.ts.map +1 -0
  864. package/demo/node_modules/openai/resources/embeddings.js +17 -0
  865. package/demo/node_modules/openai/resources/embeddings.js.map +1 -0
  866. package/demo/node_modules/openai/resources/embeddings.mjs +13 -0
  867. package/demo/node_modules/openai/resources/embeddings.mjs.map +1 -0
  868. package/demo/node_modules/openai/resources/files.d.ts +140 -0
  869. package/demo/node_modules/openai/resources/files.d.ts.map +1 -0
  870. package/demo/node_modules/openai/resources/files.js +120 -0
  871. package/demo/node_modules/openai/resources/files.js.map +1 -0
  872. package/demo/node_modules/openai/resources/files.mjs +92 -0
  873. package/demo/node_modules/openai/resources/files.mjs.map +1 -0
  874. package/demo/node_modules/openai/resources/fine-tuning/fine-tuning.d.ts +19 -0
  875. package/demo/node_modules/openai/resources/fine-tuning/fine-tuning.d.ts.map +1 -0
  876. package/demo/node_modules/openai/resources/fine-tuning/fine-tuning.js +42 -0
  877. package/demo/node_modules/openai/resources/fine-tuning/fine-tuning.js.map +1 -0
  878. package/demo/node_modules/openai/resources/fine-tuning/fine-tuning.mjs +15 -0
  879. package/demo/node_modules/openai/resources/fine-tuning/fine-tuning.mjs.map +1 -0
  880. package/demo/node_modules/openai/resources/fine-tuning/index.d.ts +3 -0
  881. package/demo/node_modules/openai/resources/fine-tuning/index.d.ts.map +1 -0
  882. package/demo/node_modules/openai/resources/fine-tuning/index.js +11 -0
  883. package/demo/node_modules/openai/resources/fine-tuning/index.js.map +1 -0
  884. package/demo/node_modules/openai/resources/fine-tuning/index.mjs +4 -0
  885. package/demo/node_modules/openai/resources/fine-tuning/index.mjs.map +1 -0
  886. package/demo/node_modules/openai/resources/fine-tuning/jobs/checkpoints.d.ts +69 -0
  887. package/demo/node_modules/openai/resources/fine-tuning/jobs/checkpoints.d.ts.map +1 -0
  888. package/demo/node_modules/openai/resources/fine-tuning/jobs/checkpoints.js +47 -0
  889. package/demo/node_modules/openai/resources/fine-tuning/jobs/checkpoints.js.map +1 -0
  890. package/demo/node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs +19 -0
  891. package/demo/node_modules/openai/resources/fine-tuning/jobs/checkpoints.mjs.map +1 -0
  892. package/demo/node_modules/openai/resources/fine-tuning/jobs/index.d.ts +3 -0
  893. package/demo/node_modules/openai/resources/fine-tuning/jobs/index.d.ts.map +1 -0
  894. package/demo/node_modules/openai/resources/fine-tuning/jobs/index.js +12 -0
  895. package/demo/node_modules/openai/resources/fine-tuning/jobs/index.js.map +1 -0
  896. package/demo/node_modules/openai/resources/fine-tuning/jobs/index.mjs +4 -0
  897. package/demo/node_modules/openai/resources/fine-tuning/jobs/index.mjs.map +1 -0
  898. package/demo/node_modules/openai/resources/fine-tuning/jobs/jobs.d.ts +362 -0
  899. package/demo/node_modules/openai/resources/fine-tuning/jobs/jobs.d.ts.map +1 -0
  900. package/demo/node_modules/openai/resources/fine-tuning/jobs/jobs.js +93 -0
  901. package/demo/node_modules/openai/resources/fine-tuning/jobs/jobs.js.map +1 -0
  902. package/demo/node_modules/openai/resources/fine-tuning/jobs/jobs.mjs +64 -0
  903. package/demo/node_modules/openai/resources/fine-tuning/jobs/jobs.mjs.map +1 -0
  904. package/demo/node_modules/openai/resources/images.d.ts +174 -0
  905. package/demo/node_modules/openai/resources/images.d.ts.map +1 -0
  906. package/demo/node_modules/openai/resources/images.js +30 -0
  907. package/demo/node_modules/openai/resources/images.js.map +1 -0
  908. package/demo/node_modules/openai/resources/images.mjs +26 -0
  909. package/demo/node_modules/openai/resources/images.mjs.map +1 -0
  910. package/demo/node_modules/openai/resources/index.d.ts +13 -0
  911. package/demo/node_modules/openai/resources/index.d.ts.map +1 -0
  912. package/demo/node_modules/openai/resources/index.js +44 -0
  913. package/demo/node_modules/openai/resources/index.js.map +1 -0
  914. package/demo/node_modules/openai/resources/index.mjs +14 -0
  915. package/demo/node_modules/openai/resources/index.mjs.map +1 -0
  916. package/demo/node_modules/openai/resources/models.d.ts +58 -0
  917. package/demo/node_modules/openai/resources/models.d.ts.map +1 -0
  918. package/demo/node_modules/openai/resources/models.js +64 -0
  919. package/demo/node_modules/openai/resources/models.js.map +1 -0
  920. package/demo/node_modules/openai/resources/models.mjs +36 -0
  921. package/demo/node_modules/openai/resources/models.mjs.map +1 -0
  922. package/demo/node_modules/openai/resources/moderations.d.ts +176 -0
  923. package/demo/node_modules/openai/resources/moderations.d.ts.map +1 -0
  924. package/demo/node_modules/openai/resources/moderations.js +17 -0
  925. package/demo/node_modules/openai/resources/moderations.js.map +1 -0
  926. package/demo/node_modules/openai/resources/moderations.mjs +13 -0
  927. package/demo/node_modules/openai/resources/moderations.mjs.map +1 -0
  928. package/demo/node_modules/openai/resources/shared.d.ts +39 -0
  929. package/demo/node_modules/openai/resources/shared.d.ts.map +1 -0
  930. package/demo/node_modules/openai/resources/shared.js +4 -0
  931. package/demo/node_modules/openai/resources/shared.js.map +1 -0
  932. package/demo/node_modules/openai/resources/shared.mjs +3 -0
  933. package/demo/node_modules/openai/resources/shared.mjs.map +1 -0
  934. package/demo/node_modules/openai/shims/node.d.ts +29 -0
  935. package/demo/node_modules/openai/shims/node.d.ts.map +1 -0
  936. package/demo/node_modules/openai/shims/node.js +31 -0
  937. package/demo/node_modules/openai/shims/node.js.map +1 -0
  938. package/demo/node_modules/openai/shims/node.mjs +5 -0
  939. package/demo/node_modules/openai/shims/node.mjs.map +1 -0
  940. package/demo/node_modules/openai/shims/web.d.ts +26 -0
  941. package/demo/node_modules/openai/shims/web.d.ts.map +1 -0
  942. package/demo/node_modules/openai/shims/web.js +31 -0
  943. package/demo/node_modules/openai/shims/web.js.map +1 -0
  944. package/demo/node_modules/openai/shims/web.mjs +5 -0
  945. package/demo/node_modules/openai/shims/web.mjs.map +1 -0
  946. package/demo/node_modules/openai/src/_shims/MultipartBody.ts +9 -0
  947. package/demo/node_modules/openai/src/_shims/README.md +46 -0
  948. package/demo/node_modules/openai/src/_shims/auto/runtime-bun.ts +4 -0
  949. package/demo/node_modules/openai/src/_shims/auto/runtime-node.ts +4 -0
  950. package/demo/node_modules/openai/src/_shims/auto/runtime.ts +4 -0
  951. package/demo/node_modules/openai/src/_shims/auto/types-node.ts +4 -0
  952. package/demo/node_modules/openai/src/_shims/auto/types.d.ts +101 -0
  953. package/demo/node_modules/openai/src/_shims/auto/types.js +3 -0
  954. package/demo/node_modules/openai/src/_shims/auto/types.mjs +3 -0
  955. package/demo/node_modules/openai/src/_shims/bun-runtime.ts +14 -0
  956. package/demo/node_modules/openai/src/_shims/index.d.ts +81 -0
  957. package/demo/node_modules/openai/src/_shims/index.js +13 -0
  958. package/demo/node_modules/openai/src/_shims/index.mjs +7 -0
  959. package/demo/node_modules/openai/src/_shims/manual-types.d.ts +12 -0
  960. package/demo/node_modules/openai/src/_shims/manual-types.js +3 -0
  961. package/demo/node_modules/openai/src/_shims/manual-types.mjs +3 -0
  962. package/demo/node_modules/openai/src/_shims/node-runtime.ts +83 -0
  963. package/demo/node_modules/openai/src/_shims/node-types.d.ts +42 -0
  964. package/demo/node_modules/openai/src/_shims/node-types.js +3 -0
  965. package/demo/node_modules/openai/src/_shims/node-types.mjs +3 -0
  966. package/demo/node_modules/openai/src/_shims/registry.ts +65 -0
  967. package/demo/node_modules/openai/src/_shims/web-runtime.ts +103 -0
  968. package/demo/node_modules/openai/src/_shims/web-types.d.ts +83 -0
  969. package/demo/node_modules/openai/src/_shims/web-types.js +3 -0
  970. package/demo/node_modules/openai/src/_shims/web-types.mjs +3 -0
  971. package/demo/node_modules/openai/src/core.ts +1162 -0
  972. package/demo/node_modules/openai/src/error.ts +158 -0
  973. package/demo/node_modules/openai/src/index.ts +502 -0
  974. package/demo/node_modules/openai/src/lib/.keep +4 -0
  975. package/demo/node_modules/openai/src/lib/AbstractAssistantStreamRunner.ts +340 -0
  976. package/demo/node_modules/openai/src/lib/AbstractChatCompletionRunner.ts +682 -0
  977. package/demo/node_modules/openai/src/lib/AssistantStream.ts +723 -0
  978. package/demo/node_modules/openai/src/lib/ChatCompletionRunFunctions.test.ts +2328 -0
  979. package/demo/node_modules/openai/src/lib/ChatCompletionRunner.ts +68 -0
  980. package/demo/node_modules/openai/src/lib/ChatCompletionStream.ts +494 -0
  981. package/demo/node_modules/openai/src/lib/ChatCompletionStreamingRunner.ts +68 -0
  982. package/demo/node_modules/openai/src/lib/RunnableFunction.ts +134 -0
  983. package/demo/node_modules/openai/src/lib/Util.ts +23 -0
  984. package/demo/node_modules/openai/src/lib/chatCompletionUtils.ts +28 -0
  985. package/demo/node_modules/openai/src/lib/jsonschema.ts +148 -0
  986. package/demo/node_modules/openai/src/pagination.ts +98 -0
  987. package/demo/node_modules/openai/src/resource.ts +11 -0
  988. package/demo/node_modules/openai/src/resources/audio/audio.ts +23 -0
  989. package/demo/node_modules/openai/src/resources/audio/index.ts +6 -0
  990. package/demo/node_modules/openai/src/resources/audio/speech.ts +52 -0
  991. package/demo/node_modules/openai/src/resources/audio/transcriptions.ts +84 -0
  992. package/demo/node_modules/openai/src/resources/audio/translations.ts +61 -0
  993. package/demo/node_modules/openai/src/resources/batches.ts +252 -0
  994. package/demo/node_modules/openai/src/resources/beta/assistants.ts +1315 -0
  995. package/demo/node_modules/openai/src/resources/beta/beta.ts +56 -0
  996. package/demo/node_modules/openai/src/resources/beta/chat/chat.ts +12 -0
  997. package/demo/node_modules/openai/src/resources/beta/chat/completions.ts +106 -0
  998. package/demo/node_modules/openai/src/resources/beta/chat/index.ts +4 -0
  999. package/demo/node_modules/openai/src/resources/beta/index.ts +48 -0
  1000. package/demo/node_modules/openai/src/resources/beta/threads/index.ts +72 -0
  1001. package/demo/node_modules/openai/src/resources/beta/threads/messages.ts +706 -0
  1002. package/demo/node_modules/openai/src/resources/beta/threads/runs/index.ts +44 -0
  1003. package/demo/node_modules/openai/src/resources/beta/threads/runs/runs.ts +1627 -0
  1004. package/demo/node_modules/openai/src/resources/beta/threads/runs/steps.ts +641 -0
  1005. package/demo/node_modules/openai/src/resources/beta/threads/threads.ts +1536 -0
  1006. package/demo/node_modules/openai/src/resources/beta/vector-stores/file-batches.ts +293 -0
  1007. package/demo/node_modules/openai/src/resources/beta/vector-stores/files.ts +284 -0
  1008. package/demo/node_modules/openai/src/resources/beta/vector-stores/index.ts +25 -0
  1009. package/demo/node_modules/openai/src/resources/beta/vector-stores/vector-stores.ts +318 -0
  1010. package/demo/node_modules/openai/src/resources/chat/chat.ts +67 -0
  1011. package/demo/node_modules/openai/src/resources/chat/completions.ts +996 -0
  1012. package/demo/node_modules/openai/src/resources/chat/index.ts +33 -0
  1013. package/demo/node_modules/openai/src/resources/completions.ts +329 -0
  1014. package/demo/node_modules/openai/src/resources/embeddings.ts +125 -0
  1015. package/demo/node_modules/openai/src/resources/files.ts +214 -0
  1016. package/demo/node_modules/openai/src/resources/fine-tuning/fine-tuning.ts +22 -0
  1017. package/demo/node_modules/openai/src/resources/fine-tuning/index.ts +16 -0
  1018. package/demo/node_modules/openai/src/resources/fine-tuning/jobs/checkpoints.ts +108 -0
  1019. package/demo/node_modules/openai/src/resources/fine-tuning/jobs/index.ts +21 -0
  1020. package/demo/node_modules/openai/src/resources/fine-tuning/jobs/jobs.ts +458 -0
  1021. package/demo/node_modules/openai/src/resources/images.ts +215 -0
  1022. package/demo/node_modules/openai/src/resources/index.ts +45 -0
  1023. package/demo/node_modules/openai/src/resources/models.ts +76 -0
  1024. package/demo/node_modules/openai/src/resources/moderations.ts +214 -0
  1025. package/demo/node_modules/openai/src/resources/shared.ts +47 -0
  1026. package/demo/node_modules/openai/src/shims/node.ts +50 -0
  1027. package/demo/node_modules/openai/src/shims/web.ts +50 -0
  1028. package/demo/node_modules/openai/src/streaming.ts +508 -0
  1029. package/demo/node_modules/openai/src/tsconfig.json +11 -0
  1030. package/demo/node_modules/openai/src/uploads.ts +248 -0
  1031. package/demo/node_modules/openai/src/version.ts +1 -0
  1032. package/demo/node_modules/openai/streaming.d.ts +41 -0
  1033. package/demo/node_modules/openai/streaming.d.ts.map +1 -0
  1034. package/demo/node_modules/openai/streaming.js +433 -0
  1035. package/demo/node_modules/openai/streaming.js.map +1 -0
  1036. package/demo/node_modules/openai/streaming.mjs +426 -0
  1037. package/demo/node_modules/openai/streaming.mjs.map +1 -0
  1038. package/demo/node_modules/openai/uploads.d.ts +75 -0
  1039. package/demo/node_modules/openai/uploads.d.ts.map +1 -0
  1040. package/demo/node_modules/openai/uploads.js +165 -0
  1041. package/demo/node_modules/openai/uploads.js.map +1 -0
  1042. package/demo/node_modules/openai/uploads.mjs +152 -0
  1043. package/demo/node_modules/openai/uploads.mjs.map +1 -0
  1044. package/demo/node_modules/openai/version.d.ts +2 -0
  1045. package/demo/node_modules/openai/version.d.ts.map +1 -0
  1046. package/demo/node_modules/openai/version.js +5 -0
  1047. package/demo/node_modules/openai/version.js.map +1 -0
  1048. package/demo/node_modules/openai/version.mjs +2 -0
  1049. package/demo/node_modules/openai/version.mjs.map +1 -0
  1050. package/demo/node_modules/tr46/index.js +193 -0
  1051. package/demo/node_modules/tr46/lib/.gitkeep +0 -0
  1052. package/demo/node_modules/tr46/lib/mappingTable.json +1 -0
  1053. package/demo/node_modules/tr46/package.json +31 -0
  1054. package/demo/node_modules/undici-types/README.md +6 -0
  1055. package/demo/node_modules/undici-types/agent.d.ts +31 -0
  1056. package/demo/node_modules/undici-types/api.d.ts +43 -0
  1057. package/demo/node_modules/undici-types/balanced-pool.d.ts +18 -0
  1058. package/demo/node_modules/undici-types/cache.d.ts +36 -0
  1059. package/demo/node_modules/undici-types/client.d.ts +97 -0
  1060. package/demo/node_modules/undici-types/connector.d.ts +34 -0
  1061. package/demo/node_modules/undici-types/content-type.d.ts +21 -0
  1062. package/demo/node_modules/undici-types/cookies.d.ts +28 -0
  1063. package/demo/node_modules/undici-types/diagnostics-channel.d.ts +67 -0
  1064. package/demo/node_modules/undici-types/dispatcher.d.ts +241 -0
  1065. package/demo/node_modules/undici-types/errors.d.ts +128 -0
  1066. package/demo/node_modules/undici-types/fetch.d.ts +209 -0
  1067. package/demo/node_modules/undici-types/file.d.ts +39 -0
  1068. package/demo/node_modules/undici-types/filereader.d.ts +54 -0
  1069. package/demo/node_modules/undici-types/formdata.d.ts +108 -0
  1070. package/demo/node_modules/undici-types/global-dispatcher.d.ts +9 -0
  1071. package/demo/node_modules/undici-types/global-origin.d.ts +7 -0
  1072. package/demo/node_modules/undici-types/handlers.d.ts +9 -0
  1073. package/demo/node_modules/undici-types/header.d.ts +4 -0
  1074. package/demo/node_modules/undici-types/index.d.ts +63 -0
  1075. package/demo/node_modules/undici-types/interceptors.d.ts +5 -0
  1076. package/demo/node_modules/undici-types/mock-agent.d.ts +50 -0
  1077. package/demo/node_modules/undici-types/mock-client.d.ts +25 -0
  1078. package/demo/node_modules/undici-types/mock-errors.d.ts +12 -0
  1079. package/demo/node_modules/undici-types/mock-interceptor.d.ts +93 -0
  1080. package/demo/node_modules/undici-types/mock-pool.d.ts +25 -0
  1081. package/demo/node_modules/undici-types/package.json +55 -0
  1082. package/demo/node_modules/undici-types/patch.d.ts +71 -0
  1083. package/demo/node_modules/undici-types/pool-stats.d.ts +19 -0
  1084. package/demo/node_modules/undici-types/pool.d.ts +28 -0
  1085. package/demo/node_modules/undici-types/proxy-agent.d.ts +30 -0
  1086. package/demo/node_modules/undici-types/readable.d.ts +61 -0
  1087. package/demo/node_modules/undici-types/webidl.d.ts +220 -0
  1088. package/demo/node_modules/undici-types/websocket.d.ts +131 -0
  1089. package/demo/node_modules/web-streams-polyfill/LICENSE +22 -0
  1090. package/demo/node_modules/web-streams-polyfill/README.md +110 -0
  1091. package/demo/node_modules/web-streams-polyfill/es2018/package.json +14 -0
  1092. package/demo/node_modules/web-streams-polyfill/es6/package.json +14 -0
  1093. package/demo/node_modules/web-streams-polyfill/package.json +83 -0
  1094. package/demo/node_modules/web-streams-polyfill/ponyfill/es2018/package.json +13 -0
  1095. package/demo/node_modules/web-streams-polyfill/ponyfill/es6/package.json +13 -0
  1096. package/demo/node_modules/web-streams-polyfill/ponyfill/package.json +13 -0
  1097. package/demo/node_modules/webidl-conversions/LICENSE.md +12 -0
  1098. package/demo/node_modules/webidl-conversions/README.md +53 -0
  1099. package/demo/node_modules/webidl-conversions/lib/index.js +189 -0
  1100. package/demo/node_modules/webidl-conversions/package.json +23 -0
  1101. package/demo/node_modules/whatwg-url/LICENSE.txt +21 -0
  1102. package/demo/node_modules/whatwg-url/README.md +67 -0
  1103. package/demo/node_modules/whatwg-url/lib/URL-impl.js +200 -0
  1104. package/demo/node_modules/whatwg-url/lib/URL.js +196 -0
  1105. package/demo/node_modules/whatwg-url/lib/public-api.js +11 -0
  1106. package/demo/node_modules/whatwg-url/lib/url-state-machine.js +1297 -0
  1107. package/demo/node_modules/whatwg-url/lib/utils.js +20 -0
  1108. package/demo/node_modules/whatwg-url/package.json +32 -0
  1109. package/demo/package-lock.json +282 -0
  1110. package/demo/package.json +16 -0
  1111. package/index.js +171 -0
  1112. package/package.json +34 -0
@@ -0,0 +1,2177 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const openai_1 = __importDefault(require("openai"));
7
+ const error_1 = require("openai/error");
8
+ const stream_1 = require("stream");
9
+ const completions_1 = require("openai/resources/beta/chat/completions");
10
+ const node_fetch_1 = require("node-fetch");
11
+ const chatCompletionUtils_1 = require("./chatCompletionUtils.js");
12
+ /**
13
+ * Creates a mock `fetch` function and a `handleRequest` function for intercepting `fetch` calls.
14
+ *
15
+ * You call `handleRequest` with a callback function that handles the next `fetch` call.
16
+ * It returns a Promise that:
17
+ * - waits for the next call to `fetch`
18
+ * - calls the callback with the `fetch` arguments
19
+ * - resolves `fetch` with the callback output
20
+ */
21
+ function mockFetch() {
22
+ const fetchQueue = [];
23
+ const handlerQueue = [];
24
+ const enqueueHandler = () => {
25
+ handlerQueue.push(new Promise((resolve) => {
26
+ fetchQueue.push((handle) => {
27
+ enqueueHandler();
28
+ resolve(handle);
29
+ });
30
+ }));
31
+ };
32
+ enqueueHandler();
33
+ async function fetch(req, init) {
34
+ const handler = await handlerQueue.shift();
35
+ if (!handler)
36
+ throw new Error('expected handler to be defined');
37
+ const signal = init?.signal;
38
+ if (!signal)
39
+ return await handler(req, init);
40
+ return await Promise.race([
41
+ handler(req, init),
42
+ new Promise((resolve, reject) => {
43
+ if (signal.aborted) {
44
+ // @ts-ignore does exist in Node
45
+ reject(new DOMException('The user aborted a request.', 'AbortError'));
46
+ return;
47
+ }
48
+ signal.addEventListener('abort', (e) => {
49
+ // @ts-ignore does exist in Node
50
+ reject(new DOMException('The user aborted a request.', 'AbortError'));
51
+ });
52
+ }),
53
+ ]);
54
+ }
55
+ function handleRequest(handle) {
56
+ return new Promise((resolve, reject) => {
57
+ fetchQueue.shift()?.(async (req, init) => {
58
+ try {
59
+ return await handle(req, init);
60
+ }
61
+ catch (err) {
62
+ reject(err);
63
+ return err;
64
+ }
65
+ finally {
66
+ resolve();
67
+ }
68
+ });
69
+ });
70
+ }
71
+ return { fetch, handleRequest };
72
+ }
73
+ // mockChatCompletionFetch is like mockFetch, but with better a more convenient handleRequest to mock
74
+ // chat completion request/responses.
75
+ function mockChatCompletionFetch() {
76
+ const { fetch, handleRequest: handleRawRequest } = mockFetch();
77
+ function handleRequest(handler) {
78
+ return handleRawRequest(async (req, init) => {
79
+ const rawBody = init?.body;
80
+ if (typeof rawBody !== 'string')
81
+ throw new Error(`expected init.body to be a string`);
82
+ const body = JSON.parse(rawBody);
83
+ return new node_fetch_1.Response(JSON.stringify(await handler(body)), {
84
+ headers: { 'Content-Type': 'application/json' },
85
+ });
86
+ });
87
+ }
88
+ return { fetch, handleRequest };
89
+ }
90
+ // mockStreamingChatCompletionFetch is like mockFetch, but with better a more convenient handleRequest to mock
91
+ // streaming chat completion request/responses.
92
+ function mockStreamingChatCompletionFetch() {
93
+ const { fetch, handleRequest: handleRawRequest } = mockFetch();
94
+ function handleRequest(handler) {
95
+ return handleRawRequest(async (req, init) => {
96
+ const rawBody = init?.body;
97
+ if (typeof rawBody !== 'string')
98
+ throw new Error(`expected init.body to be a string`);
99
+ const body = JSON.parse(rawBody);
100
+ const stream = new stream_1.PassThrough();
101
+ (async () => {
102
+ for await (const chunk of handler(body)) {
103
+ stream.write(`data: ${JSON.stringify(chunk)}\n\n`);
104
+ }
105
+ stream.end(`data: [DONE]\n\n`);
106
+ })();
107
+ return new node_fetch_1.Response(stream, {
108
+ headers: {
109
+ 'Content-Type': 'text/event-stream',
110
+ 'Transfer-Encoding': 'chunked',
111
+ },
112
+ });
113
+ });
114
+ }
115
+ return { fetch, handleRequest };
116
+ }
117
+ // contentChoiceDeltas returns an async iterator which mocks a delta stream of a by splitting the
118
+ // argument into chunks separated by whitespace.
119
+ function* contentChoiceDeltas(content, { index = 0, role = 'assistant', } = {}) {
120
+ const deltas = content.split(/\s+/g);
121
+ for (let i = 0; i < deltas.length; i++) {
122
+ yield {
123
+ index,
124
+ finish_reason: i === deltas.length - 1 ? 'stop' : null,
125
+ logprobs: null,
126
+ delta: {
127
+ role,
128
+ content: deltas[i] ? `${deltas[i]}${i === deltas.length - 1 ? '' : ' '}` : null,
129
+ },
130
+ };
131
+ }
132
+ }
133
+ // functionCallDeltas returns an async iterator which mocks a delta stream of a functionCall by splitting
134
+ // the argument into chunks separated by whitespace.
135
+ function* functionCallDeltas(args, { index = 0, id = '123', name, role = 'assistant', }) {
136
+ const deltas = args.split(/\s+/g);
137
+ for (let i = 0; i < deltas.length; i++) {
138
+ yield {
139
+ index,
140
+ finish_reason: i === deltas.length - 1 ? 'function_call' : null,
141
+ delta: {
142
+ role,
143
+ tool_calls: [
144
+ {
145
+ type: 'function',
146
+ index: 0,
147
+ id,
148
+ function: {
149
+ arguments: `${deltas[i] || ''}${i === deltas.length - 1 ? '' : ' '}`,
150
+ ...(i === deltas.length - 1 ? { name } : null),
151
+ },
152
+ },
153
+ ],
154
+ },
155
+ };
156
+ }
157
+ }
158
+ class RunnerListener {
159
+ constructor(runner) {
160
+ this.runner = runner;
161
+ this.contents = [];
162
+ this.messages = [];
163
+ this.chatCompletions = [];
164
+ this.functionCalls = [];
165
+ this.functionCallResults = [];
166
+ this.finalContent = null;
167
+ this.gotConnect = false;
168
+ this.gotAbort = false;
169
+ this.gotEnd = false;
170
+ this.onceMessageCallCount = 0;
171
+ runner
172
+ .on('connect', () => (this.gotConnect = true))
173
+ .on('content', (content) => this.contents.push(content))
174
+ .on('message', (message) => this.messages.push(message))
175
+ .on('chatCompletion', (completion) => this.chatCompletions.push(completion))
176
+ .on('functionCall', (functionCall) => this.functionCalls.push(functionCall))
177
+ .on('functionCallResult', (result) => this.functionCallResults.push(result))
178
+ .on('finalContent', (content) => (this.finalContent = content))
179
+ .on('finalMessage', (message) => (this.finalMessage = message))
180
+ .on('finalChatCompletion', (completion) => (this.finalChatCompletion = completion))
181
+ .on('finalFunctionCall', (functionCall) => (this.finalFunctionCall = functionCall))
182
+ .on('finalFunctionCallResult', (result) => (this.finalFunctionCallResult = result))
183
+ .on('totalUsage', (usage) => (this.totalUsage = usage))
184
+ .on('error', (error) => (this.error = error))
185
+ .on('abort', (error) => ((this.error = error), (this.gotAbort = true)))
186
+ .on('end', () => (this.gotEnd = true))
187
+ .once('message', () => this.onceMessageCallCount++);
188
+ }
189
+ async sanityCheck({ error } = {}) {
190
+ expect(this.onceMessageCallCount).toBeLessThanOrEqual(1);
191
+ expect(this.gotAbort).toEqual(this.runner.aborted);
192
+ if (this.runner.aborted)
193
+ expect(this.runner.errored).toBe(true);
194
+ if (error) {
195
+ expect(this.error?.message).toEqual(error);
196
+ expect(this.runner.errored).toBe(true);
197
+ await expect(this.runner.finalChatCompletion()).rejects.toThrow(error);
198
+ await expect(this.runner.finalMessage()).rejects.toThrow(error);
199
+ await expect(this.runner.finalContent()).rejects.toThrow(error);
200
+ await expect(this.runner.finalFunctionCall()).rejects.toThrow(error);
201
+ await expect(this.runner.finalFunctionCallResult()).rejects.toThrow(error);
202
+ await expect(this.runner.totalUsage()).rejects.toThrow(error);
203
+ await expect(this.runner.done()).rejects.toThrow(error);
204
+ }
205
+ else {
206
+ expect(this.error).toBeUndefined();
207
+ expect(this.runner.errored).toBe(false);
208
+ }
209
+ if (!this.gotConnect) {
210
+ expect(this.contents).toEqual([]);
211
+ expect(this.messages).toEqual([]);
212
+ expect(this.chatCompletions).toEqual([]);
213
+ expect(this.functionCalls).toEqual([]);
214
+ expect(this.functionCallResults).toEqual([]);
215
+ expect(this.finalContent).toBeUndefined();
216
+ expect(this.finalMessage).toBeUndefined();
217
+ expect(this.finalChatCompletion).toBeUndefined();
218
+ expect(this.finalFunctionCall).toBeUndefined();
219
+ expect(this.finalFunctionCallResult).toBeUndefined();
220
+ expect(this.totalUsage).toBeUndefined();
221
+ expect(this.gotEnd).toBe(true);
222
+ return;
223
+ }
224
+ if (error)
225
+ return;
226
+ const expectedContents = this.messages
227
+ .filter(chatCompletionUtils_1.isAssistantMessage)
228
+ .map((m) => m.content)
229
+ .filter(Boolean);
230
+ expect(this.contents).toEqual(expectedContents);
231
+ expect(this.finalMessage).toEqual([...this.messages].reverse().find((x) => x.role === 'assistant'));
232
+ expect(await this.runner.finalMessage()).toEqual(this.finalMessage);
233
+ expect(this.finalContent).toEqual(expectedContents[expectedContents.length - 1] ?? null);
234
+ expect(await this.runner.finalContent()).toEqual(this.finalContent);
235
+ expect(this.finalChatCompletion).toEqual(this.chatCompletions[this.chatCompletions.length - 1]);
236
+ expect(await this.runner.finalChatCompletion()).toEqual(this.finalChatCompletion);
237
+ expect(this.finalFunctionCall).toEqual(this.functionCalls[this.functionCalls.length - 1]);
238
+ expect(await this.runner.finalFunctionCall()).toEqual(this.finalFunctionCall);
239
+ expect(this.finalFunctionCallResult).toEqual(this.functionCallResults[this.functionCallResults.length - 1]);
240
+ expect(await this.runner.finalFunctionCallResult()).toEqual(this.finalFunctionCallResult);
241
+ expect(this.chatCompletions).toEqual(this.runner.allChatCompletions());
242
+ expect(this.messages).toEqual(this.runner.messages.slice(-this.messages.length));
243
+ if (this.chatCompletions.some((c) => c.usage)) {
244
+ const totalUsage = {
245
+ completion_tokens: 0,
246
+ prompt_tokens: 0,
247
+ total_tokens: 0,
248
+ };
249
+ for (const { usage } of this.chatCompletions) {
250
+ if (usage) {
251
+ totalUsage.completion_tokens += usage.completion_tokens;
252
+ totalUsage.prompt_tokens += usage.prompt_tokens;
253
+ totalUsage.total_tokens += usage.total_tokens;
254
+ }
255
+ }
256
+ expect(this.totalUsage).toEqual(totalUsage);
257
+ expect(await this.runner.totalUsage()).toEqual(totalUsage);
258
+ }
259
+ expect(this.gotEnd).toBe(true);
260
+ }
261
+ }
262
+ class StreamingRunnerListener {
263
+ constructor(runner) {
264
+ this.runner = runner;
265
+ this.eventChunks = [];
266
+ this.eventContents = [];
267
+ this.eventMessages = [];
268
+ this.eventChatCompletions = [];
269
+ this.eventFunctionCalls = [];
270
+ this.eventFunctionCallResults = [];
271
+ this.finalContent = null;
272
+ this.gotConnect = false;
273
+ this.gotEnd = false;
274
+ runner
275
+ .on('connect', () => (this.gotConnect = true))
276
+ .on('chunk', (chunk) => this.eventChunks.push(chunk))
277
+ .on('content', (delta, snapshot) => this.eventContents.push([delta, snapshot]))
278
+ .on('message', (message) => this.eventMessages.push(message))
279
+ .on('chatCompletion', (completion) => this.eventChatCompletions.push(completion))
280
+ .on('functionCall', (functionCall) => this.eventFunctionCalls.push(functionCall))
281
+ .on('functionCallResult', (result) => this.eventFunctionCallResults.push(result))
282
+ .on('finalContent', (content) => (this.finalContent = content))
283
+ .on('finalMessage', (message) => (this.finalMessage = message))
284
+ .on('finalChatCompletion', (completion) => (this.finalChatCompletion = completion))
285
+ .on('finalFunctionCall', (functionCall) => (this.finalFunctionCall = functionCall))
286
+ .on('finalFunctionCallResult', (result) => (this.finalFunctionCallResult = result))
287
+ .on('error', (error) => (this.error = error))
288
+ .on('abort', (abort) => (this.error = abort))
289
+ .on('end', () => (this.gotEnd = true));
290
+ }
291
+ async sanityCheck({ error } = {}) {
292
+ if (error) {
293
+ expect(this.error?.message).toEqual(error);
294
+ expect(this.runner.errored).toBe(true);
295
+ await expect(this.runner.finalChatCompletion()).rejects.toThrow(error);
296
+ await expect(this.runner.finalMessage()).rejects.toThrow(error);
297
+ await expect(this.runner.finalContent()).rejects.toThrow(error);
298
+ await expect(this.runner.finalFunctionCall()).rejects.toThrow(error);
299
+ await expect(this.runner.finalFunctionCallResult()).rejects.toThrow(error);
300
+ await expect(this.runner.done()).rejects.toThrow(error);
301
+ }
302
+ else {
303
+ expect(this.error).toBeUndefined();
304
+ expect(this.runner.errored).toBe(false);
305
+ }
306
+ if (!this.gotConnect) {
307
+ expect(this.eventContents).toEqual([]);
308
+ expect(this.eventMessages).toEqual([]);
309
+ expect(this.eventChatCompletions).toEqual([]);
310
+ expect(this.eventFunctionCalls).toEqual([]);
311
+ expect(this.eventFunctionCallResults).toEqual([]);
312
+ expect(this.finalContent).toBeUndefined();
313
+ expect(this.finalMessage).toBeUndefined();
314
+ expect(this.finalChatCompletion).toBeUndefined();
315
+ expect(this.finalFunctionCall).toBeUndefined();
316
+ expect(this.finalFunctionCallResult).toBeUndefined();
317
+ expect(this.gotEnd).toBe(true);
318
+ return;
319
+ }
320
+ if (error)
321
+ return;
322
+ if (this.eventContents.length)
323
+ expect(this.eventChunks.length).toBeGreaterThan(0);
324
+ expect(this.finalMessage).toEqual([...this.eventMessages].reverse().find((x) => x.role === 'assistant'));
325
+ expect(await this.runner.finalMessage()).toEqual(this.finalMessage);
326
+ expect(this.finalContent).toEqual(this.eventContents[this.eventContents.length - 1]?.[1] ?? null);
327
+ expect(await this.runner.finalContent()).toEqual(this.finalContent);
328
+ expect(this.finalChatCompletion).toEqual(this.eventChatCompletions[this.eventChatCompletions.length - 1]);
329
+ expect(await this.runner.finalChatCompletion()).toEqual(this.finalChatCompletion);
330
+ expect(this.finalFunctionCall).toEqual(this.eventFunctionCalls[this.eventFunctionCalls.length - 1]);
331
+ expect(await this.runner.finalFunctionCall()).toEqual(this.finalFunctionCall);
332
+ expect(this.finalFunctionCallResult).toEqual(this.eventFunctionCallResults[this.eventFunctionCallResults.length - 1]);
333
+ expect(await this.runner.finalFunctionCallResult()).toEqual(this.finalFunctionCallResult);
334
+ expect(this.eventChatCompletions).toEqual(this.runner.allChatCompletions());
335
+ expect(this.eventMessages).toEqual(this.runner.messages.slice(-this.eventMessages.length));
336
+ if (error) {
337
+ expect(this.error?.message).toEqual(error);
338
+ expect(this.runner.errored).toBe(true);
339
+ }
340
+ else {
341
+ expect(this.error).toBeUndefined();
342
+ expect(this.runner.errored).toBe(false);
343
+ }
344
+ expect(this.gotEnd).toBe(true);
345
+ }
346
+ }
347
+ function _typeTests() {
348
+ const openai = new openai_1.default();
349
+ openai.beta.chat.completions.runTools({
350
+ messages: [
351
+ { role: 'user', content: 'can you tell me how many properties are in {"a": 1, "b": 2, "c": 3}' },
352
+ ],
353
+ model: 'gpt-3.5-turbo',
354
+ tools: [
355
+ {
356
+ type: 'function',
357
+ function: {
358
+ name: 'numProperties',
359
+ function: (obj) => String(Object.keys(obj).length),
360
+ parameters: { type: 'object' },
361
+ parse: (str) => {
362
+ const result = JSON.parse(str);
363
+ if (!(result instanceof Object) || Array.isArray(result)) {
364
+ throw new Error('must be an object');
365
+ }
366
+ return result;
367
+ },
368
+ description: 'gets the number of properties on an object',
369
+ },
370
+ },
371
+ {
372
+ type: 'function',
373
+ function: {
374
+ function: (str) => String(str.length),
375
+ parameters: { type: 'string' },
376
+ description: 'gets the length of a string',
377
+ },
378
+ },
379
+ {
380
+ type: 'function',
381
+ // @ts-expect-error function must accept string if parse is omitted
382
+ function: {
383
+ function: (obj) => String(Object.keys(obj).length),
384
+ parameters: { type: 'object' },
385
+ description: 'gets the number of properties on an object',
386
+ },
387
+ },
388
+ ],
389
+ });
390
+ openai.beta.chat.completions.runTools({
391
+ messages: [
392
+ { role: 'user', content: 'can you tell me how many properties are in {"a": 1, "b": 2, "c": 3}' },
393
+ ],
394
+ model: 'gpt-3.5-turbo',
395
+ tools: [
396
+ new completions_1.ParsingToolFunction({
397
+ name: 'numProperties',
398
+ // @ts-expect-error parse and function don't match
399
+ parse: (str) => str,
400
+ function: (obj) => String(Object.keys(obj).length),
401
+ parameters: { type: 'object' },
402
+ description: 'gets the number of properties on an object',
403
+ }),
404
+ ],
405
+ });
406
+ openai.beta.chat.completions.runTools({
407
+ messages: [
408
+ { role: 'user', content: 'can you tell me how many properties are in {"a": 1, "b": 2, "c": 3}' },
409
+ ],
410
+ model: 'gpt-3.5-turbo',
411
+ tools: [
412
+ new completions_1.ParsingToolFunction({
413
+ name: 'numProperties',
414
+ parse: (str) => {
415
+ const result = JSON.parse(str);
416
+ if (!(result instanceof Object) || Array.isArray(result)) {
417
+ throw new Error('must be an object');
418
+ }
419
+ return result;
420
+ },
421
+ function: (obj) => String(Object.keys(obj).length),
422
+ parameters: { type: 'object' },
423
+ description: 'gets the number of properties on an object',
424
+ }),
425
+ new completions_1.ParsingToolFunction({
426
+ name: 'keys',
427
+ parse: (str) => {
428
+ const result = JSON.parse(str);
429
+ if (!(result instanceof Object)) {
430
+ throw new Error('must be an Object');
431
+ }
432
+ return result;
433
+ },
434
+ function: (obj) => Object.keys(obj).join(', '),
435
+ parameters: { type: 'object' },
436
+ description: 'gets the number of properties on an object',
437
+ }),
438
+ new completions_1.ParsingToolFunction({
439
+ name: 'len2',
440
+ // @ts-expect-error parse and function don't match
441
+ parse: (str) => str,
442
+ function: (obj) => String(Object.keys(obj).length),
443
+ parameters: { type: 'object' },
444
+ description: 'gets the number of properties on an object',
445
+ }),
446
+ ],
447
+ });
448
+ openai.beta.chat.completions.runTools({
449
+ messages: [
450
+ { role: 'user', content: 'can you tell me how many properties are in {"a": 1, "b": 2, "c": 3}' },
451
+ ],
452
+ model: 'gpt-3.5-turbo',
453
+ // @ts-ignore error occurs here in TS 4
454
+ tools: [
455
+ {
456
+ type: 'function',
457
+ function: {
458
+ name: 'numProperties',
459
+ parse: (str) => {
460
+ const result = JSON.parse(str);
461
+ if (!(result instanceof Object) || Array.isArray(result)) {
462
+ throw new Error('must be an object');
463
+ }
464
+ return result;
465
+ },
466
+ function: (obj) => String(Object.keys(obj).length),
467
+ parameters: { type: 'object' },
468
+ description: 'gets the number of properties on an object',
469
+ },
470
+ },
471
+ {
472
+ type: 'function',
473
+ function: {
474
+ name: 'keys',
475
+ parse: (str) => {
476
+ const result = JSON.parse(str);
477
+ if (!(result instanceof Object)) {
478
+ throw new Error('must be an Object');
479
+ }
480
+ return result;
481
+ },
482
+ function: (obj) => Object.keys(obj).join(', '),
483
+ parameters: { type: 'object' },
484
+ description: 'gets the number of properties on an object',
485
+ },
486
+ },
487
+ {
488
+ type: 'function',
489
+ function: {
490
+ name: 'len2',
491
+ parse: (str) => str,
492
+ // @ts-ignore error occurs here in TS 5
493
+ // function input doesn't match parse output
494
+ function: (obj) => String(Object.keys(obj).length),
495
+ parameters: { type: 'object' },
496
+ description: 'gets the number of properties on an object',
497
+ },
498
+ },
499
+ ],
500
+ });
501
+ }
502
+ describe('resource completions', () => {
503
+ describe('runTools with stream: false', () => {
504
+ test('successful flow', async () => {
505
+ const { fetch, handleRequest } = mockChatCompletionFetch();
506
+ const openai = new openai_1.default({ apiKey: 'something1234', baseURL: 'http://127.0.0.1:4010', fetch });
507
+ const runner = openai.beta.chat.completions.runTools({
508
+ messages: [{ role: 'user', content: 'tell me what the weather is like' }],
509
+ model: 'gpt-3.5-turbo',
510
+ tools: [
511
+ {
512
+ type: 'function',
513
+ function: {
514
+ function: function getWeather() {
515
+ return `it's raining`;
516
+ },
517
+ parameters: {},
518
+ description: 'gets the weather',
519
+ },
520
+ },
521
+ ],
522
+ });
523
+ const listener = new RunnerListener(runner);
524
+ await handleRequest(async (request) => {
525
+ expect(request.messages).toEqual([{ role: 'user', content: 'tell me what the weather is like' }]);
526
+ return {
527
+ id: '1',
528
+ choices: [
529
+ {
530
+ index: 0,
531
+ finish_reason: 'function_call',
532
+ logprobs: null,
533
+ message: {
534
+ role: 'assistant',
535
+ content: null,
536
+ tool_calls: [
537
+ {
538
+ type: 'function',
539
+ id: '123',
540
+ function: {
541
+ arguments: '',
542
+ name: 'getWeather',
543
+ },
544
+ },
545
+ ],
546
+ },
547
+ },
548
+ ],
549
+ created: Math.floor(Date.now() / 1000),
550
+ model: 'gpt-3.5-turbo',
551
+ object: 'chat.completion',
552
+ };
553
+ });
554
+ await handleRequest(async (request) => {
555
+ expect(request.messages).toEqual([
556
+ { role: 'user', content: 'tell me what the weather is like' },
557
+ {
558
+ role: 'assistant',
559
+ content: null,
560
+ tool_calls: [
561
+ {
562
+ type: 'function',
563
+ id: '123',
564
+ function: {
565
+ arguments: '',
566
+ name: 'getWeather',
567
+ },
568
+ },
569
+ ],
570
+ },
571
+ {
572
+ role: 'tool',
573
+ content: `it's raining`,
574
+ tool_call_id: '123',
575
+ },
576
+ ]);
577
+ return {
578
+ id: '2',
579
+ choices: [
580
+ {
581
+ index: 0,
582
+ finish_reason: 'stop',
583
+ logprobs: null,
584
+ message: {
585
+ role: 'assistant',
586
+ content: `it's raining`,
587
+ },
588
+ },
589
+ ],
590
+ created: Math.floor(Date.now() / 1000),
591
+ model: 'gpt-3.5-turbo',
592
+ object: 'chat.completion',
593
+ };
594
+ });
595
+ await runner.done();
596
+ expect(listener.messages).toEqual([
597
+ { role: 'user', content: 'tell me what the weather is like' },
598
+ {
599
+ role: 'assistant',
600
+ content: null,
601
+ tool_calls: [
602
+ {
603
+ type: 'function',
604
+ id: '123',
605
+ function: {
606
+ arguments: '',
607
+ name: 'getWeather',
608
+ },
609
+ },
610
+ ],
611
+ },
612
+ { role: 'tool', content: `it's raining`, tool_call_id: '123' },
613
+ { role: 'assistant', content: "it's raining" },
614
+ ]);
615
+ expect(listener.functionCallResults).toEqual([`it's raining`]);
616
+ await listener.sanityCheck();
617
+ });
618
+ test('flow with abort', async () => {
619
+ const { fetch, handleRequest } = mockChatCompletionFetch();
620
+ const openai = new openai_1.default({ apiKey: 'something1234', baseURL: 'http://127.0.0.1:4010', fetch });
621
+ const controller = new AbortController();
622
+ const runner = openai.beta.chat.completions.runTools({
623
+ messages: [{ role: 'user', content: 'tell me what the weather is like' }],
624
+ model: 'gpt-3.5-turbo',
625
+ tools: [
626
+ {
627
+ type: 'function',
628
+ function: {
629
+ function: function getWeather() {
630
+ return `it's raining`;
631
+ },
632
+ parameters: {},
633
+ description: 'gets the weather',
634
+ },
635
+ },
636
+ ],
637
+ }, { signal: controller.signal });
638
+ const listener = new RunnerListener(runner);
639
+ await handleRequest(async (request) => {
640
+ expect(request.messages).toEqual([{ role: 'user', content: 'tell me what the weather is like' }]);
641
+ return {
642
+ id: '1',
643
+ choices: [
644
+ {
645
+ index: 0,
646
+ finish_reason: 'function_call',
647
+ logprobs: null,
648
+ message: {
649
+ role: 'assistant',
650
+ content: null,
651
+ tool_calls: [
652
+ {
653
+ type: 'function',
654
+ id: '123',
655
+ function: {
656
+ arguments: '',
657
+ name: 'getWeather',
658
+ },
659
+ },
660
+ ],
661
+ },
662
+ },
663
+ ],
664
+ created: Math.floor(Date.now() / 1000),
665
+ model: 'gpt-3.5-turbo',
666
+ object: 'chat.completion',
667
+ };
668
+ });
669
+ controller.abort();
670
+ await runner.done().catch(() => { });
671
+ expect(listener.messages).toEqual([
672
+ { role: 'user', content: 'tell me what the weather is like' },
673
+ {
674
+ role: 'assistant',
675
+ content: null,
676
+ tool_calls: [
677
+ {
678
+ type: 'function',
679
+ id: '123',
680
+ function: {
681
+ arguments: '',
682
+ name: 'getWeather',
683
+ },
684
+ },
685
+ ],
686
+ },
687
+ { role: 'tool', content: `it's raining`, tool_call_id: '123' },
688
+ ]);
689
+ expect(listener.functionCallResults).toEqual([`it's raining`]);
690
+ await listener.sanityCheck({ error: 'Request was aborted.' });
691
+ expect(runner.aborted).toBe(true);
692
+ });
693
+ test('successful flow with parse', async () => {
694
+ const { fetch, handleRequest } = mockChatCompletionFetch();
695
+ const openai = new openai_1.default({ apiKey: 'something1234', baseURL: 'http://127.0.0.1:4010', fetch });
696
+ const runner = openai.beta.chat.completions.runTools({
697
+ messages: [
698
+ {
699
+ role: 'user',
700
+ content: 'can you tell me how many properties are in {"a": 1, "b": 2, "c": 3}',
701
+ },
702
+ ],
703
+ model: 'gpt-3.5-turbo',
704
+ tools: [
705
+ new completions_1.ParsingToolFunction({
706
+ name: 'numProperties',
707
+ function: (obj) => String(Object.keys(obj).length),
708
+ parameters: { type: 'object' },
709
+ parse: (str) => {
710
+ const result = JSON.parse(str);
711
+ if (!(result instanceof Object) || Array.isArray(result)) {
712
+ throw new Error('must be an object');
713
+ }
714
+ return result;
715
+ },
716
+ description: 'gets the number of properties on an object',
717
+ }),
718
+ ],
719
+ });
720
+ const listener = new RunnerListener(runner);
721
+ await handleRequest(async (request) => {
722
+ expect(request.messages).toEqual([
723
+ {
724
+ role: 'user',
725
+ content: 'can you tell me how many properties are in {"a": 1, "b": 2, "c": 3}',
726
+ },
727
+ ]);
728
+ return {
729
+ id: '1',
730
+ choices: [
731
+ {
732
+ index: 0,
733
+ finish_reason: 'function_call',
734
+ logprobs: null,
735
+ message: {
736
+ role: 'assistant',
737
+ content: null,
738
+ tool_calls: [
739
+ {
740
+ type: 'function',
741
+ id: '123',
742
+ function: {
743
+ arguments: '{"a": 1, "b": 2, "c": 3}',
744
+ name: 'numProperties',
745
+ },
746
+ },
747
+ ],
748
+ },
749
+ },
750
+ ],
751
+ created: Math.floor(Date.now() / 1000),
752
+ model: 'gpt-3.5-turbo',
753
+ object: 'chat.completion',
754
+ usage: {
755
+ completion_tokens: 5,
756
+ prompt_tokens: 20,
757
+ total_tokens: 25,
758
+ },
759
+ };
760
+ });
761
+ await handleRequest(async (request) => {
762
+ expect(request.messages).toEqual([
763
+ {
764
+ role: 'user',
765
+ content: 'can you tell me how many properties are in {"a": 1, "b": 2, "c": 3}',
766
+ },
767
+ {
768
+ role: 'assistant',
769
+ content: null,
770
+ tool_calls: [
771
+ {
772
+ type: 'function',
773
+ id: '123',
774
+ function: {
775
+ arguments: '{"a": 1, "b": 2, "c": 3}',
776
+ name: 'numProperties',
777
+ },
778
+ },
779
+ ],
780
+ },
781
+ {
782
+ role: 'tool',
783
+ content: '3',
784
+ tool_call_id: '123',
785
+ },
786
+ ]);
787
+ return {
788
+ id: '2',
789
+ choices: [
790
+ {
791
+ index: 0,
792
+ finish_reason: 'stop',
793
+ logprobs: null,
794
+ message: {
795
+ role: 'assistant',
796
+ content: `there are 3 properties in {"a": 1, "b": 2, "c": 3}`,
797
+ },
798
+ },
799
+ ],
800
+ created: Math.floor(Date.now() / 1000),
801
+ model: 'gpt-3.5-turbo',
802
+ object: 'chat.completion',
803
+ usage: {
804
+ completion_tokens: 10,
805
+ prompt_tokens: 25,
806
+ total_tokens: 35,
807
+ },
808
+ };
809
+ });
810
+ await runner.done();
811
+ expect(listener.messages).toEqual([
812
+ {
813
+ role: 'user',
814
+ content: 'can you tell me how many properties are in {"a": 1, "b": 2, "c": 3}',
815
+ },
816
+ {
817
+ role: 'assistant',
818
+ content: null,
819
+ tool_calls: [
820
+ {
821
+ type: 'function',
822
+ id: '123',
823
+ function: { name: 'numProperties', arguments: '{"a": 1, "b": 2, "c": 3}' },
824
+ },
825
+ ],
826
+ },
827
+ { role: 'tool', content: '3', tool_call_id: '123' },
828
+ { role: 'assistant', content: 'there are 3 properties in {"a": 1, "b": 2, "c": 3}' },
829
+ ]);
830
+ expect(listener.functionCallResults).toEqual(['3']);
831
+ await listener.sanityCheck();
832
+ });
833
+ test('flow with parse error', async () => {
834
+ const { fetch, handleRequest } = mockChatCompletionFetch();
835
+ const openai = new openai_1.default({ apiKey: 'something1234', baseURL: 'http://127.0.0.1:4010', fetch });
836
+ const runner = openai.beta.chat.completions.runTools({
837
+ messages: [
838
+ {
839
+ role: 'user',
840
+ content: 'can you tell me how many properties are in {"a": 1, "b": 2, "c": 3}',
841
+ },
842
+ ],
843
+ model: 'gpt-3.5-turbo',
844
+ tools: [
845
+ new completions_1.ParsingToolFunction({
846
+ name: 'numProperties',
847
+ function: (obj) => String(Object.keys(obj).length),
848
+ parameters: { type: 'object' },
849
+ parse: (str) => {
850
+ const result = JSON.parse(str);
851
+ if (!(result instanceof Object) || Array.isArray(result)) {
852
+ throw new Error('must be an object');
853
+ }
854
+ return result;
855
+ },
856
+ description: 'gets the number of properties on an object',
857
+ }),
858
+ ],
859
+ });
860
+ const listener = new RunnerListener(runner);
861
+ await Promise.all([
862
+ handleRequest(async (request) => {
863
+ expect(request.messages).toEqual([
864
+ {
865
+ role: 'user',
866
+ content: 'can you tell me how many properties are in {"a": 1, "b": 2, "c": 3}',
867
+ },
868
+ ]);
869
+ return {
870
+ id: '1',
871
+ choices: [
872
+ {
873
+ index: 0,
874
+ finish_reason: 'function_call',
875
+ logprobs: null,
876
+ message: {
877
+ role: 'assistant',
878
+ content: null,
879
+ tool_calls: [
880
+ {
881
+ type: 'function',
882
+ id: '123',
883
+ function: {
884
+ arguments: '[{"a": 1, "b": 2, "c": 3}]',
885
+ name: 'numProperties',
886
+ },
887
+ },
888
+ ],
889
+ },
890
+ },
891
+ ],
892
+ created: Math.floor(Date.now() / 1000),
893
+ model: 'gpt-3.5-turbo',
894
+ object: 'chat.completion',
895
+ };
896
+ }),
897
+ handleRequest(async (request) => {
898
+ expect(request.messages).toEqual([
899
+ {
900
+ role: 'user',
901
+ content: 'can you tell me how many properties are in {"a": 1, "b": 2, "c": 3}',
902
+ },
903
+ {
904
+ role: 'assistant',
905
+ content: null,
906
+ tool_calls: [
907
+ {
908
+ type: 'function',
909
+ id: '123',
910
+ function: {
911
+ arguments: '[{"a": 1, "b": 2, "c": 3}]',
912
+ name: 'numProperties',
913
+ },
914
+ },
915
+ ],
916
+ },
917
+ {
918
+ role: 'tool',
919
+ content: `must be an object`,
920
+ tool_call_id: '123',
921
+ },
922
+ ]);
923
+ return {
924
+ id: '2',
925
+ choices: [
926
+ {
927
+ index: 0,
928
+ finish_reason: 'function_call',
929
+ logprobs: null,
930
+ message: {
931
+ role: 'assistant',
932
+ content: null,
933
+ tool_calls: [
934
+ {
935
+ type: 'function',
936
+ id: '1234',
937
+ function: {
938
+ arguments: '{"a": 1, "b": 2, "c": 3}',
939
+ name: 'numProperties',
940
+ },
941
+ },
942
+ ],
943
+ },
944
+ },
945
+ ],
946
+ created: Math.floor(Date.now() / 1000),
947
+ model: 'gpt-3.5-turbo',
948
+ object: 'chat.completion',
949
+ };
950
+ }),
951
+ handleRequest(async (request) => {
952
+ expect(request.messages).toEqual([
953
+ {
954
+ role: 'user',
955
+ content: 'can you tell me how many properties are in {"a": 1, "b": 2, "c": 3}',
956
+ },
957
+ {
958
+ role: 'assistant',
959
+ content: null,
960
+ tool_calls: [
961
+ {
962
+ type: 'function',
963
+ id: '123',
964
+ function: {
965
+ arguments: '[{"a": 1, "b": 2, "c": 3}]',
966
+ name: 'numProperties',
967
+ },
968
+ },
969
+ ],
970
+ },
971
+ {
972
+ role: 'tool',
973
+ content: `must be an object`,
974
+ tool_call_id: '123',
975
+ },
976
+ {
977
+ role: 'assistant',
978
+ content: null,
979
+ tool_calls: [
980
+ {
981
+ type: 'function',
982
+ id: '1234',
983
+ function: {
984
+ arguments: '{"a": 1, "b": 2, "c": 3}',
985
+ name: 'numProperties',
986
+ },
987
+ },
988
+ ],
989
+ },
990
+ {
991
+ role: 'tool',
992
+ content: '3',
993
+ tool_call_id: '1234',
994
+ },
995
+ ]);
996
+ return {
997
+ id: '3',
998
+ choices: [
999
+ {
1000
+ index: 0,
1001
+ finish_reason: 'stop',
1002
+ logprobs: null,
1003
+ message: {
1004
+ role: 'assistant',
1005
+ content: `there are 3 properties in {"a": 1, "b": 2, "c": 3}`,
1006
+ },
1007
+ },
1008
+ ],
1009
+ created: Math.floor(Date.now() / 1000),
1010
+ model: 'gpt-3.5-turbo',
1011
+ object: 'chat.completion',
1012
+ };
1013
+ }),
1014
+ runner.done(),
1015
+ ]);
1016
+ expect(listener.messages).toEqual([
1017
+ {
1018
+ role: 'user',
1019
+ content: 'can you tell me how many properties are in {"a": 1, "b": 2, "c": 3}',
1020
+ },
1021
+ {
1022
+ role: 'assistant',
1023
+ content: null,
1024
+ tool_calls: [
1025
+ {
1026
+ type: 'function',
1027
+ id: '123',
1028
+ function: { name: 'numProperties', arguments: '[{"a": 1, "b": 2, "c": 3}]' },
1029
+ },
1030
+ ],
1031
+ },
1032
+ { role: 'tool', content: `must be an object`, tool_call_id: '123' },
1033
+ {
1034
+ role: 'assistant',
1035
+ content: null,
1036
+ tool_calls: [
1037
+ {
1038
+ type: 'function',
1039
+ id: '1234',
1040
+ function: { name: 'numProperties', arguments: '{"a": 1, "b": 2, "c": 3}' },
1041
+ },
1042
+ ],
1043
+ },
1044
+ { role: 'tool', content: '3', tool_call_id: '1234' },
1045
+ { role: 'assistant', content: 'there are 3 properties in {"a": 1, "b": 2, "c": 3}' },
1046
+ ]);
1047
+ expect(listener.functionCallResults).toEqual([`must be an object`, '3']);
1048
+ await listener.sanityCheck();
1049
+ });
1050
+ test('single function call', async () => {
1051
+ const { fetch, handleRequest } = mockChatCompletionFetch();
1052
+ const openai = new openai_1.default({ apiKey: 'something1234', baseURL: 'http://127.0.0.1:4010', fetch });
1053
+ const runner = openai.beta.chat.completions.runTools({
1054
+ messages: [{ role: 'user', content: 'tell me what the weather is like' }],
1055
+ model: 'gpt-3.5-turbo',
1056
+ tool_choice: {
1057
+ type: 'function',
1058
+ function: {
1059
+ name: 'getWeather',
1060
+ },
1061
+ },
1062
+ tools: [
1063
+ {
1064
+ type: 'function',
1065
+ function: {
1066
+ function: function getWeather() {
1067
+ return `it's raining`;
1068
+ },
1069
+ parameters: {},
1070
+ description: 'gets the weather',
1071
+ },
1072
+ },
1073
+ ],
1074
+ });
1075
+ const listener = new RunnerListener(runner);
1076
+ await Promise.all([
1077
+ handleRequest(async (request) => {
1078
+ expect(request.messages).toEqual([{ role: 'user', content: 'tell me what the weather is like' }]);
1079
+ return {
1080
+ id: '1',
1081
+ choices: [
1082
+ {
1083
+ index: 0,
1084
+ finish_reason: 'function_call',
1085
+ logprobs: null,
1086
+ message: {
1087
+ role: 'assistant',
1088
+ content: null,
1089
+ tool_calls: [
1090
+ {
1091
+ type: 'function',
1092
+ id: '123',
1093
+ function: {
1094
+ arguments: '',
1095
+ name: 'getWeather',
1096
+ },
1097
+ },
1098
+ ],
1099
+ },
1100
+ },
1101
+ ],
1102
+ created: Math.floor(Date.now() / 1000),
1103
+ model: 'gpt-3.5-turbo',
1104
+ object: 'chat.completion',
1105
+ };
1106
+ }),
1107
+ runner.done(),
1108
+ ]);
1109
+ expect(listener.messages).toEqual([
1110
+ { role: 'user', content: 'tell me what the weather is like' },
1111
+ {
1112
+ role: 'assistant',
1113
+ content: null,
1114
+ tool_calls: [
1115
+ {
1116
+ type: 'function',
1117
+ id: '123',
1118
+ function: {
1119
+ arguments: '',
1120
+ name: 'getWeather',
1121
+ },
1122
+ },
1123
+ ],
1124
+ },
1125
+ { role: 'tool', content: `it's raining`, tool_call_id: '123' },
1126
+ ]);
1127
+ expect(listener.functionCallResults).toEqual([`it's raining`]);
1128
+ await listener.sanityCheck();
1129
+ });
1130
+ test('wrong function name', async () => {
1131
+ const { fetch, handleRequest } = mockChatCompletionFetch();
1132
+ const openai = new openai_1.default({ apiKey: 'something1234', baseURL: 'http://127.0.0.1:4010', fetch });
1133
+ const runner = openai.beta.chat.completions.runTools({
1134
+ messages: [{ role: 'user', content: 'tell me what the weather is like' }],
1135
+ model: 'gpt-3.5-turbo',
1136
+ tools: [
1137
+ {
1138
+ type: 'function',
1139
+ function: {
1140
+ function: function getWeather() {
1141
+ return `it's raining`;
1142
+ },
1143
+ parameters: {},
1144
+ description: 'gets the weather',
1145
+ },
1146
+ },
1147
+ ],
1148
+ });
1149
+ const listener = new RunnerListener(runner);
1150
+ await Promise.all([
1151
+ handleRequest(async (request) => {
1152
+ expect(request.messages).toEqual([{ role: 'user', content: 'tell me what the weather is like' }]);
1153
+ return {
1154
+ id: '1',
1155
+ choices: [
1156
+ {
1157
+ index: 0,
1158
+ finish_reason: 'function_call',
1159
+ logprobs: null,
1160
+ message: {
1161
+ role: 'assistant',
1162
+ content: null,
1163
+ tool_calls: [
1164
+ {
1165
+ type: 'function',
1166
+ id: '123',
1167
+ function: {
1168
+ arguments: '',
1169
+ name: 'get_weather',
1170
+ },
1171
+ },
1172
+ ],
1173
+ },
1174
+ },
1175
+ ],
1176
+ created: Math.floor(Date.now() / 1000),
1177
+ model: 'gpt-3.5-turbo',
1178
+ object: 'chat.completion',
1179
+ };
1180
+ }),
1181
+ handleRequest(async (request) => {
1182
+ expect(request.messages).toEqual([
1183
+ { role: 'user', content: 'tell me what the weather is like' },
1184
+ {
1185
+ role: 'assistant',
1186
+ content: null,
1187
+ tool_calls: [
1188
+ {
1189
+ type: 'function',
1190
+ id: '123',
1191
+ function: {
1192
+ arguments: '',
1193
+ name: 'get_weather',
1194
+ },
1195
+ },
1196
+ ],
1197
+ },
1198
+ {
1199
+ role: 'tool',
1200
+ content: `Invalid tool_call: "get_weather". Available options are: "getWeather". Please try again`,
1201
+ tool_call_id: '123',
1202
+ },
1203
+ ]);
1204
+ return {
1205
+ id: '2',
1206
+ choices: [
1207
+ {
1208
+ index: 0,
1209
+ finish_reason: 'function_call',
1210
+ logprobs: null,
1211
+ message: {
1212
+ role: 'assistant',
1213
+ content: null,
1214
+ tool_calls: [
1215
+ {
1216
+ type: 'function',
1217
+ id: '1234',
1218
+ function: {
1219
+ arguments: '',
1220
+ name: 'getWeather',
1221
+ },
1222
+ },
1223
+ ],
1224
+ },
1225
+ },
1226
+ ],
1227
+ created: Math.floor(Date.now() / 1000),
1228
+ model: 'gpt-3.5-turbo',
1229
+ object: 'chat.completion',
1230
+ };
1231
+ }),
1232
+ handleRequest(async (request) => {
1233
+ expect(request.messages).toEqual([
1234
+ { role: 'user', content: 'tell me what the weather is like' },
1235
+ {
1236
+ role: 'assistant',
1237
+ content: null,
1238
+ tool_calls: [
1239
+ {
1240
+ type: 'function',
1241
+ id: '123',
1242
+ function: {
1243
+ arguments: '',
1244
+ name: 'get_weather',
1245
+ },
1246
+ },
1247
+ ],
1248
+ },
1249
+ {
1250
+ role: 'tool',
1251
+ content: `Invalid tool_call: "get_weather". Available options are: "getWeather". Please try again`,
1252
+ tool_call_id: '123',
1253
+ },
1254
+ {
1255
+ role: 'assistant',
1256
+ content: null,
1257
+ tool_calls: [
1258
+ {
1259
+ type: 'function',
1260
+ id: '1234',
1261
+ function: {
1262
+ arguments: '',
1263
+ name: 'getWeather',
1264
+ },
1265
+ },
1266
+ ],
1267
+ },
1268
+ {
1269
+ role: 'tool',
1270
+ content: `it's raining`,
1271
+ tool_call_id: '1234',
1272
+ },
1273
+ ]);
1274
+ return {
1275
+ id: '3',
1276
+ choices: [
1277
+ {
1278
+ index: 0,
1279
+ finish_reason: 'stop',
1280
+ logprobs: null,
1281
+ message: {
1282
+ role: 'assistant',
1283
+ content: `it's raining`,
1284
+ },
1285
+ },
1286
+ ],
1287
+ created: Math.floor(Date.now() / 1000),
1288
+ model: 'gpt-3.5-turbo',
1289
+ object: 'chat.completion',
1290
+ };
1291
+ }),
1292
+ runner.done(),
1293
+ ]);
1294
+ expect(listener.messages).toEqual([
1295
+ { role: 'user', content: 'tell me what the weather is like' },
1296
+ {
1297
+ role: 'assistant',
1298
+ content: null,
1299
+ tool_calls: [{ type: 'function', id: '123', function: { name: 'get_weather', arguments: '' } }],
1300
+ },
1301
+ {
1302
+ role: 'tool',
1303
+ content: `Invalid tool_call: "get_weather". Available options are: "getWeather". Please try again`,
1304
+ tool_call_id: '123',
1305
+ },
1306
+ {
1307
+ role: 'assistant',
1308
+ content: null,
1309
+ tool_calls: [{ type: 'function', id: '1234', function: { name: 'getWeather', arguments: '' } }],
1310
+ },
1311
+ { role: 'tool', content: `it's raining`, tool_call_id: '1234' },
1312
+ { role: 'assistant', content: "it's raining" },
1313
+ ]);
1314
+ expect(listener.functionCallResults).toEqual([
1315
+ `Invalid tool_call: "get_weather". Available options are: "getWeather". Please try again`,
1316
+ `it's raining`,
1317
+ ]);
1318
+ await listener.sanityCheck();
1319
+ });
1320
+ });
1321
+ describe('runTools with stream: true', () => {
1322
+ test('successful flow', async () => {
1323
+ const { fetch, handleRequest } = mockStreamingChatCompletionFetch();
1324
+ const openai = new openai_1.default({ apiKey: 'something1234', baseURL: 'http://127.0.0.1:4010', fetch });
1325
+ const runner = openai.beta.chat.completions.runTools({
1326
+ stream: true,
1327
+ messages: [{ role: 'user', content: 'tell me what the weather is like' }],
1328
+ model: 'gpt-3.5-turbo',
1329
+ tools: [
1330
+ {
1331
+ type: 'function',
1332
+ function: {
1333
+ function: function getWeather() {
1334
+ return `it's raining`;
1335
+ },
1336
+ parameters: {},
1337
+ description: 'gets the weather',
1338
+ },
1339
+ },
1340
+ ],
1341
+ });
1342
+ const listener = new StreamingRunnerListener(runner);
1343
+ await Promise.all([
1344
+ handleRequest(async function* (request) {
1345
+ expect(request.messages).toEqual([{ role: 'user', content: 'tell me what the weather is like' }]);
1346
+ yield {
1347
+ id: '1',
1348
+ choices: [
1349
+ {
1350
+ index: 0,
1351
+ finish_reason: 'function_call',
1352
+ logprobs: null,
1353
+ delta: {
1354
+ role: 'assistant',
1355
+ content: null,
1356
+ tool_calls: [
1357
+ {
1358
+ type: 'function',
1359
+ index: 0,
1360
+ id: '123',
1361
+ function: {
1362
+ arguments: '',
1363
+ name: 'getWeather',
1364
+ },
1365
+ },
1366
+ ],
1367
+ },
1368
+ },
1369
+ ],
1370
+ created: Math.floor(Date.now() / 1000),
1371
+ model: 'gpt-3.5-turbo',
1372
+ object: 'chat.completion.chunk',
1373
+ };
1374
+ }),
1375
+ handleRequest(async function* (request) {
1376
+ expect(request.messages).toEqual([
1377
+ { role: 'user', content: 'tell me what the weather is like' },
1378
+ {
1379
+ role: 'assistant',
1380
+ content: null,
1381
+ tool_calls: [
1382
+ {
1383
+ type: 'function',
1384
+ id: '123',
1385
+ function: {
1386
+ arguments: '',
1387
+ name: 'getWeather',
1388
+ },
1389
+ },
1390
+ ],
1391
+ },
1392
+ {
1393
+ role: 'tool',
1394
+ content: `it's raining`,
1395
+ tool_call_id: '123',
1396
+ },
1397
+ ]);
1398
+ for (const choice of contentChoiceDeltas(`it's raining`)) {
1399
+ yield {
1400
+ id: '2',
1401
+ choices: [choice],
1402
+ created: Math.floor(Date.now() / 1000),
1403
+ model: 'gpt-3.5-turbo',
1404
+ object: 'chat.completion.chunk',
1405
+ };
1406
+ }
1407
+ }),
1408
+ runner.done(),
1409
+ ]);
1410
+ expect(listener.eventMessages).toEqual([
1411
+ {
1412
+ role: 'assistant',
1413
+ content: null,
1414
+ tool_calls: [
1415
+ {
1416
+ type: 'function',
1417
+ id: '123',
1418
+ function: {
1419
+ arguments: '',
1420
+ name: 'getWeather',
1421
+ },
1422
+ },
1423
+ ],
1424
+ },
1425
+ { role: 'tool', content: `it's raining`, tool_call_id: '123' },
1426
+ { role: 'assistant', content: "it's raining" },
1427
+ ]);
1428
+ expect(listener.eventFunctionCallResults).toEqual([`it's raining`]);
1429
+ await listener.sanityCheck();
1430
+ });
1431
+ test('flow with abort', async () => {
1432
+ const { fetch, handleRequest } = mockStreamingChatCompletionFetch();
1433
+ const openai = new openai_1.default({ apiKey: 'something1234', baseURL: 'http://127.0.0.1:4010', fetch });
1434
+ const controller = new AbortController();
1435
+ const runner = openai.beta.chat.completions.runTools({
1436
+ stream: true,
1437
+ messages: [{ role: 'user', content: 'tell me what the weather is like' }],
1438
+ model: 'gpt-3.5-turbo',
1439
+ tools: [
1440
+ {
1441
+ type: 'function',
1442
+ function: {
1443
+ function: function getWeather() {
1444
+ return `it's raining`;
1445
+ },
1446
+ parameters: {},
1447
+ description: 'gets the weather',
1448
+ },
1449
+ },
1450
+ ],
1451
+ }, { signal: controller.signal });
1452
+ runner.on('functionCallResult', () => controller.abort());
1453
+ const listener = new StreamingRunnerListener(runner);
1454
+ await handleRequest(async function* (request) {
1455
+ expect(request.messages).toEqual([{ role: 'user', content: 'tell me what the weather is like' }]);
1456
+ yield {
1457
+ id: '1',
1458
+ choices: [
1459
+ {
1460
+ index: 0,
1461
+ finish_reason: 'function_call',
1462
+ delta: {
1463
+ role: 'assistant',
1464
+ content: null,
1465
+ tool_calls: [
1466
+ {
1467
+ type: 'function',
1468
+ index: 0,
1469
+ id: '123',
1470
+ function: {
1471
+ arguments: '',
1472
+ name: 'getWeather',
1473
+ },
1474
+ },
1475
+ ],
1476
+ },
1477
+ },
1478
+ ],
1479
+ created: Math.floor(Date.now() / 1000),
1480
+ model: 'gpt-3.5-turbo',
1481
+ object: 'chat.completion.chunk',
1482
+ };
1483
+ });
1484
+ await runner.done().catch(() => { });
1485
+ expect(listener.eventMessages).toEqual([
1486
+ {
1487
+ role: 'assistant',
1488
+ content: null,
1489
+ tool_calls: [
1490
+ {
1491
+ type: 'function',
1492
+ id: '123',
1493
+ function: {
1494
+ arguments: '',
1495
+ name: 'getWeather',
1496
+ },
1497
+ },
1498
+ ],
1499
+ },
1500
+ { role: 'tool', content: `it's raining`, tool_call_id: '123' },
1501
+ ]);
1502
+ expect(listener.eventFunctionCallResults).toEqual([`it's raining`]);
1503
+ await listener.sanityCheck({ error: 'Request was aborted.' });
1504
+ expect(runner.aborted).toBe(true);
1505
+ });
1506
+ test('successful flow with parse', async () => {
1507
+ const { fetch, handleRequest } = mockStreamingChatCompletionFetch();
1508
+ const openai = new openai_1.default({ apiKey: 'something1234', baseURL: 'http://127.0.0.1:4010', fetch });
1509
+ const runner = openai.beta.chat.completions.runTools({
1510
+ stream: true,
1511
+ messages: [
1512
+ {
1513
+ role: 'user',
1514
+ content: 'can you tell me how many properties are in {"a": 1, "b": 2, "c": 3}',
1515
+ },
1516
+ ],
1517
+ model: 'gpt-3.5-turbo',
1518
+ tools: [
1519
+ new completions_1.ParsingToolFunction({
1520
+ name: 'numProperties',
1521
+ function: (obj) => String(Object.keys(obj).length),
1522
+ parameters: { type: 'object' },
1523
+ parse: (str) => {
1524
+ const result = JSON.parse(str);
1525
+ if (!(result instanceof Object) || Array.isArray(result)) {
1526
+ throw new Error('must be an object');
1527
+ }
1528
+ return result;
1529
+ },
1530
+ description: 'gets the number of properties on an object',
1531
+ }),
1532
+ ],
1533
+ });
1534
+ const listener = new StreamingRunnerListener(runner);
1535
+ await Promise.all([
1536
+ handleRequest(async function* (request) {
1537
+ expect(request.messages).toEqual([
1538
+ {
1539
+ role: 'user',
1540
+ content: 'can you tell me how many properties are in {"a": 1, "b": 2, "c": 3}',
1541
+ },
1542
+ ]);
1543
+ yield {
1544
+ id: '1',
1545
+ choices: [
1546
+ {
1547
+ index: 0,
1548
+ finish_reason: 'function_call',
1549
+ delta: {
1550
+ role: 'assistant',
1551
+ content: null,
1552
+ tool_calls: [
1553
+ {
1554
+ type: 'function',
1555
+ id: '123',
1556
+ index: 0,
1557
+ function: {
1558
+ arguments: '{"a": 1, "b": 2, "c": 3}',
1559
+ name: 'numProperties',
1560
+ },
1561
+ },
1562
+ ],
1563
+ },
1564
+ },
1565
+ ],
1566
+ created: Math.floor(Date.now() / 1000),
1567
+ model: 'gpt-3.5-turbo',
1568
+ object: 'chat.completion.chunk',
1569
+ };
1570
+ }),
1571
+ handleRequest(async function* (request) {
1572
+ expect(request.messages).toEqual([
1573
+ {
1574
+ role: 'user',
1575
+ content: 'can you tell me how many properties are in {"a": 1, "b": 2, "c": 3}',
1576
+ },
1577
+ {
1578
+ role: 'assistant',
1579
+ content: null,
1580
+ tool_calls: [
1581
+ {
1582
+ type: 'function',
1583
+ id: '123',
1584
+ function: {
1585
+ arguments: '{"a": 1, "b": 2, "c": 3}',
1586
+ name: 'numProperties',
1587
+ },
1588
+ },
1589
+ ],
1590
+ },
1591
+ {
1592
+ role: 'tool',
1593
+ content: '3',
1594
+ tool_call_id: '123',
1595
+ },
1596
+ ]);
1597
+ for (const choice of contentChoiceDeltas(`there are 3 properties in {"a": 1, "b": 2, "c": 3}`)) {
1598
+ yield {
1599
+ id: '2',
1600
+ choices: [choice],
1601
+ created: Math.floor(Date.now() / 1000),
1602
+ model: 'gpt-3.5-turbo',
1603
+ object: 'chat.completion.chunk',
1604
+ };
1605
+ }
1606
+ }),
1607
+ runner.done(),
1608
+ ]);
1609
+ expect(listener.eventMessages).toEqual([
1610
+ {
1611
+ role: 'assistant',
1612
+ content: null,
1613
+ tool_calls: [
1614
+ {
1615
+ type: 'function',
1616
+ id: '123',
1617
+ function: { name: 'numProperties', arguments: '{"a": 1, "b": 2, "c": 3}' },
1618
+ },
1619
+ ],
1620
+ },
1621
+ { role: 'tool', content: '3', tool_call_id: '123' },
1622
+ { role: 'assistant', content: 'there are 3 properties in {"a": 1, "b": 2, "c": 3}' },
1623
+ ]);
1624
+ expect(listener.eventFunctionCallResults).toEqual(['3']);
1625
+ await listener.sanityCheck();
1626
+ });
1627
+ test('flow with parse error', async () => {
1628
+ const { fetch, handleRequest } = mockStreamingChatCompletionFetch();
1629
+ const openai = new openai_1.default({ apiKey: 'something1234', baseURL: 'http://127.0.0.1:4010', fetch });
1630
+ const runner = openai.beta.chat.completions.runTools({
1631
+ stream: true,
1632
+ messages: [
1633
+ {
1634
+ role: 'user',
1635
+ content: 'can you tell me how many properties are in {"a": 1, "b": 2, "c": 3}',
1636
+ },
1637
+ ],
1638
+ model: 'gpt-3.5-turbo',
1639
+ tools: [
1640
+ new completions_1.ParsingToolFunction({
1641
+ name: 'numProperties',
1642
+ function: (obj) => String(Object.keys(obj).length),
1643
+ parameters: { type: 'object' },
1644
+ parse: (str) => {
1645
+ const result = JSON.parse(str);
1646
+ if (!(result instanceof Object) || Array.isArray(result)) {
1647
+ throw new Error('must be an object');
1648
+ }
1649
+ return result;
1650
+ },
1651
+ description: 'gets the number of properties on an object',
1652
+ }),
1653
+ ],
1654
+ });
1655
+ const listener = new StreamingRunnerListener(runner);
1656
+ await Promise.all([
1657
+ handleRequest(async function* (request) {
1658
+ expect(request.messages).toEqual([
1659
+ {
1660
+ role: 'user',
1661
+ content: 'can you tell me how many properties are in {"a": 1, "b": 2, "c": 3}',
1662
+ },
1663
+ ]);
1664
+ for (const choice of functionCallDeltas('[{"a": 1, "b": 2, "c": 3}]', {
1665
+ name: 'numProperties',
1666
+ id: '123',
1667
+ })) {
1668
+ yield {
1669
+ id: '1',
1670
+ choices: [choice],
1671
+ created: Math.floor(Date.now() / 1000),
1672
+ model: 'gpt-3.5-turbo',
1673
+ object: 'chat.completion.chunk',
1674
+ };
1675
+ }
1676
+ }),
1677
+ handleRequest(async function* (request) {
1678
+ expect(request.messages).toEqual([
1679
+ {
1680
+ role: 'user',
1681
+ content: 'can you tell me how many properties are in {"a": 1, "b": 2, "c": 3}',
1682
+ },
1683
+ {
1684
+ role: 'assistant',
1685
+ content: null,
1686
+ tool_calls: [
1687
+ {
1688
+ type: 'function',
1689
+ id: '123',
1690
+ function: {
1691
+ arguments: '[{"a": 1, "b": 2, "c": 3}]',
1692
+ name: 'numProperties',
1693
+ },
1694
+ },
1695
+ ],
1696
+ },
1697
+ {
1698
+ role: 'tool',
1699
+ content: `must be an object`,
1700
+ tool_call_id: '123',
1701
+ },
1702
+ ]);
1703
+ for (const choice of functionCallDeltas('{"a": 1, "b": 2, "c": 3}', {
1704
+ name: 'numProperties',
1705
+ id: '1234',
1706
+ })) {
1707
+ yield {
1708
+ id: '2',
1709
+ choices: [choice],
1710
+ created: Math.floor(Date.now() / 1000),
1711
+ model: 'gpt-3.5-turbo',
1712
+ object: 'chat.completion.chunk',
1713
+ };
1714
+ }
1715
+ }),
1716
+ handleRequest(async function* (request) {
1717
+ expect(request.messages).toEqual([
1718
+ {
1719
+ role: 'user',
1720
+ content: 'can you tell me how many properties are in {"a": 1, "b": 2, "c": 3}',
1721
+ },
1722
+ {
1723
+ role: 'assistant',
1724
+ content: null,
1725
+ tool_calls: [
1726
+ {
1727
+ type: 'function',
1728
+ id: '123',
1729
+ function: {
1730
+ arguments: '[{"a": 1, "b": 2, "c": 3}]',
1731
+ name: 'numProperties',
1732
+ },
1733
+ },
1734
+ ],
1735
+ },
1736
+ {
1737
+ role: 'tool',
1738
+ content: `must be an object`,
1739
+ tool_call_id: '123',
1740
+ },
1741
+ {
1742
+ role: 'assistant',
1743
+ content: null,
1744
+ tool_calls: [
1745
+ {
1746
+ type: 'function',
1747
+ id: '1234',
1748
+ function: {
1749
+ arguments: '{"a": 1, "b": 2, "c": 3}',
1750
+ name: 'numProperties',
1751
+ },
1752
+ },
1753
+ ],
1754
+ },
1755
+ {
1756
+ role: 'tool',
1757
+ content: '3',
1758
+ tool_call_id: '1234',
1759
+ },
1760
+ ]);
1761
+ for (const choice of contentChoiceDeltas(`there are 3 properties in {"a": 1, "b": 2, "c": 3}`)) {
1762
+ yield {
1763
+ id: '3',
1764
+ choices: [choice],
1765
+ created: Math.floor(Date.now() / 1000),
1766
+ model: 'gpt-3.5-turbo',
1767
+ object: 'chat.completion.chunk',
1768
+ };
1769
+ }
1770
+ }),
1771
+ runner.done(),
1772
+ ]);
1773
+ expect(listener.eventMessages).toEqual([
1774
+ {
1775
+ role: 'assistant',
1776
+ content: null,
1777
+ tool_calls: [
1778
+ {
1779
+ type: 'function',
1780
+ id: '123',
1781
+ function: { name: 'numProperties', arguments: '[{"a": 1, "b": 2, "c": 3}]' },
1782
+ },
1783
+ ],
1784
+ },
1785
+ { role: 'tool', content: `must be an object`, tool_call_id: '123' },
1786
+ {
1787
+ role: 'assistant',
1788
+ content: null,
1789
+ tool_calls: [
1790
+ {
1791
+ type: 'function',
1792
+ id: '1234',
1793
+ function: { name: 'numProperties', arguments: '{"a": 1, "b": 2, "c": 3}' },
1794
+ },
1795
+ ],
1796
+ },
1797
+ { role: 'tool', content: '3', tool_call_id: '1234' },
1798
+ { role: 'assistant', content: 'there are 3 properties in {"a": 1, "b": 2, "c": 3}' },
1799
+ ]);
1800
+ expect(listener.eventFunctionCallResults).toEqual([`must be an object`, '3']);
1801
+ await listener.sanityCheck();
1802
+ });
1803
+ test('single function call', async () => {
1804
+ const { fetch, handleRequest } = mockStreamingChatCompletionFetch();
1805
+ const openai = new openai_1.default({ apiKey: 'something1234', baseURL: 'http://127.0.0.1:4010', fetch });
1806
+ const runner = openai.beta.chat.completions.runTools({
1807
+ stream: true,
1808
+ messages: [{ role: 'user', content: 'tell me what the weather is like' }],
1809
+ model: 'gpt-3.5-turbo',
1810
+ tool_choice: {
1811
+ type: 'function',
1812
+ function: {
1813
+ name: 'getWeather',
1814
+ },
1815
+ },
1816
+ tools: [
1817
+ {
1818
+ type: 'function',
1819
+ function: {
1820
+ function: function getWeather() {
1821
+ return `it's raining`;
1822
+ },
1823
+ parameters: {},
1824
+ description: 'gets the weather',
1825
+ },
1826
+ },
1827
+ ],
1828
+ });
1829
+ const listener = new StreamingRunnerListener(runner);
1830
+ await Promise.all([
1831
+ handleRequest(async function* (request) {
1832
+ expect(request.messages).toEqual([{ role: 'user', content: 'tell me what the weather is like' }]);
1833
+ yield {
1834
+ id: '1',
1835
+ choices: [
1836
+ {
1837
+ index: 0,
1838
+ finish_reason: 'function_call',
1839
+ delta: {
1840
+ role: 'assistant',
1841
+ content: null,
1842
+ tool_calls: [
1843
+ {
1844
+ type: 'function',
1845
+ index: 0,
1846
+ id: '123',
1847
+ function: {
1848
+ arguments: '',
1849
+ name: 'getWeather',
1850
+ },
1851
+ },
1852
+ ],
1853
+ },
1854
+ },
1855
+ ],
1856
+ created: Math.floor(Date.now() / 1000),
1857
+ model: 'gpt-3.5-turbo',
1858
+ object: 'chat.completion.chunk',
1859
+ };
1860
+ }),
1861
+ runner.done(),
1862
+ ]);
1863
+ expect(listener.eventMessages).toEqual([
1864
+ {
1865
+ role: 'assistant',
1866
+ content: null,
1867
+ tool_calls: [
1868
+ {
1869
+ type: 'function',
1870
+ id: '123',
1871
+ function: {
1872
+ arguments: '',
1873
+ name: 'getWeather',
1874
+ },
1875
+ },
1876
+ ],
1877
+ },
1878
+ { role: 'tool', tool_call_id: '123', content: `it's raining` },
1879
+ ]);
1880
+ expect(listener.eventFunctionCallResults).toEqual([`it's raining`]);
1881
+ await listener.sanityCheck();
1882
+ });
1883
+ test('wrong function name', async () => {
1884
+ const { fetch, handleRequest } = mockStreamingChatCompletionFetch();
1885
+ const openai = new openai_1.default({ apiKey: 'something1234', baseURL: 'http://127.0.0.1:4010', fetch });
1886
+ const runner = openai.beta.chat.completions.runTools({
1887
+ stream: true,
1888
+ messages: [{ role: 'user', content: 'tell me what the weather is like' }],
1889
+ model: 'gpt-3.5-turbo',
1890
+ tools: [
1891
+ {
1892
+ type: 'function',
1893
+ function: {
1894
+ function: function getWeather() {
1895
+ return `it's raining`;
1896
+ },
1897
+ parameters: {},
1898
+ description: 'gets the weather',
1899
+ },
1900
+ },
1901
+ ],
1902
+ });
1903
+ const listener = new StreamingRunnerListener(runner);
1904
+ await Promise.all([
1905
+ handleRequest(async function* (request) {
1906
+ expect(request.messages).toEqual([{ role: 'user', content: 'tell me what the weather is like' }]);
1907
+ yield {
1908
+ id: '1',
1909
+ choices: [
1910
+ {
1911
+ index: 0,
1912
+ finish_reason: 'function_call',
1913
+ delta: {
1914
+ role: 'assistant',
1915
+ content: null,
1916
+ tool_calls: [
1917
+ {
1918
+ type: 'function',
1919
+ index: 0,
1920
+ id: '123',
1921
+ function: {
1922
+ arguments: '',
1923
+ name: 'get_weather',
1924
+ },
1925
+ },
1926
+ ],
1927
+ },
1928
+ },
1929
+ ],
1930
+ created: Math.floor(Date.now() / 1000),
1931
+ model: 'gpt-3.5-turbo',
1932
+ object: 'chat.completion.chunk',
1933
+ };
1934
+ }),
1935
+ handleRequest(async function* (request) {
1936
+ expect(request.messages).toEqual([
1937
+ { role: 'user', content: 'tell me what the weather is like' },
1938
+ {
1939
+ role: 'assistant',
1940
+ content: null,
1941
+ tool_calls: [
1942
+ {
1943
+ type: 'function',
1944
+ id: '123',
1945
+ function: {
1946
+ arguments: '',
1947
+ name: 'get_weather',
1948
+ },
1949
+ },
1950
+ ],
1951
+ },
1952
+ {
1953
+ role: 'tool',
1954
+ content: `Invalid tool_call: "get_weather". Available options are: "getWeather". Please try again`,
1955
+ tool_call_id: '123',
1956
+ },
1957
+ ]);
1958
+ yield {
1959
+ id: '2',
1960
+ choices: [
1961
+ {
1962
+ index: 0,
1963
+ finish_reason: 'function_call',
1964
+ logprobs: null,
1965
+ delta: {
1966
+ role: 'assistant',
1967
+ content: null,
1968
+ tool_calls: [
1969
+ {
1970
+ type: 'function',
1971
+ index: 0,
1972
+ id: '1234',
1973
+ function: {
1974
+ arguments: '',
1975
+ name: 'getWeather',
1976
+ },
1977
+ },
1978
+ ],
1979
+ },
1980
+ },
1981
+ ],
1982
+ created: Math.floor(Date.now() / 1000),
1983
+ model: 'gpt-3.5-turbo',
1984
+ object: 'chat.completion.chunk',
1985
+ };
1986
+ }),
1987
+ handleRequest(async function* (request) {
1988
+ expect(request.messages).toEqual([
1989
+ { role: 'user', content: 'tell me what the weather is like' },
1990
+ {
1991
+ role: 'assistant',
1992
+ content: null,
1993
+ tool_calls: [
1994
+ {
1995
+ type: 'function',
1996
+ id: '123',
1997
+ function: {
1998
+ arguments: '',
1999
+ name: 'get_weather',
2000
+ },
2001
+ },
2002
+ ],
2003
+ },
2004
+ {
2005
+ role: 'tool',
2006
+ content: `Invalid tool_call: "get_weather". Available options are: "getWeather". Please try again`,
2007
+ tool_call_id: '123',
2008
+ },
2009
+ {
2010
+ role: 'assistant',
2011
+ content: null,
2012
+ tool_calls: [
2013
+ {
2014
+ type: 'function',
2015
+ id: '1234',
2016
+ function: {
2017
+ arguments: '',
2018
+ name: 'getWeather',
2019
+ },
2020
+ },
2021
+ ],
2022
+ },
2023
+ {
2024
+ role: 'tool',
2025
+ content: `it's raining`,
2026
+ tool_call_id: '1234',
2027
+ },
2028
+ ]);
2029
+ for (const choice of contentChoiceDeltas(`it's raining`)) {
2030
+ yield {
2031
+ id: '3',
2032
+ choices: [choice],
2033
+ created: Math.floor(Date.now() / 1000),
2034
+ model: 'gpt-3.5-turbo',
2035
+ object: 'chat.completion.chunk',
2036
+ };
2037
+ }
2038
+ }),
2039
+ runner.done(),
2040
+ ]);
2041
+ expect(listener.eventMessages).toEqual([
2042
+ {
2043
+ role: 'assistant',
2044
+ content: null,
2045
+ tool_calls: [
2046
+ {
2047
+ type: 'function',
2048
+ id: '123',
2049
+ function: {
2050
+ arguments: '',
2051
+ name: 'get_weather',
2052
+ },
2053
+ },
2054
+ ],
2055
+ },
2056
+ {
2057
+ role: 'tool',
2058
+ content: `Invalid tool_call: "get_weather". Available options are: "getWeather". Please try again`,
2059
+ tool_call_id: '123',
2060
+ },
2061
+ {
2062
+ role: 'assistant',
2063
+ content: null,
2064
+ tool_calls: [
2065
+ {
2066
+ type: 'function',
2067
+ id: '1234',
2068
+ function: {
2069
+ arguments: '',
2070
+ name: 'getWeather',
2071
+ },
2072
+ },
2073
+ ],
2074
+ },
2075
+ { role: 'tool', content: `it's raining`, tool_call_id: '1234' },
2076
+ { role: 'assistant', content: "it's raining" },
2077
+ ]);
2078
+ expect(listener.eventFunctionCallResults).toEqual([
2079
+ `Invalid tool_call: "get_weather". Available options are: "getWeather". Please try again`,
2080
+ `it's raining`,
2081
+ ]);
2082
+ await listener.sanityCheck();
2083
+ });
2084
+ });
2085
+ describe('stream', () => {
2086
+ test('successful flow', async () => {
2087
+ const { fetch, handleRequest } = mockStreamingChatCompletionFetch();
2088
+ const openai = new openai_1.default({ apiKey: 'something1234', baseURL: 'http://127.0.0.1:4010', fetch });
2089
+ const runner = openai.beta.chat.completions.stream({
2090
+ stream: true,
2091
+ messages: [{ role: 'user', content: 'tell me what the weather is like' }],
2092
+ model: 'gpt-3.5-turbo',
2093
+ });
2094
+ const listener = new StreamingRunnerListener(runner);
2095
+ await Promise.all([
2096
+ handleRequest(async function* (request) {
2097
+ expect(request.messages).toEqual([{ role: 'user', content: 'tell me what the weather is like' }]);
2098
+ for (const choice of contentChoiceDeltas(`The weather is great today!`)) {
2099
+ yield {
2100
+ id: '1',
2101
+ choices: [choice],
2102
+ created: Math.floor(Date.now() / 1000),
2103
+ model: 'gpt-3.5-turbo',
2104
+ object: 'chat.completion.chunk',
2105
+ };
2106
+ }
2107
+ }),
2108
+ runner.done(),
2109
+ ]);
2110
+ expect(listener.finalMessage).toEqual({ role: 'assistant', content: 'The weather is great today!' });
2111
+ await listener.sanityCheck();
2112
+ });
2113
+ test('toReadableStream and fromReadableStream', async () => {
2114
+ const { fetch, handleRequest } = mockStreamingChatCompletionFetch();
2115
+ const openai = new openai_1.default({ apiKey: 'something1234', baseURL: 'http://127.0.0.1:4010', fetch });
2116
+ const runner = openai.beta.chat.completions.stream({
2117
+ stream: true,
2118
+ messages: [{ role: 'user', content: 'tell me what the weather is like' }],
2119
+ model: 'gpt-3.5-turbo',
2120
+ });
2121
+ const proxied = completions_1.ChatCompletionStreamingRunner.fromReadableStream(runner.toReadableStream());
2122
+ const listener = new StreamingRunnerListener(proxied);
2123
+ await Promise.all([
2124
+ handleRequest(async function* (request) {
2125
+ expect(request.messages).toEqual([{ role: 'user', content: 'tell me what the weather is like' }]);
2126
+ for (const choice of contentChoiceDeltas(`The weather is great today!`)) {
2127
+ yield {
2128
+ id: '1',
2129
+ choices: [choice],
2130
+ created: Math.floor(Date.now() / 1000),
2131
+ model: 'gpt-3.5-turbo',
2132
+ object: 'chat.completion.chunk',
2133
+ };
2134
+ }
2135
+ }),
2136
+ proxied.done(),
2137
+ ]);
2138
+ expect(listener.finalMessage).toEqual({ role: 'assistant', content: 'The weather is great today!' });
2139
+ await listener.sanityCheck();
2140
+ });
2141
+ test('handles network errors', async () => {
2142
+ const { fetch, handleRequest } = mockFetch();
2143
+ const openai = new openai_1.default({ apiKey: '...', fetch });
2144
+ const stream = openai.beta.chat.completions.stream({
2145
+ max_tokens: 1024,
2146
+ model: 'gpt-3.5-turbo',
2147
+ messages: [{ role: 'user', content: 'Say hello there!' }],
2148
+ }, { maxRetries: 0 });
2149
+ handleRequest(async () => {
2150
+ throw new Error('mock request error');
2151
+ }).catch(() => { });
2152
+ async function runStream() {
2153
+ await stream.done();
2154
+ }
2155
+ await expect(runStream).rejects.toThrow(error_1.APIConnectionError);
2156
+ });
2157
+ test('handles network errors on async iterator', async () => {
2158
+ const { fetch, handleRequest } = mockFetch();
2159
+ const openai = new openai_1.default({ apiKey: '...', fetch });
2160
+ const stream = openai.beta.chat.completions.stream({
2161
+ max_tokens: 1024,
2162
+ model: 'gpt-3.5-turbo',
2163
+ messages: [{ role: 'user', content: 'Say hello there!' }],
2164
+ }, { maxRetries: 0 });
2165
+ handleRequest(async () => {
2166
+ throw new Error('mock request error');
2167
+ }).catch(() => { });
2168
+ async function runStream() {
2169
+ for await (const _event of stream) {
2170
+ continue;
2171
+ }
2172
+ }
2173
+ await expect(runStream).rejects.toThrow(error_1.APIConnectionError);
2174
+ });
2175
+ });
2176
+ });
2177
+ //# sourceMappingURL=ChatCompletionRunFunctions.test.js.map