models.go 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. package models
  2. import "maps"
  3. type (
  4. ModelID string
  5. ModelProvider string
  6. )
  7. type Model struct {
  8. ID ModelID `json:"id"`
  9. Name string `json:"name"`
  10. Provider ModelProvider `json:"provider"`
  11. APIModel string `json:"api_model"`
  12. CostPer1MIn float64 `json:"cost_per_1m_in"`
  13. CostPer1MOut float64 `json:"cost_per_1m_out"`
  14. CostPer1MInCached float64 `json:"cost_per_1m_in_cached"`
  15. CostPer1MOutCached float64 `json:"cost_per_1m_out_cached"`
  16. ContextWindow int64 `json:"context_window"`
  17. }
  18. // Model IDs
  19. const (
  20. // OpenAI
  21. GPT4o ModelID = "gpt-4o"
  22. GPT41 ModelID = "gpt-4.1"
  23. // GEMINI
  24. GEMINI25 ModelID = "gemini-2.5"
  25. GRMINI20Flash ModelID = "gemini-2.0-flash"
  26. // GROQ
  27. QWENQwq ModelID = "qwen-qwq"
  28. // Bedrock
  29. BedrockClaude37Sonnet ModelID = "bedrock.claude-3.7-sonnet"
  30. )
  31. const (
  32. ProviderOpenAI ModelProvider = "openai"
  33. ProviderBedrock ModelProvider = "bedrock"
  34. ProviderGemini ModelProvider = "gemini"
  35. ProviderGROQ ModelProvider = "groq"
  36. // ForTests
  37. ProviderMock ModelProvider = "__mock"
  38. )
  39. var SupportedModels = map[ModelID]Model{
  40. // // Anthropic
  41. // Claude35Sonnet: {
  42. // ID: Claude35Sonnet,
  43. // Name: "Claude 3.5 Sonnet",
  44. // Provider: ProviderAnthropic,
  45. // APIModel: "claude-3-5-sonnet-latest",
  46. // CostPer1MIn: 3.0,
  47. // CostPer1MInCached: 3.75,
  48. // CostPer1MOutCached: 0.30,
  49. // CostPer1MOut: 15.0,
  50. // },
  51. // Claude3Haiku: {
  52. // ID: Claude3Haiku,
  53. // Name: "Claude 3 Haiku",
  54. // Provider: ProviderAnthropic,
  55. // APIModel: "claude-3-haiku-latest",
  56. // CostPer1MIn: 0.80,
  57. // CostPer1MInCached: 1,
  58. // CostPer1MOutCached: 0.08,
  59. // CostPer1MOut: 4,
  60. // },
  61. // Claude37Sonnet: {
  62. // ID: Claude37Sonnet,
  63. // Name: "Claude 3.7 Sonnet",
  64. // Provider: ProviderAnthropic,
  65. // APIModel: "claude-3-7-sonnet-latest",
  66. // CostPer1MIn: 3.0,
  67. // CostPer1MInCached: 3.75,
  68. // CostPer1MOutCached: 0.30,
  69. // CostPer1MOut: 15.0,
  70. // },
  71. //
  72. // // OpenAI
  73. GPT4o: {
  74. ID: GPT4o,
  75. Name: "GPT-4o",
  76. Provider: ProviderOpenAI,
  77. APIModel: "gpt-4.1",
  78. CostPer1MIn: 2.00,
  79. CostPer1MInCached: 0.50,
  80. CostPer1MOutCached: 0,
  81. CostPer1MOut: 8.00,
  82. },
  83. GPT41: {
  84. ID: GPT41,
  85. Name: "GPT-4.1",
  86. Provider: ProviderOpenAI,
  87. APIModel: "gpt-4.1",
  88. CostPer1MIn: 2.00,
  89. CostPer1MInCached: 0.50,
  90. CostPer1MOutCached: 0,
  91. CostPer1MOut: 8.00,
  92. },
  93. //
  94. // // GEMINI
  95. // GEMINI25: {
  96. // ID: GEMINI25,
  97. // Name: "Gemini 2.5 Pro",
  98. // Provider: ProviderGemini,
  99. // APIModel: "gemini-2.5-pro-exp-03-25",
  100. // CostPer1MIn: 0,
  101. // CostPer1MInCached: 0,
  102. // CostPer1MOutCached: 0,
  103. // CostPer1MOut: 0,
  104. // },
  105. //
  106. // GRMINI20Flash: {
  107. // ID: GRMINI20Flash,
  108. // Name: "Gemini 2.0 Flash",
  109. // Provider: ProviderGemini,
  110. // APIModel: "gemini-2.0-flash",
  111. // CostPer1MIn: 0.1,
  112. // CostPer1MInCached: 0,
  113. // CostPer1MOutCached: 0.025,
  114. // CostPer1MOut: 0.4,
  115. // },
  116. //
  117. // // GROQ
  118. // QWENQwq: {
  119. // ID: QWENQwq,
  120. // Name: "Qwen Qwq",
  121. // Provider: ProviderGROQ,
  122. // APIModel: "qwen-qwq-32b",
  123. // CostPer1MIn: 0,
  124. // CostPer1MInCached: 0,
  125. // CostPer1MOutCached: 0,
  126. // CostPer1MOut: 0,
  127. // },
  128. //
  129. // // Bedrock
  130. // BedrockClaude37Sonnet: {
  131. // ID: BedrockClaude37Sonnet,
  132. // Name: "Bedrock: Claude 3.7 Sonnet",
  133. // Provider: ProviderBedrock,
  134. // APIModel: "anthropic.claude-3-7-sonnet-20250219-v1:0",
  135. // CostPer1MIn: 3.0,
  136. // CostPer1MInCached: 3.75,
  137. // CostPer1MOutCached: 0.30,
  138. // CostPer1MOut: 15.0,
  139. // },
  140. }
  141. func init() {
  142. maps.Copy(SupportedModels, AnthropicModels)
  143. }