@dexto/core 1.5.7 → 1.6.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 (697) hide show
  1. package/README.md +19 -8
  2. package/dist/agent/DextoAgent.cjs +383 -153
  3. package/dist/agent/DextoAgent.d.ts +112 -60
  4. package/dist/agent/DextoAgent.d.ts.map +1 -1
  5. package/dist/agent/DextoAgent.js +380 -150
  6. package/dist/{context/compaction/provider.cjs → agent/agent-options.cjs} +2 -2
  7. package/dist/agent/agent-options.d.ts +53 -0
  8. package/dist/agent/agent-options.d.ts.map +1 -0
  9. package/dist/agent/agentCard.cjs +1 -1
  10. package/dist/agent/errors.cjs +2 -2
  11. package/dist/agent/errors.d.ts.map +1 -1
  12. package/dist/agent/index.cjs +1 -6
  13. package/dist/agent/index.d.ts +3 -2
  14. package/dist/agent/index.d.ts.map +1 -1
  15. package/dist/agent/index.js +1 -7
  16. package/dist/{storage/blob/provider.cjs → agent/runtime-config.cjs} +2 -2
  17. package/dist/agent/runtime-config.d.ts +53 -0
  18. package/dist/agent/runtime-config.d.ts.map +1 -0
  19. package/dist/agent/schemas.cjs +2 -99
  20. package/dist/agent/schemas.d.ts +10 -9160
  21. package/dist/agent/schemas.d.ts.map +1 -1
  22. package/dist/agent/schemas.js +1 -104
  23. package/dist/agent/state-manager.d.ts +5 -5
  24. package/dist/agent/state-manager.d.ts.map +1 -1
  25. package/dist/approval/error-codes.cjs +1 -1
  26. package/dist/approval/error-codes.d.ts +1 -1
  27. package/dist/approval/error-codes.d.ts.map +1 -1
  28. package/dist/approval/error-codes.js +1 -1
  29. package/dist/approval/errors.cjs +5 -5
  30. package/dist/approval/errors.d.ts +2 -2
  31. package/dist/approval/errors.d.ts.map +1 -1
  32. package/dist/approval/errors.js +5 -5
  33. package/dist/approval/index.cjs +8 -8
  34. package/dist/approval/index.d.ts +2 -2
  35. package/dist/approval/index.d.ts.map +1 -1
  36. package/dist/approval/index.js +8 -8
  37. package/dist/approval/manager.cjs +77 -57
  38. package/dist/approval/manager.d.ts +41 -43
  39. package/dist/approval/manager.d.ts.map +1 -1
  40. package/dist/approval/manager.js +75 -55
  41. package/dist/approval/schemas.cjs +26 -25
  42. package/dist/approval/schemas.d.ts +35 -15
  43. package/dist/approval/schemas.d.ts.map +1 -1
  44. package/dist/approval/schemas.js +22 -21
  45. package/dist/approval/types.cjs +1 -1
  46. package/dist/approval/types.d.ts +14 -14
  47. package/dist/approval/types.d.ts.map +1 -1
  48. package/dist/approval/types.js +1 -1
  49. package/dist/context/compaction/index.cjs +2 -23
  50. package/dist/context/compaction/index.d.ts +1 -7
  51. package/dist/context/compaction/index.d.ts.map +1 -1
  52. package/dist/context/compaction/index.js +1 -16
  53. package/dist/context/compaction/strategies/noop.cjs +19 -1
  54. package/dist/context/compaction/strategies/noop.d.ts +13 -3
  55. package/dist/context/compaction/strategies/noop.d.ts.map +1 -1
  56. package/dist/context/compaction/strategies/noop.js +19 -1
  57. package/dist/context/compaction/strategies/{reactive-overflow.cjs → reactive-overflow-compaction.cjs} +67 -64
  58. package/dist/context/compaction/strategies/{reactive-overflow.d.ts → reactive-overflow-compaction.d.ts} +19 -36
  59. package/dist/context/compaction/strategies/reactive-overflow-compaction.d.ts.map +1 -0
  60. package/dist/context/compaction/strategies/{reactive-overflow.js → reactive-overflow-compaction.js} +63 -60
  61. package/dist/context/compaction/types.d.ts +40 -8
  62. package/dist/context/compaction/types.d.ts.map +1 -1
  63. package/dist/context/manager.cjs +5 -3
  64. package/dist/context/manager.d.ts +4 -3
  65. package/dist/context/manager.d.ts.map +1 -1
  66. package/dist/context/manager.js +5 -3
  67. package/dist/context/types.d.ts +2 -0
  68. package/dist/context/types.d.ts.map +1 -1
  69. package/dist/context/utils.cjs +70 -43
  70. package/dist/context/utils.d.ts +14 -14
  71. package/dist/context/utils.d.ts.map +1 -1
  72. package/dist/context/utils.js +69 -42
  73. package/dist/errors/result-bridge.d.ts +2 -2
  74. package/dist/errors/result-bridge.d.ts.map +1 -1
  75. package/dist/errors/types.cjs +1 -1
  76. package/dist/errors/types.d.ts +3 -3
  77. package/dist/errors/types.d.ts.map +1 -1
  78. package/dist/errors/types.js +1 -1
  79. package/dist/events/index.cjs +15 -2
  80. package/dist/events/index.d.ts +78 -7
  81. package/dist/events/index.d.ts.map +1 -1
  82. package/dist/events/index.js +15 -2
  83. package/dist/{plugins → hooks}/builtins/content-policy.cjs +7 -6
  84. package/dist/hooks/builtins/content-policy.d.ts +24 -0
  85. package/dist/hooks/builtins/content-policy.d.ts.map +1 -0
  86. package/dist/{plugins → hooks}/builtins/content-policy.js +6 -5
  87. package/dist/{plugins → hooks}/builtins/response-sanitizer.cjs +3 -3
  88. package/dist/hooks/builtins/response-sanitizer.d.ts +22 -0
  89. package/dist/hooks/builtins/response-sanitizer.d.ts.map +1 -0
  90. package/dist/{plugins → hooks}/builtins/response-sanitizer.js +2 -2
  91. package/dist/hooks/error-codes.cjs +43 -0
  92. package/dist/hooks/error-codes.d.ts +34 -0
  93. package/dist/hooks/error-codes.d.ts.map +1 -0
  94. package/dist/hooks/error-codes.js +20 -0
  95. package/dist/{storage/cache/providers/memory.cjs → hooks/index.cjs} +15 -18
  96. package/dist/hooks/index.d.ts +14 -0
  97. package/dist/hooks/index.d.ts.map +1 -0
  98. package/dist/hooks/index.js +11 -0
  99. package/dist/hooks/manager.cjs +354 -0
  100. package/dist/hooks/manager.d.ts +103 -0
  101. package/dist/hooks/manager.d.ts.map +1 -0
  102. package/dist/hooks/manager.js +331 -0
  103. package/dist/{plugins → hooks}/types.d.ts +36 -34
  104. package/dist/hooks/types.d.ts.map +1 -0
  105. package/dist/index.browser.cjs +13 -12
  106. package/dist/index.browser.d.ts +6 -6
  107. package/dist/index.browser.d.ts.map +1 -1
  108. package/dist/index.browser.js +8 -7
  109. package/dist/index.cjs +5 -7
  110. package/dist/index.d.ts +2 -3
  111. package/dist/index.d.ts.map +1 -1
  112. package/dist/index.js +2 -3
  113. package/dist/llm/curation-config.cjs +82 -0
  114. package/dist/llm/curation-config.d.ts +13 -0
  115. package/dist/llm/curation-config.d.ts.map +1 -0
  116. package/dist/llm/curation-config.js +59 -0
  117. package/dist/llm/curation.cjs +57 -0
  118. package/dist/llm/curation.d.ts +16 -0
  119. package/dist/llm/curation.d.ts.map +1 -0
  120. package/dist/llm/curation.js +34 -0
  121. package/dist/llm/errors.cjs +2 -2
  122. package/dist/llm/errors.d.ts +8 -8
  123. package/dist/llm/errors.js +1 -1
  124. package/dist/llm/executor/provider-options.cjs +1 -1
  125. package/dist/llm/executor/provider-options.js +1 -1
  126. package/dist/llm/executor/stream-processor.cjs +131 -11
  127. package/dist/llm/executor/stream-processor.d.ts +7 -5
  128. package/dist/llm/executor/stream-processor.d.ts.map +1 -1
  129. package/dist/llm/executor/stream-processor.js +131 -11
  130. package/dist/llm/executor/turn-executor.cjs +57 -56
  131. package/dist/llm/executor/turn-executor.d.ts +7 -8
  132. package/dist/llm/executor/turn-executor.d.ts.map +1 -1
  133. package/dist/llm/executor/turn-executor.js +57 -56
  134. package/dist/llm/formatters/vercel.cjs +2 -2
  135. package/dist/llm/formatters/vercel.d.ts +2 -2
  136. package/dist/llm/formatters/vercel.d.ts.map +1 -1
  137. package/dist/llm/index.cjs +14 -3
  138. package/dist/llm/index.d.ts +3 -1
  139. package/dist/llm/index.d.ts.map +1 -1
  140. package/dist/llm/index.js +13 -2
  141. package/dist/llm/providers/local/schemas.d.ts +10 -10
  142. package/dist/llm/registry/auto-update.cjs +263 -0
  143. package/dist/llm/registry/auto-update.d.ts +27 -0
  144. package/dist/llm/registry/auto-update.d.ts.map +1 -0
  145. package/dist/llm/registry/auto-update.js +227 -0
  146. package/dist/llm/registry/index.cjs +806 -0
  147. package/dist/llm/{registry.d.ts → registry/index.d.ts} +21 -43
  148. package/dist/llm/registry/index.d.ts.map +1 -0
  149. package/dist/llm/registry/index.js +756 -0
  150. package/dist/llm/registry/models.generated.cjs +4861 -0
  151. package/dist/llm/registry/models.generated.d.ts +431 -0
  152. package/dist/llm/registry/models.generated.d.ts.map +1 -0
  153. package/dist/llm/registry/models.generated.js +4838 -0
  154. package/dist/{storage/database/providers/index.cjs → llm/registry/models.manual.cjs} +22 -12
  155. package/dist/llm/registry/models.manual.d.ts +22 -0
  156. package/dist/llm/registry/models.manual.d.ts.map +1 -0
  157. package/dist/llm/registry/models.manual.js +21 -0
  158. package/dist/llm/registry/sync.cjs +354 -0
  159. package/dist/llm/registry/sync.d.ts +41 -0
  160. package/dist/llm/registry/sync.d.ts.map +1 -0
  161. package/dist/llm/registry/sync.js +328 -0
  162. package/dist/llm/resolver.cjs +29 -20
  163. package/dist/llm/resolver.d.ts +4 -4
  164. package/dist/llm/resolver.d.ts.map +1 -1
  165. package/dist/llm/resolver.js +28 -20
  166. package/dist/llm/schemas.cjs +69 -94
  167. package/dist/llm/schemas.d.ts +19 -158
  168. package/dist/llm/schemas.d.ts.map +1 -1
  169. package/dist/llm/schemas.js +67 -91
  170. package/dist/llm/services/factory.cjs +6 -7
  171. package/dist/llm/services/factory.d.ts +3 -4
  172. package/dist/llm/services/factory.d.ts.map +1 -1
  173. package/dist/llm/services/factory.js +6 -7
  174. package/dist/llm/services/vercel.cjs +11 -15
  175. package/dist/llm/services/vercel.d.ts +7 -7
  176. package/dist/llm/services/vercel.d.ts.map +1 -1
  177. package/dist/llm/services/vercel.js +11 -15
  178. package/dist/llm/types.cjs +1 -1
  179. package/dist/llm/types.d.ts +1 -1
  180. package/dist/llm/types.d.ts.map +1 -1
  181. package/dist/llm/types.js +1 -1
  182. package/dist/llm/validation.cjs +2 -2
  183. package/dist/llm/validation.d.ts +2 -2
  184. package/dist/llm/validation.d.ts.map +1 -1
  185. package/dist/llm/validation.js +1 -1
  186. package/dist/logger/browser.cjs +4 -4
  187. package/dist/logger/browser.d.ts +4 -4
  188. package/dist/logger/browser.d.ts.map +1 -1
  189. package/dist/logger/browser.js +3 -3
  190. package/dist/{context/compaction/providers/noop-provider.cjs → logger/default-logger-factory.cjs} +16 -22
  191. package/dist/logger/default-logger-factory.d.ts +301 -0
  192. package/dist/logger/default-logger-factory.d.ts.map +1 -0
  193. package/dist/logger/default-logger-factory.js +18 -0
  194. package/dist/logger/factory.d.ts +2 -2
  195. package/dist/logger/factory.d.ts.map +1 -1
  196. package/dist/logger/index.cjs +7 -2
  197. package/dist/logger/index.d.ts +5 -3
  198. package/dist/logger/index.d.ts.map +1 -1
  199. package/dist/logger/index.js +8 -2
  200. package/dist/logger/logger.cjs +4 -4
  201. package/dist/logger/logger.d.ts +4 -4
  202. package/dist/logger/logger.d.ts.map +1 -1
  203. package/dist/logger/logger.js +3 -3
  204. package/dist/logger/v2/dexto-logger.d.ts +3 -3
  205. package/dist/logger/v2/dexto-logger.d.ts.map +1 -1
  206. package/dist/logger/v2/schemas.d.ts +12 -12
  207. package/dist/logger/v2/test-utils.d.ts +5 -5
  208. package/dist/logger/v2/test-utils.d.ts.map +1 -1
  209. package/dist/logger/v2/transport-factory.d.ts +3 -3
  210. package/dist/logger/v2/transport-factory.d.ts.map +1 -1
  211. package/dist/logger/v2/transports/console-transport.d.ts +2 -2
  212. package/dist/logger/v2/transports/console-transport.d.ts.map +1 -1
  213. package/dist/logger/v2/transports/file-transport.d.ts +2 -2
  214. package/dist/logger/v2/transports/file-transport.d.ts.map +1 -1
  215. package/dist/logger/v2/transports/silent-transport.d.ts +2 -2
  216. package/dist/logger/v2/transports/silent-transport.d.ts.map +1 -1
  217. package/dist/logger/v2/types.cjs +1 -1
  218. package/dist/logger/v2/types.d.ts +8 -8
  219. package/dist/logger/v2/types.d.ts.map +1 -1
  220. package/dist/logger/v2/types.js +1 -1
  221. package/dist/mcp/errors.cjs +2 -2
  222. package/dist/mcp/errors.d.ts.map +1 -1
  223. package/dist/mcp/manager.cjs +16 -11
  224. package/dist/mcp/manager.d.ts +16 -13
  225. package/dist/mcp/manager.d.ts.map +1 -1
  226. package/dist/mcp/manager.js +17 -12
  227. package/dist/mcp/mcp-client.cjs +25 -20
  228. package/dist/mcp/mcp-client.d.ts +5 -5
  229. package/dist/mcp/mcp-client.d.ts.map +1 -1
  230. package/dist/mcp/mcp-client.js +20 -15
  231. package/dist/mcp/resolver.cjs +1 -1
  232. package/dist/mcp/schemas.cjs +5 -5
  233. package/dist/mcp/schemas.d.ts +4 -4
  234. package/dist/mcp/schemas.js +2 -2
  235. package/dist/mcp/types.d.ts +7 -7
  236. package/dist/mcp/types.d.ts.map +1 -1
  237. package/dist/memory/manager.d.ts +2 -2
  238. package/dist/memory/manager.d.ts.map +1 -1
  239. package/dist/memory/schemas.d.ts +2 -2
  240. package/dist/prompts/errors.cjs +3 -3
  241. package/dist/prompts/errors.d.ts.map +1 -1
  242. package/dist/prompts/prompt-manager.d.ts +3 -3
  243. package/dist/prompts/prompt-manager.d.ts.map +1 -1
  244. package/dist/prompts/providers/config-prompt-provider.cjs +15 -29
  245. package/dist/prompts/providers/config-prompt-provider.d.ts +3 -3
  246. package/dist/prompts/providers/config-prompt-provider.d.ts.map +1 -1
  247. package/dist/prompts/providers/config-prompt-provider.js +15 -29
  248. package/dist/prompts/providers/custom-prompt-provider.d.ts +2 -2
  249. package/dist/prompts/providers/custom-prompt-provider.d.ts.map +1 -1
  250. package/dist/prompts/providers/mcp-prompt-provider.d.ts +2 -2
  251. package/dist/prompts/providers/mcp-prompt-provider.d.ts.map +1 -1
  252. package/dist/prompts/schemas.d.ts +4 -4
  253. package/dist/resources/{internal-provider.cjs → agent-resources-provider.cjs} +16 -16
  254. package/dist/resources/{internal-provider.d.ts → agent-resources-provider.d.ts} +6 -6
  255. package/dist/resources/agent-resources-provider.d.ts.map +1 -0
  256. package/dist/resources/{internal-provider.js → agent-resources-provider.js} +13 -13
  257. package/dist/resources/errors.cjs +2 -2
  258. package/dist/resources/errors.d.ts.map +1 -1
  259. package/dist/resources/handlers/blob-handler.d.ts +2 -2
  260. package/dist/resources/handlers/blob-handler.d.ts.map +1 -1
  261. package/dist/resources/handlers/factory.d.ts +3 -3
  262. package/dist/resources/handlers/factory.d.ts.map +1 -1
  263. package/dist/resources/handlers/filesystem-handler.cjs +25 -0
  264. package/dist/resources/handlers/filesystem-handler.d.ts +3 -2
  265. package/dist/resources/handlers/filesystem-handler.d.ts.map +1 -1
  266. package/dist/resources/handlers/filesystem-handler.js +25 -0
  267. package/dist/resources/index.cjs +7 -9
  268. package/dist/resources/index.d.ts +3 -3
  269. package/dist/resources/index.d.ts.map +1 -1
  270. package/dist/resources/index.js +5 -10
  271. package/dist/resources/manager.cjs +77 -74
  272. package/dist/resources/manager.d.ts +16 -7
  273. package/dist/resources/manager.d.ts.map +1 -1
  274. package/dist/resources/manager.js +77 -74
  275. package/dist/resources/schemas.cjs +6 -26
  276. package/dist/resources/schemas.d.ts +8 -100
  277. package/dist/resources/schemas.d.ts.map +1 -1
  278. package/dist/resources/schemas.js +4 -23
  279. package/dist/search/search-service.d.ts +2 -2
  280. package/dist/search/search-service.d.ts.map +1 -1
  281. package/dist/session/chat-session.cjs +16 -26
  282. package/dist/session/chat-session.d.ts +7 -5
  283. package/dist/session/chat-session.d.ts.map +1 -1
  284. package/dist/session/chat-session.js +17 -27
  285. package/dist/session/errors.cjs +2 -2
  286. package/dist/session/errors.d.ts.map +1 -1
  287. package/dist/session/history/database.cjs +1 -1
  288. package/dist/session/history/database.d.ts +4 -4
  289. package/dist/session/history/database.d.ts.map +1 -1
  290. package/dist/session/history/factory.d.ts +3 -3
  291. package/dist/session/history/factory.d.ts.map +1 -1
  292. package/dist/session/history/memory.d.ts +4 -4
  293. package/dist/session/history/memory.d.ts.map +1 -1
  294. package/dist/session/history/types.d.ts +2 -2
  295. package/dist/session/history/types.d.ts.map +1 -1
  296. package/dist/session/index.cjs +3 -0
  297. package/dist/session/index.d.ts +2 -0
  298. package/dist/session/index.d.ts.map +1 -1
  299. package/dist/session/index.js +2 -0
  300. package/dist/session/message-queue.cjs +29 -5
  301. package/dist/session/message-queue.d.ts +5 -3
  302. package/dist/session/message-queue.d.ts.map +1 -1
  303. package/dist/session/message-queue.js +29 -5
  304. package/dist/session/session-manager.cjs +107 -12
  305. package/dist/session/session-manager.d.ts +49 -8
  306. package/dist/session/session-manager.d.ts.map +1 -1
  307. package/dist/session/session-manager.js +97 -12
  308. package/dist/session/title-generator.cjs +2 -2
  309. package/dist/session/title-generator.d.ts +2 -2
  310. package/dist/session/title-generator.d.ts.map +1 -1
  311. package/dist/session/types.d.ts +1 -0
  312. package/dist/session/types.d.ts.map +1 -1
  313. package/dist/storage/blob/index.cjs +0 -40
  314. package/dist/storage/blob/index.d.ts +2 -44
  315. package/dist/storage/blob/index.d.ts.map +1 -1
  316. package/dist/storage/blob/index.js +0 -30
  317. package/dist/storage/cache/index.cjs +0 -37
  318. package/dist/storage/cache/index.d.ts +0 -42
  319. package/dist/storage/cache/index.d.ts.map +1 -1
  320. package/dist/storage/cache/index.js +0 -28
  321. package/dist/storage/database/index.cjs +0 -42
  322. package/dist/storage/database/index.d.ts +0 -43
  323. package/dist/storage/database/index.d.ts.map +1 -1
  324. package/dist/storage/database/index.js +0 -37
  325. package/dist/storage/error-codes.cjs +1 -6
  326. package/dist/storage/error-codes.d.ts +2 -7
  327. package/dist/storage/error-codes.d.ts.map +1 -1
  328. package/dist/storage/error-codes.js +1 -6
  329. package/dist/storage/errors.cjs +18 -82
  330. package/dist/storage/errors.d.ts +4 -24
  331. package/dist/storage/errors.d.ts.map +1 -1
  332. package/dist/storage/errors.js +16 -80
  333. package/dist/storage/index.cjs +8 -69
  334. package/dist/storage/index.d.ts +11 -66
  335. package/dist/storage/index.d.ts.map +1 -1
  336. package/dist/storage/index.js +6 -50
  337. package/dist/storage/storage-manager.cjs +9 -25
  338. package/dist/storage/storage-manager.d.ts +11 -15
  339. package/dist/storage/storage-manager.d.ts.map +1 -1
  340. package/dist/storage/storage-manager.js +8 -23
  341. package/dist/storage/types.d.ts +0 -1
  342. package/dist/storage/types.d.ts.map +1 -1
  343. package/dist/systemPrompt/contributors.d.ts +4 -4
  344. package/dist/systemPrompt/contributors.d.ts.map +1 -1
  345. package/dist/systemPrompt/errors.cjs +2 -2
  346. package/dist/systemPrompt/errors.d.ts.map +1 -1
  347. package/dist/systemPrompt/manager.cjs +1 -5
  348. package/dist/systemPrompt/manager.d.ts +2 -3
  349. package/dist/systemPrompt/manager.d.ts.map +1 -1
  350. package/dist/systemPrompt/manager.js +1 -5
  351. package/dist/telemetry/index.cjs +3 -0
  352. package/dist/telemetry/index.d.ts +2 -0
  353. package/dist/telemetry/index.d.ts.map +1 -1
  354. package/dist/telemetry/index.js +2 -0
  355. package/dist/telemetry/utils.d.ts +4 -4
  356. package/dist/telemetry/utils.d.ts.map +1 -1
  357. package/dist/test-utils/in-memory-storage.cjs +288 -0
  358. package/dist/test-utils/in-memory-storage.js +252 -0
  359. package/dist/tools/confirmation/allowed-tools-provider/factory.d.ts +3 -3
  360. package/dist/tools/confirmation/allowed-tools-provider/factory.d.ts.map +1 -1
  361. package/dist/tools/confirmation/allowed-tools-provider/in-memory.d.ts +2 -2
  362. package/dist/tools/confirmation/allowed-tools-provider/in-memory.d.ts.map +1 -1
  363. package/dist/tools/confirmation/allowed-tools-provider/storage.d.ts +4 -4
  364. package/dist/tools/confirmation/allowed-tools-provider/storage.d.ts.map +1 -1
  365. package/dist/tools/confirmation/allowed-tools-provider/types.d.ts +2 -2
  366. package/dist/tools/confirmation/allowed-tools-provider/types.d.ts.map +1 -1
  367. package/dist/tools/{internal-tools/constants.cjs → define-tool.cjs} +8 -13
  368. package/dist/tools/define-tool.d.ts +11 -0
  369. package/dist/tools/define-tool.d.ts.map +1 -0
  370. package/dist/tools/define-tool.js +7 -0
  371. package/dist/tools/error-codes.cjs +2 -2
  372. package/dist/tools/error-codes.d.ts +2 -2
  373. package/dist/tools/error-codes.d.ts.map +1 -1
  374. package/dist/tools/error-codes.js +2 -2
  375. package/dist/tools/errors.cjs +11 -23
  376. package/dist/tools/errors.d.ts +4 -10
  377. package/dist/tools/errors.d.ts.map +1 -1
  378. package/dist/tools/errors.js +9 -21
  379. package/dist/tools/index.cjs +3 -8
  380. package/dist/tools/index.d.ts +2 -4
  381. package/dist/tools/index.d.ts.map +1 -1
  382. package/dist/tools/index.js +2 -7
  383. package/dist/{storage/blob/providers/index.cjs → tools/pattern-utils.cjs} +11 -9
  384. package/dist/tools/pattern-utils.d.ts +20 -0
  385. package/dist/tools/pattern-utils.d.ts.map +1 -0
  386. package/dist/tools/pattern-utils.js +10 -0
  387. package/dist/tools/schemas.cjs +14 -40
  388. package/dist/tools/schemas.d.ts +6 -50
  389. package/dist/tools/schemas.d.ts.map +1 -1
  390. package/dist/tools/schemas.js +11 -32
  391. package/dist/tools/tool-call-metadata.cjs +75 -0
  392. package/dist/tools/tool-call-metadata.d.ts +16 -0
  393. package/dist/tools/tool-call-metadata.d.ts.map +1 -0
  394. package/dist/tools/tool-call-metadata.js +51 -0
  395. package/dist/tools/tool-manager.cjs +578 -302
  396. package/dist/tools/tool-manager.d.ts +105 -81
  397. package/dist/tools/tool-manager.d.ts.map +1 -1
  398. package/dist/tools/tool-manager.js +578 -306
  399. package/dist/tools/types.d.ts +112 -13
  400. package/dist/tools/types.d.ts.map +1 -1
  401. package/dist/utils/api-key-resolver.cjs +1 -1
  402. package/dist/utils/api-key-resolver.js +1 -1
  403. package/dist/utils/env.cjs +49 -0
  404. package/dist/utils/env.d.ts +4 -0
  405. package/dist/utils/env.d.ts.map +1 -0
  406. package/dist/utils/env.js +24 -0
  407. package/dist/utils/error-conversion.d.ts +2 -2
  408. package/dist/utils/error-conversion.d.ts.map +1 -1
  409. package/dist/utils/index.cjs +3 -1
  410. package/dist/utils/index.d.ts +1 -0
  411. package/dist/utils/index.d.ts.map +1 -1
  412. package/dist/utils/index.js +1 -0
  413. package/dist/utils/path.d.ts +2 -2
  414. package/dist/utils/path.d.ts.map +1 -1
  415. package/dist/utils/result.cjs +1 -1
  416. package/dist/utils/result.d.ts.map +1 -1
  417. package/dist/utils/schema.cjs +9 -5
  418. package/dist/utils/schema.d.ts +4 -2
  419. package/dist/utils/schema.d.ts.map +1 -1
  420. package/dist/utils/schema.js +9 -5
  421. package/dist/utils/service-initializer.cjs +58 -51
  422. package/dist/utils/service-initializer.d.ts +31 -9
  423. package/dist/utils/service-initializer.d.ts.map +1 -1
  424. package/dist/utils/service-initializer.js +58 -51
  425. package/dist/{storage/cache/providers/index.cjs → workspace/error-codes.cjs} +8 -9
  426. package/dist/workspace/error-codes.d.ts +5 -0
  427. package/dist/workspace/error-codes.d.ts.map +1 -0
  428. package/dist/workspace/error-codes.js +7 -0
  429. package/dist/{storage/blob/factory.cjs → workspace/errors.cjs} +20 -14
  430. package/dist/workspace/errors.d.ts +5 -0
  431. package/dist/workspace/errors.d.ts.map +1 -0
  432. package/dist/workspace/errors.js +21 -0
  433. package/dist/{image → workspace}/index.cjs +12 -10
  434. package/dist/workspace/index.d.ts +5 -0
  435. package/dist/workspace/index.d.ts.map +1 -0
  436. package/dist/workspace/index.js +9 -0
  437. package/dist/workspace/manager.cjs +113 -0
  438. package/dist/workspace/manager.d.ts +18 -0
  439. package/dist/workspace/manager.d.ts.map +1 -0
  440. package/dist/workspace/manager.js +90 -0
  441. package/dist/workspace/types.d.ts +14 -0
  442. package/dist/workspace/types.d.ts.map +1 -0
  443. package/package.json +7 -3
  444. package/dist/context/compaction/factory.cjs +0 -57
  445. package/dist/context/compaction/factory.d.ts +0 -17
  446. package/dist/context/compaction/factory.d.ts.map +0 -1
  447. package/dist/context/compaction/factory.js +0 -34
  448. package/dist/context/compaction/provider.d.ts +0 -48
  449. package/dist/context/compaction/provider.d.ts.map +0 -1
  450. package/dist/context/compaction/providers/noop-provider.d.ts +0 -24
  451. package/dist/context/compaction/providers/noop-provider.d.ts.map +0 -1
  452. package/dist/context/compaction/providers/noop-provider.js +0 -24
  453. package/dist/context/compaction/providers/reactive-overflow-provider.cjs +0 -76
  454. package/dist/context/compaction/providers/reactive-overflow-provider.d.ts +0 -51
  455. package/dist/context/compaction/providers/reactive-overflow-provider.d.ts.map +0 -1
  456. package/dist/context/compaction/providers/reactive-overflow-provider.js +0 -52
  457. package/dist/context/compaction/registry.cjs +0 -39
  458. package/dist/context/compaction/registry.d.ts +0 -19
  459. package/dist/context/compaction/registry.d.ts.map +0 -1
  460. package/dist/context/compaction/registry.js +0 -16
  461. package/dist/context/compaction/schemas.cjs +0 -58
  462. package/dist/context/compaction/schemas.d.ts +0 -69
  463. package/dist/context/compaction/schemas.d.ts.map +0 -1
  464. package/dist/context/compaction/schemas.js +0 -34
  465. package/dist/context/compaction/strategies/reactive-overflow.d.ts.map +0 -1
  466. package/dist/image/define-image.cjs +0 -146
  467. package/dist/image/define-image.d.ts +0 -71
  468. package/dist/image/define-image.d.ts.map +0 -1
  469. package/dist/image/define-image.js +0 -121
  470. package/dist/image/index.d.ts +0 -53
  471. package/dist/image/index.d.ts.map +0 -1
  472. package/dist/image/index.js +0 -7
  473. package/dist/image/types.d.ts +0 -246
  474. package/dist/image/types.d.ts.map +0 -1
  475. package/dist/llm/registry.cjs +0 -2075
  476. package/dist/llm/registry.d.ts.map +0 -1
  477. package/dist/llm/registry.js +0 -2025
  478. package/dist/llm/services/test-utils.integration.cjs +0 -237
  479. package/dist/llm/services/test-utils.integration.d.ts +0 -48
  480. package/dist/llm/services/test-utils.integration.d.ts.map +0 -1
  481. package/dist/llm/services/test-utils.integration.js +0 -214
  482. package/dist/plugins/builtins/content-policy.d.ts +0 -26
  483. package/dist/plugins/builtins/content-policy.d.ts.map +0 -1
  484. package/dist/plugins/builtins/response-sanitizer.d.ts +0 -25
  485. package/dist/plugins/builtins/response-sanitizer.d.ts.map +0 -1
  486. package/dist/plugins/error-codes.cjs +0 -43
  487. package/dist/plugins/error-codes.d.ts +0 -34
  488. package/dist/plugins/error-codes.d.ts.map +0 -1
  489. package/dist/plugins/error-codes.js +0 -20
  490. package/dist/plugins/index.cjs +0 -61
  491. package/dist/plugins/index.d.ts +0 -21
  492. package/dist/plugins/index.d.ts.map +0 -1
  493. package/dist/plugins/index.js +0 -30
  494. package/dist/plugins/loader.cjs +0 -171
  495. package/dist/plugins/loader.d.ts +0 -30
  496. package/dist/plugins/loader.d.ts.map +0 -1
  497. package/dist/plugins/loader.js +0 -145
  498. package/dist/plugins/manager.cjs +0 -473
  499. package/dist/plugins/manager.d.ts +0 -106
  500. package/dist/plugins/manager.d.ts.map +0 -1
  501. package/dist/plugins/manager.js +0 -450
  502. package/dist/plugins/registrations/builtins.cjs +0 -51
  503. package/dist/plugins/registrations/builtins.d.ts +0 -17
  504. package/dist/plugins/registrations/builtins.d.ts.map +0 -1
  505. package/dist/plugins/registrations/builtins.js +0 -28
  506. package/dist/plugins/registry.cjs +0 -63
  507. package/dist/plugins/registry.d.ts +0 -101
  508. package/dist/plugins/registry.d.ts.map +0 -1
  509. package/dist/plugins/registry.js +0 -39
  510. package/dist/plugins/schemas.cjs +0 -73
  511. package/dist/plugins/schemas.d.ts +0 -195
  512. package/dist/plugins/schemas.d.ts.map +0 -1
  513. package/dist/plugins/schemas.js +0 -47
  514. package/dist/plugins/types.d.ts.map +0 -1
  515. package/dist/providers/base-registry.cjs +0 -147
  516. package/dist/providers/base-registry.d.ts +0 -147
  517. package/dist/providers/base-registry.d.ts.map +0 -1
  518. package/dist/providers/base-registry.js +0 -123
  519. package/dist/providers/discovery.cjs +0 -109
  520. package/dist/providers/discovery.d.ts +0 -96
  521. package/dist/providers/discovery.d.ts.map +0 -1
  522. package/dist/providers/discovery.js +0 -84
  523. package/dist/providers/index.cjs +0 -24
  524. package/dist/providers/index.d.ts +0 -32
  525. package/dist/providers/index.d.ts.map +0 -1
  526. package/dist/providers/index.js +0 -2
  527. package/dist/resources/internal-provider.d.ts.map +0 -1
  528. package/dist/storage/blob/factory.d.ts +0 -37
  529. package/dist/storage/blob/factory.d.ts.map +0 -1
  530. package/dist/storage/blob/factory.js +0 -15
  531. package/dist/storage/blob/local-blob-store.cjs +0 -496
  532. package/dist/storage/blob/local-blob-store.d.ts +0 -58
  533. package/dist/storage/blob/local-blob-store.d.ts.map +0 -1
  534. package/dist/storage/blob/local-blob-store.js +0 -463
  535. package/dist/storage/blob/memory-blob-store.cjs +0 -326
  536. package/dist/storage/blob/memory-blob-store.d.ts +0 -66
  537. package/dist/storage/blob/memory-blob-store.d.ts.map +0 -1
  538. package/dist/storage/blob/memory-blob-store.js +0 -303
  539. package/dist/storage/blob/provider.d.ts +0 -50
  540. package/dist/storage/blob/provider.d.ts.map +0 -1
  541. package/dist/storage/blob/providers/index.d.ts +0 -8
  542. package/dist/storage/blob/providers/index.d.ts.map +0 -1
  543. package/dist/storage/blob/providers/index.js +0 -7
  544. package/dist/storage/blob/providers/local.cjs +0 -39
  545. package/dist/storage/blob/providers/local.d.ts +0 -17
  546. package/dist/storage/blob/providers/local.d.ts.map +0 -1
  547. package/dist/storage/blob/providers/local.js +0 -16
  548. package/dist/storage/blob/providers/memory.cjs +0 -39
  549. package/dist/storage/blob/providers/memory.d.ts +0 -17
  550. package/dist/storage/blob/providers/memory.d.ts.map +0 -1
  551. package/dist/storage/blob/providers/memory.js +0 -16
  552. package/dist/storage/blob/registry.cjs +0 -50
  553. package/dist/storage/blob/registry.d.ts +0 -42
  554. package/dist/storage/blob/registry.d.ts.map +0 -1
  555. package/dist/storage/blob/registry.js +0 -26
  556. package/dist/storage/blob/schemas.cjs +0 -52
  557. package/dist/storage/blob/schemas.d.ts +0 -85
  558. package/dist/storage/blob/schemas.d.ts.map +0 -1
  559. package/dist/storage/blob/schemas.js +0 -26
  560. package/dist/storage/cache/factory.cjs +0 -38
  561. package/dist/storage/cache/factory.d.ts +0 -37
  562. package/dist/storage/cache/factory.d.ts.map +0 -1
  563. package/dist/storage/cache/factory.js +0 -15
  564. package/dist/storage/cache/memory-cache-store.cjs +0 -107
  565. package/dist/storage/cache/memory-cache-store.d.ts +0 -26
  566. package/dist/storage/cache/memory-cache-store.d.ts.map +0 -1
  567. package/dist/storage/cache/memory-cache-store.js +0 -84
  568. package/dist/storage/cache/provider.cjs +0 -16
  569. package/dist/storage/cache/provider.d.ts +0 -56
  570. package/dist/storage/cache/provider.d.ts.map +0 -1
  571. package/dist/storage/cache/provider.js +0 -0
  572. package/dist/storage/cache/providers/index.d.ts +0 -8
  573. package/dist/storage/cache/providers/index.d.ts.map +0 -1
  574. package/dist/storage/cache/providers/index.js +0 -7
  575. package/dist/storage/cache/providers/memory.d.ts +0 -17
  576. package/dist/storage/cache/providers/memory.d.ts.map +0 -1
  577. package/dist/storage/cache/providers/memory.js +0 -17
  578. package/dist/storage/cache/providers/redis.cjs +0 -66
  579. package/dist/storage/cache/providers/redis.d.ts +0 -20
  580. package/dist/storage/cache/providers/redis.d.ts.map +0 -1
  581. package/dist/storage/cache/providers/redis.js +0 -33
  582. package/dist/storage/cache/redis-store.cjs +0 -173
  583. package/dist/storage/cache/redis-store.d.ts +0 -32
  584. package/dist/storage/cache/redis-store.d.ts.map +0 -1
  585. package/dist/storage/cache/redis-store.js +0 -150
  586. package/dist/storage/cache/registry.cjs +0 -50
  587. package/dist/storage/cache/registry.d.ts +0 -42
  588. package/dist/storage/cache/registry.d.ts.map +0 -1
  589. package/dist/storage/cache/registry.js +0 -26
  590. package/dist/storage/cache/schemas.cjs +0 -81
  591. package/dist/storage/cache/schemas.d.ts +0 -150
  592. package/dist/storage/cache/schemas.d.ts.map +0 -1
  593. package/dist/storage/cache/schemas.js +0 -55
  594. package/dist/storage/database/factory.cjs +0 -38
  595. package/dist/storage/database/factory.d.ts +0 -39
  596. package/dist/storage/database/factory.d.ts.map +0 -1
  597. package/dist/storage/database/factory.js +0 -15
  598. package/dist/storage/database/memory-database-store.cjs +0 -122
  599. package/dist/storage/database/memory-database-store.d.ts +0 -29
  600. package/dist/storage/database/memory-database-store.d.ts.map +0 -1
  601. package/dist/storage/database/memory-database-store.js +0 -99
  602. package/dist/storage/database/postgres-store.cjs +0 -342
  603. package/dist/storage/database/postgres-store.d.ts +0 -55
  604. package/dist/storage/database/postgres-store.d.ts.map +0 -1
  605. package/dist/storage/database/postgres-store.js +0 -319
  606. package/dist/storage/database/provider.cjs +0 -16
  607. package/dist/storage/database/provider.d.ts +0 -56
  608. package/dist/storage/database/provider.d.ts.map +0 -1
  609. package/dist/storage/database/provider.js +0 -0
  610. package/dist/storage/database/providers/index.d.ts +0 -9
  611. package/dist/storage/database/providers/index.d.ts.map +0 -1
  612. package/dist/storage/database/providers/index.js +0 -9
  613. package/dist/storage/database/providers/memory.cjs +0 -40
  614. package/dist/storage/database/providers/memory.d.ts +0 -16
  615. package/dist/storage/database/providers/memory.d.ts.map +0 -1
  616. package/dist/storage/database/providers/memory.js +0 -17
  617. package/dist/storage/database/providers/postgres.cjs +0 -62
  618. package/dist/storage/database/providers/postgres.d.ts +0 -19
  619. package/dist/storage/database/providers/postgres.d.ts.map +0 -1
  620. package/dist/storage/database/providers/postgres.js +0 -29
  621. package/dist/storage/database/providers/sqlite.cjs +0 -66
  622. package/dist/storage/database/providers/sqlite.d.ts +0 -20
  623. package/dist/storage/database/providers/sqlite.d.ts.map +0 -1
  624. package/dist/storage/database/providers/sqlite.js +0 -33
  625. package/dist/storage/database/registry.cjs +0 -50
  626. package/dist/storage/database/registry.d.ts +0 -42
  627. package/dist/storage/database/registry.d.ts.map +0 -1
  628. package/dist/storage/database/registry.js +0 -26
  629. package/dist/storage/database/schemas.cjs +0 -97
  630. package/dist/storage/database/schemas.d.ts +0 -226
  631. package/dist/storage/database/schemas.d.ts.map +0 -1
  632. package/dist/storage/database/schemas.js +0 -70
  633. package/dist/storage/database/sqlite-store.cjs +0 -270
  634. package/dist/storage/database/sqlite-store.d.ts +0 -33
  635. package/dist/storage/database/sqlite-store.d.ts.map +0 -1
  636. package/dist/storage/database/sqlite-store.js +0 -237
  637. package/dist/storage/schemas.cjs +0 -57
  638. package/dist/storage/schemas.d.ts +0 -347
  639. package/dist/storage/schemas.d.ts.map +0 -1
  640. package/dist/storage/schemas.js +0 -37
  641. package/dist/tools/bash-pattern-utils.cjs +0 -91
  642. package/dist/tools/bash-pattern-utils.d.ts +0 -58
  643. package/dist/tools/bash-pattern-utils.d.ts.map +0 -1
  644. package/dist/tools/bash-pattern-utils.js +0 -64
  645. package/dist/tools/custom-tool-registry.cjs +0 -64
  646. package/dist/tools/custom-tool-registry.d.ts +0 -126
  647. package/dist/tools/custom-tool-registry.d.ts.map +0 -1
  648. package/dist/tools/custom-tool-registry.js +0 -40
  649. package/dist/tools/custom-tool-schema-registry.cjs +0 -164
  650. package/dist/tools/custom-tool-schema-registry.d.ts +0 -86
  651. package/dist/tools/custom-tool-schema-registry.d.ts.map +0 -1
  652. package/dist/tools/custom-tool-schema-registry.js +0 -140
  653. package/dist/tools/internal-tools/constants.d.ts +0 -12
  654. package/dist/tools/internal-tools/constants.d.ts.map +0 -1
  655. package/dist/tools/internal-tools/constants.js +0 -12
  656. package/dist/tools/internal-tools/implementations/ask-user-tool.cjs +0 -57
  657. package/dist/tools/internal-tools/implementations/ask-user-tool.d.ts +0 -18
  658. package/dist/tools/internal-tools/implementations/ask-user-tool.d.ts.map +0 -1
  659. package/dist/tools/internal-tools/implementations/ask-user-tool.js +0 -34
  660. package/dist/tools/internal-tools/implementations/delegate-to-url-tool.cjs +0 -192
  661. package/dist/tools/internal-tools/implementations/delegate-to-url-tool.d.ts +0 -33
  662. package/dist/tools/internal-tools/implementations/delegate-to-url-tool.d.ts.map +0 -1
  663. package/dist/tools/internal-tools/implementations/delegate-to-url-tool.js +0 -169
  664. package/dist/tools/internal-tools/implementations/get-resource-tool.cjs +0 -113
  665. package/dist/tools/internal-tools/implementations/get-resource-tool.d.ts +0 -30
  666. package/dist/tools/internal-tools/implementations/get-resource-tool.d.ts.map +0 -1
  667. package/dist/tools/internal-tools/implementations/get-resource-tool.js +0 -90
  668. package/dist/tools/internal-tools/implementations/invoke-skill-tool.cjs +0 -140
  669. package/dist/tools/internal-tools/implementations/invoke-skill-tool.d.ts +0 -24
  670. package/dist/tools/internal-tools/implementations/invoke-skill-tool.d.ts.map +0 -1
  671. package/dist/tools/internal-tools/implementations/invoke-skill-tool.js +0 -117
  672. package/dist/tools/internal-tools/implementations/list-resources-tool.cjs +0 -91
  673. package/dist/tools/internal-tools/implementations/list-resources-tool.d.ts +0 -24
  674. package/dist/tools/internal-tools/implementations/list-resources-tool.d.ts.map +0 -1
  675. package/dist/tools/internal-tools/implementations/list-resources-tool.js +0 -68
  676. package/dist/tools/internal-tools/implementations/search-history-tool.cjs +0 -61
  677. package/dist/tools/internal-tools/implementations/search-history-tool.d.ts +0 -7
  678. package/dist/tools/internal-tools/implementations/search-history-tool.d.ts.map +0 -1
  679. package/dist/tools/internal-tools/implementations/search-history-tool.js +0 -38
  680. package/dist/tools/internal-tools/index.cjs +0 -26
  681. package/dist/tools/internal-tools/index.d.ts +0 -4
  682. package/dist/tools/internal-tools/index.d.ts.map +0 -1
  683. package/dist/tools/internal-tools/index.js +0 -3
  684. package/dist/tools/internal-tools/provider.cjs +0 -324
  685. package/dist/tools/internal-tools/provider.d.ts +0 -114
  686. package/dist/tools/internal-tools/provider.d.ts.map +0 -1
  687. package/dist/tools/internal-tools/provider.js +0 -301
  688. package/dist/tools/internal-tools/registry.cjs +0 -71
  689. package/dist/tools/internal-tools/registry.d.ts +0 -91
  690. package/dist/tools/internal-tools/registry.d.ts.map +0 -1
  691. package/dist/tools/internal-tools/registry.js +0 -47
  692. /package/dist/{context/compaction/provider.js → agent/agent-options.js} +0 -0
  693. /package/dist/{image/types.js → agent/runtime-config.js} +0 -0
  694. /package/dist/{image → hooks}/types.cjs +0 -0
  695. /package/dist/{plugins → hooks}/types.js +0 -0
  696. /package/dist/{plugins → workspace}/types.cjs +0 -0
  697. /package/dist/{storage/blob/provider.js → workspace/types.js} +0 -0
