openrouter.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. package models
  2. const (
  3. ProviderOpenRouter ModelProvider = "openrouter"
  4. OpenRouterGPT41 ModelID = "openrouter.gpt-4.1"
  5. OpenRouterGPT41Mini ModelID = "openrouter.gpt-4.1-mini"
  6. OpenRouterGPT41Nano ModelID = "openrouter.gpt-4.1-nano"
  7. OpenRouterGPT45Preview ModelID = "openrouter.gpt-4.5-preview"
  8. OpenRouterGPT4o ModelID = "openrouter.gpt-4o"
  9. OpenRouterGPT4oMini ModelID = "openrouter.gpt-4o-mini"
  10. OpenRouterO1 ModelID = "openrouter.o1"
  11. OpenRouterO1Pro ModelID = "openrouter.o1-pro"
  12. OpenRouterO1Mini ModelID = "openrouter.o1-mini"
  13. OpenRouterO3 ModelID = "openrouter.o3"
  14. OpenRouterO3Mini ModelID = "openrouter.o3-mini"
  15. OpenRouterO4Mini ModelID = "openrouter.o4-mini"
  16. OpenRouterGemini25Flash ModelID = "openrouter.gemini-2.5-flash"
  17. OpenRouterGemini25 ModelID = "openrouter.gemini-2.5"
  18. OpenRouterClaude35Sonnet ModelID = "openrouter.claude-3.5-sonnet"
  19. OpenRouterClaude3Haiku ModelID = "openrouter.claude-3-haiku"
  20. OpenRouterClaude37Sonnet ModelID = "openrouter.claude-3.7-sonnet"
  21. OpenRouterClaude35Haiku ModelID = "openrouter.claude-3.5-haiku"
  22. OpenRouterClaude3Opus ModelID = "openrouter.claude-3-opus"
  23. OpenRouterQwen235B ModelID = "openrouter.qwen-3-235b"
  24. OpenRouterQwen32B ModelID = "openrouter.qwen-3-32b"
  25. OpenRouterQwen30B ModelID = "openrouter.qwen-3-30b"
  26. OpenRouterQwen14B ModelID = "openrouter.qwen-3-14b"
  27. OpenRouterQwen8B ModelID = "openrouter.qwen-3-8b"
  28. )
  29. var OpenRouterModels = map[ModelID]Model{
  30. OpenRouterGPT41: {
  31. ID: OpenRouterGPT41,
  32. Name: "OpenRouter: GPT 4.1",
  33. Provider: ProviderOpenRouter,
  34. APIModel: "openai/gpt-4.1",
  35. CostPer1MIn: OpenAIModels[GPT41].CostPer1MIn,
  36. CostPer1MInCached: OpenAIModels[GPT41].CostPer1MInCached,
  37. CostPer1MOut: OpenAIModels[GPT41].CostPer1MOut,
  38. CostPer1MOutCached: OpenAIModels[GPT41].CostPer1MOutCached,
  39. ContextWindow: OpenAIModels[GPT41].ContextWindow,
  40. DefaultMaxTokens: OpenAIModels[GPT41].DefaultMaxTokens,
  41. },
  42. OpenRouterGPT41Mini: {
  43. ID: OpenRouterGPT41Mini,
  44. Name: "OpenRouter: GPT 4.1 mini",
  45. Provider: ProviderOpenRouter,
  46. APIModel: "openai/gpt-4.1-mini",
  47. CostPer1MIn: OpenAIModels[GPT41Mini].CostPer1MIn,
  48. CostPer1MInCached: OpenAIModels[GPT41Mini].CostPer1MInCached,
  49. CostPer1MOut: OpenAIModels[GPT41Mini].CostPer1MOut,
  50. CostPer1MOutCached: OpenAIModels[GPT41Mini].CostPer1MOutCached,
  51. ContextWindow: OpenAIModels[GPT41Mini].ContextWindow,
  52. DefaultMaxTokens: OpenAIModels[GPT41Mini].DefaultMaxTokens,
  53. },
  54. OpenRouterGPT41Nano: {
  55. ID: OpenRouterGPT41Nano,
  56. Name: "OpenRouter: GPT 4.1 nano",
  57. Provider: ProviderOpenRouter,
  58. APIModel: "openai/gpt-4.1-nano",
  59. CostPer1MIn: OpenAIModels[GPT41Nano].CostPer1MIn,
  60. CostPer1MInCached: OpenAIModels[GPT41Nano].CostPer1MInCached,
  61. CostPer1MOut: OpenAIModels[GPT41Nano].CostPer1MOut,
  62. CostPer1MOutCached: OpenAIModels[GPT41Nano].CostPer1MOutCached,
  63. ContextWindow: OpenAIModels[GPT41Nano].ContextWindow,
  64. DefaultMaxTokens: OpenAIModels[GPT41Nano].DefaultMaxTokens,
  65. },
  66. OpenRouterGPT45Preview: {
  67. ID: OpenRouterGPT45Preview,
  68. Name: "OpenRouter: GPT 4.5 preview",
  69. Provider: ProviderOpenRouter,
  70. APIModel: "openai/gpt-4.5-preview",
  71. CostPer1MIn: OpenAIModels[GPT45Preview].CostPer1MIn,
  72. CostPer1MInCached: OpenAIModels[GPT45Preview].CostPer1MInCached,
  73. CostPer1MOut: OpenAIModels[GPT45Preview].CostPer1MOut,
  74. CostPer1MOutCached: OpenAIModels[GPT45Preview].CostPer1MOutCached,
  75. ContextWindow: OpenAIModels[GPT45Preview].ContextWindow,
  76. DefaultMaxTokens: OpenAIModels[GPT45Preview].DefaultMaxTokens,
  77. },
  78. OpenRouterGPT4o: {
  79. ID: OpenRouterGPT4o,
  80. Name: "OpenRouter: GPT 4o",
  81. Provider: ProviderOpenRouter,
  82. APIModel: "openai/gpt-4o",
  83. CostPer1MIn: OpenAIModels[GPT4o].CostPer1MIn,
  84. CostPer1MInCached: OpenAIModels[GPT4o].CostPer1MInCached,
  85. CostPer1MOut: OpenAIModels[GPT4o].CostPer1MOut,
  86. CostPer1MOutCached: OpenAIModels[GPT4o].CostPer1MOutCached,
  87. ContextWindow: OpenAIModels[GPT4o].ContextWindow,
  88. DefaultMaxTokens: OpenAIModels[GPT4o].DefaultMaxTokens,
  89. },
  90. OpenRouterGPT4oMini: {
  91. ID: OpenRouterGPT4oMini,
  92. Name: "OpenRouter: GPT 4o mini",
  93. Provider: ProviderOpenRouter,
  94. APIModel: "openai/gpt-4o-mini",
  95. CostPer1MIn: OpenAIModels[GPT4oMini].CostPer1MIn,
  96. CostPer1MInCached: OpenAIModels[GPT4oMini].CostPer1MInCached,
  97. CostPer1MOut: OpenAIModels[GPT4oMini].CostPer1MOut,
  98. CostPer1MOutCached: OpenAIModels[GPT4oMini].CostPer1MOutCached,
  99. ContextWindow: OpenAIModels[GPT4oMini].ContextWindow,
  100. },
  101. OpenRouterO1: {
  102. ID: OpenRouterO1,
  103. Name: "OpenRouter: O1",
  104. Provider: ProviderOpenRouter,
  105. APIModel: "openai/o1",
  106. CostPer1MIn: OpenAIModels[O1].CostPer1MIn,
  107. CostPer1MInCached: OpenAIModels[O1].CostPer1MInCached,
  108. CostPer1MOut: OpenAIModels[O1].CostPer1MOut,
  109. CostPer1MOutCached: OpenAIModels[O1].CostPer1MOutCached,
  110. ContextWindow: OpenAIModels[O1].ContextWindow,
  111. DefaultMaxTokens: OpenAIModels[O1].DefaultMaxTokens,
  112. CanReason: OpenAIModels[O1].CanReason,
  113. },
  114. OpenRouterO1Pro: {
  115. ID: OpenRouterO1Pro,
  116. Name: "OpenRouter: o1 pro",
  117. Provider: ProviderOpenRouter,
  118. APIModel: "openai/o1-pro",
  119. CostPer1MIn: OpenAIModels[O1Pro].CostPer1MIn,
  120. CostPer1MInCached: OpenAIModels[O1Pro].CostPer1MInCached,
  121. CostPer1MOut: OpenAIModels[O1Pro].CostPer1MOut,
  122. CostPer1MOutCached: OpenAIModels[O1Pro].CostPer1MOutCached,
  123. ContextWindow: OpenAIModels[O1Pro].ContextWindow,
  124. DefaultMaxTokens: OpenAIModels[O1Pro].DefaultMaxTokens,
  125. CanReason: OpenAIModels[O1Pro].CanReason,
  126. },
  127. OpenRouterO1Mini: {
  128. ID: OpenRouterO1Mini,
  129. Name: "OpenRouter: o1 mini",
  130. Provider: ProviderOpenRouter,
  131. APIModel: "openai/o1-mini",
  132. CostPer1MIn: OpenAIModels[O1Mini].CostPer1MIn,
  133. CostPer1MInCached: OpenAIModels[O1Mini].CostPer1MInCached,
  134. CostPer1MOut: OpenAIModels[O1Mini].CostPer1MOut,
  135. CostPer1MOutCached: OpenAIModels[O1Mini].CostPer1MOutCached,
  136. ContextWindow: OpenAIModels[O1Mini].ContextWindow,
  137. DefaultMaxTokens: OpenAIModels[O1Mini].DefaultMaxTokens,
  138. CanReason: OpenAIModels[O1Mini].CanReason,
  139. },
  140. OpenRouterO3: {
  141. ID: OpenRouterO3,
  142. Name: "OpenRouter: o3",
  143. Provider: ProviderOpenRouter,
  144. APIModel: "openai/o3",
  145. CostPer1MIn: OpenAIModels[O3].CostPer1MIn,
  146. CostPer1MInCached: OpenAIModels[O3].CostPer1MInCached,
  147. CostPer1MOut: OpenAIModels[O3].CostPer1MOut,
  148. CostPer1MOutCached: OpenAIModels[O3].CostPer1MOutCached,
  149. ContextWindow: OpenAIModels[O3].ContextWindow,
  150. DefaultMaxTokens: OpenAIModels[O3].DefaultMaxTokens,
  151. CanReason: OpenAIModels[O3].CanReason,
  152. },
  153. OpenRouterO3Mini: {
  154. ID: OpenRouterO3Mini,
  155. Name: "OpenRouter: o3 mini",
  156. Provider: ProviderOpenRouter,
  157. APIModel: "openai/o3-mini-high",
  158. CostPer1MIn: OpenAIModels[O3Mini].CostPer1MIn,
  159. CostPer1MInCached: OpenAIModels[O3Mini].CostPer1MInCached,
  160. CostPer1MOut: OpenAIModels[O3Mini].CostPer1MOut,
  161. CostPer1MOutCached: OpenAIModels[O3Mini].CostPer1MOutCached,
  162. ContextWindow: OpenAIModels[O3Mini].ContextWindow,
  163. DefaultMaxTokens: OpenAIModels[O3Mini].DefaultMaxTokens,
  164. CanReason: OpenAIModels[O3Mini].CanReason,
  165. },
  166. OpenRouterO4Mini: {
  167. ID: OpenRouterO4Mini,
  168. Name: "OpenRouter: o4 mini",
  169. Provider: ProviderOpenRouter,
  170. APIModel: "openai/o4-mini-high",
  171. CostPer1MIn: OpenAIModels[O4Mini].CostPer1MIn,
  172. CostPer1MInCached: OpenAIModels[O4Mini].CostPer1MInCached,
  173. CostPer1MOut: OpenAIModels[O4Mini].CostPer1MOut,
  174. CostPer1MOutCached: OpenAIModels[O4Mini].CostPer1MOutCached,
  175. ContextWindow: OpenAIModels[O4Mini].ContextWindow,
  176. DefaultMaxTokens: OpenAIModels[O4Mini].DefaultMaxTokens,
  177. CanReason: OpenAIModels[O4Mini].CanReason,
  178. },
  179. OpenRouterGemini25Flash: {
  180. ID: OpenRouterGemini25Flash,
  181. Name: "OpenRouter: Gemini 2.5 Flash",
  182. Provider: ProviderOpenRouter,
  183. APIModel: "google/gemini-2.5-flash-preview:thinking",
  184. CostPer1MIn: GeminiModels[Gemini25Flash].CostPer1MIn,
  185. CostPer1MInCached: GeminiModels[Gemini25Flash].CostPer1MInCached,
  186. CostPer1MOut: GeminiModels[Gemini25Flash].CostPer1MOut,
  187. CostPer1MOutCached: GeminiModels[Gemini25Flash].CostPer1MOutCached,
  188. ContextWindow: GeminiModels[Gemini25Flash].ContextWindow,
  189. DefaultMaxTokens: GeminiModels[Gemini25Flash].DefaultMaxTokens,
  190. },
  191. OpenRouterGemini25: {
  192. ID: OpenRouterGemini25,
  193. Name: "OpenRouter: Gemini 2.5 Pro",
  194. Provider: ProviderOpenRouter,
  195. APIModel: "google/gemini-2.5-pro-preview-03-25",
  196. CostPer1MIn: GeminiModels[Gemini25].CostPer1MIn,
  197. CostPer1MInCached: GeminiModels[Gemini25].CostPer1MInCached,
  198. CostPer1MOut: GeminiModels[Gemini25].CostPer1MOut,
  199. CostPer1MOutCached: GeminiModels[Gemini25].CostPer1MOutCached,
  200. ContextWindow: GeminiModels[Gemini25].ContextWindow,
  201. DefaultMaxTokens: GeminiModels[Gemini25].DefaultMaxTokens,
  202. },
  203. OpenRouterClaude35Sonnet: {
  204. ID: OpenRouterClaude35Sonnet,
  205. Name: "OpenRouter: Claude 3.5 Sonnet",
  206. Provider: ProviderOpenRouter,
  207. APIModel: "anthropic/claude-3.5-sonnet",
  208. CostPer1MIn: AnthropicModels[Claude35Sonnet].CostPer1MIn,
  209. CostPer1MInCached: AnthropicModels[Claude35Sonnet].CostPer1MInCached,
  210. CostPer1MOut: AnthropicModels[Claude35Sonnet].CostPer1MOut,
  211. CostPer1MOutCached: AnthropicModels[Claude35Sonnet].CostPer1MOutCached,
  212. ContextWindow: AnthropicModels[Claude35Sonnet].ContextWindow,
  213. DefaultMaxTokens: AnthropicModels[Claude35Sonnet].DefaultMaxTokens,
  214. },
  215. OpenRouterClaude3Haiku: {
  216. ID: OpenRouterClaude3Haiku,
  217. Name: "OpenRouter: Claude 3 Haiku",
  218. Provider: ProviderOpenRouter,
  219. APIModel: "anthropic/claude-3-haiku",
  220. CostPer1MIn: AnthropicModels[Claude3Haiku].CostPer1MIn,
  221. CostPer1MInCached: AnthropicModels[Claude3Haiku].CostPer1MInCached,
  222. CostPer1MOut: AnthropicModels[Claude3Haiku].CostPer1MOut,
  223. CostPer1MOutCached: AnthropicModels[Claude3Haiku].CostPer1MOutCached,
  224. ContextWindow: AnthropicModels[Claude3Haiku].ContextWindow,
  225. DefaultMaxTokens: AnthropicModels[Claude3Haiku].DefaultMaxTokens,
  226. },
  227. OpenRouterClaude37Sonnet: {
  228. ID: OpenRouterClaude37Sonnet,
  229. Name: "OpenRouter: Claude 3.7 Sonnet",
  230. Provider: ProviderOpenRouter,
  231. APIModel: "anthropic/claude-3.7-sonnet",
  232. CostPer1MIn: AnthropicModels[Claude37Sonnet].CostPer1MIn,
  233. CostPer1MInCached: AnthropicModels[Claude37Sonnet].CostPer1MInCached,
  234. CostPer1MOut: AnthropicModels[Claude37Sonnet].CostPer1MOut,
  235. CostPer1MOutCached: AnthropicModels[Claude37Sonnet].CostPer1MOutCached,
  236. ContextWindow: AnthropicModels[Claude37Sonnet].ContextWindow,
  237. DefaultMaxTokens: AnthropicModels[Claude37Sonnet].DefaultMaxTokens,
  238. CanReason: AnthropicModels[Claude37Sonnet].CanReason,
  239. },
  240. OpenRouterClaude35Haiku: {
  241. ID: OpenRouterClaude35Haiku,
  242. Name: "OpenRouter: Claude 3.5 Haiku",
  243. Provider: ProviderOpenRouter,
  244. APIModel: "anthropic/claude-3.5-haiku",
  245. CostPer1MIn: AnthropicModels[Claude35Haiku].CostPer1MIn,
  246. CostPer1MInCached: AnthropicModels[Claude35Haiku].CostPer1MInCached,
  247. CostPer1MOut: AnthropicModels[Claude35Haiku].CostPer1MOut,
  248. CostPer1MOutCached: AnthropicModels[Claude35Haiku].CostPer1MOutCached,
  249. ContextWindow: AnthropicModels[Claude35Haiku].ContextWindow,
  250. DefaultMaxTokens: AnthropicModels[Claude35Haiku].DefaultMaxTokens,
  251. },
  252. OpenRouterClaude3Opus: {
  253. ID: OpenRouterClaude3Opus,
  254. Name: "OpenRouter: Claude 3 Opus",
  255. Provider: ProviderOpenRouter,
  256. APIModel: "anthropic/claude-3-opus",
  257. CostPer1MIn: AnthropicModels[Claude3Opus].CostPer1MIn,
  258. CostPer1MInCached: AnthropicModels[Claude3Opus].CostPer1MInCached,
  259. CostPer1MOut: AnthropicModels[Claude3Opus].CostPer1MOut,
  260. CostPer1MOutCached: AnthropicModels[Claude3Opus].CostPer1MOutCached,
  261. ContextWindow: AnthropicModels[Claude3Opus].ContextWindow,
  262. DefaultMaxTokens: AnthropicModels[Claude3Opus].DefaultMaxTokens,
  263. },
  264. OpenRouterQwen235B: {
  265. ID: OpenRouterQwen235B,
  266. Name: "OpenRouter: Qwen3 235B A22B",
  267. Provider: ProviderOpenRouter,
  268. APIModel: "qwen/qwen3-235b-a22b",
  269. CostPer1MIn: 0.1,
  270. CostPer1MInCached: 0.1,
  271. CostPer1MOut: 0.1,
  272. CostPer1MOutCached: 0.1,
  273. ContextWindow: 40960,
  274. DefaultMaxTokens: 4096,
  275. },
  276. OpenRouterQwen32B: {
  277. ID: OpenRouterQwen32B,
  278. Name: "OpenRouter: Qwen3 32B",
  279. Provider: ProviderOpenRouter,
  280. APIModel: "qwen/qwen3-32b",
  281. CostPer1MIn: 0.1,
  282. CostPer1MInCached: 0.1,
  283. CostPer1MOut: 0.3,
  284. CostPer1MOutCached: 0.3,
  285. ContextWindow: 40960,
  286. DefaultMaxTokens: 4096,
  287. },
  288. OpenRouterQwen30B: {
  289. ID: OpenRouterQwen30B,
  290. Name: "OpenRouter: Qwen3 30B A3B",
  291. Provider: ProviderOpenRouter,
  292. APIModel: "qwen/qwen3-30b-a3b",
  293. CostPer1MIn: 0.1,
  294. CostPer1MInCached: 0.1,
  295. CostPer1MOut: 0.3,
  296. CostPer1MOutCached: 0.3,
  297. ContextWindow: 40960,
  298. DefaultMaxTokens: 4096,
  299. },
  300. OpenRouterQwen14B: {
  301. ID: OpenRouterQwen14B,
  302. Name: "OpenRouter: Qwen3 14B",
  303. Provider: ProviderOpenRouter,
  304. APIModel: "qwen/qwen3-14b",
  305. CostPer1MIn: 0.7,
  306. CostPer1MInCached: 0.7,
  307. CostPer1MOut: 0.24,
  308. CostPer1MOutCached: 0.24,
  309. ContextWindow: 40960,
  310. DefaultMaxTokens: 4096,
  311. },
  312. OpenRouterQwen8B: {
  313. ID: OpenRouterQwen8B,
  314. Name: "OpenRouter: Qwen3 8B",
  315. Provider: ProviderOpenRouter,
  316. APIModel: "qwen/qwen3-8b",
  317. CostPer1MIn: 0.35,
  318. CostPer1MInCached: 0.35,
  319. CostPer1MOut: 0.138,
  320. CostPer1MOutCached: 0.138,
  321. ContextWindow: 128000,
  322. DefaultMaxTokens: 4096,
  323. },
  324. }