@earendil-works/pi-ai 0.87.0 → 0.99.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (605) hide show
  1. package/README.md +208 -28
  2. package/dist/api/anthropic-messages.d.ts.map +1 -1
  3. package/dist/api/anthropic-messages.js +7 -1
  4. package/dist/api/anthropic-messages.js.map +1 -1
  5. package/dist/api/anthropic-messages.lazy.d.ts.map +1 -1
  6. package/dist/api/azure-openai-responses.d.ts.map +1 -1
  7. package/dist/api/azure-openai-responses.js +6 -5
  8. package/dist/api/azure-openai-responses.js.map +1 -1
  9. package/dist/api/azure-openai-responses.lazy.d.ts.map +1 -1
  10. package/dist/api/bedrock-converse-stream.d.ts.map +1 -1
  11. package/dist/api/bedrock-converse-stream.js +1 -0
  12. package/dist/api/bedrock-converse-stream.js.map +1 -1
  13. package/dist/api/bedrock-converse-stream.lazy.d.ts.map +1 -1
  14. package/dist/api/bedrock-converse-stream.lazy.js.map +1 -1
  15. package/dist/api/cloudflare-ai-binding.d.ts.map +1 -1
  16. package/dist/api/cloudflare-ai-binding.js.map +1 -1
  17. package/dist/api/cloudflare-workers-ai-system-one.d.ts +4 -0
  18. package/dist/api/cloudflare-workers-ai-system-one.d.ts.map +1 -0
  19. package/dist/api/cloudflare-workers-ai-system-one.js +43 -0
  20. package/dist/api/cloudflare-workers-ai-system-one.js.map +1 -0
  21. package/dist/api/cloudflare-workers-ai-system-one.lazy.d.ts +3 -0
  22. package/dist/api/cloudflare-workers-ai-system-one.lazy.d.ts.map +1 -0
  23. package/dist/api/cloudflare-workers-ai-system-one.lazy.js +4 -0
  24. package/dist/api/cloudflare-workers-ai-system-one.lazy.js.map +1 -0
  25. package/dist/api/cloudflare.d.ts +2 -0
  26. package/dist/api/cloudflare.d.ts.map +1 -1
  27. package/dist/api/cloudflare.js +2 -0
  28. package/dist/api/cloudflare.js.map +1 -1
  29. package/dist/api/constrained-sampling.d.ts.map +1 -1
  30. package/dist/api/constrained-sampling.js.map +1 -1
  31. package/dist/api/github-copilot-headers.d.ts.map +1 -1
  32. package/dist/api/github-copilot-headers.js.map +1 -1
  33. package/dist/api/google-generative-ai.d.ts.map +1 -1
  34. package/dist/api/google-generative-ai.js +1 -0
  35. package/dist/api/google-generative-ai.js.map +1 -1
  36. package/dist/api/google-generative-ai.lazy.d.ts.map +1 -1
  37. package/dist/api/google-shared.d.ts.map +1 -1
  38. package/dist/api/google-shared.js.map +1 -1
  39. package/dist/api/google-vertex.d.ts.map +1 -1
  40. package/dist/api/google-vertex.js +1 -0
  41. package/dist/api/google-vertex.js.map +1 -1
  42. package/dist/api/google-vertex.lazy.d.ts.map +1 -1
  43. package/dist/api/lazy.d.ts.map +1 -1
  44. package/dist/api/lazy.js.map +1 -1
  45. package/dist/api/llama-cpp-classify.d.ts +33 -0
  46. package/dist/api/llama-cpp-classify.d.ts.map +1 -0
  47. package/dist/api/llama-cpp-classify.js +365 -0
  48. package/dist/api/llama-cpp-classify.js.map +1 -0
  49. package/dist/api/llama-cpp-classify.lazy.d.ts +3 -0
  50. package/dist/api/llama-cpp-classify.lazy.d.ts.map +1 -0
  51. package/dist/api/llama-cpp-classify.lazy.js +4 -0
  52. package/dist/api/llama-cpp-classify.lazy.js.map +1 -0
  53. package/dist/api/mistral-conversations.d.ts +1 -1
  54. package/dist/api/mistral-conversations.d.ts.map +1 -1
  55. package/dist/api/mistral-conversations.js +18 -17
  56. package/dist/api/mistral-conversations.js.map +1 -1
  57. package/dist/api/mistral-conversations.lazy.d.ts.map +1 -1
  58. package/dist/api/openai-codex-responses.d.ts.map +1 -1
  59. package/dist/api/openai-codex-responses.js +20 -4
  60. package/dist/api/openai-codex-responses.js.map +1 -1
  61. package/dist/api/openai-codex-responses.lazy.d.ts.map +1 -1
  62. package/dist/api/openai-completions.d.ts.map +1 -1
  63. package/dist/api/openai-completions.js +7 -5
  64. package/dist/api/openai-completions.js.map +1 -1
  65. package/dist/api/openai-completions.lazy.d.ts.map +1 -1
  66. package/dist/api/openai-prompt-cache.d.ts.map +1 -1
  67. package/dist/api/openai-prompt-cache.js.map +1 -1
  68. package/dist/api/openai-responses-shared.d.ts +2 -1
  69. package/dist/api/openai-responses-shared.d.ts.map +1 -1
  70. package/dist/api/openai-responses-shared.js +14 -0
  71. package/dist/api/openai-responses-shared.js.map +1 -1
  72. package/dist/api/openai-responses.d.ts.map +1 -1
  73. package/dist/api/openai-responses.js +26 -9
  74. package/dist/api/openai-responses.js.map +1 -1
  75. package/dist/api/openai-responses.lazy.d.ts.map +1 -1
  76. package/dist/api/openrouter-images.d.ts +2 -1
  77. package/dist/api/openrouter-images.d.ts.map +1 -1
  78. package/dist/api/openrouter-images.js +1 -0
  79. package/dist/api/openrouter-images.js.map +1 -1
  80. package/dist/api/openrouter-images.lazy.d.ts.map +1 -1
  81. package/dist/api/openrouter-images.lazy.js.map +1 -1
  82. package/dist/api/pi-messages.d.ts.map +1 -1
  83. package/dist/api/pi-messages.js +1 -0
  84. package/dist/api/pi-messages.js.map +1 -1
  85. package/dist/api/pi-messages.lazy.d.ts.map +1 -1
  86. package/dist/api/simple-options.d.ts.map +1 -1
  87. package/dist/api/simple-options.js +2 -4
  88. package/dist/api/simple-options.js.map +1 -1
  89. package/dist/api/system-one-shared.d.ts +23 -0
  90. package/dist/api/system-one-shared.d.ts.map +1 -0
  91. package/dist/api/system-one-shared.js +183 -0
  92. package/dist/api/system-one-shared.js.map +1 -0
  93. package/dist/api/transform-messages.d.ts.map +1 -1
  94. package/dist/api/transform-messages.js.map +1 -1
  95. package/dist/api/typesafe-system-one.d.ts +4 -0
  96. package/dist/api/typesafe-system-one.d.ts.map +1 -0
  97. package/dist/api/typesafe-system-one.js +19 -0
  98. package/dist/api/typesafe-system-one.js.map +1 -0
  99. package/dist/api/typesafe-system-one.lazy.d.ts +3 -0
  100. package/dist/api/typesafe-system-one.lazy.d.ts.map +1 -0
  101. package/dist/api/typesafe-system-one.lazy.js +4 -0
  102. package/dist/api/typesafe-system-one.lazy.js.map +1 -0
  103. package/dist/auth/context.d.ts.map +1 -1
  104. package/dist/auth/context.js.map +1 -1
  105. package/dist/auth/credential-store.d.ts.map +1 -1
  106. package/dist/auth/credential-store.js.map +1 -1
  107. package/dist/auth/helpers.d.ts.map +1 -1
  108. package/dist/auth/helpers.js +1 -1
  109. package/dist/auth/helpers.js.map +1 -1
  110. package/dist/auth/oauth/anthropic.d.ts.map +1 -1
  111. package/dist/auth/oauth/anthropic.js +19 -128
  112. package/dist/auth/oauth/anthropic.js.map +1 -1
  113. package/dist/auth/oauth/callback-server.d.ts +55 -0
  114. package/dist/auth/oauth/callback-server.d.ts.map +1 -0
  115. package/dist/auth/oauth/callback-server.js +146 -0
  116. package/dist/auth/oauth/callback-server.js.map +1 -0
  117. package/dist/auth/oauth/device-code.d.ts.map +1 -1
  118. package/dist/auth/oauth/device-code.js.map +1 -1
  119. package/dist/auth/oauth/github-copilot.d.ts.map +1 -1
  120. package/dist/auth/oauth/github-copilot.js.map +1 -1
  121. package/dist/auth/oauth/kimi-coding.d.ts.map +1 -1
  122. package/dist/auth/oauth/kimi-coding.js.map +1 -1
  123. package/dist/auth/oauth/load.d.ts +2 -0
  124. package/dist/auth/oauth/load.d.ts.map +1 -1
  125. package/dist/auth/oauth/load.js +5 -0
  126. package/dist/auth/oauth/load.js.map +1 -1
  127. package/dist/auth/oauth/meta.d.ts.map +1 -1
  128. package/dist/auth/oauth/meta.js.map +1 -1
  129. package/dist/auth/oauth/openai-chatgpt.d.ts +9 -0
  130. package/dist/auth/oauth/openai-chatgpt.d.ts.map +1 -0
  131. package/dist/auth/oauth/openai-chatgpt.js +266 -0
  132. package/dist/auth/oauth/openai-chatgpt.js.map +1 -0
  133. package/dist/auth/oauth/openai-codex.d.ts +1 -1
  134. package/dist/auth/oauth/openai-codex.d.ts.map +1 -1
  135. package/dist/auth/oauth/openai-codex.js +20 -124
  136. package/dist/auth/oauth/openai-codex.js.map +1 -1
  137. package/dist/auth/oauth/openrouter.d.ts +1 -1
  138. package/dist/auth/oauth/openrouter.d.ts.map +1 -1
  139. package/dist/auth/oauth/openrouter.js +19 -138
  140. package/dist/auth/oauth/openrouter.js.map +1 -1
  141. package/dist/auth/oauth/pkce.d.ts.map +1 -1
  142. package/dist/auth/oauth/pkce.js.map +1 -1
  143. package/dist/auth/oauth/radius.d.ts +1 -1
  144. package/dist/auth/oauth/radius.d.ts.map +1 -1
  145. package/dist/auth/oauth/radius.js +21 -89
  146. package/dist/auth/oauth/radius.js.map +1 -1
  147. package/dist/auth/oauth/xai.d.ts.map +1 -1
  148. package/dist/auth/oauth/xai.js.map +1 -1
  149. package/dist/auth/resolve.d.ts +2 -8
  150. package/dist/auth/resolve.d.ts.map +1 -1
  151. package/dist/auth/resolve.js +3 -19
  152. package/dist/auth/resolve.js.map +1 -1
  153. package/dist/auth/types.d.ts +10 -1
  154. package/dist/auth/types.d.ts.map +1 -1
  155. package/dist/auth/types.js.map +1 -1
  156. package/dist/bedrock-provider.d.ts.map +1 -1
  157. package/dist/bun-oauth.d.ts.map +1 -1
  158. package/dist/bun-oauth.js +2 -0
  159. package/dist/bun-oauth.js.map +1 -1
  160. package/dist/cli.d.ts.map +1 -1
  161. package/dist/cli.js +3 -1
  162. package/dist/cli.js.map +1 -1
  163. package/dist/compat/extension-oauth-types.d.ts.map +1 -1
  164. package/dist/compat.d.ts.map +1 -1
  165. package/dist/compat.js.map +1 -1
  166. package/dist/env-api-keys.d.ts.map +1 -1
  167. package/dist/env-api-keys.js +1 -0
  168. package/dist/env-api-keys.js.map +1 -1
  169. package/dist/image-models.d.ts +19 -8
  170. package/dist/image-models.d.ts.map +1 -1
  171. package/dist/image-models.js +14 -13
  172. package/dist/image-models.js.map +1 -1
  173. package/dist/images-api-registry.d.ts +7 -7
  174. package/dist/images-api-registry.d.ts.map +1 -1
  175. package/dist/images-api-registry.js.map +1 -1
  176. package/dist/images.d.ts +7 -2
  177. package/dist/images.d.ts.map +1 -1
  178. package/dist/images.js +5 -0
  179. package/dist/images.js.map +1 -1
  180. package/dist/index.d.ts +0 -1
  181. package/dist/index.d.ts.map +1 -1
  182. package/dist/index.js +0 -1
  183. package/dist/index.js.map +1 -1
  184. package/dist/legacy-api-aliases.d.ts.map +1 -1
  185. package/dist/model-catalog.d.ts +25 -9
  186. package/dist/model-catalog.d.ts.map +1 -1
  187. package/dist/model-catalog.js +14 -2
  188. package/dist/model-catalog.js.map +1 -1
  189. package/dist/models-store.d.ts +3 -2
  190. package/dist/models-store.d.ts.map +1 -1
  191. package/dist/models-store.js.map +1 -1
  192. package/dist/models.d.ts +97 -30
  193. package/dist/models.d.ts.map +1 -1
  194. package/dist/models.generated.d.ts +131 -41
  195. package/dist/models.generated.d.ts.map +1 -1
  196. package/dist/models.generated.js +131 -41
  197. package/dist/models.generated.js.map +1 -1
  198. package/dist/models.js +157 -30
  199. package/dist/models.js.map +1 -1
  200. package/dist/oauth.d.ts.map +1 -1
  201. package/dist/providers/all.d.ts +19 -13
  202. package/dist/providers/all.d.ts.map +1 -1
  203. package/dist/providers/all.js +25 -21
  204. package/dist/providers/all.js.map +1 -1
  205. package/dist/providers/amazon-bedrock.d.ts.map +1 -1
  206. package/dist/providers/amazon-bedrock.js.map +1 -1
  207. package/dist/providers/amazon-bedrock.models.d.ts +4 -2
  208. package/dist/providers/amazon-bedrock.models.d.ts.map +1 -1
  209. package/dist/providers/amazon-bedrock.models.js +4 -2
  210. package/dist/providers/amazon-bedrock.models.js.map +1 -1
  211. package/dist/providers/ant-ling.d.ts.map +1 -1
  212. package/dist/providers/ant-ling.js.map +1 -1
  213. package/dist/providers/ant-ling.models.d.ts +4 -2
  214. package/dist/providers/ant-ling.models.d.ts.map +1 -1
  215. package/dist/providers/ant-ling.models.js +4 -2
  216. package/dist/providers/ant-ling.models.js.map +1 -1
  217. package/dist/providers/anthropic.d.ts.map +1 -1
  218. package/dist/providers/anthropic.js.map +1 -1
  219. package/dist/providers/anthropic.models.d.ts +4 -2
  220. package/dist/providers/anthropic.models.d.ts.map +1 -1
  221. package/dist/providers/anthropic.models.js +4 -2
  222. package/dist/providers/anthropic.models.js.map +1 -1
  223. package/dist/providers/azure-openai-responses.d.ts.map +1 -1
  224. package/dist/providers/azure-openai-responses.js.map +1 -1
  225. package/dist/providers/azure-openai-responses.models.d.ts +4 -2
  226. package/dist/providers/azure-openai-responses.models.d.ts.map +1 -1
  227. package/dist/providers/azure-openai-responses.models.js +4 -2
  228. package/dist/providers/azure-openai-responses.models.js.map +1 -1
  229. package/dist/providers/baseten.d.ts.map +1 -1
  230. package/dist/providers/baseten.js.map +1 -1
  231. package/dist/providers/baseten.models.d.ts +4 -2
  232. package/dist/providers/baseten.models.d.ts.map +1 -1
  233. package/dist/providers/baseten.models.js +4 -2
  234. package/dist/providers/baseten.models.js.map +1 -1
  235. package/dist/providers/cerebras.d.ts.map +1 -1
  236. package/dist/providers/cerebras.js.map +1 -1
  237. package/dist/providers/cerebras.models.d.ts +4 -2
  238. package/dist/providers/cerebras.models.d.ts.map +1 -1
  239. package/dist/providers/cerebras.models.js +4 -2
  240. package/dist/providers/cerebras.models.js.map +1 -1
  241. package/dist/providers/cloudflare-ai-gateway.d.ts.map +1 -1
  242. package/dist/providers/cloudflare-ai-gateway.js.map +1 -1
  243. package/dist/providers/cloudflare-ai-gateway.models.d.ts +4 -2
  244. package/dist/providers/cloudflare-ai-gateway.models.d.ts.map +1 -1
  245. package/dist/providers/cloudflare-ai-gateway.models.js +4 -2
  246. package/dist/providers/cloudflare-ai-gateway.models.js.map +1 -1
  247. package/dist/providers/cloudflare-auth.d.ts.map +1 -1
  248. package/dist/providers/cloudflare-auth.js.map +1 -1
  249. package/dist/providers/cloudflare-stream.d.ts +6 -2
  250. package/dist/providers/cloudflare-stream.d.ts.map +1 -1
  251. package/dist/providers/cloudflare-stream.js +6 -0
  252. package/dist/providers/cloudflare-stream.js.map +1 -1
  253. package/dist/providers/cloudflare-workers-ai.d.ts.map +1 -1
  254. package/dist/providers/cloudflare-workers-ai.js +10 -3
  255. package/dist/providers/cloudflare-workers-ai.js.map +1 -1
  256. package/dist/providers/cloudflare-workers-ai.models.d.ts +4 -2
  257. package/dist/providers/cloudflare-workers-ai.models.d.ts.map +1 -1
  258. package/dist/providers/cloudflare-workers-ai.models.js +4 -2
  259. package/dist/providers/cloudflare-workers-ai.models.js.map +1 -1
  260. package/dist/providers/data/.manifest.json +1 -1
  261. package/dist/providers/data/amazon-bedrock.json +1 -1
  262. package/dist/providers/data/ant-ling.json +1 -1
  263. package/dist/providers/data/anthropic.json +1 -1
  264. package/dist/providers/data/azure-openai-responses.json +1 -1
  265. package/dist/providers/data/baseten.json +1 -1
  266. package/dist/providers/data/cerebras.json +1 -1
  267. package/dist/providers/data/cloudflare-ai-gateway.json +1 -1
  268. package/dist/providers/data/cloudflare-workers-ai.json +1 -1
  269. package/dist/providers/data/deepseek.json +1 -1
  270. package/dist/providers/data/fireworks.json +1 -1
  271. package/dist/providers/data/github-copilot.json +1 -1
  272. package/dist/providers/data/google-vertex.json +1 -1
  273. package/dist/providers/data/google.json +1 -1
  274. package/dist/providers/data/groq.json +1 -1
  275. package/dist/providers/data/huggingface.json +1 -1
  276. package/dist/providers/data/kimi-coding.json +1 -1
  277. package/dist/providers/data/meta.json +1 -1
  278. package/dist/providers/data/minimax-cn.json +1 -1
  279. package/dist/providers/data/minimax.json +1 -1
  280. package/dist/providers/data/mistral.json +1 -1
  281. package/dist/providers/data/moonshotai-cn.json +1 -1
  282. package/dist/providers/data/moonshotai.json +1 -1
  283. package/dist/providers/data/nvidia.json +1 -1
  284. package/dist/providers/data/openai-codex.json +1 -1
  285. package/dist/providers/data/openai.json +1 -1
  286. package/dist/providers/data/opencode-go.json +1 -1
  287. package/dist/providers/data/opencode.json +1 -1
  288. package/dist/providers/data/openrouter.json +1 -1
  289. package/dist/providers/data/qwen-token-plan-cn.json +1 -1
  290. package/dist/providers/data/qwen-token-plan-individual.json +1 -1
  291. package/dist/providers/data/qwen-token-plan.json +1 -1
  292. package/dist/providers/data/radius.json +1 -1
  293. package/dist/providers/data/together.json +1 -1
  294. package/dist/providers/data/typesafe.json +1 -0
  295. package/dist/providers/data/vercel-ai-gateway.json +1 -1
  296. package/dist/providers/data/xai.json +1 -1
  297. package/dist/providers/data/xiaomi-token-plan-ams.json +1 -1
  298. package/dist/providers/data/xiaomi-token-plan-cn.json +1 -1
  299. package/dist/providers/data/xiaomi-token-plan-sgp.json +1 -1
  300. package/dist/providers/data/xiaomi.json +1 -1
  301. package/dist/providers/data/zai-coding-cn.json +1 -1
  302. package/dist/providers/data/zai.json +1 -1
  303. package/dist/providers/deepseek.d.ts.map +1 -1
  304. package/dist/providers/deepseek.js.map +1 -1
  305. package/dist/providers/deepseek.models.d.ts +4 -2
  306. package/dist/providers/deepseek.models.d.ts.map +1 -1
  307. package/dist/providers/deepseek.models.js +4 -2
  308. package/dist/providers/deepseek.models.js.map +1 -1
  309. package/dist/providers/faux.d.ts +2 -2
  310. package/dist/providers/faux.d.ts.map +1 -1
  311. package/dist/providers/faux.js.map +1 -1
  312. package/dist/providers/fireworks.d.ts.map +1 -1
  313. package/dist/providers/fireworks.js.map +1 -1
  314. package/dist/providers/fireworks.models.d.ts +4 -2
  315. package/dist/providers/fireworks.models.d.ts.map +1 -1
  316. package/dist/providers/fireworks.models.js +4 -2
  317. package/dist/providers/fireworks.models.js.map +1 -1
  318. package/dist/providers/github-copilot.d.ts.map +1 -1
  319. package/dist/providers/github-copilot.js.map +1 -1
  320. package/dist/providers/github-copilot.models.d.ts +4 -2
  321. package/dist/providers/github-copilot.models.d.ts.map +1 -1
  322. package/dist/providers/github-copilot.models.js +4 -2
  323. package/dist/providers/github-copilot.models.js.map +1 -1
  324. package/dist/providers/google-vertex.d.ts.map +1 -1
  325. package/dist/providers/google-vertex.js.map +1 -1
  326. package/dist/providers/google-vertex.models.d.ts +4 -2
  327. package/dist/providers/google-vertex.models.d.ts.map +1 -1
  328. package/dist/providers/google-vertex.models.js +4 -2
  329. package/dist/providers/google-vertex.models.js.map +1 -1
  330. package/dist/providers/google.d.ts.map +1 -1
  331. package/dist/providers/google.js.map +1 -1
  332. package/dist/providers/google.models.d.ts +4 -2
  333. package/dist/providers/google.models.d.ts.map +1 -1
  334. package/dist/providers/google.models.js +4 -2
  335. package/dist/providers/google.models.js.map +1 -1
  336. package/dist/providers/groq.d.ts.map +1 -1
  337. package/dist/providers/groq.js.map +1 -1
  338. package/dist/providers/groq.models.d.ts +4 -2
  339. package/dist/providers/groq.models.d.ts.map +1 -1
  340. package/dist/providers/groq.models.js +4 -2
  341. package/dist/providers/groq.models.js.map +1 -1
  342. package/dist/providers/huggingface.d.ts.map +1 -1
  343. package/dist/providers/huggingface.js.map +1 -1
  344. package/dist/providers/huggingface.models.d.ts +4 -2
  345. package/dist/providers/huggingface.models.d.ts.map +1 -1
  346. package/dist/providers/huggingface.models.js +4 -2
  347. package/dist/providers/huggingface.models.js.map +1 -1
  348. package/dist/providers/images/register-builtins.d.ts +1 -1
  349. package/dist/providers/images/register-builtins.d.ts.map +1 -1
  350. package/dist/providers/images/register-builtins.js.map +1 -1
  351. package/dist/providers/kimi-coding.d.ts.map +1 -1
  352. package/dist/providers/kimi-coding.js.map +1 -1
  353. package/dist/providers/kimi-coding.models.d.ts +4 -2
  354. package/dist/providers/kimi-coding.models.d.ts.map +1 -1
  355. package/dist/providers/kimi-coding.models.js +4 -2
  356. package/dist/providers/kimi-coding.models.js.map +1 -1
  357. package/dist/providers/meta.d.ts.map +1 -1
  358. package/dist/providers/meta.js.map +1 -1
  359. package/dist/providers/meta.models.d.ts +4 -2
  360. package/dist/providers/meta.models.d.ts.map +1 -1
  361. package/dist/providers/meta.models.js +4 -2
  362. package/dist/providers/meta.models.js.map +1 -1
  363. package/dist/providers/minimax-cn.d.ts.map +1 -1
  364. package/dist/providers/minimax-cn.js.map +1 -1
  365. package/dist/providers/minimax-cn.models.d.ts +4 -2
  366. package/dist/providers/minimax-cn.models.d.ts.map +1 -1
  367. package/dist/providers/minimax-cn.models.js +4 -2
  368. package/dist/providers/minimax-cn.models.js.map +1 -1
  369. package/dist/providers/minimax.d.ts.map +1 -1
  370. package/dist/providers/minimax.js.map +1 -1
  371. package/dist/providers/minimax.models.d.ts +4 -2
  372. package/dist/providers/minimax.models.d.ts.map +1 -1
  373. package/dist/providers/minimax.models.js +4 -2
  374. package/dist/providers/minimax.models.js.map +1 -1
  375. package/dist/providers/mistral.d.ts.map +1 -1
  376. package/dist/providers/mistral.js.map +1 -1
  377. package/dist/providers/mistral.models.d.ts +4 -2
  378. package/dist/providers/mistral.models.d.ts.map +1 -1
  379. package/dist/providers/mistral.models.js +4 -2
  380. package/dist/providers/mistral.models.js.map +1 -1
  381. package/dist/providers/moonshotai-cn.d.ts.map +1 -1
  382. package/dist/providers/moonshotai-cn.js.map +1 -1
  383. package/dist/providers/moonshotai-cn.models.d.ts +4 -2
  384. package/dist/providers/moonshotai-cn.models.d.ts.map +1 -1
  385. package/dist/providers/moonshotai-cn.models.js +4 -2
  386. package/dist/providers/moonshotai-cn.models.js.map +1 -1
  387. package/dist/providers/moonshotai.d.ts.map +1 -1
  388. package/dist/providers/moonshotai.js.map +1 -1
  389. package/dist/providers/moonshotai.models.d.ts +4 -2
  390. package/dist/providers/moonshotai.models.d.ts.map +1 -1
  391. package/dist/providers/moonshotai.models.js +4 -2
  392. package/dist/providers/moonshotai.models.js.map +1 -1
  393. package/dist/providers/nvidia.d.ts.map +1 -1
  394. package/dist/providers/nvidia.js.map +1 -1
  395. package/dist/providers/nvidia.models.d.ts +4 -2
  396. package/dist/providers/nvidia.models.d.ts.map +1 -1
  397. package/dist/providers/nvidia.models.js +4 -2
  398. package/dist/providers/nvidia.models.js.map +1 -1
  399. package/dist/providers/openai-codex.d.ts.map +1 -1
  400. package/dist/providers/openai-codex.js +1 -1
  401. package/dist/providers/openai-codex.js.map +1 -1
  402. package/dist/providers/openai-codex.models.d.ts +4 -2
  403. package/dist/providers/openai-codex.models.d.ts.map +1 -1
  404. package/dist/providers/openai-codex.models.js +4 -2
  405. package/dist/providers/openai-codex.models.js.map +1 -1
  406. package/dist/providers/openai.d.ts.map +1 -1
  407. package/dist/providers/openai.js +11 -2
  408. package/dist/providers/openai.js.map +1 -1
  409. package/dist/providers/openai.models.d.ts +4 -2
  410. package/dist/providers/openai.models.d.ts.map +1 -1
  411. package/dist/providers/openai.models.js +4 -2
  412. package/dist/providers/openai.models.js.map +1 -1
  413. package/dist/providers/opencode-go.d.ts.map +1 -1
  414. package/dist/providers/opencode-go.js.map +1 -1
  415. package/dist/providers/opencode-go.models.d.ts +4 -2
  416. package/dist/providers/opencode-go.models.d.ts.map +1 -1
  417. package/dist/providers/opencode-go.models.js +4 -2
  418. package/dist/providers/opencode-go.models.js.map +1 -1
  419. package/dist/providers/opencode-headers.d.ts.map +1 -1
  420. package/dist/providers/opencode-headers.js.map +1 -1
  421. package/dist/providers/opencode.d.ts +3 -1
  422. package/dist/providers/opencode.d.ts.map +1 -1
  423. package/dist/providers/opencode.js +5 -2
  424. package/dist/providers/opencode.js.map +1 -1
  425. package/dist/providers/opencode.models.d.ts +4 -2
  426. package/dist/providers/opencode.models.d.ts.map +1 -1
  427. package/dist/providers/opencode.models.js +4 -2
  428. package/dist/providers/opencode.models.js.map +1 -1
  429. package/dist/providers/openrouter.d.ts.map +1 -1
  430. package/dist/providers/openrouter.js +11 -2
  431. package/dist/providers/openrouter.js.map +1 -1
  432. package/dist/providers/openrouter.models.d.ts +4 -2
  433. package/dist/providers/openrouter.models.d.ts.map +1 -1
  434. package/dist/providers/openrouter.models.js +4 -2
  435. package/dist/providers/openrouter.models.js.map +1 -1
  436. package/dist/providers/qwen-token-plan-cn.d.ts.map +1 -1
  437. package/dist/providers/qwen-token-plan-cn.js.map +1 -1
  438. package/dist/providers/qwen-token-plan-cn.models.d.ts +4 -2
  439. package/dist/providers/qwen-token-plan-cn.models.d.ts.map +1 -1
  440. package/dist/providers/qwen-token-plan-cn.models.js +4 -2
  441. package/dist/providers/qwen-token-plan-cn.models.js.map +1 -1
  442. package/dist/providers/qwen-token-plan-individual.d.ts.map +1 -1
  443. package/dist/providers/qwen-token-plan-individual.js.map +1 -1
  444. package/dist/providers/qwen-token-plan-individual.models.d.ts +4 -2
  445. package/dist/providers/qwen-token-plan-individual.models.d.ts.map +1 -1
  446. package/dist/providers/qwen-token-plan-individual.models.js +4 -2
  447. package/dist/providers/qwen-token-plan-individual.models.js.map +1 -1
  448. package/dist/providers/qwen-token-plan.d.ts.map +1 -1
  449. package/dist/providers/qwen-token-plan.js.map +1 -1
  450. package/dist/providers/qwen-token-plan.models.d.ts +4 -2
  451. package/dist/providers/qwen-token-plan.models.d.ts.map +1 -1
  452. package/dist/providers/qwen-token-plan.models.js +4 -2
  453. package/dist/providers/qwen-token-plan.models.js.map +1 -1
  454. package/dist/providers/radius-config.d.ts.map +1 -1
  455. package/dist/providers/radius-config.js.map +1 -1
  456. package/dist/providers/radius.d.ts.map +1 -1
  457. package/dist/providers/radius.js.map +1 -1
  458. package/dist/providers/radius.models.d.ts +4 -2
  459. package/dist/providers/radius.models.d.ts.map +1 -1
  460. package/dist/providers/radius.models.js +4 -2
  461. package/dist/providers/radius.models.js.map +1 -1
  462. package/dist/providers/together.d.ts.map +1 -1
  463. package/dist/providers/together.js.map +1 -1
  464. package/dist/providers/together.models.d.ts +4 -2
  465. package/dist/providers/together.models.d.ts.map +1 -1
  466. package/dist/providers/together.models.js +4 -2
  467. package/dist/providers/together.models.js.map +1 -1
  468. package/dist/providers/typesafe.d.ts +3 -0
  469. package/dist/providers/typesafe.d.ts.map +1 -0
  470. package/dist/providers/typesafe.js +18 -0
  471. package/dist/providers/typesafe.js.map +1 -0
  472. package/dist/providers/typesafe.models.d.ts +6 -0
  473. package/dist/providers/typesafe.models.d.ts.map +1 -0
  474. package/dist/providers/typesafe.models.js +8 -0
  475. package/dist/providers/typesafe.models.js.map +1 -0
  476. package/dist/providers/vercel-ai-gateway.d.ts.map +1 -1
  477. package/dist/providers/vercel-ai-gateway.js +5 -2
  478. package/dist/providers/vercel-ai-gateway.js.map +1 -1
  479. package/dist/providers/vercel-ai-gateway.models.d.ts +4 -2
  480. package/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -1
  481. package/dist/providers/vercel-ai-gateway.models.js +4 -2
  482. package/dist/providers/vercel-ai-gateway.models.js.map +1 -1
  483. package/dist/providers/xai.d.ts.map +1 -1
  484. package/dist/providers/xai.js.map +1 -1
  485. package/dist/providers/xai.models.d.ts +4 -2
  486. package/dist/providers/xai.models.d.ts.map +1 -1
  487. package/dist/providers/xai.models.js +4 -2
  488. package/dist/providers/xai.models.js.map +1 -1
  489. package/dist/providers/xiaomi-token-plan-ams.d.ts.map +1 -1
  490. package/dist/providers/xiaomi-token-plan-ams.js.map +1 -1
  491. package/dist/providers/xiaomi-token-plan-ams.models.d.ts +4 -2
  492. package/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +1 -1
  493. package/dist/providers/xiaomi-token-plan-ams.models.js +4 -2
  494. package/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -1
  495. package/dist/providers/xiaomi-token-plan-cn.d.ts.map +1 -1
  496. package/dist/providers/xiaomi-token-plan-cn.js.map +1 -1
  497. package/dist/providers/xiaomi-token-plan-cn.models.d.ts +4 -2
  498. package/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +1 -1
  499. package/dist/providers/xiaomi-token-plan-cn.models.js +4 -2
  500. package/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -1
  501. package/dist/providers/xiaomi-token-plan-sgp.d.ts.map +1 -1
  502. package/dist/providers/xiaomi-token-plan-sgp.js.map +1 -1
  503. package/dist/providers/xiaomi-token-plan-sgp.models.d.ts +4 -2
  504. package/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +1 -1
  505. package/dist/providers/xiaomi-token-plan-sgp.models.js +4 -2
  506. package/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -1
  507. package/dist/providers/xiaomi.d.ts.map +1 -1
  508. package/dist/providers/xiaomi.js.map +1 -1
  509. package/dist/providers/xiaomi.models.d.ts +4 -2
  510. package/dist/providers/xiaomi.models.d.ts.map +1 -1
  511. package/dist/providers/xiaomi.models.js +4 -2
  512. package/dist/providers/xiaomi.models.js.map +1 -1
  513. package/dist/providers/zai-coding-cn.d.ts.map +1 -1
  514. package/dist/providers/zai-coding-cn.js.map +1 -1
  515. package/dist/providers/zai-coding-cn.models.d.ts +4 -2
  516. package/dist/providers/zai-coding-cn.models.d.ts.map +1 -1
  517. package/dist/providers/zai-coding-cn.models.js +4 -2
  518. package/dist/providers/zai-coding-cn.models.js.map +1 -1
  519. package/dist/providers/zai.d.ts.map +1 -1
  520. package/dist/providers/zai.js.map +1 -1
  521. package/dist/providers/zai.models.d.ts +4 -2
  522. package/dist/providers/zai.models.d.ts.map +1 -1
  523. package/dist/providers/zai.models.js +4 -2
  524. package/dist/providers/zai.models.js.map +1 -1
  525. package/dist/session-resources.d.ts.map +1 -1
  526. package/dist/session-resources.js.map +1 -1
  527. package/dist/types.d.ts +141 -21
  528. package/dist/types.d.ts.map +1 -1
  529. package/dist/types.js.map +1 -1
  530. package/dist/utils/abort-signals.d.ts.map +1 -1
  531. package/dist/utils/abort-signals.js.map +1 -1
  532. package/dist/utils/abort.d.ts.map +1 -1
  533. package/dist/utils/abort.js.map +1 -1
  534. package/dist/utils/assistant-message-frame.d.ts.map +1 -1
  535. package/dist/utils/assistant-message-frame.js.map +1 -1
  536. package/dist/utils/diagnostics.d.ts.map +1 -1
  537. package/dist/utils/diagnostics.js.map +1 -1
  538. package/dist/utils/error-body.d.ts.map +1 -1
  539. package/dist/utils/error-body.js.map +1 -1
  540. package/dist/utils/estimate.d.ts.map +1 -1
  541. package/dist/utils/estimate.js.map +1 -1
  542. package/dist/utils/event-stream.d.ts.map +1 -1
  543. package/dist/utils/event-stream.js.map +1 -1
  544. package/dist/utils/hash.d.ts.map +1 -1
  545. package/dist/utils/hash.js.map +1 -1
  546. package/dist/utils/headers.d.ts +1 -1
  547. package/dist/utils/headers.d.ts.map +1 -1
  548. package/dist/utils/headers.js +10 -8
  549. package/dist/utils/headers.js.map +1 -1
  550. package/dist/utils/json-parse.d.ts.map +1 -1
  551. package/dist/utils/json-parse.js.map +1 -1
  552. package/dist/utils/model-operations.d.ts +11 -0
  553. package/dist/utils/model-operations.d.ts.map +1 -0
  554. package/dist/utils/model-operations.js +47 -0
  555. package/dist/utils/model-operations.js.map +1 -0
  556. package/dist/utils/models-error.d.ts +8 -0
  557. package/dist/utils/models-error.d.ts.map +1 -0
  558. package/dist/utils/models-error.js +19 -0
  559. package/dist/utils/models-error.js.map +1 -0
  560. package/dist/utils/node-http-proxy.d.ts.map +1 -1
  561. package/dist/utils/node-http-proxy.js.map +1 -1
  562. package/dist/utils/oauth-page.d.ts.map +1 -0
  563. package/dist/utils/oauth-page.js.map +1 -0
  564. package/dist/utils/overflow.d.ts.map +1 -1
  565. package/dist/utils/overflow.js.map +1 -1
  566. package/dist/utils/pi-user-agent.d.ts.map +1 -1
  567. package/dist/utils/pi-user-agent.js.map +1 -1
  568. package/dist/utils/provider-env.d.ts.map +1 -1
  569. package/dist/utils/provider-env.js.map +1 -1
  570. package/dist/utils/provider-retry.d.ts.map +1 -1
  571. package/dist/utils/provider-retry.js.map +1 -1
  572. package/dist/utils/retry.d.ts.map +1 -1
  573. package/dist/utils/retry.js +7 -0
  574. package/dist/utils/retry.js.map +1 -1
  575. package/dist/utils/sanitize-unicode.d.ts.map +1 -1
  576. package/dist/utils/sanitize-unicode.js.map +1 -1
  577. package/dist/utils/sleep.d.ts.map +1 -1
  578. package/dist/utils/sleep.js.map +1 -1
  579. package/dist/utils/text.d.ts.map +1 -1
  580. package/dist/utils/text.js.map +1 -1
  581. package/dist/utils/transcript.d.ts.map +1 -1
  582. package/dist/utils/transcript.js.map +1 -1
  583. package/dist/utils/typebox-helpers.d.ts.map +1 -1
  584. package/dist/utils/typebox-helpers.js.map +1 -1
  585. package/dist/utils/uuid.d.ts.map +1 -1
  586. package/dist/utils/uuid.js.map +1 -1
  587. package/dist/utils/validation.d.ts.map +1 -1
  588. package/dist/utils/validation.js.map +1 -1
  589. package/package.json +5 -6
  590. package/dist/auth/oauth/oauth-page.d.ts.map +0 -1
  591. package/dist/auth/oauth/oauth-page.js.map +0 -1
  592. package/dist/image-models.generated.d.ts +0 -815
  593. package/dist/image-models.generated.d.ts.map +0 -1
  594. package/dist/image-models.generated.js +0 -817
  595. package/dist/image-models.generated.js.map +0 -1
  596. package/dist/images-models.d.ts +0 -95
  597. package/dist/images-models.d.ts.map +0 -1
  598. package/dist/images-models.js +0 -143
  599. package/dist/images-models.js.map +0 -1
  600. package/dist/providers/openrouter-images.d.ts +0 -3
  601. package/dist/providers/openrouter-images.d.ts.map +0 -1
  602. package/dist/providers/openrouter-images.js +0 -22
  603. package/dist/providers/openrouter-images.js.map +0 -1
  604. /package/dist/{auth/oauth → utils}/oauth-page.d.ts +0 -0
  605. /package/dist/{auth/oauth → utils}/oauth-page.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"images.js","sourceRoot":"","sources":["../src/images.ts"],"names":[],"mappings":"AAAA,OAAO,yCAAyC,CAAC;AAEjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,SAAS,wBAAwB,CAAC,GAAc,EAAE;IACjD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,QAAQ,CAAC;AAAA,CAChB;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,KAAwB,EACxB,OAAsB,EACtB,OAA+B,EACJ;IAC3B,MAAM,QAAQ,GAAG,wBAAwB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrD,OAAO,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAAA,CACxD","sourcesContent":["import \"./providers/images/register-builtins.ts\";\n\nimport { getImagesApiProvider } from \"./images-api-registry.ts\";\nimport type { AssistantImages, ImagesApi, ImagesContext, ImagesModel, ProviderImagesOptions } from \"./types.ts\";\n\nfunction resolveImagesApiProvider(api: ImagesApi) {\n\tconst provider = getImagesApiProvider(api);\n\tif (!provider) {\n\t\tthrow new Error(`No API provider registered for api: ${api}`);\n\t}\n\treturn provider;\n}\n\nexport async function generateImages<TApi extends ImagesApi>(\n\tmodel: ImagesModel<TApi>,\n\tcontext: ImagesContext,\n\toptions?: ProviderImagesOptions,\n): Promise<AssistantImages> {\n\tconst provider = resolveImagesApiProvider(model.api);\n\treturn provider.generateImages(model, context, options);\n}\n"]}
