@lobehub/chat 1.111.1 → 1.111.3

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 (131) hide show
  1. package/.cursor/rules/code-review.mdc +2 -19
  2. package/.cursor/rules/cursor-ux.mdc +0 -72
  3. package/.cursor/rules/project-introduce.mdc +5 -5
  4. package/.cursor/rules/react-component.mdc +92 -73
  5. package/.cursor/rules/rules-attach.mdc +28 -61
  6. package/.cursor/rules/system-role.mdc +8 -20
  7. package/.cursor/rules/typescript.mdc +55 -14
  8. package/CHANGELOG.md +52 -0
  9. package/changelog/v1.json +14 -0
  10. package/locales/ar/models.json +21 -3
  11. package/locales/bg-BG/models.json +21 -3
  12. package/locales/de-DE/models.json +21 -3
  13. package/locales/en-US/models.json +21 -3
  14. package/locales/es-ES/models.json +21 -3
  15. package/locales/fa-IR/models.json +21 -3
  16. package/locales/fr-FR/models.json +21 -3
  17. package/locales/it-IT/models.json +21 -3
  18. package/locales/ja-JP/models.json +21 -3
  19. package/locales/ko-KR/models.json +21 -3
  20. package/locales/nl-NL/models.json +21 -3
  21. package/locales/pl-PL/models.json +21 -3
  22. package/locales/pt-BR/models.json +21 -3
  23. package/locales/ru-RU/models.json +21 -3
  24. package/locales/tr-TR/models.json +21 -3
  25. package/locales/vi-VN/models.json +21 -3
  26. package/locales/zh-CN/models.json +21 -3
  27. package/locales/zh-TW/models.json +21 -3
  28. package/package.json +1 -1
  29. package/packages/types/src/aiModel.ts +67 -46
  30. package/packages/types/src/hotkey.ts +2 -0
  31. package/packages/types/src/llm.ts +3 -3
  32. package/src/app/[variants]/(main)/_layout/Desktop/SideBar/PinList/index.tsx +3 -3
  33. package/src/app/[variants]/(main)/_layout/Desktop/SideBar/TopActions.test.tsx +1 -0
  34. package/src/app/[variants]/(main)/_layout/Desktop/SideBar/TopActions.tsx +11 -2
  35. package/src/app/[variants]/(main)/_layout/Desktop/SideBar/index.tsx +2 -2
  36. package/src/app/[variants]/(main)/chat/(workspace)/_layout/Desktop/ChatHeader/Main.tsx +2 -2
  37. package/src/app/[variants]/(main)/chat/_layout/Desktop/SessionPanel.tsx +2 -2
  38. package/src/app/[variants]/(main)/discover/(detail)/model/[...slugs]/features/Details/Overview/ProviderList/index.tsx +23 -12
  39. package/src/app/[variants]/(main)/discover/(detail)/provider/[...slugs]/features/Details/Overview/ModelList/index.tsx +23 -10
  40. package/src/app/[variants]/(main)/settings/provider/features/ModelList/ModelItem.tsx +21 -12
  41. package/src/components/Thinking/index.tsx +53 -13
  42. package/src/config/aiModels/ai21.ts +8 -4
  43. package/src/config/aiModels/ai360.ts +28 -14
  44. package/src/config/aiModels/aihubmix.ts +174 -86
  45. package/src/config/aiModels/anthropic.ts +97 -38
  46. package/src/config/aiModels/azure.ts +54 -32
  47. package/src/config/aiModels/azureai.ts +63 -37
  48. package/src/config/aiModels/baichuan.ts +24 -12
  49. package/src/config/aiModels/bedrock.ts +60 -30
  50. package/src/config/aiModels/cohere.ts +60 -30
  51. package/src/config/aiModels/deepseek.ts +10 -6
  52. package/src/config/aiModels/fireworksai.ts +88 -44
  53. package/src/config/aiModels/giteeai.ts +1 -1
  54. package/src/config/aiModels/github.ts +44 -26
  55. package/src/config/aiModels/google.ts +119 -68
  56. package/src/config/aiModels/groq.ts +48 -24
  57. package/src/config/aiModels/higress.ts +617 -310
  58. package/src/config/aiModels/hunyuan.ts +105 -54
  59. package/src/config/aiModels/infiniai.ts +104 -52
  60. package/src/config/aiModels/internlm.ts +16 -8
  61. package/src/config/aiModels/jina.ts +4 -2
  62. package/src/config/aiModels/minimax.ts +11 -10
  63. package/src/config/aiModels/mistral.ts +40 -20
  64. package/src/config/aiModels/moonshot.ts +42 -22
  65. package/src/config/aiModels/novita.ts +196 -98
  66. package/src/config/aiModels/openai.ts +270 -137
  67. package/src/config/aiModels/openrouter.ts +205 -100
  68. package/src/config/aiModels/perplexity.ts +36 -6
  69. package/src/config/aiModels/ppio.ts +76 -38
  70. package/src/config/aiModels/qwen.ts +257 -133
  71. package/src/config/aiModels/sambanova.ts +56 -28
  72. package/src/config/aiModels/sensenova.ts +100 -50
  73. package/src/config/aiModels/siliconcloud.ts +224 -112
  74. package/src/config/aiModels/stepfun.ts +44 -22
  75. package/src/config/aiModels/taichu.ts +8 -4
  76. package/src/config/aiModels/tencentcloud.ts +12 -6
  77. package/src/config/aiModels/upstage.ts +8 -4
  78. package/src/config/aiModels/v0.ts +15 -12
  79. package/src/config/aiModels/vertexai.ts +49 -27
  80. package/src/config/aiModels/volcengine.ts +110 -51
  81. package/src/config/aiModels/wenxin.ts +179 -73
  82. package/src/config/aiModels/xai.ts +33 -19
  83. package/src/config/aiModels/zeroone.ts +48 -24
  84. package/src/config/aiModels/zhipu.ts +118 -69
  85. package/src/config/modelProviders/ai21.ts +0 -8
  86. package/src/config/modelProviders/ai360.ts +0 -20
  87. package/src/config/modelProviders/anthropic.ts +0 -56
  88. package/src/config/modelProviders/baichuan.ts +0 -30
  89. package/src/config/modelProviders/bedrock.ts +0 -74
  90. package/src/config/modelProviders/deepseek.ts +0 -13
  91. package/src/config/modelProviders/fireworksai.ts +0 -88
  92. package/src/config/modelProviders/google.ts +0 -59
  93. package/src/config/modelProviders/groq.ts +0 -48
  94. package/src/config/modelProviders/higress.ts +0 -727
  95. package/src/config/modelProviders/hunyuan.ts +0 -45
  96. package/src/config/modelProviders/infiniai.ts +0 -60
  97. package/src/config/modelProviders/internlm.ts +0 -8
  98. package/src/config/modelProviders/mistral.ts +0 -48
  99. package/src/config/modelProviders/modelscope.ts +2 -1
  100. package/src/config/modelProviders/openai.ts +5 -100
  101. package/src/config/modelProviders/openrouter.ts +0 -77
  102. package/src/config/modelProviders/ppio.ts +0 -95
  103. package/src/config/modelProviders/qwen.ts +0 -165
  104. package/src/config/modelProviders/sensenova.ts +0 -45
  105. package/src/config/modelProviders/siliconcloud.ts +0 -266
  106. package/src/config/modelProviders/stepfun.ts +0 -60
  107. package/src/config/modelProviders/taichu.ts +0 -10
  108. package/src/config/modelProviders/wenxin.ts +0 -90
  109. package/src/config/modelProviders/xai.ts +0 -16
  110. package/src/config/modelProviders/zeroone.ts +0 -60
  111. package/src/config/modelProviders/zhipu.ts +0 -80
  112. package/src/const/hotkeys.ts +6 -0
  113. package/src/features/Conversation/Extras/Usage/UsageDetail/ModelCard.tsx +4 -3
  114. package/src/features/Conversation/Extras/Usage/UsageDetail/pricing.ts +25 -15
  115. package/src/features/Conversation/Extras/Usage/UsageDetail/tokens.test.ts +7 -5
  116. package/src/features/Conversation/Extras/Usage/UsageDetail/tokens.ts +6 -5
  117. package/src/hooks/useHotkeys/chatScope.ts +2 -2
  118. package/src/hooks/useHotkeys/globalScope.ts +16 -4
  119. package/src/hooks/usePinnedAgentState.ts +21 -0
  120. package/src/hooks/useSwitchSession.ts +1 -1
  121. package/src/libs/model-runtime/utils/openaiCompatibleFactory/index.test.ts +54 -8
  122. package/src/locales/default/hotkey.ts +4 -0
  123. package/src/server/routers/lambda/agent.ts +2 -2
  124. package/src/server/routers/lambda/config/__snapshots__/index.test.ts.snap +0 -28
  125. package/src/server/services/discover/index.ts +7 -6
  126. package/src/server/services/user/index.ts +1 -2
  127. package/src/utils/__snapshots__/parseModels.test.ts.snap +28 -4
  128. package/src/utils/_deprecated/__snapshots__/parseModels.test.ts.snap +0 -8
  129. package/src/utils/parseModels.test.ts +60 -9
  130. package/src/utils/pricing.test.ts +183 -0
  131. package/src/utils/pricing.ts +90 -0
