@draht/ai 2026.7.30 → 2026.10.4-2

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 (604) hide show
  1. package/dist/api/anthropic-messages.d.ts.map +1 -1
  2. package/dist/api/anthropic-messages.js +404 -142
  3. package/dist/api/anthropic-messages.js.map +1 -1
  4. package/dist/api/azure-openai-responses.d.ts +2 -0
  5. package/dist/api/azure-openai-responses.d.ts.map +1 -1
  6. package/dist/api/azure-openai-responses.js +34 -10
  7. package/dist/api/azure-openai-responses.js.map +1 -1
  8. package/dist/api/bedrock-converse-stream.d.ts.map +1 -1
  9. package/dist/api/bedrock-converse-stream.js +210 -24
  10. package/dist/api/bedrock-converse-stream.js.map +1 -1
  11. package/dist/api/cloudflare-ai-binding.d.ts +77 -0
  12. package/dist/api/cloudflare-ai-binding.d.ts.map +1 -0
  13. package/dist/api/cloudflare-ai-binding.js +72 -0
  14. package/dist/api/cloudflare-ai-binding.js.map +1 -0
  15. package/dist/api/cloudflare-workers-ai-system-one.d.ts +4 -0
  16. package/dist/api/cloudflare-workers-ai-system-one.d.ts.map +1 -0
  17. package/dist/api/cloudflare-workers-ai-system-one.js +43 -0
  18. package/dist/api/cloudflare-workers-ai-system-one.js.map +1 -0
  19. package/dist/api/cloudflare-workers-ai-system-one.lazy.d.ts +3 -0
  20. package/dist/api/cloudflare-workers-ai-system-one.lazy.d.ts.map +1 -0
  21. package/dist/api/cloudflare-workers-ai-system-one.lazy.js +4 -0
  22. package/dist/api/cloudflare-workers-ai-system-one.lazy.js.map +1 -0
  23. package/dist/api/cloudflare.d.ts +2 -0
  24. package/dist/api/cloudflare.d.ts.map +1 -1
  25. package/dist/api/cloudflare.js +2 -0
  26. package/dist/api/cloudflare.js.map +1 -1
  27. package/dist/api/constrained-sampling.d.ts +10 -1
  28. package/dist/api/constrained-sampling.d.ts.map +1 -1
  29. package/dist/api/constrained-sampling.js +137 -4
  30. package/dist/api/constrained-sampling.js.map +1 -1
  31. package/dist/api/google-generative-ai.d.ts +2 -2
  32. package/dist/api/google-generative-ai.d.ts.map +1 -1
  33. package/dist/api/google-generative-ai.js +39 -82
  34. package/dist/api/google-generative-ai.js.map +1 -1
  35. package/dist/api/google-shared.d.ts +27 -5
  36. package/dist/api/google-shared.d.ts.map +1 -1
  37. package/dist/api/google-shared.js +126 -18
  38. package/dist/api/google-shared.js.map +1 -1
  39. package/dist/api/google-vertex.d.ts +2 -2
  40. package/dist/api/google-vertex.d.ts.map +1 -1
  41. package/dist/api/google-vertex.js +42 -73
  42. package/dist/api/google-vertex.js.map +1 -1
  43. package/dist/api/lazy.d.ts +5 -1
  44. package/dist/api/lazy.d.ts.map +1 -1
  45. package/dist/api/lazy.js +19 -7
  46. package/dist/api/lazy.js.map +1 -1
  47. package/dist/api/llama-cpp-classify.d.ts +33 -0
  48. package/dist/api/llama-cpp-classify.d.ts.map +1 -0
  49. package/dist/api/llama-cpp-classify.js +365 -0
  50. package/dist/api/llama-cpp-classify.js.map +1 -0
  51. package/dist/api/llama-cpp-classify.lazy.d.ts +3 -0
  52. package/dist/api/llama-cpp-classify.lazy.d.ts.map +1 -0
  53. package/dist/api/llama-cpp-classify.lazy.js +4 -0
  54. package/dist/api/llama-cpp-classify.lazy.js.map +1 -0
  55. package/dist/api/mistral-conversations.d.ts +2 -2
  56. package/dist/api/mistral-conversations.d.ts.map +1 -1
  57. package/dist/api/mistral-conversations.js +250 -69
  58. package/dist/api/mistral-conversations.js.map +1 -1
  59. package/dist/api/openai-codex-responses.d.ts.map +1 -1
  60. package/dist/api/openai-codex-responses.js +107 -55
  61. package/dist/api/openai-codex-responses.js.map +1 -1
  62. package/dist/api/openai-completions.d.ts +11 -4
  63. package/dist/api/openai-completions.d.ts.map +1 -1
  64. package/dist/api/openai-completions.js +241 -129
  65. package/dist/api/openai-completions.js.map +1 -1
  66. package/dist/api/openai-responses-shared.d.ts +8 -4
  67. package/dist/api/openai-responses-shared.d.ts.map +1 -1
  68. package/dist/api/openai-responses-shared.js +109 -58
  69. package/dist/api/openai-responses-shared.js.map +1 -1
  70. package/dist/api/openai-responses.d.ts.map +1 -1
  71. package/dist/api/openai-responses.js +62 -24
  72. package/dist/api/openai-responses.js.map +1 -1
  73. package/dist/api/openrouter-images.d.ts +2 -1
  74. package/dist/api/openrouter-images.d.ts.map +1 -1
  75. package/dist/api/openrouter-images.js +1 -0
  76. package/dist/api/openrouter-images.js.map +1 -1
  77. package/dist/api/openrouter-images.lazy.d.ts.map +1 -1
  78. package/dist/api/openrouter-images.lazy.js.map +1 -1
  79. package/dist/api/pi-messages.d.ts +5 -3
  80. package/dist/api/pi-messages.d.ts.map +1 -1
  81. package/dist/api/pi-messages.js +13 -4
  82. package/dist/api/pi-messages.js.map +1 -1
  83. package/dist/api/simple-options.d.ts +9 -3
  84. package/dist/api/simple-options.d.ts.map +1 -1
  85. package/dist/api/simple-options.js +22 -11
  86. package/dist/api/simple-options.js.map +1 -1
  87. package/dist/api/system-one-shared.d.ts +23 -0
  88. package/dist/api/system-one-shared.d.ts.map +1 -0
  89. package/dist/api/system-one-shared.js +183 -0
  90. package/dist/api/system-one-shared.js.map +1 -0
  91. package/dist/api/transform-messages.d.ts.map +1 -1
  92. package/dist/api/transform-messages.js +21 -7
  93. package/dist/api/transform-messages.js.map +1 -1
  94. package/dist/api/typesafe-system-one.d.ts +4 -0
  95. package/dist/api/typesafe-system-one.d.ts.map +1 -0
  96. package/dist/api/typesafe-system-one.js +19 -0
  97. package/dist/api/typesafe-system-one.js.map +1 -0
  98. package/dist/api/typesafe-system-one.lazy.d.ts +3 -0
  99. package/dist/api/typesafe-system-one.lazy.d.ts.map +1 -0
  100. package/dist/api/typesafe-system-one.lazy.js +4 -0
  101. package/dist/api/typesafe-system-one.lazy.js.map +1 -0
  102. package/dist/auth/credential-store.d.ts +6 -6
  103. package/dist/auth/credential-store.d.ts.map +1 -1
  104. package/dist/auth/credential-store.js +24 -15
  105. package/dist/auth/credential-store.js.map +1 -1
  106. package/dist/auth/helpers.d.ts +1 -0
  107. package/dist/auth/helpers.d.ts.map +1 -1
  108. package/dist/auth/helpers.js +8 -3
  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 +28 -131
  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 +2 -1
  118. package/dist/auth/oauth/device-code.d.ts.map +1 -1
  119. package/dist/auth/oauth/device-code.js +5 -5
  120. package/dist/auth/oauth/device-code.js.map +1 -1
  121. package/dist/auth/oauth/github-copilot.d.ts.map +1 -1
  122. package/dist/auth/oauth/github-copilot.js +121 -41
  123. package/dist/auth/oauth/github-copilot.js.map +1 -1
  124. package/dist/auth/oauth/google-antigravity.d.ts +3 -3
  125. package/dist/auth/oauth/google-antigravity.d.ts.map +1 -1
  126. package/dist/auth/oauth/google-antigravity.js +17 -9
  127. package/dist/auth/oauth/google-antigravity.js.map +1 -1
  128. package/dist/auth/oauth/google-gemini-cli.d.ts +3 -3
  129. package/dist/auth/oauth/google-gemini-cli.d.ts.map +1 -1
  130. package/dist/auth/oauth/google-gemini-cli.js +18 -10
  131. package/dist/auth/oauth/google-gemini-cli.js.map +1 -1
  132. package/dist/auth/oauth/kimi-coding.d.ts.map +1 -1
  133. package/dist/auth/oauth/kimi-coding.js +5 -6
  134. package/dist/auth/oauth/kimi-coding.js.map +1 -1
  135. package/dist/auth/oauth/load.d.ts +4 -0
  136. package/dist/auth/oauth/load.d.ts.map +1 -1
  137. package/dist/auth/oauth/load.js +10 -0
  138. package/dist/auth/oauth/load.js.map +1 -1
  139. package/dist/auth/oauth/meta.d.ts +17 -0
  140. package/dist/auth/oauth/meta.d.ts.map +1 -0
  141. package/dist/auth/oauth/meta.js +190 -0
  142. package/dist/auth/oauth/meta.js.map +1 -0
  143. package/dist/auth/oauth/openai-chatgpt.d.ts +9 -0
  144. package/dist/auth/oauth/openai-chatgpt.d.ts.map +1 -0
  145. package/dist/auth/oauth/openai-chatgpt.js +266 -0
  146. package/dist/auth/oauth/openai-chatgpt.js.map +1 -0
  147. package/dist/auth/oauth/openai-codex.d.ts +1 -1
  148. package/dist/auth/oauth/openai-codex.d.ts.map +1 -1
  149. package/dist/auth/oauth/openai-codex.js +33 -130
  150. package/dist/auth/oauth/openai-codex.js.map +1 -1
  151. package/dist/auth/oauth/openrouter.d.ts +1 -1
  152. package/dist/auth/oauth/openrouter.d.ts.map +1 -1
  153. package/dist/auth/oauth/openrouter.js +26 -145
  154. package/dist/auth/oauth/openrouter.js.map +1 -1
  155. package/dist/auth/oauth/radius.d.ts +1 -1
  156. package/dist/auth/oauth/radius.d.ts.map +1 -1
  157. package/dist/auth/oauth/radius.js +28 -93
  158. package/dist/auth/oauth/radius.js.map +1 -1
  159. package/dist/auth/oauth/xai.d.ts.map +1 -1
  160. package/dist/auth/oauth/xai.js +13 -12
  161. package/dist/auth/oauth/xai.js.map +1 -1
  162. package/dist/auth/resolve.d.ts +3 -8
  163. package/dist/auth/resolve.d.ts.map +1 -1
  164. package/dist/auth/resolve.js +27 -31
  165. package/dist/auth/resolve.js.map +1 -1
  166. package/dist/auth/types.d.ts +29 -8
  167. package/dist/auth/types.d.ts.map +1 -1
  168. package/dist/auth/types.js.map +1 -1
  169. package/dist/bun-oauth.d.ts.map +1 -1
  170. package/dist/bun-oauth.js +4 -0
  171. package/dist/bun-oauth.js.map +1 -1
  172. package/dist/cli.js +4 -1
  173. package/dist/cli.js.map +1 -1
  174. package/dist/compat.d.ts +3 -3
  175. package/dist/compat.d.ts.map +1 -1
  176. package/dist/compat.js +9 -6
  177. package/dist/compat.js.map +1 -1
  178. package/dist/env-api-keys.d.ts +5 -0
  179. package/dist/env-api-keys.d.ts.map +1 -1
  180. package/dist/env-api-keys.js +9 -1
  181. package/dist/env-api-keys.js.map +1 -1
  182. package/dist/image-models.d.ts +19 -8
  183. package/dist/image-models.d.ts.map +1 -1
  184. package/dist/image-models.js +14 -13
  185. package/dist/image-models.js.map +1 -1
  186. package/dist/images-api-registry.d.ts +7 -7
  187. package/dist/images-api-registry.d.ts.map +1 -1
  188. package/dist/images-api-registry.js.map +1 -1
  189. package/dist/images.d.ts +7 -2
  190. package/dist/images.d.ts.map +1 -1
  191. package/dist/images.js +5 -0
  192. package/dist/images.js.map +1 -1
  193. package/dist/index.d.ts +4 -3
  194. package/dist/index.d.ts.map +1 -1
  195. package/dist/index.js +3 -2
  196. package/dist/index.js.map +1 -1
  197. package/dist/model-catalog.d.ts +25 -9
  198. package/dist/model-catalog.d.ts.map +1 -1
  199. package/dist/model-catalog.js +14 -2
  200. package/dist/model-catalog.js.map +1 -1
  201. package/dist/models-store.d.ts +12 -14
  202. package/dist/models-store.d.ts.map +1 -1
  203. package/dist/models-store.js +7 -6
  204. package/dist/models-store.js.map +1 -1
  205. package/dist/models.d.ts +138 -47
  206. package/dist/models.d.ts.map +1 -1
  207. package/dist/models.generated.d.ts +135 -37
  208. package/dist/models.generated.d.ts.map +1 -1
  209. package/dist/models.generated.js +135 -37
  210. package/dist/models.generated.js.map +1 -1
  211. package/dist/models.js +391 -99
  212. package/dist/models.js.map +1 -1
  213. package/dist/providers/all.d.ts +19 -13
  214. package/dist/providers/all.d.ts.map +1 -1
  215. package/dist/providers/all.js +31 -21
  216. package/dist/providers/all.js.map +1 -1
  217. package/dist/providers/amazon-bedrock.d.ts.map +1 -1
  218. package/dist/providers/amazon-bedrock.js +15 -7
  219. package/dist/providers/amazon-bedrock.js.map +1 -1
  220. package/dist/providers/amazon-bedrock.models.d.ts +4 -2
  221. package/dist/providers/amazon-bedrock.models.d.ts.map +1 -1
  222. package/dist/providers/amazon-bedrock.models.js +4 -2
  223. package/dist/providers/amazon-bedrock.models.js.map +1 -1
  224. package/dist/providers/ant-ling.models.d.ts +4 -2
  225. package/dist/providers/ant-ling.models.d.ts.map +1 -1
  226. package/dist/providers/ant-ling.models.js +4 -2
  227. package/dist/providers/ant-ling.models.js.map +1 -1
  228. package/dist/providers/anthropic.d.ts.map +1 -1
  229. package/dist/providers/anthropic.js +39 -8
  230. package/dist/providers/anthropic.js.map +1 -1
  231. package/dist/providers/anthropic.models.d.ts +4 -2
  232. package/dist/providers/anthropic.models.d.ts.map +1 -1
  233. package/dist/providers/anthropic.models.js +4 -2
  234. package/dist/providers/anthropic.models.js.map +1 -1
  235. package/dist/providers/azure-openai-responses.models.d.ts +4 -2
  236. package/dist/providers/azure-openai-responses.models.d.ts.map +1 -1
  237. package/dist/providers/azure-openai-responses.models.js +4 -2
  238. package/dist/providers/azure-openai-responses.models.js.map +1 -1
  239. package/dist/providers/baseten.d.ts +3 -0
  240. package/dist/providers/baseten.d.ts.map +1 -0
  241. package/dist/providers/baseten.js +15 -0
  242. package/dist/providers/baseten.js.map +1 -0
  243. package/dist/providers/baseten.models.d.ts +6 -0
  244. package/dist/providers/baseten.models.d.ts.map +1 -0
  245. package/dist/providers/baseten.models.js +8 -0
  246. package/dist/providers/baseten.models.js.map +1 -0
  247. package/dist/providers/cerebras.models.d.ts +4 -2
  248. package/dist/providers/cerebras.models.d.ts.map +1 -1
  249. package/dist/providers/cerebras.models.js +4 -2
  250. package/dist/providers/cerebras.models.js.map +1 -1
  251. package/dist/providers/cloudflare-ai-gateway.d.ts +3 -1
  252. package/dist/providers/cloudflare-ai-gateway.d.ts.map +1 -1
  253. package/dist/providers/cloudflare-ai-gateway.js +4 -0
  254. package/dist/providers/cloudflare-ai-gateway.js.map +1 -1
  255. package/dist/providers/cloudflare-ai-gateway.models.d.ts +4 -2
  256. package/dist/providers/cloudflare-ai-gateway.models.d.ts.map +1 -1
  257. package/dist/providers/cloudflare-ai-gateway.models.js +4 -2
  258. package/dist/providers/cloudflare-ai-gateway.models.js.map +1 -1
  259. package/dist/providers/cloudflare-auth.d.ts.map +1 -1
  260. package/dist/providers/cloudflare-auth.js +15 -10
  261. package/dist/providers/cloudflare-auth.js.map +1 -1
  262. package/dist/providers/cloudflare-stream.d.ts +6 -2
  263. package/dist/providers/cloudflare-stream.d.ts.map +1 -1
  264. package/dist/providers/cloudflare-stream.js +6 -0
  265. package/dist/providers/cloudflare-stream.js.map +1 -1
  266. package/dist/providers/cloudflare-workers-ai.d.ts.map +1 -1
  267. package/dist/providers/cloudflare-workers-ai.js +10 -3
  268. package/dist/providers/cloudflare-workers-ai.js.map +1 -1
  269. package/dist/providers/cloudflare-workers-ai.models.d.ts +4 -2
  270. package/dist/providers/cloudflare-workers-ai.models.d.ts.map +1 -1
  271. package/dist/providers/cloudflare-workers-ai.models.js +4 -2
  272. package/dist/providers/cloudflare-workers-ai.models.js.map +1 -1
  273. package/dist/providers/data/.manifest.json +1 -1
  274. package/dist/providers/data/amazon-bedrock.json +1 -1
  275. package/dist/providers/data/ant-ling.json +1 -1
  276. package/dist/providers/data/anthropic.json +1 -1
  277. package/dist/providers/data/azure-openai-responses.json +1 -1
  278. package/dist/providers/data/baseten.json +1 -0
  279. package/dist/providers/data/cerebras.json +1 -1
  280. package/dist/providers/data/cloudflare-ai-gateway.json +1 -1
  281. package/dist/providers/data/cloudflare-workers-ai.json +1 -1
  282. package/dist/providers/data/deepseek.json +1 -1
  283. package/dist/providers/data/fireworks.json +1 -1
  284. package/dist/providers/data/github-copilot.json +1 -1
  285. package/dist/providers/data/google-vertex.json +1 -1
  286. package/dist/providers/data/google.json +1 -1
  287. package/dist/providers/data/groq.json +1 -1
  288. package/dist/providers/data/huggingface.json +1 -1
  289. package/dist/providers/data/kimi-coding.json +1 -1
  290. package/dist/providers/data/meta.json +1 -0
  291. package/dist/providers/data/minimax-cn.json +1 -1
  292. package/dist/providers/data/minimax.json +1 -1
  293. package/dist/providers/data/mistral.json +1 -1
  294. package/dist/providers/data/moonshotai-cn.json +1 -1
  295. package/dist/providers/data/moonshotai.json +1 -1
  296. package/dist/providers/data/nvidia.json +1 -1
  297. package/dist/providers/data/openai-codex.json +1 -1
  298. package/dist/providers/data/openai.json +1 -1
  299. package/dist/providers/data/opencode-go.json +1 -1
  300. package/dist/providers/data/opencode.json +1 -1
  301. package/dist/providers/data/openrouter.json +1 -1
  302. package/dist/providers/data/qwen-token-plan-cn.json +1 -1
  303. package/dist/providers/data/qwen-token-plan-individual.json +1 -0
  304. package/dist/providers/data/qwen-token-plan.json +1 -1
  305. package/dist/providers/data/radius.json +1 -0
  306. package/dist/providers/data/together.json +1 -1
  307. package/dist/providers/data/typesafe.json +1 -0
  308. package/dist/providers/data/vercel-ai-gateway.json +1 -1
  309. package/dist/providers/data/xai.json +1 -1
  310. package/dist/providers/data/xiaomi-token-plan-ams.json +1 -1
  311. package/dist/providers/data/xiaomi-token-plan-cn.json +1 -1
  312. package/dist/providers/data/xiaomi-token-plan-sgp.json +1 -1
  313. package/dist/providers/data/xiaomi.json +1 -1
  314. package/dist/providers/data/zai-coding-cn.json +1 -1
  315. package/dist/providers/data/zai.json +1 -1
  316. package/dist/providers/deepseek.models.d.ts +4 -2
  317. package/dist/providers/deepseek.models.d.ts.map +1 -1
  318. package/dist/providers/deepseek.models.js +4 -2
  319. package/dist/providers/deepseek.models.js.map +1 -1
  320. package/dist/providers/faux.d.ts +19 -13
  321. package/dist/providers/faux.d.ts.map +1 -1
  322. package/dist/providers/faux.js +109 -18
  323. package/dist/providers/faux.js.map +1 -1
  324. package/dist/providers/fireworks.models.d.ts +4 -2
  325. package/dist/providers/fireworks.models.d.ts.map +1 -1
  326. package/dist/providers/fireworks.models.js +4 -2
  327. package/dist/providers/fireworks.models.js.map +1 -1
  328. package/dist/providers/github-copilot.js +1 -1
  329. package/dist/providers/github-copilot.js.map +1 -1
  330. package/dist/providers/github-copilot.models.d.ts +4 -2
  331. package/dist/providers/github-copilot.models.d.ts.map +1 -1
  332. package/dist/providers/github-copilot.models.js +4 -2
  333. package/dist/providers/github-copilot.models.js.map +1 -1
  334. package/dist/providers/google-vertex.d.ts.map +1 -1
  335. package/dist/providers/google-vertex.js +15 -7
  336. package/dist/providers/google-vertex.js.map +1 -1
  337. package/dist/providers/google-vertex.models.d.ts +4 -2
  338. package/dist/providers/google-vertex.models.d.ts.map +1 -1
  339. package/dist/providers/google-vertex.models.js +4 -2
  340. package/dist/providers/google-vertex.models.js.map +1 -1
  341. package/dist/providers/google.models.d.ts +4 -2
  342. package/dist/providers/google.models.d.ts.map +1 -1
  343. package/dist/providers/google.models.js +4 -2
  344. package/dist/providers/google.models.js.map +1 -1
  345. package/dist/providers/groq.models.d.ts +4 -2
  346. package/dist/providers/groq.models.d.ts.map +1 -1
  347. package/dist/providers/groq.models.js +4 -2
  348. package/dist/providers/groq.models.js.map +1 -1
  349. package/dist/providers/huggingface.models.d.ts +4 -2
  350. package/dist/providers/huggingface.models.d.ts.map +1 -1
  351. package/dist/providers/huggingface.models.js +4 -2
  352. package/dist/providers/huggingface.models.js.map +1 -1
  353. package/dist/providers/images/register-builtins.d.ts +1 -1
  354. package/dist/providers/images/register-builtins.d.ts.map +1 -1
  355. package/dist/providers/images/register-builtins.js.map +1 -1
  356. package/dist/providers/kimi-coding.d.ts.map +1 -1
  357. package/dist/providers/kimi-coding.js +1 -0
  358. package/dist/providers/kimi-coding.js.map +1 -1
  359. package/dist/providers/kimi-coding.models.d.ts +4 -2
  360. package/dist/providers/kimi-coding.models.d.ts.map +1 -1
  361. package/dist/providers/kimi-coding.models.js +4 -2
  362. package/dist/providers/kimi-coding.models.js.map +1 -1
  363. package/dist/providers/meta.d.ts +3 -0
  364. package/dist/providers/meta.d.ts.map +1 -0
  365. package/dist/providers/meta.js +24 -0
  366. package/dist/providers/meta.js.map +1 -0
  367. package/dist/providers/meta.models.d.ts +6 -0
  368. package/dist/providers/meta.models.d.ts.map +1 -0
  369. package/dist/providers/meta.models.js +8 -0
  370. package/dist/providers/meta.models.js.map +1 -0
  371. package/dist/providers/minimax-cn.models.d.ts +4 -2
  372. package/dist/providers/minimax-cn.models.d.ts.map +1 -1
  373. package/dist/providers/minimax-cn.models.js +4 -2
  374. package/dist/providers/minimax-cn.models.js.map +1 -1
  375. package/dist/providers/minimax.models.d.ts +4 -2
  376. package/dist/providers/minimax.models.d.ts.map +1 -1
  377. package/dist/providers/minimax.models.js +4 -2
  378. package/dist/providers/minimax.models.js.map +1 -1
  379. package/dist/providers/mistral.models.d.ts +4 -2
  380. package/dist/providers/mistral.models.d.ts.map +1 -1
  381. package/dist/providers/mistral.models.js +4 -2
  382. package/dist/providers/mistral.models.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.models.d.ts +4 -2
  388. package/dist/providers/moonshotai.models.d.ts.map +1 -1
  389. package/dist/providers/moonshotai.models.js +4 -2
  390. package/dist/providers/moonshotai.models.js.map +1 -1
  391. package/dist/providers/nvidia.models.d.ts +4 -2
  392. package/dist/providers/nvidia.models.d.ts.map +1 -1
  393. package/dist/providers/nvidia.models.js +4 -2
  394. package/dist/providers/nvidia.models.js.map +1 -1
  395. package/dist/providers/openai-codex.d.ts.map +1 -1
  396. package/dist/providers/openai-codex.js +6 -2
  397. package/dist/providers/openai-codex.js.map +1 -1
  398. package/dist/providers/openai-codex.models.d.ts +4 -2
  399. package/dist/providers/openai-codex.models.d.ts.map +1 -1
  400. package/dist/providers/openai-codex.models.js +4 -2
  401. package/dist/providers/openai-codex.models.js.map +1 -1
  402. package/dist/providers/openai.d.ts.map +1 -1
  403. package/dist/providers/openai.js +11 -2
  404. package/dist/providers/openai.js.map +1 -1
  405. package/dist/providers/openai.models.d.ts +4 -2
  406. package/dist/providers/openai.models.d.ts.map +1 -1
  407. package/dist/providers/openai.models.js +4 -2
  408. package/dist/providers/openai.models.js.map +1 -1
  409. package/dist/providers/opencode-go.d.ts.map +1 -1
  410. package/dist/providers/opencode-go.js +4 -3
  411. package/dist/providers/opencode-go.js.map +1 -1
  412. package/dist/providers/opencode-go.models.d.ts +4 -2
  413. package/dist/providers/opencode-go.models.d.ts.map +1 -1
  414. package/dist/providers/opencode-go.models.js +4 -2
  415. package/dist/providers/opencode-go.models.js.map +1 -1
  416. package/dist/providers/opencode-headers.d.ts +4 -0
  417. package/dist/providers/opencode-headers.d.ts.map +1 -0
  418. package/dist/providers/opencode-headers.js +22 -0
  419. package/dist/providers/opencode-headers.js.map +1 -0
  420. package/dist/providers/opencode.d.ts +3 -1
  421. package/dist/providers/opencode.d.ts.map +1 -1
  422. package/dist/providers/opencode.js +10 -6
  423. package/dist/providers/opencode.js.map +1 -1
  424. package/dist/providers/opencode.models.d.ts +4 -2
  425. package/dist/providers/opencode.models.d.ts.map +1 -1
  426. package/dist/providers/opencode.models.js +4 -2
  427. package/dist/providers/opencode.models.js.map +1 -1
  428. package/dist/providers/openrouter.d.ts +1 -1
  429. package/dist/providers/openrouter.d.ts.map +1 -1
  430. package/dist/providers/openrouter.js +16 -3
  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.models.d.ts +4 -2
  437. package/dist/providers/qwen-token-plan-cn.models.d.ts.map +1 -1
  438. package/dist/providers/qwen-token-plan-cn.models.js +4 -2
  439. package/dist/providers/qwen-token-plan-cn.models.js.map +1 -1
  440. package/dist/providers/qwen-token-plan-individual.d.ts +3 -0
  441. package/dist/providers/qwen-token-plan-individual.d.ts.map +1 -0
  442. package/dist/providers/qwen-token-plan-individual.js +15 -0
  443. package/dist/providers/qwen-token-plan-individual.js.map +1 -0
  444. package/dist/providers/qwen-token-plan-individual.models.d.ts +6 -0
  445. package/dist/providers/qwen-token-plan-individual.models.d.ts.map +1 -0
  446. package/dist/providers/qwen-token-plan-individual.models.js +8 -0
  447. package/dist/providers/qwen-token-plan-individual.models.js.map +1 -0
  448. package/dist/providers/qwen-token-plan.models.d.ts +4 -2
  449. package/dist/providers/qwen-token-plan.models.d.ts.map +1 -1
  450. package/dist/providers/qwen-token-plan.models.js +4 -2
  451. package/dist/providers/qwen-token-plan.models.js.map +1 -1
  452. package/dist/providers/radius.d.ts.map +1 -1
  453. package/dist/providers/radius.js +53 -29
  454. package/dist/providers/radius.js.map +1 -1
  455. package/dist/providers/radius.models.d.ts +6 -0
  456. package/dist/providers/radius.models.d.ts.map +1 -0
  457. package/dist/providers/radius.models.js +8 -0
  458. package/dist/providers/radius.models.js.map +1 -0
  459. package/dist/providers/together.models.d.ts +4 -2
  460. package/dist/providers/together.models.d.ts.map +1 -1
  461. package/dist/providers/together.models.js +4 -2
  462. package/dist/providers/together.models.js.map +1 -1
  463. package/dist/providers/typesafe.d.ts +3 -0
  464. package/dist/providers/typesafe.d.ts.map +1 -0
  465. package/dist/providers/typesafe.js +18 -0
  466. package/dist/providers/typesafe.js.map +1 -0
  467. package/dist/providers/typesafe.models.d.ts +6 -0
  468. package/dist/providers/typesafe.models.d.ts.map +1 -0
  469. package/dist/providers/typesafe.models.js +8 -0
  470. package/dist/providers/typesafe.models.js.map +1 -0
  471. package/dist/providers/vercel-ai-gateway.d.ts.map +1 -1
  472. package/dist/providers/vercel-ai-gateway.js +5 -2
  473. package/dist/providers/vercel-ai-gateway.js.map +1 -1
  474. package/dist/providers/vercel-ai-gateway.models.d.ts +4 -2
  475. package/dist/providers/vercel-ai-gateway.models.d.ts.map +1 -1
  476. package/dist/providers/vercel-ai-gateway.models.js +4 -2
  477. package/dist/providers/vercel-ai-gateway.models.js.map +1 -1
  478. package/dist/providers/xai.d.ts +1 -1
  479. package/dist/providers/xai.d.ts.map +1 -1
  480. package/dist/providers/xai.js +2 -5
  481. package/dist/providers/xai.js.map +1 -1
  482. package/dist/providers/xai.models.d.ts +4 -2
  483. package/dist/providers/xai.models.d.ts.map +1 -1
  484. package/dist/providers/xai.models.js +4 -2
  485. package/dist/providers/xai.models.js.map +1 -1
  486. package/dist/providers/xiaomi-token-plan-ams.models.d.ts +4 -2
  487. package/dist/providers/xiaomi-token-plan-ams.models.d.ts.map +1 -1
  488. package/dist/providers/xiaomi-token-plan-ams.models.js +4 -2
  489. package/dist/providers/xiaomi-token-plan-ams.models.js.map +1 -1
  490. package/dist/providers/xiaomi-token-plan-cn.models.d.ts +4 -2
  491. package/dist/providers/xiaomi-token-plan-cn.models.d.ts.map +1 -1
  492. package/dist/providers/xiaomi-token-plan-cn.models.js +4 -2
  493. package/dist/providers/xiaomi-token-plan-cn.models.js.map +1 -1
  494. package/dist/providers/xiaomi-token-plan-sgp.models.d.ts +4 -2
  495. package/dist/providers/xiaomi-token-plan-sgp.models.d.ts.map +1 -1
  496. package/dist/providers/xiaomi-token-plan-sgp.models.js +4 -2
  497. package/dist/providers/xiaomi-token-plan-sgp.models.js.map +1 -1
  498. package/dist/providers/xiaomi.models.d.ts +4 -2
  499. package/dist/providers/xiaomi.models.d.ts.map +1 -1
  500. package/dist/providers/xiaomi.models.js +4 -2
  501. package/dist/providers/xiaomi.models.js.map +1 -1
  502. package/dist/providers/zai-coding-cn.models.d.ts +4 -2
  503. package/dist/providers/zai-coding-cn.models.d.ts.map +1 -1
  504. package/dist/providers/zai-coding-cn.models.js +4 -2
  505. package/dist/providers/zai-coding-cn.models.js.map +1 -1
  506. package/dist/providers/zai.models.d.ts +4 -2
  507. package/dist/providers/zai.models.d.ts.map +1 -1
  508. package/dist/providers/zai.models.js +4 -2
  509. package/dist/providers/zai.models.js.map +1 -1
  510. package/dist/types.d.ts +411 -127
  511. package/dist/types.d.ts.map +1 -1
  512. package/dist/types.js.map +1 -1
  513. package/dist/utils/abort.d.ts +8 -0
  514. package/dist/utils/abort.d.ts.map +1 -0
  515. package/dist/utils/abort.js +49 -0
  516. package/dist/utils/abort.js.map +1 -0
  517. package/dist/utils/assistant-message-frame.d.ts +77 -0
  518. package/dist/utils/assistant-message-frame.d.ts.map +1 -0
  519. package/dist/utils/assistant-message-frame.js +425 -0
  520. package/dist/utils/assistant-message-frame.js.map +1 -0
  521. package/dist/utils/diagnostics.d.ts +3 -2
  522. package/dist/utils/diagnostics.d.ts.map +1 -1
  523. package/dist/utils/diagnostics.js.map +1 -1
  524. package/dist/utils/draht-user-agent.d.ts +2 -0
  525. package/dist/utils/draht-user-agent.d.ts.map +1 -0
  526. package/dist/utils/draht-user-agent.js +12 -0
  527. package/dist/utils/draht-user-agent.js.map +1 -0
  528. package/dist/utils/error-body.d.ts.map +1 -1
  529. package/dist/utils/error-body.js +23 -4
  530. package/dist/utils/error-body.js.map +1 -1
  531. package/dist/utils/estimate.d.ts +2 -2
  532. package/dist/utils/estimate.d.ts.map +1 -1
  533. package/dist/utils/estimate.js +8 -29
  534. package/dist/utils/estimate.js.map +1 -1
  535. package/dist/utils/event-stream.d.ts.map +1 -1
  536. package/dist/utils/event-stream.js +30 -8
  537. package/dist/utils/event-stream.js.map +1 -1
  538. package/dist/utils/headers.d.ts +1 -1
  539. package/dist/utils/headers.d.ts.map +1 -1
  540. package/dist/utils/headers.js +10 -8
  541. package/dist/utils/headers.js.map +1 -1
  542. package/dist/utils/model-operations.d.ts +11 -0
  543. package/dist/utils/model-operations.d.ts.map +1 -0
  544. package/dist/utils/model-operations.js +47 -0
  545. package/dist/utils/model-operations.js.map +1 -0
  546. package/dist/utils/models-error.d.ts +8 -0
  547. package/dist/utils/models-error.d.ts.map +1 -0
  548. package/dist/utils/models-error.js +19 -0
  549. package/dist/utils/models-error.js.map +1 -0
  550. package/dist/utils/node-http-proxy.d.ts.map +1 -1
  551. package/dist/utils/node-http-proxy.js +53 -12
  552. package/dist/utils/node-http-proxy.js.map +1 -1
  553. package/dist/utils/oauth-page.d.ts.map +1 -0
  554. package/dist/utils/oauth-page.js.map +1 -0
  555. package/dist/utils/overflow.d.ts +11 -1
  556. package/dist/utils/overflow.d.ts.map +1 -1
  557. package/dist/utils/overflow.js +24 -6
  558. package/dist/utils/overflow.js.map +1 -1
  559. package/dist/utils/provider-retry.js +3 -2
  560. package/dist/utils/provider-retry.js.map +1 -1
  561. package/dist/utils/retry.d.ts +6 -1
  562. package/dist/utils/retry.d.ts.map +1 -1
  563. package/dist/utils/retry.js +19 -2
  564. package/dist/utils/retry.js.map +1 -1
  565. package/dist/utils/sleep.d.ts +2 -0
  566. package/dist/utils/sleep.d.ts.map +1 -0
  567. package/dist/utils/sleep.js +15 -0
  568. package/dist/utils/sleep.js.map +1 -0
  569. package/dist/utils/text.d.ts +9 -1
  570. package/dist/utils/text.d.ts.map +1 -1
  571. package/dist/utils/text.js +26 -0
  572. package/dist/utils/text.js.map +1 -1
  573. package/dist/utils/transcript.d.ts +84 -0
  574. package/dist/utils/transcript.d.ts.map +1 -0
  575. package/dist/utils/transcript.js +204 -0
  576. package/dist/utils/transcript.js.map +1 -0
  577. package/dist/utils/uuid.d.ts +2 -2
  578. package/dist/utils/uuid.d.ts.map +1 -1
  579. package/dist/utils/uuid.js +35 -40
  580. package/dist/utils/uuid.js.map +1 -1
  581. package/dist/utils/validation.d.ts.map +1 -1
  582. package/dist/utils/validation.js +40 -0
  583. package/dist/utils/validation.js.map +1 -1
  584. package/package.json +19 -13
  585. package/dist/auth/oauth/oauth-page.d.ts.map +0 -1
  586. package/dist/auth/oauth/oauth-page.js.map +0 -1
  587. package/dist/image-models.generated.d.ts +0 -605
  588. package/dist/image-models.generated.d.ts.map +0 -1
  589. package/dist/image-models.generated.js +0 -607
  590. package/dist/image-models.generated.js.map +0 -1
  591. package/dist/images-models.d.ts +0 -95
  592. package/dist/images-models.d.ts.map +0 -1
  593. package/dist/images-models.js +0 -140
  594. package/dist/images-models.js.map +0 -1
  595. package/dist/providers/openrouter-images.d.ts +0 -3
  596. package/dist/providers/openrouter-images.d.ts.map +0 -1
  597. package/dist/providers/openrouter-images.js +0 -22
  598. package/dist/providers/openrouter-images.js.map +0 -1
  599. package/dist/utils/deferred-tools.d.ts +0 -9
  600. package/dist/utils/deferred-tools.d.ts.map +0 -1
  601. package/dist/utils/deferred-tools.js +0 -36
  602. package/dist/utils/deferred-tools.js.map +0 -1
  603. /package/dist/{auth/oauth → utils}/oauth-page.d.ts +0 -0
  604. /package/dist/{auth/oauth → utils}/oauth-page.js +0 -0
