@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/models.js CHANGED
@@ -4,7 +4,19 @@ import { InMemoryCredentialStore } from "./auth/credential-store.js";
4
4
  import { ModelsError, resolveProviderAuth } from "./auth/resolve.js";
5
5
  import { InMemoryModelsStore } from "./models-store.js";
6
6
  import { operationSignal, raceWithAbortSignal } from "./utils/abort.js";
7
- export { ModelsError } from "./auth/resolve.js";
7
+ import { assertChatModel, assertClassifierModel, assertImageModel, classifierErrorResult, getModelType, imageErrorResult, isModelType, } from "./utils/model-operations.js";
8
+ import { normalizeContext } from "./utils/transcript.js";
9
+ export { ModelsError, REQUEST_AUTH_PREPARATION_TIMEOUT_MS, requestAuthTimeoutMessage, } from "./auth/resolve.js";
10
+ export { assertChatModel, classifierErrorResult, getModelType, imageErrorResult, isModelType, } from "./utils/model-operations.js";
11
+ const KNOWN_MODEL_TYPES = { chat: true, image: true, classifier: true };
12
+ /** Models from stores and remote sources may have types that only newer versions know. */
13
+ function hasKnownModelType(model) {
14
+ return Object.hasOwn(KNOWN_MODEL_TYPES, getModelType(model));
15
+ }
16
+ /** Drops stored models whose type this version does not know. */
17
+ function withKnownModelTypes(entry) {
18
+ return { ...entry, models: entry.models.filter(hasKnownModelType) };
19
+ }
8
20
  function mergeHeaders(base, override) {
9
21
  if (!base && !override)
10
22
  return undefined;
@@ -75,9 +87,38 @@ class ModelsImpl {
75
87
  }
76
88
  return models;
77
89
  }
90
+ getAllModels(provider) {
91
+ if (provider !== undefined) {
92
+ const entry = this.providers.get(provider);
93
+ if (!entry)
94
+ return [];
95
+ try {
96
+ return entry.getAllModels?.() ?? entry.getModels();
97
+ }
98
+ catch {
99
+ return [];
100
+ }
101
+ }
102
+ const models = [];
103
+ for (const entry of this.providers.values()) {
104
+ try {
105
+ models.push(...(entry.getAllModels?.() ?? entry.getModels()));
106
+ }
107
+ catch {
108
+ // Best-effort: ill-behaved providers yield no models.
109
+ }
110
+ }
111
+ return models;
112
+ }
113
+ getModelsOfType(type, provider) {
114
+ return this.getAllModels(provider).filter((model) => isModelType(model, type));
115
+ }
78
116
  getModel(provider, id) {
79
117
  return this.getModels(provider).find((model) => model.id === id);
80
118
  }