@@ -10,8 +10,10 @@ const novitaChatModels: AIChatModelCard[] = [
10
10
  displayName: 'Kimi K2 Instruct',
11
11
  id: 'moonshotai/kimi-k2-instruct',
12
12
  pricing: {
13
- input: 0.57,
14
- output: 2.3,
13
+ units: [
14
+ { name: 'textInput', rate: 0.57, strategy: 'fixed', unit: 'millionTokens' },
15
+ { name: 'textOutput', rate: 2.3, strategy: 'fixed', unit: 'millionTokens' },
16
+ ],
15
17
  },
16
18
  type: 'chat',
17
19
  },
@@ -24,8 +26,10 @@ const novitaChatModels: AIChatModelCard[] = [
24
26
  displayName: 'GLM 4.1V 9B Thinking',
25
27
  id: 'thudm/glm-4.1v-9b-thinking',
26
28
  pricing: {
27
- input: 0.035,
28
- output: 0.138,
29
+ units: [
30
+ { name: 'textInput', rate: 0.035, strategy: 'fixed', unit: 'millionTokens' },
31
+ { name: 'textOutput', rate: 0.138, strategy: 'fixed', unit: 'millionTokens' },
32
+ ],
29
33
  },
30
34
  type: 'chat',
31
35
  },
