notdiamond 1.1.4 → 2.0.0-rc10

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 (441) hide show
  1. package/CHANGELOG.md +143 -0
  2. package/LICENSE +201 -0
  3. package/README.md +642 -96
  4. package/api-promise.d.mts +2 -0
  5. package/api-promise.d.mts.map +1 -0
  6. package/api-promise.d.ts +2 -0
  7. package/api-promise.d.ts.map +1 -0
  8. package/api-promise.js +6 -0
  9. package/api-promise.js.map +1 -0
  10. package/api-promise.mjs +2 -0
  11. package/api-promise.mjs.map +1 -0
  12. package/client.d.mts +192 -0
  13. package/client.d.mts.map +1 -0
  14. package/client.d.ts +192 -0
  15. package/client.d.ts.map +1 -0
  16. package/client.js +463 -0
  17. package/client.js.map +1 -0
  18. package/client.mjs +459 -0
  19. package/client.mjs.map +1 -0
  20. package/core/api-promise.d.mts +46 -0
  21. package/core/api-promise.d.mts.map +1 -0
  22. package/core/api-promise.d.ts +46 -0
  23. package/core/api-promise.d.ts.map +1 -0
  24. package/core/api-promise.js +74 -0
  25. package/core/api-promise.js.map +1 -0
  26. package/core/api-promise.mjs +70 -0
  27. package/core/api-promise.mjs.map +1 -0
  28. package/core/error.d.mts +46 -0
  29. package/core/error.d.mts.map +1 -0
  30. package/core/error.d.ts +46 -0
  31. package/core/error.d.ts.map +1 -0
  32. package/core/error.js +113 -0
  33. package/core/error.js.map +1 -0
  34. package/core/error.mjs +97 -0
  35. package/core/error.mjs.map +1 -0
  36. package/core/resource.d.mts +6 -0
  37. package/core/resource.d.mts.map +1 -0
  38. package/core/resource.d.ts +6 -0
  39. package/core/resource.d.ts.map +1 -0
  40. package/core/resource.js +11 -0
  41. package/core/resource.js.map +1 -0
  42. package/core/resource.mjs +7 -0
  43. package/core/resource.mjs.map +1 -0
  44. package/core/uploads.d.mts +3 -0
  45. package/core/uploads.d.mts.map +1 -0
  46. package/core/uploads.d.ts +3 -0
  47. package/core/uploads.d.ts.map +1 -0
  48. package/core/uploads.js +6 -0
  49. package/core/uploads.js.map +1 -0
  50. package/core/uploads.mjs +2 -0
  51. package/core/uploads.mjs.map +1 -0
  52. package/error.d.mts +2 -0
  53. package/error.d.mts.map +1 -0
  54. package/error.d.ts +2 -0
  55. package/error.d.ts.map +1 -0
  56. package/error.js +6 -0
  57. package/error.js.map +1 -0
  58. package/error.mjs +2 -0
  59. package/error.mjs.map +1 -0
  60. package/index.d.mts +6 -0
  61. package/index.d.mts.map +1 -0
  62. package/index.d.ts +6 -0
  63. package/index.d.ts.map +1 -0
  64. package/index.js +30 -0
  65. package/index.js.map +1 -0
  66. package/index.mjs +7 -0
  67. package/index.mjs.map +1 -0
  68. package/internal/builtin-types.d.mts +73 -0
  69. package/internal/builtin-types.d.mts.map +1 -0
  70. package/internal/builtin-types.d.ts +73 -0
  71. package/internal/builtin-types.d.ts.map +1 -0
  72. package/internal/builtin-types.js +4 -0
  73. package/internal/builtin-types.js.map +1 -0
  74. package/internal/builtin-types.mjs +3 -0
  75. package/internal/builtin-types.mjs.map +1 -0
  76. package/internal/detect-platform.d.mts +15 -0
  77. package/internal/detect-platform.d.mts.map +1 -0
  78. package/internal/detect-platform.d.ts +15 -0
  79. package/internal/detect-platform.d.ts.map +1 -0
  80. package/internal/detect-platform.js +162 -0
  81. package/internal/detect-platform.js.map +1 -0
  82. package/internal/detect-platform.mjs +157 -0
  83. package/internal/detect-platform.mjs.map +1 -0
  84. package/internal/errors.d.mts +3 -0
  85. package/internal/errors.d.mts.map +1 -0
  86. package/internal/errors.d.ts +3 -0
  87. package/internal/errors.d.ts.map +1 -0
  88. package/internal/errors.js +41 -0
  89. package/internal/errors.js.map +1 -0
  90. package/internal/errors.mjs +36 -0
  91. package/internal/errors.mjs.map +1 -0
  92. package/internal/headers.d.mts +20 -0
  93. package/internal/headers.d.mts.map +1 -0
  94. package/internal/headers.d.ts +20 -0
  95. package/internal/headers.d.ts.map +1 -0
  96. package/internal/headers.js +79 -0
  97. package/internal/headers.js.map +1 -0
  98. package/internal/headers.mjs +74 -0
  99. package/internal/headers.mjs.map +1 -0
  100. package/internal/parse.d.mts +12 -0
  101. package/internal/parse.d.mts.map +1 -0
  102. package/internal/parse.d.ts +12 -0
  103. package/internal/parse.d.ts.map +1 -0
  104. package/internal/parse.js +35 -0
  105. package/internal/parse.js.map +1 -0
  106. package/internal/parse.mjs +32 -0
  107. package/internal/parse.mjs.map +1 -0
  108. package/internal/qs/formats.d.mts +7 -0
  109. package/internal/qs/formats.d.mts.map +1 -0
  110. package/internal/qs/formats.d.ts +7 -0
  111. package/internal/qs/formats.d.ts.map +1 -0
  112. package/internal/qs/formats.js +13 -0
  113. package/internal/qs/formats.js.map +1 -0
  114. package/internal/qs/formats.mjs +9 -0
  115. package/internal/qs/formats.mjs.map +1 -0
  116. package/internal/qs/index.d.mts +10 -0
  117. package/internal/qs/index.d.mts.map +1 -0
  118. package/internal/qs/index.d.ts +10 -0
  119. package/internal/qs/index.d.ts.map +1 -0
  120. package/internal/qs/index.js +14 -0
  121. package/internal/qs/index.js.map +1 -0
  122. package/internal/qs/index.mjs +10 -0
  123. package/internal/qs/index.mjs.map +1 -0
  124. package/internal/qs/stringify.d.mts +3 -0
  125. package/internal/qs/stringify.d.mts.map +1 -0
  126. package/internal/qs/stringify.d.ts +3 -0
  127. package/internal/qs/stringify.d.ts.map +1 -0
  128. package/internal/qs/stringify.js +277 -0
  129. package/internal/qs/stringify.js.map +1 -0
  130. package/internal/qs/stringify.mjs +274 -0
  131. package/internal/qs/stringify.mjs.map +1 -0
  132. package/internal/qs/types.d.mts +57 -0
  133. package/internal/qs/types.d.mts.map +1 -0
  134. package/internal/qs/types.d.ts +57 -0
  135. package/internal/qs/types.d.ts.map +1 -0
  136. package/internal/qs/types.js +3 -0
  137. package/internal/qs/types.js.map +1 -0
  138. package/internal/qs/types.mjs +2 -0
  139. package/internal/qs/types.mjs.map +1 -0
  140. package/internal/qs/utils.d.mts +15 -0
  141. package/internal/qs/utils.d.mts.map +1 -0
  142. package/internal/qs/utils.d.ts +15 -0
  143. package/internal/qs/utils.d.ts.map +1 -0
  144. package/internal/qs/utils.js +230 -0
  145. package/internal/qs/utils.js.map +1 -0
  146. package/internal/qs/utils.mjs +217 -0
  147. package/internal/qs/utils.mjs.map +1 -0
  148. package/internal/request-options.d.mts +75 -0
  149. package/internal/request-options.d.mts.map +1 -0
  150. package/internal/request-options.d.ts +75 -0
  151. package/internal/request-options.d.ts.map +1 -0
  152. package/internal/request-options.js +14 -0
  153. package/internal/request-options.js.map +1 -0
  154. package/internal/request-options.mjs +10 -0
  155. package/internal/request-options.mjs.map +1 -0
  156. package/internal/shim-types.d.mts +17 -0
  157. package/internal/shim-types.d.mts.map +1 -0
  158. package/internal/shim-types.d.ts +17 -0
  159. package/internal/shim-types.d.ts.map +1 -0
  160. package/internal/shim-types.js +4 -0
  161. package/internal/shim-types.js.map +1 -0
  162. package/internal/shim-types.mjs +3 -0
  163. package/internal/shim-types.mjs.map +1 -0
  164. package/internal/shims.d.mts +20 -0
  165. package/internal/shims.d.mts.map +1 -0
  166. package/internal/shims.d.ts +20 -0
  167. package/internal/shims.d.ts.map +1 -0
  168. package/internal/shims.js +92 -0
  169. package/internal/shims.js.map +1 -0
  170. package/internal/shims.mjs +85 -0
  171. package/internal/shims.mjs.map +1 -0
  172. package/internal/to-file.d.mts +45 -0
  173. package/internal/to-file.d.mts.map +1 -0
  174. package/internal/to-file.d.ts +45 -0
  175. package/internal/to-file.d.ts.map +1 -0
  176. package/internal/to-file.js +91 -0
  177. package/internal/to-file.js.map +1 -0
  178. package/internal/to-file.mjs +88 -0
  179. package/internal/to-file.mjs.map +1 -0
  180. package/internal/tslib.js +81 -0
  181. package/internal/tslib.mjs +17 -0
  182. package/internal/types.d.mts +69 -0
  183. package/internal/types.d.mts.map +1 -0
  184. package/internal/types.d.ts +69 -0
  185. package/internal/types.d.ts.map +1 -0
  186. package/internal/types.js +4 -0
  187. package/internal/types.js.map +1 -0
  188. package/internal/types.mjs +3 -0
  189. package/internal/types.mjs.map +1 -0
  190. package/internal/uploads.d.mts +42 -0
  191. package/internal/uploads.d.mts.map +1 -0
  192. package/internal/uploads.d.ts +42 -0
  193. package/internal/uploads.d.ts.map +1 -0
  194. package/internal/uploads.js +141 -0
  195. package/internal/uploads.js.map +1 -0
  196. package/internal/uploads.mjs +131 -0
  197. package/internal/uploads.mjs.map +1 -0
  198. package/internal/utils/base64.d.mts +3 -0
  199. package/internal/utils/base64.d.mts.map +1 -0
  200. package/internal/utils/base64.d.ts +3 -0
  201. package/internal/utils/base64.d.ts.map +1 -0
  202. package/internal/utils/base64.js +38 -0
  203. package/internal/utils/base64.js.map +1 -0
  204. package/internal/utils/base64.mjs +33 -0
  205. package/internal/utils/base64.mjs.map +1 -0
  206. package/internal/utils/bytes.d.mts +4 -0
  207. package/internal/utils/bytes.d.mts.map +1 -0
  208. package/internal/utils/bytes.d.ts +4 -0
  209. package/internal/utils/bytes.d.ts.map +1 -0
  210. package/internal/utils/bytes.js +31 -0
  211. package/internal/utils/bytes.js.map +1 -0
  212. package/internal/utils/bytes.mjs +26 -0
  213. package/internal/utils/bytes.mjs.map +1 -0
  214. package/internal/utils/env.d.mts +9 -0
  215. package/internal/utils/env.d.mts.map +1 -0
  216. package/internal/utils/env.d.ts +9 -0
  217. package/internal/utils/env.d.ts.map +1 -0
  218. package/internal/utils/env.js +24 -0
  219. package/internal/utils/env.js.map +1 -0
  220. package/internal/utils/env.mjs +20 -0
  221. package/internal/utils/env.mjs.map +1 -0
  222. package/internal/utils/log.d.mts +37 -0
  223. package/internal/utils/log.d.mts.map +1 -0
  224. package/internal/utils/log.d.ts +37 -0
  225. package/internal/utils/log.d.ts.map +1 -0
  226. package/internal/utils/log.js +85 -0
  227. package/internal/utils/log.js.map +1 -0
  228. package/internal/utils/log.mjs +79 -0
  229. package/internal/utils/log.mjs.map +1 -0
  230. package/internal/utils/path.d.mts +15 -0
  231. package/internal/utils/path.d.mts.map +1 -0
  232. package/internal/utils/path.d.ts +15 -0
  233. package/internal/utils/path.d.ts.map +1 -0
  234. package/internal/utils/path.js +79 -0
  235. package/internal/utils/path.js.map +1 -0
  236. package/internal/utils/path.mjs +74 -0
  237. package/internal/utils/path.mjs.map +1 -0
  238. package/internal/utils/sleep.d.mts +2 -0
  239. package/internal/utils/sleep.d.mts.map +1 -0
  240. package/internal/utils/sleep.d.ts +2 -0
  241. package/internal/utils/sleep.d.ts.map +1 -0
  242. package/internal/utils/sleep.js +7 -0
  243. package/internal/utils/sleep.js.map +1 -0
  244. package/internal/utils/sleep.mjs +3 -0
  245. package/internal/utils/sleep.mjs.map +1 -0
  246. package/internal/utils/uuid.d.mts +5 -0
  247. package/internal/utils/uuid.d.mts.map +1 -0
  248. package/internal/utils/uuid.d.ts +5 -0
  249. package/internal/utils/uuid.d.ts.map +1 -0
  250. package/internal/utils/uuid.js +19 -0
  251. package/internal/utils/uuid.js.map +1 -0
  252. package/internal/utils/uuid.mjs +15 -0
  253. package/internal/utils/uuid.mjs.map +1 -0
  254. package/internal/utils/values.d.mts +18 -0
  255. package/internal/utils/values.d.mts.map +1 -0
  256. package/internal/utils/values.d.ts +18 -0
  257. package/internal/utils/values.d.ts.map +1 -0
  258. package/internal/utils/values.js +112 -0
  259. package/internal/utils/values.js.map +1 -0
  260. package/internal/utils/values.mjs +94 -0
  261. package/internal/utils/values.mjs.map +1 -0
  262. package/internal/utils.d.mts +7 -0
  263. package/internal/utils.d.mts.map +1 -0
  264. package/internal/utils.d.ts +7 -0
  265. package/internal/utils.d.ts.map +1 -0
  266. package/internal/utils.js +11 -0
  267. package/internal/utils.js.map +1 -0
  268. package/internal/utils.mjs +8 -0
  269. package/internal/utils.mjs.map +1 -0
  270. package/package.json +129 -123
  271. package/resource.d.mts +2 -0
  272. package/resource.d.mts.map +1 -0
  273. package/resource.d.ts +2 -0
  274. package/resource.d.ts.map +1 -0
  275. package/resource.js +6 -0
  276. package/resource.js.map +1 -0
  277. package/resource.mjs +2 -0
  278. package/resource.mjs.map +1 -0
  279. package/resources/custom-router.d.mts +145 -0
  280. package/resources/custom-router.d.mts.map +1 -0
  281. package/resources/custom-router.d.ts +145 -0
  282. package/resources/custom-router.d.ts.map +1 -0
  283. package/resources/custom-router.js +83 -0
  284. package/resources/custom-router.js.map +1 -0
  285. package/resources/custom-router.mjs +79 -0
  286. package/resources/custom-router.mjs.map +1 -0
  287. package/resources/index.d.mts +7 -0
  288. package/resources/index.d.mts.map +1 -0
  289. package/resources/index.d.ts +7 -0
  290. package/resources/index.d.ts.map +1 -0
  291. package/resources/index.js +17 -0
  292. package/resources/index.js.map +1 -0
  293. package/resources/index.mjs +8 -0
  294. package/resources/index.mjs.map +1 -0
  295. package/resources/model-router.d.mts +196 -0
  296. package/resources/model-router.d.mts.map +1 -0
  297. package/resources/model-router.d.ts +196 -0
  298. package/resources/model-router.d.ts.map +1 -0
  299. package/resources/model-router.js +70 -0
  300. package/resources/model-router.js.map +1 -0
  301. package/resources/model-router.mjs +66 -0
  302. package/resources/model-router.mjs.map +1 -0
  303. package/resources/models.d.mts +110 -0
  304. package/resources/models.d.mts.map +1 -0
  305. package/resources/models.d.ts +110 -0
  306. package/resources/models.d.ts.map +1 -0
  307. package/resources/models.js +49 -0
  308. package/resources/models.js.map +1 -0
  309. package/resources/models.mjs +45 -0
  310. package/resources/models.mjs.map +1 -0
  311. package/resources/preferences.d.mts +97 -0
  312. package/resources/preferences.d.mts.map +1 -0
  313. package/resources/preferences.d.ts +97 -0
  314. package/resources/preferences.d.ts.map +1 -0
  315. package/resources/preferences.js +70 -0
  316. package/resources/preferences.js.map +1 -0
  317. package/resources/preferences.mjs +66 -0
  318. package/resources/preferences.mjs.map +1 -0
  319. package/resources/prompt-adaptation.d.mts +679 -0
  320. package/resources/prompt-adaptation.d.mts.map +1 -0
  321. package/resources/prompt-adaptation.d.ts +679 -0
  322. package/resources/prompt-adaptation.d.ts.map +1 -0
  323. package/resources/prompt-adaptation.js +266 -0
  324. package/resources/prompt-adaptation.js.map +1 -0
  325. package/resources/prompt-adaptation.mjs +262 -0
  326. package/resources/prompt-adaptation.mjs.map +1 -0
  327. package/resources/report/index.d.mts +3 -0
  328. package/resources/report/index.d.mts.map +1 -0
  329. package/resources/report/index.d.ts +3 -0
  330. package/resources/report/index.d.ts.map +1 -0
  331. package/resources/report/index.js +9 -0
  332. package/resources/report/index.js.map +1 -0
  333. package/resources/report/index.mjs +4 -0
  334. package/resources/report/index.mjs.map +1 -0
  335. package/resources/report/metrics.d.mts +87 -0
  336. package/resources/report/metrics.d.mts.map +1 -0
  337. package/resources/report/metrics.d.ts +87 -0
  338. package/resources/report/metrics.d.ts.map +1 -0
  339. package/resources/report/metrics.js +57 -0
  340. package/resources/report/metrics.js.map +1 -0
  341. package/resources/report/metrics.mjs +53 -0
  342. package/resources/report/metrics.mjs.map +1 -0
  343. package/resources/report/report.d.mts +10 -0
  344. package/resources/report/report.d.mts.map +1 -0
  345. package/resources/report/report.d.ts +10 -0
  346. package/resources/report/report.d.ts.map +1 -0
  347. package/resources/report/report.js +17 -0
  348. package/resources/report/report.js.map +1 -0
  349. package/resources/report/report.mjs +12 -0
  350. package/resources/report/report.mjs.map +1 -0
  351. package/resources/report.d.mts +2 -0
  352. package/resources/report.d.mts.map +1 -0
  353. package/resources/report.d.ts +2 -0
  354. package/resources/report.d.ts.map +1 -0
  355. package/resources/report.js +6 -0
  356. package/resources/report.js.map +1 -0
  357. package/resources/report.mjs +3 -0
  358. package/resources/report.mjs.map +1 -0
  359. package/resources.d.mts +2 -0
  360. package/resources.d.mts.map +1 -0
  361. package/resources.d.ts +2 -0
  362. package/resources.d.ts.map +1 -0
  363. package/resources.js +5 -0
  364. package/resources.js.map +1 -0
  365. package/resources.mjs +2 -0
  366. package/resources.mjs.map +1 -0
  367. package/src/api-promise.ts +2 -0
  368. package/src/client.ts +791 -0
  369. package/src/core/README.md +3 -0
  370. package/src/core/api-promise.ts +92 -0
  371. package/src/core/error.ts +130 -0
  372. package/src/core/resource.ts +11 -0
  373. package/src/core/uploads.ts +2 -0
  374. package/src/error.ts +2 -0
  375. package/src/index.ts +22 -0
  376. package/src/internal/README.md +3 -0
  377. package/src/internal/builtin-types.ts +93 -0
  378. package/src/internal/detect-platform.ts +196 -0
  379. package/src/internal/errors.ts +33 -0
  380. package/src/internal/headers.ts +97 -0
  381. package/src/internal/parse.ts +50 -0
  382. package/src/internal/qs/LICENSE.md +13 -0
  383. package/src/internal/qs/README.md +3 -0
  384. package/src/internal/qs/formats.ts +10 -0
  385. package/src/internal/qs/index.ts +13 -0
  386. package/src/internal/qs/stringify.ts +385 -0
  387. package/src/internal/qs/types.ts +71 -0
  388. package/src/internal/qs/utils.ts +265 -0
  389. package/src/internal/request-options.ts +91 -0
  390. package/src/internal/shim-types.ts +26 -0
  391. package/src/internal/shims.ts +107 -0
  392. package/src/internal/to-file.ts +154 -0
  393. package/src/internal/types.ts +95 -0
  394. package/src/internal/uploads.ts +187 -0
  395. package/src/internal/utils/base64.ts +40 -0
  396. package/src/internal/utils/bytes.ts +32 -0
  397. package/src/internal/utils/env.ts +20 -0
  398. package/src/internal/utils/log.ts +126 -0
  399. package/src/internal/utils/path.ts +88 -0
  400. package/src/internal/utils/sleep.ts +3 -0
  401. package/src/internal/utils/uuid.ts +17 -0
  402. package/src/internal/utils/values.ts +105 -0
  403. package/src/internal/utils.ts +8 -0
  404. package/src/lib/.keep +4 -0
  405. package/src/resource.ts +2 -0
  406. package/src/resources/custom-router.ts +168 -0
  407. package/src/resources/index.ts +33 -0
  408. package/src/resources/model-router.ts +224 -0
  409. package/src/resources/models.ts +133 -0
  410. package/src/resources/preferences.ts +121 -0
  411. package/src/resources/prompt-adaptation.ts +770 -0
  412. package/src/resources/report/index.ts +4 -0
  413. package/src/resources/report/metrics.ts +99 -0
  414. package/src/resources/report/report.ts +19 -0
  415. package/src/resources/report.ts +3 -0
  416. package/src/resources.ts +1 -0
  417. package/src/tsconfig.json +11 -0
  418. package/src/uploads.ts +2 -0
  419. package/src/version.ts +1 -0
  420. package/uploads.d.mts +2 -0
  421. package/uploads.d.mts.map +1 -0
  422. package/uploads.d.ts +2 -0
  423. package/uploads.d.ts.map +1 -0
  424. package/uploads.js +6 -0
  425. package/uploads.js.map +1 -0
  426. package/uploads.mjs +2 -0
  427. package/uploads.mjs.map +1 -0
  428. package/version.d.mts +2 -0
  429. package/version.d.mts.map +1 -0
  430. package/version.d.ts +2 -0
  431. package/version.d.ts.map +1 -0
  432. package/version.js +5 -0
  433. package/version.js.map +1 -0
  434. package/version.mjs +2 -0
  435. package/version.mjs.map +1 -0
  436. package/LICENCE +0 -21
  437. package/dist/index.cjs +0 -601
  438. package/dist/index.d.cts +0 -228
  439. package/dist/index.d.mts +0 -228
  440. package/dist/index.d.ts +0 -228
  441. package/dist/index.mjs +0 -580
