@particle-academy/prism 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (447) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +155 -0
  3. package/dist/audio/pending-request.d.ts +37 -0
  4. package/dist/audio/pending-request.d.ts.map +1 -0
  5. package/dist/audio/pending-request.js +91 -0
  6. package/dist/audio/pending-request.js.map +1 -0
  7. package/dist/audio/request.d.ts +37 -0
  8. package/dist/audio/request.d.ts.map +1 -0
  9. package/dist/audio/request.js +50 -0
  10. package/dist/audio/request.js.map +1 -0
  11. package/dist/audio/response.d.ts +24 -0
  12. package/dist/audio/response.d.ts.map +1 -0
  13. package/dist/audio/response.js +36 -0
  14. package/dist/audio/response.js.map +1 -0
  15. package/dist/batch/batch-job.d.ts +91 -0
  16. package/dist/batch/batch-job.d.ts.map +1 -0
  17. package/dist/batch/batch-job.js +156 -0
  18. package/dist/batch/batch-job.js.map +1 -0
  19. package/dist/batch/pending-request.d.ts +29 -0
  20. package/dist/batch/pending-request.d.ts.map +1 -0
  21. package/dist/batch/pending-request.js +73 -0
  22. package/dist/batch/pending-request.js.map +1 -0
  23. package/dist/batch/request.d.ts +73 -0
  24. package/dist/batch/request.d.ts.map +1 -0
  25. package/dist/batch/request.js +79 -0
  26. package/dist/batch/request.js.map +1 -0
  27. package/dist/embeddings/pending-request.d.ts +38 -0
  28. package/dist/embeddings/pending-request.d.ts.map +1 -0
  29. package/dist/embeddings/pending-request.js +86 -0
  30. package/dist/embeddings/pending-request.js.map +1 -0
  31. package/dist/embeddings/request.d.ts +27 -0
  32. package/dist/embeddings/request.d.ts.map +1 -0
  33. package/dist/embeddings/request.js +38 -0
  34. package/dist/embeddings/request.js.map +1 -0
  35. package/dist/embeddings/response.d.ts +19 -0
  36. package/dist/embeddings/response.d.ts.map +1 -0
  37. package/dist/embeddings/response.js +21 -0
  38. package/dist/embeddings/response.js.map +1 -0
  39. package/dist/enums.d.ts +52 -0
  40. package/dist/enums.d.ts.map +1 -0
  41. package/dist/enums.js +69 -0
  42. package/dist/enums.js.map +1 -0
  43. package/dist/errors.d.ts +119 -0
  44. package/dist/errors.d.ts.map +1 -0
  45. package/dist/errors.js +115 -0
  46. package/dist/errors.js.map +1 -0
  47. package/dist/files/file-data.d.ts +53 -0
  48. package/dist/files/file-data.d.ts.map +1 -0
  49. package/dist/files/file-data.js +79 -0
  50. package/dist/files/file-data.js.map +1 -0
  51. package/dist/files/pending-request.d.ts +38 -0
  52. package/dist/files/pending-request.d.ts.map +1 -0
  53. package/dist/files/pending-request.js +96 -0
  54. package/dist/files/pending-request.js.map +1 -0
  55. package/dist/files/request.d.ts +77 -0
  56. package/dist/files/request.d.ts.map +1 -0
  57. package/dist/files/request.js +81 -0
  58. package/dist/files/request.js.map +1 -0
  59. package/dist/fim/pending-request.d.ts +31 -0
  60. package/dist/fim/pending-request.d.ts.map +1 -0
  61. package/dist/fim/pending-request.js +89 -0
  62. package/dist/fim/pending-request.js.map +1 -0
  63. package/dist/fim/request.d.ts +39 -0
  64. package/dist/fim/request.d.ts.map +1 -0
  65. package/dist/fim/request.js +65 -0
  66. package/dist/fim/request.js.map +1 -0
  67. package/dist/fim/response.d.ts +21 -0
  68. package/dist/fim/response.d.ts.map +1 -0
  69. package/dist/fim/response.js +30 -0
  70. package/dist/fim/response.js.map +1 -0
  71. package/dist/http/header-names.d.ts +36 -0
  72. package/dist/http/header-names.d.ts.map +1 -0
  73. package/dist/http/header-names.js +44 -0
  74. package/dist/http/header-names.js.map +1 -0
  75. package/dist/http/transport.d.ts +94 -0
  76. package/dist/http/transport.d.ts.map +1 -0
  77. package/dist/http/transport.js +131 -0
  78. package/dist/http/transport.js.map +1 -0
  79. package/dist/images/pending-request.d.ts +30 -0
  80. package/dist/images/pending-request.d.ts.map +1 -0
  81. package/dist/images/pending-request.js +66 -0
  82. package/dist/images/pending-request.js.map +1 -0
  83. package/dist/images/request.d.ts +19 -0
  84. package/dist/images/request.d.ts.map +1 -0
  85. package/dist/images/request.js +30 -0
  86. package/dist/images/request.js.map +1 -0
  87. package/dist/images/response.d.ts +29 -0
  88. package/dist/images/response.d.ts.map +1 -0
  89. package/dist/images/response.js +34 -0
  90. package/dist/images/response.js.map +1 -0
  91. package/dist/index.d.ts +108 -0
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +84 -0
  94. package/dist/index.js.map +1 -0
  95. package/dist/internal/filters.d.ts +40 -0
  96. package/dist/internal/filters.d.ts.map +1 -0
  97. package/dist/internal/filters.js +83 -0
  98. package/dist/internal/filters.js.map +1 -0
  99. package/dist/json.d.ts +41 -0
  100. package/dist/json.d.ts.map +1 -0
  101. package/dist/json.js +75 -0
  102. package/dist/json.js.map +1 -0
  103. package/dist/moderation/pending-request.d.ts +24 -0
  104. package/dist/moderation/pending-request.d.ts.map +1 -0
  105. package/dist/moderation/pending-request.js +60 -0
  106. package/dist/moderation/pending-request.js.map +1 -0
  107. package/dist/moderation/request.d.ts +20 -0
  108. package/dist/moderation/request.d.ts.map +1 -0
  109. package/dist/moderation/request.js +31 -0
  110. package/dist/moderation/request.js.map +1 -0
  111. package/dist/moderation/response.d.ts +26 -0
  112. package/dist/moderation/response.d.ts.map +1 -0
  113. package/dist/moderation/response.js +34 -0
  114. package/dist/moderation/response.js.map +1 -0
  115. package/dist/prism.d.ts +43 -0
  116. package/dist/prism.d.ts.map +1 -0
  117. package/dist/prism.js +79 -0
  118. package/dist/prism.js.map +1 -0
  119. package/dist/providers/anthropic/anthropic.d.ts +67 -0
  120. package/dist/providers/anthropic/anthropic.d.ts.map +1 -0
  121. package/dist/providers/anthropic/anthropic.js +172 -0
  122. package/dist/providers/anthropic/anthropic.js.map +1 -0
  123. package/dist/providers/anthropic/build-request-body.d.ts +15 -0
  124. package/dist/providers/anthropic/build-request-body.d.ts.map +1 -0
  125. package/dist/providers/anthropic/build-request-body.js +51 -0
  126. package/dist/providers/anthropic/build-request-body.js.map +1 -0
  127. package/dist/providers/anthropic/maps/finish-reason-map.d.ts +14 -0
  128. package/dist/providers/anthropic/maps/finish-reason-map.d.ts.map +1 -0
  129. package/dist/providers/anthropic/maps/finish-reason-map.js +30 -0
  130. package/dist/providers/anthropic/maps/finish-reason-map.js.map +1 -0
  131. package/dist/providers/anthropic/maps/media-map.d.ts +25 -0
  132. package/dist/providers/anthropic/maps/media-map.d.ts.map +1 -0
  133. package/dist/providers/anthropic/maps/media-map.js +87 -0
  134. package/dist/providers/anthropic/maps/media-map.js.map +1 -0
  135. package/dist/providers/anthropic/maps/message-map.d.ts +31 -0
  136. package/dist/providers/anthropic/maps/message-map.d.ts.map +1 -0
  137. package/dist/providers/anthropic/maps/message-map.js +121 -0
  138. package/dist/providers/anthropic/maps/message-map.js.map +1 -0
  139. package/dist/providers/anthropic/maps/tool-choice-map.d.ts +11 -0
  140. package/dist/providers/anthropic/maps/tool-choice-map.d.ts.map +1 -0
  141. package/dist/providers/anthropic/maps/tool-choice-map.js +25 -0
  142. package/dist/providers/anthropic/maps/tool-choice-map.js.map +1 -0
  143. package/dist/providers/anthropic/maps/tool-map.d.ts +14 -0
  144. package/dist/providers/anthropic/maps/tool-map.d.ts.map +1 -0
  145. package/dist/providers/anthropic/maps/tool-map.js +22 -0
  146. package/dist/providers/anthropic/maps/tool-map.js.map +1 -0
  147. package/dist/providers/anthropic/parse-response.d.ts +21 -0
  148. package/dist/providers/anthropic/parse-response.d.ts.map +1 -0
  149. package/dist/providers/anthropic/parse-response.js +109 -0
  150. package/dist/providers/anthropic/parse-response.js.map +1 -0
  151. package/dist/providers/anthropic/rate-limits.d.ts +4 -0
  152. package/dist/providers/anthropic/rate-limits.d.ts.map +1 -0
  153. package/dist/providers/anthropic/rate-limits.js +47 -0
  154. package/dist/providers/anthropic/rate-limits.js.map +1 -0
  155. package/dist/providers/anthropic/stream-events.d.ts +27 -0
  156. package/dist/providers/anthropic/stream-events.d.ts.map +1 -0
  157. package/dist/providers/anthropic/stream-events.js +147 -0
  158. package/dist/providers/anthropic/stream-events.js.map +1 -0
  159. package/dist/providers/mistral/build-request-body.d.ts +32 -0
  160. package/dist/providers/mistral/build-request-body.d.ts.map +1 -0
  161. package/dist/providers/mistral/build-request-body.js +69 -0
  162. package/dist/providers/mistral/build-request-body.js.map +1 -0
  163. package/dist/providers/mistral/embeddings.d.ts +14 -0
  164. package/dist/providers/mistral/embeddings.d.ts.map +1 -0
  165. package/dist/providers/mistral/embeddings.js +41 -0
  166. package/dist/providers/mistral/embeddings.js.map +1 -0
  167. package/dist/providers/mistral/fim.d.ts +32 -0
  168. package/dist/providers/mistral/fim.d.ts.map +1 -0
  169. package/dist/providers/mistral/fim.js +70 -0
  170. package/dist/providers/mistral/fim.js.map +1 -0
  171. package/dist/providers/mistral/maps/finish-reason-map.d.ts +15 -0
  172. package/dist/providers/mistral/maps/finish-reason-map.d.ts.map +1 -0
  173. package/dist/providers/mistral/maps/finish-reason-map.js +32 -0
  174. package/dist/providers/mistral/maps/finish-reason-map.js.map +1 -0
  175. package/dist/providers/mistral/maps/media-map.d.ts +24 -0
  176. package/dist/providers/mistral/maps/media-map.d.ts.map +1 -0
  177. package/dist/providers/mistral/maps/media-map.js +41 -0
  178. package/dist/providers/mistral/maps/media-map.js.map +1 -0
  179. package/dist/providers/mistral/maps/message-map.d.ts +20 -0
  180. package/dist/providers/mistral/maps/message-map.d.ts.map +1 -0
  181. package/dist/providers/mistral/maps/message-map.js +83 -0
  182. package/dist/providers/mistral/maps/message-map.js.map +1 -0
  183. package/dist/providers/mistral/maps/tool-choice-map.d.ts +12 -0
  184. package/dist/providers/mistral/maps/tool-choice-map.d.ts.map +1 -0
  185. package/dist/providers/mistral/maps/tool-choice-map.js +25 -0
  186. package/dist/providers/mistral/maps/tool-choice-map.js.map +1 -0
  187. package/dist/providers/mistral/maps/tool-map.d.ts +15 -0
  188. package/dist/providers/mistral/maps/tool-map.d.ts.map +1 -0
  189. package/dist/providers/mistral/maps/tool-map.js +26 -0
  190. package/dist/providers/mistral/maps/tool-map.js.map +1 -0
  191. package/dist/providers/mistral/mistral.d.ts +90 -0
  192. package/dist/providers/mistral/mistral.d.ts.map +1 -0
  193. package/dist/providers/mistral/mistral.js +210 -0
  194. package/dist/providers/mistral/mistral.js.map +1 -0
  195. package/dist/providers/mistral/parse-response.d.ts +35 -0
  196. package/dist/providers/mistral/parse-response.d.ts.map +1 -0
  197. package/dist/providers/mistral/parse-response.js +114 -0
  198. package/dist/providers/mistral/parse-response.js.map +1 -0
  199. package/dist/providers/mistral/rate-limits.d.ts +24 -0
  200. package/dist/providers/mistral/rate-limits.d.ts.map +1 -0
  201. package/dist/providers/mistral/rate-limits.js +55 -0
  202. package/dist/providers/mistral/rate-limits.js.map +1 -0
  203. package/dist/providers/mistral/stream-events.d.ts +29 -0
  204. package/dist/providers/mistral/stream-events.d.ts.map +1 -0
  205. package/dist/providers/mistral/stream-events.js +142 -0
  206. package/dist/providers/mistral/stream-events.js.map +1 -0
  207. package/dist/providers/openai/audio.d.ts +16 -0
  208. package/dist/providers/openai/audio.d.ts.map +1 -0
  209. package/dist/providers/openai/audio.js +105 -0
  210. package/dist/providers/openai/audio.js.map +1 -0
  211. package/dist/providers/openai/batch.d.ts +29 -0
  212. package/dist/providers/openai/batch.d.ts.map +1 -0
  213. package/dist/providers/openai/batch.js +181 -0
  214. package/dist/providers/openai/batch.js.map +1 -0
  215. package/dist/providers/openai/build-request-body.d.ts +25 -0
  216. package/dist/providers/openai/build-request-body.d.ts.map +1 -0
  217. package/dist/providers/openai/build-request-body.js +66 -0
  218. package/dist/providers/openai/build-request-body.js.map +1 -0
  219. package/dist/providers/openai/build-structured-body.d.ts +16 -0
  220. package/dist/providers/openai/build-structured-body.d.ts.map +1 -0
  221. package/dist/providers/openai/build-structured-body.js +47 -0
  222. package/dist/providers/openai/build-structured-body.js.map +1 -0
  223. package/dist/providers/openai/embeddings.d.ts +6 -0
  224. package/dist/providers/openai/embeddings.d.ts.map +1 -0
  225. package/dist/providers/openai/embeddings.js +61 -0
  226. package/dist/providers/openai/embeddings.js.map +1 -0
  227. package/dist/providers/openai/files.d.ts +16 -0
  228. package/dist/providers/openai/files.d.ts.map +1 -0
  229. package/dist/providers/openai/files.js +80 -0
  230. package/dist/providers/openai/files.js.map +1 -0
  231. package/dist/providers/openai/images.d.ts +6 -0
  232. package/dist/providers/openai/images.d.ts.map +1 -0
  233. package/dist/providers/openai/images.js +55 -0
  234. package/dist/providers/openai/images.js.map +1 -0
  235. package/dist/providers/openai/maps/finish-reason-map.d.ts +21 -0
  236. package/dist/providers/openai/maps/finish-reason-map.d.ts.map +1 -0
  237. package/dist/providers/openai/maps/finish-reason-map.js +56 -0
  238. package/dist/providers/openai/maps/finish-reason-map.js.map +1 -0
  239. package/dist/providers/openai/maps/media-map.d.ts +25 -0
  240. package/dist/providers/openai/maps/media-map.d.ts.map +1 -0
  241. package/dist/providers/openai/maps/media-map.js +53 -0
  242. package/dist/providers/openai/maps/media-map.js.map +1 -0
  243. package/dist/providers/openai/maps/message-map.d.ts +21 -0
  244. package/dist/providers/openai/maps/message-map.d.ts.map +1 -0
  245. package/dist/providers/openai/maps/message-map.js +128 -0
  246. package/dist/providers/openai/maps/message-map.js.map +1 -0
  247. package/dist/providers/openai/maps/tool-choice-map.d.ts +14 -0
  248. package/dist/providers/openai/maps/tool-choice-map.d.ts.map +1 -0
  249. package/dist/providers/openai/maps/tool-choice-map.js +27 -0
  250. package/dist/providers/openai/maps/tool-choice-map.js.map +1 -0
  251. package/dist/providers/openai/maps/tool-map.d.ts +16 -0
  252. package/dist/providers/openai/maps/tool-map.d.ts.map +1 -0
  253. package/dist/providers/openai/maps/tool-map.js +34 -0
  254. package/dist/providers/openai/maps/tool-map.js.map +1 -0
  255. package/dist/providers/openai/moderation.d.ts +6 -0
  256. package/dist/providers/openai/moderation.d.ts.map +1 -0
  257. package/dist/providers/openai/moderation.js +26 -0
  258. package/dist/providers/openai/moderation.js.map +1 -0
  259. package/dist/providers/openai/openai.d.ts +103 -0
  260. package/dist/providers/openai/openai.d.ts.map +1 -0
  261. package/dist/providers/openai/openai.js +385 -0
  262. package/dist/providers/openai/openai.js.map +1 -0
  263. package/dist/providers/openai/parse-response.d.ts +21 -0
  264. package/dist/providers/openai/parse-response.d.ts.map +1 -0
  265. package/dist/providers/openai/parse-response.js +114 -0
  266. package/dist/providers/openai/parse-response.js.map +1 -0
  267. package/dist/providers/openai/rate-limits.d.ts +4 -0
  268. package/dist/providers/openai/rate-limits.d.ts.map +1 -0
  269. package/dist/providers/openai/rate-limits.js +47 -0
  270. package/dist/providers/openai/rate-limits.js.map +1 -0
  271. package/dist/providers/openai/stream-events.d.ts +13 -0
  272. package/dist/providers/openai/stream-events.d.ts.map +1 -0
  273. package/dist/providers/openai/stream-events.js +79 -0
  274. package/dist/providers/openai/stream-events.js.map +1 -0
  275. package/dist/providers/openai/structured-mode-resolver.d.ts +3 -0
  276. package/dist/providers/openai/structured-mode-resolver.d.ts.map +1 -0
  277. package/dist/providers/openai/structured-mode-resolver.js +41 -0
  278. package/dist/providers/openai/structured-mode-resolver.js.map +1 -0
  279. package/dist/providers/provider.d.ts +55 -0
  280. package/dist/providers/provider.d.ts.map +1 -0
  281. package/dist/providers/provider.js +73 -0
  282. package/dist/providers/provider.js.map +1 -0
  283. package/dist/providers/registry.d.ts +10 -0
  284. package/dist/providers/registry.d.ts.map +1 -0
  285. package/dist/providers/registry.js +27 -0
  286. package/dist/providers/registry.js.map +1 -0
  287. package/dist/providers/support/media.d.ts +16 -0
  288. package/dist/providers/support/media.d.ts.map +1 -0
  289. package/dist/providers/support/media.js +26 -0
  290. package/dist/providers/support/media.js.map +1 -0
  291. package/dist/schema/index.d.ts +114 -0
  292. package/dist/schema/index.d.ts.map +1 -0
  293. package/dist/schema/index.js +192 -0
  294. package/dist/schema/index.js.map +1 -0
  295. package/dist/streaming/events.d.ts +90 -0
  296. package/dist/streaming/events.d.ts.map +1 -0
  297. package/dist/streaming/events.js +152 -0
  298. package/dist/streaming/events.js.map +1 -0
  299. package/dist/streaming/sse.d.ts +17 -0
  300. package/dist/streaming/sse.d.ts.map +1 -0
  301. package/dist/streaming/sse.js +50 -0
  302. package/dist/streaming/sse.js.map +1 -0
  303. package/dist/structured/extract.d.ts +23 -0
  304. package/dist/structured/extract.d.ts.map +1 -0
  305. package/dist/structured/extract.js +43 -0
  306. package/dist/structured/extract.js.map +1 -0
  307. package/dist/structured/from-text.d.ts +16 -0
  308. package/dist/structured/from-text.d.ts.map +1 -0
  309. package/dist/structured/from-text.js +27 -0
  310. package/dist/structured/from-text.js.map +1 -0
  311. package/dist/structured/pending-request.d.ts +28 -0
  312. package/dist/structured/pending-request.d.ts.map +1 -0
  313. package/dist/structured/pending-request.js +48 -0
  314. package/dist/structured/pending-request.js.map +1 -0
  315. package/dist/structured/request.d.ts +28 -0
  316. package/dist/structured/request.d.ts.map +1 -0
  317. package/dist/structured/request.js +31 -0
  318. package/dist/structured/request.js.map +1 -0
  319. package/dist/structured/response.d.ts +44 -0
  320. package/dist/structured/response.d.ts.map +1 -0
  321. package/dist/structured/response.js +49 -0
  322. package/dist/structured/response.js.map +1 -0
  323. package/dist/text/pending-request.d.ts +77 -0
  324. package/dist/text/pending-request.d.ts.map +1 -0
  325. package/dist/text/pending-request.js +189 -0
  326. package/dist/text/pending-request.js.map +1 -0
  327. package/dist/text/request.d.ts +62 -0
  328. package/dist/text/request.d.ts.map +1 -0
  329. package/dist/text/request.js +117 -0
  330. package/dist/text/request.js.map +1 -0
  331. package/dist/text/response-builder.d.ts +16 -0
  332. package/dist/text/response-builder.d.ts.map +1 -0
  333. package/dist/text/response-builder.js +52 -0
  334. package/dist/text/response-builder.js.map +1 -0
  335. package/dist/text/response.d.ts +36 -0
  336. package/dist/text/response.d.ts.map +1 -0
  337. package/dist/text/response.js +40 -0
  338. package/dist/text/response.js.map +1 -0
  339. package/dist/text/step.d.ts +41 -0
  340. package/dist/text/step.d.ts.map +1 -0
  341. package/dist/text/step.js +46 -0
  342. package/dist/text/step.js.map +1 -0
  343. package/dist/tool.d.ts +34 -0
  344. package/dist/tool.d.ts.map +1 -0
  345. package/dist/tool.js +86 -0
  346. package/dist/tool.js.map +1 -0
  347. package/dist/value-objects/artifact.d.ts +14 -0
  348. package/dist/value-objects/artifact.d.ts.map +1 -0
  349. package/dist/value-objects/artifact.js +32 -0
  350. package/dist/value-objects/artifact.js.map +1 -0
  351. package/dist/value-objects/embedding.d.ts +24 -0
  352. package/dist/value-objects/embedding.d.ts.map +1 -0
  353. package/dist/value-objects/embedding.js +29 -0
  354. package/dist/value-objects/embedding.js.map +1 -0
  355. package/dist/value-objects/embeddings-usage.d.ts +16 -0
  356. package/dist/value-objects/embeddings-usage.d.ts.map +1 -0
  357. package/dist/value-objects/embeddings-usage.js +19 -0
  358. package/dist/value-objects/embeddings-usage.js.map +1 -0
  359. package/dist/value-objects/generated-audio.d.ts +20 -0
  360. package/dist/value-objects/generated-audio.d.ts.map +1 -0
  361. package/dist/value-objects/generated-audio.js +23 -0
  362. package/dist/value-objects/generated-audio.js.map +1 -0
  363. package/dist/value-objects/generated-image.d.ts +36 -0
  364. package/dist/value-objects/generated-image.d.ts.map +1 -0
  365. package/dist/value-objects/generated-image.js +35 -0
  366. package/dist/value-objects/generated-image.js.map +1 -0
  367. package/dist/value-objects/index.d.ts +13 -0
  368. package/dist/value-objects/index.d.ts.map +1 -0
  369. package/dist/value-objects/index.js +10 -0
  370. package/dist/value-objects/index.js.map +1 -0
  371. package/dist/value-objects/media/audio.d.ts +8 -0
  372. package/dist/value-objects/media/audio.d.ts.map +1 -0
  373. package/dist/value-objects/media/audio.js +9 -0
  374. package/dist/value-objects/media/audio.js.map +1 -0
  375. package/dist/value-objects/media/document.d.ts +44 -0
  376. package/dist/value-objects/media/document.d.ts.map +1 -0
  377. package/dist/value-objects/media/document.js +75 -0
  378. package/dist/value-objects/media/document.js.map +1 -0
  379. package/dist/value-objects/media/image.d.ts +13 -0
  380. package/dist/value-objects/media/image.d.ts.map +1 -0
  381. package/dist/value-objects/media/image.js +14 -0
  382. package/dist/value-objects/media/image.js.map +1 -0
  383. package/dist/value-objects/media/media.d.ts +119 -0
  384. package/dist/value-objects/media/media.d.ts.map +1 -0
  385. package/dist/value-objects/media/media.js +267 -0
  386. package/dist/value-objects/media/media.js.map +1 -0
  387. package/dist/value-objects/media/part.d.ts +25 -0
  388. package/dist/value-objects/media/part.d.ts.map +1 -0
  389. package/dist/value-objects/media/part.js +41 -0
  390. package/dist/value-objects/media/part.js.map +1 -0
  391. package/dist/value-objects/media/text.d.ts +24 -0
  392. package/dist/value-objects/media/text.d.ts.map +1 -0
  393. package/dist/value-objects/media/text.js +33 -0
  394. package/dist/value-objects/media/text.js.map +1 -0
  395. package/dist/value-objects/media/video.d.ts +7 -0
  396. package/dist/value-objects/media/video.d.ts.map +1 -0
  397. package/dist/value-objects/media/video.js +8 -0
  398. package/dist/value-objects/media/video.js.map +1 -0
  399. package/dist/value-objects/messages/assistant-message.d.ts +26 -0
  400. package/dist/value-objects/messages/assistant-message.d.ts.map +1 -0
  401. package/dist/value-objects/messages/assistant-message.js +37 -0
  402. package/dist/value-objects/messages/assistant-message.js.map +1 -0
  403. package/dist/value-objects/messages/index.d.ts +27 -0
  404. package/dist/value-objects/messages/index.d.ts.map +1 -0
  405. package/dist/value-objects/messages/index.js +32 -0
  406. package/dist/value-objects/messages/index.js.map +1 -0
  407. package/dist/value-objects/messages/system-message.d.ts +9 -0
  408. package/dist/value-objects/messages/system-message.d.ts.map +1 -0
  409. package/dist/value-objects/messages/system-message.js +17 -0
  410. package/dist/value-objects/messages/system-message.js.map +1 -0
  411. package/dist/value-objects/messages/tool-result-message.d.ts +14 -0
  412. package/dist/value-objects/messages/tool-result-message.d.ts.map +1 -0
  413. package/dist/value-objects/messages/tool-result-message.js +26 -0
  414. package/dist/value-objects/messages/tool-result-message.js.map +1 -0
  415. package/dist/value-objects/messages/user-message.d.ts +47 -0
  416. package/dist/value-objects/messages/user-message.d.ts.map +1 -0
  417. package/dist/value-objects/messages/user-message.js +87 -0
  418. package/dist/value-objects/messages/user-message.js.map +1 -0
  419. package/dist/value-objects/meta.d.ts +12 -0
  420. package/dist/value-objects/meta.d.ts.map +1 -0
  421. package/dist/value-objects/meta.js +28 -0
  422. package/dist/value-objects/meta.js.map +1 -0
  423. package/dist/value-objects/moderation-result.d.ts +20 -0
  424. package/dist/value-objects/moderation-result.d.ts.map +1 -0
  425. package/dist/value-objects/moderation-result.js +64 -0
  426. package/dist/value-objects/moderation-result.js.map +1 -0
  427. package/dist/value-objects/provider-rate-limit.d.ts +11 -0
  428. package/dist/value-objects/provider-rate-limit.d.ts.map +1 -0
  429. package/dist/value-objects/provider-rate-limit.js +34 -0
  430. package/dist/value-objects/provider-rate-limit.js.map +1 -0
  431. package/dist/value-objects/provider-tool.d.ts +19 -0
  432. package/dist/value-objects/provider-tool.d.ts.map +1 -0
  433. package/dist/value-objects/provider-tool.js +31 -0
  434. package/dist/value-objects/provider-tool.js.map +1 -0
  435. package/dist/value-objects/tool-call.d.ts +29 -0
  436. package/dist/value-objects/tool-call.d.ts.map +1 -0
  437. package/dist/value-objects/tool-call.js +112 -0
  438. package/dist/value-objects/tool-call.js.map +1 -0
  439. package/dist/value-objects/tool-result.d.ts +25 -0
  440. package/dist/value-objects/tool-result.d.ts.map +1 -0
  441. package/dist/value-objects/tool-result.js +45 -0
  442. package/dist/value-objects/tool-result.js.map +1 -0
  443. package/dist/value-objects/usage.d.ts +13 -0
  444. package/dist/value-objects/usage.d.ts.map +1 -0
  445. package/dist/value-objects/usage.js +31 -0
  446. package/dist/value-objects/usage.js.map +1 -0
  447. package/package.json +46 -0