@@ -34,8 +38,10 @@ const novitaChatModels: AIChatModelCard[] = [
34
38
  displayName: 'ERNIE 4.5 0.3B',
35
39
  id: 'baidu/ernie-4.5-0.3b',
36
40
  pricing: {
37
- input: 0,
38
- output: 0,
41
+ units: [
42
+ { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },
43
+ { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },
44
+ ],
39
45
  },
40
46
  type: 'chat',
41
47
  },
@@ -44,8 +50,10 @@ const novitaChatModels: AIChatModelCard[] = [
44
50
  displayName: 'ERNIE 4.5 21B A3B',
45
51
  id: 'baidu/ernie-4.5-21B-a3b',
46
52
  pricing: {
47
- input: 0,
48
- output: 0,
53
+ units: [
54
+ { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },
55
+ { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },
56
+ ],
49
57
  },
50
58
  type: 'chat',
51
59
  },
@@ -57,8 +65,10 @@ const novitaChatModels: AIChatModelCard[] = [
57
65
  displayName: 'ERNIE 4.5 300B A47B Paddle',
58
66
  id: 'baidu/ernie-4.5-300b-a47b-paddle',
59
67
  pricing: {
60
- input: 0.28,
61
- output: 1.1,
68
+ units: [
69
+ { name: 'textInput', rate: 0.28, strategy: 'fixed', unit: 'millionTokens' },
70
+ { name: 'textOutput', rate: 1.1, strategy: 'fixed', unit: 'millionTokens' },
71
+ ],
62
72
  },
63
73
  type: 'chat',
64
74
  },
@@ -71,8 +81,10 @@ const novitaChatModels: AIChatModelCard[] = [
71
81
  displayName: 'ERNIE 4.5 VL 28B A3B',
72
82
  id: 'baidu/ernie-4.5-vl-28b-a3b',
73
83
  pricing: {
74
- input: 0,
75
- output: 0,
84
+ units: [
85
+ { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },
86
+ { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },
87
+ ],
76
88
  },
77
89
  type: 'chat',
78
90
  },
@@ -86,8 +98,10 @@ const novitaChatModels: AIChatModelCard[] = [
86
98
  displayName: 'ERNIE 4.5 VL 424B A47B',
87
99
  id: 'baidu/ernie-4.5-vl-424b-a47b',
88
100
  pricing: {
89
- input: 0.42,
90
- output: 1.25,
101
+ units: [
102
+ { name: 'textInput', rate: 0.42, strategy: 'fixed', unit: 'millionTokens' },
103
+ { name: 'textOutput', rate: 1.25, strategy: 'fixed', unit: 'millionTokens' },
104
+ ],
91
105
  },
92
106
  type: 'chat',
93
107
  },
@@ -100,8 +114,10 @@ const novitaChatModels: AIChatModelCard[] = [
100
114
  displayName: 'MiniMax M1 80K',
101
115
  id: 'minimaxai/minimax-m1-80k',
102
116
  pricing: {
103
- input: 0.55,
104
- output: 2.2,
117
+ units: [
118
+ { name: 'textInput', rate: 0.55, strategy: 'fixed', unit: 'millionTokens' },
119
+ { name: 'textOutput', rate: 2.2, strategy: 'fixed', unit: 'millionTokens' },
120
+ ],
105
121
  },
106
122
  type: 'chat',
107
123
  },
@@ -113,8 +129,10 @@ const novitaChatModels: AIChatModelCard[] = [
113
129
  displayName: 'Qwen3 4B FP8',
114
130
  id: 'qwen/qwen3-4b-fp8',
115
131
  pricing: {
116
- input: 0,
117
- output: 0,
132
+ units: [
133
+ { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },
134
+ { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },
135
+ ],
118
136
  },
119
137
  type: 'chat',
120
138
  },
@@ -126,8 +144,10 @@ const novitaChatModels: AIChatModelCard[] = [
126
144
  displayName: 'Qwen3 235B A22B FP8',
127
145
  id: 'qwen/qwen3-235b-a22b-fp8',
128
146
  pricing: {
129
- input: 0.2,
130
- output: 0.8,
147
+ units: [
148
+ { name: 'textInput', rate: 0.2, strategy: 'fixed', unit: 'millionTokens' },
149
+ { name: 'textOutput', rate: 0.8, strategy: 'fixed', unit: 'millionTokens' },
150
+ ],
131
151
  },
132
152
  type: 'chat',
133
153
  },
