@bastani/pi-ai 0.9.19 → 0.9.20-alpha.10

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 (445) hide show
  1. package/CHANGELOG.md +83 -1
  2. package/NOTICE.md +1 -1
  3. package/README.md +203 -30
  4. package/dist/api/anthropic-messages.d.ts.map +1 -1
  5. package/dist/api/anthropic-messages.js +255 -97
  6. package/dist/api/anthropic-messages.js.map +1 -1
  7. package/dist/api/azure-openai-responses.d.ts.map +1 -1
  8. package/dist/api/azure-openai-responses.js +21 -6
  9. package/dist/api/azure-openai-responses.js.map +1 -1
  10. package/dist/api/bedrock-converse-stream.d.ts.map +1 -1
  11. package/dist/api/bedrock-converse-stream.js +20 -15
  12. package/dist/api/bedrock-converse-stream.js.map +1 -1
  13. package/dist/api/cloudflare-workers-ai-system-one.d.ts +4 -0
  14. package/dist/api/cloudflare-workers-ai-system-one.d.ts.map +1 -0
  15. package/dist/api/cloudflare-workers-ai-system-one.js +43 -0
  16. package/dist/api/cloudflare-workers-ai-system-one.js.map +1 -0
  17. package/dist/api/cloudflare-workers-ai-system-one.lazy.d.ts +3 -0
  18. package/dist/api/cloudflare-workers-ai-system-one.lazy.d.ts.map +1 -0
  19. package/dist/api/cloudflare-workers-ai-system-one.lazy.js +4 -0
  20. package/dist/api/cloudflare-workers-ai-system-one.lazy.js.map +1 -0
  21. package/dist/api/cloudflare.d.ts +2 -0
  22. package/dist/api/cloudflare.d.ts.map +1 -1
  23. package/dist/api/cloudflare.js +2 -0
  24. package/dist/api/cloudflare.js.map +1 -1
  25. package/dist/api/constrained-sampling.d.ts +8 -3
  26. package/dist/api/constrained-sampling.d.ts.map +1 -1
  27. package/dist/api/constrained-sampling.js +29 -11
  28. package/dist/api/constrained-sampling.js.map +1 -1
  29. package/dist/api/google-generative-ai.d.ts.map +1 -1
  30. package/dist/api/google-generative-ai.js +23 -80
  31. package/dist/api/google-generative-ai.js.map +1 -1
  32. package/dist/api/google-shared.d.ts +13 -4
  33. package/dist/api/google-shared.d.ts.map +1 -1
  34. package/dist/api/google-shared.js +54 -4
  35. package/dist/api/google-shared.js.map +1 -1
  36. package/dist/api/google-vertex.d.ts.map +1 -1
  37. package/dist/api/google-vertex.js +26 -65
  38. package/dist/api/google-vertex.js.map +1 -1
  39. package/dist/api/mistral-conversations.d.ts.map +1 -1
  40. package/dist/api/mistral-conversations.js +18 -13
  41. package/dist/api/mistral-conversations.js.map +1 -1
  42. package/dist/api/openai-codex-responses.d.ts.map +1 -1
  43. package/dist/api/openai-codex-responses.js +40 -26
  44. package/dist/api/openai-codex-responses.js.map +1 -1
  45. package/dist/api/openai-completions.d.ts +6 -4
  46. package/dist/api/openai-completions.d.ts.map +1 -1
  47. package/dist/api/openai-completions.js +44 -58
  48. package/dist/api/openai-completions.js.map +1 -1
  49. package/dist/api/openai-responses-shared.d.ts +11 -5
  50. package/dist/api/openai-responses-shared.d.ts.map +1 -1
  51. package/dist/api/openai-responses-shared.js +65 -58
  52. package/dist/api/openai-responses-shared.js.map +1 -1
  53. package/dist/api/openai-responses.d.ts.map +1 -1
  54. package/dist/api/openai-responses.js +15 -19
  55. package/dist/api/openai-responses.js.map +1 -1
  56. package/dist/api/openrouter-images.d.ts +2 -1
  57. package/dist/api/openrouter-images.d.ts.map +1 -1
  58. package/dist/api/openrouter-images.js +1 -0
  59. package/dist/api/openrouter-images.js.map +1 -1
  60. package/dist/api/openrouter-images.lazy.d.ts.map +1 -1
  61. package/dist/api/openrouter-images.lazy.js.map +1 -1
  62. package/dist/api/pi-messages.d.ts +3 -3
  63. package/dist/api/pi-messages.d.ts.map +1 -1
  64. package/dist/api/pi-messages.js +3 -2
  65. package/dist/api/pi-messages.js.map +1 -1
  66. package/dist/api/simple-options.d.ts +3 -3
  67. package/dist/api/simple-options.d.ts.map +1 -1
  68. package/dist/api/simple-options.js +1 -0
  69. package/dist/api/simple-options.js.map +1 -1
  70. package/dist/api/system-one-shared.d.ts +23 -0
  71. package/dist/api/system-one-shared.d.ts.map +1 -0
  72. package/dist/api/system-one-shared.js +170 -0
  73. package/dist/api/system-one-shared.js.map +1 -0
  74. package/dist/api/transform-messages.d.ts.map +1 -1
  75. package/dist/api/transform-messages.js +21 -7
  76. package/dist/api/transform-messages.js.map +1 -1
  77. package/dist/api/typesafe-system-one.d.ts +4 -0
  78. package/dist/api/typesafe-system-one.d.ts.map +1 -0
  79. package/dist/api/typesafe-system-one.js +19 -0
  80. package/dist/api/typesafe-system-one.js.map +1 -0
  81. package/dist/api/typesafe-system-one.lazy.d.ts +3 -0
  82. package/dist/api/typesafe-system-one.lazy.d.ts.map +1 -0
  83. package/dist/api/typesafe-system-one.lazy.js +4 -0
  84. package/dist/api/typesafe-system-one.lazy.js.map +1 -0
  85. package/dist/auth/credential-store.d.ts.map +1 -1
  86. package/dist/auth/credential-store.js +3 -2
  87. package/dist/auth/credential-store.js.map +1 -1
  88. package/dist/auth/oauth/load.d.ts +2 -0
  89. package/dist/auth/oauth/load.d.ts.map +1 -1
  90. package/dist/auth/oauth/load.js +5 -0
  91. package/dist/auth/oauth/load.js.map +1 -1
  92. package/dist/auth/oauth/meta.d.ts +17 -0
  93. package/dist/auth/oauth/meta.d.ts.map +1 -0
  94. package/dist/auth/oauth/meta.js +190 -0
  95. package/dist/auth/oauth/meta.js.map +1 -0
  96. package/dist/auth/resolve.d.ts +6 -8
  97. package/dist/auth/resolve.d.ts.map +1 -1
  98. package/dist/auth/resolve.js +29 -26
  99. package/dist/auth/resolve.js.map +1 -1
  100. package/dist/bun-oauth.d.ts.map +1 -1
  101. package/dist/bun-oauth.js +2 -0
  102. package/dist/bun-oauth.js.map +1 -1
  103. package/dist/compat.d.ts +3 -3
  104. package/dist/compat.d.ts.map +1 -1
  105. package/dist/compat.js +9 -6
  106. package/dist/compat.js.map +1 -1
  107. package/dist/decision-models.d.ts +21 -0
  108. package/dist/decision-models.d.ts.map +1 -0
  109. package/dist/decision-models.generated.d.ts +3 -0
  110. package/dist/decision-models.generated.d.ts.map +1 -0
  111. package/dist/decision-models.generated.js +47 -0
  112. package/dist/decision-models.generated.js.map +1 -0
  113. package/dist/decision-models.js +8 -0
  114. package/dist/decision-models.js.map +1 -0
  115. package/dist/env-api-keys.d.ts +2 -0
  116. package/dist/env-api-keys.d.ts.map +1 -1
  117. package/dist/env-api-keys.js +61 -43
  118. package/dist/env-api-keys.js.map +1 -1
  119. package/dist/image-models.d.ts +19 -8
  120. package/dist/image-models.d.ts.map +1 -1
  121. package/dist/image-models.js +14 -13
  122. package/dist/image-models.js.map +1 -1
  123. package/dist/images-api-registry.d.ts +7 -7
  124. package/dist/images-api-registry.d.ts.map +1 -1
  125. package/dist/images-api-registry.js.map +1 -1
  126. package/dist/images.d.ts +7 -2
  127. package/dist/images.d.ts.map +1 -1
  128. package/dist/images.js +5 -0
  129. package/dist/images.js.map +1 -1
  130. package/dist/index.d.ts +4 -2
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.js +4 -2
  133. package/dist/index.js.map +1 -1
  134. package/dist/model-catalog.d.ts +25 -9
  135. package/dist/model-catalog.d.ts.map +1 -1
  136. package/dist/model-catalog.js +14 -2
  137. package/dist/model-catalog.js.map +1 -1
  138. package/dist/models-store.d.ts +3 -2
  139. package/dist/models-store.d.ts.map +1 -1
  140. package/dist/models-store.js.map +1 -1
  141. package/dist/models.d.ts +99 -31
  142. package/dist/models.d.ts.map +1 -1
  143. package/dist/models.generated.d.ts +133 -39
  144. package/dist/models.generated.d.ts.map +1 -1
  145. package/dist/models.generated.js +133 -39
  146. package/dist/models.generated.js.map +1 -1
  147. package/dist/models.js +161 -31
  148. package/dist/models.js.map +1 -1
  149. package/dist/providers/all.d.ts +19 -13
  150. package/dist/providers/all.d.ts.map +1 -1
  151. package/dist/providers/all.js +27 -21
  152. package/dist/providers/all.js.map +1 -1
  153. package/dist/providers/amazon-bedrock.models.d.ts +4 -3
  154. package/dist/providers/amazon-bedrock.models.d.ts.map +1 -1
  155. package/dist/providers/amazon-bedrock.models.js +4 -2
  156. package/dist/providers/amazon-bedrock.models.js.map +1 -1
  157. package/dist/providers/ant-ling.models.d.ts +4 -3
  158. package/dist/providers/ant-ling.models.d.ts.map +1 -1
  159. package/dist/providers/ant-ling.models.js +4 -2
  160. package/dist/providers/ant-ling.models.js.map +1 -1
  161. package/dist/providers/anthropic.models.d.ts +4 -3
  162. package/dist/providers/anthropic.models.d.ts.map +1 -1
  163. package/dist/providers/anthropic.models.js +4 -2
  164. package/dist/providers/anthropic.models.js.map +1 -1
  165. package/dist/providers/azure-openai-responses.models.d.ts +4 -3
  166. package/dist/providers/azure-openai-responses.models.d.ts.map +1 -1
  167. package/dist/providers/azure-openai-responses.models.js +4 -2
  168. package/dist/providers/azure-openai-responses.models.js.map +1 -1
  169. package/dist/providers/baseten.models.d.ts +4 -3
  170. package/dist/providers/baseten.models.d.ts.map +1 -1
  171. package/dist/providers/baseten.models.js +4 -2
  172. package/dist/providers/baseten.models.js.map +1 -1
  173. package/dist/providers/cerebras.models.d.ts +4 -3
  174. package/dist/providers/cerebras.models.d.ts.map +1 -1
  175. package/dist/providers/cerebras.models.js +4 -2
  176. package/dist/providers/cerebras.models.js.map +1 -1
  177. package/dist/providers/cloudflare-ai-gateway.models.d.ts +4 -3
  178. package/dist/providers/cloudflare-ai-gateway.models.d.ts.map +1 -1
  179. package/dist/providers/cloudflare-ai-gateway.models.js +4 -2
  180. package/dist/providers/cloudflare-ai-gateway.models.js.map +1 -1
  181. package/dist/providers/cloudflare-stream.d.ts +6 -2
  182. package/dist/providers/cloudflare-stream.d.ts.map +1 -1
  183. package/dist/providers/cloudflare-stream.js +6 -0
  184. package/dist/providers/cloudflare-stream.js.map +1 -1
  185. package/dist/providers/cloudflare-workers-ai.d.ts.map +1 -1
  186. package/dist/providers/cloudflare-workers-ai.js +10 -3
  187. package/dist/providers/cloudflare-workers-ai.js.map +1 -1
  188. package/dist/providers/cloudflare-workers-ai.models.d.ts +4 -3
  189. package/dist/providers/cloudflare-workers-ai.models.d.ts.map +1 -1
  190. package/dist/providers/cloudflare-workers-ai.models.js +4 -2
  191. package/dist/providers/cloudflare-workers-ai.models.js.map +1 -1
  192. package/dist/providers/data/.manifest.json +1 -1
  193. package/dist/providers/data/amazon-bedrock.json +1 -1
  194. package/dist/providers/data/ant-ling.json +1 -1
  195. package/dist/providers/data/anthropic.json +1 -1
  196. package/dist/providers/data/azure-openai-responses.json +1 -1
  197. package/dist/providers/data/baseten.json +1 -1
  198. package/dist/providers/data/cerebras.json +1 -1
  199. package/dist/providers/data/cloudflare-ai-gateway.json +1 -1
  200. package/dist/providers/data/cloudflare-workers-ai.json +1 -1
  201. package/dist/providers/data/deepseek.json +1 -1
  202. package/dist/providers/data/fireworks.json +1 -1
  203. package/dist/providers/data/github-copilot.json +1 -1
  204. package/dist/providers/data/google-vertex.json +1 -1
  205. package/dist/providers/data/google.json +1 -1
  206. package/dist/providers/data/groq.json +1 -1
  207. package/dist/providers/data/huggingface.json +1 -1
  208. package/dist/providers/data/kimi-coding.json +1 -1
  209. package/dist/providers/data/meta.json +1 -0
  210. package/dist/providers/data/minimax-cn.json +1 -1
  211. package/dist/providers/data/minimax.json +1 -1
  212. package/dist/providers/data/mistral.json +1 -1
  213. package/dist/providers/data/moonshotai-cn.json +1 -1
  214. package/dist/providers/data/moonshotai.json +1 -1
  215. package/dist/providers/data/nvidia.json +1 -1
  216. package/dist/providers/data/openai-codex.json +1 -1
  217. package/dist/providers/data/openai.json +1 -1
  218. package/dist/providers/data/opencode-go.json +1 -1
  219. package/dist/providers/data/opencode.json +1 -1
  220. package/dist/providers/data/openrouter.json +1 -1
  221. package/dist/providers/data/qwen-token-plan-cn.json +1 -1
  222. package/dist/providers/data/qwen-token-plan-individual.json +1 -1
  223. package/dist/providers/data/qwen-token-plan.json +1 -1
  224. package/dist/providers/data/radius.json +1 -0
  225. package/dist/providers/data/together.json +1 -1
  226. package/dist/providers/data/typesafe.json +1 -0
  227. package/dist/providers/data/vercel-ai-gateway.json +1 -1
  228. package/dist/providers/data/xai.json +1 -1
  229. package/dist/providers/data/xiaomi-token-plan-ams.json +1 -1
  230. package/dist/providers/data/xiaomi-token-plan-cn.json +1 -1
  231. package/dist/providers/data/xiaomi-token-plan-sgp.json +1 -1
  232. package/dist/providers/data/xiaomi.json +1 -1
  233. package/dist/providers/data/zai-coding-cn.json +1 -1
  234. package/dist/providers/data/zai.json +1 -1
  235. package/dist/providers/deepseek.models.d.ts +4 -3
  236. package/dist/providers/deepseek.models.d.ts.map +1 -1
  237. package/dist/providers/deepseek.models.js +4 -2
  238. package/dist/providers/deepseek.models.js.map +1 -1
  239. package/dist/providers/faux.d.ts +3 -2
  240. package/dist/providers/faux.d.ts.map +1 -1
  241. package/dist/providers/faux.js +12 -11
  242. package/dist/providers/faux.js.map +1 -1
  243. package/dist/providers/fireworks.models.d.ts +4 -3
  244. package/dist/providers/fireworks.models.d.ts.map +1 -1
  245. package/dist/providers/fireworks.models.js +4 -2
  246. package/dist/providers/fireworks.models.js.map +1 -1
  247. package/dist/providers/github-copilot.models.d.ts +4 -3
  248. package/dist/providers/github-copilot.models.d.ts.map +1 -1
  249. package/dist/providers/github-copilot.models.js +4 -2
  250. package/dist/providers/github-copilot.models.js.map +1 -1
  251. package/dist/providers/google-vertex.models.d.ts +4 -3
  252. package/dist/providers/google-vertex.models.d.ts.map +1 -1
  253. package/dist/providers/google-vertex.models.js +4 -2
  254. package/dist/providers/google-vertex.models.js.map +1 -1
  255. package/dist/providers/google.models.d.ts +4 -3
  256. package/dist/providers/google.models.d.ts.map +1 -1
  257. package/dist/providers/google.models.js +4 -2
  258. package/dist/providers/google.models.js.map +1 -1
  259. package/dist/providers/groq.models.d.ts +4 -3
  260. package/dist/providers/groq.models.d.ts.map +1 -1
  261. package/dist/providers/groq.models.js +4 -2
  262. package/dist/providers/groq.models.js.map +1 -1
  263. package/dist/providers/huggingface.models.d.ts +4 -3
  264. package/dist/providers/huggingface.models.d.ts.map +1 -1
  265. package/dist/providers/huggingface.models.js +4 -2
  266. package/dist/providers/huggingface.models.js.map +1 -1
  267. package/dist/providers/images/register-builtins.d.ts +1 -1
  268. package/dist/providers/images/register-builtins.d.ts.map +1 -1
  269. package/dist/providers/images/register-builtins.js.map +1 -1
  270. package/dist/providers/kimi-coding.models.d.ts +4 -3
  271. package/dist/providers/kimi-coding.models.d.ts.map +1 -1
  272. package/dist/providers/kimi-coding.models.js +4 -2
  273. package/dist/providers/kimi-coding.models.js.map +1 -1
  274. package/dist/providers/meta.d.ts +3 -0
  275. package/dist/providers/meta.d.ts.map +1 -0
  276. package/dist/providers/meta.js +24 -0
  277. package/dist/providers/meta.js.map +1 -0
  278. package/dist/providers/meta.models.d.ts +5 -0
  279. package/dist/providers/meta.models.d.ts.map +1 -0
  280. package/dist/providers/meta.models.js +8 -0
  281. package/dist/providers/meta.models.js.map +1 -0
  282. package/dist/providers/minimax-cn.models.d.ts +4 -3
  283. package/dist/providers/minimax-cn.models.d.ts.map +1 -1
  284. package/dist/providers/minimax-cn.models.js +4 -2
  285. package/dist/providers/minimax-cn.models.js.map +1 -1
  286. package/dist/providers/minimax.models.d.ts +4 -3
  287. package/dist/providers/minimax.models.d.ts.map +1 -1
  288. package/dist/providers/minimax.models.js +4 -2
  289. package/dist/providers/minimax.models.js.map +1 -1
  290. package/dist/providers/mistral.models.d.ts +4 -3
  291. package/dist/providers/mistral.models.d.ts.map +1 -1
  292. package/dist/providers/mistral.models.js +4 -2
  293. package/dist/providers/mistral.models.js.map +1 -1
  294. package/dist/providers/moonshotai-cn.models.d.ts +4 -3
  295. package/dist/providers/moonshotai-cn.models.d.ts.map +1 -1
  296. package/dist/providers/moonshotai-cn.models.js +4 -2
  297. package/dist/providers/moonshotai-cn.models.js.map +1 -1
  298. package/dist/providers/moonshotai.models.d.ts +4 -3
  299. package/dist/providers/moonshotai.models.d.ts.map +1 -1
  300. package/dist/providers/moonshotai.models.js +4 -2
  301. package/dist/providers/moonshotai.models.js.map +1 -1
  302. package/dist/providers/nvidia.models.d.ts +4 -3
  303. package/dist/providers/nvidia.models.d.ts.map +1 -1
  304. package/dist/providers/nvidia.models.js +4 -2
  305. package/dist/providers/nvidia.models.js.map +1 -1
  306. package/dist/providers/openai-codex.models.d.ts +4 -3
  307. package/dist/providers/openai-codex.models.d.ts.map +1 -1
  308. package/dist/providers/openai-codex.models.js +4 -2
  309. package/dist/providers/openai-codex.models.js.map +1 -1
  310. package/dist/providers/openai.models.d.ts +4 -3
  311. package/dist/providers/openai.models.d.ts.map +1 -1
  312. package/dist/providers/openai.models.js +4 -2
  313. package/dist/providers/openai.models.js.map +1 -1
  314. package/dist/providers/opencode-go.models.d.ts +4 -3
  315. package/dist/providers/opencode-go.models.d.ts.map +1 -1
  316. package/dist/providers/opencode-go.models.js +4 -2
  317. package/dist/providers/opencode-go.models.js.map +1 -1
  318. package/dist/providers/opencode.models.d.ts +4 -3
  319. package/dist/providers/opencode.models.d.ts.map +1 -1
  320. package/dist/providers/opencode.models.js +4 -2
  321. package/dist/providers/opencode.models.js.map +1 -1
  322. package/dist/providers/openrouter.d.ts.map +1 -1
  323. package/dist/providers/openrouter.js +11 -2
  324. package/dist/providers/openrouter.js.map +1 -1
  325. package/dist/providers/openrouter.models.d.ts +4 -3
  326. package/dist/providers/openrouter.models.d.ts.map +1 -1
  327. package/dist/providers/openrouter.models.js +4 -2
  328. package/dist/providers/openrouter.models.js.map +1 -1
  329. package/dist/providers/qwen-token-plan-cn.models.d.ts +4 -3
  330. package/dist/providers/qwen-token-plan-cn.models.d.ts.map +1 -1
  331. package/dist/providers/qwen-token-plan-cn.models.js +4 -2
  332. package/dist/providers/qwen-token-plan-cn.models.js.map +1 -1
  333. package/dist/providers/qwen-token-plan-individual.models.d.ts +4 -3
  334. package/dist/providers/qwen-token-plan-individual.models.d.ts.map +1 -1
  335. package/dist/providers/qwen-token-plan-individual.models.js +4 -2
  336. package/dist/providers/qwen-token-plan-individual.models.js.map +1 -1
  337. package/dist/providers/qwen-token-plan.models.d.ts +4 -3
  338. package/dist/providers/qwen-token-plan.models.d.ts.map +1 -1
  339. package/dist/providers/qwen-token-plan.models.js +4 -2
  340. package/dist/providers/qwen-token-plan.models.js.map +1 -1
  341. package/dist/providers/radius.d.ts.map +1 -1
  342. package/dist/providers/radius.js +19 -5
  343. package/dist/providers/radius.js.map +1 -1
  344. package/dist/providers/radius.models.d.ts +5 -0
  345. package/dist/providers/radius.models.d.ts.map +1 -0
  346. package/dist/providers/radius.models.js +8 -0
  347. package/dist/providers/radius.models.js.map +1 -0
  348. package/dist/providers/together.models.d.ts +4 -3
  349. package/dist/providers/together.models.d.ts.map +1 -1
  350. package/dist/providers/together.models.js +4 -2
  351. package/dist/providers/together.models.js.map +1 -1
  352. package/dist/providers/typesafe.d.ts +3 -0
  353. package/dist/providers/typesafe.d.ts.map +1 -0
  354. package/dist/providers/typesafe.js +18 -0
  355. package/dist/providers/typesafe.js.map +1 -0
  356. package/dist/providers/typesafe.models.d.ts +5 -0
  357. package/dist/providers/typesafe.models.d.ts.map +1 -0
  358. package/dist/providers/typesafe.models.js +8 -0
  359. package/dist/providers/typesafe.models.js.map +1 -0
  360. package/dist/providers/vercel-ai-gateway.models.d.ts +4 -3
  361. package/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -1
  362. package/dist/providers/vercel-ai-gateway.models.js +4 -2
  363. package/dist/providers/vercel-ai-gateway.models.js.map +1 -1
  364. package/dist/providers/xai.models.d.ts +4 -3
  365. package/dist/providers/xai.models.d.ts.map +1 -1
  366. package/dist/providers/xai.models.js +4 -2
  367. package/dist/providers/xai.models.js.map +1 -1
  368. package/dist/providers/xiaomi-token-plan-ams.models.d.ts +4 -3
  369. package/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +1 -1
  370. package/dist/providers/xiaomi-token-plan-ams.models.js +4 -2
  371. package/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -1
  372. package/dist/providers/xiaomi-token-plan-cn.models.d.ts +4 -3
  373. package/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +1 -1
  374. package/dist/providers/xiaomi-token-plan-cn.models.js +4 -2
  375. package/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -1
  376. package/dist/providers/xiaomi-token-plan-sgp.models.d.ts +4 -3
  377. package/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +1 -1
  378. package/dist/providers/xiaomi-token-plan-sgp.models.js +4 -2
  379. package/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -1
  380. package/dist/providers/xiaomi.models.d.ts +4 -3
  381. package/dist/providers/xiaomi.models.d.ts.map +1 -1
  382. package/dist/providers/xiaomi.models.js +4 -2
  383. package/dist/providers/xiaomi.models.js.map +1 -1
  384. package/dist/providers/zai-coding-cn.models.d.ts +4 -3
  385. package/dist/providers/zai-coding-cn.models.d.ts.map +1 -1
  386. package/dist/providers/zai-coding-cn.models.js +4 -2
  387. package/dist/providers/zai-coding-cn.models.js.map +1 -1
  388. package/dist/providers/zai.models.d.ts +4 -3
  389. package/dist/providers/zai.models.d.ts.map +1 -1
  390. package/dist/providers/zai.models.js +4 -2
  391. package/dist/providers/zai.models.js.map +1 -1
  392. package/dist/types.d.ts +227 -51
  393. package/dist/types.d.ts.map +1 -1
  394. package/dist/types.js.map +1 -1
  395. package/dist/utils/diagnostics.d.ts +3 -2
  396. package/dist/utils/diagnostics.d.ts.map +1 -1
  397. package/dist/utils/diagnostics.js.map +1 -1
  398. package/dist/utils/estimate.d.ts +2 -2
  399. package/dist/utils/estimate.d.ts.map +1 -1
  400. package/dist/utils/estimate.js +8 -29
  401. package/dist/utils/estimate.js.map +1 -1
  402. package/dist/utils/headers.d.ts +1 -1
  403. package/dist/utils/headers.d.ts.map +1 -1
  404. package/dist/utils/headers.js +10 -8
  405. package/dist/utils/headers.js.map +1 -1
  406. package/dist/utils/model-operations.d.ts +11 -0
  407. package/dist/utils/model-operations.d.ts.map +1 -0
  408. package/dist/utils/model-operations.js +47 -0
  409. package/dist/utils/model-operations.js.map +1 -0
  410. package/dist/utils/models-error.d.ts +8 -0
  411. package/dist/utils/models-error.d.ts.map +1 -0
  412. package/dist/utils/models-error.js +19 -0
  413. package/dist/utils/models-error.js.map +1 -0
  414. package/dist/utils/overflow.d.ts +1 -0
  415. package/dist/utils/overflow.d.ts.map +1 -1
  416. package/dist/utils/overflow.js +17 -5
  417. package/dist/utils/overflow.js.map +1 -1
  418. package/dist/utils/retry.d.ts.map +1 -1
  419. package/dist/utils/retry.js +2 -0
  420. package/dist/utils/retry.js.map +1 -1
  421. package/dist/utils/text.d.ts +9 -1
  422. package/dist/utils/text.d.ts.map +1 -1
  423. package/dist/utils/text.js +26 -0
  424. package/dist/utils/text.js.map +1 -1
  425. package/dist/utils/transcript.d.ts +84 -0
  426. package/dist/utils/transcript.d.ts.map +1 -0
  427. package/dist/utils/transcript.js +204 -0
  428. package/dist/utils/transcript.js.map +1 -0
  429. package/package.json +4 -4
  430. package/dist/image-models.generated.d.ts +0 -785
  431. package/dist/image-models.generated.d.ts.map +0 -1
  432. package/dist/image-models.generated.js +0 -787
  433. package/dist/image-models.generated.js.map +0 -1
  434. package/dist/images-models.d.ts +0 -95
  435. package/dist/images-models.d.ts.map +0 -1
  436. package/dist/images-models.js +0 -143
  437. package/dist/images-models.js.map +0 -1
  438. package/dist/providers/openrouter-images.d.ts +0 -3
  439. package/dist/providers/openrouter-images.d.ts.map +0 -1
  440. package/dist/providers/openrouter-images.js +0 -22
  441. package/dist/providers/openrouter-images.js.map +0 -1
  442. package/dist/utils/deferred-tools.d.ts +0 -9
  443. package/dist/utils/deferred-tools.d.ts.map +0 -1
  444. package/dist/utils/deferred-tools.js +0 -36
  445. package/dist/utils/deferred-tools.js.map +0 -1