1
+ {"version":3,"file":"images.js","sourceRoot":"","sources":["../src/images.ts"],"names":[],"mappings":"AAAA,OAAO,yCAAyC,CAAC;AAEjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE,SAAS,wBAAwB,CAAC,GAAa;IAC9C,MAAM,QAAQ,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,uCAAuC,GAAG,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,QAAQ,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CACnC,KAA2B,EAC3B,OAAsB,EACtB,OAA+B;IAE/B,MAAM,QAAQ,GAAG,wBAAwB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrD,OAAO,QAAQ,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC","sourcesContent":["import \"./providers/images/register-builtins.ts\";\n\nimport { getImagesApiProvider } from \"./images-api-registry.ts\";\nimport type { AssistantImages, ImageApi, ImageModel, ImagesContext, ProviderImagesOptions } from \"./types.ts\";\n\nfunction resolveImagesApiProvider(api: ImageApi) {\n\tconst provider = getImagesApiProvider(api);\n\tif (!provider) {\n\t\tthrow new Error(`No API provider registered for api: ${api}`);\n\t}\n\treturn provider;\n}\n\n/**\n * Global image generation dispatched on `model.api` through the images api\n * registry. Auth must be passed explicitly via `options.apiKey`; prefer\n * `Models.generateImages()`, which resolves provider auth.\n */\nexport async function generateImages(\n\tmodel: ImageModel<ImageApi>,\n\tcontext: ImagesContext,\n\toptions?: ProviderImagesOptions,\n): Promise<AssistantImages> {\n\tconst provider = resolveImagesApiProvider(model.api);\n\treturn provider.generateImages(model, context, options);\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -17,7 +17,6 @@ export * from "./auth/credential-store.ts";
17
17
  export * from "./auth/helpers.ts";
18
18
  export * from "./auth/types.ts";
19
19
  export type { OAuthAuthInfo, OAuthDeviceCodeInfo, OAuthLoginCallbacks, OAuthPrompt, OAuthSelectOption, OAuthSelectPrompt, } from "./compat/extension-oauth-types.ts";
20
- export * from "./images-models.ts";
21
20
  export * from "./models.ts";
22
21
  export * from "./models-store.ts";
23
22
  export * from "./providers/faux.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAO/B,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC/G,YAAY,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AACnF,YAAY,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC/F,YAAY,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,YAAY,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAClG,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,cAAc,eAAe,CAAC;AAC9B,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,YAAY,EAAE,2BAA2B,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACnH,YAAY,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,YAAY,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACxG,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,YAAY,EACX,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,iBAAiB,GACjB,MAAM,mCAAmC,CAAC;AAC3C,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,oCAAoC,CAAC;AACnD,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC/F,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,cAAc,uBAAuB,CAAC","sourcesContent":["export type { Static, TSchema } from \"typebox\";\nexport { Type } from \"typebox\";\n\n// Core only, side-effect free: no generated catalogs, no provider factories,\n// no api-registry, no OAuth implementations, no compat. Provider factories\n// live under \"@earendil-works/pi-ai/providers/*\", API implementations under\n// \"@earendil-works/pi-ai/api/*\", the old global API under\n// \"@earendil-works/pi-ai/compat\".\nexport type { AnthropicEffort, AnthropicOptions, AnthropicThinkingDisplay } from \"./api/anthropic-messages.ts\";\nexport type { AzureOpenAIResponsesOptions } from \"./api/azure-openai-responses.ts\";\nexport type { BedrockOptions, BedrockThinkingDisplay } from \"./api/bedrock-converse-stream.ts\";\nexport type { GoogleOptions } from \"./api/google-generative-ai.ts\";\nexport type { GoogleApiThinkingLevel, ResolvedGoogleThinkingLevel } from \"./api/google-shared.ts\";\nexport type { GoogleVertexOptions } from \"./api/google-vertex.ts\";\nexport * from \"./api/lazy.ts\";\nexport type { MistralOptions } from \"./api/mistral-conversations.ts\";\nexport type { OpenAICodexResponsesOptions, OpenAICodexWebSocketDebugStats } from \"./api/openai-codex-responses.ts\";\nexport type { OpenAICompletionsOptions } from \"./api/openai-completions.ts\";\nexport type { OpenAIResponsesOptions } from \"./api/openai-responses.ts\";\nexport type { PiMessagesEvent, PiMessagesOptions, PiMessagesRewriteImpact } from \"./api/pi-messages.ts\";\nexport * from \"./auth/context.ts\";\nexport * from \"./auth/credential-store.ts\";\nexport * from \"./auth/helpers.ts\";\nexport * from \"./auth/types.ts\";\nexport type {\n\tOAuthAuthInfo,\n\tOAuthDeviceCodeInfo,\n\tOAuthLoginCallbacks,\n\tOAuthPrompt,\n\tOAuthSelectOption,\n\tOAuthSelectPrompt,\n} from \"./compat/extension-oauth-types.ts\";\nexport * from \"./images-models.ts\";\nexport * from \"./models.ts\";\nexport * from \"./models-store.ts\";\nexport * from \"./providers/faux.ts\";\nexport * from \"./session-resources.ts\";\nexport * from \"./types.ts\";\nexport * from \"./utils/assistant-message-frame.ts\";\nexport * from \"./utils/diagnostics.ts\";\nexport * from \"./utils/event-stream.ts\";\nexport * from \"./utils/json-parse.ts\";\nexport * from \"./utils/overflow.ts\";\nexport * from \"./utils/retry.ts\";\nexport { contentText, getSystemMessageText, renderSystemMessageUpdate } from \"./utils/text.ts\";\nexport * from \"./utils/transcript.ts\";\nexport * from \"./utils/typebox-helpers.ts\";\nexport { uuidv7 } from \"./utils/uuid.ts\";\nexport * from \"./utils/validation.ts\";\n"]}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAO/B,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC/G,YAAY,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AACnF,YAAY,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAC/F,YAAY,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AACnE,YAAY,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAClG,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,cAAc,eAAe,CAAC;AAC9B,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,YAAY,EAAE,2BAA2B,EAAE,8BAA8B,EAAE,MAAM,iCAAiC,CAAC;AACnH,YAAY,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAC5E,YAAY,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACxG,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,YAAY,EACX,aAAa,EACb,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,iBAAiB,EACjB,iBAAiB,GACjB,MAAM,mCAAmC,CAAC;AAC3C,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,oCAAoC,CAAC;AACnD,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC/F,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,cAAc,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -4,7 +4,6 @@ export * from "./auth/context.js";
4
4
  export * from "./auth/credential-store.js";
5
5
  export * from "./auth/helpers.js";
6
6
  export * from "./auth/types.js";
7
- export * from "./images-models.js";
8
7
  export * from "./models.js";
9
8
  export * from "./models-store.js";
10
9
  export * from "./providers/faux.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAa/B,cAAc,eAAe,CAAC;AAM9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAShC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,oCAAoC,CAAC;AACnD,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC/F,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,cAAc,uBAAuB,CAAC","sourcesContent":["export type { Static, TSchema } from \"typebox\";\nexport { Type } from \"typebox\";\n\n// Core only, side-effect free: no generated catalogs, no provider factories,\n// no api-registry, no OAuth implementations, no compat. Provider factories\n// live under \"@earendil-works/pi-ai/providers/*\", API implementations under\n// \"@earendil-works/pi-ai/api/*\", the old global API under\n// \"@earendil-works/pi-ai/compat\".\nexport type { AnthropicEffort, AnthropicOptions, AnthropicThinkingDisplay } from \"./api/anthropic-messages.ts\";\nexport type { AzureOpenAIResponsesOptions } from \"./api/azure-openai-responses.ts\";\nexport type { BedrockOptions, BedrockThinkingDisplay } from \"./api/bedrock-converse-stream.ts\";\nexport type { GoogleOptions } from \"./api/google-generative-ai.ts\";\nexport type { GoogleApiThinkingLevel, ResolvedGoogleThinkingLevel } from \"./api/google-shared.ts\";\nexport type { GoogleVertexOptions } from \"./api/google-vertex.ts\";\nexport * from \"./api/lazy.ts\";\nexport type { MistralOptions } from \"./api/mistral-conversations.ts\";\nexport type { OpenAICodexResponsesOptions, OpenAICodexWebSocketDebugStats } from \"./api/openai-codex-responses.ts\";\nexport type { OpenAICompletionsOptions } from \"./api/openai-completions.ts\";\nexport type { OpenAIResponsesOptions } from \"./api/openai-responses.ts\";\nexport type { PiMessagesEvent, PiMessagesOptions, PiMessagesRewriteImpact } from \"./api/pi-messages.ts\";\nexport * from \"./auth/context.ts\";\nexport * from \"./auth/credential-store.ts\";\nexport * from \"./auth/helpers.ts\";\nexport * from \"./auth/types.ts\";\nexport type {\n\tOAuthAuthInfo,\n\tOAuthDeviceCodeInfo,\n\tOAuthLoginCallbacks,\n\tOAuthPrompt,\n\tOAuthSelectOption,\n\tOAuthSelectPrompt,\n} from \"./compat/extension-oauth-types.ts\";\nexport * from \"./images-models.ts\";\nexport * from \"./models.ts\";\nexport * from \"./models-store.ts\";\nexport * from \"./providers/faux.ts\";\nexport * from \"./session-resources.ts\";\nexport * from \"./types.ts\";\nexport * from \"./utils/assistant-message-frame.ts\";\nexport * from \"./utils/diagnostics.ts\";\nexport * from \"./utils/event-stream.ts\";\nexport * from \"./utils/json-parse.ts\";\nexport * from \"./utils/overflow.ts\";\nexport * from \"./utils/retry.ts\";\nexport { contentText, getSystemMessageText, renderSystemMessageUpdate } from \"./utils/text.ts\";\nexport * from \"./utils/transcript.ts\";\nexport * from \"./utils/typebox-helpers.ts\";\nexport { uuidv7 } from \"./utils/uuid.ts\";\nexport * from \"./utils/validation.ts\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAa/B,cAAc,eAAe,CAAC;AAM9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAShC,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,YAAY,CAAC;AAC3B,cAAc,oCAAoC,CAAC;AACnD,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC/F,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,cAAc,uBAAuB,CAAC","sourcesContent":["export type { Static, TSchema } from \"typebox\";\nexport { Type } from \"typebox\";\n\n// Core only, side-effect free: no generated catalogs, no provider factories,\n// no api-registry, no OAuth implementations, no compat. Provider factories\n// live under \"@earendil-works/pi-ai/providers/*\", API implementations under\n// \"@earendil-works/pi-ai/api/*\", the old global API under\n// \"@earendil-works/pi-ai/compat\".\nexport type { AnthropicEffort, AnthropicOptions, AnthropicThinkingDisplay } from \"./api/anthropic-messages.ts\";\nexport type { AzureOpenAIResponsesOptions } from \"./api/azure-openai-responses.ts\";\nexport type { BedrockOptions, BedrockThinkingDisplay } from \"./api/bedrock-converse-stream.ts\";\nexport type { GoogleOptions } from \"./api/google-generative-ai.ts\";\nexport type { GoogleApiThinkingLevel, ResolvedGoogleThinkingLevel } from \"./api/google-shared.ts\";\nexport type { GoogleVertexOptions } from \"./api/google-vertex.ts\";\nexport * from \"./api/lazy.ts\";\nexport type { MistralOptions } from \"./api/mistral-conversations.ts\";\nexport type { OpenAICodexResponsesOptions, OpenAICodexWebSocketDebugStats } from \"./api/openai-codex-responses.ts\";\nexport type { OpenAICompletionsOptions } from \"./api/openai-completions.ts\";\nexport type { OpenAIResponsesOptions } from \"./api/openai-responses.ts\";\nexport type { PiMessagesEvent, PiMessagesOptions, PiMessagesRewriteImpact } from \"./api/pi-messages.ts\";\nexport * from \"./auth/context.ts\";\nexport * from \"./auth/credential-store.ts\";\nexport * from \"./auth/helpers.ts\";\nexport * from \"./auth/types.ts\";\nexport type {\n\tOAuthAuthInfo,\n\tOAuthDeviceCodeInfo,\n\tOAuthLoginCallbacks,\n\tOAuthPrompt,\n\tOAuthSelectOption,\n\tOAuthSelectPrompt,\n} from \"./compat/extension-oauth-types.ts\";\nexport * from \"./models.ts\";\nexport * from \"./models-store.ts\";\nexport * from \"./providers/faux.ts\";\nexport * from \"./session-resources.ts\";\nexport * from \"./types.ts\";\nexport * from \"./utils/assistant-message-frame.ts\";\nexport * from \"./utils/diagnostics.ts\";\nexport * from \"./utils/event-stream.ts\";\nexport * from \"./utils/json-parse.ts\";\nexport * from \"./utils/overflow.ts\";\nexport * from \"./utils/retry.ts\";\nexport { contentText, getSystemMessageText, renderSystemMessageUpdate } from \"./utils/text.ts\";\nexport * from \"./utils/transcript.ts\";\nexport * from \"./utils/typebox-helpers.ts\";\nexport { uuidv7 } from \"./utils/uuid.ts\";\nexport * from \"./utils/validation.ts\";\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"legacy-api-aliases.d.ts","sourceRoot":"","sources":["../src/legacy-api-aliases.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAEnF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAEnF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAE5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAWtE,uHAAuH;AACvH,eAAO,MAAM,eAAe,wDAG3B,CAAC;AACF,mIAAmI;AACnI,eAAO,MAAM,qBAAqB,2DAGjC,CAAC;AAEF,8HAA8H;AAC9H,eAAO,MAAM,0BAA0B,uEAGtC,CAAC;AACF,0IAA0I;AAC1I,eAAO,MAAM,gCAAgC,+DAG5C,CAAC;AAEF,0HAA0H;AAC1H,eAAO,MAAM,YAAY,uDAA4F,CAAC;AACtH,sIAAsI;AACtI,eAAO,MAAM,kBAAkB,6DAG9B,CAAC;AAEF,6GAA6G;AAC7G,eAAO,MAAM,kBAAkB,sDAAqF,CAAC;AACrH,yHAAyH;AACzH,eAAO,MAAM,wBAAwB,sDAGpC,CAAC;AAEF,6HAA6H;AAC7H,eAAO,MAAM,aAAa,yDAGzB,CAAC;AACF,yIAAyI;AACzI,eAAO,MAAM,mBAAmB,8DAG/B,CAAC;AAEF,8HAA8H;AAC9H,eAAO,MAAM,0BAA0B,uEAGtC,CAAC;AACF,0IAA0I;AAC1I,eAAO,MAAM,gCAAgC,+DAG5C,CAAC;AAEF,uHAAuH;AACvH,eAAO,MAAM,uBAAuB,gEAGnC,CAAC;AACF,mIAAmI;AACnI,eAAO,MAAM,6BAA6B,2DAGzC,CAAC;AAEF,mHAAmH;AACnH,eAAO,MAAM,qBAAqB,4DAGjC,CAAC;AACF,+HAA+H;AAC/H,eAAO,MAAM,2BAA2B,yDAGvC,CAAC","sourcesContent":["import { anthropicMessagesApi } from \"./api/anthropic-messages.lazy.ts\";\nimport type { AnthropicOptions } from \"./api/anthropic-messages.ts\";\nimport { azureOpenAIResponsesApi } from \"./api/azure-openai-responses.lazy.ts\";\nimport type { AzureOpenAIResponsesOptions } from \"./api/azure-openai-responses.ts\";\nimport { googleGenerativeAIApi } from \"./api/google-generative-ai.lazy.ts\";\nimport type { GoogleOptions } from \"./api/google-generative-ai.ts\";\nimport { googleVertexApi } from \"./api/google-vertex.lazy.ts\";\nimport type { GoogleVertexOptions } from \"./api/google-vertex.ts\";\nimport { mistralConversationsApi } from \"./api/mistral-conversations.lazy.ts\";\nimport type { MistralOptions } from \"./api/mistral-conversations.ts\";\nimport { openAICodexResponsesApi } from \"./api/openai-codex-responses.lazy.ts\";\nimport type { OpenAICodexResponsesOptions } from \"./api/openai-codex-responses.ts\";\nimport { openAICompletionsApi } from \"./api/openai-completions.lazy.ts\";\nimport type { OpenAICompletionsOptions } from \"./api/openai-completions.ts\";\nimport { openAIResponsesApi } from \"./api/openai-responses.lazy.ts\";\nimport type { OpenAIResponsesOptions } from \"./api/openai-responses.ts\";\nimport type { SimpleStreamOptions, StreamFunction } from \"./types.ts\";\n\nconst anthropicMessagesStreams = anthropicMessagesApi();\nconst azureOpenAIResponsesStreams = azureOpenAIResponsesApi();\nconst googleGenerativeAIStreams = googleGenerativeAIApi();\nconst googleVertexStreams = googleVertexApi();\nconst mistralConversationsStreams = mistralConversationsApi();\nconst openAICodexResponsesStreams = openAICodexResponsesApi();\nconst openAICompletionsStreams = openAICompletionsApi();\nconst openAIResponsesStreams = openAIResponsesApi();\n\n/** @deprecated Use `stream` from `@earendil-works/pi-ai/api/anthropic-messages` or `anthropicMessagesApi().stream`. */\nexport const streamAnthropic = anthropicMessagesStreams.stream as StreamFunction<\n\t\"anthropic-messages\",\n\tAnthropicOptions\n>;\n/** @deprecated Use `streamSimple` from `@earendil-works/pi-ai/api/anthropic-messages` or `anthropicMessagesApi().streamSimple`. */\nexport const streamSimpleAnthropic = anthropicMessagesStreams.streamSimple as StreamFunction<\n\t\"anthropic-messages\",\n\tSimpleStreamOptions\n>;\n\n/** @deprecated Use `stream` from `@earendil-works/pi-ai/api/azure-openai-responses` or `azureOpenAIResponsesApi().stream`. */\nexport const streamAzureOpenAIResponses = azureOpenAIResponsesStreams.stream as StreamFunction<\n\t\"azure-openai-responses\",\n\tAzureOpenAIResponsesOptions\n>;\n/** @deprecated Use `streamSimple` from `@earendil-works/pi-ai/api/azure-openai-responses` or `azureOpenAIResponsesApi().streamSimple`. */\nexport const streamSimpleAzureOpenAIResponses = azureOpenAIResponsesStreams.streamSimple as StreamFunction<\n\t\"azure-openai-responses\",\n\tSimpleStreamOptions\n>;\n\n/** @deprecated Use `stream` from `@earendil-works/pi-ai/api/google-generative-ai` or `googleGenerativeAIApi().stream`. */\nexport const streamGoogle = googleGenerativeAIStreams.stream as StreamFunction<\"google-generative-ai\", GoogleOptions>;\n/** @deprecated Use `streamSimple` from `@earendil-works/pi-ai/api/google-generative-ai` or `googleGenerativeAIApi().streamSimple`. */\nexport const streamSimpleGoogle = googleGenerativeAIStreams.streamSimple as StreamFunction<\n\t\"google-generative-ai\",\n\tSimpleStreamOptions\n>;\n\n/** @deprecated Use `stream` from `@earendil-works/pi-ai/api/google-vertex` or `googleVertexApi().stream`. */\nexport const streamGoogleVertex = googleVertexStreams.stream as StreamFunction<\"google-vertex\", GoogleVertexOptions>;\n/** @deprecated Use `streamSimple` from `@earendil-works/pi-ai/api/google-vertex` or `googleVertexApi().streamSimple`. */\nexport const streamSimpleGoogleVertex = googleVertexStreams.streamSimple as StreamFunction<\n\t\"google-vertex\",\n\tSimpleStreamOptions\n>;\n\n/** @deprecated Use `stream` from `@earendil-works/pi-ai/api/mistral-conversations` or `mistralConversationsApi().stream`. */\nexport const streamMistral = mistralConversationsStreams.stream as StreamFunction<\n\t\"mistral-conversations\",\n\tMistralOptions\n>;\n/** @deprecated Use `streamSimple` from `@earendil-works/pi-ai/api/mistral-conversations` or `mistralConversationsApi().streamSimple`. */\nexport const streamSimpleMistral = mistralConversationsStreams.streamSimple as StreamFunction<\n\t\"mistral-conversations\",\n\tSimpleStreamOptions\n>;\n\n/** @deprecated Use `stream` from `@earendil-works/pi-ai/api/openai-codex-responses` or `openAICodexResponsesApi().stream`. */\nexport const streamOpenAICodexResponses = openAICodexResponsesStreams.stream as StreamFunction<\n\t\"openai-codex-responses\",\n\tOpenAICodexResponsesOptions\n>;\n/** @deprecated Use `streamSimple` from `@earendil-works/pi-ai/api/openai-codex-responses` or `openAICodexResponsesApi().streamSimple`. */\nexport const streamSimpleOpenAICodexResponses = openAICodexResponsesStreams.streamSimple as StreamFunction<\n\t\"openai-codex-responses\",\n\tSimpleStreamOptions\n>;\n\n/** @deprecated Use `stream` from `@earendil-works/pi-ai/api/openai-completions` or `openAICompletionsApi().stream`. */\nexport const streamOpenAICompletions = openAICompletionsStreams.stream as StreamFunction<\n\t\"openai-completions\",\n\tOpenAICompletionsOptions\n>;\n/** @deprecated Use `streamSimple` from `@earendil-works/pi-ai/api/openai-completions` or `openAICompletionsApi().streamSimple`. */\nexport const streamSimpleOpenAICompletions = openAICompletionsStreams.streamSimple as StreamFunction<\n\t\"openai-completions\",\n\tSimpleStreamOptions\n>;\n\n/** @deprecated Use `stream` from `@earendil-works/pi-ai/api/openai-responses` or `openAIResponsesApi().stream`. */\nexport const streamOpenAIResponses = openAIResponsesStreams.stream as StreamFunction<\n\t\"openai-responses\",\n\tOpenAIResponsesOptions\n>;\n/** @deprecated Use `streamSimple` from `@earendil-works/pi-ai/api/openai-responses` or `openAIResponsesApi().streamSimple`. */\nexport const streamSimpleOpenAIResponses = openAIResponsesStreams.streamSimple as StreamFunction<\n\t\"openai-responses\",\n\tSimpleStreamOptions\n>;\n"]}
1
+ {"version":3,"file":"legacy-api-aliases.d.ts","sourceRoot":"","sources":["../src/legacy-api-aliases.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAEpE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAEnF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAEnF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AAE5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAWtE,uHAAuH;AACvH,eAAO,MAAM,eAAe,EAAsC,cAAc,CAC/E,oBAAoB,EACpB,gBAAgB,CAChB,CAAC;AACF,mIAAmI;AACnI,eAAO,MAAM,qBAAqB,EAA4C,cAAc,CAC3F,oBAAoB,EACpB,mBAAmB,CACnB,CAAC;AAEF,8HAA8H;AAC9H,eAAO,MAAM,0BAA0B,EAAyC,cAAc,CAC7F,wBAAwB,EACxB,2BAA2B,CAC3B,CAAC;AACF,0IAA0I;AAC1I,eAAO,MAAM,gCAAgC,EAA+C,cAAc,CACzG,wBAAwB,EACxB,mBAAmB,CACnB,CAAC;AAEF,0HAA0H;AAC1H,eAAO,MAAM,YAAY,EAAuC,cAAc,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAC;AACtH,sIAAsI;AACtI,eAAO,MAAM,kBAAkB,EAA6C,cAAc,CACzF,sBAAsB,EACtB,mBAAmB,CACnB,CAAC;AAEF,6GAA6G;AAC7G,eAAO,MAAM,kBAAkB,EAAiC,cAAc,CAAC,eAAe,EAAE,mBAAmB,CAAC,CAAC;AACrH,yHAAyH;AACzH,eAAO,MAAM,wBAAwB,EAAuC,cAAc,CACzF,eAAe,EACf,mBAAmB,CACnB,CAAC;AAEF,6HAA6H;AAC7H,eAAO,MAAM,aAAa,EAAyC,cAAc,CAChF,uBAAuB,EACvB,cAAc,CACd,CAAC;AACF,yIAAyI;AACzI,eAAO,MAAM,mBAAmB,EAA+C,cAAc,CAC5F,uBAAuB,EACvB,mBAAmB,CACnB,CAAC;AAEF,8HAA8H;AAC9H,eAAO,MAAM,0BAA0B,EAAyC,cAAc,CAC7F,wBAAwB,EACxB,2BAA2B,CAC3B,CAAC;AACF,0IAA0I;AAC1I,eAAO,MAAM,gCAAgC,EAA+C,cAAc,CACzG,wBAAwB,EACxB,mBAAmB,CACnB,CAAC;AAEF,uHAAuH;AACvH,eAAO,MAAM,uBAAuB,EAAsC,cAAc,CACvF,oBAAoB,EACpB,wBAAwB,CACxB,CAAC;AACF,mIAAmI;AACnI,eAAO,MAAM,6BAA6B,EAA4C,cAAc,CACnG,oBAAoB,EACpB,mBAAmB,CACnB,CAAC;AAEF,mHAAmH;AACnH,eAAO,MAAM,qBAAqB,EAAoC,cAAc,CACnF,kBAAkB,EAClB,sBAAsB,CACtB,CAAC;AACF,+HAA+H;AAC/H,eAAO,MAAM,2BAA2B,EAA0C,cAAc,CAC/F,kBAAkB,EAClB,mBAAmB,CACnB,CAAC"}
@@ -1,17 +1,33 @@
1
- import type { Api, Model, ProviderId } from "./types.ts";
1
+ import type { Api, ClassifierApi, ClassifierModel, ImageApi, ImageModel, Model, ModelType, ProviderId } from "./types.ts";
2
2
  export type ModelGroups = Record<string, Record<string, object>>;
3
- type ModelId<TGroups extends ModelGroups> = {
3
+ type ModelKey<TGroups extends ModelGroups> = {
4
4
  [TApi in keyof TGroups]: keyof TGroups[TApi];
5
5
  }[keyof TGroups] & string;
6
- type ModelApi<TGroups extends ModelGroups, TModelId extends ModelId<TGroups>> = {
7
- [TApi in keyof TGroups]: TModelId extends keyof TGroups[TApi] ? TApi : never;
8
- }[keyof TGroups] & Api;
9
- export type ModelCatalog<TGroups extends ModelGroups, TProvider extends ProviderId> = {
10
- [TModelId in ModelId<TGroups>]: Model<ModelApi<TGroups, TModelId>> & {
11
- id: TModelId;
6
+ type KeyForType<TGroups extends ModelGroups, TType extends ModelType> = Extract<ModelKey<TGroups>, `${TType}:${string}`>;
7
+ type ModelId<TKey extends string> = TKey extends `${ModelType}:${infer TModelId}` ? TModelId : never;
8
+ type ApiForKey<TGroups extends ModelGroups, TKey extends ModelKey<TGroups>> = {
9
+ [TApi in keyof TGroups]: TKey extends keyof TGroups[TApi] ? TApi : never;
10
+ }[keyof TGroups];
11
+ export type ChatModelCatalog<TGroups extends ModelGroups, TProvider extends ProviderId> = {
12
+ [TKey in KeyForType<TGroups, "chat"> as ModelId<TKey>]: Model<ApiForKey<TGroups, TKey> & Api> & {
13
+ id: ModelId<TKey>;
12
14
  provider: TProvider;
13
15
  };
14
16
  };
15
- export declare function flattenModelCatalog<const TProvider extends ProviderId, const TGroups extends ModelGroups>(_provider: TProvider, groups: TGroups): ModelCatalog<TGroups, TProvider>;
17
+ export type ImageModelCatalog<TGroups extends ModelGroups, TProvider extends ProviderId> = {
18
+ [TKey in KeyForType<TGroups, "image"> as ModelId<TKey>]: ImageModel<ApiForKey<TGroups, TKey> & ImageApi> & {
19
+ id: ModelId<TKey>;
20
+ provider: TProvider;
21
+ };
22
+ };
23
+ export type ClassifierModelCatalog<TGroups extends ModelGroups, TProvider extends ProviderId> = {
24
+ [TKey in KeyForType<TGroups, "classifier"> as ModelId<TKey>]: ClassifierModel<ApiForKey<TGroups, TKey> & ClassifierApi> & {
25
+ id: ModelId<TKey>;
26
+ provider: TProvider;
27
+ };
28
+ };
29
+ export declare function flattenChatModelCatalog<const TProvider extends ProviderId, const TGroups extends ModelGroups>(_provider: TProvider, groups: TGroups): ChatModelCatalog<TGroups, TProvider>;
30
+ export declare function flattenImageModelCatalog<const TProvider extends ProviderId, const TGroups extends ModelGroups>(_provider: TProvider, groups: TGroups): ImageModelCatalog<TGroups, TProvider>;
31
+ export declare function flattenClassifierModelCatalog<const TProvider extends ProviderId, const TGroups extends ModelGroups>(_provider: TProvider, groups: TGroups): ClassifierModelCatalog<TGroups, TProvider>;
16
32
  export {};
17
33
  //# sourceMappingURL=model-catalog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-catalog.d.ts","sourceRoot":"","sources":["../src/model-catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEzD,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAEjE,KAAK,OAAO,CAAC,OAAO,SAAS,WAAW,IAAI;KAC1C,IAAI,IAAI,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;CAC5C,CAAC,MAAM,OAAO,CAAC,GACf,MAAM,CAAC;AAER,KAAK,QAAQ,CAAC,OAAO,SAAS,WAAW,EAAE,QAAQ,SAAS,OAAO,CAAC,OAAO,CAAC,IAAI;KAC9E,IAAI,IAAI,MAAM,OAAO,GAAG,QAAQ,SAAS,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK;CAC5E,CAAC,MAAM,OAAO,CAAC,GACf,GAAG,CAAC;AAEL,MAAM,MAAM,YAAY,CAAC,OAAO,SAAS,WAAW,EAAE,SAAS,SAAS,UAAU,IAAI;KACpF,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,GAAG;QACpE,EAAE,EAAE,QAAQ,CAAC;QACb,QAAQ,EAAE,SAAS,CAAC;KACpB;CACD,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,SAAS,SAAS,UAAU,EAAE,KAAK,CAAC,OAAO,SAAS,WAAW,EACxG,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,OAAO,GACb,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAElC","sourcesContent":["import type { Api, Model, ProviderId } from \"./types.ts\";\n\nexport type ModelGroups = Record<string, Record<string, object>>;\n\ntype ModelId<TGroups extends ModelGroups> = {\n\t[TApi in keyof TGroups]: keyof TGroups[TApi];\n}[keyof TGroups] &\n\tstring;\n\ntype ModelApi<TGroups extends ModelGroups, TModelId extends ModelId<TGroups>> = {\n\t[TApi in keyof TGroups]: TModelId extends keyof TGroups[TApi] ? TApi : never;\n}[keyof TGroups] &\n\tApi;\n\nexport type ModelCatalog<TGroups extends ModelGroups, TProvider extends ProviderId> = {\n\t[TModelId in ModelId<TGroups>]: Model<ModelApi<TGroups, TModelId>> & {\n\t\tid: TModelId;\n\t\tprovider: TProvider;\n\t};\n};\n\nexport function flattenModelCatalog<const TProvider extends ProviderId, const TGroups extends ModelGroups>(\n\t_provider: TProvider,\n\tgroups: TGroups,\n): ModelCatalog<TGroups, TProvider> {\n\treturn Object.assign({}, ...Object.values(groups)) as ModelCatalog<TGroups, TProvider>;\n}\n"]}
1
+ {"version":3,"file":"model-catalog.d.ts","sourceRoot":"","sources":["../src/model-catalog.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,16 @@
1
- export function flattenModelCatalog(_provider, groups) {
2
- return Object.assign({}, ...Object.values(groups));
1
+ function flattenModelCatalog(groups, type) {
2
+ return Object.fromEntries(Object.values(groups)
3
+ .flatMap((models) => Object.values(models))
4
+ .filter((model) => model.type === type)
5
+ .map((model) => [model.id, model]));
6
+ }
7
+ export function flattenChatModelCatalog(_provider, groups) {
8
+ return flattenModelCatalog(groups, "chat");
9
+ }
10
+ export function flattenImageModelCatalog(_provider, groups) {
11
+ return flattenModelCatalog(groups, "image");
12
+ }
13
+ export function flattenClassifierModelCatalog(_provider, groups) {
14
+ return flattenModelCatalog(groups, "classifier");
3
15
  }
4
16
  //# sourceMappingURL=model-catalog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-catalog.js","sourceRoot":"","sources":["../src/model-catalog.ts"],"names":[],"mappings":"AAqBA,MAAM,UAAU,mBAAmB,CAClC,SAAoB,EACpB,MAAe,EACoB;IACnC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAqC,CAAC;AAAA,CACvF","sourcesContent":["import type { Api, Model, ProviderId } from \"./types.ts\";\n\nexport type ModelGroups = Record<string, Record<string, object>>;\n\ntype ModelId<TGroups extends ModelGroups> = {\n\t[TApi in keyof TGroups]: keyof TGroups[TApi];\n}[keyof TGroups] &\n\tstring;\n\ntype ModelApi<TGroups extends ModelGroups, TModelId extends ModelId<TGroups>> = {\n\t[TApi in keyof TGroups]: TModelId extends keyof TGroups[TApi] ? TApi : never;\n}[keyof TGroups] &\n\tApi;\n\nexport type ModelCatalog<TGroups extends ModelGroups, TProvider extends ProviderId> = {\n\t[TModelId in ModelId<TGroups>]: Model<ModelApi<TGroups, TModelId>> & {\n\t\tid: TModelId;\n\t\tprovider: TProvider;\n\t};\n};\n\nexport function flattenModelCatalog<const TProvider extends ProviderId, const TGroups extends ModelGroups>(\n\t_provider: TProvider,\n\tgroups: TGroups,\n): ModelCatalog<TGroups, TProvider> {\n\treturn Object.assign({}, ...Object.values(groups)) as ModelCatalog<TGroups, TProvider>;\n}\n"]}
1
+ {"version":3,"file":"model-catalog.js","sourceRoot":"","sources":["../src/model-catalog.ts"],"names":[],"mappings":"AAoDA,SAAS,mBAAmB,CAAC,MAAmB,EAAE,IAAe;IAChE,OAAO,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;SACnB,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAC1C,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAE,KAA4B,CAAC,IAAI,KAAK,IAAI,CAAC;SAC9D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAE,KAAwB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CACvD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CACtC,SAAoB,EACpB,MAAe;IAEf,OAAO,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAyC,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,wBAAwB,CACvC,SAAoB,EACpB,MAAe;IAEf,OAAO,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAA0C,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC5C,SAAoB,EACpB,MAAe;IAEf,OAAO,mBAAmB,CAAC,MAAM,EAAE,YAAY,CAA+C,CAAC;AAChG,CAAC","sourcesContent":["import type {\n\tApi,\n\tClassifierApi,\n\tClassifierModel,\n\tImageApi,\n\tImageModel,\n\tModel,\n\tModelType,\n\tProviderId,\n} from \"./types.ts\";\n\nexport type ModelGroups = Record<string, Record<string, object>>;\n\ntype ModelKey<TGroups extends ModelGroups> = {\n\t[TApi in keyof TGroups]: keyof TGroups[TApi];\n}[keyof TGroups] &\n\tstring;\n\ntype KeyForType<TGroups extends ModelGroups, TType extends ModelType> = Extract<\n\tModelKey<TGroups>,\n\t`${TType}:${string}`\n>;\n\ntype ModelId<TKey extends string> = TKey extends `${ModelType}:${infer TModelId}` ? TModelId : never;\n\ntype ApiForKey<TGroups extends ModelGroups, TKey extends ModelKey<TGroups>> = {\n\t[TApi in keyof TGroups]: TKey extends keyof TGroups[TApi] ? TApi : never;\n}[keyof TGroups];\n\nexport type ChatModelCatalog<TGroups extends ModelGroups, TProvider extends ProviderId> = {\n\t[TKey in KeyForType<TGroups, \"chat\"> as ModelId<TKey>]: Model<ApiForKey<TGroups, TKey> & Api> & {\n\t\tid: ModelId<TKey>;\n\t\tprovider: TProvider;\n\t};\n};\n\nexport type ImageModelCatalog<TGroups extends ModelGroups, TProvider extends ProviderId> = {\n\t[TKey in KeyForType<TGroups, \"image\"> as ModelId<TKey>]: ImageModel<ApiForKey<TGroups, TKey> & ImageApi> & {\n\t\tid: ModelId<TKey>;\n\t\tprovider: TProvider;\n\t};\n};\n\nexport type ClassifierModelCatalog<TGroups extends ModelGroups, TProvider extends ProviderId> = {\n\t[TKey in KeyForType<TGroups, \"classifier\"> as ModelId<TKey>]: ClassifierModel<\n\t\tApiForKey<TGroups, TKey> & ClassifierApi\n\t> & {\n\t\tid: ModelId<TKey>;\n\t\tprovider: TProvider;\n\t};\n};\n\nfunction flattenModelCatalog(groups: ModelGroups, type: ModelType): Record<string, object> {\n\treturn Object.fromEntries(\n\t\tObject.values(groups)\n\t\t\t.flatMap((models) => Object.values(models))\n\t\t\t.filter((model) => (model as { type?: unknown }).type === type)\n\t\t\t.map((model) => [(model as { id: string }).id, model]),\n\t);\n}\n\nexport function flattenChatModelCatalog<const TProvider extends ProviderId, const TGroups extends ModelGroups>(\n\t_provider: TProvider,\n\tgroups: TGroups,\n): ChatModelCatalog<TGroups, TProvider> {\n\treturn flattenModelCatalog(groups, \"chat\") as ChatModelCatalog<TGroups, TProvider>;\n}\n\nexport function flattenImageModelCatalog<const TProvider extends ProviderId, const TGroups extends ModelGroups>(\n\t_provider: TProvider,\n\tgroups: TGroups,\n): ImageModelCatalog<TGroups, TProvider> {\n\treturn flattenModelCatalog(groups, \"image\") as ImageModelCatalog<TGroups, TProvider>;\n}\n\nexport function flattenClassifierModelCatalog<const TProvider extends ProviderId, const TGroups extends ModelGroups>(\n\t_provider: TProvider,\n\tgroups: TGroups,\n): ClassifierModelCatalog<TGroups, TProvider> {\n\treturn flattenModelCatalog(groups, \"classifier\") as ClassifierModelCatalog<TGroups, TProvider>;\n}\n"]}
@@ -1,6 +1,7 @@
1
- import type { Api, Model } from "./types.ts";
1
+ import type { AnyModel } from "./types.ts";
2
2
  export interface ModelsStoreEntry {
3
- models: readonly Model<Api>[];
3
+ /** Persisted models of every type. */
4
+ models: readonly AnyModel[];
4
5
  /** Unix timestamp from the remote catalog's Last-Modified header. */
5
6
  lastModified?: number;
6
7
  /** Unix timestamp of the last completed remote check. */
@@ -1 +1 @@
1
- {"version":3,"file":"models-store.d.ts","sourceRoot":"","sources":["../src/models-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,SAAS,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9B,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,2BAA2B;IAC3C,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,sDAAsD;AACtD,MAAM,WAAW,WAAW;IAC3B,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IACvG,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzG,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjF;AAED,qBAAa,mBAAoB,YAAW,WAAW;IACtD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAEzD,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAI3G;IAEK,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7G;IAEK,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAGrF;CACD","sourcesContent":["import type { Api, Model } from \"./types.ts\";\n\nexport interface ModelsStoreEntry {\n\tmodels: readonly Model<Api>[];\n\t/** Unix timestamp from the remote catalog's Last-Modified header. */\n\tlastModified?: number;\n\t/** Unix timestamp of the last completed remote check. */\n\tcheckedAt?: number;\n\t/**\n\t * Opaque validator from the remote catalog's ETag header, stored verbatim\n\t * (quotes included) and echoed back as If-None-Match.\n\t */\n\tetag?: string;\n}\n\nexport interface ModelsStoreOperationOptions {\n\tsignal?: AbortSignal;\n}\n\n/** Persistent model catalogs keyed by provider ID. */\nexport interface ModelsStore {\n\tread(providerId: string, options?: ModelsStoreOperationOptions): Promise<ModelsStoreEntry | undefined>;\n\twrite(providerId: string, entry: ModelsStoreEntry, options?: ModelsStoreOperationOptions): Promise<void>;\n\tdelete(providerId: string, options?: ModelsStoreOperationOptions): Promise<void>;\n}\n\nexport class InMemoryModelsStore implements ModelsStore {\n\tprivate readonly entries = new Map<string, ModelsStoreEntry>();\n\n\tasync read(providerId: string, options?: ModelsStoreOperationOptions): Promise<ModelsStoreEntry | undefined> {\n\t\toptions?.signal?.throwIfAborted();\n\t\tconst entry = this.entries.get(providerId);\n\t\treturn entry ? structuredClone(entry) : undefined;\n\t}\n\n\tasync write(providerId: string, entry: ModelsStoreEntry, options?: ModelsStoreOperationOptions): Promise<void> {\n\t\toptions?.signal?.throwIfAborted();\n\t\tthis.entries.set(providerId, structuredClone(entry));\n\t}\n\n\tasync delete(providerId: string, options?: ModelsStoreOperationOptions): Promise<void> {\n\t\toptions?.signal?.throwIfAborted();\n\t\tthis.entries.delete(providerId);\n\t}\n}\n"]}
1
+ {"version":3,"file":"models-store.d.ts","sourceRoot":"","sources":["../src/models-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,gBAAgB;IAChC,sCAAsC;IACtC,MAAM,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC5B,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,2BAA2B;IAC3C,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,sDAAsD;AACtD,MAAM,WAAW,WAAW;IAC3B,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;IACvG,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzG,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjF;AAED,qBAAa,mBAAoB,YAAW,WAAW;IACtD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAEzD,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAI3G;IAEK,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7G;IAEK,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,2BAA2B,GAAG,OAAO,CAAC,IAAI,CAAC,CAGrF;CACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"models-store.js","sourceRoot":"","sources":["../src/models-store.ts"],"names":[],"mappings":"AA0BA,MAAM,OAAO,mBAAmB;IACd,OAAO,GAAG,IAAI,GAAG,EAA4B,CAAC;IAE/D,KAAK,CAAC,IAAI,CAAC,UAAkB,EAAE,OAAqC,EAAyC;QAC5G,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAAA,CAClD;IAED,KAAK,CAAC,KAAK,CAAC,UAAkB,EAAE,KAAuB,EAAE,OAAqC,EAAiB;QAC9G,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;IAAA,CACrD;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,OAAqC,EAAiB;QACtF,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAAA,CAChC;CACD","sourcesContent":["import type { Api, Model } from \"./types.ts\";\n\nexport interface ModelsStoreEntry {\n\tmodels: readonly Model<Api>[];\n\t/** Unix timestamp from the remote catalog's Last-Modified header. */\n\tlastModified?: number;\n\t/** Unix timestamp of the last completed remote check. */\n\tcheckedAt?: number;\n\t/**\n\t * Opaque validator from the remote catalog's ETag header, stored verbatim\n\t * (quotes included) and echoed back as If-None-Match.\n\t */\n\tetag?: string;\n}\n\nexport interface ModelsStoreOperationOptions {\n\tsignal?: AbortSignal;\n}\n\n/** Persistent model catalogs keyed by provider ID. */\nexport interface ModelsStore {\n\tread(providerId: string, options?: ModelsStoreOperationOptions): Promise<ModelsStoreEntry | undefined>;\n\twrite(providerId: string, entry: ModelsStoreEntry, options?: ModelsStoreOperationOptions): Promise<void>;\n\tdelete(providerId: string, options?: ModelsStoreOperationOptions): Promise<void>;\n}\n\nexport class InMemoryModelsStore implements ModelsStore {\n\tprivate readonly entries = new Map<string, ModelsStoreEntry>();\n\n\tasync read(providerId: string, options?: ModelsStoreOperationOptions): Promise<ModelsStoreEntry | undefined> {\n\t\toptions?.signal?.throwIfAborted();\n\t\tconst entry = this.entries.get(providerId);\n\t\treturn entry ? structuredClone(entry) : undefined;\n\t}\n\n\tasync write(providerId: string, entry: ModelsStoreEntry, options?: ModelsStoreOperationOptions): Promise<void> {\n\t\toptions?.signal?.throwIfAborted();\n\t\tthis.entries.set(providerId, structuredClone(entry));\n\t}\n\n\tasync delete(providerId: string, options?: ModelsStoreOperationOptions): Promise<void> {\n\t\toptions?.signal?.throwIfAborted();\n\t\tthis.entries.delete(providerId);\n\t}\n}\n"]}
1
+ {"version":3,"file":"models-store.js","sourceRoot":"","sources":["../src/models-store.ts"],"names":[],"mappings":"AA2BA,MAAM,OAAO,mBAAmB;IACd,OAAO,GAAG,IAAI,GAAG,EAA4B,CAAC;IAE/D,KAAK,CAAC,IAAI,CAAC,UAAkB,EAAE,OAAqC;QACnE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC3C,OAAO,KAAK,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,UAAkB,EAAE,KAAuB,EAAE,OAAqC;QAC7F,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,UAAkB,EAAE,OAAqC;QACrE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;CACD","sourcesContent":["import type { AnyModel } from \"./types.ts\";\n\nexport interface ModelsStoreEntry {\n\t/** Persisted models of every type. */\n\tmodels: readonly AnyModel[];\n\t/** Unix timestamp from the remote catalog's Last-Modified header. */\n\tlastModified?: number;\n\t/** Unix timestamp of the last completed remote check. */\n\tcheckedAt?: number;\n\t/**\n\t * Opaque validator from the remote catalog's ETag header, stored verbatim\n\t * (quotes included) and echoed back as If-None-Match.\n\t */\n\tetag?: string;\n}\n\nexport interface ModelsStoreOperationOptions {\n\tsignal?: AbortSignal;\n}\n\n/** Persistent model catalogs keyed by provider ID. */\nexport interface ModelsStore {\n\tread(providerId: string, options?: ModelsStoreOperationOptions): Promise<ModelsStoreEntry | undefined>;\n\twrite(providerId: string, entry: ModelsStoreEntry, options?: ModelsStoreOperationOptions): Promise<void>;\n\tdelete(providerId: string, options?: ModelsStoreOperationOptions): Promise<void>;\n}\n\nexport class InMemoryModelsStore implements ModelsStore {\n\tprivate readonly entries = new Map<string, ModelsStoreEntry>();\n\n\tasync read(providerId: string, options?: ModelsStoreOperationOptions): Promise<ModelsStoreEntry | undefined> {\n\t\toptions?.signal?.throwIfAborted();\n\t\tconst entry = this.entries.get(providerId);\n\t\treturn entry ? structuredClone(entry) : undefined;\n\t}\n\n\tasync write(providerId: string, entry: ModelsStoreEntry, options?: ModelsStoreOperationOptions): Promise<void> {\n\t\toptions?.signal?.throwIfAborted();\n\t\tthis.entries.set(providerId, structuredClone(entry));\n\t}\n\n\tasync delete(providerId: string, options?: ModelsStoreOperationOptions): Promise<void> {\n\t\toptions?.signal?.throwIfAborted();\n\t\tthis.entries.delete(providerId);\n\t}\n}\n"]}
package/dist/models.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import { type AuthResolutionOverrides } from "./auth/resolve.ts";
2
- import type { AuthCheck, AuthContext, AuthInteraction, AuthOperationOptions, AuthResult, AuthType, Credential, CredentialStore, ProviderAuth } from "./auth/types.ts";
2
+ import type { AuthCheck, AuthContext, AuthInteraction, AuthOperationOptions, AuthResult, AuthType, Credential, CredentialStore, LoginOptions, ProviderAuth } from "./auth/types.ts";
3
3
  import { type ModelsStore, type ModelsStoreEntry } from "./models-store.ts";
4
- import type { Api, ApiStreamOptions, AssistantMessage, AssistantMessageEventStream, Context, DeferredCancelOptions, DeferredFetchOptions, DeferredHandle, Model, ModelThinkingLevel, ProviderHeaders, ProviderStreams, SimpleStreamOptions, TranscriptContext, Usage } from "./types.ts";
4
+ import type { AnyModel, Api, ApiStreamOptions, AssistantImages, AssistantMessage, AssistantMessageEventStream, ClassifierApi, ClassifierContext, ClassifierModel, ClassifierOptions, ClassifierResult, Context, DeferredCancelOptions, DeferredFetchOptions, DeferredHandle, ImageApi, ImageModel, ImagesContext, ImagesOptions, Model, ModelThinkingLevel, ModelType, ModelTypeMap, ProviderClassifier, ProviderHeaders, ProviderImages, ProviderStreams, SimpleStreamOptions, TranscriptContext, Usage } from "./types.ts";
5
5
  export { ModelsError, type ModelsErrorCode } from "./auth/resolve.ts";
6
+ export { getModelType, isModelType } from "./utils/model-operations.ts";
6
7
  export interface ModelsPublication {
7
8
  /** Provider-selected persisted catalog. Omit to leave storage unchanged; null deletes it. */
8
9
  persist?: ModelsStoreEntry | null;
@@ -46,14 +47,20 @@ export type ModelsApiStreamOptions<TApi extends Api> = ApiStreamOptions<TApi> &
46
47
  export type ModelsSimpleStreamOptions = SimpleStreamOptions & ModelsRequestTransforms;
47
48
  export type ModelsDeferredFetchOptions = DeferredFetchOptions & ModelsRequestTransforms;
48
49
  export type ModelsDeferredCancelOptions = DeferredCancelOptions & ModelsRequestTransforms;
50
+ export type ModelsImagesOptions = ImagesOptions & ModelsRequestTransforms;
51
+ export type ModelsClassifierOptions = ClassifierOptions & ModelsRequestTransforms;
52
+ /** Any model a provider with chat APIs `TApi` can list. */
53
+ type ProviderModel<TApi extends Api> = Model<TApi> | ImageModel<ImageApi> | ClassifierModel<ClassifierApi>;
49
54
  /**
50
55
  * A provider is the concrete runtime unit. It owns id/name/base metadata,
51
- * auth methods, model listing, and stream behavior.
56
+ * auth methods, model listing, and the operations its models support
57
+ * (streaming, image generation, classification).
52
58
  *
53
- * `TApi` lets concrete provider factories declare which APIs their models
59
+ * `TApi` lets concrete provider factories declare which chat APIs their models
54
60
  * use (e.g. `openaiProvider(): Provider<"openai-responses" | "openai-completions">`),
55
- * giving typed model lists to direct factory users. Inside a `Models`
56
- * collection providers are held as `Provider<Api>`.
61
+ * giving typed chat model lists to direct factory users. Other model types use
62
+ * their operation-specific API unions. Inside a `Models` collection providers
63
+ * are held as `Provider<Api>`.
57
64
  */
58
65
  export interface Provider<TApi extends Api = Api> {
59
66
  readonly id: string;
@@ -69,12 +76,19 @@ export interface Provider<TApi extends Api = Api> {
69
76
  */
70
77
  readonly auth: ProviderAuth;
71
78
  /**
72
- * Current known models, sync. Static providers return their catalog;
73
- * dynamic providers return the list as of the last `refreshModels()`
74
- * (empty before the first). Must not throw; `Models` treats a throwing
79
+ * Current known chat models, sync. Static providers return their catalog;
80
+ * dynamic providers return the list as of the last `refreshModels()` (empty
81
+ * before the first). Must not throw; `Models` treats a throwing
75
82
  * implementation as having no models.
76
83
  */
77
84
  getModels(): readonly Model<TApi>[];
85
+ /**
86
+ * Current known models of every type, sync, with the same contract as
87
+ * `getModels()`. Providers with only chat models may omit it; `Models` then
88
+ * uses `getModels()`. Model ids are unique within each type; one upstream
89
+ * model may have separate entries for different operations.
90
+ */
91
+ getAllModels?(): readonly ProviderModel<TApi>[];
78
92
  /**
79
93
  * Dynamic providers only: restore `context.stored` and optionally fetch a newer list using
80
94
  * the effective credential. Implementations retain their previous list on failure, publish
@@ -84,34 +98,54 @@ export interface Provider<TApi extends Api = Api> {
84
98
  refreshModels?(context: RefreshModelsContext): Promise<void>;
85
99
  /**
86
100
  * Optional provider policy for credential-specific model availability.
87
- * `getModels()` remains the complete synchronous catalog; `Models.getAvailable()`
101
+ * `getModels()` remains the complete synchronous chat catalog; `Models.getAvailable()`
88
102
  * applies this filter after confirming that provider auth is configured.
89
103
  */
90
104
  filterModels?(models: readonly Model<TApi>[], credential: Credential | undefined): readonly Model<TApi>[];
105
+ /**
106
+ * Optional credential-specific availability policy across every model type.
107
+ * Without it, `Models.getAllAvailable()` applies `filterModels` to chat models
108
+ * and keeps every other model.
109
+ */
110
+ filterAllModels?(models: readonly ProviderModel<TApi>[], credential: Credential | undefined): readonly ProviderModel<TApi>[];
91
111
  /** Stream a normalized transcript. `Models` normalizes the caller's `Context` before dispatching here. */
92
112
  stream<T extends TApi>(model: Model<T>, context: TranscriptContext, options?: ApiStreamOptions<T>): AssistantMessageEventStream;
93
113
  streamSimple(model: Model<TApi>, context: TranscriptContext, options?: SimpleStreamOptions): AssistantMessageEventStream;
94
114
  fetchDeferred?(model: Model<TApi>, handle: DeferredHandle, options?: DeferredFetchOptions): AssistantMessageEventStream;
95
115
  cancelDeferred?(model: Model<TApi>, handle: DeferredHandle, options?: DeferredCancelOptions): Promise<void>;
116
+ /** Present when the provider supports dedicated image models. Never rejects. */
117
+ generateImages?(model: ImageModel<ImageApi>, context: ImagesContext, options?: ImagesOptions): Promise<AssistantImages>;
118
+ /** Present when the provider supports structured classifier models. Never rejects. */
119
+ classify?(model: ClassifierModel<ClassifierApi>, context: ClassifierContext, options?: ClassifierOptions): Promise<ClassifierResult>;
96
120
  }
97
121
  /**
98
- * Runtime collection of providers plus auth application and stream
99
- * convenience. Providers own stream behavior; `Models` resolves auth and
122
+ * Runtime collection of providers plus auth application and request
123
+ * convenience. Providers own request behavior; `Models` resolves auth and
100
124
  * delegates each request to the provider that owns the model.
125
+ *
126
+ * Read accessors come in three flavors: the unqualified ones (`getModels`,
127
+ * `getModel`, `getAvailable`) return chat models, the `*OfType` accessors
128
+ * return one model type, and `getAllModels`/`getAllAvailable` return every type.
101
129
  */
102
130
  export interface Models {
103
131
  getProviders(): readonly Provider[];
104
132
  getProvider(id: string): Provider | undefined;
105
133
  /**
106
- * Sync read of last-known models from one provider or all providers.
134
+ * Sync read of last-known chat models from one provider or all providers.
107
135
  * Best-effort: a provider whose `getModels()` throws yields no models.
108
136
  */
109
137
  getModels(provider?: string): readonly Model<Api>[];
110
138
  /**
111
- * Sync runtime model lookup against last-known lists. Dynamic model lists
139
+ * Sync runtime chat model lookup against last-known lists. Dynamic model lists
112
140
  * are typed as `Model<Api>`; narrow with the `hasApi()` type guard.
113
141
  */
114
142
  getModel(provider: string, id: string): Model<Api> | undefined;
143
+ /** Sync read of last-known models of one type from one provider or all providers. */
144
+ getModelsOfType<TType extends ModelType>(type: TType, provider?: string): readonly ModelTypeMap[TType][];
145
+ /** Sync runtime lookup of a model of one type against last-known lists. */
146
+ getModelOfType<TType extends ModelType>(type: TType, provider: string, id: string): ModelTypeMap[TType] | undefined;
147
+ /** Sync read of last-known models of every type from one provider or all providers. */
148
+ getAllModels(provider?: string): readonly AnyModel[];
115
149
  /**
116
150
  * Refresh selected configured dynamic providers concurrently (all when `providers` is omitted).
117
151
  * Provider errors and cancellation are returned without rejecting; static, unknown, and
@@ -120,8 +154,12 @@ export interface Models {
120
154
  refresh(options?: ModelsRefreshOptions): Promise<ModelsRefreshResult>;
121
155
  /** Check whether a provider has complete auth configuration without refreshing OAuth. */
122
156
  checkAuth(providerId: string, options?: AuthOperationOptions): Promise<AuthCheck | undefined>;
123
- /** Return models whose providers have complete auth configuration. */
157
+ /** Return chat models whose providers have complete auth configuration. */
124
158
  getAvailable(providerId?: string, options?: AuthOperationOptions): Promise<readonly Model<Api>[]>;
159
+ /** Return models of one type whose providers have complete auth configuration. */
160
+ getAvailableOfType<TType extends ModelType>(type: TType, providerId?: string, options?: AuthOperationOptions): Promise<readonly ModelTypeMap[TType][]>;
161
+ /** Return models of every type whose providers have complete auth configuration. */
162
+ getAllAvailable(providerId?: string, options?: AuthOperationOptions): Promise<readonly AnyModel[]>;
125
163
  /**
126
164
  * Resolve provider-scoped auth by provider id, or provider auth plus static
127
165
  * model headers when passed a model. Includes a source label for status UI.
@@ -132,9 +170,9 @@ export interface Models {
132
170
  * surface rejections as stream errors.
133
171
  */
134
172
  getAuth(providerId: string, overrides?: AuthResolutionOverrides): Promise<AuthResult | undefined>;
135
- getAuth(model: Model<Api>, overrides?: AuthResolutionOverrides): Promise<AuthResult | undefined>;
173
+ getAuth(model: AnyModel, overrides?: AuthResolutionOverrides): Promise<AuthResult | undefined>;
136
174
  /** Run a provider-owned login flow and persist its returned credential. */
137
- login(providerId: string, type: AuthType, interaction: AuthInteraction): Promise<Credential>;
175
+ login(providerId: string, type: AuthType, interaction: AuthInteraction, options?: LoginOptions): Promise<Credential>;
138
176
  /** Remove the stored credential for a provider. */
139
177
  logout(providerId: string, options?: AuthOperationOptions): Promise<void>;
140
178
  stream<TApi extends Api>(model: Model<TApi>, context: Context, options?: ModelsApiStreamOptions<TApi>): AssistantMessageEventStream;
@@ -144,6 +182,14 @@ export interface Models {
144
182
  streamDeferred(model: Model<Api>, handle: DeferredHandle, options?: ModelsDeferredFetchOptions): AssistantMessageEventStream;
145
183
  fetchDeferred(model: Model<Api>, handle: DeferredHandle, options?: ModelsDeferredFetchOptions): Promise<AssistantMessage>;
146
184
  cancelDeferred(model: Model<Api>, handle: DeferredHandle, options?: ModelsDeferredCancelOptions): Promise<void>;
185
+ /**
186
+ * Generate images through the owning provider with auth resolved like
187
+ * `stream()`. Never rejects: unknown providers, unconfigured auth, and
188
+ * providers without `generateImages` return an error `AssistantImages`.
189
+ */
190
+ generateImages(model: ImageModel<ImageApi>, context: ImagesContext, options?: ModelsImagesOptions): Promise<AssistantImages>;
191
+ /** Classify structured state through the owning provider. Never rejects. */
192
+ classify(model: ClassifierModel<ClassifierApi>, context: ClassifierContext, options?: ModelsClassifierOptions): Promise<ClassifierResult>;
147
193
  }
148
194
  export interface MutableModels extends Models {
149
195
  /** Upsert/replace by provider.id. Provider ids are unique. */
@@ -165,19 +211,38 @@ export interface CreateProviderOptions<TApi extends Api = Api> {
165
211
  headers?: ProviderHeaders;
166
212
  /** Required — every provider has auth semantics, even ambient/keyless ones. */
167
213
  auth: ProviderAuth;
168
- /** Static baseline model list (empty for purely dynamic providers). */
169
- models: readonly Model<TApi>[];
170
- /** Fetch a dynamic model overlay. createProvider restores and publishes it transactionally. */
171
- fetchModels?: (context: RefreshModelsContext) => Promise<readonly Model<TApi>[]>;
214
+ /**
215
+ * Static baseline models of every type (empty for purely dynamic providers).
216
+ * Models without `type` are chat models.
217
+ */
218
+ models: readonly ProviderModel<TApi>[];
219
+ /**
220
+ * Fetch a dynamic model overlay of every type. createProvider restores and
221
+ * publishes it transactionally and drops models of unknown types.
222
+ */
223
+ fetchModels?: (context: RefreshModelsContext) => Promise<readonly ProviderModel<TApi>[]>;
224
+ /** Credential-specific chat model availability. See `Provider.filterModels`. */
172
225
  filterModels?: (models: readonly Model<TApi>[], credential: Credential | undefined) => readonly Model<TApi>[];
173
- /** Single implementation, or map keyed by `model.api` for mixed-API providers. */
174
- api: ProviderStreams | Partial<Record<TApi, ProviderStreams>>;
226
+ /** Credential-specific availability across every model type. See `Provider.filterAllModels`. */
227
+ filterAllModels?: (models: readonly ProviderModel<TApi>[], credential: Credential | undefined) => readonly ProviderModel<TApi>[];
228
+ /**
229
+ * Chat implementation: a single one for all chat models, or a map keyed by
230
+ * `model.api` for mixed-API providers. Optional when `images` or
231
+ * `classifiers` is given.
232
+ */
233
+ api?: ProviderStreams | Partial<Record<TApi, ProviderStreams>>;
234
+ /** Image-generation implementations keyed by `model.api`. */
235
+ images?: Partial<Record<ImageApi, ProviderImages>>;
236
+ /** Classifier implementations keyed by `model.api`. */
237
+ classifiers?: Partial<Record<ClassifierApi, ProviderClassifier>>;
175
238
  }
176
239
  /**
177
240
  * Builds a provider from parts. Built-in provider factories and models.json
178
- * custom providers both go through this. A single `api` streams all models;
179
- * an `api` map dispatches on `model.api`, and a model whose api has no entry
180
- * produces a stream error.
241
+ * custom providers both go through this. A single `api` streams all chat
242
+ * models; an `api` map dispatches on `model.api`, and a model whose api has
243
+ * no entry produces a stream error. One-shot operation maps dispatch on
244
+ * `model.api` the same way. At least one concrete implementation across
245
+ * `api`/`images`/`classifiers` is required; empty maps are rejected.
181
246
  */
182
247
  export declare function createProvider<TApi extends Api = Api>(input: CreateProviderOptions<TApi>): Provider<TApi>;
183
248
  /**
@@ -189,14 +254,16 @@ export declare function createProvider<TApi extends Api = Api>(input: CreateProv
189
254
  * // model: Model<"anthropic-messages">, stream options fully typed
190
255
  * }
191
256
  * ```
257
+ *
258
+ * Non-chat models never match, even when their api id equals `api`.
192
259
  */
193
- export declare function hasApi<TApi extends Api>(model: Model<Api>, api: TApi): model is Model<TApi>;
194
- export declare function calculateCost<TApi extends Api>(model: Model<TApi>, usage: Usage): Usage["cost"];
260
+ export declare function hasApi<TApi extends Api>(model: AnyModel, api: TApi): model is Model<TApi>;
261
+ export declare function calculateCost(model: AnyModel, usage: Usage): Usage["cost"];
195
262
  export declare function getSupportedThinkingLevels<TApi extends Api>(model: Model<TApi>): ModelThinkingLevel[];
196
263
  export declare function clampThinkingLevel<TApi extends Api>(model: Model<TApi>, level: ModelThinkingLevel): ModelThinkingLevel;
197
264
  /**
198
- * Check if two models are equal by comparing both their id and provider.
265
+ * Check if two models are equal by comparing their type, id, and provider.
199
266
  * Returns false if either model is null or undefined.
200
267
  */
201
- export declare function modelsAreEqual<TApi extends Api>(a: Model<TApi> | null | undefined, b: Model<TApi> | null | undefined): boolean;
268
+ export declare function modelsAreEqual(a: AnyModel | null | undefined, b: AnyModel | null | undefined): boolean;
202
269
  //# sourceMappingURL=models.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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","sourcesContent":["import { lazyStream } from \"./api/lazy.ts\";\nimport { defaultProviderAuthContext as defaultAuthContext } from \"./auth/context.ts\";\nimport { InMemoryCredentialStore } from \"./auth/credential-store.ts\";\nimport { type AuthResolutionOverrides, ModelsError, resolveProviderAuth } from \"./auth/resolve.ts\";\nimport type {\n\tAuthCheck,\n\tAuthContext,\n\tAuthInteraction,\n\tAuthOperationOptions,\n\tAuthResult,\n\tAuthType,\n\tCredential,\n\tCredentialStore,\n\tProviderAuth,\n} from \"./auth/types.ts\";\nimport { InMemoryModelsStore, type ModelsStore, type ModelsStoreEntry } from \"./models-store.ts\";\nimport type {\n\tApi,\n\tApiStreamOptions,\n\tAssistantMessage,\n\tAssistantMessageEventStream,\n\tContext,\n\tDeferredCancelOptions,\n\tDeferredFetchOptions,\n\tDeferredHandle,\n\tModel,\n\tModelCostRates,\n\tModelThinkingLevel,\n\tProviderHeaders,\n\tProviderRequestOptions,\n\tProviderStreams,\n\tSimpleStreamOptions,\n\tTranscriptContext,\n\tUsage,\n} from \"./types.ts\";\nimport { operationSignal, raceWithAbortSignal } from \"./utils/abort.ts\";\nimport { normalizeContext } from \"./utils/transcript.ts\";\n\nexport { ModelsError, type ModelsErrorCode } from \"./auth/resolve.ts\";\n\nexport interface ModelsPublication {\n\t/** Provider-selected persisted catalog. Omit to leave storage unchanged; null deletes it. */\n\tpersist?: ModelsStoreEntry | null;\n\t/** Optional synchronous update of provider-private in-memory catalog state. */\n\tupdate?: () => void;\n}\n\nexport interface RefreshModelsContext {\n\t/** Effective configured credential. OAuth credentials are refreshed before network access. */\n\tcredential?: Credential;\n\t/** Immutable provider-scoped catalog snapshot captured before this refresh phase. */\n\tstored?: Readonly<ModelsStoreEntry>;\n\t/**\n\t * Generation-checked publication. Persistence policy remains provider-owned;\n\t * the update runs synchronously only after the selected persistence mutation.\n\t */\n\tpublish(publication: ModelsPublication): Promise<boolean>;\n\t/** False during offline/cache-only initialization. */\n\tallowNetwork: boolean;\n\t/** Bypass provider freshness checks and fetch immediately when network access is allowed. */\n\tforce?: boolean;\n\t/** Always present, including when the public refresh caller omits its optional signal. */\n\tsignal: AbortSignal;\n}\n\nexport interface ModelsRefreshOptions {\n\tallowNetwork?: boolean;\n\t/** Restrict refresh to these provider IDs. Unknown and static providers are ignored. */\n\tproviders?: readonly string[];\n\t/** Bypass provider freshness checks and fetch immediately when network access is allowed. */\n\tforce?: boolean;\n\tsignal?: AbortSignal;\n}\n\nexport interface ModelsRefreshResult {\n\taborted: boolean;\n\terrors: ReadonlyMap<string, Error>;\n}\n\nexport interface ModelsRequestTransforms {\n\t/** Transform fully assembled model/auth/request headers before provider dispatch. */\n\ttransformHeaders?: (headers: ProviderHeaders) => ProviderHeaders | Promise<ProviderHeaders>;\n}\n\nexport type ModelsApiStreamOptions<TApi extends Api> = ApiStreamOptions<TApi> & ModelsRequestTransforms;\nexport type ModelsSimpleStreamOptions = SimpleStreamOptions & ModelsRequestTransforms;\nexport type ModelsDeferredFetchOptions = DeferredFetchOptions & ModelsRequestTransforms;\nexport type ModelsDeferredCancelOptions = DeferredCancelOptions & ModelsRequestTransforms;\n\n/**\n * A provider is the concrete runtime unit. It owns id/name/base metadata,\n * auth methods, model listing, and stream behavior.\n *\n * `TApi` lets concrete provider factories declare which APIs their models\n * use (e.g. `openaiProvider(): Provider<\"openai-responses\" | \"openai-completions\">`),\n * giving typed model lists to direct factory users. Inside a `Models`\n * collection providers are held as `Provider<Api>`.\n */\nexport interface Provider<TApi extends Api = Api> {\n\treadonly id: string;\n\treadonly name: string;\n\n\treadonly baseUrl?: string;\n\treadonly headers?: ProviderHeaders;\n\n\t/**\n\t * Required: at least one of `apiKey`/`oauth`. Every provider has auth\n\t * semantics — even providers with only ambient credentials (env vars, AWS\n\t * profiles, ADC files) and keyless local servers provide `apiKey` auth\n\t * whose `resolve()` reports whether the provider is configured.\n\t * `Models.getAuth()` returns undefined when the provider is unconfigured.\n\t */\n\treadonly auth: ProviderAuth;\n\n\t/**\n\t * Current known models, sync. Static providers return their catalog;\n\t * dynamic providers return the list as of the last `refreshModels()`\n\t * (empty before the first). Must not throw; `Models` treats a throwing\n\t * implementation as having no models.\n\t */\n\tgetModels(): readonly Model<TApi>[];\n\n\t/**\n\t * Dynamic providers only: restore `context.stored` and optionally fetch a newer list using\n\t * the effective credential. Implementations retain their previous list on failure, publish\n\t * persistence and synchronous state changes through `context.publish()`, and honor the\n\t * shared abort signal for blocking work.\n\t */\n\trefreshModels?(context: RefreshModelsContext): Promise<void>;\n\n\t/**\n\t * Optional provider policy for credential-specific model availability.\n\t * `getModels()` remains the complete synchronous catalog; `Models.getAvailable()`\n\t * applies this filter after confirming that provider auth is configured.\n\t */\n\tfilterModels?(models: readonly Model<TApi>[], credential: Credential | undefined): readonly Model<TApi>[];\n\n\t/** Stream a normalized transcript. `Models` normalizes the caller's `Context` before dispatching here. */\n\tstream<T extends TApi>(\n\t\tmodel: Model<T>,\n\t\tcontext: TranscriptContext,\n\t\toptions?: ApiStreamOptions<T>,\n\t): AssistantMessageEventStream;\n\n\tstreamSimple(\n\t\tmodel: Model<TApi>,\n\t\tcontext: TranscriptContext,\n\t\toptions?: SimpleStreamOptions,\n\t): AssistantMessageEventStream;\n\tfetchDeferred?(\n\t\tmodel: Model<TApi>,\n\t\thandle: DeferredHandle,\n\t\toptions?: DeferredFetchOptions,\n\t): AssistantMessageEventStream;\n\tcancelDeferred?(model: Model<TApi>, handle: DeferredHandle, options?: DeferredCancelOptions): Promise<void>;\n}\n\n/**\n * Runtime collection of providers plus auth application and stream\n * convenience. Providers own stream behavior; `Models` resolves auth and\n * delegates each request to the provider that owns the model.\n */\nexport interface Models {\n\tgetProviders(): readonly Provider[];\n\tgetProvider(id: string): Provider | undefined;\n\n\t/**\n\t * Sync read of last-known models from one provider or all providers.\n\t * Best-effort: a provider whose `getModels()` throws yields no models.\n\t */\n\tgetModels(provider?: string): readonly Model<Api>[];\n\n\t/**\n\t * Sync runtime model lookup against last-known lists. Dynamic model lists\n\t * are typed as `Model<Api>`; narrow with the `hasApi()` type guard.\n\t */\n\tgetModel(provider: string, id: string): Model<Api> | undefined;\n\n\t/**\n\t * Refresh selected configured dynamic providers concurrently (all when `providers` is omitted).\n\t * Provider errors and cancellation are returned without rejecting; static, unknown, and\n\t * unconfigured providers are skipped.\n\t */\n\trefresh(options?: ModelsRefreshOptions): Promise<ModelsRefreshResult>;\n\n\t/** Check whether a provider has complete auth configuration without refreshing OAuth. */\n\tcheckAuth(providerId: string, options?: AuthOperationOptions): Promise<AuthCheck | undefined>;\n\n\t/** Return models whose providers have complete auth configuration. */\n\tgetAvailable(providerId?: string, options?: AuthOperationOptions): Promise<readonly Model<Api>[]>;\n\n\t/**\n\t * Resolve provider-scoped auth by provider id, or provider auth plus static\n\t * model headers when passed a model. Includes a source label for status UI.\n\t * Resolves `undefined` when the provider is unknown or unconfigured.\n\t * Rejects with `ModelsError`: code \"oauth\" when a token refresh fails (the\n\t * stored credential is preserved for retry; re-login fixes it), code \"auth\"\n\t * when api-key resolution or the credential store fails. Request paths\n\t * surface rejections as stream errors.\n\t */\n\tgetAuth(providerId: string, overrides?: AuthResolutionOverrides): Promise<AuthResult | undefined>;\n\tgetAuth(model: Model<Api>, overrides?: AuthResolutionOverrides): Promise<AuthResult | undefined>;\n\n\t/** Run a provider-owned login flow and persist its returned credential. */\n\tlogin(providerId: string, type: AuthType, interaction: AuthInteraction): Promise<Credential>;\n\n\t/** Remove the stored credential for a provider. */\n\tlogout(providerId: string, options?: AuthOperationOptions): Promise<void>;\n\n\tstream<TApi extends Api>(\n\t\tmodel: Model<TApi>,\n\t\tcontext: Context,\n\t\toptions?: ModelsApiStreamOptions<TApi>,\n\t): AssistantMessageEventStream;\n\n\tcomplete<TApi extends Api>(\n\t\tmodel: Model<TApi>,\n\t\tcontext: Context,\n\t\toptions?: ModelsApiStreamOptions<TApi>,\n\t): Promise<AssistantMessage>;\n\n\tstreamSimple(model: Model<Api>, context: Context, options?: ModelsSimpleStreamOptions): AssistantMessageEventStream;\n\tcompleteSimple(model: Model<Api>, context: Context, options?: ModelsSimpleStreamOptions): Promise<AssistantMessage>;\n\tstreamDeferred(\n\t\tmodel: Model<Api>,\n\t\thandle: DeferredHandle,\n\t\toptions?: ModelsDeferredFetchOptions,\n\t): AssistantMessageEventStream;\n\tfetchDeferred(\n\t\tmodel: Model<Api>,\n\t\thandle: DeferredHandle,\n\t\toptions?: ModelsDeferredFetchOptions,\n\t): Promise<AssistantMessage>;\n\tcancelDeferred(model: Model<Api>, handle: DeferredHandle, options?: ModelsDeferredCancelOptions): Promise<void>;\n}\n\nexport interface MutableModels extends Models {\n\t/** Upsert/replace by provider.id. Provider ids are unique. */\n\tsetProvider(provider: Provider): void;\n\tdeleteProvider(id: string): void;\n\tclearProviders(): void;\n}\n\nexport interface CreateModelsOptions {\n\tcredentials?: CredentialStore;\n\tmodelsStore?: ModelsStore;\n\tauthContext?: AuthContext;\n}\n\nfunction mergeHeaders(\n\tbase: ProviderHeaders | undefined,\n\toverride: ProviderHeaders | undefined,\n): ProviderHeaders | undefined {\n\tif (!base && !override) return undefined;\n\tconst merged = { ...base };\n\tfor (const [name, value] of Object.entries(override ?? {})) {\n\t\tconst lowerName = name.toLowerCase();\n\t\tfor (const existingName of Object.keys(merged)) {\n\t\t\tif (existingName.toLowerCase() === lowerName) delete merged[existingName];\n\t\t}\n\t\tmerged[name] = value;\n\t}\n\treturn merged;\n}\n\nclass ModelsImpl implements MutableModels {\n\tprivate providers = new Map<string, Provider>();\n\tprivate credentials: CredentialStore;\n\tprivate modelsStore: ModelsStore;\n\tprivate authContext: AuthContext;\n\tprivate refreshGenerations = new Map<string, number>();\n\tprivate refreshControllers = new Map<string, AbortController>();\n\tprivate publicationChains = new Map<string, Promise<unknown>>();\n\n\tconstructor(options?: CreateModelsOptions) {\n\t\tthis.credentials = options?.credentials ?? new InMemoryCredentialStore();\n\t\tthis.modelsStore = options?.modelsStore ?? new InMemoryModelsStore();\n\t\tthis.authContext = options?.authContext ?? defaultAuthContext();\n\t}\n\n\tsetProvider(provider: Provider): void {\n\t\tthis.supersedeProviderRefresh(provider.id);\n\t\tthis.providers.set(provider.id, provider);\n\t}\n\n\tdeleteProvider(id: string): void {\n\t\tthis.supersedeProviderRefresh(id);\n\t\tthis.providers.delete(id);\n\t}\n\n\tclearProviders(): void {\n\t\tfor (const id of new Set([...this.providers.keys(), ...this.refreshControllers.keys()])) {\n\t\t\tthis.supersedeProviderRefresh(id);\n\t\t}\n\t\tthis.providers.clear();\n\t}\n\n\tgetProviders(): readonly Provider[] {\n\t\treturn Array.from(this.providers.values());\n\t}\n\n\tgetProvider(id: string): Provider | undefined {\n\t\treturn this.providers.get(id);\n\t}\n\n\tgetModels(provider?: string): readonly Model<Api>[] {\n\t\tif (provider !== undefined) {\n\t\t\tconst entry = this.providers.get(provider);\n\t\t\tif (!entry) return [];\n\t\t\ttry {\n\t\t\t\treturn entry.getModels();\n\t\t\t} catch {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t}\n\n\t\tconst models: Model<Api>[] = [];\n\t\tfor (const entry of this.providers.values()) {\n\t\t\ttry {\n\t\t\t\tmodels.push(...entry.getModels());\n\t\t\t} catch {\n\t\t\t\t// Best-effort: ill-behaved providers yield no models.\n\t\t\t}\n\t\t}\n\t\treturn models;\n\t}\n\n\tgetModel(provider: string, id: string): Model<Api> | undefined {\n\t\treturn this.getModels(provider).find((model) => model.id === id);\n\t}\n\n\tprivate supersedeProviderRefresh(providerId: string): number {\n\t\tconst generation = (this.refreshGenerations.get(providerId) ?? 0) + 1;\n\t\tthis.refreshGenerations.set(providerId, generation);\n\t\tconst previous = this.refreshControllers.get(providerId);\n\t\tif (previous) {\n\t\t\tthis.refreshControllers.delete(providerId);\n\t\t\tprevious.abort();\n\t\t}\n\t\treturn generation;\n\t}\n\n\tprivate beginProviderRefresh(providerId: string): { generation: number; controller: AbortController } {\n\t\tconst generation = this.supersedeProviderRefresh(providerId);\n\t\tconst controller = new AbortController();\n\t\tthis.refreshControllers.set(providerId, controller);\n\t\treturn { generation, controller };\n\t}\n\n\tprivate publishProviderModels(\n\t\tproviderId: string,\n\t\tgeneration: number,\n\t\tsignal: AbortSignal,\n\t\tpublication: ModelsPublication,\n\t): Promise<boolean> {\n\t\tconst previous = this.publicationChains.get(providerId) ?? Promise.resolve();\n\t\tconst queued = (async () => {\n\t\t\tawait previous.catch(() => {});\n\t\t\tif (signal.aborted || this.refreshGenerations.get(providerId) !== generation) return false;\n\n\t\t\tif (publication.persist === null) {\n\t\t\t\tawait this.modelsStore.delete(providerId, { signal });\n\t\t\t} else if (publication.persist !== undefined) {\n\t\t\t\tawait this.modelsStore.write(providerId, structuredClone(publication.persist), { signal });\n\t\t\t}\n\n\t\t\tif (signal.aborted || this.refreshGenerations.get(providerId) !== generation) return false;\n\t\t\tpublication.update?.();\n\t\t\treturn true;\n\t\t})();\n\t\tconst tail = queued.catch(() => {});\n\t\tthis.publicationChains.set(providerId, tail);\n\t\tvoid tail.then(() => {\n\t\t\tif (this.publicationChains.get(providerId) === tail) this.publicationChains.delete(providerId);\n\t\t});\n\t\treturn raceWithAbortSignal(queued, signal);\n\t}\n\n\tprivate async runProviderRefreshPhase(\n\t\tprovider: Provider & Required<Pick<Provider, \"refreshModels\">>,\n\t\tcredential: Credential | undefined,\n\t\tallowNetwork: boolean,\n\t\tforce: boolean | undefined,\n\t\tgeneration: number,\n\t\tsignal: AbortSignal,\n\t): Promise<void> {\n\t\tconst stored = await this.modelsStore.read(provider.id, { signal });\n\t\tawait provider.refreshModels({\n\t\t\tcredential,\n\t\t\tstored: stored ? structuredClone(stored) : undefined,\n\t\t\tpublish: (publication) => this.publishProviderModels(provider.id, generation, signal, publication),\n\t\t\tallowNetwork,\n\t\t\tforce: allowNetwork ? force : undefined,\n\t\t\tsignal,\n\t\t});\n\t}\n\n\tasync refresh(options: ModelsRefreshOptions = {}): Promise<ModelsRefreshResult> {\n\t\tconst allowNetwork = options.allowNetwork ?? true;\n\t\tconst callerSignal = operationSignal(options.signal);\n\t\tconst errors = new Map<string, Error>();\n\t\tif (callerSignal.aborted) return { aborted: true, errors };\n\t\tconst selected = options.providers ? new Set(options.providers) : undefined;\n\t\tconst refreshable = Array.from(this.providers.values()).filter(\n\t\t\t(provider): provider is Provider & Required<Pick<Provider, \"refreshModels\">> =>\n\t\t\t\tprovider.refreshModels !== undefined && (!selected || selected.has(provider.id)),\n\t\t);\n\n\t\tconst refresh = Promise.all(\n\t\t\trefreshable.map(async (provider) => {\n\t\t\t\tconst { generation, controller } = this.beginProviderRefresh(provider.id);\n\t\t\t\tconst signal = AbortSignal.any([callerSignal, controller.signal]);\n\t\t\t\tconst operation = (async () => {\n\t\t\t\t\tlet storedCredential: Credential | undefined;\n\t\t\t\t\tlet credentialError: unknown;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tstoredCredential = await this.readCredential(provider.id, signal);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\tcredentialError = error;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Restore cached provider state before auth resolution or network access.\n\t\t\t\t\tawait this.runProviderRefreshPhase(provider, storedCredential, false, undefined, generation, signal);\n\t\t\t\t\tif (credentialError !== undefined) throw credentialError;\n\t\t\t\t\tif (!allowNetwork || signal.aborted) return;\n\n\t\t\t\t\tconst credential = await this.resolveRefreshCredential(provider, storedCredential, signal);\n\t\t\t\t\tif (!credential) return;\n\t\t\t\t\tawait this.runProviderRefreshPhase(provider, credential, true, options.force, generation, signal);\n\t\t\t\t})();\n\n\t\t\t\ttry {\n\t\t\t\t\tawait raceWithAbortSignal(operation, signal);\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (!signal.aborted) {\n\t\t\t\t\t\terrors.set(\n\t\t\t\t\t\t\tprovider.id,\n\t\t\t\t\t\t\terror instanceof Error\n\t\t\t\t\t\t\t\t? error\n\t\t\t\t\t\t\t\t: new ModelsError(\"model_source\", `Model refresh failed for ${provider.id}`, { cause: error }),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t} finally {\n\t\t\t\t\tif (this.refreshControllers.get(provider.id) === controller) {\n\t\t\t\t\t\tthis.refreshControllers.delete(provider.id);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}),\n\t\t);\n\n\t\ttry {\n\t\t\tawait raceWithAbortSignal(refresh, callerSignal);\n\t\t} catch (error) {\n\t\t\tif (!callerSignal.aborted) throw error;\n\t\t}\n\n\t\treturn { aborted: callerSignal.aborted, errors: new Map(errors) };\n\t}\n\n\tprivate async resolveRefreshCredential(\n\t\tprovider: Provider,\n\t\tstored: Credential | undefined,\n\t\tsignal: AbortSignal,\n\t): Promise<Credential | undefined> {\n\t\tif (stored?.type === \"oauth\") {\n\t\t\tconst oauth = provider.auth.oauth;\n\t\t\tif (!oauth) return undefined;\n\t\t\tif (Date.now() < stored.expires) return stored;\n\t\t\tif (signal.aborted) return undefined;\n\t\t\tconst post = await this.credentials.modify(\n\t\t\t\tprovider.id,\n\t\t\t\tasync (current) => {\n\t\t\t\t\tif (current?.type !== \"oauth\" || Date.now() < current.expires) return undefined;\n\t\t\t\t\treturn oauth.refresh(current, signal);\n\t\t\t\t},\n\t\t\t\t{ signal },\n\t\t\t);\n\t\t\treturn post?.type === \"oauth\" ? post : undefined;\n\t\t}\n\n\t\tconst apiKey = provider.auth.apiKey;\n\t\tif (!apiKey) return undefined;\n\t\tconst credential = stored?.type === \"api_key\" ? stored : undefined;\n\t\tconst result = await apiKey.resolve({ ctx: this.authContext, credential, signal });\n\t\tif (!result) return undefined;\n\t\treturn { type: \"api_key\", key: result.auth.apiKey, env: result.env };\n\t}\n\n\tprivate async readCredential(providerId: string, signal: AbortSignal): Promise<Credential | undefined> {\n\t\ttry {\n\t\t\treturn await this.credentials.read(providerId, { signal });\n\t\t} catch (error) {\n\t\t\tthrow new ModelsError(\"auth\", `Credential store read failed for ${providerId}`, { cause: error });\n\t\t}\n\t}\n\n\tprivate async checkProviderAuth(\n\t\tprovider: Provider,\n\t\tcredential: Credential | undefined,\n\t\tsignal: AbortSignal,\n\t): Promise<AuthCheck | undefined> {\n\t\tif (credential?.type === \"oauth\") {\n\t\t\treturn provider.auth.oauth ? { source: \"OAuth\", type: \"oauth\" } : undefined;\n\t\t}\n\t\tconst apiKey = provider.auth.apiKey;\n\t\tif (!apiKey) return undefined;\n\t\tif (apiKey.check) {\n\t\t\ttry {\n\t\t\t\treturn await apiKey.check({\n\t\t\t\t\tctx: this.authContext,\n\t\t\t\t\tcredential: credential?.type === \"api_key\" ? credential : undefined,\n\t\t\t\t\tsignal,\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\tthrow new ModelsError(\"auth\", `API key auth check failed for provider ${provider.id}`, { cause: error });\n\t\t\t}\n\t\t}\n\n\t\tconst resolution = await resolveProviderAuth(provider, this.credentials, this.authContext, { signal });\n\t\treturn resolution ? { source: resolution.source, type: \"api_key\" } : undefined;\n\t}\n\n\tcheckAuth(providerId: string, options?: AuthOperationOptions): Promise<AuthCheck | undefined> {\n\t\tconst signal = operationSignal(options?.signal);\n\t\tconst check = (async () => {\n\t\t\tsignal.throwIfAborted();\n\t\t\tconst provider = this.providers.get(providerId);\n\t\t\tif (!provider) return undefined;\n\t\t\treturn this.checkProviderAuth(provider, await this.readCredential(providerId, signal), signal);\n\t\t})();\n\t\treturn raceWithAbortSignal(check, signal);\n\t}\n\n\tgetAvailable(providerId?: string, options?: AuthOperationOptions): Promise<readonly Model<Api>[]> {\n\t\tconst signal = operationSignal(options?.signal);\n\t\tconst available = (async () => {\n\t\t\tsignal.throwIfAborted();\n\t\t\tconst providers = providerId\n\t\t\t\t? [this.providers.get(providerId)].filter((entry) => entry !== undefined)\n\t\t\t\t: this.getProviders();\n\t\t\tconst checks = await Promise.all(\n\t\t\t\tproviders.map(async (provider) => {\n\t\t\t\t\tconst credential = await this.readCredential(provider.id, signal);\n\t\t\t\t\treturn { provider, credential, auth: await this.checkProviderAuth(provider, credential, signal) };\n\t\t\t\t}),\n\t\t\t);\n\t\t\treturn checks.flatMap(({ provider, credential, auth }) => {\n\t\t\t\tif (!auth) return [];\n\t\t\t\tconst models = provider.getModels();\n\t\t\t\treturn provider.filterModels?.(models, credential) ?? models;\n\t\t\t});\n\t\t})();\n\t\treturn raceWithAbortSignal(available, signal);\n\t}\n\n\tgetAuth(providerId: string, overrides?: AuthResolutionOverrides): Promise<AuthResult | undefined>;\n\tgetAuth(model: Model<Api>, overrides?: AuthResolutionOverrides): Promise<AuthResult | undefined>;\n\tasync getAuth(\n\t\tproviderOrModel: string | Model<Api>,\n\t\toverrides?: AuthResolutionOverrides,\n\t): Promise<AuthResult | undefined> {\n\t\tconst signal = operationSignal(overrides?.signal);\n\t\tconst providerId = typeof providerOrModel === \"string\" ? providerOrModel : providerOrModel.provider;\n\t\tconst provider = this.providers.get(providerId);\n\t\tif (!provider) return undefined;\n\t\tconst result = await resolveProviderAuth(provider, this.credentials, this.authContext, { ...overrides, signal });\n\t\tif (!result || typeof providerOrModel === \"string\" || !providerOrModel.headers) return result;\n\t\treturn {\n\t\t\t...result,\n\t\t\tauth: {\n\t\t\t\t...result.auth,\n\t\t\t\theaders: mergeHeaders(result.auth.headers, providerOrModel.headers),\n\t\t\t},\n\t\t};\n\t}\n\n\tasync login(providerId: string, type: AuthType, interaction: AuthInteraction): Promise<Credential> {\n\t\tconst signal = operationSignal(interaction.signal);\n\t\tsignal.throwIfAborted();\n\t\tconst provider = this.providers.get(providerId);\n\t\tif (!provider) throw new ModelsError(\"provider\", `Unknown provider: ${providerId}`);\n\t\tconst method = type === \"oauth\" ? provider.auth.oauth : provider.auth.apiKey;\n\t\tif (!method?.login) {\n\t\t\tthrow new ModelsError(\"auth\", `${provider.name} does not support ${type} login`);\n\t\t}\n\t\tconst loginOperation: Promise<Credential> = method.login({ ...interaction, signal });\n\t\tconst credential = await raceWithAbortSignal(loginOperation, signal);\n\t\tlet mutationStarted = false;\n\t\tlet markMutationStarted: (() => void) | undefined;\n\t\tconst started = new Promise<void>((resolve) => {\n\t\t\tmarkMutationStarted = resolve;\n\t\t});\n\t\tconst mutation = this.credentials.modify(\n\t\t\tproviderId,\n\t\t\tasync () => {\n\t\t\t\tmutationStarted = true;\n\t\t\t\tmarkMutationStarted?.();\n\t\t\t\treturn credential;\n\t\t\t},\n\t\t\t{ signal },\n\t\t);\n\t\tvoid mutation.catch(() => {});\n\t\ttry {\n\t\t\tawait new Promise<void>((resolve, reject) => {\n\t\t\t\tconst onAbort = () => {\n\t\t\t\t\tif (!mutationStarted) reject(signal.reason);\n\t\t\t\t};\n\t\t\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\t\t\tvoid Promise.race([started, mutation]).then(\n\t\t\t\t\t() => {\n\t\t\t\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t\tresolve();\n\t\t\t\t\t},\n\t\t\t\t\t(error: unknown) => {\n\t\t\t\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t\tif (signal.aborted) onAbort();\n\t\t\t});\n\t\t\tawait mutation;\n\t\t} catch (error) {\n\t\t\tsignal.throwIfAborted();\n\t\t\tthrow new ModelsError(\"auth\", `Credential store modify failed for ${providerId}`, { cause: error });\n\t\t}\n\t\treturn credential;\n\t}\n\n\tasync logout(providerId: string, options?: AuthOperationOptions): Promise<void> {\n\t\tconst signal = operationSignal(options?.signal);\n\t\tsignal.throwIfAborted();\n\t\ttry {\n\t\t\tawait this.credentials.delete(providerId, { signal });\n\t\t} catch (error) {\n\t\t\tsignal.throwIfAborted();\n\t\t\tthrow new ModelsError(\"auth\", `Credential store delete failed for ${providerId}`, { cause: error });\n\t\t}\n\t}\n\n\tprivate requireProvider(model: Model<Api>): Provider {\n\t\tconst provider = this.providers.get(model.provider);\n\t\tif (!provider) {\n\t\t\tthrow new ModelsError(\"provider\", `Unknown provider: ${model.provider}`);\n\t\t}\n\t\treturn provider;\n\t}\n\n\tprivate async applyAuth<TOptions extends ProviderRequestOptions & ModelsRequestTransforms>(\n\t\tmodel: Model<Api>,\n\t\toptions: TOptions | undefined,\n\t): Promise<{\n\t\trequestModel: Model<Api>;\n\t\trequestOptions: Omit<TOptions, \"transformHeaders\"> & ProviderRequestOptions;\n\t}> {\n\t\tthis.requireProvider(model);\n\t\tconst resolution = await this.getAuth(model, {\n\t\t\tapiKey: options?.apiKey,\n\t\t\tenv: options?.env,\n\t\t\tsignal: options?.signal,\n\t\t});\n\t\tif (!resolution) {\n\t\t\tthrow new ModelsError(\"auth\", `Provider is not configured: ${model.provider}`);\n\t\t}\n\t\tconst auth = resolution.auth;\n\n\t\t// Explicit request options win per-field; the Models-only transform runs last.\n\t\tconst apiKey = options?.apiKey ?? auth.apiKey;\n\t\tlet headers = mergeHeaders(auth.headers, options?.headers);\n\t\tif (options?.transformHeaders) headers = await options.transformHeaders(headers ?? {});\n\t\tconst env = resolution.env || options?.env ? { ...(resolution.env ?? {}), ...(options?.env ?? {}) } : undefined;\n\t\tconst requestModel = auth.baseUrl ? { ...model, baseUrl: auth.baseUrl } : model;\n\t\tconst { transformHeaders: _transformHeaders, ...providerOptions } = options ?? {};\n\t\tconst requestOptions = { ...providerOptions, apiKey, headers, env } as Omit<TOptions, \"transformHeaders\"> &\n\t\t\tProviderRequestOptions;\n\n\t\treturn { requestModel, requestOptions };\n\t}\n\n\tstream<TApi extends Api>(\n\t\tmodel: Model<TApi>,\n\t\tcontext: Context,\n\t\toptions?: ModelsApiStreamOptions<TApi>,\n\t): AssistantMessageEventStream {\n\t\tconst transcript = normalizeContext(context);\n\t\treturn lazyStream(model, async () => {\n\t\t\tconst provider = this.requireProvider(model);\n\t\t\tconst { requestModel, requestOptions } = await this.applyAuth(\n\t\t\t\tmodel,\n\t\t\t\toptions as ModelsApiStreamOptions<Api> | undefined,\n\t\t\t);\n\t\t\treturn provider.stream(requestModel as Model<TApi>, transcript, requestOptions as ApiStreamOptions<TApi>);\n\t\t});\n\t}\n\n\tasync complete<TApi extends Api>(\n\t\tmodel: Model<TApi>,\n\t\tcontext: Context,\n\t\toptions?: ModelsApiStreamOptions<TApi>,\n\t): Promise<AssistantMessage> {\n\t\treturn this.stream(model, context, options).result();\n\t}\n\n\tstreamSimple(model: Model<Api>, context: Context, options?: ModelsSimpleStreamOptions): AssistantMessageEventStream {\n\t\tconst transcript = normalizeContext(context);\n\t\treturn lazyStream(model, async () => {\n\t\t\tconst provider = this.requireProvider(model);\n\t\t\tconst { requestModel, requestOptions } = await this.applyAuth(model, options);\n\t\t\treturn provider.streamSimple(requestModel, transcript, requestOptions as SimpleStreamOptions);\n\t\t});\n\t}\n\n\tasync completeSimple(\n\t\tmodel: Model<Api>,\n\t\tcontext: Context,\n\t\toptions?: ModelsSimpleStreamOptions,\n\t): Promise<AssistantMessage> {\n\t\treturn this.streamSimple(model, context, options).result();\n\t}\n\n\tstreamDeferred(\n\t\tmodel: Model<Api>,\n\t\thandle: DeferredHandle,\n\t\toptions?: ModelsDeferredFetchOptions,\n\t): AssistantMessageEventStream {\n\t\treturn lazyStream(model, async () => {\n\t\t\tconst provider = this.requireProvider(model);\n\t\t\tif (!provider.fetchDeferred) {\n\t\t\t\tthrow new ModelsError(\"provider\", `Provider ${model.provider} does not support deferred responses`);\n\t\t\t}\n\t\t\tconst { requestModel, requestOptions } = await this.applyAuth(model, options);\n\t\t\treturn provider.fetchDeferred(requestModel, handle, requestOptions as DeferredFetchOptions);\n\t\t});\n\t}\n\n\tasync fetchDeferred(\n\t\tmodel: Model<Api>,\n\t\thandle: DeferredHandle,\n\t\toptions?: ModelsDeferredFetchOptions,\n\t): Promise<AssistantMessage> {\n\t\treturn this.streamDeferred(model, handle, options).result();\n\t}\n\n\tasync cancelDeferred(\n\t\tmodel: Model<Api>,\n\t\thandle: DeferredHandle,\n\t\toptions?: ModelsDeferredCancelOptions,\n\t): Promise<void> {\n\t\tconst provider = this.requireProvider(model);\n\t\tif (!provider.cancelDeferred) {\n\t\t\tthrow new ModelsError(\"provider\", `Provider ${model.provider} does not support deferred responses`);\n\t\t}\n\t\tconst { requestModel, requestOptions } = await this.applyAuth(model, options);\n\t\tawait provider.cancelDeferred(requestModel, handle, requestOptions);\n\t}\n}\n\nexport function createModels(options?: CreateModelsOptions): MutableModels {\n\treturn new ModelsImpl(options);\n}\n\nexport interface CreateProviderOptions<TApi extends Api = Api> {\n\tid: string;\n\t/** Display name. Default: `id`. */\n\tname?: string;\n\tbaseUrl?: string;\n\theaders?: ProviderHeaders;\n\t/** Required — every provider has auth semantics, even ambient/keyless ones. */\n\tauth: ProviderAuth;\n\t/** Static baseline model list (empty for purely dynamic providers). */\n\tmodels: readonly Model<TApi>[];\n\t/** Fetch a dynamic model overlay. createProvider restores and publishes it transactionally. */\n\tfetchModels?: (context: RefreshModelsContext) => Promise<readonly Model<TApi>[]>;\n\tfilterModels?: (models: readonly Model<TApi>[], credential: Credential | undefined) => readonly Model<TApi>[];\n\t/** Single implementation, or map keyed by `model.api` for mixed-API providers. */\n\tapi: ProviderStreams | Partial<Record<TApi, ProviderStreams>>;\n}\n\n/**\n * Builds a provider from parts. Built-in provider factories and models.json\n * custom providers both go through this. A single `api` streams all models;\n * an `api` map dispatches on `model.api`, and a model whose api has no entry\n * produces a stream error.\n */\nexport function createProvider<TApi extends Api = Api>(input: CreateProviderOptions<TApi>): Provider<TApi> {\n\tconst baselineModels = input.models;\n\tlet dynamicModels: readonly Model<TApi>[] = [];\n\tconst fetchModels = input.fetchModels;\n\tconst currentModels = (): readonly Model<TApi>[] => {\n\t\tconst merged = [...baselineModels];\n\t\tfor (const model of dynamicModels) {\n\t\t\tconst index = merged.findIndex((entry) => entry.id === model.id);\n\t\t\tif (index >= 0) merged[index] = model;\n\t\t\telse merged.push(model);\n\t\t}\n\t\treturn merged;\n\t};\n\tconst single =\n\t\ttypeof (input.api as ProviderStreams).stream === \"function\" ? (input.api as ProviderStreams) : undefined;\n\tconst byApi = single ? undefined : (input.api as Partial<Record<string, ProviderStreams>>);\n\n\tconst apiFor = (model: Model<Api>): ProviderStreams | undefined => single ?? byApi?.[model.api];\n\n\tconst dispatch = (\n\t\tmodel: Model<Api>,\n\t\trun: (streams: ProviderStreams) => AssistantMessageEventStream,\n\t): AssistantMessageEventStream => {\n\t\tconst streams = apiFor(model);\n\t\tif (!streams) {\n\t\t\treturn lazyStream(model, async () => {\n\t\t\t\tthrow new ModelsError(\"stream\", `Provider ${input.id} has no API implementation for \"${model.api}\"`);\n\t\t\t});\n\t\t}\n\t\treturn run(streams);\n\t};\n\n\tconst provider: Provider<TApi> = {\n\t\tid: input.id,\n\t\tname: input.name ?? input.id,\n\t\tbaseUrl: input.baseUrl,\n\t\theaders: input.headers,\n\t\tauth: input.auth,\n\t\tgetModels: currentModels,\n\t\trefreshModels: fetchModels\n\t\t\t? async (context) => {\n\t\t\t\t\tif (context.stored) {\n\t\t\t\t\t\tconst restored = context.stored.models\n\t\t\t\t\t\t\t.filter((model) => model.provider === input.id)\n\t\t\t\t\t\t\t.map((model) => model as Model<TApi>);\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!(await context.publish({\n\t\t\t\t\t\t\t\tupdate: () => {\n\t\t\t\t\t\t\t\t\tdynamicModels = restored;\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!context.allowNetwork || context.signal.aborted) return;\n\t\t\t\t\tconst refreshed = await fetchModels(context);\n\t\t\t\t\tif (context.signal.aborted) return;\n\t\t\t\t\tawait context.publish({\n\t\t\t\t\t\tpersist: { models: refreshed, checkedAt: Date.now() },\n\t\t\t\t\t\tupdate: () => {\n\t\t\t\t\t\t\tdynamicModels = refreshed;\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tfilterModels: input.filterModels,\n\t\tstream: (model, context, options) => dispatch(model, (streams) => streams.stream(model, context, options)),\n\t\tstreamSimple: (model, context, options) =>\n\t\t\tdispatch(model, (streams) => streams.streamSimple(model, context, options)),\n\t};\n\n\tconst streams = single ? [single] : Object.values(byApi ?? {}).filter((entry) => entry !== undefined);\n\tif (streams.some((entry) => entry.fetchDeferred !== undefined)) {\n\t\tprovider.fetchDeferred = (model, handle, options) =>\n\t\t\tlazyStream(model, async () => {\n\t\t\t\tconst implementation = apiFor(model);\n\t\t\t\tif (!implementation?.fetchDeferred) {\n\t\t\t\t\tthrow new ModelsError(\n\t\t\t\t\t\t\"provider\",\n\t\t\t\t\t\t`Provider ${input.id} does not support deferred responses for \"${model.api}\"`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn implementation.fetchDeferred(model, handle, options);\n\t\t\t});\n\t}\n\tif (streams.some((entry) => entry.cancelDeferred !== undefined)) {\n\t\tprovider.cancelDeferred = async (model, handle, options) => {\n\t\t\tconst implementation = apiFor(model);\n\t\t\tif (!implementation?.cancelDeferred) {\n\t\t\t\tthrow new ModelsError(\n\t\t\t\t\t\"provider\",\n\t\t\t\t\t`Provider ${input.id} cannot cancel deferred responses for \"${model.api}\"`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait implementation.cancelDeferred(model, handle, options);\n\t\t};\n\t}\n\n\treturn provider;\n}\n\n/**\n * Runtime-checked narrowing for dynamically looked-up models:\n *\n * ```ts\n * const model = models.getModel(\"anthropic\", \"claude-opus-4-7\");\n * if (model && hasApi(model, \"anthropic-messages\")) {\n * // model: Model<\"anthropic-messages\">, stream options fully typed\n * }\n * ```\n */\nexport function hasApi<TApi extends Api>(model: Model<Api>, api: TApi): model is Model<TApi> {\n\treturn model.api === api;\n}\n\nexport function calculateCost<TApi extends Api>(model: Model<TApi>, usage: Usage): Usage[\"cost\"] {\n\tconst inputTokens = usage.input + usage.cacheRead + usage.cacheWrite;\n\tlet rates: ModelCostRates = model.cost;\n\tlet matchedThreshold = -1;\n\tfor (const tier of model.cost.tiers ?? []) {\n\t\tif (inputTokens > tier.inputTokensAbove && tier.inputTokensAbove > matchedThreshold) {\n\t\t\trates = tier;\n\t\t\tmatchedThreshold = tier.inputTokensAbove;\n\t\t}\n\t}\n\n\t// Anthropic charges 2x base input for 1h cache writes.\n\tconst longWrite = usage.cacheWrite1h ?? 0;\n\tconst shortWrite = usage.cacheWrite - longWrite;\n\tusage.cost.input = (rates.input / 1000000) * usage.input;\n\tusage.cost.output = (rates.output / 1000000) * usage.output;\n\tusage.cost.cacheRead = (rates.cacheRead / 1000000) * usage.cacheRead;\n\tusage.cost.cacheWrite = (rates.cacheWrite * shortWrite + rates.input * 2 * longWrite) / 1000000;\n\tusage.cost.total = usage.cost.input + usage.cost.output + usage.cost.cacheRead + usage.cost.cacheWrite;\n\treturn usage.cost;\n}\n\nconst EXTENDED_THINKING_LEVELS: ModelThinkingLevel[] = [\"off\", \"minimal\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"];\n\nexport function getSupportedThinkingLevels<TApi extends Api>(model: Model<TApi>): ModelThinkingLevel[] {\n\tif (!model.reasoning) return [\"off\"];\n\n\treturn EXTENDED_THINKING_LEVELS.filter((level) => {\n\t\tconst mapped = model.thinkingLevelMap?.[level];\n\t\tif (mapped === null) return false;\n\t\tif (level === \"xhigh\" || level === \"max\") return mapped !== undefined;\n\t\treturn true;\n\t});\n}\n\nexport function clampThinkingLevel<TApi extends Api>(\n\tmodel: Model<TApi>,\n\tlevel: ModelThinkingLevel,\n): ModelThinkingLevel {\n\tconst availableLevels = getSupportedThinkingLevels(model);\n\tif (availableLevels.includes(level)) return level;\n\n\tconst requestedIndex = EXTENDED_THINKING_LEVELS.indexOf(level);\n\tif (requestedIndex === -1) return availableLevels[0] ?? \"off\";\n\n\tfor (let i = requestedIndex; i < EXTENDED_THINKING_LEVELS.length; i++) {\n\t\tconst candidate = EXTENDED_THINKING_LEVELS[i];\n\t\tif (availableLevels.includes(candidate)) return candidate;\n\t}\n\tfor (let i = requestedIndex - 1; i >= 0; i--) {\n\t\tconst candidate = EXTENDED_THINKING_LEVELS[i];\n\t\tif (availableLevels.includes(candidate)) return candidate;\n\t}\n\treturn availableLevels[0] ?? \"off\";\n}\n\n/**\n * Check if two models are equal by comparing both their id and provider.\n * Returns false if either model is null or undefined.\n */\nexport function modelsAreEqual<TApi extends Api>(\n\ta: Model<TApi> | null | undefined,\n\tb: Model<TApi> | null | undefined,\n): boolean {\n\tif (!a || !b) return false;\n\treturn a.id === b.id && a.provider === b.provider;\n}\n"]}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}