@@ -139,8 +159,10 @@ const novitaChatModels: AIChatModelCard[] = [
139
159
  displayName: 'Qwen3 30B A3B FP8',
140
160
  id: 'qwen/qwen3-30b-a3b-fp8',
141
161
  pricing: {
142
- input: 0.1,
143
- output: 0.45,
162
+ units: [
163
+ { name: 'textInput', rate: 0.1, strategy: 'fixed', unit: 'millionTokens' },
164
+ { name: 'textOutput', rate: 0.45, strategy: 'fixed', unit: 'millionTokens' },
165
+ ],
144
166
  },
145
167
  type: 'chat',
146
168
  },
@@ -152,8 +174,10 @@ const novitaChatModels: AIChatModelCard[] = [
152
174
  displayName: 'Qwen3 32B FP8',
153
175
  id: 'qwen/qwen3-32b-fp8',
154
176
  pricing: {
155
- input: 0.1,
156
- output: 0.45,
177
+ units: [
178
+ { name: 'textInput', rate: 0.1, strategy: 'fixed', unit: 'millionTokens' },
179
+ { name: 'textOutput', rate: 0.45, strategy: 'fixed', unit: 'millionTokens' },
180
+ ],
157
181
  },
158
182
  type: 'chat',
159
183
  },
@@ -165,8 +189,10 @@ const novitaChatModels: AIChatModelCard[] = [
165
189
  displayName: 'Llama 3.3 70B Instruct',
166
190
  id: 'meta-llama/llama-3.3-70b-instruct',
167
191
  pricing: {
168
- input: 0.13,
169
- output: 0.39,
192
+ units: [
193
+ { name: 'textInput', rate: 0.13, strategy: 'fixed', unit: 'millionTokens' },
194
+ { name: 'textOutput', rate: 0.39, strategy: 'fixed', unit: 'millionTokens' },
195
+ ],
170
196
  },
171
197
  type: 'chat',
172
198
  },
@@ -175,8 +201,10 @@ const novitaChatModels: AIChatModelCard[] = [
175
201
  displayName: 'Qwen3 8B FP8',
176
202
  id: 'qwen/qwen3-8b-fp8',
177
203
  pricing: {
178
- input: 0.035,
179
- output: 0.138,
204
+ units: [
205
+ { name: 'textInput', rate: 0.035, strategy: 'fixed', unit: 'millionTokens' },
206
+ { name: 'textOutput', rate: 0.138, strategy: 'fixed', unit: 'millionTokens' },
207
+ ],
180
208
  },
181
209
  type: 'chat',
182
210
  },
@@ -189,8 +217,10 @@ const novitaChatModels: AIChatModelCard[] = [
189
217
  enabled: true,
190
218
  id: 'meta-llama/llama-4-scout-17b-16e-instruct',
191
219
  pricing: {
192
- input: 0.1,
193
- output: 0.5,
220
+ units: [
221
+ { name: 'textInput', rate: 0.1, strategy: 'fixed', unit: 'millionTokens' },
222
+ { name: 'textOutput', rate: 0.5, strategy: 'fixed', unit: 'millionTokens' },
223
+ ],
194
224
  },
195
225
  type: 'chat',
196
226
  },
@@ -203,8 +233,10 @@ const novitaChatModels: AIChatModelCard[] = [
203
233
  enabled: true,
204
234
  id: 'meta-llama/llama-4-maverick-17b-128e-instruct-fp8',
205
235
  pricing: {
206
- input: 0.2,
207
- output: 0.85,
236
+ units: [
237
+ { name: 'textInput', rate: 0.2, strategy: 'fixed', unit: 'millionTokens' },
238
+ { name: 'textOutput', rate: 0.85, strategy: 'fixed', unit: 'millionTokens' },
239
+ ],
208
240
  },
209
241
  type: 'chat',
210
242
  },
@@ -214,8 +246,10 @@ const novitaChatModels: AIChatModelCard[] = [
214
246
  displayName: 'Llama 3.1 8B Instruct',
215
247
  id: 'meta-llama/llama-3.1-8b-instruct',
216
248
  pricing: {
217
- input: 0.02,
218
- output: 0.05,
249
+ units: [
250
+ { name: 'textInput', rate: 0.02, strategy: 'fixed', unit: 'millionTokens' },
251
+ { name: 'textOutput', rate: 0.05, strategy: 'fixed', unit: 'millionTokens' },
252
+ ],
219
253
  },
220
254
  type: 'chat',
221
255
  },