@@ -0,0 +1,105 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ import { NotDiamondError } from '../../core/error';
4
+
5
+ // https://url.spec.whatwg.org/#url-scheme-string
6
+ const startsWithSchemeRegexp = /^[a-z][a-z0-9+.-]*:/i;
7
+
8
+ export const isAbsoluteURL = (url: string): boolean => {
9
+ return startsWithSchemeRegexp.test(url);
10
+ };
11
+
12
+ export let isArray = (val: unknown): val is unknown[] => ((isArray = Array.isArray), isArray(val));
13
+ export let isReadonlyArray = isArray as (val: unknown) => val is readonly unknown[];
14
+
15
+ /** Returns an object if the given value isn't an object, otherwise returns as-is */
16
+ export function maybeObj(x: unknown): object {
17
+ if (typeof x !== 'object') {
18
+ return {};
19
+ }
20
+
21
+ return x ?? {};
22
+ }
23
+
24
+ // https://stackoverflow.com/a/34491287
25
+ export function isEmptyObj(obj: Object | null | undefined): boolean {
26
+ if (!obj) return true;
27
+ for (const _k in obj) return false;
28
+ return true;
29
+ }
30
+
31
+ // https://eslint.org/docs/latest/rules/no-prototype-builtins
32
+ export function hasOwn<T extends object = object>(obj: T, key: PropertyKey): key is keyof T {
33
+ return Object.prototype.hasOwnProperty.call(obj, key);
34
+ }
35
+
36
+ export function isObj(obj: unknown): obj is Record<string, unknown> {
37
+ return obj != null && typeof obj === 'object' && !Array.isArray(obj);
38
+ }
39
+
40
+ export const ensurePresent = <T>(value: T | null | undefined): T => {
41
+ if (value == null) {
42
+ throw new NotDiamondError(`Expected a value to be given but received ${value} instead.`);
43
+ }
44
+
45
+ return value;
46
+ };
47
+
48
+ export const validatePositiveInteger = (name: string, n: unknown): number => {
49
+ if (typeof n !== 'number' || !Number.isInteger(n)) {
50
+ throw new NotDiamondError(`${name} must be an integer`);
51
+ }
52
+ if (n < 0) {
53
+ throw new NotDiamondError(`${name} must be a positive integer`);
54
+ }
55
+ return n;
56
+ };
57
+
58
+ export const coerceInteger = (value: unknown): number => {
59
+ if (typeof value === 'number') return Math.round(value);
60
+ if (typeof value === 'string') return parseInt(value, 10);
61
+
62
+ throw new NotDiamondError(`Could not coerce ${value} (type: ${typeof value}) into a number`);
63
+ };
64
+
65
+ export const coerceFloat = (value: unknown): number => {
66
+ if (typeof value === 'number') return value;
67
+ if (typeof value === 'string') return parseFloat(value);
68
+
69
+ throw new NotDiamondError(`Could not coerce ${value} (type: ${typeof value}) into a number`);
70
+ };
71
+
72
+ export const coerceBoolean = (value: unknown): boolean => {
73
+ if (typeof value === 'boolean') return value;
74
+ if (typeof value === 'string') return value === 'true';
75
+ return Boolean(value);
76
+ };
77
+
78
+ export const maybeCoerceInteger = (value: unknown): number | undefined => {
79
+ if (value == null) {
80
+ return undefined;
81
+ }
82
+ return coerceInteger(value);
83
+ };
84
+
85
+ export const maybeCoerceFloat = (value: unknown): number | undefined => {
86
+ if (value == null) {
87
+ return undefined;
88
+ }
89
+ return coerceFloat(value);
90
+ };
91
+
92
+ export const maybeCoerceBoolean = (value: unknown): boolean | undefined => {
93
+ if (value == null) {
94
+ return undefined;
95
+ }
96
+ return coerceBoolean(value);
97
+ };
98
+
99
+ export const safeJSON = (text: string) => {
100
+ try {
101
+ return JSON.parse(text);
102
+ } catch (err) {
103
+ return undefined;
104
+ }
105
+ };
@@ -0,0 +1,8 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ export * from './utils/values';
4
+ export * from './utils/base64';
5
+ export * from './utils/env';
6
+ export * from './utils/log';
7
+ export * from './utils/uuid';
8
+ export * from './utils/sleep';
package/src/lib/.keep ADDED
@@ -0,0 +1,4 @@
1
+ File generated from our OpenAPI spec by Stainless.
2
+
3
+ This directory can be used to store custom files to expand the SDK.
4
+ It is ignored by Stainless code generation and its content (other than this keep file) won't be touched.
@@ -0,0 +1,2 @@
1
+ /** @deprecated Import from ./core/resource instead */
2
+ export * from './core/resource';
@@ -0,0 +1,168 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ import { APIResource } from '../core/resource';
4
+ import { APIPromise } from '../core/api-promise';
5
+ import { type Uploadable } from '../core/uploads';
6
+ import { RequestOptions } from '../internal/request-options';
7
+ import { multipartFormRequestOptions } from '../internal/uploads';
8
+
9
+ export class CustomRouter extends APIResource {
10
+ /**
11
+ * Train a custom router on your evaluation data to optimize routing for your
12
+ * specific use case.
13
+ *
14
+ * This endpoint allows you to train a domain-specific router that learns which
15
+ * models perform best for different types of queries in your application. The
16
+ * router analyzes your evaluation dataset, clusters similar queries, and learns
17
+ * model performance patterns.
18
+ *
19
+ * **Training Process:**
20
+ *
21
+ * 1. Upload a CSV file with your evaluation data
22
+ * 2. Specify which models to route between
23
+ * 3. Define the evaluation metric (score column)
24
+ * 4. The system trains asynchronously and returns a preference_id
25
+ * 5. Use the preference_id in model_select() calls once training completes
26
+ *
27
+ * **Dataset Requirements:**
28
+ *
29
+ * - Format: CSV file
30
+ * - Minimum samples: 25 (more is better for accuracy)
31
+ * - Required columns:
32
+ * - Prompt column (specified in prompt_column parameter)
33
+ * - For each model: `{provider}/{model}/score` and `{provider}/{model}/response`
34
+ *
35
+ * **Example CSV structure:**
36
+ *
37
+ * ```
38
+ * prompt,openai/gpt-4o/score,openai/gpt-4o/response,anthropic/claude-sonnet-4-5-20250929/score,anthropic/claude-sonnet-4-5-20250929/response
39
+ * "Explain quantum computing",0.95,"Quantum computing uses...",0.87,"Quantum computers leverage..."
40
+ * "Write a Python function",0.82,"def my_function()...",0.91,"Here's a Python function..."
41
+ * ```
42
+ *
43
+ * **Model Selection:**
44
+ *
45
+ * - Specify standard models: `{"provider": "openai", "model": "gpt-4o"}`
46
+ * - Or custom models with pricing:
47
+ * `{"provider": "custom", "model": "my-model", "is_custom": true, "input_price": 10.0, "output_price": 30.0, "context_length": 8192, "latency": 1.5}`
48
+ *
49
+ * **Training Time:**
50
+ *
51
+ * - Training is asynchronous and typically takes 5-15 minutes
52
+ * - Larger datasets or more models take longer
53
+ * - You'll receive a preference_id immediately
54
+ * - Check training status by attempting to use the preference_id in model_select()
55
+ *
56
+ * **Best Practices:**
57
+ *
58
+ * 1. Use diverse, representative examples from your production workload
59
+ * 2. Include at least 50-100 samples for best results
60
+ * 3. Ensure consistent evaluation metrics across all models
61
+ * 4. Use the same models you plan to route between in production
62
+ *
63
+ * **Related Documentation:** See
64
+ * https://docs.notdiamond.ai/docs/adapting-prompts-to-new-models for detailed
65
+ * guide.
66
+ *
67
+ * @example
68
+ * ```ts
69
+ * const response =
70
+ * await client.customRouter.trainCustomRouter({
71
+ * dataset_file: fs.createReadStream('path/to/file'),
72
+ * language: 'english',
73
+ * llm_providers:
74
+ * '[{"provider": "openai", "model": "gpt-4o"}, {"provider": "anthropic", "model": "claude-sonnet-4-5-20250929"}]',
75
+ * maximize: true,
76
+ * prompt_column: 'prompt',
77
+ * });
78
+ * ```
79
+ */
80
+ trainCustomRouter(
81
+ body: CustomRouterTrainCustomRouterParams,
82
+ options?: RequestOptions,
83
+ ): APIPromise<CustomRouterTrainCustomRouterResponse> {
84
+ return this._client.post(
85
+ '/v2/pzn/trainCustomRouter',
86
+ multipartFormRequestOptions({ body, ...options }, this._client),
87
+ );
88
+ }
89
+ }
90
+
91
+ /**
92
+ * Response model for POST /v2/pzn/trainCustomRouter endpoint.
93
+ *
94
+ * Returned immediately after submitting a custom router training request. The
95
+ * training process runs asynchronously (typically 5-15 minutes), so use the
96
+ * returned preference_id to make routing calls once training completes.
97
+ *
98
+ * **Next steps:**
99
+ *
100
+ * 1. Store the preference_id
101
+ * 2. Wait for training to complete (typically 5-15 minutes)
102
+ * 3. Use this preference_id in POST /v2/modelRouter/modelSelect requests
103
+ * 4. The router will use your custom-trained model to make routing decisions
104
+ *
105
+ * **How to use the preference_id:**
106
+ *
107
+ * - Include it in the 'preference_id' field of model_select() calls
108
+ * - The system automatically uses your custom router once training is complete
109
+ * - No need to poll status - you can start using it immediately (will use default
110
+ * until ready)
111
+ */
112
+ export interface CustomRouterTrainCustomRouterResponse {
113
+ /**
114
+ * Unique identifier for the custom router. Use this in model_select() calls to
115
+ * enable routing with your custom-trained router
116
+ */
117
+ preference_id: string;
118
+ }
119
+
120
+ export interface CustomRouterTrainCustomRouterParams {
121
+ /**
122
+ * CSV file containing evaluation data with prompt column and score/response
123
+ * columns for each model
124
+ */
125
+ dataset_file: Uploadable;
126
+
127
+ /**
128
+ * Language of the evaluation data. Use 'english' for English-only data or
129
+ * 'multilingual' for multi-language support
130
+ */
131
+ language: string;
132
+
133
+ /**
134
+ * JSON string array of LLM providers to train the router on. Format:
135
+ * '[{"provider": "openai", "model": "gpt-4o"}, {"provider": "anthropic", "model":
136
+ * "claude-sonnet-4-5-20250929"}]'
137
+ */
138
+ llm_providers: string;
139
+
140
+ /**
141
+ * Whether higher scores are better. Set to true if higher scores indicate better
142
+ * performance, false otherwise
143
+ */
144
+ maximize: boolean;
145
+
146
+ /**
147
+ * Name of the column in the CSV file that contains the prompts
148
+ */
149
+ prompt_column: string;
150
+
151
+ /**
152
+ * Whether to override an existing custom router for this preference_id
153
+ */
154
+ override?: boolean | null;
155
+
156
+ /**
157
+ * Optional preference ID to update an existing router. If not provided, a new
158
+ * preference will be created
159
+ */
160
+ preference_id?: string | null;
161
+ }
162
+
163
+ export declare namespace CustomRouter {
164
+ export {
165
+ type CustomRouterTrainCustomRouterResponse as CustomRouterTrainCustomRouterResponse,
166
+ type CustomRouterTrainCustomRouterParams as CustomRouterTrainCustomRouterParams,
167
+ };
168
+ }
@@ -0,0 +1,33 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ export {
4
+ CustomRouter,
5
+ type CustomRouterTrainCustomRouterResponse,
6
+ type CustomRouterTrainCustomRouterParams,
7
+ } from './custom-router';
8
+ export {
9
+ ModelRouter,
10
+ type ModelRouterSelectModelResponse,
11
+ type ModelRouterSelectModelParams,
12
+ } from './model-router';
13
+ export { Models, type Model, type ModelListResponse, type ModelListParams } from './models';
14
+ export {
15
+ Preferences,
16
+ type PreferenceCreateResponse,
17
+ type PreferenceUpdateResponse,
18
+ type PreferenceDeleteResponse,
19
+ type PreferenceCreateParams,
20
+ type PreferenceUpdateParams,
21
+ } from './preferences';
22
+ export {
23
+ PromptAdaptation,
24
+ type GoldenRecord,
25
+ type JobStatus,
26
+ type RequestProvider,
27
+ type PromptAdaptationCreateResponse,
28
+ type PromptAdaptationGetAdaptResultsResponse,
29
+ type PromptAdaptationGetAdaptStatusResponse,
30
+ type PromptAdaptationGetCostsResponse,
31
+ type PromptAdaptationCreateParams,
32
+ } from './prompt-adaptation';
33
+ export { Report } from './report/report';
@@ -0,0 +1,224 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ import { APIResource } from '../core/resource';
4
+ import * as PromptAdaptationAPI from './prompt-adaptation';
5
+ import { APIPromise } from '../core/api-promise';
6
+ import { RequestOptions } from '../internal/request-options';
7
+
8
+ export class ModelRouter extends APIResource {
9
+ /**
10
+ * Select the optimal LLM to handle your query based on Not Diamond's routing
11
+ * algorithm.
12
+ *
13
+ * This endpoint analyzes your messages and returns the best-suited model from your
14
+ * specified providers. The router considers factors like query complexity, model
15
+ * capabilities, cost, and latency based on your preferences.
16
+ *
17
+ * **Key Features:**
18
+ *
19
+ * - Intelligent routing across multiple LLM providers
20
+ * - Support for custom routers trained on your evaluation data
21
+ * - Optional cost/latency optimization
22
+ * - Function calling support for compatible models
23
+ * - Privacy-preserving content hashing
24
+ *
25
+ * **Usage:**
26
+ *
27
+ * 1. Pass your messages in OpenAI format (array of objects with 'role' and
28
+ * 'content')
29
+ * 2. Specify which LLM providers you want to route between
30
+ * 3. Optionally provide a preference_id for personalized routing
31
+ * 4. Receive a recommended model and session_id
32
+ * 5. Use the session_id to submit feedback and improve routing
33
+ *
34
+ * **Related Endpoints:**
35
+ *
36
+ * - `POST /v2/preferences/userPreferenceCreate` - Create a preference ID for
37
+ * personalized routing
38
+ * - `POST /v2/report/metrics/feedback` - Submit feedback on routing decisions
39
+ * - `POST /v2/pzn/trainCustomRouter` - Train a custom router on your evaluation
40
+ * data
41
+ *
42
+ * @example
43
+ * ```ts
44
+ * const response = await client.modelRouter.selectModel({
45
+ * llm_providers: [
46
+ * { provider: 'openai', model: 'gpt-4o' },
47
+ * {
48
+ * provider: 'anthropic',
49
+ * model: 'claude-sonnet-4-5-20250929',
50
+ * },
51
+ * { provider: 'google', model: 'gemini-2.5-flash' },
52
+ * ],
53
+ * messages: [
54
+ * {
55
+ * role: 'system',
56
+ * content: 'You are a helpful assistant.',
57
+ * },
58
+ * {
59
+ * role: 'user',
60
+ * content: 'Explain quantum computing in simple terms',
61
+ * },
62
+ * ],
63
+ * });
64
+ * ```
65
+ */
66
+ selectModel(
67
+ params: ModelRouterSelectModelParams,
68
+ options?: RequestOptions,
69
+ ): APIPromise<ModelRouterSelectModelResponse> {
70
+ const { type, ...body } = params;
71
+ return this._client.post('/v2/modelRouter/modelSelect', { query: { type }, body, ...options });
72
+ }
73
+ }
74
+
75
+ /**
76
+ * Response from model selection endpoint.
77
+ */
78
+ export interface ModelRouterSelectModelResponse {
79
+ /**
80
+ * List containing the selected provider
81
+ */
82
+ providers: Array<ModelRouterSelectModelResponse.Provider>;
83
+
84
+ /**
85
+ * Unique session ID for this routing decision
86
+ */
87
+ session_id: string;
88
+ }
89
+
90
+ export namespace ModelRouterSelectModelResponse {
91
+ /**
92
+ * Selected LLM provider information from model selection endpoints.
93
+ *
94
+ * Part of ModelSelectResponse. Contains the provider and model that Not Diamond's
95
+ * routing algorithm selected as optimal for your query. Use these values to make
96
+ * your LLM API call to the recommended model.
97
+ */
98
+ export interface Provider {
99
+ /**
100
+ * Model identifier for the selected model (e.g., 'gpt-4o',
101
+ * 'claude-3-opus-20240229')
102
+ */
103
+ model: string;
104
+
105
+ /**
106
+ * Provider name for the selected model (e.g., 'openai', 'anthropic', 'google')
107
+ */
108
+ provider: string;
109
+ }
110
+ }
111
+
112
+ export interface ModelRouterSelectModelParams {
113
+ /**
114
+ * Body param: List of LLM providers to route between. Specify at least one
115
+ * provider in format {provider, model}
116
+ */
117
+ llm_providers: Array<PromptAdaptationAPI.RequestProvider | ModelRouterSelectModelParams.OpenRouterProvider>;
118
+
119
+ /**
120
+ * Body param: Array of message objects in OpenAI format (with 'role' and 'content'
121
+ * keys)
122
+ */
123
+ messages: Array<{ [key: string]: string | Array<unknown> }> | string;
124
+
125
+ /**
126
+ * Query param: Optional format type. Use 'openrouter' to accept and return
127
+ * OpenRouter-format model identifiers
128
+ */
129
+ type?: string | null;
130
+
131
+ /**
132
+ * Body param: Whether to hash message content for privacy
133
+ */
134
+ hash_content?: boolean;
135
+
136
+ /**
137
+ * Body param: Maximum number of models to consider for routing. If not specified,
138
+ * considers all provided models
139
+ */
140
+ max_model_depth?: number | null;
141
+
142
+ /**
143
+ * Body param: Optimization metric for model selection
144
+ */
145
+ metric?: string;
146
+
147
+ /**
148
+ * Body param: Preference ID for personalized routing. Create one via POST
149
+ * /v2/preferences/userPreferenceCreate
150
+ */
151
+ preference_id?: string | null;
152
+
153
+ /**
154
+ * Body param: Previous session ID to link related requests
155
+ */
156
+ previous_session?: string | null;
157
+
158
+ /**
159
+ * Body param: OpenAI-format function calling tools
160
+ */
161
+ tools?: Array<{ [key: string]: unknown }> | null;
162
+
163
+ /**
164
+ * Body param: Optimization tradeoff strategy. Use 'cost' to prioritize cost
165
+ * savings or 'latency' to prioritize speed
166
+ */
167
+ tradeoff?: string | null;
168
+ }
169
+
170
+ export namespace ModelRouterSelectModelParams {
171
+ /**
172
+ * Model for specifying an LLM provider using OpenRouter format.
173
+ *
174
+ * Used in model routing requests when you want to specify providers using the
175
+ * OpenRouter naming convention (combined 'provider/model' format). This is an
176
+ * alternative to the standard RequestProvider which uses separate provider and
177
+ * model fields.
178
+ *
179
+ * **When to use:**
180
+ *
181
+ * - When working with OpenRouter-compatible systems
182
+ * - When you prefer the unified 'provider/model' format
183
+ * - For models accessed via OpenRouter proxy
184
+ */
185
+ export interface OpenRouterProvider {
186
+ /**
187
+ * OpenRouter model identifier in 'provider/model' format (e.g., 'openai/gpt-4o',
188
+ * 'anthropic/claude-sonnet-4-5-20250929')
189
+ */
190
+ model: string;
191
+
192
+ /**
193
+ * Maximum context length for the model (required for custom models)
194
+ */
195
+ context_length?: number | null;
196
+
197
+ /**
198
+ * Input token price per million tokens in USD (required for custom models)
199
+ */
200
+ input_price?: number | null;
201
+
202
+ /**
203
+ * Whether this is a custom model not in Not Diamond's supported model list
204
+ */
205
+ is_custom?: boolean;
206
+
207
+ /**
208
+ * Average latency in seconds (required for custom models)
209
+ */
210
+ latency?: number | null;
211
+
212
+ /**
213
+ * Output token price per million tokens in USD (required for custom models)
214
+ */
215
+ output_price?: number | null;
216
+ }
217
+ }
218
+
219
+ export declare namespace ModelRouter {
220
+ export {
221
+ type ModelRouterSelectModelResponse as ModelRouterSelectModelResponse,
222
+ type ModelRouterSelectModelParams as ModelRouterSelectModelParams,
223
+ };
224
+ }
@@ -0,0 +1,133 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ import { APIResource } from '../core/resource';
4
+ import { APIPromise } from '../core/api-promise';
5
+ import { RequestOptions } from '../internal/request-options';
6
+
7
+ export class Models extends APIResource {
8
+ /**
9
+ * List all supported text generation models with optional filtering.
10
+ *
11
+ * including pricing, context length, latency, and OpenRouter availability.
12
+ *
13
+ * **Note:** Image generation models are excluded from this endpoint.
14
+ *
15
+ * **Examples:**
16
+ *
17
+ * - Get all models: `/v2/models`
18
+ * - OpenRouter only: `/v2/models?openrouter_only=true`
19
+ * - Specific provider: `/v2/models?provider=openai`
20
+ * - Multiple providers: `/v2/models?provider=openai&provider=anthropic`
21
+ *
22
+ * **Query Parameters:**
23
+ *
24
+ * - **provider**: Filter by provider name(s). Can specify multiple times for
25
+ * multiple providers (e.g., `?provider=openai&provider=anthropic`)
26
+ * - **openrouter_only**: Return only models that have OpenRouter support (default:
27
+ * false)
28
+ *
29
+ * **Returns:**
30
+ *
31
+ * - **models**: List of active text generation model objects with metadata
32
+ * - **total**: Total number of active models returned
33
+ * - **deprecated_models**: List of deprecated text generation model objects with
34
+ * metadata (respects the same filters as active models)
35
+ *
36
+ * **Caching:**
37
+ *
38
+ * - Response is cacheable for 1 hour (model list rarely changes)
39
+ *
40
+ * @example
41
+ * ```ts
42
+ * const models = await client.models.list();
43
+ * ```
44
+ */
45
+ list(
46
+ query: ModelListParams | null | undefined = {},
47
+ options?: RequestOptions,
48
+ ): APIPromise<ModelListResponse> {
49
+ return this._client.get('/v2/models', { query, ...options });
50
+ }
51
+ }
52
+
53
+ /**
54
+ * Response model for a single LLM model from GET /v2/models endpoint.
55
+ *
56
+ * Contains metadata about a supported text generation model including pricing,
57
+ * context limits, and availability information.
58
+ */
59
+ export interface Model {
60
+ /**
61
+ * Maximum context window size in tokens
62
+ */
63
+ context_length: number;
64
+
65
+ /**
66
+ * Price per million input tokens in USD
67
+ */
68
+ input_price: number;
69
+
70
+ /**
71
+ * Model identifier (e.g., 'gpt-4', 'claude-3-opus-20240229')
72
+ */
73
+ model: string;
74
+
75
+ /**
76
+ * Price per million output tokens in USD
77
+ */
78
+ output_price: number;
79
+
80
+ /**
81
+ * Provider name (e.g., 'openai', 'anthropic', 'google')
82
+ */
83
+ provider: string;
84
+
85
+ /**
86
+ * OpenRouter model identifier if available, null if not supported via OpenRouter
87
+ */
88
+ openrouter_model?: string | null;
89
+ }
90
+
91
+ /**
92
+ * Response model for GET /v2/models endpoint.
93
+ *
94
+ * Returns a list of all supported text generation models with their metadata,
95
+ * separated into active and deprecated models.
96
+ */
97
+ export interface ModelListResponse {
98
+ /**
99
+ * List of deprecated models that are no longer recommended but may still work
100
+ */
101
+ deprecated_models: Array<Model>;
102
+
103
+ /**
104
+ * List of active/supported text generation models with their metadata
105
+ */
106
+ models: Array<Model>;
107
+
108
+ /**
109
+ * Total count of active models in the response
110
+ */
111
+ total: number;
112
+ }
113
+
114
+ export interface ModelListParams {
115
+ /**
116
+ * Return only OpenRouter-supported models
117
+ */
118
+ openrouter_only?: boolean;
119
+
120
+ /**
121
+ * Filter by provider name(s). Can specify multiple providers (e.g., 'openai',
122
+ * 'anthropic')
123
+ */
124
+ provider?: Array<string> | null;
125
+ }
126
+
127
+ export declare namespace Models {
128
+ export {
129
+ type Model as Model,
130
+ type ModelListResponse as ModelListResponse,
131
+ type ModelListParams as ModelListParams,
132
+ };
133
+ }