package/dist/types.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { TelemetryContext } from "@draht/telemetry";
1
2
  import type { AnthropicOptions } from "./api/anthropic-messages.ts";
2
3
  import type { AzureOpenAIResponsesOptions } from "./api/azure-openai-responses.ts";
3
4
  import type { BedrockOptions } from "./api/bedrock-converse-stream.ts";
@@ -13,19 +14,22 @@ import type { AssistantMessageEventStream } from "./utils/event-stream.ts";
13
14
  export type { AssistantMessageEventStream } from "./utils/event-stream.ts";
14
15
  export type KnownApi = "openai-completions" | "mistral-conversations" | "openai-responses" | "azure-openai-responses" | "openai-codex-responses" | "anthropic-messages" | "bedrock-converse-stream" | "google-generative-ai" | "google-vertex" | "pi-messages";
15
16
  export type Api = KnownApi | (string & {});
16
- export type KnownImagesApi = "openrouter-images";
17
- export type ImagesApi = KnownImagesApi | (string & {});
18
- export type KnownProvider = "amazon-bedrock" | "ant-ling" | "anthropic" | "google" | "google-vertex" | "openai" | "azure-openai-responses" | "openai-codex" | "radius" | "nvidia" | "deepseek" | "github-copilot" | "xai" | "groq" | "cerebras" | "openrouter" | "vercel-ai-gateway" | "zai" | "zai-coding-cn" | "mistral" | "minimax" | "minimax-cn" | "moonshotai" | "moonshotai-cn" | "huggingface" | "fireworks" | "together" | "opencode" | "opencode-go" | "kimi-coding" | "cloudflare-workers-ai" | "cloudflare-ai-gateway" | "qwen-token-plan" | "qwen-token-plan-cn" | "xiaomi" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-sgp";
17
+ export type KnownImageApi = "openrouter-images";
18
+ export type ImageApi = KnownImageApi | (string & {});
19
+ export type KnownClassifierApi = "typesafe-system-one" | "cloudflare-workers-ai-system-one" | "llama-cpp-classify";
20
+ export type ClassifierApi = KnownClassifierApi | (string & {});
21
+ export type KnownProvider = "amazon-bedrock" | "ant-ling" | "anthropic" | "google" | "google-vertex" | "openai" | "azure-openai-responses" | "openai-codex" | "radius" | "typesafe" | "nvidia" | "deepseek" | "github-copilot" | "xai" | "groq" | "cerebras" | "openrouter" | "vercel-ai-gateway" | "zai" | "zai-coding-cn" | "mistral" | "minimax" | "minimax-cn" | "moonshotai" | "moonshotai-cn" | "huggingface" | "fireworks" | "together" | "baseten" | "opencode" | "opencode-go" | "kimi-coding" | "meta" | "cloudflare-workers-ai" | "cloudflare-ai-gateway" | "qwen-token-plan" | "qwen-token-plan-cn" | "qwen-token-plan-individual" | "xiaomi" | "xiaomi-token-plan-cn" | "xiaomi-token-plan-ams" | "xiaomi-token-plan-sgp";
19
22
  export type ProviderId = KnownProvider | string;