@@ -225,8 +259,10 @@ const novitaChatModels: AIChatModelCard[] = [
225
259
  displayName: 'Llama 3 8B Instruct',
226
260
  id: 'meta-llama/llama-3-8b-instruct',
227
261
  pricing: {
228
- input: 0.04,
229
- output: 0.04,
262
+ units: [
263
+ { name: 'textInput', rate: 0.04, strategy: 'fixed', unit: 'millionTokens' },
264
+ { name: 'textOutput', rate: 0.04, strategy: 'fixed', unit: 'millionTokens' },
265
+ ],
230
266
  },
231
267
  type: 'chat',
232
268
  },
@@ -236,8 +272,10 @@ const novitaChatModels: AIChatModelCard[] = [
236
272
  displayName: 'Llama 3 70B Instruct',
237
273
  id: 'meta-llama/llama-3-70b-instruct',
238
274
  pricing: {
239
- input: 0.51,
240
- output: 0.74,
275
+ units: [
276
+ { name: 'textInput', rate: 0.51, strategy: 'fixed', unit: 'millionTokens' },
277
+ { name: 'textOutput', rate: 0.74, strategy: 'fixed', unit: 'millionTokens' },
278
+ ],
241
279
  },
242
280
  type: 'chat',
243
281
  },
@@ -247,8 +285,10 @@ const novitaChatModels: AIChatModelCard[] = [
247
285
  displayName: 'Gemma 3 27B',
248
286
  id: 'google/gemma-3-27b-it',
249
287
  pricing: {
250
- input: 0.2,
251
- output: 0.2,
288
+ units: [
289
+ { name: 'textInput', rate: 0.2, strategy: 'fixed', unit: 'millionTokens' },
290
+ { name: 'textOutput', rate: 0.2, strategy: 'fixed', unit: 'millionTokens' },
291
+ ],
252
292
  },
253
293
  type: 'chat',
254
294
  },
@@ -258,8 +298,10 @@ const novitaChatModels: AIChatModelCard[] = [
258
298
  displayName: 'Gemma 3 1B',
259
299
  id: 'google/gemma-3-1b-it',
260
300
  pricing: {
261
- input: 0,
262
- output: 0,
301
+ units: [
302
+ { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },
303
+ { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },
304
+ ],
263
305
  },
264
306
  type: 'chat',
265
307
  },
@@ -269,8 +311,10 @@ const novitaChatModels: AIChatModelCard[] = [
269
311
  displayName: 'Mistral Nemo',
270
312
  id: 'mistralai/mistral-nemo',
271
313
  pricing: {
272
- input: 0.04,
273
- output: 0.17,
314
+ units: [
315
+ { name: 'textInput', rate: 0.04, strategy: 'fixed', unit: 'millionTokens' },
316
+ { name: 'textOutput', rate: 0.17, strategy: 'fixed', unit: 'millionTokens' },
317
+ ],
274
318
  },
275
319
  type: 'chat',
276
320
  },
@@ -280,8 +324,10 @@ const novitaChatModels: AIChatModelCard[] = [
280
324
  displayName: 'Mistral 7B Instruct',
281
325
  id: 'mistralai/mistral-7b-instruct',
282
326
  pricing: {
283
- input: 0.029,
284
- output: 0.059,
327
+ units: [
328
+ { name: 'textInput', rate: 0.029, strategy: 'fixed', unit: 'millionTokens' },
329
+ { name: 'textOutput', rate: 0.059, strategy: 'fixed', unit: 'millionTokens' },
330
+ ],
285
331
  },
286
332
  type: 'chat',
287
333
  },
@@ -291,8 +337,10 @@ const novitaChatModels: AIChatModelCard[] = [
291
337
  displayName: 'WizardLM-2 8x22B',
292
338
  id: 'microsoft/wizardlm-2-8x22b',
293
339
  pricing: {
294
- input: 0.62,
295
- output: 0.62,
340
+ units: [
341
+ { name: 'textInput', rate: 0.62, strategy: 'fixed', unit: 'millionTokens' },
342
+ { name: 'textOutput', rate: 0.62, strategy: 'fixed', unit: 'millionTokens' },
343
+ ],
296
344
  },
297
345
  type: 'chat',
298
346
  },
@@ -302,8 +350,10 @@ const novitaChatModels: AIChatModelCard[] = [
302
350
  displayName: 'Dolphin Mixtral 8x22B',
303
351
  id: 'cognitivecomputations/dolphin-mixtral-8x22b',
304
352
  pricing: {
305
- input: 0.9,
306
- output: 0.9,
353
+ units: [
354
+ { name: 'textInput', rate: 0.9, strategy: 'fixed', unit: 'millionTokens' },
355
+ { name: 'textOutput', rate: 0.9, strategy: 'fixed', unit: 'millionTokens' },
356
+ ],
307
357
  },
308
358
  type: 'chat',
309
359
  },