@@ -0,0 +1,43 @@
1
+ import { FimPendingRequest } from './fim/pending-request.js';
2
+ import { BatchPendingRequest } from './batch/pending-request.js';
3
+ import { TextPendingRequest } from './text/pending-request.js';
4
+ import { EmbeddingsPendingRequest } from './embeddings/pending-request.js';
5
+ import { AudioPendingRequest } from './audio/pending-request.js';
6
+ import { FilesPendingRequest } from './files/pending-request.js';
7
+ import { ImagesPendingRequest } from './images/pending-request.js';
8
+ import { ModerationPendingRequest } from './moderation/pending-request.js';
9
+ import { StructuredPendingRequest } from './structured/pending-request.js';
10
+ /**
11
+ * The entry point.
12
+ *
13
+ * ```ts
14
+ * const response = await Prism.text()
15
+ * .using('openai', 'gpt-4o')
16
+ * .withPrompt('Who are you?')
17
+ * .asText();
18
+ * ```
19
+ *
20
+ * The static and instance forms are the same call; the instance form exists so
21
+ * the shape matches the reference's facade.
22
+ */
23
+ export declare class Prism {
24
+ text(): TextPendingRequest;
25
+ structured(): StructuredPendingRequest;
26
+ static text(): TextPendingRequest;
27
+ static structured(): StructuredPendingRequest;
28
+ embeddings(): EmbeddingsPendingRequest;
29
+ static embeddings(): EmbeddingsPendingRequest;
30
+ images(): ImagesPendingRequest;
31
+ static images(): ImagesPendingRequest;
32
+ moderation(): ModerationPendingRequest;
33
+ static moderation(): ModerationPendingRequest;
34
+ audio(): AudioPendingRequest;
35
+ static audio(): AudioPendingRequest;
36
+ files(): FilesPendingRequest;
37
+ static files(): FilesPendingRequest;
38
+ batch(): BatchPendingRequest;
39
+ static batch(): BatchPendingRequest;
40
+ fim(): FimPendingRequest;
41
+ static fim(): FimPendingRequest;
42
+ }
43
+ //# sourceMappingURL=prism.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prism.d.ts","sourceRoot":"","sources":["../src/prism.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAE3E;;;;;;;;;;;;GAYG;AACH,qBAAa,KAAK;IAChB,IAAI,IAAI,kBAAkB;IAI1B,UAAU,IAAI,wBAAwB;IAItC,MAAM,CAAC,IAAI,IAAI,kBAAkB;IAIjC,MAAM,CAAC,UAAU,IAAI,wBAAwB;IAI7C,UAAU,IAAI,wBAAwB;IAItC,MAAM,CAAC,UAAU,IAAI,wBAAwB;IAI7C,MAAM,IAAI,oBAAoB;IAI9B,MAAM,CAAC,MAAM,IAAI,oBAAoB;IAIrC,UAAU,IAAI,wBAAwB;IAItC,MAAM,CAAC,UAAU,IAAI,wBAAwB;IAI7C,KAAK,IAAI,mBAAmB;IAI5B,MAAM,CAAC,KAAK,IAAI,mBAAmB;IAInC,KAAK,IAAI,mBAAmB;IAI5B,MAAM,CAAC,KAAK,IAAI,mBAAmB;IAInC,KAAK,IAAI,mBAAmB;IAI5B,MAAM,CAAC,KAAK,IAAI,mBAAmB;IAInC,GAAG,IAAI,iBAAiB;IAIxB,MAAM,CAAC,GAAG,IAAI,iBAAiB;CAGhC"}
package/dist/prism.js ADDED
@@ -0,0 +1,79 @@
1
+ import { FimPendingRequest } from './fim/pending-request.js';
2
+ import { BatchPendingRequest } from './batch/pending-request.js';
3
+ import { TextPendingRequest } from './text/pending-request.js';
4
+ import { EmbeddingsPendingRequest } from './embeddings/pending-request.js';
5
+ import { AudioPendingRequest } from './audio/pending-request.js';
6
+ import { FilesPendingRequest } from './files/pending-request.js';
7
+ import { ImagesPendingRequest } from './images/pending-request.js';
8
+ import { ModerationPendingRequest } from './moderation/pending-request.js';
9
+ import { StructuredPendingRequest } from './structured/pending-request.js';
10
+ /**
11
+ * The entry point.
12
+ *
13
+ * ```ts
14
+ * const response = await Prism.text()
15
+ * .using('openai', 'gpt-4o')
16
+ * .withPrompt('Who are you?')
17
+ * .asText();
18
+ * ```
19
+ *
20
+ * The static and instance forms are the same call; the instance form exists so
21
+ * the shape matches the reference's facade.
22
+ */
23
+ export class Prism {
24
+ text() {
25
+ return new TextPendingRequest();
26
+ }
27
+ structured() {
28
+ return new StructuredPendingRequest();
29
+ }
30
+ static text() {
31
+ return new Prism().text();
32
+ }
33
+ static structured() {
34
+ return new Prism().structured();
35
+ }
36
+ embeddings() {
37
+ return new EmbeddingsPendingRequest();
38
+ }
39
+ static embeddings() {
40
+ return new Prism().embeddings();
41
+ }
42
+ images() {
43
+ return new ImagesPendingRequest();
44
+ }
45
+ static images() {
46
+ return new Prism().images();
47
+ }
48
+ moderation() {
49
+ return new ModerationPendingRequest();
50
+ }
51
+ static moderation() {
52
+ return new Prism().moderation();
53
+ }
54
+ audio() {
55
+ return new AudioPendingRequest();
56
+ }
57
+ static audio() {
58
+ return new Prism().audio();
59
+ }
60
+ files() {
61
+ return new FilesPendingRequest();
62
+ }
63
+ static files() {
64
+ return new Prism().files();
65
+ }
66
+ batch() {
67
+ return new BatchPendingRequest();
68
+ }
69
+ static batch() {
70
+ return new Prism().batch();
71
+ }
72
+ fim() {
73
+ return new FimPendingRequest();
74
+ }
75
+ static fim() {
76
+ return new Prism().fim();
77
+ }
78
+ }
79
+ //# sourceMappingURL=prism.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prism.js","sourceRoot":"","sources":["../src/prism.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAE3E;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,KAAK;IAChB,IAAI;QACF,OAAO,IAAI,kBAAkB,EAAE,CAAC;IAClC,CAAC;IAED,UAAU;QACR,OAAO,IAAI,wBAAwB,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,IAAI;QACT,OAAO,IAAI,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,UAAU;QACf,OAAO,IAAI,KAAK,EAAE,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;IAED,UAAU;QACR,OAAO,IAAI,wBAAwB,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,UAAU;QACf,OAAO,IAAI,KAAK,EAAE,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,oBAAoB,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,CAAC,MAAM;QACX,OAAO,IAAI,KAAK,EAAE,CAAC,MAAM,EAAE,CAAC;IAC9B,CAAC;IAED,UAAU;QACR,OAAO,IAAI,wBAAwB,EAAE,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,UAAU;QACf,OAAO,IAAI,KAAK,EAAE,CAAC,UAAU,EAAE,CAAC;IAClC,CAAC;IAED,KAAK;QACH,OAAO,IAAI,mBAAmB,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,KAAK;QACV,OAAO,IAAI,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK;QACH,OAAO,IAAI,mBAAmB,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,KAAK;QACV,OAAO,IAAI,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK;QACH,OAAO,IAAI,mBAAmB,EAAE,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,KAAK;QACV,OAAO,IAAI,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,GAAG;QACD,OAAO,IAAI,iBAAiB,EAAE,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,GAAG;QACR,OAAO,IAAI,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC;IAC3B,CAAC;CACF"}
@@ -0,0 +1,67 @@
1
+ import type { StructuredRequest } from '../../structured/request.js';
2
+ import type { StructuredResponse } from '../../structured/response.js';
3
+ import type { HttpTransport } from '../../http/transport.js';
4
+ import type { HttpStreamTransport } from '../../http/transport.js';
5
+ import type { StreamEvent } from '../../streaming/events.js';
6
+ import type { TextRequest } from '../../text/request.js';
7
+ import type { TextResponse } from '../../text/response.js';
8
+ import { Provider } from '../provider.js';
9
+ export interface AnthropicConfig {
10
+ apiKey?: string;
11
+ url?: string;
12
+ /** The `anthropic-version` header. Pinned, not floating — see below. */
13
+ apiVersion?: string;
14
+ /** Sent as `anthropic-beta` when set. */
15
+ betaFeatures?: string | null;
16
+ transport?: HttpTransport;
17
+ streamTransport?: HttpStreamTransport;
18
+ }
19
+ /**
20
+ * The Anthropic provider, Messages API.
21
+ *
22
+ * Configuration is explicit first and environment second, so a test can pin
23
+ * every field and a deployment can set none of them — the same contract the
24
+ * OpenAI provider offers.
25
+ */
26
+ export declare class Anthropic extends Provider {
27
+ #private;
28
+ readonly providerName = "Anthropic";
29
+ readonly apiKey: string;
30
+ readonly url: string;
31
+ readonly apiVersion: string;
32
+ readonly betaFeatures: string | null;
33
+ constructor(config?: AnthropicConfig);
34
+ text(request: TextRequest): Promise<TextResponse>;
35
+ /**
36
+ * The same generation, delivered as it arrives.
37
+ *
38
+ * The mapper is constructed PER CALL, not shared. It carries the message id,
39
+ * the accumulated text and the stop reason for one stream; a shared instance
40
+ * would let two concurrent generations read each other's blocks, which is the
41
+ * kind of bug that only appears under load and looks like the model
42
+ * hallucinating.
43
+ */
44
+ stream(request: TextRequest): AsyncGenerator<StreamEvent>;
45
+ /**
46
+ * Structured output by ASKING, because Anthropic has no schema-enforcing mode.
47
+ *
48
+ * OpenAI can be told to enforce a schema; Anthropic cannot, so the reference
49
+ * appends a message spelling out the schema and demanding JSON with nothing
50
+ * around it. That is a request, not a guarantee — which is exactly why
51
+ * `structured` is nullable and `text` survives beside it. A model that answers
52
+ * in prose here has not malfunctioned; it has declined, and the caller gets to
53
+ * see what it said.
54
+ *
55
+ * The instruction is appended as a USER message rather than a system prompt,
56
+ * matching the reference: the caller's own system prompt keeps its meaning,
57
+ * and the demand arrives as the most recent thing said.
58
+ */
59
+ structured(request: StructuredRequest): Promise<StructuredResponse>;
60
+ /**
61
+ * Anthropic authenticates with `x-api-key`, not a bearer token.
62
+ *
63
+ * Optional headers are OMITTED rather than sent empty when unconfigured.
64
+ */
65
+ headers(): Record<string, string>;
66
+ }
67
+ //# sourceMappingURL=anthropic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic/anthropic.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAG7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAK1C,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,eAAe,CAAC,EAAE,mBAAmB,CAAC;CACvC;AAcD;;;;;;GAMG;AACH,qBAAa,SAAU,SAAQ,QAAQ;;IACrC,SAAkB,YAAY,eAAe;IAE7C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAErB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;gBAMzB,MAAM,GAAE,eAAoB;IAWzB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC;IAmBhE;;;;;;;;OAQG;IACa,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,CAAC,WAAW,CAAC;IA2BzE;;;;;;;;;;;;;OAaG;IACY,UAAU,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAMlF;;;;OAIG;IACH,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAgBlC"}
@@ -0,0 +1,172 @@
1
+ import { canonicalJson, isJsonObject } from '../../json.js';
2
+ import { PrismError } from '../../errors.js';
3
+ import { UserMessage } from '../../value-objects/messages/index.js';
4
+ import { structuredFromTextResponse } from '../../structured/from-text.js';
5
+ import { fetchTransport, fetchStreamTransport } from '../../http/transport.js';
6
+ import { sseData } from '../../streaming/sse.js';
7
+ import { AnthropicStreamMapper } from './stream-events.js';
8
+ import { Provider } from '../provider.js';
9
+ import { buildRequestBody } from './build-request-body.js';
10
+ import { parseTextResponse } from './parse-response.js';
11
+ import { parseRateLimits } from './rate-limits.js';
12
+ const DEFAULT_URL = 'https://api.anthropic.com/v1';
13
+ /**
14
+ * Pinned rather than tracking latest.
15
+ *
16
+ * The version header decides the response SHAPE. Floating it would let a
17
+ * provider-side release change what this parser receives without a line of code
18
+ * changing here — which is exactly the drift the conformance corpus exists to
19
+ * catch, arriving through a door the corpus cannot see.
20
+ */
21
+ const DEFAULT_API_VERSION = '2023-06-01';
22
+ /**
23
+ * The Anthropic provider, Messages API.
24
+ *
25
+ * Configuration is explicit first and environment second, so a test can pin
26
+ * every field and a deployment can set none of them — the same contract the
27
+ * OpenAI provider offers.
28
+ */
29
+ export class Anthropic extends Provider {
30
+ providerName = 'Anthropic';
31
+ apiKey;
32
+ url;
33
+ apiVersion;
34
+ betaFeatures;
35
+ #transport;
36
+ #streamTransport;
37
+ constructor(config = {}) {
38
+ super();
39
+ this.apiKey = config.apiKey ?? readEnv('ANTHROPIC_API_KEY') ?? '';
40
+ this.url = config.url ?? readEnv('ANTHROPIC_URL') ?? DEFAULT_URL;
41
+ this.apiVersion = config.apiVersion ?? readEnv('ANTHROPIC_API_VERSION') ?? DEFAULT_API_VERSION;
42
+ this.betaFeatures = config.betaFeatures ?? readEnv('ANTHROPIC_BETA_FEATURES') ?? null;
43
+ this.#transport = config.transport ?? fetchTransport;
44
+ this.#streamTransport = config.streamTransport ?? fetchStreamTransport;
45
+ }
46
+ async text(request) {
47
+ const response = await this.#transport({
48
+ url: `${this.url.replace(/\/+$/, '')}/messages`,
49
+ method: 'POST',
50
+ headers: this.headers(),
51
+ body: canonicalJson(buildRequestBody(request)),
52
+ clientOptions: request.clientOptions(),
53
+ });
54
+ if (response.status >= 400) {
55
+ throw PrismError.providerResponseError(describeHttpFailure(this.providerName, response.status, response.body), {
56
+ httpStatus: response.status,
57
+ responseBody: response.rawBody,
58
+ });
59
+ }
60
+ return parseTextResponse(request, response.body, { rateLimits: parseRateLimits(response.headers) });
61
+ }
62
+ /**
63
+ * The same generation, delivered as it arrives.
64
+ *
65
+ * The mapper is constructed PER CALL, not shared. It carries the message id,
66
+ * the accumulated text and the stop reason for one stream; a shared instance
67
+ * would let two concurrent generations read each other's blocks, which is the
68
+ * kind of bug that only appears under load and looks like the model
69
+ * hallucinating.
70
+ */
71
+ async *stream(request) {
72
+ const response = await this.#streamTransport({
73
+ url: `${this.url.replace(/\/+$/, '')}/messages`,
74
+ method: 'POST',
75
+ headers: { ...this.headers(), Accept: 'text/event-stream' },
76
+ body: canonicalJson({ ...buildRequestBody(request), stream: true }),
77
+ clientOptions: request.clientOptions(),
78
+ });
79
+ if (response.status >= 400) {
80
+ throw PrismError.providerResponseError(describeHttpFailure(this.providerName, response.status, await collectJson(response.chunks)), { httpStatus: response.status });
81
+ }
82
+ const mapper = new AnthropicStreamMapper();
83
+ for await (const payload of sseData(response.chunks)) {
84
+ const event = mapper.map(parsePayload(payload));
85
+ if (event !== null) {
86
+ yield event;
87
+ }
88
+ }
89
+ }
90
+ /**
91
+ * Structured output by ASKING, because Anthropic has no schema-enforcing mode.
92
+ *
93
+ * OpenAI can be told to enforce a schema; Anthropic cannot, so the reference
94
+ * appends a message spelling out the schema and demanding JSON with nothing
95
+ * around it. That is a request, not a guarantee — which is exactly why
96
+ * `structured` is nullable and `text` survives beside it. A model that answers
97
+ * in prose here has not malfunctioned; it has declined, and the caller gets to
98
+ * see what it said.
99
+ *
100
+ * The instruction is appended as a USER message rather than a system prompt,
101
+ * matching the reference: the caller's own system prompt keeps its meaning,
102
+ * and the demand arrives as the most recent thing said.
103
+ */
104
+ async structured(request) {
105
+ request.addMessage(new UserMessage(schemaInstruction(request)));
106
+ return structuredFromTextResponse(await this.text(request));
107
+ }
108
+ /**
109
+ * Anthropic authenticates with `x-api-key`, not a bearer token.
110
+ *
111
+ * Optional headers are OMITTED rather than sent empty when unconfigured.
112
+ */
113
+ headers() {
114
+ const headers = {
115
+ 'Content-Type': 'application/json',
116
+ 'anthropic-version': this.apiVersion,
117
+ };
118
+ if (this.apiKey !== '') {
119
+ headers['x-api-key'] = this.apiKey;
120
+ }
121
+ if (this.betaFeatures !== null && this.betaFeatures !== '') {
122
+ headers['anthropic-beta'] = this.betaFeatures;
123
+ }
124
+ return headers;
125
+ }
126
+ }
127
+ function readEnv(name) {
128
+ const value = process.env[name];
129
+ return value === undefined || value === '' ? undefined : value;
130
+ }
131
+ function describeHttpFailure(provider, status, body) {
132
+ const error = typeof body === 'object' && body !== null && 'error' in body ? body.error : undefined;
133
+ const detail = typeof error === 'object' && error !== null && 'message' in error
134
+ ? String(error.message)
135
+ : 'Unknown error';
136
+ return `${provider} error [${status}]: ${detail}`;
137
+ }
138
+ /**
139
+ * The message that asks for JSON and nothing else.
140
+ *
141
+ * Wording tracks the reference deliberately, including the parenthetical about
142
+ * backticks: models fence JSON by habit, and the phrasing is the only lever
143
+ * there is. `extractStructured` still unfences as a second line of defence,
144
+ * because a plea is not a guarantee.
145
+ */
146
+ function schemaInstruction(request) {
147
+ return `Respond with ONLY JSON (i.e. not in backticks or a code block, with NO CONTENT outside the JSON) that matches the following schema: \n ${JSON.stringify(request.schema().toObject(), null, 2)}`;
148
+ }
149
+ /** An SSE payload that is not JSON is skipped rather than fatal. */
150
+ function parsePayload(payload) {
151
+ try {
152
+ const parsed = JSON.parse(payload);
153
+ return isJsonObject(parsed) ? parsed : {};
154
+ }
155
+ catch {
156
+ return {};
157
+ }
158
+ }
159
+ /** Drain a non-stream body so an HTTP failure can still report what it said. */
160
+ async function collectJson(chunks) {
161
+ let text = '';
162
+ for await (const chunk of chunks) {
163
+ text += chunk;
164
+ }
165
+ try {
166
+ return JSON.parse(text);
167
+ }
168
+ catch {
169
+ return null;
170
+ }
171
+ }
172
+ //# sourceMappingURL=anthropic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/providers/anthropic/anthropic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { JsonObject } from '../../json.js';
2
+ import type { TextRequest } from '../../text/request.js';
3
+ /**
4
+ * Build the Anthropic Messages API request body.
5
+ *
6
+ * The same two rules as the OpenAI body decide every key: `model`, `messages`
7
+ * and `max_tokens` are merged UNCONDITIONALLY, and everything else goes through
8
+ * a not-null filter, so `usingTemperature(0)` survives and only `null` is
9
+ * dropped.
10
+ *
11
+ * What differs is `system`: it is a top-level field here, not a message, so
12
+ * system prompts never enter `messages` at all.
13
+ */
14
+ export declare function buildRequestBody(request: TextRequest): JsonObject;
15
+ //# sourceMappingURL=build-request-body.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-request-body.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic/build-request-body.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAa,MAAM,eAAe,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAezD;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CA4BjE"}
@@ -0,0 +1,51 @@
1
+ import { whereNotNull } from '../../internal/filters.js';
2
+ import { mapMessages, mapSystem } from './maps/message-map.js';
3
+ import { mapToolChoice } from './maps/tool-choice-map.js';
4
+ import { mapTools } from './maps/tool-map.js';
5
+ /**
6
+ * Anthropic requires `max_tokens`, and has no documented default.
7
+ *
8
+ * The OpenAI body sends `max_output_tokens: null` for a request that never set
9
+ * one; doing the same here is a 400. A number has to be chosen, so it is named
10
+ * here rather than buried, and it is generous enough that hitting it means the
11
+ * caller genuinely wanted a long answer and should say so.
12
+ */
13
+ const DEFAULT_MAX_TOKENS = 4096;
14
+ /**
15
+ * Build the Anthropic Messages API request body.
16
+ *
17
+ * The same two rules as the OpenAI body decide every key: `model`, `messages`
18
+ * and `max_tokens` are merged UNCONDITIONALLY, and everything else goes through
19
+ * a not-null filter, so `usingTemperature(0)` survives and only `null` is
20
+ * dropped.
21
+ *
22
+ * What differs is `system`: it is a top-level field here, not a message, so
23
+ * system prompts never enter `messages` at all.
24
+ */
25
+ export function buildRequestBody(request) {
26
+ const body = {
27
+ model: request.model(),
28
+ messages: mapMessages(request.messages()),
29
+ max_tokens: request.maxTokens() ?? DEFAULT_MAX_TOKENS,
30
+ };
31
+ const tools = mapTools(request.tools());
32
+ const optional = {
33
+ system: mapSystem(request.systemPrompts()),
34
+ temperature: request.temperature(),
35
+ top_p: request.topP(),
36
+ top_k: request.topK(),
37
+ // Collapsed to null BEFORE the filter, so the key vanishes rather than
38
+ // sending an empty array — which changes tool_choice defaults.
39
+ tools: tools.length > 0 ? tools : null,
40
+ tool_choice: mapToolChoice(request.toolChoice()),
41
+ // Extended thinking. Asymmetric like OpenAI's reasoning and for the same
42
+ // reason: withReasoning(true) emits nothing, because a budget is a
43
+ // per-provider setting the toggle must not invent. An explicit `thinking`
44
+ // provider option wins.
45
+ thinking: request.providerOptions('thinking') ?? null,
46
+ metadata: request.providerOptions('metadata'),
47
+ stop_sequences: request.providerOptions('stop_sequences'),
48
+ };
49
+ return { ...body, ...whereNotNull(optional) };
50
+ }
51
+ //# sourceMappingURL=build-request-body.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-request-body.js","sourceRoot":"","sources":["../../../src/providers/anthropic/build-request-body.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;;;;;;GAOG;AACH,MAAM,kBAAkB,GAAG,IAAI,CAAC;AAEhC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAoB;IACnD,MAAM,IAAI,GAAe;QACvB,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE;QACtB,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACzC,UAAU,EAAE,OAAO,CAAC,SAAS,EAAE,IAAI,kBAAkB;KACtD,CAAC;IAEF,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAExC,MAAM,QAAQ,GAAiD;QAC7D,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1C,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE;QAClC,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE;QACrB,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE;QACrB,uEAAuE;QACvE,+DAA+D;QAC/D,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;QACtC,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAChD,yEAAyE;QACzE,mEAAmE;QACnE,0EAA0E;QAC1E,wBAAwB;QACxB,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,IAAI;QACrD,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC;QAC7C,cAAc,EAAE,OAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC;KAC1D,CAAC;IAEF,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;AAChD,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { JsonObject } from '../../../json.js';
2
+ import { FinishReason } from '../../../enums.js';
3
+ /**
4
+ * Map Anthropic's `stop_reason` onto the shared enum.
5
+ *
6
+ * `end_turn` and `stop_sequence` both mean the model chose to stop, so both
7
+ * collapse to Stop — the distinction is about HOW it stopped, which the raw
8
+ * payload still carries for anyone who needs it.
9
+ *
10
+ * An unrecognised reason becomes Unknown rather than Stop. Guessing Stop would
11
+ * present a truncated or refused generation as a complete one.
12
+ */
13
+ export declare function mapFinishReason(data: JsonObject): FinishReason;
14
+ //# sourceMappingURL=finish-reason-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finish-reason-map.d.ts","sourceRoot":"","sources":["../../../../src/providers/anthropic/maps/finish-reason-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAGjD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,YAAY,CAgB9D"}
@@ -0,0 +1,30 @@
1
+ import { FinishReason } from '../../../enums.js';
2
+ import { readString } from '../../../internal/filters.js';
3
+ /**
4
+ * Map Anthropic's `stop_reason` onto the shared enum.
5
+ *
6
+ * `end_turn` and `stop_sequence` both mean the model chose to stop, so both
7
+ * collapse to Stop — the distinction is about HOW it stopped, which the raw
8
+ * payload still carries for anyone who needs it.
9
+ *
10
+ * An unrecognised reason becomes Unknown rather than Stop. Guessing Stop would
11
+ * present a truncated or refused generation as a complete one.
12
+ */
13
+ export function mapFinishReason(data) {
14
+ switch (readString(data.stop_reason, '')) {
15
+ case 'end_turn':
16
+ case 'stop_sequence':
17
+ return FinishReason.Stop;
18
+ case 'tool_use':
19
+ return FinishReason.ToolCalls;
20
+ case 'max_tokens':
21
+ return FinishReason.Length;
22
+ case 'pause_turn':
23
+ return FinishReason.Pause;
24
+ case 'refusal':
25
+ return FinishReason.Refusal;
26
+ default:
27
+ return FinishReason.Unknown;
28
+ }
29
+ }
30
+ //# sourceMappingURL=finish-reason-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finish-reason-map.js","sourceRoot":"","sources":["../../../../src/providers/anthropic/maps/finish-reason-map.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE1D;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,IAAgB;IAC9C,QAAQ,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC;QACzC,KAAK,UAAU,CAAC;QAChB,KAAK,eAAe;YAClB,OAAO,YAAY,CAAC,IAAI,CAAC;QAC3B,KAAK,UAAU;YACb,OAAO,YAAY,CAAC,SAAS,CAAC;QAChC,KAAK,YAAY;YACf,OAAO,YAAY,CAAC,MAAM,CAAC;QAC7B,KAAK,YAAY;YACf,OAAO,YAAY,CAAC,KAAK,CAAC;QAC5B,KAAK,SAAS;YACZ,OAAO,YAAY,CAAC,OAAO,CAAC;QAC9B;YACE,OAAO,YAAY,CAAC,OAAO,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { JsonObject } from '../../../json.js';
2
+ import type { Document } from '../../../value-objects/media/document.js';
3
+ import type { Image } from '../../../value-objects/media/image.js';
4
+ /**
5
+ * Anthropic's image block.
6
+ *
7
+ * The payload never appears at the top level: it goes in a `source` object
8
+ * whose OWN `type` says which of the three forms it is. So an image block
9
+ * carries two `type` keys at two depths meaning different things — the outer
10
+ * one is the block kind, the inner one is where the bytes came from.
11
+ */
12
+ export declare function mapImage(image: Image): JsonObject;
13
+ /**
14
+ * Anthropic's document block.
15
+ *
16
+ * The only provider here that takes a document five ways, and the only one that
17
+ * takes CHUNKS at all — pre-split text as a `content` source, each chunk its own
18
+ * text block.
19
+ *
20
+ * Text documents go as `text`, not base64: Anthropic reads a `text/*` source
21
+ * directly and base64-wrapping it would make the model's citations point into an
22
+ * encoded blob.
23
+ */
24
+ export declare function mapDocument(document: Document): JsonObject;
25
+ //# sourceMappingURL=media-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-map.d.ts","sourceRoot":"","sources":["../../../../src/providers/anthropic/maps/media-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uCAAuC,CAAC;AAEnE;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,CAEjD;AAyBD;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,CAM1D"}
@@ -0,0 +1,87 @@
1
+ import { PrismError } from '../../../errors.js';
2
+ import { whereNotNull } from '../../../internal/filters.js';
3
+ /**
4
+ * Anthropic's image block.
5
+ *
6
+ * The payload never appears at the top level: it goes in a `source` object
7
+ * whose OWN `type` says which of the three forms it is. So an image block
8
+ * carries two `type` keys at two depths meaning different things — the outer
9
+ * one is the block kind, the inner one is where the bytes came from.
10
+ */
11
+ export function mapImage(image) {
12
+ return { type: 'image', source: imageSource(image) };
13
+ }
14
+ function imageSource(image) {
15
+ if (image.isFileId()) {
16
+ return { type: 'file', file_id: image.fileId() };
17
+ }
18
+ if (image.isUrl()) {
19
+ return { type: 'url', url: image.url };
20
+ }
21
+ const base64 = image.base64();
22
+ const mimeType = image.mimeType();
23
+ if (base64 === null || mimeType === null) {
24
+ throw PrismError.unsupportedMedia('Anthropic', 'image', 'a file id, a url, or bytes with a known mime type');
25
+ }
26
+ return { type: 'base64', media_type: mimeType, data: base64 };
27
+ }
28
+ /**
29
+ * Anthropic's document block.
30
+ *
31
+ * The only provider here that takes a document five ways, and the only one that
32
+ * takes CHUNKS at all — pre-split text as a `content` source, each chunk its own
33
+ * text block.
34
+ *
35
+ * Text documents go as `text`, not base64: Anthropic reads a `text/*` source
36
+ * directly and base64-wrapping it would make the model's citations point into an
37
+ * encoded blob.
38
+ */
39
+ export function mapDocument(document) {
40
+ return whereNotNull({
41
+ type: 'document',
42
+ title: document.documentTitle(),
43
+ source: documentSource(document),
44
+ });
45
+ }
46
+ function documentSource(document) {
47
+ if (document.isFileId()) {
48
+ return { type: 'file', file_id: document.fileId() };
49
+ }
50
+ if (document.isUrl()) {
51
+ return { type: 'url', url: document.url };
52
+ }
53
+ const chunks = document.chunks();
54
+ if (chunks !== null) {
55
+ return {
56
+ type: 'content',
57
+ content: chunks.map((chunk) => ({ type: 'text', text: chunk })),
58
+ };
59
+ }
60
+ const mimeType = document.mimeType();
61
+ const rawContent = document.rawContent();
62
+ if (mimeType !== null && mimeType.startsWith('text/')) {
63
+ if (rawContent === null) {
64
+ throw PrismError.unsupportedMedia('Anthropic', 'text document', 'bytes it can decode');
65
+ }
66
+ // `fatal: true`. The default decoder replaces every invalid byte with
67
+ // U+FFFD, so a document declared `text/plain` that is not actually UTF-8
68
+ // would reach the model as text peppered with replacement characters — and
69
+ // Anthropic cites into that content, so the citation would point at
70
+ // corruption. `prism-py` raised on the same input; both now refuse it by
71
+ // name, which is the answer the two ports have to share.
72
+ let decoded;
73
+ try {
74
+ decoded = new TextDecoder('utf-8', { fatal: true }).decode(rawContent);
75
+ }
76
+ catch (cause) {
77
+ throw PrismError.unsupportedMedia('Anthropic', 'text document', `valid UTF-8, or a mime type that is not text/* — ${String(cause)}`);
78
+ }
79
+ return { type: 'text', media_type: mimeType, data: decoded };
80
+ }
81
+ const base64 = document.base64();
82
+ if (base64 === null || mimeType === null) {
83
+ throw PrismError.unsupportedMedia('Anthropic', 'document', 'a file id, a url, chunks, or bytes with a known mime type');
84
+ }
85
+ return { type: 'base64', media_type: mimeType, data: base64 };
86
+ }
87
+ //# sourceMappingURL=media-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-map.js","sourceRoot":"","sources":["../../../../src/providers/anthropic/maps/media-map.ts"],"names":[],"mappings":"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"}