20
- export type KnownImagesProvider = "openrouter";
21
- export type ImagesProviderId = KnownImagesProvider | string;
23
+ export type ToolChoice = "auto" | "none";
22
24
  export type ThinkingLevel = "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
23
25
  export type ModelThinkingLevel = "off" | ThinkingLevel;
24
26
  export type ThinkingLevelMap = Partial<Record<ModelThinkingLevel, string | null>>;
25
27
  export type ChatTemplateKwargValue = string | number | boolean | null | {
26
- $var: "thinking.enabled" | "thinking.effort";
28
+ $var: "thinking.enabled" | "thinking.effort" | "thinking.budget";
27
29
  omitWhenOff?: boolean;
28
30
  };
31
+ /** Top-level request field used to cap reasoning tokens on OpenAI-compatible servers. */
32
+ export type ThinkingTokenBudgetField = "thinking_token_budget" | "thinking_budget" | "thinking_budget_tokens";
29
33
  /** Token budgets for each thinking level (token-based providers only) */
30
34
  export interface ThinkingBudgets {
31
35
  minimal?: number;
@@ -34,6 +38,11 @@ export interface ThinkingBudgets {
34
38
  high?: number;
35
39
  }
36
40
  export type CacheRetention = "none" | "short" | "long";
41
+ /**
42
+ * Best-effort prompt cache lifetime in seconds for each retention tier a request can ask for.
43
+ * A missing tier means the lifetime is unknown; draht does not warm such caches.
44
+ */
45
+ export type ModelPromptCache = Partial<Record<Exclude<CacheRetention, "none">, number>>;
37
46
  export type Transport = "sse" | "websocket" | "websocket-cached" | "auto";
38
47
  /** Provider-scoped environment overrides. Values take precedence over process.env. */
39
48
  export type ProviderEnv = Record<string, string>;
@@ -44,10 +53,11 @@ export interface ProviderResponse {
44
53
  status: number;
45
54
  headers: Record<string, string>;
46
55
  }
47
- export interface StreamOptions {
48
- temperature?: number;
49
- maxTokens?: number;
56
+ /** Authentication, HTTP transport, and lifecycle callbacks shared by provider requests. */
57
+ export interface ProviderRequestOptions<TModel = Model<Api>> {
50
58
  signal?: AbortSignal;
59
+ /** Explicit parent context for telemetry produced by this logical request. */
60
+ telemetryContext?: TelemetryContext;
51
61
  apiKey?: string;
52
62
  /**
53
63
  * Optional fetch implementation for provider HTTP requests.
@@ -56,31 +66,20 @@ export interface StreamOptions {
56
66
  */
57
67
  fetch?: FetchFunction;
58
68
  /**
59
- * Preferred transport for providers that support multiple transports.
60
- * Providers that do not support this option ignore it.
61
- */
62
- transport?: Transport;
63
- /**
64
- * Prompt cache retention preference. Providers map this to their supported values.
65
- * Default: "short".
66
- */
67
- cacheRetention?: CacheRetention;
68
- /**
69
- * Optional session identifier for providers that support session-based caching.
70
- * Providers can use this to enable prompt caching, request routing, or other
71
- * session-aware features. Ignored by providers that don't support it.
69
+ * Provider-scoped environment values. These take precedence over process.env for
70
+ * provider configuration such as regional settings, endpoint placeholders, and
71
+ * proxy variables.
72
72
  */
73
- sessionId?: string;
73
+ env?: ProviderEnv;
74
74
  /**
75
75
  * Optional callback for inspecting or replacing provider payloads before sending.
76
76
  * Return undefined to keep the payload unchanged.
77
77
  */
78
- onPayload?: (payload: unknown, model: Model<Api>) => unknown | undefined | Promise<unknown | undefined>;
78
+ onPayload?: (payload: unknown, model: TModel) => unknown | undefined | Promise<unknown | undefined>;
79
79
  /**
80
- * Optional callback invoked after an HTTP response is received and before
81
- * its body stream is consumed.
80
+ * Optional callback invoked after an HTTP response is received.
82
81
  */
83
- onResponse?: (response: ProviderResponse, model: Model<Api>) => void | Promise<void>;
82
+ onResponse?: (response: ProviderResponse, model: TModel) => void | Promise<void>;
84
83
  /**
85
84
  * Optional custom HTTP headers to include in API requests.
86
85
  * Merged with provider defaults; caller values override default headers.
@@ -95,12 +94,6 @@ export interface StreamOptions {
95
94
  * For example, OpenAI and Anthropic SDK clients default to 10 minutes.
96
95
  */
97
96
  timeoutMs?: number;
98
- /**
99
- * WebSocket connect timeout in milliseconds for providers that support
100
- * WebSocket transports. This covers the connection/open handshake only;
101
- * stream idleness after connection uses timeoutMs.
102
- */
103
- websocketConnectTimeoutMs?: number;
104
97
  /**
105
98
  * Maximum retry attempts for providers/SDKs that support client-side retries.
106
99
  * For example, OpenAI and Anthropic SDK clients default to 2.
@@ -114,20 +107,68 @@ export interface StreamOptions {
114
107
  * Default: 60000 (60 seconds). Set to 0 to disable the cap.
115
108
  */
116
109
  maxRetryDelayMs?: number;
110
+ }
111
+ export interface StreamOptions extends ProviderRequestOptions<Model<Api>> {
112
+ /**
113
+ * Optional callback invoked after an HTTP response is received and before
114
+ * its body stream is consumed.
115
+ */
116
+ onResponse?: (response: ProviderResponse, model: Model<Api>) => void | Promise<void>;
117
+ /**
118
+ * Optional observer for each parsed provider stream event before draht normalization.
119
+ * Event data is adapter-owned and must be treated as read-only.
120
+ * Adapter support is explicit; unsupported adapters do not invoke it.
121
+ */
122
+ onProviderStreamEvent?: (data: unknown, model: Model<Api>) => void | Promise<void>;
123
+ temperature?: number;
124
+ /**
125
+ * Arbitrary sampling parameters merged into the request body as-is, after the named request
126
+ * fields, so keys here override them. Lets custom OpenAI-compatible servers (llama.cpp, vLLM,
127
+ * SGLang, ...) receive parameters pi does not model, e.g. `top_p`, `top_k`, `min_p`,
128
+ * `repetition_penalty`. Merged over `Model.samplingParams` per key. Only applied by
129
+ * OpenAI-compatible adapters (completions, responses, Azure responses); other APIs ignore it.
130
+ */
131
+ samplingParams?: Record<string, unknown>;
132
+ maxTokens?: number;
133
+ /**
134
+ * Preferred transport for providers that support multiple transports.
135
+ * Providers that do not support this option ignore it.
136
+ */
137
+ transport?: Transport;
138
+ /**
139
+ * Prompt cache retention preference. Providers map this to their supported values.
140
+ * Default: "short".
141
+ */
142
+ cacheRetention?: CacheRetention;
143
+ /**
144
+ * Optional session identifier for providers that support session-based caching.
145
+ * Providers can use this to enable prompt caching, request routing, or other
146
+ * session-aware features. Ignored by providers that don't support it.
147
+ */
148
+ sessionId?: string;
149
+ /**
150
+ * WebSocket connect timeout in milliseconds for providers that support
151
+ * WebSocket transports. This covers the connection/open handshake only;
152
+ * stream idleness after connection uses timeoutMs.
153
+ */
154
+ websocketConnectTimeoutMs?: number;
117
155
  /**
118
156
  * Optional metadata to include in API requests.
119
157
  * Providers extract the fields they understand and ignore the rest.
120
158
  * For example, Anthropic uses `user_id` for abuse tracking and rate limiting.
121
159
  */
122
160
  metadata?: Record<string, unknown>;
161
+ }
162
+ export type ProviderStreamOptions = StreamOptions & Record<string, unknown>;
163
+ export interface DeferredFetchOptions extends ProviderRequestOptions<Model<Api>> {
123
164
  /**
124
- * Provider-scoped environment values. These take precedence over process.env for
125
- * provider configuration such as regional settings, endpoint placeholders, and
126
- * proxy variables.
165
+ * Maximum provider long-poll duration in milliseconds.
166
+ * Defaults to 0, which performs one status check.
127
167
  */
128
- env?: ProviderEnv;
168
+ wait?: number;
129
169
  }
130
- export type ProviderStreamOptions = StreamOptions & Record<string, unknown>;
170
+ /** Request options for best-effort deferred-response cancellation. */
171
+ export type DeferredCancelOptions = ProviderRequestOptions<Model<Api>>;
131
172
  /**
132
173
  * Maps known APIs to their full provider-specific stream option types.
133
174
  * Type-only imports from API implementation modules are erased at emit, so
@@ -152,66 +193,40 @@ export interface ApiOptionsMap {
152
193
  export type ApiStreamOptions<TApi extends Api> = TApi extends keyof ApiOptionsMap ? ApiOptionsMap[TApi] : StreamOptions & Record<string, unknown>;
153
194
  /**
154
195
  * The uniform stream contract of an API implementation module: every module
155
- * under `src/api/` exports exactly `stream` and `streamSimple`, so the module
156
- * itself satisfies this interface. Lazy wrappers (`lazyApi()`) and provider
196
+ * under `src/api/` exports `stream` and `streamSimple`; capable modules may also
197
+ * export deferred-response methods. Lazy wrappers (`lazyApi()`) and provider
157
198
  * factories pass these around as values. This is the untyped dispatch shape;
158
199
  * per-API option typing lives on the implementation modules themselves and on
159
200
  * `Provider.stream()` via `ApiStreamOptions`.
160
201
  */
161
202
  export interface ProviderStreams {
162
- stream(model: Model<Api>, context: Context, options?: StreamOptions): AssistantMessageEventStream;
163
- streamSimple(model: Model<Api>, context: Context, options?: SimpleStreamOptions): AssistantMessageEventStream;
203
+ stream(model: Model<Api>, context: TranscriptContext, options?: StreamOptions): AssistantMessageEventStream;
204
+ streamSimple(model: Model<Api>, context: TranscriptContext, options?: SimpleStreamOptions): AssistantMessageEventStream;
205
+ fetchDeferred?(model: Model<Api>, handle: DeferredHandle, options?: DeferredFetchOptions): AssistantMessageEventStream;
206
+ cancelDeferred?(model: Model<Api>, handle: DeferredHandle, options?: DeferredCancelOptions): Promise<void>;
164
207
  }
165
208
  /**
166
209
  * The uniform contract of an image-generation API implementation module:
167
210
  * every image API module under `src/api/` exports exactly `generateImages`,
168
- * so the module itself satisfies this interface. Lazy wrappers and image
169
- * provider factories pass these around as values.
211
+ * so the module itself satisfies this interface. Lazy wrappers and
212
+ * `createProvider({ images })` pass these around as values.
170
213
  */
171
214
  export interface ProviderImages {
172
- generateImages(model: ImagesModel<ImagesApi>, context: ImagesContext, options?: ImagesOptions): Promise<AssistantImages>;
215
+ generateImages(model: ImageModel<ImageApi>, context: ImagesContext, options?: ImagesOptions): Promise<AssistantImages>;
173
216
  }
174
- export interface ImagesOptions {
175
- signal?: AbortSignal;
176
- apiKey?: string;
177
- /** Optional fetch implementation for provider HTTP requests. Defaults to `globalThis.fetch`. */
178
- fetch?: FetchFunction;
179
- /**
180
- * Provider-scoped environment values. These take precedence over process.env for
181
- * provider configuration such as endpoint placeholders and proxy variables.
182
- */
183
- env?: ProviderEnv;
184
- /**
185
- * Optional callback for inspecting or replacing provider payloads before sending.
186
- * Return undefined to keep the payload unchanged.
187
- */
188
- onPayload?: (payload: unknown, model: ImagesModel<ImagesApi>) => unknown | undefined | Promise<unknown | undefined>;
189
- /**
190
- * Optional callback invoked after an HTTP response is received.
191
- */
192
- onResponse?: (response: ProviderResponse, model: ImagesModel<ImagesApi>) => void | Promise<void>;
193
- /**
194
- * Optional custom HTTP headers to include in API requests.
195
- * Merged with provider defaults; can override default headers.
196
- * A null value suppresses a provider/API default header with the same name.
197
- */
198
- headers?: ProviderHeaders;
199
- /**
200
- * HTTP request timeout in milliseconds for providers/SDKs that support it.
201
- */
202
- timeoutMs?: number;
203
- /**
204
- * Maximum retry attempts for providers/SDKs that support client-side retries.
205
- */
206
- maxRetries?: number;
217
+ /** The uniform contract implemented by classifier API modules. */
218
+ export interface ProviderClassifier {
219
+ classify(model: ClassifierModel<ClassifierApi>, context: ClassifierContext, options?: ClassifierOptions): Promise<ClassifierResult>;
220
+ }
221
+ export interface ClassifierOptions extends ProviderRequestOptions<ClassifierModel<ClassifierApi>> {
207
222
  /**
208
- * Maximum delay in milliseconds to wait for a retry when the server requests a long wait.
209
- * If the server's requested delay exceeds this value, the request fails immediately
210
- * with an error containing the requested delay, allowing higher-level retry logic
211
- * to handle it with user visibility.
212
- * Default: 60000 (60 seconds). Set to 0 to disable the cap.
223
+ * Divides the answer logits by this value before they are normalized into probabilities.
224
+ * Values above 1 soften the distribution; values below 1 sharpen it. Must be positive.
225
+ * APIs that cannot apply it ignore it.
213
226
  */
214
- maxRetryDelayMs?: number;
227
+ temperature?: number;
228
+ }
229
+ export interface ImagesOptions extends ProviderRequestOptions<ImageModel<ImageApi>> {
215
230
  /**
216
231
  * Optional metadata to include in API requests.
217
232
  * Providers extract the fields they understand and ignore the rest.
@@ -219,13 +234,25 @@ export interface ImagesOptions {
219
234
  metadata?: Record<string, unknown>;
220
235
  }
221
236
  export type ProviderImagesOptions = ImagesOptions & Record<string, unknown>;
237
+ export interface AnthropicAllowedFallbackModel {
238
+ provider: ProviderId;
239
+ model: string;
240
+ cost: ModelCost;
241
+ }
222
242
  export interface SimpleStreamOptions extends StreamOptions {
243
+ /** Provider-neutral tool selection for simple requests. When omitted, adapters use provider-specific behavior. */
244
+ toolChoice?: ToolChoice;
223
245
  reasoning?: ThinkingLevel;
246
+ /** Ask a capable provider to return a durable handle and continue the request asynchronously. */
247
+ deferred?: boolean | {
248
+ window?: "15m" | "1h" | "24h";
249
+ };
224
250
  /** Custom token budgets for thinking levels (token-based providers only) */
225
251
  thinkingBudgets?: ThinkingBudgets;
226
252
  }
227
- export type StreamFunction<TApi extends Api = Api, TOptions extends StreamOptions = StreamOptions> = (model: Model<TApi>, context: Context, options?: TOptions) => AssistantMessageEventStream;
228
- export type ImagesFunction<TApi extends ImagesApi = ImagesApi, TOptions extends ImagesOptions = ImagesOptions> = (model: ImagesModel<TApi>, context: ImagesContext, options?: TOptions) => Promise<AssistantImages>;
253
+ export type StreamFunction<TApi extends Api = Api, TOptions extends StreamOptions = StreamOptions> = (model: Model<TApi>, context: TranscriptContext, options?: TOptions) => AssistantMessageEventStream;
254
+ export type ImagesFunction<TOptions extends ImagesOptions = ImagesOptions> = (model: ImageModel<ImageApi>, context: ImagesContext, options?: TOptions) => Promise<AssistantImages>;
255
+ export type ClassifierFunction<TOptions extends ClassifierOptions = ClassifierOptions> = (model: ClassifierModel<ClassifierApi>, context: ClassifierContext, options?: TOptions) => Promise<ClassifierResult>;
229
256
  export interface TextSignatureV1 {
230
257
  v: 1;
231
258
  id: string;
@@ -254,8 +281,10 @@ export interface ToolCall {
254
281
  type: "toolCall";
255
282
  id: string;
256
283
  name: string;
257
- arguments: Record<string, any>;
284
+ arguments: JsonObject;
258
285
  thoughtSignature?: string;
286
+ /** OpenAI Responses namespace for calls to dynamically loaded or namespaced tools. */
287
+ namespace?: string;
259
288
  }
260
289
  export interface Usage {
261
290
  input: number;
@@ -279,7 +308,62 @@ export interface Usage {
279
308
  total: number;
280
309
  };
281
310
  }
282
- export type StopReason = "pending" | "stop" | "length" | "toolUse" | "error" | "aborted";
311
+ export type StopReason = "pending" | "stop" | "length" | "toolUse" | "error" | "aborted" | "deferred";
312
+ export type JsonValue = null | boolean | number | string | readonly JsonValue[] | JsonObject;
313
+ export type JsonObject = {
314
+ [key: string]: JsonValue;
315
+ };
316
+ type IsAny<T> = 0 extends 1 & T ? true : false;
317
+ type IsExactlyJsonValue<T> = [T] extends [JsonValue] ? ([JsonValue] extends [T] ? true : false) : false;
318
+ type IsJsonProperty<T> = IsAny<T> extends true ? false : unknown extends T ? false : [Exclude<T, undefined>] extends [never] ? true : IsJsonCompatible<Exclude<T, undefined>>;
319
+ type InvalidJsonKeys<T extends object> = {
320
+ [TKey in keyof T]-?: TKey extends string | number ? (IsJsonProperty<T[TKey]> extends true ? never : TKey) : TKey;
321
+ }[keyof T];
322
+ type IsJsonCompatible<T> = IsAny<T> extends true ? false : unknown extends T ? false : IsExactlyJsonValue<T> extends true ? true : T extends null | boolean | number | string ? true : T extends undefined ? false : T extends readonly (infer TItem)[] ? IsJsonCompatible<TItem> : T extends (...args: never[]) => unknown ? false : T extends object ? [InvalidJsonKeys<T>] extends [never] ? true : false : false;
323
+ /** The JSON representation of a typed in-memory value. Optional object properties remain optional. */
324
+ export type JsonRepresentation<T> = IsAny<T> extends true ? JsonValue : unknown extends T ? JsonValue : [T] extends [JsonValue] ? T : T extends readonly unknown[] ? {
325
+ [TKey in keyof T]: JsonRepresentation<Exclude<T[TKey], undefined>>;
326
+ } : T extends object ? {
327
+ [TKey in keyof T]: JsonRepresentation<Exclude<T[TKey], undefined>>;
328
+ } : never;
329
+ export interface DeferredHandle {
330
+ provider: string;
331
+ modelId: string;
332
+ api: string;
333
+ /** Provider token, such as a response id or batch id plus row id. */
334
+ id: string;
335
+ expiresAt?: number;
336
+ pollAfterMs?: number;
337
+ /** Provider conversion data required to reconstruct the final assistant message. */
338
+ data?: JsonValue;
339
+ }
340
+ /**
341
+ * System instructions and tool declarations at one point in the transcript.
342
+ *
343
+ * The leading system message is the system prompt. Later system messages change it:
344
+ * `content` adds instructions from that point on, `sections` replace or remove named
345
+ * prompt sections, and `toolsAdded`/`toolsRemoved` change the tool set. Replaying
346
+ * every system message in order yields the current prompt and tools. Providers that
347
+ * accept system messages mid-conversation send each one in place; other providers
348
+ * rebuild the leading system message from the replayed state.
349
+ */
350
+ export interface SystemMessage {
351
+ role: "system";
352
+ /** Instruction text. On the leading message this is the base prompt; later, additional instructions. */
353
+ content: string | TextContent[];
354
+ /**
355
+ * Named, ordered prompt sections rendered verbatim after `content`. The leading message
356
+ * declares them; later messages replace sections by name, and `null` removes one. Keep
357
+ * each section self-delimiting (a tag, a heading) so the model can relate an update to
358
+ * the original. Avoid integer-like names; JSON objects reorder those.
359
+ */
360
+ sections?: Record<string, string | null>;
361
+ /** Complete definitions of tools that become available at this point. */
362
+ toolsAdded?: Tool[];
363
+ /** Tools that stop being available at this point. */
364
+ toolsRemoved?: ToolReference[];
365
+ timestamp: number;
366
+ }
283
367
  export interface UserMessage {
284
368
  role: "user";
285
369
  content: string | (TextContent | ImageContent)[];
@@ -293,31 +377,57 @@ export interface AssistantMessage {
293
377
  model: string;
294
378
  responseModel?: string;
295
379
  responseId?: string;
380
+ /** Exact provider-native effort level used for this response. Absent for legacy or unmanaged responses. */
381
+ providerThinkingLevel?: string;
382
+ /** draht thinking level the agent loop requested for this response. Absent outside the agent loop and for legacy responses. */
383
+ thinkingLevel?: ModelThinkingLevel;
296
384
  diagnostics?: AssistantMessageDiagnostic[];
297
385
  usage: Usage;
298
386
  stopReason: StopReason;
387
+ deferred?: DeferredHandle;
299
388
  errorMessage?: string;
300
389
  rawStopReason?: string;
390
+ /**
391
+ * Provider indication of whether the model explicitly ended its turn.
392
+ * Preserved for debugging and does not currently affect agent control flow.
393
+ */
394
+ endTurn?: boolean;
301
395
  timestamp: number;
302
396
  }
303
- export interface ToolResultMessage<TDetails = any> {
397
+ /** A tool call that another tool made while it ran, for example from a codemode script. */
398
+ export interface NestedToolCallRecord {
399
+ id: string;
400
+ name: string;
401
+ /** Omitted when over the size limits; `argumentsBytes` then gives their size. */
402
+ arguments?: JsonObject;
403
+ /** UTF-8 size of the arguments as JSON, set when `arguments` is omitted. */
404
+ argumentsBytes?: number;
405
+ /** `unfinished`: the call was still running when the calling tool finished. */
406
+ status: "ok" | "error" | "unfinished";
407
+ durationMs?: number;
408
+ /** Error text, truncated. */
409
+ error?: string;
410
+ }
411
+ /** Bounded record of the nested calls a tool made. Results are not recorded. */
412
+ export interface NestedToolCalls {
413
+ calls: NestedToolCallRecord[];
414
+ /** False when calls were dropped, arguments omitted, or calls had not finished. */
415
+ complete: boolean;
416
+ }
417
+ export type ToolResultMessage<TDetails = JsonValue> = IsJsonCompatible<TDetails> extends true ? {
304
418
  role: "toolResult";
305
419
  toolCallId: string;
306
420
  toolName: string;
307
421
  content: (TextContent | ImageContent)[];
308
- details?: TDetails;
422
+ details?: JsonRepresentation<TDetails>;
309
423
  /** Usage from the tool execution itself, if available. Not part of main LLM context accounting. */
310
424
  usage?: Usage;
311
- /**
312
- * Names from `Context.tools` that became available after this result.
313
- * Providers with native deferred tool loading use this as the load point;
314
- * other providers ignore it and use `Context.tools` normally.
315
- */
316
- addedToolNames?: string[];
425
+ /** Calls this tool made to other tools. Kept for the session record; not sent to the model. */
426
+ nestedCalls?: NestedToolCalls;
317
427
  isError: boolean;
318
428
  timestamp: number;
319
- }
320
- export type Message = UserMessage | AssistantMessage | ToolResultMessage;
429
+ } : never;
430
+ export type Message = SystemMessage | UserMessage | AssistantMessage | ToolResultMessage;
321
431
  export type ImagesInputContent = TextContent | ImageContent;
322
432
  export type ImagesOutputContent = TextContent | ImageContent;
323
433
  export interface ImagesContext {
@@ -325,8 +435,8 @@ export interface ImagesContext {
325
435
  }
326
436
  export type ImagesStopReason = "stop" | "error" | "aborted";
327
437
  export interface AssistantImages {
328
- api: ImagesApi;
329
- provider: ImagesProviderId;
438
+ api: ImageApi;
439
+ provider: ProviderId;
330
440
  model: string;
331
441
  output: ImagesOutputContent[];
332
442
  responseId?: string;
@@ -335,6 +445,57 @@ export interface AssistantImages {
335
445
  errorMessage?: string;
336
446
  timestamp: number;
337
447
  }
448
+ export interface ClassifierChoiceQuestion {
449
+ type: "choice";
450
+ instructions: string;
451
+ criteria: Record<string, string>;
452
+ }
453
+ export interface ClassifierScoreQuestion {
454
+ type: "score";
455
+ instructions: string;
456
+ criteria: string[];
457
+ }
458
+ export interface ClassifierBoolQuestion {
459
+ type: "bool";
460
+ instructions: string;
461
+ criteria: {
462
+ true: string;
463
+ false: string;
464
+ };
465
+ }
466
+ export type ClassifierQuestion = ClassifierChoiceQuestion | ClassifierScoreQuestion | ClassifierBoolQuestion;
467
+ export interface ClassifierContext {
468
+ state: JsonObject;
469
+ questions: Record<string, ClassifierQuestion>;
470
+ }
471
+ export interface ClassifierChoiceAnswer {
472
+ type: "choice";
473
+ choice: string;
474
+ probabilities: Record<string, number>;
475
+ confidence: number;
476
+ }
477
+ export interface ClassifierScoreAnswer {
478
+ type: "score";
479
+ score: number;
480
+ confidence: number;
481
+ }
482
+ export interface ClassifierBoolAnswer {
483
+ type: "bool";
484
+ probability: number;
485
+ }
486
+ export type ClassifierAnswer = ClassifierChoiceAnswer | ClassifierScoreAnswer | ClassifierBoolAnswer;
487
+ export type ClassifierStopReason = "stop" | "error" | "aborted";
488
+ export interface ClassifierResult {
489
+ api: ClassifierApi;
490
+ provider: ProviderId;
491
+ model: string;
492
+ answers: Record<string, ClassifierAnswer>;
493
+ /** Token usage and its cost at the model's catalog price, when the service reports token counts. */
494
+ usage?: Usage;
495
+ stopReason: ClassifierStopReason;
496
+ errorMessage?: string;
497
+ timestamp: number;
498
+ }
338
499
  import type { TSchema } from "typebox";
339
500
  /** OpenAI grammar variants for constrained sampling. */
340
501
  export type GrammarFormat = "openai_lark" | "openai_regex";
@@ -359,18 +520,46 @@ export interface Tool<TParameters extends TSchema = TSchema> {
359
520
  parameters: TParameters;
360
521
  constrainedSampling?: false | ConstrainedSamplingConfig;
361
522
  }
523
+ export interface ToolReference {
524
+ name: string;
525
+ }
526
+ /**
527
+ * Request input accepted by the public stream entry points (`Models.stream()`,
528
+ * `streamSimple()`, ...). `systemPrompt` and `tools` are shorthand for a leading
529
+ * system message; `normalizeContext()` folds them into one before the request
530
+ * reaches a provider.
531
+ */
362
532
  export interface Context {
363
533
  systemPrompt?: string;
364
534
  messages: Message[];
365
535
  tools?: Tool[];
366
536
  }
537
+ declare const transcriptContextBrand: unique symbol;
538
+ /**
539
+ * Normalized request context passed to providers and API implementations. The
540
+ * prompt and tool declarations are carried by the transcript's system messages.
541
+ * Only `normalizeContext()` produces this type, so a raw `Context` cannot reach
542
+ * provider code by accident.
543
+ */
544
+ export type TranscriptContext = {
545
+ messages: Message[];
546
+ readonly [transcriptContextBrand]: true;
547
+ };
367
548
  /**
368
549
  * Event protocol for AssistantMessageEventStream.
369
550
  *
370
- * Streams should emit `start` before partial updates, then terminate with either:
371
- * - `done` carrying the final successful AssistantMessage, or
372
- * - `error` carrying the final AssistantMessage with stopReason "error" or "aborted"
373
- * and errorMessage.
551
+ * Successful streams emit `start` before partial updates and terminate with
552
+ * `done`. A stream may terminate directly with `error` when request setup fails
553
+ * before generation starts; after `start`, failures also terminate with `error`.
554
+ * Direct `streamSimple()` calls throw synchronously when request auth is missing.
555
+ * Updates and `done` must never appear before `start`.
556
+ *
557
+ * `partial` is the shared live response-so-far helper, not an event-time
558
+ * snapshot. Text and thinking blocks are empty when their `*_start` event is
559
+ * emitted and grow only through their corresponding `*_delta` events until the
560
+ * authoritative `*_end`. Redacted thinking may be complete at start and emit no
561
+ * deltas. Tool-call arguments at `toolcall_start` are provider-specific;
562
+ * `toolcall_delta` carries subsequent JSON updates.
374
563
  */
375
564
  export type AssistantMessageEvent = {
376
565
  type: "start";
@@ -419,7 +608,7 @@ export type AssistantMessageEvent = {
419
608
  partial: AssistantMessage;
420
609
  } | {
421
610
  type: "done";
422
- reason: Extract<StopReason, "stop" | "length" | "toolUse">;
611
+ reason: Extract<StopReason, "stop" | "length" | "toolUse" | "deferred">;
423
612
  message: AssistantMessage;
424
613
  } | {
425
614
  type: "error";
@@ -439,6 +628,8 @@ export interface OpenAICompletionsCompat {
439
628
  supportsReasoningEffort?: boolean;
440
629
  /** Whether the provider supports `stream_options: { include_usage: true }` for token usage in streaming responses. Default: true. */
441
630
  supportsUsageInStreaming?: boolean;
631
+ /** Whether streamed responses include `finish_reason`. When false, pi infers `stop` or `toolUse` when the stream ends. Default: true. */
632
+ supportsFinishReason?: boolean;
442
633
  /** Which field to use for max tokens. Default: auto-detected from URL. */
443
634
  maxTokensField?: "max_completion_tokens" | "max_tokens";
444
635
  /** Whether tool results require the `name` field. Default: auto-detected from URL. */
@@ -449,47 +640,74 @@ export interface OpenAICompletionsCompat {
449
640
  requiresThinkingAsText?: boolean;
450
641
  /** Whether all replayed assistant messages must include an empty reasoning_content field when reasoning is enabled. Default: auto-detected from URL. */
451
642
  requiresReasoningContentOnAssistantMessages?: boolean;
452
- /** Format for reasoning/thinking parameter. "openai" uses reasoning_effort, "openrouter" uses reasoning: { effort }, "deepseek" uses thinking: { type } plus reasoning_effort when supported, "together" uses reasoning: { enabled } plus reasoning_effort when supported, "zai" uses thinking: { type }, "qwen" uses top-level enable_thinking: boolean, "qwen-chat-template" uses chat_template_kwargs.enable_thinking and preserve_thinking, "chat-template" uses configurable chat_template_kwargs, "string-thinking" uses top-level thinking: string, and "ant-ling" uses reasoning: { effort } only when the mapped effort is non-null. Default: "openai". */
453
- thinkingFormat?: "openai" | "openrouter" | "deepseek" | "together" | "zai" | "qwen" | "chat-template" | "qwen-chat-template" | "string-thinking" | "ant-ling";
454
- /** Kwargs to send as `chat_template_kwargs` when `thinkingFormat` is `chat-template`. Use `{ "$var": "thinking.enabled" }` or `{ "$var": "thinking.effort" }` for pi-controlled thinking values. */
643
+ /** Format for reasoning/thinking parameter. "openai" uses reasoning_effort, "openrouter" uses reasoning: { effort }, "deepseek" uses thinking: { type } plus reasoning_effort when supported, "together" uses reasoning: { enabled } plus reasoning_effort when supported, "baseten" uses configurable chat_template_args plus reasoning_effort when supported, "zai" uses thinking: { type }, "qwen" uses top-level enable_thinking: boolean, "qwen-chat-template" uses chat_template_kwargs.enable_thinking and preserve_thinking, "chat-template" uses configurable chat_template_kwargs, "string-thinking" uses top-level thinking: string, and "ant-ling" uses reasoning: { effort } only when the mapped effort is non-null. Default: "openai". */
644
+ thinkingFormat?: "openai" | "openrouter" | "deepseek" | "together" | "baseten" | "zai" | "qwen" | "chat-template" | "qwen-chat-template" | "string-thinking" | "ant-ling";
645
+ /** Kwargs to send as `chat_template_kwargs` when `thinkingFormat` is `chat-template`. Use `{ "$var": "thinking.enabled" }`, `{ "$var": "thinking.effort" }`, or `{ "$var": "thinking.budget" }` for pi-controlled thinking values. */
455
646
  chatTemplateKwargs?: Record<string, ChatTemplateKwargValue>;
647
+ /** Arguments to send as `chat_template_args` when `thinkingFormat` is `baseten`. Use `{ "$var": "thinking.enabled" }`, `{ "$var": "thinking.effort" }`, or `{ "$var": "thinking.budget" }` for pi-controlled thinking values. */
648
+ chatTemplateArgs?: Record<string, ChatTemplateKwargValue>;
456
649
  /** OpenRouter-compatible routing preferences sent as the `provider` request field. */
457
650
  openRouterRouting?: OpenRouterRouting;
458
651
  /** Vercel AI Gateway routing preferences. Only used when baseUrl points to Vercel AI Gateway. */
459
652
  vercelGatewayRouting?: VercelGatewayRouting;
460
653
  /** Whether z.ai supports top-level `tool_stream: true` for streaming tool call deltas. Default: false. */
461
654
  zaiToolStream?: boolean;
655
+ /**
656
+ * Top-level request field used to cap reasoning tokens from `thinkingBudgets`.
657
+ * Reasoning and the answer share `max_tokens` on these endpoints, so without a budget a
658
+ * reasoning-heavy turn can consume the whole response and emit no answer.
659
+ * `"thinking_token_budget"` is vLLM, `"thinking_budget"` is Qwen/DashScope/SGLang,
660
+ * `"thinking_budget_tokens"` is llama.cpp. Off by default; not set on the generated catalog.
661
+ */
662
+ thinkingTokenBudgetField?: ThinkingTokenBudgetField;
663
+ /** Alias for `thinkingTokenBudgetField: "thinking_token_budget"` (vLLM). Prefer `thinkingTokenBudgetField`. Default: false. */
664
+ supportsThinkingTokenBudget?: boolean;
462
665
  /** Whether the provider supports OpenAI custom tools with Lark/regex grammar formats. When false, grammar-constrained tools fall back to normal function tools. Default: false; the generated model catalog enables it for capable models. */
463
666
  supportsOpenAIGrammarTools?: boolean;
464
- /** Whether the provider supports the `strict` field in tool definitions. Default: true. */
667
+ /** Whether the exact model accepts system or developer messages after the conversation has started. When false, later system messages are folded into the leading system message. Default: false; the generated model catalog enables it for verified models. */
668
+ supportsMidConvoSystemMessages?: boolean;
669
+ /** Whether system messages can introduce additional tools mid-conversation. Requires `supportsMidConvoSystemMessages`. Default: false; the generated model catalog enables it for capable models. */
670
+ supportsMidConvoToolAdditions?: boolean;
671
+ /** Whether the provider supports the `strict` field in tool definitions. Default: false; generated capable models enable it explicitly. */
465
672
  supportsStrictMode?: boolean;
466
673
  /** Cache control convention for prompt caching. "anthropic" applies Anthropic-style `cache_control` markers to the system prompt, last tool definition, and last user, assistant, or tool-result text content. */
467
674
  cacheControlFormat?: "anthropic";
468
- /** Whether to send session-affinity data from `options.sessionId`. Default: false. */
675
+ /** Whether to send session-affinity data from `options.sessionId`. Default: true for OpenRouter endpoints, false otherwise. */
469
676
  sendSessionAffinityHeaders?: boolean;
470
- /** Provider-specific deferred tool serialization mode. */
471
- deferredToolsMode?: "kimi";
472
677
  /** Session-affinity header format: `openai` sends `session_id`, `x-client-request-id`, and `x-session-affinity`; `openai-nosession` sends `x-client-request-id` and `x-session-affinity`; `openrouter` sends `x-session-id`. Does not affect the `prompt_cache_key` body param, which is governed by cache retention. Default: auto-detected. */
473
678
  sessionAffinityFormat?: SessionAffinityFormat;
474
679
  /** Whether the provider supports long prompt cache retention (`prompt_cache_retention: "24h"` or Anthropic-style `cache_control.ttl: "1h"`, depending on format). Default: true. */
475
680
  supportsLongCacheRetention?: boolean;
681
+ /**
682
+ * vLLM scheduler priority sent as the top-level `priority` request field (lower values are
683
+ * handled earlier; server default 0). Only meaningful when vLLM runs with
684
+ * `--scheduling-policy priority`; useful for keeping background/batch work from stalling
685
+ * interactive sessions. Off by default; not set on the generated catalog.
686
+ */
687
+ vllmPriority?: number;
476
688
  }
477
689
  /** Compatibility settings for OpenAI Responses APIs. */
478
690
  export interface OpenAIResponsesCompat {
479
691
  /** Whether the provider supports the `developer` role (vs `system`). Default: true. */
480
692
  supportsDeveloperRole?: boolean;
693
+ /** Whether the exact model accepts developer or system messages after the conversation has started. When false, later system messages are folded into the leading system message. Default: false; the generated model catalog enables it for verified models. */
694
+ supportsMidConvoSystemMessages?: boolean;
481
695
  /** Session-affinity header format: `openai` sends `session_id` and `x-client-request-id`; `openai-nosession` sends `x-client-request-id`; `openrouter` sends `x-session-id`. Does not affect the `prompt_cache_key` body param, which is governed by cache retention. Default: auto-detected. */
482
696
  sessionAffinityFormat?: SessionAffinityFormat;
483
- /** Whether the provider supports `prompt_cache_retention: "24h"`. Default: true. */
697
+ /** Whether the provider supports long prompt cache retention. This uses `prompt_cache_options.ttl: "30m"` on GPT-5.6+ and `prompt_cache_retention: "24h"` on earlier models. Default: true. */
484
698
  supportsLongCacheRetention?: boolean;
485
699
  /** Whether the provider supports strict JSON-schema function tools. Defaults are API-specific; generated OpenAI models enable it explicitly. */
486
700
  supportsStrictMode?: boolean;
487
701
  /** Whether to emit OpenAI custom tools with Lark/regex grammar formats. When false, grammar-constrained tools fall back to normal function tools. Default: false; the generated model catalog enables it for capable models. */
488
702
  supportsOpenAIGrammarTools?: boolean;
489
- /** Whether the model supports client-executed tool search for deferred tools. Default: false. */
703
+ /** Whether the model supports message-anchored `additional_tools` input items. Default: false. */
704
+ supportsAdditionalTools?: boolean;
705
+ /** Whether the model supports client-executed tool search for transcript-anchored additions. Default: false. */
490
706
  supportsToolSearch?: boolean;
491
- /** Whether the model accepts `prompt_cache_options` (OpenAI GPT-5.6+ explicit prompt caching). Older OpenAI models reject the parameter. Default: false. */
707
+ /** Whether the model accepts `prompt_cache_options` (OpenAI GPT-5.6+ prompt caching). Older OpenAI models reject the parameter. Default: false. */
492
708
  supportsExplicitPromptCacheMode?: boolean;
709
+ /** Whether the provider accepts the `max_output_tokens` parameter. Some Codex-protocol gateways reject it. Default: true. */
710
+ supportsMaxOutputTokens?: boolean;
493
711
  }
494
712
  /** Compatibility settings for Anthropic Messages-compatible APIs. */
495
713
  export interface AnthropicMessagesCompat {
@@ -511,6 +729,8 @@ export interface AnthropicMessagesCompat {
511
729
  * Default: false.
512
730
  */
513
731
  sendSessionAffinityHeaders?: boolean;
732
+ /** Session-affinity format. `"openrouter"` sends `x-session-id`; when unset, sends `x-session-affinity`. */
733
+ sessionAffinityFormat?: "openrouter";
514
734
  /**
515
735
  * Whether the provider supports Anthropic-style `cache_control` markers on
516
736
  * tool definitions. When false, `cache_control` is omitted from tool params.
@@ -539,18 +759,30 @@ export interface AnthropicMessagesCompat {
539
759
  allowEmptySignature?: boolean;
540
760
  /** Whether the provider supports Anthropic strict tool schemas. Default: false; generated Anthropic models enable it explicitly. */
541
761
  supportsStrictTools?: boolean;
762
+ /** Whether the exact model transport supports effort-only system messages and thinking binding controls. Default: false. */
763
+ supportsMidConvoEffort?: boolean;
764
+ /** Whether the exact model accepts system-role messages inside the conversation. When false, later system messages are folded into the top-level system prompt. Default: false. */
765
+ supportsMidConvoSystemMessages?: boolean;
766
+ /** Whether the exact model accepts mid-conversation `tool_addition` and `tool_removal` blocks. Requires `supportsMidConvoSystemMessages`. Default: false. */
767
+ supportsMidConvoToolChanges?: boolean;
542
768
  /**
543
- * Whether the provider supports deferred tools loaded by `tool_reference`
544
- * blocks in tool results. Default: true for first-party Anthropic models
545
- * except Haiku and models older than Claude 4.5; false for other providers.
769
+ * Models Anthropic accepts in `fallbacks` for server-side refusal fallback,
770
+ * with local pricing metadata for returned fallback responses. When absent or
771
+ * empty, callers must omit `fallbacks`; Anthropic rejects the field for models
772
+ * with no permitted fallback targets.
546
773
  */
547
- supportsToolReferences?: boolean;
774
+ allowedFallbackModels?: AnthropicAllowedFallbackModel[];
548
775
  }
549
776
  /** Compatibility settings for Amazon Bedrock models. */
550
777
  export interface BedrockCompat {
551
778
  /** Whether the model supports Bedrock strict tool schemas. Default: false. */
552
779
  supportsStrictMode?: boolean;
553
780
  }
781
+ /** Compatibility settings for the Mistral chat API. */
782
+ export interface MistralConversationsCompat {
783
+ /** Whether the exact model accepts system messages after the conversation has started. When false, later system messages are folded into the leading system message. Default: false. */
784
+ supportsMidConvoSystemMessages?: boolean;
785
+ }
554
786
  /**
555
787
  * OpenRouter provider routing preferences.
556
788
  * Controls which upstream providers OpenRouter routes requests to.
@@ -644,29 +876,81 @@ export interface ModelCost extends ModelCostRates {
644
876
  /** Request-wide pricing tiers. The highest matching input threshold applies to the full request. */
645
877
  tiers?: ModelCostTier[];
646
878
  }
647
- export interface Model<TApi extends Api> {
879
+ export interface ModelImageResizeOptions {
880
+ maxWidth?: number;
881
+ maxHeight?: number;
882
+ /** Maximum base64-encoded payload size in bytes. */
883
+ maxBytes?: number;
884
+ jpegQuality?: number;
885
+ }
886
+ export interface ModelImageInputLimits {
887
+ /** Cache-safe resize profile applied before a new image enters conversation history. */
888
+ resize?: ModelImageResizeOptions;
889
+ /** Maximum images accepted in one provider message. */
890
+ maxPerMessage?: number;
891
+ /** Maximum images accepted across one provider request. */
892
+ maxPerRequest?: number;
893
+ }
894
+ export interface ModelInputLimits {
895
+ /** Maximum serialized provider request size in bytes. */
896
+ maxRequestBytes?: number;
897
+ images?: ModelImageInputLimits;
898
+ }
899
+ /** Fields shared by every catalog entry, regardless of what you can do with it. */
900
+ export interface BaseModel<TApi extends string> {
648
901
  id: string;
649
902
  name: string;
650
903
  api: TApi;
651
904
  provider: ProviderId;
652
905
  baseUrl: string;
906
+ input: ("text" | "image")[];
907
+ /** Provider input limits and cache-safe preprocessing metadata. */
908
+ inputLimits?: ModelInputLimits;
909
+ cost: ModelCost;
910
+ headers?: Record<string, string>;
911
+ }
912
+ /** Chat model: usable with `stream()` and friends. */
913
+ export interface Model<TApi extends Api> extends BaseModel<TApi> {
914
+ /**
915
+ * Optional: chat is the default model type, so models without `type` are chat
916
+ * models. Narrow mixed model lists with `isModelType()` instead of comparing
917
+ * `type` directly.
918
+ */
919
+ type?: "chat";
653
920
  reasoning: boolean;
654
921
  /**
655
922
  * Maps pi thinking levels to provider/model-specific values.
656
923
  * Missing keys use provider defaults. null marks a level as unsupported.
657
924
  */
658
925
  thinkingLevelMap?: ThinkingLevelMap;
659
- input: ("text" | "image")[];
660
- cost: ModelCost;
926
+ /** Prompt cache lifetimes per retention tier. Unset when the provider's cache behavior is unknown. */
927
+ promptCache?: ModelPromptCache;
661
928
  contextWindow: number;
662
929
  maxTokens: number;
663
- headers?: Record<string, string>;
930
+ /** Default sampling parameters for this model. See {@link StreamOptions.samplingParams}; per-request keys override these. */
931
+ samplingParams?: Record<string, unknown>;
664
932
  /** Compatibility overrides for OpenAI-compatible APIs. If not set, auto-detected from baseUrl. */
665
- compat?: TApi extends "openai-completions" ? OpenAICompletionsCompat : TApi extends "openai-responses" | "azure-openai-responses" | "openai-codex-responses" ? OpenAIResponsesCompat : TApi extends "anthropic-messages" ? AnthropicMessagesCompat : TApi extends "bedrock-converse-stream" ? BedrockCompat : never;
933
+ compat?: TApi extends "openai-completions" ? OpenAICompletionsCompat : TApi extends "openai-responses" | "azure-openai-responses" | "openai-codex-responses" ? OpenAIResponsesCompat : TApi extends "anthropic-messages" ? AnthropicMessagesCompat : TApi extends "bedrock-converse-stream" ? BedrockCompat : TApi extends "mistral-conversations" ? MistralConversationsCompat : never;
666
934
  }
667
- export interface ImagesModel<TApi extends ImagesApi> extends Omit<Model<Api>, "api" | "provider" | "reasoning" | "contextWindow" | "maxTokens" | "compat"> {
668
- api: TApi;
669
- provider: ImagesProviderId;
935
+ /** Image-generation model: usable with `generateImages()` only. */
936
+ export interface ImageModel<TApi extends ImageApi> extends BaseModel<TApi> {
937
+ type: "image";
938
+ /** Output modalities. Always includes `"image"`; `"text"` means the model can also return text blocks. */
670
939
  output: ("text" | "image")[];
671
940
  }
941
+ /** Structured classifier model: usable with `classify()` only. */
942
+ export interface ClassifierModel<TApi extends ClassifierApi> extends BaseModel<TApi> {
943
+ type: "classifier";
944
+ contextWindow: number;
945
+ }
946
+ /** Model shape for each model type. */
947
+ export interface ModelTypeMap {
948
+ chat: Model<Api>;
949
+ image: ImageModel<ImageApi>;
950
+ classifier: ClassifierModel<ClassifierApi>;
951
+ }
952
+ /** What a catalog entry is for. Decides which `Models` operation accepts it. */
953
+ export type ModelType = keyof ModelTypeMap;
954
+ /** Anything a provider can list. Narrow with `isModelType()`. */
955
+ export type AnyModel = ModelTypeMap[ModelType];
672
956
  //# sourceMappingURL=types.d.ts.map