@@ -313,8 +363,10 @@ const novitaChatModels: AIChatModelCard[] = [
313
363
  displayName: 'Hermes 2 Pro Llama 3 8B',
314
364
  id: 'nousresearch/hermes-2-pro-llama-3-8b',
315
365
  pricing: {
316
- input: 0.14,
317
- output: 0.14,
366
+ units: [
367
+ { name: 'textInput', rate: 0.14, strategy: 'fixed', unit: 'millionTokens' },
368
+ { name: 'textOutput', rate: 0.14, strategy: 'fixed', unit: 'millionTokens' },
369
+ ],
318
370
  },
319
371
  type: 'chat',
320
372
  },
@@ -324,8 +376,10 @@ const novitaChatModels: AIChatModelCard[] = [
324
376
  displayName: 'MythoMax l2 13B',
325
377
  id: 'gryphe/mythomax-l2-13b',
326
378
  pricing: {
327
- input: 0.09,
328
- output: 0.09,
379
+ units: [
380
+ { name: 'textInput', rate: 0.09, strategy: 'fixed', unit: 'millionTokens' },
381
+ { name: 'textOutput', rate: 0.09, strategy: 'fixed', unit: 'millionTokens' },
382
+ ],
329
383
  },
330
384
  type: 'chat',
331
385
  },
@@ -334,8 +388,10 @@ const novitaChatModels: AIChatModelCard[] = [
334
388
  displayName: 'Deepseek Prover V2 671B',
335
389
  id: 'deepseek/deepseek-prover-v2-671b',
336
390
  pricing: {
337
- input: 0.7,
338
- output: 2.5,
391
+ units: [
392
+ { name: 'textInput', rate: 0.7, strategy: 'fixed', unit: 'millionTokens' },
393
+ { name: 'textOutput', rate: 2.5, strategy: 'fixed', unit: 'millionTokens' },
394
+ ],
339
395
  },
340
396
  type: 'chat',
341
397
  },
@@ -347,8 +403,10 @@ const novitaChatModels: AIChatModelCard[] = [
347
403
  displayName: 'Deepseek V3 Turbo',
348
404
  id: 'deepseek/deepseek-v3-turbo',
349
405
  pricing: {
350
- input: 0.4,
351
- output: 1.3,
406
+ units: [
407
+ { name: 'textInput', rate: 0.4, strategy: 'fixed', unit: 'millionTokens' },
408
+ { name: 'textOutput', rate: 1.3, strategy: 'fixed', unit: 'millionTokens' },
409
+ ],
352
410
  },
353
411
  type: 'chat',
354
412
  },
@@ -361,8 +419,10 @@ const novitaChatModels: AIChatModelCard[] = [
361
419
  enabled: true,
362
420
  id: 'deepseek/deepseek-v3-0324',
363
421
  pricing: {
364
- input: 0.28,
365
- output: 1.14,
422
+ units: [
423
+ { name: 'textInput', rate: 0.28, strategy: 'fixed', unit: 'millionTokens' },
424
+ { name: 'textOutput', rate: 1.14, strategy: 'fixed', unit: 'millionTokens' },
425
+ ],
366
426
  },
367
427
  type: 'chat',
368
428
  },
@@ -376,8 +436,10 @@ const novitaChatModels: AIChatModelCard[] = [
376
436
  enabled: true,
377
437
  id: 'deepseek/deepseek-r1-0528',
378
438
  pricing: {
379
- input: 0.7,
380
- output: 2.5,
439
+ units: [
440
+ { name: 'textInput', rate: 0.7, strategy: 'fixed', unit: 'millionTokens' },
441
+ { name: 'textOutput', rate: 2.5, strategy: 'fixed', unit: 'millionTokens' },
442
+ ],
381
443
  },
382
444
  type: 'chat',
383
445
  },
@@ -389,8 +451,10 @@ const novitaChatModels: AIChatModelCard[] = [
389
451
  displayName: 'DeepSeek R1 0528 Qwen3 8B',
390
452
  id: 'deepseek/deepseek-r1-0528-qwen3-8b',
391
453
  pricing: {
392
- input: 0.06,
393
- output: 0.09,
454
+ units: [
455
+ { name: 'textInput', rate: 0.06, strategy: 'fixed', unit: 'millionTokens' },
456
+ { name: 'textOutput', rate: 0.09, strategy: 'fixed', unit: 'millionTokens' },
457
+ ],
394
458
  },
395
459
  type: 'chat',
396
460
  },
@@ -403,8 +467,10 @@ const novitaChatModels: AIChatModelCard[] = [
403
467
  displayName: 'Deepseek R1 Turbo',
404
468
  id: 'deepseek/deepseek-r1-turbo',
405
469
  pricing: {
406
- input: 0.7,
407
- output: 2.5,
470
+ units: [
471
+ { name: 'textInput', rate: 0.7, strategy: 'fixed', unit: 'millionTokens' },
472
+ { name: 'textOutput', rate: 2.5, strategy: 'fixed', unit: 'millionTokens' },
473
+ ],
408
474
  },
409
475
  type: 'chat',
410
476
  },