@@ -1,2025 +0,0 @@
1
- import "../chunk-PTJYTZNU.js";
2
- import { LLMError } from "./errors.js";
3
- import { LLMErrorCode } from "./error-codes.js";
4
- import { DextoRuntimeError } from "../errors/DextoRuntimeError.js";
5
- import { ErrorScope, ErrorType } from "../errors/types.js";
6
- import {
7
- LLM_PROVIDERS
8
- } from "./types.js";
9
- import { getOpenRouterModelContextLength } from "./providers/openrouter-model-registry.js";
10
- const MIME_TYPE_TO_FILE_TYPE = {
11
- "application/pdf": "pdf",
12
- "audio/mp3": "audio",
13
- "audio/mpeg": "audio",
14
- "audio/wav": "audio",
15
- "audio/x-wav": "audio",
16
- "audio/wave": "audio",
17
- "audio/webm": "audio",
18
- "audio/ogg": "audio",
19
- "audio/m4a": "audio",
20
- "audio/aac": "audio",
21
- // Common image MIME types
22
- "image/jpeg": "image",
23
- "image/jpg": "image",
24
- "image/png": "image",
25
- "image/webp": "image",
26
- "image/gif": "image"
27
- };
28
- function getAllowedMimeTypes() {
29
- return Object.keys(MIME_TYPE_TO_FILE_TYPE);
30
- }
31
- const DEFAULT_MAX_INPUT_TOKENS = 128e3;
32
- const LLM_REGISTRY = {
33
- openai: {
34
- models: [
35
- // GPT-5.2 series (latest, released Dec 2025)
36
- {
37
- name: "gpt-5.2-chat-latest",
38
- displayName: "GPT-5.2 Instant",
39
- openrouterId: "openai/gpt-5.2-chat",
40
- maxInputTokens: 4e5,
41
- supportedFileTypes: ["pdf", "image"],
42
- pricing: {
43
- inputPerM: 1.75,
44
- outputPerM: 14,
45
- cacheReadPerM: 0.175,
46
- currency: "USD",
47
- unit: "per_million_tokens"
48
- }
49
- },
50
- {
51
- name: "gpt-5.2",
52
- displayName: "GPT-5.2 Thinking",
53
- openrouterId: "openai/gpt-5.2",
54
- maxInputTokens: 4e5,
55
- supportedFileTypes: ["pdf", "image"],
56
- pricing: {
57
- inputPerM: 1.75,
58
- outputPerM: 14,
59
- cacheReadPerM: 0.175,
60
- currency: "USD",
61
- unit: "per_million_tokens"
62
- }
63
- },
64
- {
65
- name: "gpt-5.2-pro",
66
- displayName: "GPT-5.2 Pro",
67
- openrouterId: "openai/gpt-5.2-pro",
68
- maxInputTokens: 4e5,
69
- supportedFileTypes: ["pdf", "image"],
70
- pricing: {
71
- inputPerM: 21,
72
- outputPerM: 168,
73
- cacheReadPerM: 2.1,
74
- currency: "USD",
75
- unit: "per_million_tokens"
76
- }
77
- },
78
- {
79
- name: "gpt-5.2-codex",
80
- displayName: "GPT-5.2 Codex",
81
- openrouterId: "openai/gpt-5.2-codex",
82
- maxInputTokens: 4e5,
83
- supportedFileTypes: ["pdf", "image"],
84
- pricing: {
85
- inputPerM: 1.75,
86
- outputPerM: 14,
87
- cacheReadPerM: 0.175,
88
- currency: "USD",
89
- unit: "per_million_tokens"
90
- }
91
- },
92
- // GPT-5.1 series
93
- {
94
- name: "gpt-5.1-chat-latest",
95
- displayName: "GPT-5.1 Instant",
96
- openrouterId: "openai/gpt-5.1-chat",
97
- maxInputTokens: 4e5,
98
- supportedFileTypes: ["pdf", "image"],
99
- pricing: {
100
- inputPerM: 1.25,
101
- outputPerM: 10,
102
- cacheReadPerM: 0.125,
103
- currency: "USD",
104
- unit: "per_million_tokens"
105
- }
106
- },
107
- {
108
- name: "gpt-5.1",
109
- displayName: "GPT-5.1 Thinking",
110
- openrouterId: "openai/gpt-5.1",
111
- maxInputTokens: 4e5,
112
- supportedFileTypes: ["pdf", "image"],
113
- pricing: {
114
- inputPerM: 1.25,
115
- outputPerM: 10,
116
- cacheReadPerM: 0.125,
117
- currency: "USD",
118
- unit: "per_million_tokens"
119
- }
120
- },
121
- {
122
- name: "gpt-5.1-codex",
123
- displayName: "GPT-5.1 Codex",
124
- openrouterId: "openai/gpt-5.1-codex",
125
- maxInputTokens: 4e5,
126
- supportedFileTypes: ["pdf", "image"],
127
- pricing: {
128
- inputPerM: 1.25,
129
- outputPerM: 10,
130
- cacheReadPerM: 0.125,
131
- currency: "USD",
132
- unit: "per_million_tokens"
133
- }
134
- },
135
- {
136
- name: "gpt-5.1-codex-mini",
137
- displayName: "GPT-5.1 Codex Mini",
138
- openrouterId: "openai/gpt-5.1-codex-mini",
139
- maxInputTokens: 4e5,
140
- supportedFileTypes: ["pdf", "image"],
141
- pricing: {
142
- inputPerM: 0.25,
143
- outputPerM: 2,
144
- cacheReadPerM: 0.025,
145
- currency: "USD",
146
- unit: "per_million_tokens"
147
- }
148
- },
149
- // {
150
- // name: 'gpt-5.1-codex-max',
151
- // displayName: 'GPT-5.1 Codex Max',
152
- // maxInputTokens: 400000,
153
- // supportedFileTypes: ['pdf', 'image'],
154
- // pricing: {
155
- // inputPerM: 1.25,
156
- // outputPerM: 10.0,
157
- // cacheReadPerM: 0.125,
158
- // currency: 'USD',
159
- // unit: 'per_million_tokens',
160
- // },
161
- // },
162
- {
163
- name: "gpt-5-pro",
164
- displayName: "GPT-5 Pro",
165
- openrouterId: "openai/gpt-5-pro",
166
- maxInputTokens: 4e5,
167
- supportedFileTypes: ["pdf", "image"],
168
- pricing: {
169
- inputPerM: 15,
170
- outputPerM: 120,
171
- cacheReadPerM: 1.5,
172
- currency: "USD",
173
- unit: "per_million_tokens"
174
- }
175
- },
176
- {
177
- name: "gpt-5",
178
- displayName: "GPT-5",
179
- openrouterId: "openai/gpt-5",
180
- maxInputTokens: 4e5,
181
- supportedFileTypes: ["pdf", "image"],
182
- pricing: {
183
- inputPerM: 1.25,
184
- outputPerM: 10,
185
- cacheReadPerM: 0.125,
186
- currency: "USD",
187
- unit: "per_million_tokens"
188
- }
189
- },
190
- {
191
- name: "gpt-5-mini",
192
- displayName: "GPT-5 Mini",
193
- openrouterId: "openai/gpt-5-mini",
194
- maxInputTokens: 4e5,
195
- default: true,
196
- supportedFileTypes: ["pdf", "image"],
197
- pricing: {
198
- inputPerM: 0.25,
199
- outputPerM: 2,
200
- cacheReadPerM: 0.025,
201
- currency: "USD",
202
- unit: "per_million_tokens"
203
- }
204
- },
205
- {
206
- name: "gpt-5-nano",
207
- displayName: "GPT-5 Nano",
208
- openrouterId: "openai/gpt-5-nano",
209
- maxInputTokens: 4e5,
210
- supportedFileTypes: ["pdf", "image"],
211
- pricing: {
212
- inputPerM: 0.05,
213
- outputPerM: 0.4,
214
- cacheReadPerM: 5e-3,
215
- currency: "USD",
216
- unit: "per_million_tokens"
217
- }
218
- },
219
- {
220
- name: "gpt-5-codex",
221
- displayName: "GPT-5 Codex",
222
- openrouterId: "openai/gpt-5-codex",
223
- maxInputTokens: 4e5,
224
- supportedFileTypes: ["pdf", "image"],
225
- pricing: {
226
- inputPerM: 1.25,
227
- outputPerM: 10,
228
- cacheReadPerM: 0.125,
229
- currency: "USD",
230
- unit: "per_million_tokens"
231
- }
232
- },
233
- {
234
- name: "gpt-4.1",
235
- displayName: "GPT-4.1",
236
- openrouterId: "openai/gpt-4.1",
237
- maxInputTokens: 1048576,
238
- supportedFileTypes: ["pdf", "image"],
239
- pricing: {
240
- inputPerM: 2,
241
- outputPerM: 8,
242
- cacheReadPerM: 0.5,
243
- currency: "USD",
244
- unit: "per_million_tokens"
245
- }
246
- },
247
- {
248
- name: "gpt-4.1-mini",
249
- displayName: "GPT-4.1 Mini",
250
- openrouterId: "openai/gpt-4.1-mini",
251
- maxInputTokens: 1048576,
252
- supportedFileTypes: ["pdf", "image"],
253
- pricing: {
254
- inputPerM: 0.4,
255
- outputPerM: 1.6,
256
- cacheReadPerM: 0.1,
257
- currency: "USD",
258
- unit: "per_million_tokens"
259
- }
260
- },
261
- {
262
- name: "gpt-4.1-nano",
263
- displayName: "GPT-4.1 Nano",
264
- openrouterId: "openai/gpt-4.1-nano",
265
- maxInputTokens: 1048576,
266
- supportedFileTypes: ["pdf", "image"],
267
- pricing: {
268
- inputPerM: 0.1,
269
- outputPerM: 0.4,
270
- cacheReadPerM: 0.025,
271
- currency: "USD",
272
- unit: "per_million_tokens"
273
- }
274
- },
275
- {
276
- name: "gpt-4o",
277
- displayName: "GPT-4o",
278
- openrouterId: "openai/gpt-4o",
279
- maxInputTokens: 128e3,
280
- supportedFileTypes: ["pdf", "image"],
281
- pricing: {
282
- inputPerM: 2.5,
283
- outputPerM: 10,
284
- cacheReadPerM: 1.25,
285
- currency: "USD",
286
- unit: "per_million_tokens"
287
- }
288
- },
289
- {
290
- name: "gpt-4o-mini",
291
- displayName: "GPT-4o Mini",
292
- openrouterId: "openai/gpt-4o-mini",
293
- maxInputTokens: 128e3,
294
- supportedFileTypes: ["pdf", "image"],
295
- pricing: {
296
- inputPerM: 0.15,
297
- outputPerM: 0.6,
298
- cacheReadPerM: 0.075,
299
- currency: "USD",
300
- unit: "per_million_tokens"
301
- }
302
- },
303
- {
304
- name: "gpt-4o-audio-preview",
305
- displayName: "GPT-4o Audio Preview",
306
- openrouterId: "openai/gpt-4o-audio-preview",
307
- maxInputTokens: 128e3,
308
- supportedFileTypes: ["audio"],
309
- pricing: {
310
- inputPerM: 2.5,
311
- outputPerM: 10,
312
- cacheReadPerM: 1.25,
313
- currency: "USD",
314
- unit: "per_million_tokens"
315
- }
316
- },
317
- {
318
- name: "o4-mini",
319
- displayName: "O4 Mini",
320
- openrouterId: "openai/o4-mini",
321
- maxInputTokens: 2e5,
322
- supportedFileTypes: ["pdf", "image"],
323
- pricing: {
324
- inputPerM: 1.1,
325
- outputPerM: 4.4,
326
- cacheReadPerM: 0.275,
327
- currency: "USD",
328
- unit: "per_million_tokens"
329
- }
330
- },
331
- {
332
- name: "o3",
333
- displayName: "O3",
334
- openrouterId: "openai/o3",
335
- maxInputTokens: 2e5,
336
- supportedFileTypes: ["pdf", "image"],
337
- pricing: {
338
- inputPerM: 2,
339
- outputPerM: 8,
340
- cacheReadPerM: 0.5,
341
- currency: "USD",
342
- unit: "per_million_tokens"
343
- }
344
- },
345
- {
346
- name: "o3-mini",
347
- displayName: "O3 Mini",
348
- openrouterId: "openai/o3-mini",
349
- maxInputTokens: 2e5,
350
- supportedFileTypes: [],
351
- pricing: {
352
- inputPerM: 1.1,
353
- outputPerM: 4.4,
354
- cacheReadPerM: 0.55,
355
- currency: "USD",
356
- unit: "per_million_tokens"
357
- }
358
- },
359
- {
360
- name: "o1",
361
- displayName: "O1",
362
- openrouterId: "openai/o1",
363
- maxInputTokens: 2e5,
364
- supportedFileTypes: ["pdf", "image"],
365
- pricing: {
366
- inputPerM: 15,
367
- outputPerM: 60,
368
- cacheReadPerM: 7.5,
369
- currency: "USD",
370
- unit: "per_million_tokens"
371
- }
372
- }
373
- ],
374
- baseURLSupport: "none",
375
- supportedFileTypes: [],
376
- // No defaults - models must explicitly specify support
377
- openrouterPrefix: "openai"
378
- },
379
- "openai-compatible": {
380
- models: [],
381
- // Empty - accepts any model name for custom endpoints
382
- baseURLSupport: "required",
383
- supportedFileTypes: ["pdf", "image", "audio"],
384
- // Allow all types for custom endpoints - user assumes responsibility for model capabilities
385
- supportsCustomModels: true
386
- },
387
- anthropic: {
388
- models: [
389
- {
390
- name: "claude-haiku-4-5-20251001",
391
- displayName: "Claude 4.5 Haiku",
392
- openrouterId: "anthropic/claude-haiku-4.5",
393
- maxInputTokens: 2e5,
394
- default: true,
395
- supportedFileTypes: ["pdf", "image"],
396
- pricing: {
397
- inputPerM: 1,
398
- outputPerM: 5,
399
- cacheWritePerM: 1.25,
400
- cacheReadPerM: 0.1,
401
- currency: "USD",
402
- unit: "per_million_tokens"
403
- }
404
- },
405
- {
406
- name: "claude-sonnet-4-5-20250929",
407
- displayName: "Claude 4.5 Sonnet",
408
- openrouterId: "anthropic/claude-sonnet-4.5",
409
- maxInputTokens: 2e5,
410
- supportedFileTypes: ["pdf", "image"],
411
- pricing: {
412
- inputPerM: 3,
413
- outputPerM: 15,
414
- cacheWritePerM: 3.75,
415
- cacheReadPerM: 0.3,
416
- currency: "USD",
417
- unit: "per_million_tokens"
418
- }
419
- },
420
- {
421
- name: "claude-opus-4-5-20251101",
422
- displayName: "Claude 4.5 Opus",
423
- openrouterId: "anthropic/claude-opus-4.5",
424
- maxInputTokens: 2e5,
425
- supportedFileTypes: ["pdf", "image"],
426
- pricing: {
427
- inputPerM: 5,
428
- outputPerM: 25,
429
- cacheWritePerM: 6.25,
430
- cacheReadPerM: 0.5,
431
- currency: "USD",
432
- unit: "per_million_tokens"
433
- }
434
- },
435
- {
436
- name: "claude-opus-4-1-20250805",
437
- displayName: "Claude 4.1 Opus",
438
- openrouterId: "anthropic/claude-opus-4.1",
439
- maxInputTokens: 2e5,
440
- supportedFileTypes: ["pdf", "image"],
441
- pricing: {
442
- inputPerM: 15,
443
- outputPerM: 75,
444
- cacheWritePerM: 18.75,
445
- cacheReadPerM: 1.5,
446
- currency: "USD",
447
- unit: "per_million_tokens"
448
- }
449
- },
450
- {
451
- name: "claude-4-opus-20250514",
452
- displayName: "Claude 4 Opus",
453
- openrouterId: "anthropic/claude-opus-4",
454
- maxInputTokens: 2e5,
455
- supportedFileTypes: ["pdf", "image"],
456
- pricing: {
457
- inputPerM: 15,
458
- outputPerM: 75,
459
- cacheWritePerM: 18.75,
460
- cacheReadPerM: 1.5,
461
- currency: "USD",
462
- unit: "per_million_tokens"
463
- }
464
- },
465
- {
466
- name: "claude-4-sonnet-20250514",
467
- displayName: "Claude 4 Sonnet",
468
- openrouterId: "anthropic/claude-sonnet-4",
469
- maxInputTokens: 2e5,
470
- supportedFileTypes: ["pdf", "image"],
471
- pricing: {
472
- inputPerM: 3,
473
- outputPerM: 15,
474
- cacheWritePerM: 3.75,
475
- cacheReadPerM: 0.3,
476
- currency: "USD",
477
- unit: "per_million_tokens"
478
- }
479
- },
480
- {
481
- name: "claude-3-7-sonnet-20250219",
482
- displayName: "Claude 3.7 Sonnet",
483
- openrouterId: "anthropic/claude-3.7-sonnet",
484
- maxInputTokens: 2e5,
485
- supportedFileTypes: ["pdf", "image"],
486
- pricing: {
487
- inputPerM: 3,
488
- outputPerM: 15,
489
- cacheWritePerM: 3.75,
490
- cacheReadPerM: 0.3,
491
- currency: "USD",
492
- unit: "per_million_tokens"
493
- }
494
- },
495
- {
496
- name: "claude-3-5-sonnet-20240620",
497
- displayName: "Claude 3.5 Sonnet",
498
- openrouterId: "anthropic/claude-3.5-sonnet",
499
- maxInputTokens: 2e5,
500
- supportedFileTypes: ["pdf", "image"],
501
- pricing: {
502
- inputPerM: 3,
503
- outputPerM: 15,
504
- cacheWritePerM: 3.75,
505
- cacheReadPerM: 0.3,
506
- currency: "USD",
507
- unit: "per_million_tokens"
508
- }
509
- },
510
- {
511
- name: "claude-3-5-haiku-20241022",
512
- displayName: "Claude 3.5 Haiku",
513
- openrouterId: "anthropic/claude-3.5-haiku",
514
- maxInputTokens: 2e5,
515
- supportedFileTypes: ["pdf", "image"],
516
- pricing: {
517
- inputPerM: 0.8,
518
- outputPerM: 4,
519
- cacheWritePerM: 1,
520
- cacheReadPerM: 0.08,
521
- currency: "USD",
522
- unit: "per_million_tokens"
523
- }
524
- }
525
- ],
526
- baseURLSupport: "none",
527
- supportedFileTypes: [],
528
- // No defaults - models must explicitly specify support
529
- openrouterPrefix: "anthropic"
530
- },
531
- google: {
532
- models: [
533
- {
534
- name: "gemini-3-flash-preview",
535
- displayName: "Gemini 3 Flash Preview",
536
- openrouterId: "google/gemini-3-flash-preview",
537
- maxInputTokens: 1048576,
538
- default: true,
539
- supportedFileTypes: ["pdf", "image", "audio"],
540
- pricing: {
541
- inputPerM: 0.5,
542
- outputPerM: 3,
543
- cacheReadPerM: 0.05,
544
- currency: "USD",
545
- unit: "per_million_tokens"
546
- }
547
- },
548
- {
549
- name: "gemini-3-pro-preview",
550
- displayName: "Gemini 3 Pro Preview",
551
- openrouterId: "google/gemini-3-pro-preview",
552
- maxInputTokens: 1048576,
553
- supportedFileTypes: ["pdf", "image", "audio"],
554
- pricing: {
555
- inputPerM: 2,
556
- outputPerM: 12,
557
- cacheReadPerM: 0.2,
558
- currency: "USD",
559
- unit: "per_million_tokens"
560
- }
561
- },
562
- {
563
- name: "gemini-3-pro-image-preview",
564
- displayName: "Gemini 3 Pro Image Preview",
565
- openrouterId: "google/gemini-3-pro-image-preview",
566
- maxInputTokens: 1048576,
567
- supportedFileTypes: ["image"],
568
- pricing: {
569
- inputPerM: 2,
570
- outputPerM: 120,
571
- cacheReadPerM: 0.2,
572
- currency: "USD",
573
- unit: "per_million_tokens"
574
- }
575
- },
576
- {
577
- name: "gemini-2.5-pro",
578
- displayName: "Gemini 2.5 Pro",
579
- openrouterId: "google/gemini-2.5-pro",
580
- maxInputTokens: 1048576,
581
- supportedFileTypes: ["pdf", "image", "audio"],
582
- pricing: {
583
- inputPerM: 1.25,
584
- outputPerM: 10,
585
- cacheReadPerM: 0.31,
586
- currency: "USD",
587
- unit: "per_million_tokens"
588
- }
589
- },
590
- {
591
- name: "gemini-2.5-flash",
592
- displayName: "Gemini 2.5 Flash",
593
- openrouterId: "google/gemini-2.5-flash",
594
- maxInputTokens: 1048576,
595
- supportedFileTypes: ["pdf", "image", "audio"],
596
- pricing: {
597
- inputPerM: 0.3,
598
- outputPerM: 2.5,
599
- cacheReadPerM: 0.03,
600
- currency: "USD",
601
- unit: "per_million_tokens"
602
- }
603
- },
604
- {
605
- name: "gemini-2.5-flash-lite",
606
- displayName: "Gemini 2.5 Flash Lite",
607
- openrouterId: "google/gemini-2.5-flash-lite",
608
- maxInputTokens: 1048576,
609
- supportedFileTypes: ["pdf", "image", "audio"],
610
- pricing: {
611
- inputPerM: 0.1,
612
- outputPerM: 0.4,
613
- cacheReadPerM: 0.025,
614
- currency: "USD",
615
- unit: "per_million_tokens"
616
- }
617
- },
618
- {
619
- name: "gemini-2.0-flash",
620
- displayName: "Gemini 2.0 Flash",
621
- openrouterId: "google/gemini-2.0-flash-001",
622
- maxInputTokens: 1048576,
623
- supportedFileTypes: ["pdf", "image", "audio"],
624
- pricing: {
625
- inputPerM: 0.15,
626
- outputPerM: 0.6,
627
- cacheReadPerM: 0.025,
628
- cacheWritePerM: 1,
629
- currency: "USD",
630
- unit: "per_million_tokens"
631
- }
632
- },
633
- {
634
- name: "gemini-2.0-flash-lite",
635
- displayName: "Gemini 2.0 Flash Lite",
636
- openrouterId: "google/gemini-2.0-flash-lite-001",
637
- maxInputTokens: 1048576,
638
- supportedFileTypes: ["pdf", "image", "audio"],
639
- pricing: {
640
- inputPerM: 0.075,
641
- outputPerM: 0.3,
642
- cacheReadPerM: 0.01875,
643
- currency: "USD",
644
- unit: "per_million_tokens"
645
- }
646
- }
647
- ],
648
- baseURLSupport: "none",
649
- supportedFileTypes: [],
650
- // No defaults - models must explicitly specify support
651
- openrouterPrefix: "google"
652
- },
653
- // https://console.groq.com/docs/models
654
- groq: {
655
- models: [
656
- {
657
- name: "gemma-2-9b-it",
658
- displayName: "Gemma 2 9B Instruct",
659
- maxInputTokens: 8192,
660
- supportedFileTypes: [],
661
- pricing: {
662
- inputPerM: 0.2,
663
- outputPerM: 0.2,
664
- currency: "USD",
665
- unit: "per_million_tokens"
666
- }
667
- },
668
- {
669
- name: "openai/gpt-oss-20b",
670
- displayName: "GPT OSS 20B 128k",
671
- maxInputTokens: 128e3,
672
- supportedFileTypes: [],
673
- pricing: {
674
- inputPerM: 0.1,
675
- outputPerM: 0.5,
676
- currency: "USD",
677
- unit: "per_million_tokens"
678
- }
679
- },
680
- {
681
- name: "openai/gpt-oss-120b",
682
- displayName: "GPT OSS 120B 128k",
683
- maxInputTokens: 128e3,
684
- supportedFileTypes: [],
685
- pricing: {
686
- inputPerM: 0.15,
687
- outputPerM: 0.75,
688
- currency: "USD",
689
- unit: "per_million_tokens"
690
- }
691
- },
692
- {
693
- name: "moonshotai/kimi-k2-instruct",
694
- displayName: "Kimi K2 1T 128k",
695
- maxInputTokens: 128e3,
696
- supportedFileTypes: [],
697
- pricing: {
698
- inputPerM: 1,
699
- outputPerM: 3,
700
- cacheReadPerM: 0.5,
701
- currency: "USD",
702
- unit: "per_million_tokens"
703
- }
704
- },
705
- {
706
- name: "meta-llama/llama-4-scout-17b-16e-instruct",
707
- displayName: "Llama 4 Scout (17Bx16E) 128k",
708
- maxInputTokens: 128e3,
709
- supportedFileTypes: [],
710
- pricing: {
711
- inputPerM: 0.11,
712
- outputPerM: 0.34,
713
- currency: "USD",
714
- unit: "per_million_tokens"
715
- }
716
- },
717
- {
718
- name: "meta-llama/llama-4-maverick-17b-128e-instruct",
719
- displayName: "Llama 4 Maverick (17Bx128E) 128k",
720
- maxInputTokens: 128e3,
721
- supportedFileTypes: [],
722
- pricing: {
723
- inputPerM: 0.2,
724
- outputPerM: 0.6,
725
- currency: "USD",
726
- unit: "per_million_tokens"
727
- }
728
- },
729
- {
730
- name: "deepseek-r1-distill-llama-70b",
731
- displayName: "DeepSeek R1 Distill Llama 70B 128k",
732
- maxInputTokens: 128e3,
733
- supportedFileTypes: [],
734
- pricing: {
735
- inputPerM: 0.75,
736
- outputPerM: 0.9,
737
- currency: "USD",
738
- unit: "per_million_tokens"
739
- }
740
- },
741
- {
742
- name: "qwen/qwen3-32b",
743
- displayName: "Qwen3 32B 131k",
744
- maxInputTokens: 131e3,
745
- supportedFileTypes: [],
746
- pricing: {
747
- inputPerM: 0.29,
748
- outputPerM: 0.59,
749
- currency: "USD",
750
- unit: "per_million_tokens"
751
- }
752
- },
753
- {
754
- name: "llama-3.3-70b-versatile",
755
- displayName: "Llama 3.3 70B Versatile",
756
- maxInputTokens: 128e3,
757
- default: true,
758
- supportedFileTypes: [],
759
- pricing: {
760
- inputPerM: 0.59,
761
- outputPerM: 0.79,
762
- currency: "USD",
763
- unit: "per_million_tokens"
764
- }
765
- }
766
- ],
767
- baseURLSupport: "none",
768
- supportedFileTypes: []
769
- // Groq currently doesn't support file uploads
770
- },
771
- // https://docs.x.ai/docs/models
772
- // Note: XAI API only supports image uploads (JPG/PNG up to 20MB), not PDFs
773
- xai: {
774
- models: [
775
- {
776
- name: "grok-4",
777
- displayName: "Grok 4",
778
- openrouterId: "x-ai/grok-4",
779
- maxInputTokens: 256e3,
780
- default: true,
781
- supportedFileTypes: ["image"],
782
- pricing: {
783
- inputPerM: 3,
784
- outputPerM: 15,
785
- cacheReadPerM: 0.75,
786
- currency: "USD",
787
- unit: "per_million_tokens"
788
- }
789
- },
790
- {
791
- name: "grok-3",
792
- displayName: "Grok 3",
793
- openrouterId: "x-ai/grok-3",
794
- maxInputTokens: 131072,
795
- supportedFileTypes: ["image"],
796
- pricing: {
797
- inputPerM: 3,
798
- outputPerM: 15,
799
- cacheReadPerM: 0.75,
800
- currency: "USD",
801
- unit: "per_million_tokens"
802
- }
803
- },
804
- {
805
- name: "grok-3-mini",
806
- displayName: "Grok 3 Mini",
807
- openrouterId: "x-ai/grok-3-mini",
808
- maxInputTokens: 131072,
809
- supportedFileTypes: ["image"],
810
- pricing: {
811
- inputPerM: 0.3,
812
- outputPerM: 0.5,
813
- cacheReadPerM: 0.075,
814
- currency: "USD",
815
- unit: "per_million_tokens"
816
- }
817
- },
818
- {
819
- name: "grok-code-fast-1",
820
- displayName: "Grok Code Fast",
821
- openrouterId: "x-ai/grok-code-fast-1",
822
- maxInputTokens: 131072,
823
- supportedFileTypes: [],
824
- pricing: {
825
- inputPerM: 0.2,
826
- outputPerM: 1.5,
827
- cacheReadPerM: 0.02,
828
- currency: "USD",
829
- unit: "per_million_tokens"
830
- }
831
- }
832
- ],
833
- baseURLSupport: "none",
834
- supportedFileTypes: [],
835
- // XAI currently doesn't support file uploads
836
- openrouterPrefix: "x-ai"
837
- },
838
- // https://docs.cohere.com/reference/models
839
- cohere: {
840
- models: [
841
- {
842
- name: "command-a-03-2025",
843
- displayName: "Command A (03-2025)",
844
- openrouterId: "cohere/command-a",
845
- maxInputTokens: 256e3,
846
- default: true,
847
- supportedFileTypes: [],
848
- pricing: {
849
- inputPerM: 2.5,
850
- outputPerM: 10,
851
- currency: "USD",
852
- unit: "per_million_tokens"
853
- }
854
- },
855
- {
856
- name: "command-r-plus",
857
- displayName: "Command R+",
858
- openrouterId: "cohere/command-r-plus-08-2024",
859
- maxInputTokens: 128e3,
860
- supportedFileTypes: [],
861
- pricing: {
862
- inputPerM: 2.5,
863
- outputPerM: 10,
864
- currency: "USD",
865
- unit: "per_million_tokens"
866
- }
867
- },
868
- {
869
- name: "command-r",
870
- displayName: "Command R",
871
- openrouterId: "cohere/command-r-08-2024",
872
- maxInputTokens: 128e3,
873
- supportedFileTypes: [],
874
- pricing: {
875
- inputPerM: 0.15,
876
- outputPerM: 0.6,
877
- currency: "USD",
878
- unit: "per_million_tokens"
879
- }
880
- },
881
- {
882
- name: "command-r7b",
883
- displayName: "Command R7B",
884
- openrouterId: "cohere/command-r7b-12-2024",
885
- maxInputTokens: 128e3,
886
- supportedFileTypes: [],
887
- pricing: {
888
- inputPerM: 0.0375,
889
- outputPerM: 0.15,
890
- currency: "USD",
891
- unit: "per_million_tokens"
892
- }
893
- }
894
- ],
895
- baseURLSupport: "none",
896
- supportedFileTypes: [],
897
- // Cohere currently doesn't support file uploads
898
- openrouterPrefix: "cohere"
899
- },
900
- // https://platform.minimax.io/docs/api-reference/text-openai-api
901
- // MiniMax provides an OpenAI-compatible endpoint at https://api.minimax.chat/v1
902
- minimax: {
903
- models: [
904
- {
905
- name: "MiniMax-M2.1",
906
- displayName: "MiniMax M2.1",
907
- openrouterId: "minimax/minimax-m2.1",
908
- maxInputTokens: 196608,
909
- default: true,
910
- supportedFileTypes: []
911
- },
912
- {
913
- name: "MiniMax-M2.1-lightning",
914
- displayName: "MiniMax M2.1 Lightning",
915
- openrouterId: "minimax/minimax-m2.1-lightning",
916
- maxInputTokens: 196608,
917
- supportedFileTypes: []
918
- },
919
- {
920
- name: "MiniMax-M2",
921
- displayName: "MiniMax M2",
922
- openrouterId: "minimax/minimax-m2",
923
- maxInputTokens: 2e5,
924
- supportedFileTypes: []
925
- },
926
- {
927
- name: "M2-her",
928
- displayName: "MiniMax M2-Her",
929
- openrouterId: "minimax/minimax-m2-her",
930
- maxInputTokens: 32768,
931
- supportedFileTypes: []
932
- }
933
- ],
934
- baseURLSupport: "none",
935
- supportedFileTypes: [],
936
- openrouterPrefix: "minimax"
937
- },
938
- // https://docs.z.ai/api-reference/llm/chat-completion
939
- // Zhipu AI GLM OpenAI-compatible endpoint: https://open.bigmodel.cn/api/paas/v4
940
- glm: {
941
- models: [
942
- {
943
- name: "glm-4.7",
944
- displayName: "GLM 4.7",
945
- openrouterId: "z-ai/glm-4.7",
946
- maxInputTokens: 128e3,
947
- default: true,
948
- supportedFileTypes: []
949
- },
950
- {
951
- name: "glm-4.7-flash",
952
- displayName: "GLM 4.7 Flash",
953
- openrouterId: "z-ai/glm-4.7-flash",
954
- maxInputTokens: 128e3,
955
- supportedFileTypes: []
956
- },
957
- {
958
- name: "glm-4.7-flashx",
959
- displayName: "GLM 4.7 FlashX",
960
- openrouterId: "z-ai/glm-4.7-flashx",
961
- maxInputTokens: 128e3,
962
- supportedFileTypes: []
963
- }
964
- ],
965
- baseURLSupport: "none",
966
- supportedFileTypes: [],
967
- openrouterPrefix: "z-ai"
968
- },
969
- // https://openrouter.ai/docs
970
- // OpenRouter is a unified API gateway providing access to 100+ models from various providers.
971
- // Model validation is handled dynamically via openrouter-model-registry.ts
972
- openrouter: {
973
- models: [],
974
- // Empty - accepts any model name (validated against OpenRouter's catalog)
975
- baseURLSupport: "none",
976
- // Fixed endpoint - baseURL auto-injected in resolver, no user override allowed
977
- supportedFileTypes: ["pdf", "image", "audio"],
978
- // Allow all types - user assumes responsibility for model capabilities
979
- supportsCustomModels: true,
980
- supportsAllRegistryModels: true
981
- // Can serve models from all other providers
982
- },
983
- // https://docs.litellm.ai/
984
- // LiteLLM is an OpenAI-compatible proxy that unifies 100+ LLM providers.
985
- // User must host their own LiteLLM proxy and provide the baseURL.
986
- litellm: {
987
- models: [],
988
- // Empty - accepts any model name (user's proxy determines available models)
989
- baseURLSupport: "required",
990
- // User must provide their LiteLLM proxy URL
991
- supportedFileTypes: ["pdf", "image", "audio"],
992
- // Allow all types - user assumes responsibility for model capabilities
993
- supportsCustomModels: true
994
- },
995
- // https://glama.ai/
996
- // Glama is an OpenAI-compatible gateway providing unified access to multiple LLM providers.
997
- // Fixed endpoint: https://glama.ai/api/gateway/openai/v1
998
- glama: {
999
- models: [],
1000
- // Empty - accepts any model name (format: provider/model e.g., openai/gpt-4o)
1001
- baseURLSupport: "none",
1002
- // Fixed endpoint - baseURL auto-injected
1003
- supportedFileTypes: ["pdf", "image", "audio"],
1004
- // Allow all types - user assumes responsibility for model capabilities
1005
- supportsCustomModels: true
1006
- },
1007
- // https://cloud.google.com/vertex-ai
1008
- // Google Vertex AI - GCP-hosted gateway for Gemini and Claude models
1009
- // Supports both Google's Gemini models and Anthropic's Claude via partnership
1010
- //
1011
- // Setup instructions:
1012
- // 1. Create a Google Cloud account and project
1013
- // 2. Enable the Vertex AI API: gcloud services enable aiplatform.googleapis.com
1014
- // 3. Enable desired Claude models (requires Anthropic Model Garden)
1015
- // 4. Install Google Cloud CLI: https://cloud.google.com/sdk/docs/install
1016
- // 5. Configure ADC: gcloud auth application-default login
1017
- // 6. Set env vars: GOOGLE_VERTEX_PROJECT (required), GOOGLE_VERTEX_LOCATION (optional)
1018
- //
1019
- // TODO: Add dynamic model fetching via publishers.models.list API
1020
- // - Requires: projectId, region, ADC auth
1021
- // - Endpoints: GET projects/{project}/locations/{location}/publishers/{google,anthropic}/models
1022
- // - Note: API doesn't return aliases (e.g., gemini-2.0-flash), only versioned IDs
1023
- // - Docs: https://cloud.google.com/vertex-ai/docs/reference/rest/v1/projects.locations.models/list
1024
- // - Models: https://cloud.google.com/vertex-ai/generative-ai/docs/models
1025
- vertex: {
1026
- models: [
1027
- // Gemini 3 models on Vertex AI (Preview)
1028
- {
1029
- name: "gemini-3-flash-preview",
1030
- displayName: "Gemini 3 Flash (Vertex)",
1031
- maxInputTokens: 1048576,
1032
- default: true,
1033
- supportedFileTypes: ["pdf", "image", "audio"],
1034
- pricing: {
1035
- inputPerM: 0.5,
1036
- outputPerM: 3,
1037
- cacheReadPerM: 0.05,
1038
- currency: "USD",
1039
- unit: "per_million_tokens"
1040
- }
1041
- },
1042
- {
1043
- name: "gemini-3-pro-preview",
1044
- displayName: "Gemini 3 Pro (Vertex)",
1045
- maxInputTokens: 1048576,
1046
- supportedFileTypes: ["pdf", "image", "audio"],
1047
- pricing: {
1048
- inputPerM: 2,
1049
- outputPerM: 12,
1050
- cacheReadPerM: 0.2,
1051
- currency: "USD",
1052
- unit: "per_million_tokens"
1053
- }
1054
- },
1055
- // Gemini 2.x models on Vertex AI
1056
- {
1057
- name: "gemini-2.5-pro",
1058
- displayName: "Gemini 2.5 Pro (Vertex)",
1059
- maxInputTokens: 1048576,
1060
- supportedFileTypes: ["pdf", "image", "audio"],
1061
- pricing: {
1062
- inputPerM: 1.25,
1063
- outputPerM: 10,
1064
- cacheReadPerM: 0.31,
1065
- currency: "USD",
1066
- unit: "per_million_tokens"
1067
- }
1068
- },
1069
- {
1070
- name: "gemini-2.5-flash",
1071
- displayName: "Gemini 2.5 Flash (Vertex)",
1072
- maxInputTokens: 1048576,
1073
- supportedFileTypes: ["pdf", "image", "audio"],
1074
- pricing: {
1075
- inputPerM: 0.15,
1076
- outputPerM: 0.6,
1077
- cacheReadPerM: 0.0375,
1078
- currency: "USD",
1079
- unit: "per_million_tokens"
1080
- }
1081
- },
1082
- {
1083
- name: "gemini-2.0-flash",
1084
- displayName: "Gemini 2.0 Flash (Vertex)",
1085
- maxInputTokens: 1048576,
1086
- supportedFileTypes: ["pdf", "image", "audio"],
1087
- pricing: {
1088
- inputPerM: 0.1,
1089
- outputPerM: 0.4,
1090
- cacheReadPerM: 0.025,
1091
- currency: "USD",
1092
- unit: "per_million_tokens"
1093
- }
1094
- },
1095
- // Claude 4.5 models on Vertex AI (via Anthropic partnership)
1096
- // Note: Claude model IDs use @ suffix format on Vertex
1097
- {
1098
- name: "claude-opus-4-5@20251101",
1099
- displayName: "Claude 4.5 Opus (Vertex)",
1100
- maxInputTokens: 2e5,
1101
- supportedFileTypes: ["pdf", "image"],
1102
- pricing: {
1103
- inputPerM: 5,
1104
- outputPerM: 25,
1105
- cacheWritePerM: 6.25,
1106
- cacheReadPerM: 0.5,
1107
- currency: "USD",
1108
- unit: "per_million_tokens"
1109
- }
1110
- },
1111
- {
1112
- name: "claude-sonnet-4-5@20250929",
1113
- displayName: "Claude 4.5 Sonnet (Vertex)",
1114
- maxInputTokens: 2e5,
1115
- supportedFileTypes: ["pdf", "image"],
1116
- pricing: {
1117
- inputPerM: 3,
1118
- outputPerM: 15,
1119
- cacheWritePerM: 3.75,
1120
- cacheReadPerM: 0.3,
1121
- currency: "USD",
1122
- unit: "per_million_tokens"
1123
- }
1124
- },
1125
- {
1126
- name: "claude-haiku-4-5@20251001",
1127
- displayName: "Claude 4.5 Haiku (Vertex)",
1128
- maxInputTokens: 2e5,
1129
- supportedFileTypes: ["pdf", "image"],
1130
- pricing: {
1131
- inputPerM: 1,
1132
- outputPerM: 5,
1133
- cacheWritePerM: 1.25,
1134
- cacheReadPerM: 0.1,
1135
- currency: "USD",
1136
- unit: "per_million_tokens"
1137
- }
1138
- },
1139
- // Claude 4.1 and 4.0 models on Vertex AI
1140
- {
1141
- name: "claude-opus-4-1@20250805",
1142
- displayName: "Claude 4.1 Opus (Vertex)",
1143
- maxInputTokens: 2e5,
1144
- supportedFileTypes: ["pdf", "image"],
1145
- pricing: {
1146
- inputPerM: 15,
1147
- outputPerM: 75,
1148
- cacheWritePerM: 18.75,
1149
- cacheReadPerM: 1.5,
1150
- currency: "USD",
1151
- unit: "per_million_tokens"
1152
- }
1153
- },
1154
- {
1155
- name: "claude-opus-4@20250514",
1156
- displayName: "Claude 4 Opus (Vertex)",
1157
- maxInputTokens: 2e5,
1158
- supportedFileTypes: ["pdf", "image"],
1159
- pricing: {
1160
- inputPerM: 15,
1161
- outputPerM: 75,
1162
- cacheWritePerM: 18.75,
1163
- cacheReadPerM: 1.5,
1164
- currency: "USD",
1165
- unit: "per_million_tokens"
1166
- }
1167
- },
1168
- {
1169
- name: "claude-sonnet-4@20250514",
1170
- displayName: "Claude 4 Sonnet (Vertex)",
1171
- maxInputTokens: 2e5,
1172
- supportedFileTypes: ["pdf", "image"],
1173
- pricing: {
1174
- inputPerM: 3,
1175
- outputPerM: 15,
1176
- cacheWritePerM: 3.75,
1177
- cacheReadPerM: 0.3,
1178
- currency: "USD",
1179
- unit: "per_million_tokens"
1180
- }
1181
- },
1182
- // Claude 3.x models on Vertex AI
1183
- {
1184
- name: "claude-3-7-sonnet@20250219",
1185
- displayName: "Claude 3.7 Sonnet (Vertex)",
1186
- maxInputTokens: 2e5,
1187
- supportedFileTypes: ["pdf", "image"],
1188
- pricing: {
1189
- inputPerM: 3,
1190
- outputPerM: 15,
1191
- cacheWritePerM: 3.75,
1192
- cacheReadPerM: 0.3,
1193
- currency: "USD",
1194
- unit: "per_million_tokens"
1195
- }
1196
- },
1197
- {
1198
- name: "claude-3-5-sonnet-v2@20241022",
1199
- displayName: "Claude 3.5 Sonnet v2 (Vertex)",
1200
- maxInputTokens: 2e5,
1201
- supportedFileTypes: ["pdf", "image"],
1202
- pricing: {
1203
- inputPerM: 3,
1204
- outputPerM: 15,
1205
- cacheWritePerM: 3.75,
1206
- cacheReadPerM: 0.3,
1207
- currency: "USD",
1208
- unit: "per_million_tokens"
1209
- }
1210
- },
1211
- {
1212
- name: "claude-3-5-haiku@20241022",
1213
- displayName: "Claude 3.5 Haiku (Vertex)",
1214
- maxInputTokens: 2e5,
1215
- supportedFileTypes: ["pdf", "image"],
1216
- pricing: {
1217
- inputPerM: 0.8,
1218
- outputPerM: 4,
1219
- cacheWritePerM: 1,
1220
- cacheReadPerM: 0.08,
1221
- currency: "USD",
1222
- unit: "per_million_tokens"
1223
- }
1224
- }
1225
- ],
1226
- baseURLSupport: "none",
1227
- // Auto-constructed from projectId and region
1228
- supportedFileTypes: ["pdf", "image", "audio"]
1229
- },
1230
- // Amazon Bedrock - AWS-hosted gateway for Claude, Nova, and more
1231
- // Auth: AWS credentials (env vars) or Bedrock API key (AWS_BEARER_TOKEN_BEDROCK)
1232
- //
1233
- // Cross-region inference: Auto-added for anthropic.* and amazon.* models
1234
- // supportsCustomModels: true allows users to add custom model IDs beyond the fixed list
1235
- bedrock: {
1236
- supportsCustomModels: true,
1237
- models: [
1238
- // Claude 4.5 models (latest)
1239
- {
1240
- name: "anthropic.claude-sonnet-4-5-20250929-v1:0",
1241
- displayName: "Claude 4.5 Sonnet",
1242
- maxInputTokens: 2e5,
1243
- default: true,
1244
- supportedFileTypes: ["pdf", "image"],
1245
- pricing: {
1246
- inputPerM: 3,
1247
- outputPerM: 15,
1248
- cacheWritePerM: 3.75,
1249
- cacheReadPerM: 0.3,
1250
- currency: "USD",
1251
- unit: "per_million_tokens"
1252
- }
1253
- },
1254
- {
1255
- name: "anthropic.claude-haiku-4-5-20251001-v1:0",
1256
- displayName: "Claude 4.5 Haiku",
1257
- maxInputTokens: 2e5,
1258
- supportedFileTypes: ["pdf", "image"],
1259
- pricing: {
1260
- inputPerM: 1,
1261
- outputPerM: 5,
1262
- cacheWritePerM: 1.25,
1263
- cacheReadPerM: 0.1,
1264
- currency: "USD",
1265
- unit: "per_million_tokens"
1266
- }
1267
- },
1268
- {
1269
- name: "anthropic.claude-opus-4-5-20251101-v1:0",
1270
- displayName: "Claude 4.5 Opus",
1271
- maxInputTokens: 2e5,
1272
- supportedFileTypes: ["pdf", "image"],
1273
- pricing: {
1274
- inputPerM: 5,
1275
- outputPerM: 25,
1276
- cacheWritePerM: 6.25,
1277
- cacheReadPerM: 0.5,
1278
- currency: "USD",
1279
- unit: "per_million_tokens"
1280
- }
1281
- },
1282
- // Amazon Nova models
1283
- {
1284
- name: "amazon.nova-premier-v1:0",
1285
- displayName: "Nova Premier",
1286
- maxInputTokens: 1e6,
1287
- supportedFileTypes: ["image"],
1288
- pricing: {
1289
- inputPerM: 2.5,
1290
- outputPerM: 12.5,
1291
- currency: "USD",
1292
- unit: "per_million_tokens"
1293
- }
1294
- },
1295
- {
1296
- name: "amazon.nova-pro-v1:0",
1297
- displayName: "Nova Pro",
1298
- maxInputTokens: 3e5,
1299
- supportedFileTypes: ["pdf", "image"],
1300
- pricing: {
1301
- inputPerM: 0.8,
1302
- outputPerM: 3.2,
1303
- cacheReadPerM: 0.2,
1304
- currency: "USD",
1305
- unit: "per_million_tokens"
1306
- }
1307
- },
1308
- {
1309
- name: "amazon.nova-lite-v1:0",
1310
- displayName: "Nova Lite",
1311
- maxInputTokens: 3e5,
1312
- supportedFileTypes: ["pdf", "image"],
1313
- pricing: {
1314
- inputPerM: 0.06,
1315
- outputPerM: 0.24,
1316
- cacheReadPerM: 0.015,
1317
- currency: "USD",
1318
- unit: "per_million_tokens"
1319
- }
1320
- },
1321
- {
1322
- name: "amazon.nova-micro-v1:0",
1323
- displayName: "Nova Micro",
1324
- maxInputTokens: 128e3,
1325
- supportedFileTypes: [],
1326
- pricing: {
1327
- inputPerM: 0.035,
1328
- outputPerM: 0.14,
1329
- cacheReadPerM: 875e-5,
1330
- currency: "USD",
1331
- unit: "per_million_tokens"
1332
- }
1333
- },
1334
- // OpenAI GPT-OSS
1335
- {
1336
- name: "openai.gpt-oss-120b-1:0",
1337
- displayName: "GPT-OSS 120B",
1338
- maxInputTokens: 128e3,
1339
- supportedFileTypes: [],
1340
- pricing: {
1341
- inputPerM: 0.15,
1342
- outputPerM: 0.6,
1343
- currency: "USD",
1344
- unit: "per_million_tokens"
1345
- }
1346
- },
1347
- {
1348
- name: "openai.gpt-oss-20b-1:0",
1349
- displayName: "GPT-OSS 20B",
1350
- maxInputTokens: 128e3,
1351
- supportedFileTypes: [],
1352
- pricing: {
1353
- inputPerM: 0.07,
1354
- outputPerM: 0.3,
1355
- currency: "USD",
1356
- unit: "per_million_tokens"
1357
- }
1358
- },
1359
- // Qwen
1360
- {
1361
- name: "qwen.qwen3-coder-30b-a3b-v1:0",
1362
- displayName: "Qwen3 Coder 30B",
1363
- maxInputTokens: 262144,
1364
- supportedFileTypes: [],
1365
- pricing: {
1366
- inputPerM: 0.15,
1367
- outputPerM: 0.6,
1368
- currency: "USD",
1369
- unit: "per_million_tokens"
1370
- }
1371
- },
1372
- {
1373
- name: "qwen.qwen3-coder-480b-a35b-v1:0",
1374
- displayName: "Qwen3 Coder 480B",
1375
- maxInputTokens: 262144,
1376
- supportedFileTypes: [],
1377
- pricing: {
1378
- inputPerM: 0.22,
1379
- outputPerM: 1.8,
1380
- currency: "USD",
1381
- unit: "per_million_tokens"
1382
- }
1383
- }
1384
- ],
1385
- baseURLSupport: "none",
1386
- // Auto-constructed from region
1387
- supportedFileTypes: ["pdf", "image"]
1388
- },
1389
- // Native local model execution via node-llama-cpp
1390
- // Runs GGUF models directly on the machine using Metal/CUDA/Vulkan acceleration
1391
- // Models are downloaded from HuggingFace and stored in ~/.dexto/models/
1392
- local: {
1393
- models: [],
1394
- // Populated dynamically from local model registry
1395
- baseURLSupport: "none",
1396
- // No external server needed
1397
- supportedFileTypes: ["image"],
1398
- // Vision support depends on model capabilities
1399
- supportsCustomModels: true
1400
- // Allow any GGUF model path
1401
- },
1402
- // Ollama server integration
1403
- // Uses Ollama's OpenAI-compatible API for local model inference
1404
- // Requires Ollama to be installed and running (default: http://localhost:11434)
1405
- ollama: {
1406
- models: [],
1407
- // Populated dynamically from Ollama API
1408
- baseURLSupport: "optional",
1409
- // Default: http://localhost:11434, can be customized
1410
- supportedFileTypes: ["image"],
1411
- // Vision support depends on model
1412
- supportsCustomModels: true
1413
- // Accept any Ollama model name
1414
- },
1415
- // Dexto Gateway - OpenAI-compatible proxy through api.dexto.ai
1416
- // Routes to OpenRouter with per-request billing (balance decrement)
1417
- // Requires DEXTO_API_KEY from `dexto login`
1418
- //
1419
- // This is a first-class provider that users explicitly select.
1420
- // Model IDs are in OpenRouter format (e.g., 'anthropic/claude-sonnet-4.5')
1421
- dexto: {
1422
- models: [
1423
- // Claude models (Anthropic via OpenRouter)
1424
- {
1425
- name: "anthropic/claude-haiku-4.5",
1426
- displayName: "Claude 4.5 Haiku",
1427
- maxInputTokens: 2e5,
1428
- default: true,
1429
- supportedFileTypes: ["pdf", "image"],
1430
- pricing: {
1431
- inputPerM: 1,
1432
- outputPerM: 5,
1433
- cacheWritePerM: 1.25,
1434
- cacheReadPerM: 0.1,
1435
- currency: "USD",
1436
- unit: "per_million_tokens"
1437
- }
1438
- },
1439
- {
1440
- name: "anthropic/claude-sonnet-4.5",
1441
- displayName: "Claude 4.5 Sonnet",
1442
- maxInputTokens: 2e5,
1443
- supportedFileTypes: ["pdf", "image"],
1444
- pricing: {
1445
- inputPerM: 3,
1446
- outputPerM: 15,
1447
- cacheWritePerM: 3.75,
1448
- cacheReadPerM: 0.3,
1449
- currency: "USD",
1450
- unit: "per_million_tokens"
1451
- }
1452
- },
1453
- {
1454
- name: "anthropic/claude-opus-4.5",
1455
- displayName: "Claude 4.5 Opus",
1456
- maxInputTokens: 2e5,
1457
- supportedFileTypes: ["pdf", "image"],
1458
- pricing: {
1459
- inputPerM: 5,
1460
- outputPerM: 25,
1461
- cacheWritePerM: 6.25,
1462
- cacheReadPerM: 0.5,
1463
- currency: "USD",
1464
- unit: "per_million_tokens"
1465
- }
1466
- },
1467
- // OpenAI models (via OpenRouter)
1468
- {
1469
- name: "openai/gpt-5.2",
1470
- displayName: "GPT-5.2",
1471
- maxInputTokens: 4e5,
1472
- supportedFileTypes: ["pdf", "image"],
1473
- pricing: {
1474
- inputPerM: 1.75,
1475
- outputPerM: 14,
1476
- cacheReadPerM: 0.175,
1477
- currency: "USD",
1478
- unit: "per_million_tokens"
1479
- }
1480
- },
1481
- {
1482
- name: "openai/gpt-5.2-codex",
1483
- displayName: "GPT-5.2 Codex",
1484
- maxInputTokens: 4e5,
1485
- supportedFileTypes: ["pdf", "image"],
1486
- pricing: {
1487
- inputPerM: 1.75,
1488
- outputPerM: 14,
1489
- cacheReadPerM: 0.175,
1490
- currency: "USD",
1491
- unit: "per_million_tokens"
1492
- }
1493
- },
1494
- // Google models (via OpenRouter)
1495
- {
1496
- name: "google/gemini-3-pro-preview",
1497
- displayName: "Gemini 3 Pro",
1498
- maxInputTokens: 1048576,
1499
- supportedFileTypes: ["pdf", "image", "audio"],
1500
- pricing: {
1501
- inputPerM: 2,
1502
- outputPerM: 12,
1503
- cacheReadPerM: 0.2,
1504
- currency: "USD",
1505
- unit: "per_million_tokens"
1506
- }
1507
- },
1508
- {
1509
- name: "google/gemini-3-flash-preview",
1510
- displayName: "Gemini 3 Flash",
1511
- maxInputTokens: 1048576,
1512
- supportedFileTypes: ["pdf", "image", "audio"],
1513
- pricing: {
1514
- inputPerM: 0.5,
1515
- outputPerM: 3,
1516
- cacheReadPerM: 0.05,
1517
- currency: "USD",
1518
- unit: "per_million_tokens"
1519
- }
1520
- },
1521
- // Free models (via OpenRouter)
1522
- {
1523
- name: "qwen/qwen3-coder:free",
1524
- displayName: "Qwen3 Coder (Free)",
1525
- maxInputTokens: 262e3,
1526
- supportedFileTypes: []
1527
- // Free - no pricing
1528
- },
1529
- {
1530
- name: "deepseek/deepseek-r1-0528:free",
1531
- displayName: "DeepSeek R1 (Free)",
1532
- maxInputTokens: 163840,
1533
- supportedFileTypes: []
1534
- // Free - no pricing
1535
- },
1536
- // Other models (via OpenRouter)
1537
- {
1538
- name: "z-ai/glm-4.7",
1539
- displayName: "GLM 4.7",
1540
- maxInputTokens: 202752,
1541
- supportedFileTypes: [],
1542
- pricing: {
1543
- inputPerM: 0.4,
1544
- outputPerM: 1.5,
1545
- currency: "USD",
1546
- unit: "per_million_tokens"
1547
- }
1548
- },
1549
- {
1550
- name: "minimax/minimax-m2.1",
1551
- displayName: "Minimax M2.1",
1552
- maxInputTokens: 196608,
1553
- supportedFileTypes: [],
1554
- pricing: {
1555
- inputPerM: 0.27,
1556
- outputPerM: 1.1,
1557
- currency: "USD",
1558
- unit: "per_million_tokens"
1559
- }
1560
- }
1561
- ],
1562
- baseURLSupport: "none",
1563
- // Fixed endpoint: https://api.dexto.ai/v1
1564
- supportedFileTypes: ["pdf", "image", "audio"],
1565
- // Same as OpenRouter
1566
- supportsCustomModels: true,
1567
- // Accept any OpenRouter model ID beyond the preset list
1568
- supportsAllRegistryModels: true
1569
- // Can serve models from all other providers via OpenRouter
1570
- }
1571
- };
1572
- function stripBedrockRegionPrefix(model) {
1573
- if (model.startsWith("eu.") || model.startsWith("us.")) {
1574
- return model.slice(3);
1575
- }
1576
- if (model.startsWith("global.")) {
1577
- return model.slice(7);
1578
- }
1579
- return model;
1580
- }
1581
- function getDefaultModelForProvider(provider) {
1582
- const providerInfo = LLM_REGISTRY[provider];
1583
- return providerInfo.models.find((m) => m.default)?.name || null;
1584
- }
1585
- function getSupportedProviders() {
1586
- return [...LLM_PROVIDERS];
1587
- }
1588
- function getSupportedModels(provider) {
1589
- const providerInfo = LLM_REGISTRY[provider];
1590
- return providerInfo.models.map((m) => m.name);
1591
- }
1592
- function getMaxInputTokensForModel(provider, model, logger) {
1593
- const resolved = resolveToNativeProvider(provider, model);
1594
- const providerInfo = LLM_REGISTRY[resolved.provider];
1595
- const normalizedModel = stripBedrockRegionPrefix(resolved.model).toLowerCase();
1596
- const modelInfo = providerInfo.models.find((m) => m.name.toLowerCase() === normalizedModel);
1597
- if (!modelInfo) {
1598
- const supportedModels = getSupportedModels(resolved.provider).join(", ");
1599
- logger?.error(
1600
- `Model '${resolved.model}' not found for provider '${resolved.provider}' in LLM registry. Supported models: ${supportedModels}`
1601
- );
1602
- throw LLMError.unknownModel(resolved.provider, resolved.model);
1603
- }
1604
- logger?.debug(
1605
- `Found max tokens for ${resolved.provider}/${resolved.model}: ${modelInfo.maxInputTokens}`
1606
- );
1607
- return modelInfo.maxInputTokens;
1608
- }
1609
- function isValidProviderModel(provider, model) {
1610
- const providerInfo = LLM_REGISTRY[provider];
1611
- const normalizedModel = stripBedrockRegionPrefix(model).toLowerCase();
1612
- return providerInfo.models.some((m) => m.name.toLowerCase() === normalizedModel);
1613
- }
1614
- function getProviderFromModel(model) {
1615
- if (model.includes("/")) {
1616
- const [prefix, ...rest] = model.split("/");
1617
- const modelName = rest.join("/");
1618
- if (prefix) {
1619
- const normalizedPrefix = prefix.toLowerCase();
1620
- for (const provider of LLM_PROVIDERS) {
1621
- const providerPrefix = getOpenrouterPrefix(provider);
1622
- if (providerPrefix?.toLowerCase() === normalizedPrefix) {
1623
- const providerInfo = LLM_REGISTRY[provider];
1624
- const normalizedModelName = stripBedrockRegionPrefix(modelName).toLowerCase();
1625
- const existsInProvider = providerInfo.models.some(
1626
- (m) => m.name.toLowerCase() === normalizedModelName || m.openrouterId?.toLowerCase() === model.toLowerCase()
1627
- );
1628
- if (existsInProvider) {
1629
- return provider;
1630
- }
1631
- break;
1632
- }
1633
- }
1634
- }
1635
- }
1636
- const normalizedModel = stripBedrockRegionPrefix(model).toLowerCase();
1637
- for (const provider of LLM_PROVIDERS) {
1638
- const info = LLM_REGISTRY[provider];
1639
- if (info.models.some((m) => m.name.toLowerCase() === normalizedModel)) {
1640
- return provider;
1641
- }
1642
- }
1643
- throw LLMError.modelProviderUnknown(model);
1644
- }
1645
- function getAllSupportedModels() {
1646
- return Object.values(LLM_REGISTRY).flatMap((info) => info.models.map((m) => m.name));
1647
- }
1648
- function supportsBaseURL(provider) {
1649
- const providerInfo = LLM_REGISTRY[provider];
1650
- return providerInfo.baseURLSupport !== "none";
1651
- }
1652
- function requiresBaseURL(provider) {
1653
- const providerInfo = LLM_REGISTRY[provider];
1654
- return providerInfo.baseURLSupport === "required";
1655
- }
1656
- function acceptsAnyModel(provider) {
1657
- const providerInfo = LLM_REGISTRY[provider];
1658
- return providerInfo.models.length === 0;
1659
- }
1660
- function supportsCustomModels(provider) {
1661
- const providerInfo = LLM_REGISTRY[provider];
1662
- return providerInfo.supportsCustomModels === true;
1663
- }
1664
- function hasAllRegistryModelsSupport(provider) {
1665
- const providerInfo = LLM_REGISTRY[provider];
1666
- return providerInfo.supportsAllRegistryModels === true;
1667
- }
1668
- function getOpenrouterPrefix(provider) {
1669
- return LLM_REGISTRY[provider].openrouterPrefix;
1670
- }
1671
- const GATEWAY_ACCESSIBLE_PROVIDERS = Object.entries(LLM_REGISTRY).filter(
1672
- ([provider, info]) => (
1673
- // Has openrouterPrefix (needs transformation)
1674
- info.openrouterPrefix !== void 0 || // Special case: groq models already have vendor prefixes, no transformation needed
1675
- provider === "groq"
1676
- )
1677
- ).map(([provider]) => provider);
1678
- function getAllModelsForProvider(provider) {
1679
- const providerInfo = LLM_REGISTRY[provider];
1680
- if (!providerInfo.supportsAllRegistryModels) {
1681
- return providerInfo.models.map((m) => ({ ...m }));
1682
- }
1683
- const allModels = [];
1684
- for (const model of providerInfo.models) {
1685
- allModels.push({ ...model, originalProvider: provider });
1686
- }
1687
- for (const sourceProvider of GATEWAY_ACCESSIBLE_PROVIDERS) {
1688
- const sourceInfo = LLM_REGISTRY[sourceProvider];
1689
- for (const model of sourceInfo.models) {
1690
- allModels.push({
1691
- ...model,
1692
- originalProvider: sourceProvider
1693
- });
1694
- }
1695
- }
1696
- return allModels;
1697
- }
1698
- function transformModelNameForProvider(model, originalProvider, targetProvider) {
1699
- if (!hasAllRegistryModelsSupport(targetProvider)) {
1700
- return model;
1701
- }
1702
- if (hasAllRegistryModelsSupport(originalProvider)) {
1703
- return model;
1704
- }
1705
- if (model.includes("/")) {
1706
- return model;
1707
- }
1708
- const prefix = getOpenrouterPrefix(originalProvider);
1709
- if (!prefix) {
1710
- return model;
1711
- }
1712
- const providerInfo = LLM_REGISTRY[originalProvider];
1713
- if (providerInfo) {
1714
- const normalizedModel = model.toLowerCase();
1715
- const modelInfo = providerInfo.models.find((m) => m.name.toLowerCase() === normalizedModel);
1716
- if (modelInfo?.openrouterId) {
1717
- return modelInfo.openrouterId;
1718
- }
1719
- }
1720
- throw new DextoRuntimeError(
1721
- LLMErrorCode.MODEL_UNKNOWN,
1722
- ErrorScope.LLM,
1723
- ErrorType.SYSTEM,
1724
- `Model '${model}' from provider '${originalProvider}' has no openrouterId mapping. All models that can be used via gateway providers must have explicit openrouterId in the registry.`,
1725
- { model, originalProvider, targetProvider }
1726
- );
1727
- }
1728
- function resolveModelOrigin(model, gatewayProvider) {
1729
- if (!hasAllRegistryModelsSupport(gatewayProvider)) {
1730
- return { provider: gatewayProvider, model };
1731
- }
1732
- if (model.includes("/")) {
1733
- const [prefix, ...rest] = model.split("/");
1734
- const modelName = rest.join("/");
1735
- if (prefix) {
1736
- const normalizedPrefix = prefix.toLowerCase();
1737
- for (const provider of LLM_PROVIDERS) {
1738
- const providerPrefix = getOpenrouterPrefix(provider);
1739
- if (providerPrefix?.toLowerCase() === normalizedPrefix) {
1740
- const providerInfo = LLM_REGISTRY[provider];
1741
- const nativeModel = providerInfo?.models.find(
1742
- (m) => m.openrouterId?.toLowerCase() === model.toLowerCase()
1743
- );
1744
- if (nativeModel) {
1745
- return { provider, model: nativeModel.name };
1746
- }
1747
- return { provider, model: modelName };
1748
- }
1749
- }
1750
- }
1751
- for (const sourceProvider of GATEWAY_ACCESSIBLE_PROVIDERS) {
1752
- const sourceInfo = LLM_REGISTRY[sourceProvider];
1753
- if (sourceInfo.models.some((m) => m.name.toLowerCase() === model.toLowerCase())) {
1754
- return { provider: sourceProvider, model };
1755
- }
1756
- }
1757
- }
1758
- for (const sourceProvider of GATEWAY_ACCESSIBLE_PROVIDERS) {
1759
- const sourceInfo = LLM_REGISTRY[sourceProvider];
1760
- const normalizedModel = stripBedrockRegionPrefix(model).toLowerCase();
1761
- if (sourceInfo.models.some((m) => m.name.toLowerCase() === normalizedModel)) {
1762
- return { provider: sourceProvider, model };
1763
- }
1764
- }
1765
- return null;
1766
- }
1767
- function resolveToNativeProvider(provider, model) {
1768
- if (hasAllRegistryModelsSupport(provider)) {
1769
- const origin = resolveModelOrigin(model, provider);
1770
- if (origin) {
1771
- return origin;
1772
- }
1773
- }
1774
- return { provider, model };
1775
- }
1776
- function isModelValidForProvider(provider, model) {
1777
- const providerInfo = LLM_REGISTRY[provider];
1778
- const normalizedModel = stripBedrockRegionPrefix(model).toLowerCase();
1779
- if (providerInfo.models.some((m) => m.name.toLowerCase() === normalizedModel)) {
1780
- return true;
1781
- }
1782
- if (providerInfo.supportsCustomModels) {
1783
- return true;
1784
- }
1785
- if (providerInfo.supportsAllRegistryModels) {
1786
- const origin = resolveModelOrigin(model, provider);
1787
- return origin !== null;
1788
- }
1789
- return false;
1790
- }
1791
- const API_KEY_OPTIONAL_PROVIDERS = /* @__PURE__ */ new Set([
1792
- "local",
1793
- // Native node-llama-cpp execution - no auth needed
1794
- "ollama",
1795
- // Ollama server - no auth needed by default
1796
- "openai-compatible",
1797
- // vLLM, LocalAI - often no auth needed
1798
- "litellm",
1799
- // Self-hosted proxy - handles auth internally
1800
- "vertex",
1801
- // Uses Google Cloud ADC (Application Default Credentials)
1802
- "bedrock"
1803
- // Uses AWS credentials (access key + secret or IAM role)
1804
- ]);
1805
- function requiresApiKey(provider) {
1806
- return !API_KEY_OPTIONAL_PROVIDERS.has(provider);
1807
- }
1808
- function getSupportedFileTypesForModel(provider, model) {
1809
- const resolved = resolveToNativeProvider(provider, model);
1810
- const providerInfo = LLM_REGISTRY[resolved.provider];
1811
- if (acceptsAnyModel(resolved.provider)) {
1812
- return providerInfo.supportedFileTypes;
1813
- }
1814
- const normalizedModel = stripBedrockRegionPrefix(resolved.model).toLowerCase();
1815
- const modelInfo = providerInfo.models.find((m) => m.name.toLowerCase() === normalizedModel);
1816
- if (!modelInfo) {
1817
- throw LLMError.unknownModel(resolved.provider, resolved.model);
1818
- }
1819
- return modelInfo.supportedFileTypes;
1820
- }
1821
- function modelSupportsFileType(provider, model, fileType) {
1822
- const supportedTypes = getSupportedFileTypesForModel(provider, model);
1823
- return supportedTypes.includes(fileType);
1824
- }
1825
- function validateModelFileSupport(provider, model, mimeType) {
1826
- const baseMimeType = mimeType.toLowerCase().split(";")[0]?.trim() || mimeType.toLowerCase();
1827
- const fileType = MIME_TYPE_TO_FILE_TYPE[baseMimeType];
1828
- if (!fileType) {
1829
- return {
1830
- isSupported: false,
1831
- error: `Unsupported file type: ${mimeType}`
1832
- };
1833
- }
1834
- try {
1835
- if (!modelSupportsFileType(provider, model, fileType)) {
1836
- return {
1837
- isSupported: false,
1838
- fileType,
1839
- error: `Model '${model}' (${provider}) does not support ${fileType} files`
1840
- };
1841
- }
1842
- return {
1843
- isSupported: true,
1844
- fileType
1845
- };
1846
- } catch (error) {
1847
- return {
1848
- isSupported: false,
1849
- fileType,
1850
- error: error instanceof Error ? error.message : "Unknown error validating model file support"
1851
- };
1852
- }
1853
- }
1854
- function getEffectiveMaxInputTokens(config, logger) {
1855
- const configuredMaxInputTokens = config.maxInputTokens;
1856
- if (configuredMaxInputTokens != null) {
1857
- if (config.baseURL) {
1858
- logger.debug(
1859
- `Using maxInputTokens from configuration (with baseURL): ${configuredMaxInputTokens}`
1860
- );
1861
- return configuredMaxInputTokens;
1862
- }
1863
- try {
1864
- const registryMaxInputTokens = getMaxInputTokensForModel(
1865
- config.provider,
1866
- config.model,
1867
- logger
1868
- );
1869
- if (configuredMaxInputTokens > registryMaxInputTokens) {
1870
- logger.warn(
1871
- `Provided maxInputTokens (${configuredMaxInputTokens}) for ${config.provider}/${config.model} exceeds the known limit (${registryMaxInputTokens}) for model ${config.model}. Capping to registry limit.`
1872
- );
1873
- return registryMaxInputTokens;
1874
- } else {
1875
- logger.debug(
1876
- `Using valid maxInputTokens override from configuration: ${configuredMaxInputTokens} (Registry limit: ${registryMaxInputTokens})`
1877
- );
1878
- return configuredMaxInputTokens;
1879
- }
1880
- } catch (error) {
1881
- if (error instanceof DextoRuntimeError && error.code === LLMErrorCode.MODEL_UNKNOWN) {
1882
- logger.warn(
1883
- `Registry lookup failed during maxInputTokens override check for ${config.provider}/${config.model}: ${error.message}. Proceeding with the provided maxInputTokens value (${configuredMaxInputTokens}), but it might be invalid.`
1884
- );
1885
- return configuredMaxInputTokens;
1886
- } else {
1887
- logger.error(
1888
- `Unexpected error during registry lookup for maxInputTokens override check: ${error}`
1889
- );
1890
- throw error;
1891
- }
1892
- }
1893
- }
1894
- if (config.provider === "openrouter") {
1895
- const contextLength = getOpenRouterModelContextLength(config.model);
1896
- if (contextLength !== null) {
1897
- logger.debug(
1898
- `Using maxInputTokens from OpenRouter registry for ${config.model}: ${contextLength}`
1899
- );
1900
- return contextLength;
1901
- }
1902
- logger.warn(
1903
- `OpenRouter model ${config.model} not found in cache, defaulting to ${DEFAULT_MAX_INPUT_TOKENS} tokens`
1904
- );
1905
- return DEFAULT_MAX_INPUT_TOKENS;
1906
- }
1907
- if (config.baseURL) {
1908
- logger.warn(
1909
- `baseURL is set but maxInputTokens is missing. Defaulting to ${DEFAULT_MAX_INPUT_TOKENS}. Provide 'maxInputTokens' in configuration to avoid default fallback.`
1910
- );
1911
- return DEFAULT_MAX_INPUT_TOKENS;
1912
- }
1913
- if (acceptsAnyModel(config.provider)) {
1914
- logger.debug(
1915
- `Provider ${config.provider} accepts any model, defaulting to ${DEFAULT_MAX_INPUT_TOKENS} tokens`
1916
- );
1917
- return DEFAULT_MAX_INPUT_TOKENS;
1918
- }
1919
- try {
1920
- const registryMaxInputTokens = getMaxInputTokensForModel(
1921
- config.provider,
1922
- config.model,
1923
- logger
1924
- );
1925
- logger.debug(
1926
- `Using maxInputTokens from registry for ${config.provider}/${config.model}: ${registryMaxInputTokens}`
1927
- );
1928
- return registryMaxInputTokens;
1929
- } catch (error) {
1930
- if (error instanceof DextoRuntimeError && error.code === LLMErrorCode.MODEL_UNKNOWN) {
1931
- if (supportsCustomModels(config.provider)) {
1932
- logger.debug(
1933
- `Custom model ${config.model} not in ${config.provider} registry, defaulting to ${DEFAULT_MAX_INPUT_TOKENS} tokens`
1934
- );
1935
- return DEFAULT_MAX_INPUT_TOKENS;
1936
- }
1937
- logger.error(
1938
- `Registry lookup failed for ${config.provider}/${config.model}: ${error.message}. Effective maxInputTokens cannot be determined.`
1939
- );
1940
- throw LLMError.unknownModel(config.provider, config.model);
1941
- } else {
1942
- logger.error(`Unexpected error during registry lookup for maxInputTokens: ${error}`);
1943
- throw error;
1944
- }
1945
- }
1946
- }
1947
- function getModelPricing(provider, model) {
1948
- const resolved = resolveToNativeProvider(provider, model);
1949
- const providerInfo = LLM_REGISTRY[resolved.provider];
1950
- if (acceptsAnyModel(resolved.provider)) {
1951
- return void 0;
1952
- }
1953
- const normalizedModel = stripBedrockRegionPrefix(resolved.model).toLowerCase();
1954
- const modelInfo = providerInfo.models.find((m) => m.name.toLowerCase() === normalizedModel);
1955
- return modelInfo?.pricing;
1956
- }
1957
- function getModelDisplayName(model, provider) {
1958
- let inferredProvider;
1959
- try {
1960
- inferredProvider = provider ?? getProviderFromModel(model);
1961
- } catch {
1962
- return model;
1963
- }
1964
- const resolved = resolveToNativeProvider(inferredProvider, model);
1965
- const providerInfo = LLM_REGISTRY[resolved.provider];
1966
- if (!providerInfo || acceptsAnyModel(resolved.provider)) {
1967
- return model;
1968
- }
1969
- const normalizedModel = stripBedrockRegionPrefix(resolved.model).toLowerCase();
1970
- const modelInfo = providerInfo.models.find((m) => m.name.toLowerCase() === normalizedModel);
1971
- return modelInfo?.displayName ?? model;
1972
- }
1973
- function isReasoningCapableModel(model, _provider) {
1974
- const modelLower = model.toLowerCase();
1975
- if (modelLower.includes("codex")) {
1976
- return true;
1977
- }
1978
- if (modelLower.startsWith("o1") || modelLower.startsWith("o3") || modelLower.startsWith("o4")) {
1979
- return true;
1980
- }
1981
- if (modelLower.includes("gpt-5") || modelLower.includes("gpt-5.1") || modelLower.includes("gpt-5.2")) {
1982
- return true;
1983
- }
1984
- return false;
1985
- }
1986
- function calculateCost(usage, pricing) {
1987
- const inputCost = (usage.inputTokens ?? 0) * pricing.inputPerM / 1e6;
1988
- const outputCost = (usage.outputTokens ?? 0) * pricing.outputPerM / 1e6;
1989
- const cacheReadCost = (usage.cacheReadTokens ?? 0) * (pricing.cacheReadPerM ?? 0) / 1e6;
1990
- const cacheWriteCost = (usage.cacheWriteTokens ?? 0) * (pricing.cacheWritePerM ?? 0) / 1e6;
1991
- const reasoningCost = (usage.reasoningTokens ?? 0) * pricing.outputPerM / 1e6;
1992
- return inputCost + outputCost + cacheReadCost + cacheWriteCost + reasoningCost;
1993
- }
1994
- export {
1995
- DEFAULT_MAX_INPUT_TOKENS,
1996
- LLM_REGISTRY,
1997
- MIME_TYPE_TO_FILE_TYPE,
1998
- acceptsAnyModel,
1999
- calculateCost,
2000
- getAllModelsForProvider,
2001
- getAllSupportedModels,
2002
- getAllowedMimeTypes,
2003
- getDefaultModelForProvider,
2004
- getEffectiveMaxInputTokens,
2005
- getMaxInputTokensForModel,
2006
- getModelDisplayName,
2007
- getModelPricing,
2008
- getProviderFromModel,
2009
- getSupportedFileTypesForModel,
2010
- getSupportedModels,
2011
- getSupportedProviders,
2012
- hasAllRegistryModelsSupport,
2013
- isModelValidForProvider,
2014
- isReasoningCapableModel,
2015
- isValidProviderModel,
2016
- modelSupportsFileType,
2017
- requiresApiKey,
2018
- requiresBaseURL,
2019
- resolveModelOrigin,
2020
- stripBedrockRegionPrefix,
2021
- supportsBaseURL,
2022
- supportsCustomModels,
2023
- transformModelNameForProvider,
2024
- validateModelFileSupport
2025
- };