119
+ getModelOfType(type, provider, id) {
120
+ return this.getModelsOfType(type, provider).find((model) => model.id === id);
121
+ }
81
122
  supersedeProviderRefresh(providerId) {
82
123
  const generation = (this.refreshGenerations.get(providerId) ?? 0) + 1;
83
124
  this.refreshGenerations.set(providerId, generation);
@@ -123,7 +164,7 @@ class ModelsImpl {
123
164
  const stored = await this.modelsStore.read(provider.id, { signal });
124
165
  await provider.refreshModels({
125
166
  credential,
126
- stored: stored ? structuredClone(stored) : undefined,
167
+ stored: stored ? withKnownModelTypes(structuredClone(stored)) : undefined,
127
168
  publish: (publication) => this.publishProviderModels(provider.id, generation, signal, publication),
128
169
  allowNetwork,
129
170
  force: allowNetwork ? force : undefined,
@@ -252,26 +293,47 @@ class ModelsImpl {
252
293
  })();
253
294
  return raceWithAbortSignal(check, signal);
254
295
  }
296
+ async getAuthenticatedProviders(providerId, signal) {
297
+ signal.throwIfAborted();
298
+ const providers = providerId
299
+ ? [this.providers.get(providerId)].filter((entry) => entry !== undefined)
300
+ : this.getProviders();
301
+ const checks = await Promise.all(providers.map(async (provider) => {
302
+ const credential = await this.readCredential(provider.id, signal);
303
+ return { provider, credential, auth: await this.checkProviderAuth(provider, credential, signal) };
304
+ }));
305
+ return checks.filter((entry) => entry.auth !== undefined);
306
+ }
255
307
  getAvailable(providerId, options) {
256
308
  const signal = operationSignal(options?.signal);
257
309
  const available = (async () => {
258
- signal.throwIfAborted();
259
- const providers = providerId
260
- ? [this.providers.get(providerId)].filter((entry) => entry !== undefined)
261
- : this.getProviders();
262
- const checks = await Promise.all(providers.map(async (provider) => {
263
- const credential = await this.readCredential(provider.id, signal);
264
- return { provider, credential, auth: await this.checkProviderAuth(provider, credential, signal) };
265
- }));
266
- return checks.flatMap(({ provider, credential, auth }) => {
267
- if (!auth)
268
- return [];
310
+ const providers = await this.getAuthenticatedProviders(providerId, signal);
311
+ return providers.flatMap(({ provider, credential }) => {
269
312
  const models = provider.getModels();
270
313
  return provider.filterModels?.(models, credential) ?? models;
271
314
  });
272
315
  })();
273
316
  return raceWithAbortSignal(available, signal);
274
317
  }
318
+ async getAvailableOfType(type, providerId, options) {
319
+ return (await this.getAllAvailable(providerId, options)).filter((model) => isModelType(model, type));
320
+ }
321
+ getAllAvailable(providerId, options) {
322
+ const signal = operationSignal(options?.signal);
323
+ const available = (async () => {
324
+ const providers = await this.getAuthenticatedProviders(providerId, signal);
325
+ return providers.flatMap(({ provider, credential }) => {
326
+ const models = provider.getAllModels?.() ?? provider.getModels();
327
+ if (provider.filterAllModels)
328
+ return provider.filterAllModels(models, credential);
329
+ if (!provider.filterModels)
330
+ return models;
331
+ const availableChatIds = new Set(provider.filterModels(provider.getModels(), credential).map((model) => model.id));
332
+ return models.filter((model) => !isModelType(model, "chat") || availableChatIds.has(model.id));
333
+ });
334
+ })();
335
+ return raceWithAbortSignal(available, signal);
336
+ }
275
337
  async getAuth(providerOrModel, overrides) {
276
338
  const signal = operationSignal(overrides?.signal);
277
339
  const providerId = typeof providerOrModel === "string" ? providerOrModel : providerOrModel.provider;
@@ -355,6 +417,10 @@ class ModelsImpl {
355
417
  }
356
418
  return provider;
357
419
  }
420
+ requireChatProvider(model) {
421
+ assertChatModel(model);
422
+ return this.requireProvider(model);
423
+ }
358
424
  async applyAuth(model, options) {
359
425
  this.requireProvider(model);
360
426
  const resolution = await this.getAuth(model, {
@@ -378,20 +444,22 @@ class ModelsImpl {
378
444
  return { requestModel, requestOptions };
379
445
  }
380
446
  stream(model, context, options) {
447
+ const transcript = normalizeContext(context);
381
448
  return lazyStream(model, async () => {
382
- const provider = this.requireProvider(model);
449
+ const provider = this.requireChatProvider(model);
383
450
  const { requestModel, requestOptions } = await this.applyAuth(model, options);
384
- return provider.stream(requestModel, context, requestOptions);
451
+ return provider.stream(requestModel, transcript, requestOptions);
385
452
  });
386
453
  }
387
454
  async complete(model, context, options) {
388
455
  return this.stream(model, context, options).result();
389
456
  }
390
457
  streamSimple(model, context, options) {
458
+ const transcript = normalizeContext(context);
391
459
  return lazyStream(model, async () => {
392
- const provider = this.requireProvider(model);
460
+ const provider = this.requireChatProvider(model);
393
461
  const { requestModel, requestOptions } = await this.applyAuth(model, options);
394
- return provider.streamSimple(requestModel, context, requestOptions);
462
+ return provider.streamSimple(requestModel, transcript, requestOptions);
395
463
  });
396
464
  }
397
465
  async completeSimple(model, context, options) {
@@ -399,7 +467,7 @@ class ModelsImpl {
399
467
  }
400
468
  async fetchDeferred(model, handle, options) {
401
469
  return lazyStream(model, async () => {
402
- const provider = this.requireProvider(model);
470
+ const provider = this.requireChatProvider(model);
403
471
  if (!provider.fetchDeferred) {
404
472
  throw new ModelsError("provider", `Provider ${model.provider} does not support deferred responses`);
405
473
  }
@@ -408,31 +476,73 @@ class ModelsImpl {
408
476
  }).result();
409
477
  }
410
478
  async cancelDeferred(model, handle, options) {
411
- const provider = this.requireProvider(model);
479
+ const provider = this.requireChatProvider(model);
412
480
  if (!provider.cancelDeferred) {
413
481
  throw new ModelsError("provider", `Provider ${model.provider} does not support deferred responses`);
414
482
  }
415
483
  const { requestModel, requestOptions } = await this.applyAuth(model, options);
416
484
  await provider.cancelDeferred(requestModel, handle, requestOptions);
417
485
  }
486
+ async generateImages(model, context, options) {
487
+ try {
488
+ assertImageModel(model);
489
+ const provider = this.requireProvider(model);
490
+ if (!provider.generateImages) {
491
+ throw new ModelsError("provider", `Provider ${model.provider} does not support image generation`);
492
+ }
493
+ const { requestModel, requestOptions } = await this.applyAuth(model, options);
494
+ return await provider.generateImages(requestModel, context, requestOptions);
495
+ }
496
+ catch (error) {
497
+ return imageErrorResult(model, error, options?.signal?.aborted);
498
+ }
499
+ }
500
+ async classify(model, context, options) {
501
+ try {
502
+ assertClassifierModel(model);
503
+ const provider = this.requireProvider(model);
504
+ if (!provider.classify) {
505
+ throw new ModelsError("provider", `Provider ${model.provider} does not support classification`);
506
+ }
507
+ const { requestModel, requestOptions } = await this.applyAuth(model, options);
508
+ return await provider.classify(requestModel, context, requestOptions);
509
+ }
510
+ catch (error) {
511
+ return classifierErrorResult(model, error, options?.signal?.aborted);
512
+ }
513
+ }
418
514
  }
419
515
  export function createModels(options) {
420
516
  return new ModelsImpl(options);
421
517
  }
422
518
  /**
423
519
  * Builds a provider from parts. Built-in provider factories and models.json
424
- * custom providers both go through this. A single `api` streams all models;
425
- * an `api` map dispatches on `model.api`, and a model whose api has no entry
426
- * produces a stream error.
520
+ * custom providers both go through this. A single `api` streams all chat
521
+ * models; an `api` map dispatches on `model.api`, and a model whose api has
522
+ * no entry produces a stream error. One-shot operation maps dispatch on
523
+ * `model.api` the same way. At least one concrete implementation across
524
+ * `api`/`images`/`classifiers` is required; empty maps are rejected.
427
525
  */
428
526
  export function createProvider(input) {
527
+ const single = input.api && typeof input.api.stream === "function"
528
+ ? input.api
529
+ : undefined;
530
+ const byApi = single || !input.api ? undefined : input.api;
531
+ const images = input.images;
532
+ const classifiers = input.classifiers;
533
+ const streams = single ? [single] : Object.values(byApi ?? {}).filter((entry) => entry !== undefined);
534
+ const imageImplementations = Object.values(images ?? {}).filter((entry) => entry !== undefined);
535
+ const classifierImplementations = Object.values(classifiers ?? {}).filter((entry) => entry !== undefined);
536
+ if (streams.length === 0 && imageImplementations.length === 0 && classifierImplementations.length === 0) {
537
+ throw new Error(`Provider ${input.id}: at least one of "api", "images", or "classifiers" is required.`);
538
+ }
429
539
  const baselineModels = input.models;
430
540
  let dynamicModels = [];
431
541
  const fetchModels = input.fetchModels;
432
542
  const currentModels = () => {
433
543
  const merged = [...baselineModels];
434
544
  for (const model of dynamicModels) {
435
- const index = merged.findIndex((entry) => entry.id === model.id);
545
+ const index = merged.findIndex((entry) => getModelType(entry) === getModelType(model) && entry.id === model.id);
436
546
  if (index >= 0)
437
547
  merged[index] = model;
438
548
  else
@@ -440,8 +550,6 @@ export function createProvider(input) {
440
550
  }
441
551
  return merged;
442
552
  };
443
- const single = typeof input.api.stream === "function" ? input.api : undefined;
444
- const byApi = single ? undefined : input.api;
445
553
  const apiFor = (model) => single ?? byApi?.[model.api];
446
554
  const dispatch = (model, run) => {
447
555
  const streams = apiFor(model);
@@ -458,7 +566,8 @@ export function createProvider(input) {
458
566
  baseUrl: input.baseUrl,
459
567
  headers: input.headers,
460
568
  auth: input.auth,
461
- getModels: currentModels,
569
+ getModels: () => currentModels().filter((model) => isModelType(model, "chat")),
570
+ getAllModels: currentModels,
462
571
  refreshModels: fetchModels
463
572
  ? async (context) => {
464
573
  if (context.stored) {
@@ -475,9 +584,10 @@ export function createProvider(input) {
475
584
  }
476
585
  if (!context.allowNetwork || context.signal.aborted)
477
586
  return;
478
- const refreshed = await fetchModels(context);
587
+ const fetched = await fetchModels(context);
479
588
  if (context.signal.aborted)
480
589
  return;
590
+ const refreshed = fetched.filter(hasKnownModelType);
481
591
  await context.publish({
482
592
  persist: { models: refreshed, checkedAt: Date.now() },
483
593
  update: () => {
@@ -487,10 +597,10 @@ export function createProvider(input) {
487
597
  }
488
598
  : undefined,
489
599
  filterModels: input.filterModels,
600
+ filterAllModels: input.filterAllModels,
490
601
  stream: (model, context, options) => dispatch(model, (streams) => streams.stream(model, context, options)),
491
602
  streamSimple: (model, context, options) => dispatch(model, (streams) => streams.streamSimple(model, context, options)),
492
603
  };
493
- const streams = single ? [single] : Object.values(byApi ?? {}).filter((entry) => entry !== undefined);
494
604
  if (streams.some((entry) => entry.fetchDeferred !== undefined)) {
495
605
  provider.fetchDeferred = (model, handle, options) => lazyStream(model, async () => {
496
606
  const implementation = apiFor(model);
@@ -509,6 +619,24 @@ export function createProvider(input) {
509
619
  await implementation.cancelDeferred(model, handle, options);
510
620
  };
511
621
  }
622
+ if (images && imageImplementations.length > 0) {
623
+ provider.generateImages = async (model, context, options) => {
624
+ const implementation = images[model.api];
625
+ if (!implementation) {
626
+ return imageErrorResult(model, new ModelsError("provider", `Provider ${input.id} has no image generation implementation for "${model.api}"`));
627
+ }
628
+ return implementation.generateImages(model, context, options);
629
+ };
630
+ }
631
+ if (classifiers && classifierImplementations.length > 0) {
632
+ provider.classify = async (model, context, options) => {
633
+ const implementation = classifiers[model.api];
634
+ if (!implementation) {
635
+ return classifierErrorResult(model, new ModelsError("provider", `Provider ${input.id} has no classifier implementation for "${model.api}"`));
636
+ }
637
+ return implementation.classify(model, context, options);
638
+ };
639
+ }
512
640
  return provider;
513
641
  }
514
642
  /**
@@ -520,9 +648,11 @@ export function createProvider(input) {
520
648
  * // model: Model<"anthropic-messages">, stream options fully typed
521
649
  * }
522
650
  * ```
651
+ *
652
+ * Non-chat models never match, even when their api id equals `api`.
523
653
  */
524
654
  export function hasApi(model, api) {
525
- return model.api === api;
655
+ return isModelType(model, "chat") && model.api === api;
526
656
  }
527
657
  export function calculateCost(model, usage) {
528
658
  const inputTokens = usage.input + usage.cacheRead + usage.cacheWrite;
@@ -577,12 +707,12 @@ export function clampThinkingLevel(model, level) {
577
707
  return availableLevels[0] ?? "off";
578
708
  }
579
709
  /**
580
- * Check if two models are equal by comparing both their id and provider.
710
+ * Check if two models are equal by comparing their type, id, and provider.
581
711
  * Returns false if either model is null or undefined.
582
712
  */
583
713
  export function modelsAreEqual(a, b) {
584
714
  if (!a || !b)
585
715
  return false;
586
- return a.id === b.id && a.provider === b.provider;
716
+ return getModelType(a) === getModelType(b) && a.id === b.id && a.provider === b.provider;
587
717
  }
588
718
  //# sourceMappingURL=models.js.map