@@ -416,8 +482,10 @@ const novitaChatModels: AIChatModelCard[] = [
416
482
  displayName: 'Deepseek R1 Distill Llama 70B',
417
483
  id: 'deepseek/deepseek-r1-distill-llama-70b',
418
484
  pricing: {
419
- input: 0.8,
420
- output: 0.8,
485
+ units: [
486
+ { name: 'textInput', rate: 0.8, strategy: 'fixed', unit: 'millionTokens' },
487
+ { name: 'textOutput', rate: 0.8, strategy: 'fixed', unit: 'millionTokens' },
488
+ ],
421
489
  },
422
490
  type: 'chat',
423
491
  },
@@ -429,8 +497,10 @@ const novitaChatModels: AIChatModelCard[] = [
429
497
  displayName: 'Deepseek R1 Distill Qwen 14B',
430
498
  id: 'deepseek/deepseek-r1-distill-qwen-14b',
431
499
  pricing: {
432
- input: 0.15,
433
- output: 0.15,
500
+ units: [
501
+ { name: 'textInput', rate: 0.15, strategy: 'fixed', unit: 'millionTokens' },
502
+ { name: 'textOutput', rate: 0.15, strategy: 'fixed', unit: 'millionTokens' },
503
+ ],
434
504
  },
435
505
  type: 'chat',
436
506
  },
@@ -442,8 +512,10 @@ const novitaChatModels: AIChatModelCard[] = [
442
512
  displayName: 'Deepseek R1 Distill Qwen 32B',
443
513
  id: 'deepseek/deepseek-r1-distill-qwen-32b',
444
514
  pricing: {
445
- input: 0.3,
446
- output: 0.3,
515
+ units: [
516
+ { name: 'textInput', rate: 0.3, strategy: 'fixed', unit: 'millionTokens' },
517
+ { name: 'textOutput', rate: 0.3, strategy: 'fixed', unit: 'millionTokens' },
518
+ ],
447
519
  },
448
520
  type: 'chat',
449
521
  },
@@ -452,8 +524,10 @@ const novitaChatModels: AIChatModelCard[] = [
452
524
  displayName: 'L3 8B Stheno v3.2',
453
525
  id: 'Sao10K/L3-8B-Stheno-v3.2',
454
526
  pricing: {
455
- input: 0.05,
456
- output: 0.05,
527
+ units: [
528
+ { name: 'textInput', rate: 0.05, strategy: 'fixed', unit: 'millionTokens' },
529
+ { name: 'textOutput', rate: 0.05, strategy: 'fixed', unit: 'millionTokens' },
530
+ ],
457
531
  },
458
532
  type: 'chat',
459
533
  },
@@ -465,8 +539,10 @@ const novitaChatModels: AIChatModelCard[] = [
465
539
  displayName: 'Deepseek R1 Distill Llama 8B',
466
540
  id: 'deepseek/deepseek-r1-distill-llama-8b',
467
541
  pricing: {
468
- input: 0.04,
469
- output: 0.04,
542
+ units: [
543
+ { name: 'textInput', rate: 0.04, strategy: 'fixed', unit: 'millionTokens' },
544
+ { name: 'textOutput', rate: 0.04, strategy: 'fixed', unit: 'millionTokens' },
545
+ ],
470
546
  },
471
547
  type: 'chat',
472
548
  },
@@ -478,8 +554,10 @@ const novitaChatModels: AIChatModelCard[] = [
478
554
  displayName: 'Qwen2.5 72B Instruct',
479
555
  id: 'qwen/qwen-2.5-72b-instruct',
480
556
  pricing: {
481
- input: 0.38,
482
- output: 0.4,
557
+ units: [
558
+ { name: 'textInput', rate: 0.38, strategy: 'fixed', unit: 'millionTokens' },
559
+ { name: 'textOutput', rate: 0.4, strategy: 'fixed', unit: 'millionTokens' },
560
+ ],
483
561
  },
484
562
  type: 'chat',
485
563
  },
@@ -488,8 +566,10 @@ const novitaChatModels: AIChatModelCard[] = [
488
566
  displayName: 'L3 70B Euryale v2.1',
489
567
  id: 'sao10k/l3-70b-euryale-v2.1',
490
568
  pricing: {
491
- input: 1.48,
492
- output: 1.48,
569
+ units: [
570
+ { name: 'textInput', rate: 1.48, strategy: 'fixed', unit: 'millionTokens' },
571
+ { name: 'textOutput', rate: 1.48, strategy: 'fixed', unit: 'millionTokens' },
572
+ ],
493
573
  },
494
574
  type: 'chat',
495
575
  },
@@ -498,8 +578,10 @@ const novitaChatModels: AIChatModelCard[] = [
498
578
  displayName: 'Midnight Rose 70B',
499
579
  id: 'sophosympatheia/midnight-rose-70b',
500
580
  pricing: {
501
- input: 0.8,
502
- output: 0.8,
581
+ units: [
582
+ { name: 'textInput', rate: 0.8, strategy: 'fixed', unit: 'millionTokens' },
583
+ { name: 'textOutput', rate: 0.8, strategy: 'fixed', unit: 'millionTokens' },
584
+ ],
503
585
  },
504
586
  type: 'chat',
505
587
  },