package/dist/types.d.ts CHANGED
@@ -14,12 +14,12 @@ import type { AssistantMessageEventStream } from "./utils/event-stream.ts";
14
14
  export type { AssistantMessageEventStream } from "./utils/event-stream.ts";
15
15
  export type KnownApi = "openai-completions" | "mistral-conversations" | "openai-responses" | "azure-openai-responses" | "openai-codex-responses" | "anthropic-messages" | "bedrock-converse-stream" | "google-generative-ai" | "google-vertex" | "pi-messages";
16
16
  export type Api = KnownApi | (string & {});
17
- export type KnownImagesApi = "openrouter-images";
18
- export type ImagesApi = KnownImagesApi | (string & {});
19
- export type KnownProvider = "amazon-bedrock" | "ant-ling" | "anthropic" | "google" | "google-vertex" | "openai" | "azure-openai-responses" | "openai-codex" | "radius" | "nvidia" | "deepseek" | "github-copilot" | "xai" | "groq" | "cerebras" | "openrouter" | "vercel-ai-gateway" | "zai" | "zai-coding-cn" | "mistral" | "minimax" | "minimax-cn" | "moonshotai" | "moonshotai-cn" | "huggingface" | "fireworks" | "together" | "baseten" | "opencode" | "opencode-go" | "kimi-coding" | "cloudflare-workers-ai" | "cloudflare-ai-gateway" | "qwen-token-plan" | "qwen-token-plan-cn" | "qwen-token-plan-individual" | "xiaomi" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-sgp";
17
+ export type KnownImageApi = "openrouter-images";
18
+ export type ImageApi = KnownImageApi | (string & {});
19
+ export type KnownClassifierApi = "typesafe-system-one" | "cloudflare-workers-ai-system-one";
20
+ export type ClassifierApi = KnownClassifierApi | (string & {});
21
+ export type KnownProvider = "amazon-bedrock" | "ant-ling" | "anthropic" | "google" | "google-vertex" | "openai" | "azure-openai-responses" | "openai-codex" | "radius" | "typesafe" | "nvidia" | "deepseek" | "github-copilot" | "xai" | "groq" | "cerebras" | "openrouter" | "vercel-ai-gateway" | "zai" | "zai-coding-cn" | "mistral" | "minimax" | "minimax-cn" | "moonshotai" | "moonshotai-cn" | "huggingface" | "fireworks" | "together" | "baseten" | "opencode" | "opencode-go" | "kimi-coding" | "meta" | "cloudflare-workers-ai" | "cloudflare-ai-gateway" | "qwen-token-plan" | "qwen-token-plan-cn" | "qwen-token-plan-individual" | "xiaomi" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-sgp";
20
22
  export type ProviderId = KnownProvider | string;
