@fish-under-sea/magpie-neartoken 0.2.5 → 0.4.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.
- package/index.mjs +116 -47
- package/package.json +3 -3
- package/page/app.js +339 -109
- package/page/groups.js +2 -2
- package/page/icon.svg +2 -2
- package/page/index.html +2 -0
- package/page/latest.js +2 -2
- package/page/market.css +166 -0
- package/page/pricing.js +2 -0
- package/page/star.png +0 -0
- package/page/style.css +8 -2
- package/page/version.js +1 -1
package/index.mjs
CHANGED
|
@@ -97,18 +97,41 @@ function text(quota, cur) {
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
/** 倍率的写法:0.1 → 0.1,1 → 1。 */
|
|
100
|
-
|
|
101
|
-
return String(Math.round(v * 10000) / 10000)
|
|
102
|
-
}
|
|
100
|
+
const ratioText = (v) => String(Math.round(v * 10000) / 10000)
|
|
103
101
|
|
|
104
|
-
/**
|
|
105
|
-
const
|
|
106
|
-
/** 视频模型的名字词。 */
|
|
107
|
-
const FILMS = ['veo', 'sora', 'kling', 'seedance', 'hailuo', 'vidu', 'pixverse', 'runway', 'luma', 'wan2', 'wanx-video', 'minimax-video', 'movie', 'video', 't2v', 'i2v']
|
|
108
|
-
/** 既不聊也不画不拍的名字。 */
|
|
109
|
-
const SKIP = ['embedding', 'embed-', 'text-embedding', 'tts', 'transcribe', 'asr', 'rerank', 'moderation', 'whisper', 'speech']
|
|
102
|
+
/** ratioOf 是分组倍率,没给就是 0。 */
|
|
103
|
+
const ratioOf = (ratios, name) => (Number(ratios?.[name]) > 0 ? Number(ratios[name]) : 0)
|
|
110
104
|
|
|
111
|
-
|
|
105
|
+
/** 站点自己的约定:带 -c 后缀的模型工具调用不可靠,一律不给。 */
|
|
106
|
+
/**
|
|
107
|
+
* kindOf 按站点给的字段判断一个模型属于哪一类。
|
|
108
|
+
*
|
|
109
|
+
* 站点在 /api/pricing 里已经标好了端点类型和分组名,不需要猜模型名字:
|
|
110
|
+
* image-generation → 生图,openai-video → 视频(omni / sd2.0 / sd2.5 /
|
|
111
|
+
* minimax-h3 都是这一类,名字里一个视频关键词都没有),分组里的 TTS /
|
|
112
|
+
* ASR / Suno → 语音,向量模型分组 → 向量,其余 → 对话。
|
|
113
|
+
*/
|
|
114
|
+
function kindOf(row) {
|
|
115
|
+
const ends = Array.isArray(row?.supported_endpoint_types) ? row.supported_endpoint_types : []
|
|
116
|
+
const groups = Array.isArray(row?.enable_groups) ? row.enable_groups.join(' ') : ''
|
|
117
|
+
const text = (String(row?.model_name || '') + ' ' + groups + ' ' + String(row?.description || '')).toLowerCase()
|
|
118
|
+
if (ends.includes('image-generation')) return 'image'
|
|
119
|
+
if (ends.includes('openai-video') || /(^|[-_])video([-_]|$)|veo|seedance|sora|kling/i.test(text)) return 'video'
|
|
120
|
+
if (/tts|text-to-speech|asr|speech|whisper|suno|audio|语音|转文字/i.test(text)) return 'audio'
|
|
121
|
+
if (/embedding|embed|rerank|向量/i.test(text)) return 'embedding'
|
|
122
|
+
return 'chat'
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/** kindOutput 是 magpie 的 capabilities.output:分区靠它认。 */
|
|
126
|
+
function kindOutput(kind) {
|
|
127
|
+
switch (kind) {
|
|
128
|
+
case 'image': return { image: true, text: true }
|
|
129
|
+
case 'video': return { video: true, text: true }
|
|
130
|
+
case 'audio': return { audio: true, text: true }
|
|
131
|
+
case 'embedding': return { embedding: true, text: true }
|
|
132
|
+
default: return { text: true }
|
|
133
|
+
}
|
|
134
|
+
}
|
|
112
135
|
|
|
113
136
|
/**
|
|
114
137
|
* 目录:把 /api/pricing 展开成 magpie 的模型表。
|
|
@@ -117,23 +140,19 @@ const hasWord = (id, words) => words.some((w) => id.toLowerCase().includes(w))
|
|
|
117
140
|
* 「站点原文组名 + 倍率 + 模型」。每行带自己的 x-neartoken-group 头,请求
|
|
118
141
|
* 按那一行走那一组——这就是"模型后面跟着它的分组"。
|
|
119
142
|
*/
|
|
120
|
-
async function catalog(
|
|
121
|
-
// 同时把「全部分组」抄一份给页面:页面在沙箱里发不出网络请求,但能加载自己
|
|
122
|
-
// 目录下的脚本,所以这里写 page/groups.js,模型广场按它重绘。
|
|
143
|
+
async function catalog(disabledGroups = new Set(), disabledModels = new Set()) {
|
|
123
144
|
const groupsOut = new Map()
|
|
124
145
|
const env = await call('/api/pricing')
|
|
125
146
|
const rows = Array.isArray(env?.data) ? env.data : []
|
|
126
147
|
const refs = env?.group_refs && typeof env.group_refs === 'object' ? env.group_refs : {}
|
|
127
148
|
const ratios = env?.group_ratio && typeof env.group_ratio === 'object' ? env.group_ratio : {}
|
|
149
|
+
// 完整快照给模型广场:页面按它一比一重绘站点 /pricing
|
|
150
|
+
writePricing(env)
|
|
128
151
|
const out = {}
|
|
129
152
|
for (const row of rows) {
|
|
130
153
|
const model = String(row?.model_name ?? '').trim()
|
|
131
|
-
if (!model ||
|
|
132
|
-
const
|
|
133
|
-
const chat = ends.length === 0 || ends.some((e) => ['openai', 'openai-response', 'anthropic', 'gemini'].includes(e))
|
|
134
|
-
const drawer = hasWord(model, DRAWS) || ends.includes('image-generation')
|
|
135
|
-
const film = hasWord(model, FILMS)
|
|
136
|
-
if (!chat && !drawer && !film) continue
|
|
154
|
+
if (!model || disabledModels.has(model)) continue
|
|
155
|
+
const kind = kindOf(row)
|
|
137
156
|
const all = Array.isArray(row?.enable_groups) && row.enable_groups.length ? row.enable_groups : ['']
|
|
138
157
|
// 先按「全部分组」计数(关掉的也算),模型广场要显示它有多少个模型
|
|
139
158
|
for (const raw of all) {
|
|
@@ -142,12 +161,12 @@ async function catalog(disabled = new Set()) {
|
|
|
142
161
|
const had = groupsOut.get(g)
|
|
143
162
|
groupsOut.set(g, { name: g, ratio: 0, models: (had?.models || 0) + 1, ref: '' })
|
|
144
163
|
}
|
|
145
|
-
const groups = all.filter((g) => !
|
|
164
|
+
const groups = all.filter((g) => !disabledGroups.has(String(g ?? '').trim()))
|
|
146
165
|
if (!groups.length) continue
|
|
147
166
|
for (const raw of groups) {
|
|
148
167
|
const group = String(raw ?? '').trim()
|
|
149
168
|
const ref = group && refs[group] ? String(refs[group]) : ''
|
|
150
|
-
const ratio =
|
|
169
|
+
const ratio = ratioOf(ratios, group)
|
|
151
170
|
const id = ref ? `${ref}::${model}` : model
|
|
152
171
|
const label = group ? (ratio > 0 ? `${group} ${ratioText(ratio)}x` : group) + ' · ' + model : model
|
|
153
172
|
out[id] = {
|
|
@@ -158,35 +177,91 @@ async function catalog(disabled = new Set()) {
|
|
|
158
177
|
output: Number(row?.max_tokens) > 0 ? Number(row.max_tokens) : 0,
|
|
159
178
|
},
|
|
160
179
|
...(ref ? { headers: { 'x-neartoken-group': ref } } : {}),
|
|
180
|
+
// 站点自己的分类,交给 magpie 的四个分区(图像/视频/语音/向量)
|
|
181
|
+
...(kind === 'chat' ? {} : { kind }),
|
|
161
182
|
capabilities: {
|
|
162
183
|
toolcall: true,
|
|
163
|
-
|
|
164
|
-
...(film ? { output: { video: true, text: true } } : {}),
|
|
184
|
+
output: kindOutput(kind),
|
|
165
185
|
},
|
|
166
186
|
}
|
|
167
187
|
}
|
|
168
188
|
}
|
|
169
189
|
writeGroups([...groupsOut.values()].map((g) => ({
|
|
170
190
|
...g,
|
|
171
|
-
ratio:
|
|
191
|
+
ratio: ratioOf(ratios, g.name),
|
|
172
192
|
ref: refs[g.name] ? String(refs[g.name]) : '',
|
|
173
193
|
})).sort((a, b) => a.name.localeCompare(b.name, 'zh')))
|
|
174
194
|
return out
|
|
175
195
|
}
|
|
176
196
|
|
|
177
197
|
/**
|
|
178
|
-
* writeGroups 把分组表写成 page/groups.js
|
|
198
|
+
* writeGroups 把分组表写成 page/groups.js;writePricing 把整份站点目录写成
|
|
199
|
+
* page/pricing.js,给沙箱里的页面用。
|
|
179
200
|
*
|
|
180
201
|
* 页面发不出网络请求(CSP connect-src 'none'),但能加载自己目录下的脚本,
|
|
181
|
-
*
|
|
182
|
-
*
|
|
202
|
+
* 所以这里不推数据、只落文件:`<script src="pricing.js?t=…">` 一引就有。
|
|
203
|
+
* 写不进去(插件目录只读)就跳过,页面用包内那份静态快照。
|
|
183
204
|
*/
|
|
205
|
+
function writeGroups(groups) {
|
|
206
|
+
try {
|
|
207
|
+
const js = 'self.NEARTOKEN_GROUPS = ' + JSON.stringify(groups) + '\nself.NEARTOKEN_GROUPS_AT = ' + Date.now() + '\n'
|
|
208
|
+
writeFileSync(join(here, 'page', 'groups.js'), js, 'utf8')
|
|
209
|
+
} catch {
|
|
210
|
+
/* 只读安装:页面自己会说没拿到明细 */
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
184
214
|
/**
|
|
185
|
-
*
|
|
186
|
-
*
|
|
187
|
-
* 页面自己查不了(沙箱禁联网),但插件能:这里顺手问一次 registry,页面
|
|
188
|
-
* 「检查更新」时加载这个脚本就知道新不新。一分钟内不重复问。
|
|
215
|
+
* writePricing 把 /api/pricing 原样裁成模型广场需要的形状,写成 page/pricing.js。
|
|
216
|
+
* 与包内那份静态快照同形状,页面优先用这份(实时),静态那份只是首次兜底。
|
|
189
217
|
*/
|
|
218
|
+
function writePricing(env) {
|
|
219
|
+
try {
|
|
220
|
+
const keep = ['description', 'tags', 'icon', 'vendor_id', 'enable_groups', 'supported_endpoint_types',
|
|
221
|
+
'model_ratio', 'model_price', 'completion_ratio', 'cache_ratio', 'create_cache_ratio',
|
|
222
|
+
'quota_type', 'billing_mode', 'billing_expr', 'context_window', 'max_tokens',
|
|
223
|
+
'input_modalities', 'reasoning_levels']
|
|
224
|
+
// 包内快照里带了一批站点 /pricing 页面的描述与运行状态(/api/pricing 没给)。
|
|
225
|
+
// 实时刷新时把它们并回来,别让刷新把首屏说明冲掉。
|
|
226
|
+
const extra = new Map()
|
|
227
|
+
try {
|
|
228
|
+
const old = readFileSync(join(here, 'page', 'pricing.js'), 'utf8')
|
|
229
|
+
const raw = old.slice(old.indexOf('=') + 1).trim().replace(/;\s*$/, '')
|
|
230
|
+
const prev = JSON.parse(raw)
|
|
231
|
+
for (const m of prev?.models || []) {
|
|
232
|
+
const x = {}
|
|
233
|
+
for (const k of ['description', 'status', 'latency', 'throughput']) if (m[k] !== undefined) x[k] = m[k]
|
|
234
|
+
if (Object.keys(x).length) extra.set(m.name, x)
|
|
235
|
+
}
|
|
236
|
+
} catch { /* 没有旧快照就只用 API 字段 */ }
|
|
237
|
+
const models = (Array.isArray(env?.data) ? env.data : []).map((m) => {
|
|
238
|
+
const name = String(m?.model_name ?? '')
|
|
239
|
+
const o = { name }
|
|
240
|
+
for (const k of keep) if (m[k] !== undefined && m[k] !== null && m[k] !== '') o[k] = m[k]
|
|
241
|
+
// API 里没有 description 时,用页面快照里的那段说明
|
|
242
|
+
if (!o.description && extra.get(name)?.description) o.description = extra.get(name).description
|
|
243
|
+
return Object.assign(o, extra.get(name) || {})
|
|
244
|
+
})
|
|
245
|
+
const snap = {
|
|
246
|
+
at: Date.now(),
|
|
247
|
+
source: 'https://neartoken.cc/api/pricing',
|
|
248
|
+
version: env?.pricing_version ?? '',
|
|
249
|
+
models,
|
|
250
|
+
groups: env?.group_ratio ?? {},
|
|
251
|
+
refs: env?.group_refs ?? {},
|
|
252
|
+
notes: env?.usable_group ?? {},
|
|
253
|
+
auto: env?.auto_groups ?? [],
|
|
254
|
+
vendors: env?.vendors ?? [],
|
|
255
|
+
endpoints: env?.supported_endpoint ?? {},
|
|
256
|
+
}
|
|
257
|
+
writeFileSync(join(here, 'page', 'pricing.js'),
|
|
258
|
+
'// 由插件运行时从 /api/pricing 写入\nself.NEARTOKEN_PRICING = ' + JSON.stringify(snap) + '\n', 'utf8')
|
|
259
|
+
} catch {
|
|
260
|
+
/* 只读安装:用包内静态快照 */
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/** stampLatest 把 npm 上的最新版本写进 page/latest.js,一分钟内不重复问。 */
|
|
190
265
|
let latestAskedAt = 0
|
|
191
266
|
async function stampLatest() {
|
|
192
267
|
if (Date.now() - latestAskedAt < 60_000) return
|
|
@@ -208,31 +283,25 @@ async function stampLatest() {
|
|
|
208
283
|
/* 问不到就保持原样:页面会说「没查到」 */
|
|
209
284
|
}
|
|
210
285
|
}
|
|
211
|
-
function writeGroups(groups) {
|
|
212
|
-
try {
|
|
213
|
-
const js = 'self.NEARTOKEN_GROUPS = ' + JSON.stringify(groups) + '\nself.NEARTOKEN_GROUPS_AT = ' + Date.now() + '\n'
|
|
214
|
-
writeFileSync(join(here, 'page', 'groups.js'), js, 'utf8')
|
|
215
|
-
} catch {
|
|
216
|
-
/* 只读安装:页面自己会说没拿到明细 */
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
286
|
|
|
220
287
|
export default async function neartoken(input, options) {
|
|
221
|
-
//
|
|
222
|
-
//
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
if (Array.isArray(raw)) return new Set(raw.filter((
|
|
288
|
+
// 页面写进来的开关:关掉的分组,以及关掉的模型。
|
|
289
|
+
// 走 magpie 的 plugin options(页面 magpie.options.set),不碰宿主代码。
|
|
290
|
+
// 默认全选:options 里没有 disabledModels 时,一个都不关。
|
|
291
|
+
const asSet = (raw) => {
|
|
292
|
+
if (Array.isArray(raw)) return new Set(raw.filter((x) => typeof x === 'string'))
|
|
226
293
|
if (typeof raw === 'string' && raw.trim()) {
|
|
227
294
|
try {
|
|
228
295
|
const parsed = JSON.parse(raw)
|
|
229
|
-
return new Set(Array.isArray(parsed) ? parsed.filter((
|
|
296
|
+
return new Set(Array.isArray(parsed) ? parsed.filter((x) => typeof x === 'string') : [])
|
|
230
297
|
} catch {
|
|
231
298
|
return new Set()
|
|
232
299
|
}
|
|
233
300
|
}
|
|
234
301
|
return new Set()
|
|
235
|
-
}
|
|
302
|
+
}
|
|
303
|
+
const disabledGroups = asSet(options?.disabledGroups)
|
|
304
|
+
const disabledModels = asSet(options?.disabledModels)
|
|
236
305
|
return {
|
|
237
306
|
auth: {
|
|
238
307
|
provider: PROVIDER_ID,
|
|
@@ -351,7 +420,7 @@ export default async function neartoken(input, options) {
|
|
|
351
420
|
*/
|
|
352
421
|
async models() {
|
|
353
422
|
await stampLatest()
|
|
354
|
-
return catalog(
|
|
423
|
+
return catalog(disabledGroups, disabledModels)
|
|
355
424
|
},
|
|
356
425
|
},
|
|
357
426
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fish-under-sea/magpie-neartoken",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "NearToken for magpie: a provider whose sign-in is the site's own device authorization, models listed per billing group with their multiplier, balance and vouchers on magpie's usage card, plus a page for spending and top-ups.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "index.mjs",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"access": "public"
|
|
40
40
|
},
|
|
41
41
|
"magpie": {
|
|
42
|
-
"icon": "page/
|
|
42
|
+
"icon": "page/star.png",
|
|
43
43
|
"page": {
|
|
44
44
|
"title": "NearToken",
|
|
45
45
|
"titles": {
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
"de": "NearToken"
|
|
50
50
|
},
|
|
51
51
|
"file": "page/index.html",
|
|
52
|
-
"icon": "page/
|
|
52
|
+
"icon": "page/star.png"
|
|
53
53
|
},
|
|
54
54
|
"calls": [
|
|
55
55
|
"neartoken:state",
|
package/page/app.js
CHANGED
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
const windows = new Map()
|
|
19
19
|
/** 充值面:档位、渠道、当前选择。 */
|
|
20
20
|
let topupInfo = null
|
|
21
|
-
/**
|
|
21
|
+
/** 插件自己的开关:关掉的模型(写进 magpie 的 plugin options,provider 插件按它过滤)。 */
|
|
22
22
|
let options = {}
|
|
23
|
-
let
|
|
23
|
+
let disabledModels = new Set()
|
|
24
24
|
/** 当前视角:home / market / logs。 */
|
|
25
25
|
let tab = 'home'
|
|
26
26
|
/** 插件写下的分组快照(page/groups.js),页面加载脚本取到。 */
|
|
@@ -118,13 +118,15 @@
|
|
|
118
118
|
}
|
|
119
119
|
try {
|
|
120
120
|
await bridge.ready
|
|
121
|
-
//
|
|
121
|
+
// 插件自己的开关:关掉的模型。默认全选(options 里没有这个字段时一个都不关)
|
|
122
122
|
try {
|
|
123
123
|
options = (await bridge.options.get()) || {}
|
|
124
124
|
} catch {
|
|
125
125
|
options = {}
|
|
126
126
|
}
|
|
127
|
-
|
|
127
|
+
const raw = options.disabledModels
|
|
128
|
+
disabledModels = Array.isArray(raw) ? new Set(raw)
|
|
129
|
+
: (typeof raw === 'string' && raw.trim() ? new Set((() => { try { return JSON.parse(raw) } catch { return [] } })()) : new Set())
|
|
128
130
|
await load()
|
|
129
131
|
clock = setInterval(tick, 1000)
|
|
130
132
|
bridge.onVisibility((visible) => {
|
|
@@ -192,7 +194,8 @@
|
|
|
192
194
|
frag.append(tabsBar())
|
|
193
195
|
if (tab === 'market') frag.append(marketCard())
|
|
194
196
|
else if (tab === 'logs') frag.append(logsCard())
|
|
195
|
-
else frag.append(
|
|
197
|
+
else frag.append(el('div', { class: 'home-grid' },
|
|
198
|
+
accountCard(), boardCard(), topupCard(), providerCard()))
|
|
196
199
|
} else {
|
|
197
200
|
setStatus('未连接')
|
|
198
201
|
frag.append(connectCard())
|
|
@@ -219,9 +222,8 @@
|
|
|
219
222
|
if (key !== 'home' && view.configured && !windows.has(span)) {
|
|
220
223
|
call('neartoken:usage', { range: span }).then((w) => { windows.set(span, w); render() }).catch(showError)
|
|
221
224
|
}
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
}
|
|
225
|
+
// 模型广场的数据在 page/pricing.js(包内快照 + 插件运行时覆盖),
|
|
226
|
+
// 页面加载时就已就位,不需要再动态取。
|
|
225
227
|
},
|
|
226
228
|
}, label)))
|
|
227
229
|
}
|
|
@@ -421,68 +423,301 @@
|
|
|
421
423
|
await loadGroups(true)
|
|
422
424
|
render()
|
|
423
425
|
}
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
426
|
+
// ---------- 模型广场:一比一复刻 neartoken.cc/pricing ----------
|
|
427
|
+
|
|
428
|
+
let marketQuery = ''
|
|
429
|
+
let marketGroup = ''
|
|
430
|
+
let marketKind = 'all'
|
|
431
|
+
let marketUnit = 'M'
|
|
432
|
+
let marketMode = 'standard'
|
|
433
|
+
let marketSort = 'default'
|
|
434
|
+
let marketLayout = 'grid'
|
|
435
|
+
const marketVendors = new Set()
|
|
436
|
+
const MARKET_KINDS = [['all', '全部'], ['chat', '对话'], ['image', '生图'], ['video', '视频'], ['audio', '语音'], ['embedding', '向量']]
|
|
437
|
+
|
|
438
|
+
/** pricing 是包内静态快照(插件运行时会把实时目录覆盖进同一个文件)。 */
|
|
439
|
+
function pricing() {
|
|
440
|
+
const p = self.NEARTOKEN_PRICING
|
|
441
|
+
return p && Array.isArray(p.models) && p.models.length ? p : null
|
|
434
442
|
}
|
|
435
|
-
const BUCKET_ORDER = ['低价', '满血', '图片', '视频', '语音', '向量', '其他']
|
|
436
443
|
|
|
437
|
-
/**
|
|
438
|
-
function
|
|
439
|
-
const
|
|
440
|
-
const
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
if (
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
444
|
+
/** marketKindOf 与 index.mjs 的分类同源:按站点端点判,不猜名字。 */
|
|
445
|
+
function marketKindOf(m) {
|
|
446
|
+
const ends = m?.supported_endpoint_types || []
|
|
447
|
+
const text = [m?.name, (m?.enable_groups || []).join(' '), m?.description].join(' ').toLowerCase()
|
|
448
|
+
if (ends.includes('image-generation')) return 'image'
|
|
449
|
+
if (ends.includes('openai-video') || /(^|[-_])video([-_]|$)|veo|seedance|sora|kling/i.test(text)) return 'video'
|
|
450
|
+
if (/tts|text-to-speech|asr|speech|whisper|suno|audio|语音|转文字/i.test(text)) return 'audio'
|
|
451
|
+
if (/embedding|embed|rerank|向量/i.test(text)) return 'embedding'
|
|
452
|
+
return 'chat'
|
|
453
|
+
}
|
|
454
|
+
|
|
455
|
+
function vendorOf(id) {
|
|
456
|
+
const v = (pricing()?.vendors || []).find((x) => String(x.id) === String(id))
|
|
457
|
+
return v ? v.name : '其他'
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
/** 第一级:模型功能。第二级:价格与品质(低价 / 满血 / 备用 / 官Key …)。 */
|
|
461
|
+
const FUNC_TAGS = [
|
|
462
|
+
['生图', /生图|图片|image|GPT Image|Gemini.*Image/i],
|
|
463
|
+
['视频', /视频|video|Veo|Seedance|Suno|即梦/i],
|
|
464
|
+
['语音', /语音|TTS|ASR|转文字|合成/i],
|
|
465
|
+
['向量', /向量|embedding|embed/i],
|
|
466
|
+
['对话', /.*/],
|
|
467
|
+
]
|
|
468
|
+
const PRICE_TAGS = ['低价', '满血', '促销', '备用', '官Key', '官key', '国模', '自有', '反重力', '神秘折扣', 'CC', 'Kiro', '灵车', 'Argon', 'GPT Pro', 'Claude', 'DeepSeek', 'GLM', 'Gemini', 'Kimi', 'GPT', 'Suno', 'AIS']
|
|
469
|
+
|
|
470
|
+
/** groupTags 把 [低价][生图] 生图特惠 拆成功能 / 价格 / 余下文字,供排序与重绘。 */
|
|
471
|
+
function groupTags(name) {
|
|
472
|
+
const raw = String(name || '')
|
|
473
|
+
const parts = (raw.match(/\[[^\]]+\]/g) || []).map((p) => p.slice(1, -1))
|
|
474
|
+
const rest = raw.replace(/\[[^\]]+\]/g, '').trim()
|
|
475
|
+
const all = parts.concat(rest ? [rest] : []).join(' ')
|
|
476
|
+
let func = '对话'
|
|
477
|
+
for (const [label, re] of FUNC_TAGS) { if (re.test(all)) { func = label; break } }
|
|
478
|
+
const price = parts.filter((p) => PRICE_TAGS.some((k) => p.toLowerCase().includes(k.toLowerCase())))
|
|
479
|
+
return { func, price, rest }
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
/** groupBadge 按「功能 → 价格 → 组名」两级重绘:功能标签在前、价格标签在后。 */
|
|
483
|
+
function groupBadge(name) {
|
|
484
|
+
const t = groupTags(name)
|
|
485
|
+
const tone = { '生图': 'pink', '视频': 'blue', '语音': 'purple', '向量': 'teal', '对话': 'plain' }
|
|
486
|
+
const colorOf = (w) => {
|
|
487
|
+
if (/低价|反重力|神秘|自有|国模/i.test(w)) return 'green'
|
|
488
|
+
if (/满血|原生|特惠/i.test(w)) return 'red'
|
|
489
|
+
if (/促销|生图|Kiro|灵车/i.test(w)) return 'pink'
|
|
490
|
+
if (/备用|官Key|官key|CC|Argon|GPT Pro|视频|向量/i.test(w)) return 'blue'
|
|
491
|
+
return 'plain'
|
|
457
492
|
}
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
493
|
+
return el('span', { class: 'gb' },
|
|
494
|
+
// 功能标签只在非对话类显示;对话是默认,不重复挂
|
|
495
|
+
t.func === '对话' ? null : el('span', { class: 'gb-tag lvl1 ' + (tone[t.func] || 'plain'), text: t.func }),
|
|
496
|
+
t.price.map((w) => el('span', { class: 'gb-tag lvl2 ' + colorOf(w), text: w })),
|
|
497
|
+
t.rest ? el('span', { class: 'gb-rest', text: t.rest }) : null)
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
/**
|
|
501
|
+
* priceOf 反推站点卡片上的价格:
|
|
502
|
+
* 计费表达式里 p/c/cr 的系数 × 该模型最低分组倍率(站点按最低档展示)。
|
|
503
|
+
* 没有表达式(按量计费)时系数 = model_ratio × 2、× completion_ratio、× cache_ratio。
|
|
504
|
+
* 逐个与站点 SSR 卡片核对过:gpt-6-astra ¥2/¥10/¥0.2、claude-sonnet-5-5
|
|
505
|
+
* ¥3/¥15/¥0.15、glm-5.3 ¥2/¥7/¥0.5、gpt-6.1-terra ¥0.26/¥1.3/¥0.013。
|
|
506
|
+
*/
|
|
507
|
+
function priceOf(m) {
|
|
508
|
+
const expr = String(m?.billing_expr || '')
|
|
509
|
+
const coef = (v) => { const x = expr.match(new RegExp('\\b' + v + '\\s*\\*\\s*([\\d.]+)')); return x ? Number(x[1]) : null }
|
|
510
|
+
const ratios = (m?.enable_groups || []).map((g) => Number(pricing()?.groups?.[g])).filter((v) => v > 0)
|
|
511
|
+
const min = ratios.length ? Math.min(...ratios) : 1
|
|
512
|
+
// 生图/音乐这类按次计费:表达式里是 fixed(单价) × 张数,不是 token 系数
|
|
513
|
+
const fixed = expr.match(/fixed\(\s*([\d.]+)\s*\)/)
|
|
514
|
+
if (fixed) return { perCall: Number(fixed[1]) * min, perLabel: '张', tiered: true }
|
|
515
|
+
if (Number(m?.quota_type) === 1 && Number(m?.model_price) > 0) {
|
|
516
|
+
return { perCall: Number(m.model_price), perLabel: '次', tiered: false }
|
|
466
517
|
}
|
|
467
|
-
const
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
518
|
+
const p0 = coef('p') ?? (Number(m?.model_ratio) || 0) * 2
|
|
519
|
+
const c0 = coef('c') ?? p0 * (Number(m?.completion_ratio) || 0)
|
|
520
|
+
const r0 = coef('cr') ?? p0 * (Number(m?.cache_ratio) || 0)
|
|
521
|
+
return { input: p0 * min, output: c0 * min, cache: r0 * min, tiered: !!expr }
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
/** money 是价格写法:¥2、¥0.02;/1K 时把每 1M 的价除以 1000。 */
|
|
525
|
+
function money(v, unit) {
|
|
526
|
+
const x = unit === 'K' ? v / 1000 : v
|
|
527
|
+
if (!x) return '¥0'
|
|
528
|
+
const s = String(Math.round(x * 1e8) / 1e8)
|
|
529
|
+
return '¥' + s
|
|
472
530
|
}
|
|
473
531
|
|
|
474
|
-
/**
|
|
475
|
-
function
|
|
476
|
-
const
|
|
477
|
-
const
|
|
478
|
-
const
|
|
479
|
-
const
|
|
480
|
-
|
|
481
|
-
|
|
532
|
+
/** modelCard:点击整张卡切换启用;高亮就是启用,只有启用的进 magpie 模型清单。 */
|
|
533
|
+
function modelCard(m) {
|
|
534
|
+
const p = priceOf(m)
|
|
535
|
+
const ends = (m?.supported_endpoint_types || []).join(', ')
|
|
536
|
+
const groups = m?.enable_groups || []
|
|
537
|
+
const shownGroups = groups.slice(0, 2)
|
|
538
|
+
const more = groups.length - shownGroups.length
|
|
539
|
+
const kind = marketKindOf(m)
|
|
540
|
+
const on = !disabledModels.has(m.name)
|
|
541
|
+
const priceRow = p.perCall !== undefined
|
|
542
|
+
? el('div', { class: 'mc-prices one' },
|
|
543
|
+
el('div', null, el('span', { text: '按次计费' }), el('b', { text: money(p.perCall, 'M') + ' / ' + p.perLabel })))
|
|
544
|
+
: el('div', { class: 'mc-prices' },
|
|
545
|
+
el('div', null, el('span', { text: '输入' }), el('b', { text: money(p.input, marketUnit) + ' / 1' + marketUnit })),
|
|
546
|
+
el('div', null, el('span', { text: '输出' }), el('b', { text: money(p.output, marketUnit) + ' / 1' + marketUnit })),
|
|
547
|
+
el('div', null, el('span', { text: '缓存读取' }), el('b', { text: money(p.cache, marketUnit) + ' / 1' + marketUnit })))
|
|
548
|
+
const hasStatus = m.status !== undefined && m.status !== null
|
|
549
|
+
const bars = el('span', { class: 'mc-bar' }, Array.from({ length: 10 }, (_, i) =>
|
|
550
|
+
el('i', { class: hasStatus ? (i < Math.round((Number(m.status) || 0) / 10) ? 'ok' : 'bad') : '' })))
|
|
551
|
+
return el('article', {
|
|
552
|
+
class: 'mc' + (kind !== 'chat' ? ' mc-' + kind : '') + (on ? ' on' : ' off'),
|
|
482
553
|
'aria-pressed': String(on),
|
|
483
|
-
title:
|
|
484
|
-
onclick: () =>
|
|
485
|
-
},
|
|
554
|
+
title: on ? '已启用 · 点一下停用' : '已停用 · 点一下启用',
|
|
555
|
+
onclick: () => toggleModel(m.name),
|
|
556
|
+
},
|
|
557
|
+
el('div', { class: 'mc-head' },
|
|
558
|
+
el('span', { class: 'mc-vicon', text: vendorOf(m.vendor_id).slice(0, 1) }),
|
|
559
|
+
el('div', { class: 'grow' },
|
|
560
|
+
el('div', { class: 'mc-name', text: m.name }),
|
|
561
|
+
el('div', { class: 'mc-vendor', text: vendorOf(m.vendor_id) })),
|
|
562
|
+
el('span', { class: 'mc-flag', text: on ? '✓ 已启用' : '○ 未启用' }),
|
|
563
|
+
el('button', {
|
|
564
|
+
class: 'mc-copy', title: '复制模型 ID',
|
|
565
|
+
onclick: (e) => { e.stopPropagation(); copy(m.name) },
|
|
566
|
+
}, '⧉')),
|
|
567
|
+
el('p', { class: 'mc-desc', text: m.description || '暂无描述。' }),
|
|
568
|
+
el('div', { class: 'mc-billing ' + (p.tiered ? 'dyn' : 'flat'), text: p.tiered ? '动态计费' : '按量计费' }),
|
|
569
|
+
priceRow,
|
|
570
|
+
el('div', { class: 'mc-line' },
|
|
571
|
+
el('span', { class: 'k', text: '分组' }),
|
|
572
|
+
shownGroups.map((g) => groupBadge(g)),
|
|
573
|
+
more > 0 ? el('span', { class: 'mc-more', text: '+' + more }) : null),
|
|
574
|
+
el('div', { class: 'mc-line' },
|
|
575
|
+
el('span', { class: 'k', text: '端点' }),
|
|
576
|
+
el('span', { class: 'v', text: ends || '—' })),
|
|
577
|
+
el('div', { class: 'mc-stats' },
|
|
578
|
+
el('span', null, el('span', { class: 'k', text: '状态' }),
|
|
579
|
+
el('span', { class: 'v', text: hasStatus ? Number(m.status).toFixed(2) + '%' : '—' })),
|
|
580
|
+
bars,
|
|
581
|
+
el('span', null, el('span', { class: 'k', text: '延迟' }),
|
|
582
|
+
el('span', { class: 'v', text: m.latency || '—s' })),
|
|
583
|
+
el('span', null, el('span', { class: 'k', text: '吞吐' }),
|
|
584
|
+
el('span', { class: 'v', text: m.throughput || '—t/s' }))),
|
|
585
|
+
el('div', { class: 'mc-foot' },
|
|
586
|
+
el('a', { class: 'link', href: 'https://neartoken.cc/pricing', target: '_blank', rel: 'noreferrer' }, '详情 ›')))
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
/** 站点 /pricing 首屏的推荐顺序(抓自它的服务端渲染),默认排序时置顶。 */
|
|
590
|
+
const SITE_FIRST = ['gpt-6-astra', 'gpt-6.1-sol', 'gpt-6-sol', 'gpt-6.1-terra', 'gpt-6-luna',
|
|
591
|
+
'claude-fable-5-1', 'claude-fable-5', 'claude-opus-5-5', 'claude-opus-5',
|
|
592
|
+
'claude-sonnet-5-5', 'claude-sonnet-5', 'glm-5.3']
|
|
593
|
+
|
|
594
|
+
/** filteredModels 把搜索、分组、类型、厂商筛选叠起来。 */
|
|
595
|
+
function filteredModels() {
|
|
596
|
+
const p = pricing()
|
|
597
|
+
if (!p) return []
|
|
598
|
+
let list = p.models.slice()
|
|
599
|
+
if (marketSort !== 'latest') {
|
|
600
|
+
// 默认按站点首屏顺序置顶,其余保持目录原序
|
|
601
|
+
list.sort((a, b) => {
|
|
602
|
+
const ia = SITE_FIRST.indexOf(a.name), ib = SITE_FIRST.indexOf(b.name)
|
|
603
|
+
if (ia !== -1 || ib !== -1) return (ia === -1 ? 999 : ia) - (ib === -1 ? 999 : ib)
|
|
604
|
+
return 0
|
|
605
|
+
})
|
|
606
|
+
}
|
|
607
|
+
if (marketGroup) list = list.filter((m) => (m.enable_groups || []).includes(marketGroup))
|
|
608
|
+
if (marketKind !== 'all') list = list.filter((m) => marketKindOf(m) === marketKind)
|
|
609
|
+
if (marketVendors.size) list = list.filter((m) => marketVendors.has(String(m.vendor_id)))
|
|
610
|
+
const q = marketQuery.trim().toLowerCase()
|
|
611
|
+
if (q) list = list.filter((m) => [m.name, vendorOf(m.vendor_id), m.description, m.tags,
|
|
612
|
+
(m.enable_groups || []).join(' '), (m.supported_endpoint_types || []).join(' ')].join(' ').toLowerCase().includes(q))
|
|
613
|
+
if (marketSort === 'latest') list = list.slice().reverse()
|
|
614
|
+
return list
|
|
615
|
+
}
|
|
616
|
+
|
|
617
|
+
/** refreshMarketList 只重画右侧列表,不整页 render(保住搜索框焦点)。 */
|
|
618
|
+
function refreshMarketList() {
|
|
619
|
+
const box = $('market-list')
|
|
620
|
+
const count = $('market-count')
|
|
621
|
+
if (!box) return
|
|
622
|
+
const list = filteredModels()
|
|
623
|
+
if (count) count.textContent = list.length + ' 个模型'
|
|
624
|
+
box.className = 'model-grid' + (marketLayout === 'list' ? ' as-list' : '')
|
|
625
|
+
box.replaceChildren(...(list.length ? list.map(modelCard) : [el('p', { class: 'note', text: '没有符合条件的模型。' })]))
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
/** marketCard 是广场整页:顶部工具条 + 左筛选 + 右卡片网格。 */
|
|
629
|
+
function marketCard() {
|
|
630
|
+
const p = pricing()
|
|
631
|
+
const groups = Object.keys(p?.groups || {}).sort((a, b) => (p.groups[a] - p.groups[b]) || a.localeCompare(b, 'zh'))
|
|
632
|
+
const vendors = (p?.vendors || []).slice().sort((a, b) => String(a.name).localeCompare(String(b.name), 'zh'))
|
|
633
|
+
const search = el('input', {
|
|
634
|
+
class: 'market-search', type: 'search', placeholder: '搜索模型名称、供应商、端点或标签...',
|
|
635
|
+
value: marketQuery,
|
|
636
|
+
oninput: (e) => { marketQuery = e.target.value; refreshMarketList() },
|
|
637
|
+
})
|
|
638
|
+
const seg = (items, cur, onPick) => el('div', { class: 'market-seg' },
|
|
639
|
+
items.map(([k, label]) => el('button', {
|
|
640
|
+
'aria-pressed': String(cur === k), onclick: () => { onPick(k); render() },
|
|
641
|
+
}, label)))
|
|
642
|
+
const total = p?.models?.length || 0
|
|
643
|
+
const allOn = disabledModels.size === 0
|
|
644
|
+
const allOff = total > 0 && disabledModels.size >= total
|
|
645
|
+
const tools = el('div', { class: 'market-tools' },
|
|
646
|
+
el('div', { class: 'market-seg' },
|
|
647
|
+
el('button', {
|
|
648
|
+
'aria-pressed': String(allOn), class: allOn ? 'on' : '',
|
|
649
|
+
title: '启用全部模型', onclick: () => setAll(true),
|
|
650
|
+
}, '全选'),
|
|
651
|
+
el('button', {
|
|
652
|
+
'aria-pressed': String(allOff), class: allOff ? 'on' : '',
|
|
653
|
+
title: '停用全部模型', onclick: () => setAll(false),
|
|
654
|
+
}, '全不选')),
|
|
655
|
+
seg([['standard', '标准'], ['topup', '充值']], marketMode, (k) => { marketMode = k }),
|
|
656
|
+
seg([['M', '/1M'], ['K', '/1K']], marketUnit, (k) => { marketUnit = k }),
|
|
657
|
+
el('button', { class: 'market-tool' + (marketSort === 'latest' ? ' on' : ''), onclick: () => { marketSort = marketSort === 'latest' ? 'default' : 'latest'; refreshMarketList() } }, '↑ 最新版本'),
|
|
658
|
+
el('div', { class: 'market-seg' },
|
|
659
|
+
el('button', { 'aria-pressed': String(marketLayout === 'grid'), title: '网格', onclick: () => { marketLayout = 'grid'; refreshMarketList() } }, '▦'),
|
|
660
|
+
el('button', { 'aria-pressed': String(marketLayout === 'list'), title: '列表', onclick: () => { marketLayout = 'list'; refreshMarketList() } }, '☰')))
|
|
661
|
+
// 分组按两级排:先功能(生图/视频/语音/向量/对话),再价格倍率
|
|
662
|
+
const byFunc = new Map()
|
|
663
|
+
for (const g of groups) {
|
|
664
|
+
const f = groupTags(g).func
|
|
665
|
+
if (!byFunc.has(f)) byFunc.set(f, [])
|
|
666
|
+
byFunc.get(f).push(g)
|
|
667
|
+
}
|
|
668
|
+
const FUNC_ORDER = ['对话', '生图', '视频', '语音', '向量']
|
|
669
|
+
const groupChips = el('div', { class: 'market-chips' },
|
|
670
|
+
el('button', {
|
|
671
|
+
class: 'market-chip' + (!marketGroup ? ' on' : ''), onclick: () => { marketGroup = ''; render() },
|
|
672
|
+
}, '所有分组'),
|
|
673
|
+
FUNC_ORDER.filter((f) => byFunc.has(f)).map((f) => el('div', { class: 'chip-group' },
|
|
674
|
+
el('div', { class: 'chip-group-name', text: f }),
|
|
675
|
+
el('div', { class: 'market-chips' }, byFunc.get(f).map((g) => {
|
|
676
|
+
const ratio = Number(p.groups[g]) || 0
|
|
677
|
+
return el('button', {
|
|
678
|
+
class: 'market-chip' + (marketGroup === g ? ' on' : ''),
|
|
679
|
+
title: '按这个分组筛选',
|
|
680
|
+
onclick: () => { marketGroup = marketGroup === g ? '' : g; render() },
|
|
681
|
+
}, groupBadge(g), ratio > 0 ? el('span', { class: 'ratio', text: 'x' + ratioText(ratio) }) : null)
|
|
682
|
+
})))))
|
|
683
|
+
const kinds = el('div', { class: 'market-chips' },
|
|
684
|
+
MARKET_KINDS.map(([k, label]) => el('button', {
|
|
685
|
+
class: 'market-chip' + (marketKind === k ? ' on' : ''),
|
|
686
|
+
onclick: () => { marketKind = k; render() },
|
|
687
|
+
}, label)))
|
|
688
|
+
const vendorChips = el('div', { class: 'market-chips' },
|
|
689
|
+
vendors.map((v) => el('button', {
|
|
690
|
+
class: 'market-chip' + (marketVendors.has(String(v.id)) ? ' on' : ''),
|
|
691
|
+
onclick: () => {
|
|
692
|
+
const id = String(v.id)
|
|
693
|
+
if (marketVendors.has(id)) marketVendors.delete(id)
|
|
694
|
+
else marketVendors.add(id)
|
|
695
|
+
render()
|
|
696
|
+
},
|
|
697
|
+
}, v.name)))
|
|
698
|
+
const aside = el('aside', { class: 'market-aside' },
|
|
699
|
+
el('div', { class: 'ma-head' },
|
|
700
|
+
el('h3', { text: '筛选' }),
|
|
701
|
+
el('button', { class: 'link', onclick: () => { marketQuery = ''; marketGroup = ''; marketKind = 'all'; marketVendors.clear(); render() } }, '↺ 重置')),
|
|
702
|
+
el('p', { class: 'note', text: '按供应商、分组、类型和标签细化搜索模型。' }),
|
|
703
|
+
el('h4', { text: '分组' }), groupChips,
|
|
704
|
+
el('h4', { text: '类型' }), kinds,
|
|
705
|
+
el('h4', { text: '供应商' }), vendorChips)
|
|
706
|
+
const off = disabledModels.size
|
|
707
|
+
const body = el('div', { class: 'market-body' },
|
|
708
|
+
aside,
|
|
709
|
+
el('div', { class: 'market-main' },
|
|
710
|
+
el('div', { class: 'market-count', id: 'market-count', text: (p?.models?.length || 0) + ' 个模型' }),
|
|
711
|
+
el('div', { class: 'model-grid', id: 'market-list' }),
|
|
712
|
+
el('p', { class: 'note', text: off
|
|
713
|
+
? '已停用 ' + off + ' 个模型:它们不会进 magpie 的模型清单。点卡片可重新启用,或按「全选」。'
|
|
714
|
+
: '默认全选。点卡片切换启用状态,高亮 = 已启用;只有启用的模型才进 magpie 的模型清单。' })))
|
|
715
|
+
const wrap = el('section', { class: 'market' },
|
|
716
|
+
el('div', { class: 'market-top' }, search, tools),
|
|
717
|
+
body)
|
|
718
|
+
// 首帧填一次列表
|
|
719
|
+
queueMicrotask(refreshMarketList)
|
|
720
|
+
return wrap
|
|
486
721
|
}
|
|
487
722
|
|
|
488
723
|
/** 使用日志:这个窗口里每个模型花了多少、用了多少 token。 */
|
|
@@ -509,56 +744,51 @@
|
|
|
509
744
|
el('span', { class: 'num', text: compact(m.tokens) }),
|
|
510
745
|
el('span', { class: 'num', text: m.costText || '' }),
|
|
511
746
|
el('span', { class: 'num', text: Math.round((m.tokens / total) * 100) + '%' }))))
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
'
|
|
531
|
-
|
|
532
|
-
'
|
|
533
|
-
}
|
|
534
|
-
const chips = list.map((g) => {
|
|
535
|
-
const name = String(g?.name ?? '')
|
|
536
|
-
const on = !disabledGroups.has(name)
|
|
537
|
-
const ratio = Number(g?.ratio) || 0
|
|
538
|
-
const label = ratio > 0 ? name + ' ' + ratioText(ratio) + 'x' : name
|
|
539
|
-
return el('button', {
|
|
540
|
-
class: 'group-chip',
|
|
541
|
-
'aria-pressed': String(on),
|
|
542
|
-
title: g?.models ? g.models + ' 个模型' : '',
|
|
543
|
-
onclick: () => toggleGroup(name),
|
|
544
|
-
}, label, el('span', { class: 'n', text: String(g?.models || 0) }))
|
|
545
|
-
})
|
|
546
|
-
const off = disabledGroups.size
|
|
547
|
-
return card(null, head,
|
|
548
|
-
el('div', { class: 'groups' }, chips),
|
|
549
|
-
el('p', { class: 'note', text: off
|
|
550
|
-
? '已关掉 ' + off + ' 个分组:它们的模型不再出现在 magpie 的模型列表里。'
|
|
551
|
-
: '全部开着。点一下关掉一组,它的模型就不再出现在 magpie 的模型列表里。' }))
|
|
747
|
+
const names = rows.slice(0, 8)
|
|
748
|
+
const palette = ['#5b8def', '#43b8a4', '#9b7ce0', '#54b26a', '#e0a44a', '#d47a9a', '#6fa8d6', '#c08bd0']
|
|
749
|
+
const dist = el('div', { class: 'log-dist' },
|
|
750
|
+
el('h3', { text: '按模型分布' }),
|
|
751
|
+
names.map((m, i) => el('div', { class: 'dist-row' },
|
|
752
|
+
el('div', { class: 'dist-name', title: m.model, text: m.model }),
|
|
753
|
+
el('div', { class: 'dist-track' },
|
|
754
|
+
el('i', { style: 'width:' + Math.max(2, Math.round((m.tokens / total) * 100)) + '%;background:' + palette[i % palette.length] })),
|
|
755
|
+
el('div', { class: 'dist-val', text: compact(m.tokens) + ' · ' + Math.round((m.tokens / total) * 100) + '%' }))))
|
|
756
|
+
return el('section', { class: 'logs' },
|
|
757
|
+
el('div', { class: 'logs-head' }, head),
|
|
758
|
+
el('div', { class: 'logs-body' },
|
|
759
|
+
el('div', { class: 'card' },
|
|
760
|
+
el('div', { class: 'stats' },
|
|
761
|
+
el('div', { class: 'stat' }, el('div', { class: 'k', text: '消耗' }), el('div', { class: 'v', text: data.spent })),
|
|
762
|
+
el('div', { class: 'stat' }, el('div', { class: 'k', text: '当前余额' }), el('div', { class: 'v', text: data.balance || '—' })),
|
|
763
|
+
el('div', { class: 'stat' }, el('div', { class: 'k', text: 'Token' }), el('div', { class: 'v', text: compact(data.tokens) }))),
|
|
764
|
+
table,
|
|
765
|
+
el('p', { class: 'note', text: '数字来自站点用量端点;这个窗口里没有调用就不列模型。' })),
|
|
766
|
+
el('div', { class: 'card' }, dist,
|
|
767
|
+
el('p', { class: 'note', text: '按 token 占比排,最多列前 8 个模型。' }))))
|
|
552
768
|
}
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
async function toggleGroup(name) {
|
|
769
|
+
/** toggleModel 翻转一个模型的启用状态,并写回 plugin options。 */
|
|
770
|
+
async function toggleModel(name) {
|
|
556
771
|
if (!name) return
|
|
557
|
-
if (
|
|
558
|
-
else
|
|
772
|
+
if (disabledModels.has(name)) disabledModels.delete(name)
|
|
773
|
+
else disabledModels.add(name)
|
|
774
|
+
refreshMarketList()
|
|
775
|
+
await saveDisabled()
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
/** setAll 全选 / 全不选:双状态按钮都走这里。 */
|
|
779
|
+
async function setAll(enable) {
|
|
780
|
+
const p = pricing()
|
|
781
|
+
if (!p) return
|
|
782
|
+
if (enable) disabledModels.clear()
|
|
783
|
+
else p.models.forEach((m) => disabledModels.add(m.name))
|
|
559
784
|
render()
|
|
785
|
+
await saveDisabled()
|
|
786
|
+
}
|
|
787
|
+
|
|
788
|
+
/** saveDisabled 把「关掉的模型」写进 plugin options,provider 插件按它过滤清单。 */
|
|
789
|
+
async function saveDisabled() {
|
|
560
790
|
try {
|
|
561
|
-
const next = await bridge.options.set({ ...options,
|
|
791
|
+
const next = await bridge.options.set({ ...options, disabledModels: [...disabledModels] })
|
|
562
792
|
if (next && typeof next === 'object') options = next
|
|
563
793
|
} catch (error) {
|
|
564
794
|
showError(error)
|
package/page/groups.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
self.
|
|
1
|
+
self.NEARTOKEN_GROUPS = [{"name":"[低价] 灵车 K3.1 Pro 专用","ratio":0.3,"models":1,"ref":"#49"},{"name":"[低价] 神秘折扣模型","ratio":0.12,"models":7,"ref":"#24"},{"name":"[低价] 视频分组","ratio":1.5,"models":2,"ref":"#31"},{"name":"[低价] 语音合成 TTS","ratio":0.3,"models":5,"ref":"#35"},{"name":"[低价] 语音转文字 ASR","ratio":1,"models":1,"ref":"#27"},{"name":"[低价] DeepSeek","ratio":0.4,"models":3,"ref":"#16"},{"name":"[低价] GPT 福利","ratio":0.2,"models":6,"ref":"#56"},{"name":"[低价] Grok","ratio":0.1,"models":13,"ref":"#37"},{"name":"[低价] Seedance","ratio":1,"models":2,"ref":"#19"},{"name":"[低价][备用] GPT Pro","ratio":0.3,"models":8,"ref":"#13"},{"name":"[低价][促销] GPT Image","ratio":0.5,"models":2,"ref":"#39"},{"name":"[低价][反重力] Gemini","ratio":0.5,"models":18,"ref":"#5"},{"name":"[低价][满血] 国模","ratio":0.6,"models":9,"ref":"#6"},{"name":"[低价][满血] Claude 特惠","ratio":1.1,"models":6,"ref":"#22"},{"name":"[低价][满血] Claude 原生","ratio":1.5,"models":6,"ref":"#61"},{"name":"[低价][满血] DeepSeek 1017","ratio":0.5,"models":2,"ref":"#38"},{"name":"[低价][满血] GPT Pro 2","ratio":0.26,"models":8,"ref":"#14"},{"name":"[低价][满血][自有] GLM 官方","ratio":0.25,"models":2,"ref":"#17"},{"name":"[低价][生图] 生图特惠","ratio":0.2,"models":14,"ref":"#9"},{"name":"[低价][Kiro] 高智企业 Claude","ratio":1,"models":6,"ref":"#42"},{"name":"[官key] GPT","ratio":0.9,"models":5,"ref":"#28"},{"name":"[满血] Argon 专用","ratio":1,"models":1,"ref":"#47"},{"name":"[满血] CC 不降智精选","ratio":1.8,"models":10,"ref":"#7"},{"name":"[满血] GPT 不降智精选","ratio":0.35,"models":8,"ref":"#2"},{"name":"[满血] GPT Pro 500 高速","ratio":0.5,"models":2,"ref":"#57"},{"name":"[满血] Kimi K3.1 Pro 专用","ratio":0.6,"models":1,"ref":"#48"},{"name":"[满血] Suno","ratio":1,"models":5,"ref":"#67"},{"name":"[满血][官Key] DeepSeek","ratio":0.8,"models":2,"ref":"#15"},{"name":"[满血][官Key] Gemini","ratio":2,"models":6,"ref":"#8"},{"name":"[生图] Gemini","ratio":1,"models":7,"ref":"#29"},{"name":"[生图] GPT Image","ratio":1,"models":2,"ref":"#4"},{"name":"[AIS] Gemini 向量模型","ratio":1,"models":3,"ref":"#34"}]
|
|
2
|
+
self.NEARTOKEN_GROUPS_AT = 1793780165230
|
package/page/icon.svg
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"
|
|
2
|
-
<!--
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="#a2acbb" stroke-width="1.35" stroke-linecap="round" stroke-linejoin="round">
|
|
2
|
+
<!-- 空心五角星:只描边,不填充 -->
|
|
3
3
|
<path d="M12 3 L14.12 9.09 L20.56 9.22 L15.42 13.11 L17.29 19.28 L12 15.6 L6.71 19.28 L8.58 13.11 L3.44 9.22 L9.88 9.09 Z"/>
|
|
4
4
|
</svg>
|
package/page/index.html
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
6
|
<title>NearToken</title>
|
|
7
7
|
<link rel="stylesheet" href="style.css">
|
|
8
|
+
<link rel="stylesheet" href="market.css">
|
|
8
9
|
</head>
|
|
9
10
|
<body>
|
|
10
11
|
<div class="wrap">
|
|
@@ -28,6 +29,7 @@
|
|
|
28
29
|
</div>
|
|
29
30
|
<script src="_magpie/bridge.js"></script>
|
|
30
31
|
<script src="version.js"></script>
|
|
32
|
+
<script src="pricing.js"></script>
|
|
31
33
|
<script src="app.js"></script>
|
|
32
34
|
</body>
|
|
33
35
|
</html>
|
package/page/latest.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
self.
|
|
1
|
+
self.NEARTOKEN_LATEST = "0.3.0"
|
|
2
|
+
self.NEARTOKEN_LATEST_AT = 1793779995515
|
package/page/market.css
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
|
|
2
|
+
/* ---------- 模型广场(一比一复刻 neartoken.cc/pricing) ---------- */
|
|
3
|
+
|
|
4
|
+
.market { display: block; }
|
|
5
|
+
|
|
6
|
+
.market-top {
|
|
7
|
+
display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
|
|
8
|
+
padding: 10px 12px; margin: 14px 0 10px;
|
|
9
|
+
border: 1px solid var(--nt-line); border-radius: 12px; background: rgba(255,255,255,.02);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.market-search {
|
|
13
|
+
flex: 1 1 220px; min-width: 160px; height: 30px; padding: 0 10px;
|
|
14
|
+
border: 1px solid var(--nt-line); border-radius: 9px;
|
|
15
|
+
background: rgba(0,0,0,.22); color: var(--nt-ink); font-size: 12px;
|
|
16
|
+
}
|
|
17
|
+
.market-search::placeholder { color: var(--nt-faint); }
|
|
18
|
+
.market-search:focus { outline: 1px solid var(--nt-accent); }
|
|
19
|
+
|
|
20
|
+
.market-tools { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
|
|
21
|
+
|
|
22
|
+
.market-seg { display: inline-flex; border: 1px solid var(--nt-line); border-radius: 9px; overflow: hidden; }
|
|
23
|
+
.market-seg button {
|
|
24
|
+
height: 28px; padding: 0 9px; border: 0; background: transparent;
|
|
25
|
+
color: var(--nt-muted); font-size: 11.5px;
|
|
26
|
+
}
|
|
27
|
+
.market-seg button + button { border-left: 1px solid var(--nt-line); }
|
|
28
|
+
.market-seg button[aria-pressed="true"] { color: var(--nt-ink); background: var(--nt-accent-soft); }
|
|
29
|
+
|
|
30
|
+
.market-tool {
|
|
31
|
+
height: 28px; padding: 0 10px; border: 1px solid var(--nt-line); border-radius: 9px;
|
|
32
|
+
background: transparent; color: var(--nt-muted); font-size: 11.5px;
|
|
33
|
+
}
|
|
34
|
+
.market-tool.on { color: var(--nt-ink); border-color: var(--nt-accent); }
|
|
35
|
+
|
|
36
|
+
.market-body { display: grid; grid-template-columns: 210px minmax(0, 1fr); gap: 14px; align-items: start; }
|
|
37
|
+
.market { width: 100%; }
|
|
38
|
+
.model-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 10px; }
|
|
39
|
+
|
|
40
|
+
.market-aside {
|
|
41
|
+
position: sticky; top: 10px; max-height: calc(100vh - 130px); overflow-y: auto;
|
|
42
|
+
padding: 12px; border: 1px solid var(--nt-line); border-radius: 12px;
|
|
43
|
+
background: rgba(255,255,255,.02);
|
|
44
|
+
}
|
|
45
|
+
.market-aside h3 { margin: 0; font-size: 13px; }
|
|
46
|
+
.market-aside h4 { margin: 14px 0 7px; font-size: 11px; color: var(--nt-muted); font-weight: 600; }
|
|
47
|
+
.market-aside .note { font-size: 10.5px; line-height: 1.5; margin: 6px 0 0; }
|
|
48
|
+
.ma-head { display: flex; align-items: baseline; justify-content: space-between; }
|
|
49
|
+
.ma-head .link { border: 0; background: transparent; padding: 0; }
|
|
50
|
+
|
|
51
|
+
.market-chips { display: flex; flex-wrap: wrap; gap: 5px; }
|
|
52
|
+
|
|
53
|
+
.market-chip-wrap { position: relative; display: inline-flex; align-items: center; }
|
|
54
|
+
.market-chip {
|
|
55
|
+
display: inline-flex; align-items: center; gap: 5px;
|
|
56
|
+
min-height: 25px; padding: 0 8px; border: 1px solid var(--nt-line); border-radius: 999px;
|
|
57
|
+
background: transparent; color: var(--nt-muted); font-size: 10.5px; white-space: nowrap;
|
|
58
|
+
}
|
|
59
|
+
.market-chip.on, .market-chip-wrap.on > .market-chip {
|
|
60
|
+
color: var(--nt-ink); border-color: var(--nt-accent); background: var(--nt-accent-soft);
|
|
61
|
+
}
|
|
62
|
+
.market-chip .ratio { font-family: var(--nt-code); color: var(--nt-faint); font-size: 10px; }
|
|
63
|
+
.market-chip .gb { display: inline-flex; align-items: center; gap: 3px; }
|
|
64
|
+
.gb-tag { padding: 1px 4px; border-radius: 4px; font-size: 9.5px; color: #fff; }
|
|
65
|
+
.gb-tag.green { background: #2f8f68; }
|
|
66
|
+
.gb-tag.red { background: #b0475c; }
|
|
67
|
+
.gb-tag.pink { background: #8b4f9e; }
|
|
68
|
+
.gb-tag.blue { background: #3f6fa8; }
|
|
69
|
+
.gb-tag.plain { background: #5a6270; }
|
|
70
|
+
.gb-rest { color: var(--nt-ink); }
|
|
71
|
+
|
|
72
|
+
.chip-toggle {
|
|
73
|
+
width: 16px; height: 24px; padding: 0; border: 0; background: transparent;
|
|
74
|
+
color: var(--nt-faint); font-size: 10px; line-height: 1;
|
|
75
|
+
}
|
|
76
|
+
.chip-toggle.on { color: #4cc38a; }
|
|
77
|
+
|
|
78
|
+
.market-main { min-width: 0; }
|
|
79
|
+
.market-count { font-size: 13px; font-weight: 600; margin: 2px 0 10px; }
|
|
80
|
+
.market-main > .note { margin-top: 10px; }
|
|
81
|
+
|
|
82
|
+
.model-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(238px, 1fr)); gap: 10px; }
|
|
83
|
+
.model-grid.as-list { grid-template-columns: 1fr; }
|
|
84
|
+
|
|
85
|
+
.mc {
|
|
86
|
+
display: flex; flex-direction: column; min-width: 0; cursor: pointer;
|
|
87
|
+
padding: 12px; border: 1px solid var(--nt-line); border-radius: 12px;
|
|
88
|
+
background: rgba(255,255,255,.02); transition: border-color .12s, background .12s, opacity .12s;
|
|
89
|
+
}
|
|
90
|
+
.mc:hover { border-color: var(--nt-accent); }
|
|
91
|
+
.mc.on { border-color: var(--nt-accent); background: var(--nt-accent-soft); }
|
|
92
|
+
.mc.off { opacity: .48; }
|
|
93
|
+
.mc.off:hover { opacity: .8; }
|
|
94
|
+
.mc-flag { flex: none; font-size: 9.5px; color: var(--nt-muted); white-space: nowrap; }
|
|
95
|
+
.mc.on .mc-flag { color: var(--nt-accent); font-weight: 600; }
|
|
96
|
+
|
|
97
|
+
/* 两级标签:功能在前(饱和色),价格/品质在后(柔和色) */
|
|
98
|
+
.gb-tag.lvl1 { font-weight: 700; box-shadow: 0 0 0 1px rgba(255,255,255,.12); }
|
|
99
|
+
.gb-tag.lvl2 { opacity: .82; }
|
|
100
|
+
.gb-tag.purple { background: #7b52b8; }
|
|
101
|
+
.gb-tag.teal { background: #2f8f8a; }
|
|
102
|
+
.chip-group { width: 100%; margin: 2px 0 4px; }
|
|
103
|
+
.chip-group-name { font-size: 10px; color: var(--nt-faint); margin: 6px 0 3px; letter-spacing: .04em; }
|
|
104
|
+
.mc-image { border-color: rgba(139,79,158,.5); }
|
|
105
|
+
.mc-video { border-color: rgba(214,140,60,.5); }
|
|
106
|
+
.mc-audio { border-color: rgba(63,111,168,.5); }
|
|
107
|
+
.mc-embedding { border-color: rgba(47,143,104,.5); }
|
|
108
|
+
|
|
109
|
+
.mc-head { display: flex; align-items: center; gap: 8px; }
|
|
110
|
+
.mc-vicon {
|
|
111
|
+
flex: none; width: 26px; height: 26px; border-radius: 8px;
|
|
112
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
113
|
+
background: var(--nt-accent-soft); color: var(--nt-accent); font-size: 12px; font-weight: 700;
|
|
114
|
+
}
|
|
115
|
+
.mc-name { font-size: 12.5px; font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
116
|
+
.mc-vendor { font-size: 10px; color: var(--nt-muted); }
|
|
117
|
+
.mc-copy { border: 0; background: transparent; color: var(--nt-faint); font-size: 13px; padding: 2px 4px; }
|
|
118
|
+
.mc-copy:hover { color: var(--nt-accent); }
|
|
119
|
+
|
|
120
|
+
.mc-desc {
|
|
121
|
+
margin: 9px 0 8px; font-size: 10.5px; line-height: 1.55; color: var(--nt-muted);
|
|
122
|
+
min-height: 32px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
|
|
123
|
+
}
|
|
124
|
+
.mc-billing { font-size: 10.5px; font-weight: 600; margin-bottom: 7px; }
|
|
125
|
+
.mc-billing.dyn { color: #e0a44a; }
|
|
126
|
+
.mc-billing.flat { color: #5aa9e6; }
|
|
127
|
+
|
|
128
|
+
.mc-prices { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 6px; margin-bottom: 9px; }
|
|
129
|
+
.mc-prices.one { grid-template-columns: 1fr; }
|
|
130
|
+
.mc-prices > div { display: flex; flex-direction: column; gap: 2px; }
|
|
131
|
+
.mc-prices span { font-size: 10px; color: var(--nt-muted); }
|
|
132
|
+
.mc-prices b { font-family: var(--nt-code); font-size: 11.5px; font-weight: 600; color: var(--nt-ink); }
|
|
133
|
+
|
|
134
|
+
.mc-line { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin: 5px 0; font-size: 10px; }
|
|
135
|
+
.mc-line .k, .mc-stats .k { color: var(--nt-muted); margin-right: 4px; }
|
|
136
|
+
.mc-line .v, .mc-stats .v { color: var(--nt-ink); font-family: var(--nt-code); font-size: 10px; }
|
|
137
|
+
.mc-more { color: var(--nt-faint); font-family: var(--nt-code); }
|
|
138
|
+
|
|
139
|
+
.mc-stats {
|
|
140
|
+
display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
|
|
141
|
+
margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--nt-line); font-size: 10px;
|
|
142
|
+
}
|
|
143
|
+
.mc-stats > span { display: inline-flex; align-items: baseline; gap: 3px; }
|
|
144
|
+
.mc-bar { display: inline-flex; gap: 1px; height: 8px; align-items: center; }
|
|
145
|
+
.mc-bar i { width: 2px; height: 8px; background: var(--nt-line); border-radius: 1px; }
|
|
146
|
+
.mc-bar i.ok { background: #3fbf85; }
|
|
147
|
+
.mc-bar i.bad { background: #d08a3c; }
|
|
148
|
+
.mc-foot { margin-top: 8px; text-align: right; }
|
|
149
|
+
|
|
150
|
+
@media (max-width: 900px) {
|
|
151
|
+
.market-body { grid-template-columns: 1fr; }
|
|
152
|
+
.market-aside { position: static; max-height: none; }
|
|
153
|
+
.logs-body { grid-template-columns: 1fr; }
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/* 使用日志:两栏铺满 */
|
|
157
|
+
.logs { width: 100%; }
|
|
158
|
+
.logs-head > .row { padding: 12px 14px; border: 1px solid var(--nt-line); border-radius: 12px; margin-bottom: 12px; }
|
|
159
|
+
.logs-body { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr); gap: 12px; align-items: start; }
|
|
160
|
+
.logs-body > .card { margin: 0; }
|
|
161
|
+
.log-dist h3 { font-size: 12px; margin: 0 0 12px; }
|
|
162
|
+
.dist-row { display: grid; grid-template-columns: 110px minmax(0, 1fr) 92px; gap: 8px; align-items: center; margin: 8px 0; font-size: 10.5px; }
|
|
163
|
+
.dist-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--nt-muted); }
|
|
164
|
+
.dist-track { height: 8px; background: rgba(255,255,255,.05); border-radius: 5px; overflow: hidden; }
|
|
165
|
+
.dist-track i { display: block; height: 100%; border-radius: 5px; }
|
|
166
|
+
.dist-val { text-align: right; font-family: var(--nt-code); color: var(--nt-muted); font-variant-numeric: tabular-nums; }
|
package/page/pricing.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// 由插件运行时从 /api/pricing 写入
|
|
2
|
+
self.NEARTOKEN_PRICING = {"at":1793780165229,"source":"https://neartoken.cc/api/pricing","version":"a42d372ccf0b5dd13ecf71203521f9d2","models":[{"name":"omni","description":"统一视频生成模型,可根据模式、时长和分辨率自动选择合适的处理路径。","tags":"video,unified","vendor_id":3,"enable_groups":["[低价] 视频分组"],"supported_endpoint_types":["openai-video"],"model_ratio":0,"model_price":0.066666666667,"completion_ratio":0,"quota_type":1,"billing_mode":"tiered_expr","billing_expr":"tier(\"base\", u(\"seconds\") * 0.066666666667)"},{"name":"gemini-3.6-flash-c","description":"【按次计费】","vendor_id":3,"enable_groups":["[低价][反重力] Gemini"],"supported_endpoint_types":["gemini","openai"],"model_ratio":0,"model_price":0.096,"completion_ratio":0,"quota_type":1,"context_window":1000000,"max_tokens":64000,"input_modalities":["text"]},{"name":"gpt-6-luna","vendor_id":1,"enable_groups":["[低价][备用] GPT Pro","[低价][满血] GPT Pro 2","[满血] GPT 不降智精选","[低价] GPT 福利","[官key] GPT"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":37.5,"model_price":0,"completion_ratio":2,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"(len <= 272000 ? tier(\"0_272k\", p * 0.1 + cr * 0.01 + cc * 0.125 + c * 0.5) : tier(\"272k_plus\", p * 0.2 + cr * 0.02 + cc * 0.25 + c * 0.75)) * (param(\"service_tier\") == \"fast\" ? 2 : 1) * (param(\"service_tier\") == \"ultrafast\" ? 8 : 1)","context_window":272000,"max_tokens":128000,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"],"description":"GPT-6 Luna 是 GPT-6 家族中最轻量的一员:快速、经济,适合规模化。","status":98.82,"latency":"26.77s","throughput":"54.9t/s"},{"name":"sd2.0","description":"sd2.0 标准档视频生成。seedance 分组按秒计费:480p ¥0.8/秒、720p ¥1/秒;其余分辨率暂未开放。通过 resolution 选择分辨率,费用=对应每秒单价×duration 秒;默认 480p、5 秒,n=1。不支持的档位返回参数错误,不自动降级。支持文本生成,参考素材用 images/videos/audios 数组传入;可通过 /v1/images/upload 上传素材(单文件≤20 MiB)。POST /v1/videos 或 /v1/video/generations,GET 同路径/{task_id} 查询。","tags":"video,per-second","vendor_id":11,"enable_groups":["[低价] Seedance"],"supported_endpoint_types":["openai-video"],"model_ratio":0,"model_price":0.55,"completion_ratio":0,"quota_type":1,"billing_mode":"tiered_expr","billing_expr":"u(\"resolution\") == \"480P\" && u(\"size\") == \"720x1280\" ? tier(\"480P·720x1280\", u(\"seconds\") * 0.8) : u(\"resolution\") == \"480P\" && u(\"size\") == \"1280x720\" ? tier(\"480P·1280x720\", u(\"seconds\") * 0.8) : u(\"resolution\") == \"480P\" && u(\"size\") == \"1792x1024\" ? tier(\"480P·1792x1024\", u(\"seconds\") * 0.8) : u(\"resolution\") == \"480P\" && u(\"size\") == \"1024x1792\" ? tier(\"480P·1024x1792\", u(\"seconds\") * 0.8) : u(\"resolution\") == \"720P\" && u(\"size\") == \"720x1280\" ? tier(\"720P·720x1280\", u(\"seconds\") * 1) : u(\"resolution\") == \"720P\" && u(\"size\") == \"1280x720\" ? tier(\"720P·1280x720\", u(\"seconds\") * 1) : u(\"resolution\") == \"720P\" && u(\"size\") == \"1792x1024\" ? tier(\"720P·1792x1024\", u(\"seconds\") * 1) : u(\"resolution\") == \"720P\" && u(\"size\") == \"1024x1792\" ? tier(\"720P·1024x1792\", u(\"seconds\") * 1) : u(\"resolution\") == \"768P\" && u(\"size\") == \"720x1280\" ? tier(\"768P·720x1280\", u(\"seconds\") * 999) : u(\"resolution\") == \"768P\" && u(\"size\") == \"1280x720\" ? tier(\"768P·1280x720\", u(\"seconds\") * 999) : u(\"resolution\") == \"768P\" && u(\"size\") == \"1792x1024\" ? tier(\"768P·1792x1024\", u(\"seconds\") * 999) : u(\"resolution\") == \"768P\" && u(\"size\") == \"1024x1792\" ? tier(\"768P·1024x1792\", u(\"seconds\") * 999) : u(\"resolution\") == \"1080P\" && u(\"size\") == \"720x1280\" ? tier(\"1080P·720x1280\", u(\"seconds\") * 999) : u(\"resolution\") == \"1080P\" && u(\"size\") == \"1280x720\" ? tier(\"1080P·1280x720\", u(\"seconds\") * 999) : u(\"resolution\") == \"1080P\" && u(\"size\") == \"1792x1024\" ? tier(\"1080P·1792x1024\", u(\"seconds\") * 999) : u(\"resolution\") == \"1080P\" && u(\"size\") == \"1024x1792\" ? tier(\"1080P·1024x1792\", u(\"seconds\") * 999) : u(\"resolution\") == \"2K\" && u(\"size\") == \"720x1280\" ? tier(\"2K·720x1280\", u(\"seconds\") * 999) : u(\"resolution\") == \"2K\" && u(\"size\") == \"1280x720\" ? tier(\"2K·1280x720\", u(\"seconds\") * 999) : u(\"resolution\") == \"2K\" && u(\"size\") == \"1792x1024\" ? tier(\"2K·1792x1024\", u(\"seconds\") * 999) : tier(\"2K·1024x1792\", u(\"seconds\") * 999)"},{"name":"kimi-k3.1-pro","description":"Kimi K3.1 Pro 是 Moonshot 对标 Opus 5.5 的强大模型","icon":"Kimi","vendor_id":7,"enable_groups":["[低价] 灵车 K3.1 Pro 专用","[满血] Kimi K3.1 Pro 专用"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":37.5,"model_price":0,"completion_ratio":1,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"base\", p * 13 + c * 68 + cr * 1.3 + cc * 13 + cc1h * 26)","context_window":1000000,"max_tokens":65535,"input_modalities":["text","image"],"reasoning_levels":["low","high","max"]},{"name":"gemini-3.1-flash-lite","vendor_id":3,"enable_groups":["[低价][反重力] Gemini"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":37.5,"model_price":0,"completion_ratio":4,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 0.25 + cr * 0.025 + ai * 0.5 + c * 1.5)","context_window":1048576,"max_tokens":65536,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"suno_stems_by_url","enable_groups":["[满血] Suno"],"supported_endpoint_types":["openai"],"model_ratio":0,"model_price":1.5435,"completion_ratio":0,"quota_type":1},{"name":"gemini-3.8-flash-low","vendor_id":3,"enable_groups":["[低价][反重力] Gemini"],"supported_endpoint_types":["gemini","openai"],"model_ratio":0.75,"model_price":0,"completion_ratio":5,"cache_ratio":0.1,"quota_type":0,"context_window":1000000,"max_tokens":64000,"input_modalities":["text"]},{"name":"claude-fable-5-1","vendor_id":2,"enable_groups":["[低价][满血] Claude 特惠","[低价][满血] Claude 原生","[满血] CC 不降智精选","[低价][Kiro] 高智企业 Claude"],"supported_endpoint_types":["anthropic","openai"],"model_ratio":5,"model_price":0,"completion_ratio":5,"cache_ratio":0.025,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 10 + cr * 0.25 + cc * 12.5 + cc1h * 20 + c * 50)","context_window":1000000,"max_tokens":128000,"input_modalities":["text","image"],"reasoning_levels":["xhigh","max"],"description":"Anthropic 旗舰 Claude 模型,1M Token 上下文,面向最艰难的长时间编码与知识工作。"},{"name":"gemini-3.8-flash","vendor_id":3,"enable_groups":["[满血][官Key] Gemini","[低价][反重力] Gemini"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":0.75,"model_price":0,"completion_ratio":5,"cache_ratio":0.1,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 0.75 + cr * 0.075 + ai * 0.75 + c * 3.75)","context_window":1000000,"max_tokens":64000,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"codex-auto-review","vendor_id":1,"enable_groups":["[低价][备用] GPT Pro","[低价][满血] GPT Pro 2","[满血] GPT 不降智精选"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":1.25,"model_price":0,"completion_ratio":6,"cache_ratio":0.2,"create_cache_ratio":0.2,"quota_type":0,"context_window":1050000,"input_modalities":["text"]},{"name":"gemini-3-flash","vendor_id":3,"enable_groups":["[低价][反重力] Gemini"],"supported_endpoint_types":["gemini","openai"],"model_ratio":0.25,"model_price":0,"completion_ratio":6,"cache_ratio":0.1,"quota_type":0,"context_window":1048576,"max_tokens":65536,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"gemini-3.7-flash-c","description":"【按次计费】","vendor_id":3,"enable_groups":["[低价][反重力] Gemini"],"supported_endpoint_types":["gemini","openai"],"model_ratio":0,"model_price":0.096,"completion_ratio":0,"quota_type":1,"context_window":1000000,"max_tokens":64000,"input_modalities":["text"]},{"name":"flux-2-pro","description":"FLUX 2 Pro 图像生成模型,按生成图片张数计费。","icon":"Flux","vendor_id":15,"enable_groups":["[低价][生图] 生图特惠"],"supported_endpoint_types":["image-generation","openai","openai-response"],"model_ratio":37.5,"model_price":0,"completion_ratio":1,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"image\", fixed(0.1)) * image_count"},{"name":"sd2.5","description":"sd2.5 标准档视频生成。seedance 分组按秒计费:720p ¥1.2/秒;其他分辨率档位暂未开放。通过 resolution 选择分辨率,费用=对应每秒单价×duration 秒;默认 720p、5 秒,n=1。不支持的档位返回参数错误,不自动降级。支持文本生成,参考素材用 images/videos/audios 数组传入;可通过 /v1/images/upload 上传素材(单文件≤20 MiB)。POST /v1/videos 或 /v1/video/generations,GET 同路径/{task_id} 查询。","tags":"video,per-second","vendor_id":11,"enable_groups":["[低价] Seedance"],"supported_endpoint_types":["openai-video"],"model_ratio":0,"model_price":0.65,"completion_ratio":0,"quota_type":1,"billing_mode":"tiered_expr","billing_expr":"tier(\"base\", u(\"seconds\") * 1.2)"},{"name":"claude-sonnet-5","vendor_id":2,"enable_groups":["[低价][满血] Claude 原生","[满血] CC 不降智精选","[低价][Kiro] 高智企业 Claude","[低价][满血] Claude 特惠"],"supported_endpoint_types":["anthropic","openai"],"model_ratio":1,"model_price":0,"completion_ratio":5,"cache_ratio":0.1,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 2 + cr * 0.2 + cc * 2.5 + cc1h * 4 + c * 10)","context_window":1000000,"max_tokens":128000,"input_modalities":["text","image"],"reasoning_levels":["xhigh","max"],"description":"Claude 的均衡档位,适合边界清晰的日常工作:开发功能、修 bug、产出精修内容。"},{"name":"grok-4.5量","vendor_id":5,"enable_groups":["[低价] Grok"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":1,"model_price":0,"completion_ratio":3,"cache_ratio":0.25,"create_cache_ratio":1,"quota_type":0,"context_window":500000,"max_tokens":128000,"input_modalities":["text"]},{"name":"minimax-h3","description":"H3 视频生成,视频分组。resolution=720p:¥0.07/秒,费用为单价×duration;resolution=2K:¥2.50/条,4~15 秒同价。未传 resolution 默认 2K,未传 duration 默认 4 秒;专属价格以账户实际价格为准。支持 16:9、9:16,n=1;images 最多9张,audios最多3段且需同时传图片,不支持参考视频。使用 JSON 提交 POST /v1/videos 或 /v1/video/generations,GET 同路径/{task_id} 查询。非法分辨率返回参数错误,不自动降级。","tags":"video,text-to-video,image-to-video,resolution-billing","icon":"Minimax","vendor_id":9,"enable_groups":["[低价] 视频分组"],"supported_endpoint_types":["openai-video"],"model_ratio":0,"model_price":1.6666666666666667,"completion_ratio":0,"quota_type":1,"billing_mode":"tiered_expr","billing_expr":"u(\"resolution\") == \"768P\" ? tier(\"768P\", u(\"seconds\") * 0.046666666667) : tier(\"2K\", 1.666666666667)"},{"name":"suno_sound","enable_groups":["[满血] Suno"],"supported_endpoint_types":["openai"],"model_ratio":0,"model_price":0.308,"completion_ratio":0,"quota_type":1},{"name":"nano-banana-2","description":"Nano Banana 2 图像生成模型,按生成图片张数计费。","icon":"Gemini.Color","vendor_id":3,"enable_groups":["[低价][生图] 生图特惠","[生图] Gemini"],"supported_endpoint_types":["image-generation","openai","openai-response","gemini"],"model_ratio":0,"model_price":0.1,"completion_ratio":0,"quota_type":1,"billing_mode":"tiered_expr","billing_expr":"tier(\"image\", fixed(0.1)) * image_count"},{"name":"gpt-6-sol","vendor_id":1,"enable_groups":["[低价] GPT 福利","[满血] GPT 不降智精选","[官key] GPT","[低价][备用] GPT Pro","[低价][满血] GPT Pro 2"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":37.5,"model_price":0,"completion_ratio":2,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"(len <= 272000 ? tier(\"0_272k\", p * 2 + cr * 0.2 + cc * 2.5 + c * 10) : tier(\"272k_plus\", p * 4 + cr * 0.4 + cc * 5 + c * 15)) * (param(\"service_tier\") == \"fast\" ? 2 : 1) * (param(\"service_tier\") == \"ultrafast\" ? 8 : 1)","context_window":272000,"max_tokens":128000,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"],"description":"GPT-6 Sol 把 Astra 的能力带到更快、更便宜的模型上,适合规模化使用。"},{"name":"claude-opus-5-5","vendor_id":2,"enable_groups":["[低价][满血] Claude 原生","[满血] CC 不降智精选","[低价][Kiro] 高智企业 Claude","[低价][满血] Claude 特惠"],"supported_endpoint_types":["anthropic","openai"],"model_ratio":2,"model_price":0,"completion_ratio":5,"cache_ratio":0.05,"create_cache_ratio":1.25,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 4 + cr * 0.2 + cc * 5 + cc1h * 8 + c * 20)","context_window":1000000,"max_tokens":128000,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"],"description":"旗舰级表现的 Claude,价格更低,面向智能体工程与长时间编码会话。","status":97.63,"latency":"26.47s","throughput":"72.9t/s"},{"name":"grok-4.6-low","vendor_id":5,"enable_groups":["[低价] Grok"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":1,"model_price":0,"completion_ratio":3,"cache_ratio":0.25,"quota_type":0,"context_window":500000,"max_tokens":128000,"input_modalities":["text"]},{"name":"gpt-image-2.5-sunburst","description":"GPT Image 2.5 Sunburst 图像生成模型,按生成图片张数计费。","icon":"OpenAI","vendor_id":1,"enable_groups":["[生图] GPT Image","[低价][促销] GPT Image"],"supported_endpoint_types":["image-generation","openai","openai-response"],"model_ratio":0,"model_price":0.15,"completion_ratio":0,"quota_type":1,"billing_mode":"tiered_expr","billing_expr":"tier(\"image\", fixed(0.15)) * image_count"},{"name":"claude-opus-4-7","vendor_id":2,"enable_groups":["[满血] CC 不降智精选"],"supported_endpoint_types":["anthropic","openai"],"model_ratio":2.5,"model_price":0,"completion_ratio":5,"cache_ratio":0.1,"create_cache_ratio":1.25,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 5 + cr * 0.5 + cc * 6.25 + cc1h * 10 + c * 25)","context_window":1000000,"max_tokens":128000,"input_modalities":["text","image"],"reasoning_levels":["xhigh","max"]},{"name":"z-image-turbo","description":"Z-Image Turbo 高速图像生成模型,按生成图片张数计费。","icon":"Qwen.Color","vendor_id":8,"enable_groups":["[低价][生图] 生图特惠"],"supported_endpoint_types":["image-generation","openai","openai-response"],"model_ratio":37.5,"model_price":0,"completion_ratio":1,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"base\", u(\"image_count\") * 0.2)"},{"name":"gemini-3.1-flash-tts-preview","vendor_id":3,"enable_groups":["[低价] 语音合成 TTS"],"supported_endpoint_types":["gemini","openai"],"model_ratio":0.5,"model_price":0,"completion_ratio":20,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 1 + c * 20)"},{"name":"gemini-3.5-flash","vendor_id":3,"enable_groups":["[满血][官Key] Gemini","[低价][反重力] Gemini"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":0.75,"model_price":0,"completion_ratio":6,"cache_ratio":0.1,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 1.5 + cr * 0.15 + ai * 1.5 + c * 9)","context_window":200000,"max_tokens":64000,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"grok-4.5-fast","vendor_id":5,"enable_groups":["[低价] Grok"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":1,"model_price":0,"completion_ratio":3,"cache_ratio":0.25,"create_cache_ratio":1,"quota_type":0,"context_window":500000,"max_tokens":128000,"input_modalities":["text"]},{"name":"gemini-3-pro-image","description":"Gemini 3 Pro Image 图像生成模型,按 token 计费。","icon":"Gemini.Color","vendor_id":3,"enable_groups":["[生图] Gemini"],"supported_endpoint_types":["gemini","openai","image-generation"],"model_ratio":0,"model_price":0.07,"completion_ratio":0,"quota_type":1,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 2 + c * 120)"},{"name":"gemini-3.1-flash-image","description":"Gemini 3.1 Flash Image 图像生成模型,按 token 计费。","icon":"Gemini.Color","vendor_id":3,"enable_groups":["[生图] Gemini"],"supported_endpoint_types":["gemini","openai","image-generation"],"model_ratio":0,"model_price":0.07,"completion_ratio":0,"quota_type":1,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 0.5 + c * 60)"},{"name":"gemini-3.1-flash-lite-image","description":"Gemini 3.1 Flash Lite Image 图像生成模型,按 token 计费。","icon":"Gemini.Color","vendor_id":3,"enable_groups":["[生图] Gemini"],"supported_endpoint_types":["gemini","openai","image-generation"],"model_ratio":0,"model_price":0.07,"completion_ratio":0,"quota_type":1,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 0.25 + c * 30)"},{"name":"gpt-5.6-terra","vendor_id":1,"enable_groups":["[低价][备用] GPT Pro","[低价][满血] GPT Pro 2","[低价] GPT 福利","[满血] GPT 不降智精选"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":37.5,"model_price":0,"completion_ratio":8,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"(len <= 272000 ? tier(\"0_272k\", p * 2 + cr * 0.2 + cc * 2.5 + c * 12) : tier(\"272k_plus\", p * 4 + cr * 0.4 + cc * 5 + c * 18)) * (param(\"service_tier\") == \"fast\" ? 2 : 1) * (param(\"service_tier\") == \"ultrafast\" ? 8 : 1)","context_window":272000,"max_tokens":128000,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"gemini-embedding-2","vendor_id":3,"enable_groups":["[AIS] Gemini 向量模型"],"supported_endpoint_types":["gemini","openai"],"model_ratio":0.1,"model_price":0,"completion_ratio":4,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 0.2 + ai * 6.5 + c * 0)"},{"name":"gemini-3.5-flash-lite","vendor_id":3,"enable_groups":["[低价][反重力] Gemini"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":37.5,"model_price":0,"completion_ratio":4,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 0.3 + cr * 0.03 + c * 2.5)","context_window":1048576,"max_tokens":65536,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"grok-4.7","vendor_id":5,"enable_groups":["[低价] Grok"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":1,"model_price":0,"completion_ratio":3,"cache_ratio":0.25,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"len <= 200000 ? tier(\"0_200k\", p * 2 + cr * 0.5 + c * 6) : tier(\"200k_plus\", p * 4 + cr * 1 + c * 12)","context_window":500000,"max_tokens":128000,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"gpt-6.1-terra","vendor_id":1,"enable_groups":["[满血] GPT 不降智精选","[低价][备用] GPT Pro","[低价][满血] GPT Pro 2"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":0.5,"model_price":0,"completion_ratio":5,"cache_ratio":0.05,"create_cache_ratio":1.25,"quota_type":0,"context_window":922000,"max_tokens":128000,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"],"description":"暂无描述。","status":76.12,"latency":"14.22s","throughput":"98.3t/s"},{"name":"glm-5.3","vendor_id":6,"enable_groups":["[低价][满血][自有] GLM 官方","[低价][满血] 国模"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":4,"model_price":0,"completion_ratio":3.5,"cache_ratio":0.25,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 8 + cr * 2 + cc * 0 + c * 28)","context_window":1000000,"max_tokens":131072,"input_modalities":["text"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"],"description":"GLM-5.3,Z.ai 的智能体编码旗舰,1M 上下文并支持结构化工具调用。","status":100,"latency":"2.97s","throughput":"52.6t/s"},{"name":"suno_lyrics","enable_groups":["[满血] Suno"],"supported_endpoint_types":["openai"],"model_ratio":0,"model_price":0.175,"completion_ratio":0,"quota_type":1},{"name":"gemini-3.1-pro","vendor_id":3,"enable_groups":["[低价][反重力] Gemini"],"supported_endpoint_types":["gemini","openai"],"model_ratio":1,"model_price":0,"completion_ratio":6,"cache_ratio":0.1,"quota_type":0,"context_window":1048576,"max_tokens":65536,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"gemini-3.8-flash-tts","vendor_id":3,"enable_groups":["[低价] 语音合成 TTS"],"supported_endpoint_types":["gemini","openai"],"model_ratio":0,"model_price":0.08,"completion_ratio":0,"quota_type":1},{"name":"gpt-5.6-sol","vendor_id":1,"enable_groups":["[低价] GPT 福利","[满血] GPT 不降智精选","[官key] GPT","[低价][备用] GPT Pro","[低价][满血] GPT Pro 2"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":37.5,"model_price":0,"completion_ratio":8,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"(len <= 272000 ? tier(\"0_272k\", p * 4 + cr * 0.4 + cc * 5 + c * 20) : tier(\"272k_plus\", p * 8 + cr * 0.8 + cc * 10 + c * 30)) * (param(\"service_tier\") == \"fast\" ? 2 : 1) * (param(\"service_tier\") == \"ultrafast\" ? 8 : 1)","context_window":272000,"max_tokens":128000,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"hy3","vendor_id":10,"enable_groups":["[低价] 神秘折扣模型"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":0.5,"model_price":0,"completion_ratio":4,"cache_ratio":0.25,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 0 + cr * 0 + cc * 0 + c * 0)","context_window":256000,"max_tokens":128000,"input_modalities":["text"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"nano-banana-2.1","description":"Nano Banana 2.1 图像生成模型,按生成图片张数计费。","icon":"Gemini.Color","vendor_id":3,"enable_groups":["[生图] Gemini"],"supported_endpoint_types":["image-generation","gemini","openai"],"model_ratio":0,"model_price":0.12,"completion_ratio":0,"quota_type":1,"billing_mode":"tiered_expr","billing_expr":"tier(\"image\", fixed(0.12)) * image_count"},{"name":"minimax-m3","vendor_id":9,"enable_groups":["[低价][满血] 国模"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":1.09,"model_price":0,"completion_ratio":4,"cache_ratio":0.2,"create_cache_ratio":1,"quota_type":0,"context_window":512000,"max_tokens":128000,"input_modalities":["text","image"]},{"name":"claude-sonnet-4-6","vendor_id":2,"enable_groups":["[满血] CC 不降智精选"],"supported_endpoint_types":["anthropic","openai"],"model_ratio":1.5,"model_price":0,"completion_ratio":5,"cache_ratio":0.1,"create_cache_ratio":1.25,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 3 + cr * 0.3 + cc * 3.75 + cc1h * 6 + c * 15)","context_window":1000000,"max_tokens":64000,"input_modalities":["text","image"],"reasoning_levels":["max"]},{"name":"gemini-2.5-pro","vendor_id":3,"enable_groups":["[低价][反重力] Gemini"],"supported_endpoint_types":["gemini","openai"],"model_ratio":0.625,"model_price":0,"completion_ratio":8,"cache_ratio":0.1,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"len <= 200000 ? tier(\"0_200k\", p * 1.25 + cr * 0.125 + c * 10) : tier(\"200k_plus\", p * 2.5 + cr * 0.25 + c * 15)","context_window":1048576,"max_tokens":65536,"input_modalities":["text","image"]},{"name":"gemini-3.8-flash-high","vendor_id":3,"enable_groups":["[低价][反重力] Gemini"],"supported_endpoint_types":["gemini","openai"],"model_ratio":0.75,"model_price":0,"completion_ratio":5,"cache_ratio":0.1,"quota_type":0,"context_window":1000000,"max_tokens":64000,"input_modalities":["text"]},{"name":"claude-sonnet-4.6","vendor_id":2,"enable_groups":["[低价][Kiro] 高智企业 Claude","[低价][满血] Claude 特惠"],"supported_endpoint_types":["anthropic","openai"],"model_ratio":1.5,"model_price":0,"completion_ratio":5,"cache_ratio":0.1,"create_cache_ratio":1.25,"quota_type":0,"context_window":1000000,"input_modalities":["text","image"],"reasoning_levels":["minimal","max"]},{"name":"gemini-2.5-flash-preview-tts","vendor_id":3,"enable_groups":["[低价] 语音合成 TTS"],"supported_endpoint_types":["gemini","openai"],"model_ratio":0.25,"model_price":0,"completion_ratio":20,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 0.5 + c * 10)"},{"name":"seedream-5.0-lite","description":"Seedream 5.0 Lite 图像生成模型,按生成图片张数计费。","icon":"ByteDance","vendor_id":14,"enable_groups":["[低价][生图] 生图特惠"],"supported_endpoint_types":["image-generation","openai","openai-response"],"model_ratio":0,"model_price":1,"completion_ratio":0,"quota_type":1,"billing_mode":"tiered_expr","billing_expr":"tier(\"image\", fixed(1)) * image_count"},{"name":"qwen-image","description":"Qwen Image 图像生成模型,按生成图片张数计费。","icon":"Qwen.Color","vendor_id":8,"enable_groups":["[低价][生图] 生图特惠"],"supported_endpoint_types":["image-generation","openai","openai-response"],"model_ratio":37.5,"model_price":0,"completion_ratio":1,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"base\", u(\"image_count\") * 0.25)"},{"name":"nano-banana-pro","description":"Nano Banana Pro 图像生成模型,按生成图片张数计费。","icon":"Gemini.Color","vendor_id":3,"enable_groups":["[低价][生图] 生图特惠","[生图] Gemini"],"supported_endpoint_types":["image-generation","openai","openai-response","gemini"],"model_ratio":0,"model_price":0.05,"completion_ratio":0,"quota_type":1,"billing_mode":"tiered_expr","billing_expr":"tier(\"image\", fixed(0.05)) * image_count"},{"name":"z-image","description":"Z-Image 图像生成模型,按生成图片张数计费。","icon":"Qwen.Color","vendor_id":8,"enable_groups":["[低价][生图] 生图特惠"],"supported_endpoint_types":["image-generation","openai","openai-response"],"model_ratio":37.5,"model_price":0,"completion_ratio":1,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"image\", fixed(0.3)) * image_count"},{"name":"glm-5.2","vendor_id":6,"enable_groups":["[低价] 神秘折扣模型","[低价][满血] 国模"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":4,"model_price":0,"completion_ratio":3.5,"cache_ratio":0.25,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 1.4 + cr * 0.26 + cc * 0 + c * 4.4)","context_window":1000000,"max_tokens":131072,"input_modalities":["text"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"gemini-3.5-transcribe","vendor_id":3,"enable_groups":["[低价] 语音转文字 ASR"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":0,"model_price":0.005,"completion_ratio":0,"quota_type":1},{"name":"gemini-3.8-flash-lite-tts","vendor_id":3,"enable_groups":["[低价] 语音合成 TTS"],"supported_endpoint_types":["gemini","openai"],"model_ratio":0,"model_price":0.08,"completion_ratio":0,"quota_type":1},{"name":"claude-haiku-4.5","vendor_id":2,"enable_groups":["[低价][Kiro] 高智企业 Claude","[低价][满血] Claude 特惠"],"supported_endpoint_types":["anthropic","openai"],"model_ratio":0.5,"model_price":0,"completion_ratio":5,"cache_ratio":0.1,"create_cache_ratio":1.25,"quota_type":0,"context_window":200000,"input_modalities":["text","image"],"reasoning_levels":["low","medium","high","max"]},{"name":"gemini-3.1-flash-lite-preview","vendor_id":3,"enable_groups":["[低价][反重力] Gemini"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":37.5,"model_price":0,"completion_ratio":4,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 0.25 + cr * 0.025 + ai * 0.5 + c * 1.5)","context_window":1048576,"max_tokens":65536,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"grok-4.5-low","vendor_id":5,"enable_groups":["[低价] Grok"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":1,"model_price":0,"completion_ratio":3,"cache_ratio":0.25,"quota_type":0,"context_window":500000,"max_tokens":128000,"input_modalities":["text"]},{"name":"grok-4.6","vendor_id":5,"enable_groups":["[低价] Grok"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":1,"model_price":0,"completion_ratio":3,"cache_ratio":0.25,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"len <= 200000 ? tier(\"0_200k\", p * 2 + cr * 0.5 + c * 6) : tier(\"200k_plus\", p * 4 + cr * 1 + c * 12)","context_window":500000,"max_tokens":128000,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"claude-opus-4-8","vendor_id":2,"enable_groups":["[满血] CC 不降智精选"],"supported_endpoint_types":["anthropic","openai"],"model_ratio":2.5,"model_price":0,"completion_ratio":5,"cache_ratio":0.1,"create_cache_ratio":1.25,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 5 + cr * 0.5 + cc * 6.25 + cc1h * 10 + c * 25)","context_window":1000000,"max_tokens":128000,"input_modalities":["text","image"],"reasoning_levels":["xhigh","max"]},{"name":"suno_music","enable_groups":["[满血] Suno"],"supported_endpoint_types":["openai"],"model_ratio":0,"model_price":1.5435,"completion_ratio":0,"quota_type":1},{"name":"gemini-3.8-flash-c","description":"【按次计费】","vendor_id":3,"enable_groups":["[低价][反重力] Gemini"],"supported_endpoint_types":["gemini","openai"],"model_ratio":0,"model_price":0.096,"completion_ratio":0,"quota_type":1,"context_window":1000000,"max_tokens":64000,"input_modalities":["text"]},{"name":"ideogram-v3","description":"Ideogram V3 图像生成模型,按生成图片张数计费。","icon":"Ideogram","vendor_id":17,"enable_groups":["[低价][生图] 生图特惠"],"supported_endpoint_types":["image-generation","openai","openai-response"],"model_ratio":37.5,"model_price":0,"completion_ratio":1,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"image\", fixed(0.1)) * image_count"},{"name":"gpt-image-2.5-flare","description":"GPT Image 2.5 Flare 图像生成模型,按生成图片张数计费。","icon":"OpenAI","vendor_id":1,"enable_groups":["[低价][生图] 生图特惠","[低价][促销] GPT Image","[生图] GPT Image"],"supported_endpoint_types":["image-generation","openai","openai-response"],"model_ratio":0,"model_price":0.12,"completion_ratio":0,"quota_type":1,"billing_mode":"tiered_expr","billing_expr":"tier(\"image\", fixed(0.2)) * image_count"},{"name":"gemini-4-argon","vendor_id":3,"enable_groups":["[满血][官Key] Gemini","[满血] Argon 专用"],"supported_endpoint_types":["gemini","openai"],"model_ratio":1,"model_price":0,"completion_ratio":5,"cache_ratio":0.05,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 2 + cr * 0.1 + ai * 2 + c * 10)","context_window":1048576,"max_tokens":65536,"input_modalities":["text","image"],"reasoning_levels":["low","medium","high"]},{"name":"gemini-2.5-pro-preview-tts","vendor_id":3,"enable_groups":["[低价] 语音合成 TTS"],"supported_endpoint_types":["gemini","openai"],"model_ratio":0.5,"model_price":0,"completion_ratio":20,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 1 + c * 20)"},{"name":"mimo-v2.6-flash","vendor_id":12,"enable_groups":["[低价] 神秘折扣模型"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":0.5,"model_price":0,"completion_ratio":2,"cache_ratio":0.02,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 0.14 + cr * 0.0028 + c * 0.28)","context_window":1048576,"max_tokens":131072,"input_modalities":["text","image"]},{"name":"qwen3.8-27b","vendor_id":8,"enable_groups":["[低价] 神秘折扣模型"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":1.5,"model_price":0,"completion_ratio":4,"cache_ratio":0.2,"quota_type":0,"context_window":1000000,"max_tokens":131072,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"claude-opus-5","vendor_id":2,"enable_groups":["[低价][满血] Claude 原生","[满血] CC 不降智精选","[低价][Kiro] 高智企业 Claude","[低价][满血] Claude 特惠"],"supported_endpoint_types":["anthropic","openai"],"model_ratio":2.5,"model_price":0,"completion_ratio":5,"cache_ratio":0.1,"create_cache_ratio":1.25,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 5 + cr * 0.5 + cc * 6.25 + cc1h * 10 + c * 25)","context_window":1000000,"max_tokens":64000,"input_modalities":["text","image"],"reasoning_levels":["minimal","xhigh","max"],"description":"Claude Opus 5 旗舰,effort 参数可在思考深度与延迟、成本之间取舍。","status":0,"latency":"1.23s"},{"name":"claude-sonnet-5-5","vendor_id":2,"enable_groups":["[低价][满血] Claude 原生","[满血] CC 不降智精选"],"supported_endpoint_types":["anthropic","openai"],"model_ratio":1,"model_price":0,"completion_ratio":5,"cache_ratio":0.05,"create_cache_ratio":1.25,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 2 + cr * 0.1 + cc * 2.5 + cc1h * 4 + c * 10)","context_window":1000000,"max_tokens":128000,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"],"description":"Claude 的均衡档位,适合边界清晰的日常工作:开发功能、修 bug、产出精修内容。"},{"name":"seedream-4","description":"Seedream 4 图像生成模型,按生成图片张数计费。","icon":"ByteDance","vendor_id":14,"enable_groups":["[低价][生图] 生图特惠"],"supported_endpoint_types":["image-generation","openai","openai-response"],"model_ratio":0,"model_price":1,"completion_ratio":0,"quota_type":1,"billing_mode":"tiered_expr","billing_expr":"tier(\"image\", fixed(1)) * image_count"},{"name":"claude-fable-5","vendor_id":2,"enable_groups":["[低价][满血] Claude 原生","[满血] CC 不降智精选"],"supported_endpoint_types":["anthropic","openai"],"model_ratio":5,"model_price":0,"completion_ratio":5,"cache_ratio":0.1,"create_cache_ratio":1.25,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 10 + cr * 1 + cc * 12.5 + cc1h * 20 + c * 50)","context_window":1000000,"max_tokens":128000,"input_modalities":["text","image"],"reasoning_levels":["xhigh","max"],"description":"Anthropic 旗舰 Claude 模型,1M Token 上下文,面向最艰难的长时间编码与知识工作。"},{"name":"gemini-3.6-flash","vendor_id":3,"enable_groups":["[满血][官Key] Gemini","[低价][反重力] Gemini"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":0.75,"model_price":0,"completion_ratio":5,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 0.75 + cr * 0.075 + ai * 0.75 + c * 3.75)","context_window":1000000,"max_tokens":64000,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"gemini-3.7-flash","vendor_id":3,"enable_groups":["[低价][反重力] Gemini"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":0.75,"model_price":0,"completion_ratio":5,"cache_ratio":0.1,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 0.75 + cr * 0.075 + ai * 0.75 + c * 3.75)","context_window":1000000,"max_tokens":64000,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"grok-4.6-medium","vendor_id":5,"enable_groups":["[低价] Grok"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":1,"model_price":0,"completion_ratio":3,"cache_ratio":0.25,"quota_type":0,"context_window":500000,"max_tokens":128000,"input_modalities":["text"]},{"name":"glm-5.3-flash","vendor_id":6,"enable_groups":["[低价][满血][自有] GLM 官方","[低价][满血] 国模"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":0.4,"model_price":0,"completion_ratio":3.5,"cache_ratio":0.2875,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 0.8 + cr * 0.23 + cc * 0 + c * 2.8)","context_window":1000000,"max_tokens":131072,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"claude-opus-4-6","vendor_id":2,"enable_groups":["[满血] CC 不降智精选"],"supported_endpoint_types":["anthropic","openai"],"model_ratio":2.5,"model_price":0,"completion_ratio":5,"cache_ratio":0.1,"create_cache_ratio":1.25,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 5 + cr * 0.5 + cc * 6.25 + cc1h * 10 + c * 25)","context_window":1000000,"max_tokens":128000,"input_modalities":["text","image"],"reasoning_levels":["max"]},{"name":"gemini-embedding-001","vendor_id":3,"enable_groups":["[AIS] Gemini 向量模型"],"supported_endpoint_types":["gemini","openai"],"model_ratio":0.075,"model_price":0,"completion_ratio":4,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 0.15 + c * 0)"},{"name":"grok-4.6-xhigh","vendor_id":5,"enable_groups":["[低价] Grok"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":1,"model_price":0,"completion_ratio":3,"cache_ratio":0.25,"quota_type":0,"context_window":500000,"max_tokens":128000,"input_modalities":["text"]},{"name":"gemini-2.5-flash-image","description":"Gemini 2.5 Flash Image 图像生成模型,按 token 计费。","icon":"Gemini.Color","vendor_id":3,"enable_groups":["[生图] Gemini"],"supported_endpoint_types":["gemini","openai","image-generation"],"model_ratio":0,"model_price":0.04,"completion_ratio":0,"quota_type":1,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 0.3 + cr * 0.075 + c * 30)"},{"name":"deepseek-v4-pro","vendor_id":4,"enable_groups":["[满血][官Key] DeepSeek","[低价] DeepSeek","[低价][满血] 国模"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":37.5,"model_price":0,"completion_ratio":1,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"weekday(\"UTC\") >= 1 && weekday(\"UTC\") <= 5 && ((hour(\"UTC\") >= 1 && hour(\"UTC\") < 4) || (hour(\"UTC\") >= 6 && hour(\"UTC\") < 10)) ? tier(\"peak\", p * 1.32 + cr * 0.044 + c * 3.96) : tier(\"off_peak\", p * 0.66 + cr * 0.022 + c * 1.98)","context_window":1000000,"max_tokens":384000,"input_modalities":["text"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"gemini-3.8-flash-medium","vendor_id":3,"enable_groups":["[低价][反重力] Gemini"],"supported_endpoint_types":["gemini","openai"],"model_ratio":0.75,"model_price":0,"completion_ratio":5,"cache_ratio":0.1,"quota_type":0,"context_window":1000000,"max_tokens":64000,"input_modalities":["text"]},{"name":"gemini-embedding-2-preview","vendor_id":3,"enable_groups":["[AIS] Gemini 向量模型"],"supported_endpoint_types":["gemini","openai"],"model_ratio":0.1,"model_price":0,"completion_ratio":4,"quota_type":0},{"name":"gpt-6-astra","vendor_id":1,"enable_groups":["[低价][备用] GPT Pro","[低价][满血] GPT Pro 2","[低价] GPT 福利","[满血] GPT 不降智精选","[满血] GPT Pro 500 高速","[官key] GPT"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":5,"model_price":0,"completion_ratio":5,"cache_ratio":0.1,"create_cache_ratio":1.25,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"(len <= 272000 ? tier(\"0_272k\", p * 10 + cr * 1 + cc * 12.5 + c * 50) : tier(\"272k_plus\", p * 20 + cr * 2 + cc * 25 + c * 75)) * (param(\"service_tier\") == \"fast\" ? 2 : 1) * (param(\"service_tier\") == \"ultrafast\" ? 8 : 1)","context_window":1000000,"max_tokens":128000,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"],"description":"OpenAI 前沿 GPT-6 模型,擅长计算机操作、编码、科学、网络安全与长上下文检索。","status":99.05,"latency":"26.64s","throughput":"52.3t/s"},{"name":"jev-1.13","vendor_id":13,"enable_groups":["[低价] 神秘折扣模型"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":0.21,"model_price":0,"completion_ratio":1,"cache_ratio":1,"quota_type":0,"context_window":64000,"input_modalities":["text"]},{"name":"grok-4.5","vendor_id":5,"enable_groups":["[低价] Grok"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":1,"model_price":0,"completion_ratio":3,"cache_ratio":0.25,"create_cache_ratio":1,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"len <= 200000 ? tier(\"0_200k\", p * 2 + cr * 0.3 + c * 6) : tier(\"200k_plus\", p * 4 + cr * 0.6 + c * 12)","context_window":500000,"max_tokens":128000,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"grok-4.5-medium","vendor_id":5,"enable_groups":["[低价] Grok"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":1,"model_price":0,"completion_ratio":3,"cache_ratio":0.25,"quota_type":0,"context_window":500000,"max_tokens":128000,"input_modalities":["text"]},{"name":"veo-3.1","description":"高质量视频生成模型,支持文生视频、图生视频和参考素材输入。","tags":"video,unified","vendor_id":3,"enable_groups":["[低价] 视频分组"],"supported_endpoint_types":["openai-video"],"model_ratio":0,"model_price":0.066666666667,"completion_ratio":0,"quota_type":1,"billing_mode":"tiered_expr","billing_expr":"tier(\"base\", u(\"seconds\") * 0.066666666667)"},{"name":"qwen3.8-max","vendor_id":8,"enable_groups":["[低价][满血] 国模"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":1,"model_price":0,"completion_ratio":3,"cache_ratio":0.1,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 2 + cr * 0.25 + cc * 2.5 + c * 6)","context_window":1000000,"max_tokens":131072,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"nano-banana-2-lite","description":"Nano Banana 2 Lite 图像生成模型,按生成图片张数计费。","icon":"Gemini.Color","vendor_id":3,"enable_groups":["[低价][生图] 生图特惠"],"supported_endpoint_types":["image-generation","openai","openai-response"],"model_ratio":37.5,"model_price":0,"completion_ratio":1,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"image\", fixed(0.1)) * image_count"},{"name":"kimi-k3","vendor_id":7,"enable_groups":["[低价] 神秘折扣模型","[低价][满血] 国模"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":10,"model_price":0,"completion_ratio":5,"cache_ratio":0.1,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 3 + cr * 0.3 + cc * 3 + c * 15)","context_window":1048576,"max_tokens":131072,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"grok-4.5-high","vendor_id":5,"enable_groups":["[低价] Grok"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":1,"model_price":0,"completion_ratio":3,"cache_ratio":0.25,"quota_type":0,"context_window":500000,"max_tokens":128000,"input_modalities":["text"]},{"name":"grok-4.6-high","vendor_id":5,"enable_groups":["[低价] Grok"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":1,"model_price":0,"completion_ratio":3,"cache_ratio":0.25,"quota_type":0,"context_window":500000,"max_tokens":128000,"input_modalities":["text"]},{"name":"seedream-4-5","description":"Seedream 4.5 图像生成模型,按生成图片张数计费。","icon":"ByteDance","vendor_id":14,"enable_groups":["[低价][生图] 生图特惠"],"supported_endpoint_types":["image-generation","openai","openai-response"],"model_ratio":0,"model_price":1,"completion_ratio":0,"quota_type":1,"billing_mode":"tiered_expr","billing_expr":"tier(\"image\", fixed(1)) * image_count"},{"name":"gpt-6.1-sol","vendor_id":1,"enable_groups":["[官key] GPT","[低价][备用] GPT Pro","[低价][满血] GPT Pro 2","[低价] GPT 福利","[满血] GPT 不降智精选","[满血] GPT Pro 500 高速"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":1,"model_price":0,"completion_ratio":5,"cache_ratio":0.05,"create_cache_ratio":1.25,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"(len <= 272000 ? tier(\"0_272k\", p * 2 + cr * 0.1 + cc * 2.5 + c * 10) : tier(\"272k_plus\", p * 4 + cr * 0.2 + cc * 5 + c * 15)) * (param(\"service_tier\") == \"fast\" ? 2 : 1) * (param(\"service_tier\") == \"ultrafast\" ? 8 : 1)","context_window":1000000,"max_tokens":128000,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"],"description":"GPT-6.1 Sol 在 Sol 基础上升级智能体编码与计算机操作,接近 Astra 水平。","status":97.42,"latency":"22.62s","throughput":"51.3t/s"},{"name":"deepseek-flash","description":"当前为 DeepSeek v4.1 Flash 模型,具体检查点看分组,官 Key 为 1017 检查点","icon":"DeepSeek.Color","vendor_id":4,"enable_groups":["[低价] 神秘折扣模型","[满血][官Key] DeepSeek","[低价] DeepSeek","[低价][满血] 国模","[低价][满血] DeepSeek 1017"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":37.5,"model_price":0,"completion_ratio":1,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"weekday(\"UTC\") >= 1 && weekday(\"UTC\") <= 5 && ((hour(\"UTC\") >= 1 && hour(\"UTC\") < 4) || (hour(\"UTC\") >= 6 && hour(\"UTC\") < 10)) ? tier(\"peak\", p * 2 + cr * 0.04 + c * 8) : tier(\"off_peak\", p * 1 + cr * 0.02 + c * 4)","context_window":1000000,"max_tokens":384000,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","max"]},{"name":"suno_timing","enable_groups":["[满血] Suno"],"supported_endpoint_types":["openai"],"model_ratio":0,"model_price":0.7718,"completion_ratio":0,"quota_type":1},{"name":"kimseek-r1","enable_groups":["[低价][满血] 国模","[低价][满血] DeepSeek 1017","[低价] DeepSeek"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":37.5,"model_price":0,"completion_ratio":1,"quota_type":0},{"name":"gemini-3-flash-preview","vendor_id":3,"enable_groups":["[满血][官Key] Gemini","[低价][反重力] Gemini"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":0.25,"model_price":0,"completion_ratio":6,"cache_ratio":0.1,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"standard\", p * 0.5 + cr * 0.05 + ai * 1 + c * 3)","context_window":1048576,"max_tokens":65536,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"gemini-3.1-pro-preview","vendor_id":3,"enable_groups":["[满血][官Key] Gemini","[低价][反重力] Gemini"],"supported_endpoint_types":["openai","openai-response"],"model_ratio":1,"model_price":0,"completion_ratio":6,"cache_ratio":0.1,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"len <= 200000 ? tier(\"0_200k\", p * 2 + cr * 0.2 + c * 12) : tier(\"200k_plus\", p * 4 + cr * 0.4 + c * 18)","context_window":1048576,"max_tokens":65536,"input_modalities":["text","image"],"reasoning_levels":["minimal","low","medium","high","xhigh","max"]},{"name":"grok-imagine-image-2.0","description":"Grok Imagine Image 2.0 图像生成模型,按生成图片张数计费。","icon":"XAI","vendor_id":5,"enable_groups":["[低价][生图] 生图特惠"],"supported_endpoint_types":["image-generation","openai","openai-response"],"model_ratio":37.5,"model_price":0,"completion_ratio":1,"quota_type":0,"billing_mode":"tiered_expr","billing_expr":"tier(\"image\", fixed(0.1)) * image_count"},{"name":"grok-imagine-image","description":"Grok Imagine Image 图像生成模型,按生成图片张数计费。","icon":"XAI","vendor_id":5,"enable_groups":["[低价][生图] 生图特惠","[低价] Grok"],"supported_endpoint_types":["image-generation","openai","openai-response"],"model_ratio":0,"model_price":0.4,"completion_ratio":0,"quota_type":1,"billing_mode":"tiered_expr","billing_expr":"tier(\"image\", fixed(0.4)) * image_count"}],"groups":{"[AIS] Gemini 向量模型":1,"[低价] DeepSeek":0.4,"[低价] GPT 福利":0.2,"[低价] Grok":0.1,"[低价] Seedance":1,"[低价] 灵车 K3.1 Pro 专用":0.3,"[低价] 神秘折扣模型":0.12,"[低价] 视频分组":1.5,"[低价] 语音合成 TTS":0.3,"[低价] 语音转文字 ASR":1,"[低价][Kiro] 高智企业 Claude":1,"[低价][促销] GPT Image":0.5,"[低价][反重力] Gemini":0.5,"[低价][备用] GPT Pro":0.3,"[低价][满血] Claude 原生":1.5,"[低价][满血] Claude 特惠":1.1,"[低价][满血] DeepSeek 1017":0.5,"[低价][满血] GPT Pro 2":0.26,"[低价][满血] Gemini Ultra":0.5,"[低价][满血] 国模":0.6,"[低价][满血][自有] GLM 官方":0.25,"[低价][生图] 生图特惠":0.2,"[官key] GPT":0.9,"[满血] Argon 专用":1,"[满血] CC 不降智精选":1.8,"[满血] GPT Pro 500 高速":0.5,"[满血] GPT 不降智精选":0.35,"[满血] Kimi K3.1 Pro 专用":0.6,"[满血] Suno":1,"[满血][官Key] DeepSeek":0.8,"[满血][官Key] Gemini":2,"[生图] GPT Image":1,"[生图] Gemini":1},"refs":{"[AIS] Gemini 向量模型":"#34","[低价] DeepSeek":"#16","[低价] GPT 福利":"#56","[低价] Grok":"#37","[低价] Seedance":"#19","[低价] 灵车 K3.1 Pro 专用":"#49","[低价] 神秘折扣模型":"#24","[低价] 视频分组":"#31","[低价] 语音合成 TTS":"#35","[低价] 语音转文字 ASR":"#27","[低价][Kiro] 高智企业 Claude":"#42","[低价][促销] GPT Image":"#39","[低价][反重力] Gemini":"#5","[低价][备用] GPT Pro":"#13","[低价][满血] Claude 原生":"#61","[低价][满血] Claude 特惠":"#22","[低价][满血] DeepSeek 1017":"#38","[低价][满血] GPT Pro 2":"#14","[低价][满血] Gemini Ultra":"#12","[低价][满血] 国模":"#6","[低价][满血][自有] GLM 官方":"#17","[低价][生图] 生图特惠":"#9","[官key] GPT":"#28","[满血] Argon 专用":"#47","[满血] CC 不降智精选":"#7","[满血] GPT Pro 500 高速":"#57","[满血] GPT 不降智精选":"#2","[满血] Kimi K3.1 Pro 专用":"#48","[满血] Suno":"#67","[满血][官Key] DeepSeek":"#15","[满血][官Key] Gemini":"#8","[生图] GPT Image":"#4","[生图] Gemini":"#29"},"notes":{"[AIS] Gemini 向量模型":"Gemini 文本向量与嵌入模型(AIStudio 渠道)","[低价] DeepSeek":"DeepSeek 正式版,超低折扣,此分组为 v4 Flash 0731","[低价] GPT 福利":"GPT 低价福利分组,不保障满智力","[低价] Grok":"Grok 系列模型,低价通道","[低价] Seedance":"Seedance 视频生成(低价)","[低价] 灵车 K3.1 Pro 专用":"Kimi K3.1 Pro 灵车渠道","[低价] 神秘折扣模型":"神秘折扣模型合集,低价通道,deepseek flash 为 v4.1 旧版","[低价] 视频分组":"Veo / Minimax / Omni 视频生成,低价通道","[低价] 语音合成 TTS":"语音合成(TTS),低价通道","[低价] 语音转文字 ASR":"语音转文字(ASR),低价通道","[低价][Kiro] 高智企业 Claude":"90% Claude Max","[低价][促销] GPT Image":"降智 GPT Pro 号再上岗","[低价][反重力] Gemini":"Gemini 全系模型(反重力渠道)","[低价][备用] GPT Pro":"GPT Pro 账号反代,低价通道","[低价][满血] Claude 原生":"0 注入,神秘渠道","[低价][满血] Claude 特惠":"特惠,尽量保证满血","[低价][满血] DeepSeek 1017":"最新最热满血 DeepSeek v4.1 Flash 1017 专用特价分组","[低价][满血] GPT Pro 2":"GPT Pro 反代,低价 2 号通道","[低价][满血] Gemini Ultra":"反重力 Ultra 套餐反代,支持 Argon","[低价][满血] 国模":"国产大模型满血版,超低折扣","[低价][满血][自有] GLM 官方":"GLM Coding Plan 转发","[低价][生图] 生图特惠":"","[官key] GPT":"OpenAI 官方 Key 通道,支持 UltraFast","[满血] Argon 专用":"不知道从哪来的,质量比 Ultra 好点","[满血] CC 不降智精选":"Claude 满血满智精选,不降智","[满血] GPT Pro 500 高速":"","[满血] GPT 不降智精选":"GPT 满血不降智精选","[满血] Kimi K3.1 Pro 专用":"Kimi K3.1 Pro 专用渠道","[满血] Suno":"Suno 音乐生成(歌词/整曲/音效/分轨/时间轴),按次计费","[满血][官Key] DeepSeek":"","[满血][官Key] Gemini":"Gemini 官方 API Key 通道","[生图] GPT Image":"GPT Image 图像生成","[生图] Gemini":"Gemini 图像生成"},"auto":["[低价][满血] Gemini Ultra","[满血] CC 不降智精选","[满血] GPT 不降智精选","[低价][生图] 生图特惠","[低价] DeepSeek","[低价][备用] GPT Pro","[低价] Grok","[低价] Seedance","[低价] 视频分组","[低价] 语音合成 TTS","[低价] 语音转文字 ASR","[低价][满血] 国模","[低价] 神秘折扣模型","[AIS] Gemini 向量模型","[满血][官Key] Gemini","[官key] GPT","[生图] GPT Image","[生图] Gemini"],"vendors":[{"id":2,"name":"Anthropic","icon":"Claude.Color"},{"id":7,"name":"Moonshot","icon":"Moonshot"},{"id":10,"name":"腾讯","icon":"Hunyuan.Color"},{"id":1,"name":"OpenAI","icon":"OpenAI"},{"id":5,"name":"xAI","icon":"XAI"},{"id":9,"name":"MiniMax","icon":"Minimax.Color"},{"id":12,"name":"小米","icon":"XiaomiMiMo"},{"id":16,"name":"Midjourney","description":"Midjourney 图像生成服务","icon":"Midjourney"},{"id":6,"name":"智谱","icon":"Zhipu.Color"},{"id":13,"name":"TypeSafe"},{"id":14,"name":"字节跳动","description":"字节跳动 Seedream 图像生成系列","icon":"ByteDance"},{"id":15,"name":"Black Forest Labs","description":"Black Forest Labs FLUX 图像生成系列","icon":"Flux"},{"id":17,"name":"Ideogram","description":"Ideogram 图像生成服务","icon":"Ideogram"},{"id":3,"name":"Google","icon":"Gemini.Color"},{"id":4,"name":"DeepSeek","icon":"DeepSeek.Color"},{"id":8,"name":"阿里巴巴","icon":"Qwen.Color"},{"id":11,"name":"即梦","icon":"Jimeng.Color"}],"endpoints":{"anthropic":{"path":"/v1/messages","method":"POST"},"gemini":{"path":"/v1beta/models/{model}:generateContent","method":"POST"},"image-generation":{"path":"/v1/images/generations","method":"POST"},"openai":{"path":"/v1/chat/completions","method":"POST"},"openai-response":{"path":"/v1/responses","method":"POST"}}}
|
package/page/star.png
ADDED
|
Binary file
|
package/page/style.css
CHANGED
|
@@ -36,11 +36,17 @@ html, body {
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
.wrap {
|
|
39
|
-
max-width:
|
|
40
|
-
|
|
39
|
+
max-width: none;
|
|
40
|
+
width: 100%;
|
|
41
|
+
margin: 0;
|
|
41
42
|
padding: 20px 22px 48px;
|
|
42
43
|
}
|
|
43
44
|
|
|
45
|
+
/* 首页铺满:两张卡一行,随窗口宽度伸缩 */
|
|
46
|
+
.home-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; align-items: start; }
|
|
47
|
+
.home-grid > .card { margin: 0; }
|
|
48
|
+
@media (max-width: 720px) { .home-grid { grid-template-columns: 1fr; } }
|
|
49
|
+
|
|
44
50
|
/* 顶部:品牌 + 连接状态。整页只这里允许一点装饰。 */
|
|
45
51
|
.head {
|
|
46
52
|
display: flex;
|
package/page/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
// 由 scripts/stamp.mjs 生成,别手改:版本号在 package.json。
|
|
2
|
-
self.NEARTOKEN_VERSION = "0.
|
|
2
|
+
self.NEARTOKEN_VERSION = "0.4.0"
|