@@ -508,8 +590,10 @@ const novitaChatModels: AIChatModelCard[] = [
508
590
  displayName: 'L3 8B Lunaris',
509
591
  id: 'sao10k/l3-8b-lunaris',
510
592
  pricing: {
511
- input: 0.05,
512
- output: 0.05,
593
+ units: [
594
+ { name: 'textInput', rate: 0.05, strategy: 'fixed', unit: 'millionTokens' },
595
+ { name: 'textOutput', rate: 0.05, strategy: 'fixed', unit: 'millionTokens' },
596
+ ],
513
597
  },
514
598
  type: 'chat',
515
599
  },
@@ -522,8 +606,10 @@ const novitaChatModels: AIChatModelCard[] = [
522
606
  enabled: true,
523
607
  id: 'qwen/qwen2.5-vl-72b-instruct',
524
608
  pricing: {
525
- input: 0.8,
526
- output: 0.8,
609
+ units: [
610
+ { name: 'textInput', rate: 0.8, strategy: 'fixed', unit: 'millionTokens' },
611
+ { name: 'textOutput', rate: 0.8, strategy: 'fixed', unit: 'millionTokens' },
612
+ ],
527
613
  },
528
614
  type: 'chat',
529
615
  },
@@ -532,8 +618,10 @@ const novitaChatModels: AIChatModelCard[] = [
532
618
  displayName: 'Llama 3.2 1B Instruct',
533
619
  id: 'meta-llama/llama-3.2-1b-instruct',
534
620
  pricing: {
535
- input: 0,
536
- output: 0,
621
+ units: [
622
+ { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },
623
+ { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },
624
+ ],
537
625
  },
538
626
  type: 'chat',
539
627
  },
@@ -545,8 +633,10 @@ const novitaChatModels: AIChatModelCard[] = [
545
633
  displayName: 'Llama 3.2 3B Instruct',
546
634
  id: 'meta-llama/llama-3.2-3b-instruct',
547
635
  pricing: {
548
- input: 0.03,
549
- output: 0.05,
636
+ units: [
637
+ { name: 'textInput', rate: 0.03, strategy: 'fixed', unit: 'millionTokens' },
638
+ { name: 'textOutput', rate: 0.05, strategy: 'fixed', unit: 'millionTokens' },
639
+ ],
550
640
  },
551
641
  type: 'chat',
552
642
  },
@@ -555,8 +645,10 @@ const novitaChatModels: AIChatModelCard[] = [
555
645
  displayName: 'Llama 3.1 8B Instruct BF16',
556
646
  id: 'meta-llama/llama-3.1-8b-instruct-bf16',
557
647
  pricing: {
558
- input: 0.06,
559
- output: 0.06,
648
+ units: [
649
+ { name: 'textInput', rate: 0.06, strategy: 'fixed', unit: 'millionTokens' },
650
+ { name: 'textOutput', rate: 0.06, strategy: 'fixed', unit: 'millionTokens' },
651
+ ],
560
652
  },
561
653
  type: 'chat',
562
654
  },
@@ -565,8 +657,10 @@ const novitaChatModels: AIChatModelCard[] = [
565
657
  displayName: 'L31 70B Euryale v2.2',
566
658
  id: 'sao10k/l31-70b-euryale-v2.2',
567
659
  pricing: {
568
- input: 1.48,
569
- output: 1.48,
660
+ units: [
661
+ { name: 'textInput', rate: 1.48, strategy: 'fixed', unit: 'millionTokens' },
662
+ { name: 'textOutput', rate: 1.48, strategy: 'fixed', unit: 'millionTokens' },
663
+ ],
570
664
  },
571
665
  type: 'chat',
572
666
  },
@@ -578,8 +672,10 @@ const novitaChatModels: AIChatModelCard[] = [
578
672
  displayName: 'Qwen2.5 7B Instruct',
579
673
  id: 'qwen/qwen2.5-7b-instruct',
580
674
  pricing: {
581
- input: 0,
582
- output: 0,
675
+ units: [
676
+ { name: 'textInput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },
677
+ { name: 'textOutput', rate: 0, strategy: 'fixed', unit: 'millionTokens' },
678
+ ],
583
679
  },
584
680
  type: 'chat',
585
681
  },
@@ -591,8 +687,10 @@ const novitaChatModels: AIChatModelCard[] = [
591
687
  displayName: 'GLM 4 32B 0414',
592
688
  id: 'thudm/glm-4-32b-0414',
593
689
  pricing: {
594
- input: 0.24,
595
- output: 0.24,
690
+ units: [
691
+ { name: 'textInput', rate: 0.24, strategy: 'fixed', unit: 'millionTokens' },
692
+ { name: 'textOutput', rate: 0.24, strategy: 'fixed', unit: 'millionTokens' },
693
+ ],
596
694
  },
597
695
  type: 'chat',
598
696
  },