21
- export type KnownImagesProvider = "openrouter";
22
- export type ImagesProviderId = KnownImagesProvider | string;
23
23
  export type ToolChoice = "auto" | "none";
24
24
  export type ThinkingLevel = "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
25
25
  export type ModelThinkingLevel = "off" | ThinkingLevel;
@@ -38,6 +38,11 @@ export interface ThinkingBudgets {
38
38
  high?: number;
39
39
  }
40
40
  export type CacheRetention = "none" | "short" | "long";
41
+ /**
42
+ * Best-effort prompt cache lifetime in seconds for each retention tier a request can ask for.
43
+ * A missing tier means the lifetime is unknown; pi does not warm such caches.
44
+ */
45
+ export type ModelPromptCache = Partial<Record<Exclude<CacheRetention, "none">, number>>;
41
46
  export type Transport = "sse" | "websocket" | "websocket-cached" | "auto";
42
47
  /** Provider-scoped environment overrides. Values take precedence over process.env. */
43
48
  export type ProviderEnv = Record<string, string>;
@@ -109,6 +114,12 @@ export interface StreamOptions extends ProviderRequestOptions<Model<Api>> {
109
114
  * its body stream is consumed.
110
115
  */
111
116
  onResponse?: (response: ProviderResponse, model: Model<Api>) => void | Promise<void>;
117
+ /**
118
+ * Optional observer for each parsed provider stream event before Pi normalization.
119
+ * Event data is adapter-owned and must be treated as read-only.
120
+ * Adapter support is explicit; unsupported adapters do not invoke it.
121
+ */
122
+ onProviderStreamEvent?: (data: unknown, model: Model<Api>) => void | Promise<void>;
112
123
  temperature?: number;
113
124
  /**
114
125
  * Arbitrary sampling parameters merged into the request body as-is, after the named request
@@ -202,21 +213,27 @@ export type ApiStreamOptions<TApi extends Api> = TApi extends keyof ApiOptionsMa
202
213
  * `Provider.stream()` via `ApiStreamOptions`.
203
214
  */
204
215
  export interface ProviderStreams {
205
- stream(model: Model<Api>, context: Context, options?: StreamOptions): AssistantMessageEventStream;
206
- streamSimple(model: Model<Api>, context: Context, options?: SimpleStreamOptions): AssistantMessageEventStream;
216
+ stream(model: Model<Api>, context: TranscriptContext, options?: StreamOptions): AssistantMessageEventStream;
217
+ streamSimple(model: Model<Api>, context: TranscriptContext, options?: SimpleStreamOptions): AssistantMessageEventStream;
207
218
  fetchDeferred?(model: Model<Api>, handle: DeferredHandle, options?: DeferredFetchOptions): AssistantMessageEventStream;
208
219
  cancelDeferred?(model: Model<Api>, handle: DeferredHandle, options?: DeferredCancelOptions): Promise<void>;
209
220
  }
210
221
  /**
211
222
  * The uniform contract of an image-generation API implementation module:
212
223
  * every image API module under `src/api/` exports exactly `generateImages`,
213
- * so the module itself satisfies this interface. Lazy wrappers and image
214
- * provider factories pass these around as values.
224
+ * so the module itself satisfies this interface. Lazy wrappers and
225
+ * `createProvider({ images })` pass these around as values.
215
226
  */
216
227
  export interface ProviderImages {
217
- generateImages(model: ImagesModel<ImagesApi>, context: ImagesContext, options?: ImagesOptions): Promise<AssistantImages>;
228
+ generateImages(model: ImageModel<ImageApi>, context: ImagesContext, options?: ImagesOptions): Promise<AssistantImages>;
218
229
  }
219
- export interface ImagesOptions extends ProviderRequestOptions<ImagesModel<ImagesApi>> {
230
+ /** The uniform contract implemented by classifier API modules. */
231
+ export interface ProviderClassifier {
232
+ classify(model: ClassifierModel<ClassifierApi>, context: ClassifierContext, options?: ClassifierOptions): Promise<ClassifierResult>;
233
+ }
234
+ export interface ClassifierOptions extends ProviderRequestOptions<ClassifierModel<ClassifierApi>> {
235
+ }
236
+ export interface ImagesOptions extends ProviderRequestOptions<ImageModel<ImageApi>> {
220
237
  /**
221
238
  * Optional metadata to include in API requests.
222
239
  * Providers extract the fields they understand and ignore the rest.
@@ -240,8 +257,9 @@ export interface SimpleStreamOptions extends StreamOptions {
240
257
  /** Custom token budgets for thinking levels (token-based providers only) */
241
258
  thinkingBudgets?: ThinkingBudgets;
242
259
  }
243
- export type StreamFunction<TApi extends Api = Api, TOptions extends StreamOptions = StreamOptions> = (model: Model<TApi>, context: Context, options?: TOptions) => AssistantMessageEventStream;
244
- export type ImagesFunction<TApi extends ImagesApi = ImagesApi, TOptions extends ImagesOptions = ImagesOptions> = (model: ImagesModel<TApi>, context: ImagesContext, options?: TOptions) => Promise<AssistantImages>;
260
+ export type StreamFunction<TApi extends Api = Api, TOptions extends StreamOptions = StreamOptions> = (model: Model<TApi>, context: TranscriptContext, options?: TOptions) => AssistantMessageEventStream;
261
+ export type ImagesFunction<TOptions extends ImagesOptions = ImagesOptions> = (model: ImageModel<ImageApi>, context: ImagesContext, options?: TOptions) => Promise<AssistantImages>;
262
+ export type ClassifierFunction<TOptions extends ClassifierOptions = ClassifierOptions> = (model: ClassifierModel<ClassifierApi>, context: ClassifierContext, options?: TOptions) => Promise<ClassifierResult>;
245
263
  export interface TextSignatureV1 {
246
264
  v: 1;
247
265
  id: string;
@@ -319,7 +337,7 @@ export interface ToolCall {
319
337
  type: "toolCall";
320
338
  id: string;
321
339
  name: string;
322
- arguments: Record<string, any>;
340
+ arguments: JsonObject;
323
341
  thoughtSignature?: string;
324
342
  /** OpenAI Responses namespace for calls to dynamically loaded or namespaced tools. */
325
343
  namespace?: string;
@@ -329,7 +347,7 @@ export interface Usage {
329
347
  output: number;
330
348
  cacheRead: number;
331
349
  cacheWrite: number;
332
- /** Subset of `cacheWrite` written with 1h retention. Only Anthropic reports this split. */
350
+ /** Subset of `cacheWrite` written with 1h retention. Anthropic and Bedrock report this split. */
333
351
  cacheWrite1h?: number;
334
352
  /**
335
353
  * Reasoning/thinking tokens, when the provider reports them. This is a subset of
@@ -347,9 +365,23 @@ export interface Usage {
347
365
  };
348
366
  }
349
367
  export type StopReason = "pending" | "stop" | "length" | "toolUse" | "error" | "aborted" | "deferred";
350
- export type JsonValue = string | number | boolean | null | JsonValue[] | {
368
+ export type JsonValue = null | boolean | number | string | readonly JsonValue[] | JsonObject;
369
+ export type JsonObject = {
351
370
  [key: string]: JsonValue;
352
371
  };
372
+ type IsAny<T> = 0 extends 1 & T ? true : false;
373
+ type IsExactlyJsonValue<T> = [T] extends [JsonValue] ? ([JsonValue] extends [T] ? true : false) : false;
374
+ type IsJsonProperty<T> = IsAny<T> extends true ? false : unknown extends T ? false : [Exclude<T, undefined>] extends [never] ? true : IsJsonCompatible<Exclude<T, undefined>>;
375
+ type InvalidJsonKeys<T extends object> = {
376
+ [TKey in keyof T]-?: TKey extends string | number ? (IsJsonProperty<T[TKey]> extends true ? never : TKey) : TKey;
377
+ }[keyof T];
378
+ type IsJsonCompatible<T> = IsAny<T> extends true ? false : unknown extends T ? false : IsExactlyJsonValue<T> extends true ? true : T extends null | boolean | number | string ? true : T extends undefined ? false : T extends readonly (infer TItem)[] ? IsJsonCompatible<TItem> : T extends (...args: never[]) => unknown ? false : T extends object ? [InvalidJsonKeys<T>] extends [never] ? true : false : false;
379
+ /** The JSON representation of a typed in-memory value. Optional object properties remain optional. */
380
+ export type JsonRepresentation<T> = IsAny<T> extends true ? JsonValue : unknown extends T ? JsonValue : [T] extends [JsonValue] ? T : T extends readonly unknown[] ? {
381
+ [TKey in keyof T]: JsonRepresentation<Exclude<T[TKey], undefined>>;
382
+ } : T extends object ? {
383
+ [TKey in keyof T]: JsonRepresentation<Exclude<T[TKey], undefined>>;
384
+ } : never;
353
385
  export interface DeferredHandle {
354
386
  provider: string;
355
387
  modelId: string;
@@ -361,6 +393,33 @@ export interface DeferredHandle {
361
393
  /** Provider conversion data required to reconstruct the final assistant message. */
362
394
  data?: JsonValue;
363
395
  }
396
+ /**
397
+ * System instructions and tool declarations at one point in the transcript.
398
+ *
399
+ * The leading system message is the system prompt. Later system messages change it:
400
+ * `content` adds instructions from that point on, `sections` replace or remove named
401
+ * prompt sections, and `toolsAdded`/`toolsRemoved` change the tool set. Replaying
402
+ * every system message in order yields the current prompt and tools. Providers that
403
+ * accept system messages mid-conversation send each one in place; other providers
404
+ * rebuild the leading system message from the replayed state.
405
+ */
406
+ export interface SystemMessage {
407
+ role: "system";
408
+ /** Instruction text. On the leading message this is the base prompt; later, additional instructions. */
409
+ content: string | TextContent[];
410
+ /**
411
+ * Named, ordered prompt sections rendered verbatim after `content`. The leading message
412
+ * declares them; later messages replace sections by name, and `null` removes one. Keep
413
+ * each section self-delimiting (a tag, a heading) so the model can relate an update to
414
+ * the original. Avoid integer-like names; JSON objects reorder those.
415
+ */
416
+ sections?: Record<string, string | null>;
417
+ /** Complete definitions of tools that become available at this point. */
418
+ toolsAdded?: Tool[];
419
+ /** Tools that stop being available at this point. */
420
+ toolsRemoved?: ToolReference[];
421
+ timestamp: number;
422
+ }
364
423
  export interface UserMessage {
365
424
  role: "user";
366
425
  content: string | (TextContent | ImageContent | DocumentContent)[];
@@ -389,24 +448,18 @@ export interface AssistantMessage {
389
448
  endTurn?: boolean;
390
449
  timestamp: number;
391
450
  }
392
- export interface ToolResultMessage<TDetails = any> {
451
+ export type ToolResultMessage<TDetails = JsonValue> = IsJsonCompatible<TDetails> extends true ? {
393
452
  role: "toolResult";
394
453
  toolCallId: string;
395
454
  toolName: string;
396
455
  content: (TextContent | ImageContent)[];
397
- details?: TDetails;
456
+ details?: JsonRepresentation<TDetails>;
398
457
  /** Usage from the tool execution itself, if available. Not part of main LLM context accounting. */
399
458
  usage?: Usage;
400
- /**
401
- * Names from `Context.tools` that became available after this result.
402
- * Providers with native deferred tool loading use this as the load point;
403
- * other providers ignore it and use `Context.tools` normally.
404
- */
405
- addedToolNames?: string[];
406
459
  isError: boolean;
407
460
  timestamp: number;
408
- }
409
- export type Message = UserMessage | AssistantMessage | ToolResultMessage;
461
+ } : never;
462
+ export type Message = SystemMessage | UserMessage | AssistantMessage | ToolResultMessage;
410
463
  export type ImagesInputContent = TextContent | ImageContent;
411
464
  export type ImagesOutputContent = TextContent | ImageContent;
412
465
  export interface ImagesContext {
@@ -414,8 +467,8 @@ export interface ImagesContext {
414
467
  }
415
468
  export type ImagesStopReason = "stop" | "error" | "aborted";
416
469
  export interface AssistantImages {
417
- api: ImagesApi;
418
- provider: ImagesProviderId;
470
+ api: ImageApi;
471
+ provider: ProviderId;
419
472
  model: string;
420
473
  output: ImagesOutputContent[];
421
474
  responseId?: string;
@@ -424,6 +477,55 @@ export interface AssistantImages {
424
477
  errorMessage?: string;
425
478
  timestamp: number;
426
479
  }
480
+ export interface ClassifierChoiceQuestion {
481
+ type: "choice";
482
+ instructions: string;
483
+ criteria: Record<string, string>;
484
+ }
485
+ export interface ClassifierScoreQuestion {
486
+ type: "score";
487
+ instructions: string;
488
+ criteria: string[];
489
+ }
490
+ export interface ClassifierBoolQuestion {
491
+ type: "bool";
492
+ instructions: string;
493
+ criteria: {
494
+ true: string;
495
+ false: string;
496
+ };
497
+ }
498
+ export type ClassifierQuestion = ClassifierChoiceQuestion | ClassifierScoreQuestion | ClassifierBoolQuestion;
499
+ export interface ClassifierContext {
500
+ state: JsonObject;
501
+ questions: Record<string, ClassifierQuestion>;
502
+ }
503
+ export interface ClassifierChoiceAnswer {
504
+ type: "choice";
505
+ choice: string;
506
+ probabilities: Record<string, number>;
507
+ confidence: number;
508
+ }
509
+ export interface ClassifierScoreAnswer {
510
+ type: "score";
511
+ score: number;
512
+ confidence: number;
513
+ }
514
+ export interface ClassifierBoolAnswer {
515
+ type: "bool";
516
+ probability: number;
517
+ }
518
+ export type ClassifierAnswer = ClassifierChoiceAnswer | ClassifierScoreAnswer | ClassifierBoolAnswer;
519
+ export type ClassifierStopReason = "stop" | "error" | "aborted";
520
+ export interface ClassifierResult {
521
+ api: ClassifierApi;
522
+ provider: ProviderId;
523
+ model: string;
524
+ answers: Record<string, ClassifierAnswer>;
525
+ stopReason: ClassifierStopReason;
526
+ errorMessage?: string;
527
+ timestamp: number;
528
+ }
427
529
  import type { TSchema } from "typebox";
428
530
  /** OpenAI grammar variants for constrained sampling. */
429
531
  export type GrammarFormat = "openai_lark" | "openai_regex";
@@ -448,11 +550,31 @@ export interface Tool<TParameters extends TSchema = TSchema> {
448
550
  parameters: TParameters;
449
551
  constrainedSampling?: false | ConstrainedSamplingConfig;
450
552
  }
553
+ export interface ToolReference {
554
+ name: string;
555
+ }
556
+ /**
557
+ * Request input accepted by the public stream entry points (`Models.stream()`,
558
+ * `streamSimple()`, ...). `systemPrompt` and `tools` are shorthand for a leading
559
+ * system message; `normalizeContext()` folds them into one before the request
560
+ * reaches a provider.
561
+ */
451
562
  export interface Context {
452
563
  systemPrompt?: string;
453
564
  messages: Message[];
454
565
  tools?: Tool[];
455
566
  }
567
+ declare const transcriptContextBrand: unique symbol;
568
+ /**
569
+ * Normalized request context passed to providers and API implementations. The
570
+ * prompt and tool declarations are carried by the transcript's system messages.
571
+ * Only `normalizeContext()` produces this type, so a raw `Context` cannot reach
572
+ * provider code by accident.
573
+ */
574
+ export type TranscriptContext = {
575
+ messages: Message[];
576
+ readonly [transcriptContextBrand]: true;
577
+ };
456
578
  /**
457
579
  * Event protocol for AssistantMessageEventStream.
458
580
  *
@@ -586,14 +708,16 @@ export interface OpenAICompletionsCompat {
586
708
  supportsThinkingTokenBudget?: boolean;
587
709
  /** Whether the provider supports OpenAI custom tools with Lark/regex grammar formats. When false, grammar-constrained tools fall back to normal function tools. Default: false; the generated model catalog enables it for capable models. */
588
710
  supportsOpenAIGrammarTools?: boolean;
589
- /** Whether the provider supports the `strict` field in tool definitions. Default: true. */
711
+ /** Whether the exact model accepts system or developer messages after the conversation has started. When false, later system messages are folded into the leading system message. Default: false; the generated model catalog enables it for verified models. */
712
+ supportsMidConvoSystemMessages?: boolean;
713
+ /** Whether system messages can introduce additional tools mid-conversation. Requires `supportsMidConvoSystemMessages`. Default: false; the generated model catalog enables it for capable models. */
714
+ supportsMidConvoToolAdditions?: boolean;
715
+ /** Whether the provider supports the `strict` field in tool definitions. Default: false; generated capable models enable it explicitly. */
590
716
  supportsStrictMode?: boolean;
591
717
  /** Cache control convention for prompt caching. "anthropic" applies Anthropic-style `cache_control` markers to the system prompt, last tool definition, and last user, assistant, or tool-result text content. */
592
718
  cacheControlFormat?: "anthropic";
593
719
  /** Whether to send session-affinity data from `options.sessionId`. Default: true for OpenRouter endpoints, false otherwise. */
594
720
  sendSessionAffinityHeaders?: boolean;
595
- /** Provider-specific deferred tool serialization mode. */
596
- deferredToolsMode?: "kimi";
597
721
  /** Session-affinity header format: `openai` sends `session_id`, `x-client-request-id`, and `x-session-affinity`; `openai-nosession` sends `x-client-request-id` and `x-session-affinity`; `openrouter` sends `x-session-id`. Does not affect the `prompt_cache_key` body param, which is governed by cache retention. Default: auto-detected. */
598
722
  sessionAffinityFormat?: SessionAffinityFormat;
599
723
  /** Whether the provider supports long prompt cache retention (`prompt_cache_retention: "24h"` or Anthropic-style `cache_control.ttl: "1h"`, depending on format). Default: true. */
@@ -610,6 +734,8 @@ export interface OpenAICompletionsCompat {
610
734
  export interface OpenAIResponsesCompat {
611
735
  /** Whether the provider supports the `developer` role (vs `system`). Default: true. */
612
736
  supportsDeveloperRole?: boolean;
737
+ /** Whether the exact model accepts developer or system messages after the conversation has started. When false, later system messages are folded into the leading system message. Default: false; the generated model catalog enables it for verified models. */
738
+ supportsMidConvoSystemMessages?: boolean;
613
739
  /** Session-affinity header format: `openai` sends `session_id` and `x-client-request-id`; `openai-nosession` sends `x-client-request-id`; `openrouter` sends `x-session-id`. Does not affect the `prompt_cache_key` body param, which is governed by cache retention. Default: auto-detected. */
614
740
  sessionAffinityFormat?: SessionAffinityFormat;
615
741
  /** Whether the provider supports long prompt cache retention. This uses `prompt_cache_options.ttl: "30m"` on GPT-5.6+ and `prompt_cache_retention: "24h"` on earlier models. Default: true. */
@@ -620,7 +746,7 @@ export interface OpenAIResponsesCompat {
620
746
  supportsOpenAIGrammarTools?: boolean;
621
747
  /** Whether the model supports message-anchored `additional_tools` input items. Default: false. */
622
748
  supportsAdditionalTools?: boolean;
623
- /** Whether the model supports client-executed tool search for deferred tools. Default: false. */
749
+ /** Whether the model supports client-executed tool search for transcript-anchored additions. Default: false. */
624
750
  supportsToolSearch?: boolean;
625
751
  /** Whether the model accepts `prompt_cache_options` (OpenAI GPT-5.6+ prompt caching). Older OpenAI models reject the parameter. Default: false. */
626
752
  supportsExplicitPromptCacheMode?: boolean;
@@ -679,6 +805,10 @@ export interface AnthropicMessagesCompat {
679
805
  supportsStrictTools?: boolean;
680
806
  /** Whether the exact model transport supports effort-only system messages and thinking binding controls. Default: false. */
681
807
  supportsMidConvoEffort?: boolean;
808
+ /** Whether the exact model accepts system-role messages inside the conversation. When false, later system messages are folded into the top-level system prompt. Default: false. */
809
+ supportsMidConvoSystemMessages?: boolean;
810
+ /** Whether the exact model accepts mid-conversation `tool_addition` and `tool_removal` blocks. Requires `supportsMidConvoSystemMessages`. Default: false. */
811
+ supportsMidConvoToolChanges?: boolean;
682
812
  /**
683
813
  * Models Anthropic accepts in `fallbacks` for server-side refusal fallback,
684
814
  * with local pricing metadata for returned fallback responses. When absent or
@@ -686,12 +816,6 @@ export interface AnthropicMessagesCompat {
686
816
  * with no permitted fallback targets.
687
817
  */
688
818
  allowedFallbackModels?: AnthropicAllowedFallbackModel[];
689
- /**
690
- * Whether the provider supports deferred tools loaded by `tool_reference`
691
- * blocks in tool results. Default: true for first-party Anthropic models
692
- * except Haiku and models older than Claude 4.5; false for other providers.
693
- */
694
- supportsToolReferences?: boolean;
695
819
  /**
696
820
  * Whether the model runs Anthropic's preserved-thinking *conversation* check, which
697
821
  * rejects a request whose `system` prompt, `tools`, or earlier messages changed since a
@@ -746,6 +870,11 @@ export interface BedrockCompat {
746
870
  */
747
871
  supportsTemperature?: boolean;
748
872
  }
873
+ /** Compatibility settings for the Mistral chat API. */
874
+ export interface MistralConversationsCompat {
875
+ /** Whether the exact model accepts system messages after the conversation has started. When false, later system messages are folded into the leading system message. Default: false. */
876
+ supportsMidConvoSystemMessages?: boolean;
877
+ }
749
878
  /**
750
879
  * OpenRouter provider routing preferences.
751
880
  * Controls which upstream providers OpenRouter routes requests to.
@@ -839,6 +968,26 @@ export interface ModelCost extends ModelCostRates {
839
968
  /** Request-wide pricing tiers. The highest matching input threshold applies to the full request. */
840
969
  tiers?: ModelCostTier[];
841
970
  }
971
+ export interface ModelImageResizeOptions {
972
+ maxWidth?: number;
973
+ maxHeight?: number;
974
+ /** Maximum base64-encoded payload size in bytes. */
975
+ maxBytes?: number;
976
+ jpegQuality?: number;
977
+ }
978
+ export interface ModelImageInputLimits {
979
+ /** Cache-safe resize profile applied before a new image enters conversation history. */
980
+ resize?: ModelImageResizeOptions;
981
+ /** Maximum images accepted in one provider message. */
982
+ maxPerMessage?: number;
983
+ /** Maximum images accepted across one provider request. */
984
+ maxPerRequest?: number;
985
+ }
986
+ export interface ModelInputLimits {
987
+ /** Maximum serialized provider request size in bytes. */
988
+ maxRequestBytes?: number;
989
+ images?: ModelImageInputLimits;
990
+ }
842
991
  /**
843
992
  * Explicit routing metadata that marks a model as the fast-inference variant of another model.
844
993
  *
@@ -853,42 +1002,69 @@ export interface ModelFastRoute {
853
1002
  upstreamModelId: string;
854
1003
  /** Service tier to send with the request. Set only for providers that route fast traffic through an OpenAI-style tier. */
855
1004
  serviceTier?: "priority";
1005
+ /** Anthropic inference speed to send with the request. Set only for Claude models that support fast mode. */
1006
+ speed?: "fast";
856
1007
  }
857
- export interface Model<TApi extends Api> {
1008
+ /** Fields shared by every catalog entry, regardless of what you can do with it. */
1009
+ export interface BaseModel<TApi extends string> {
858
1010
  id: string;
859
1011
  name: string;
860
1012
  api: TApi;
861
1013
  provider: ProviderId;
862
1014
  baseUrl: string;
1015
+ input: ("text" | "image" | "pdf")[];
1016
+ /** Provider input limits and cache-safe preprocessing metadata. */
1017
+ inputLimits?: ModelInputLimits;
1018
+ cost: ModelCost;
1019
+ headers?: Record<string, string>;
1020
+ }
1021
+ /** Chat model: usable with `stream()` and friends. */
1022
+ export interface Model<TApi extends Api> extends BaseModel<TApi> {
1023
+ /**
1024
+ * Optional: chat is the default model type, so models without `type` are chat
1025
+ * models. Narrow mixed model lists with `isModelType()` instead of comparing
1026
+ * `type` directly.
1027
+ */
1028
+ type?: "chat";
863
1029
  reasoning: boolean;
864
1030
  /**
865
1031
  * Maps pi thinking levels to provider/model-specific values.
866
1032
  * Missing keys use provider defaults. null marks a level as unsupported.
867
1033
  */
868
1034
  thinkingLevelMap?: ThinkingLevelMap;
869
- /**
870
- * Modalities Atomic can send to this model. `"pdf"` is set only where a runtime can serialize
871
- * a document block — the Anthropic Messages and Amazon Bedrock Converse paths — so a provider
872
- * that publishes PDF support but has no such path here stays at `["text", "image"]`.
873
- */
874
- input: ("text" | "image" | "pdf")[];
875
- cost: ModelCost;
1035
+ /** Prompt cache lifetimes per retention tier. Unset when the provider's cache behavior is unknown. */
1036
+ promptCache?: ModelPromptCache;
876
1037
  contextWindow: number;
877
1038
  maxTokens: number;
878
1039
  /** Default sampling parameters for this model. See {@link StreamOptions.samplingParams}; per-request keys override these. */
879
1040
  samplingParams?: Record<string, unknown>;
880
- headers?: Record<string, string>;
881
1041
  /**
882
1042
  * Marks this model as the fast-inference variant of {@link ModelFastRoute.baseModelId} and carries the
883
1043
  * upstream routing it needs. Absent on every normal model.
884
1044
  */
885
1045
  fastRoute?: ModelFastRoute;
886
1046
  /** Compatibility overrides for OpenAI-compatible APIs. If not set, auto-detected from baseUrl. */
887
- compat?: TApi extends "openai-completions" ? OpenAICompletionsCompat : TApi extends "openai-responses" | "azure-openai-responses" | "openai-codex-responses" ? OpenAIResponsesCompat : TApi extends "anthropic-messages" ? AnthropicMessagesCompat : TApi extends "bedrock-converse-stream" ? BedrockCompat : never;
1047
+ compat?: TApi extends "openai-completions" ? OpenAICompletionsCompat : TApi extends "openai-responses" | "azure-openai-responses" | "openai-codex-responses" ? OpenAIResponsesCompat : TApi extends "anthropic-messages" ? AnthropicMessagesCompat : TApi extends "bedrock-converse-stream" ? BedrockCompat : TApi extends "mistral-conversations" ? MistralConversationsCompat : never;
888
1048
  }
889
- export interface ImagesModel<TApi extends ImagesApi> extends Omit<Model<Api>, "api" | "provider" | "reasoning" | "contextWindow" | "maxTokens" | "compat"> {
890
- api: TApi;
891
- provider: ImagesProviderId;
1049
+ /** Image-generation model: usable with `generateImages()` only. */
1050
+ export interface ImageModel<TApi extends ImageApi> extends BaseModel<TApi> {
1051
+ type: "image";
1052
+ /** Output modalities. Always includes `"image"`; `"text"` means the model can also return text blocks. */
892
1053
  output: ("text" | "image")[];
893
1054
  }
1055
+ /** Structured classifier model: usable with `classify()` only. */
1056
+ export interface ClassifierModel<TApi extends ClassifierApi> extends BaseModel<TApi> {
1057
+ type: "classifier";
1058
+ contextWindow: number;
1059
+ }
1060
+ /** Model shape for each model type. */
1061
+ export interface ModelTypeMap {
1062
+ chat: Model<Api>;
1063
+ image: ImageModel<ImageApi>;
1064
+ classifier: ClassifierModel<ClassifierApi>;
1065
+ }
1066
+ /** What a catalog entry is for. Decides which `Models` operation accepts it. */
1067
+ export type ModelType = keyof ModelTypeMap;
1068
+ /** Anything a provider can list. Narrow with `isModelType()`. */
1069
+ export type AnyModel = ModelTypeMap[ModelType];
894
1070
  //# sourceMappingURL=types.d.ts.map