mirror of
https://git.openapi.site/https://github.com/desirecore/config-center.git
synced 2026-09-05 20:53:50 +08:00
feat(compute): add DeepSeek V4 variants and Qwen3.8 Flash (#82)
- add DeepSeek V4 Flash Vision Exp provider and model specifications - add DeepSeek V4 Flash 0731 and Qwen3.8 Flash model specifications - add regression coverage and bump preset data version
This commit is contained in:
@@ -105,7 +105,7 @@ describe('真实数据全量校验', () => {
|
|||||||
if (spec.routing) routed.push(spec)
|
if (spec.routing) routed.push(spec)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert.equal(routed.length, 43)
|
assert.equal(routed.length, 46)
|
||||||
assert.equal(routed.every((spec) => spec.routing.reasoning.supportedModes.includes(spec.routing.reasoning.defaultMode)), true)
|
assert.equal(routed.every((spec) => spec.routing.reasoning.supportedModes.includes(spec.routing.reasoning.defaultMode)), true)
|
||||||
assert.equal(routed.every((spec) => Array.isArray(spec.spec.capabilities)), true)
|
assert.equal(routed.every((spec) => Array.isArray(spec.spec.capabilities)), true)
|
||||||
})
|
})
|
||||||
@@ -234,6 +234,37 @@ describe('真实数据全量校验', () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('DeepSeek V4 Flash Vision Exp 应提供独立的视觉规格', () => {
|
||||||
|
const provider = JSON.parse(readFileSync(join(ROOT, 'compute', 'providers', 'deepseek.json'), 'utf8'))
|
||||||
|
const specFile = JSON.parse(readFileSync(join(ROOT, 'compute', 'model-specs', 'deepseek.json'), 'utf8'))
|
||||||
|
const modelId = 'deepseek-v4-flash-vision-exp'
|
||||||
|
const model = provider.models.find((item) => item.modelName === modelId)
|
||||||
|
|
||||||
|
assert.ok(provider.services.includes('vision'))
|
||||||
|
assert.ok(model, `provider 缺少 ${modelId}`)
|
||||||
|
assert.equal(model.contextWindow, 1000000)
|
||||||
|
assert.equal(model.maxOutputTokens, 384000)
|
||||||
|
assert.ok(model.capabilities.includes('vision'))
|
||||||
|
assert.ok(model.serviceType.includes('vision'))
|
||||||
|
assert.equal(model.extra.supportsThinking, true)
|
||||||
|
assert.equal(model.extra.thinkingDefault, true)
|
||||||
|
|
||||||
|
const specs = specFile.specs.filter((item) => item.id === modelId)
|
||||||
|
assert.equal(specs.length, 1, `model-specs 中 ${modelId} 应且仅应有一条规格`)
|
||||||
|
assert.deepEqual(specs[0].match.exact, [modelId])
|
||||||
|
assert.equal('patterns' in specs[0].match, false)
|
||||||
|
assert.equal(specs[0].family, modelId)
|
||||||
|
assert.equal(specs[0].spec.contextWindow, 1000000)
|
||||||
|
assert.equal(specs[0].spec.maxOutputTokens, 384000)
|
||||||
|
assert.equal(specs[0].spec.supportsReasoning, true)
|
||||||
|
assert.ok(specs[0].spec.capabilities.includes('vision'))
|
||||||
|
assert.ok(specs[0].spec.serviceType.includes('vision'))
|
||||||
|
|
||||||
|
const flash = specFile.specs.find((item) => item.id === 'deepseek-v4-flash')
|
||||||
|
assert.deepEqual(flash.match.exact, ['deepseek-v4-flash'])
|
||||||
|
assert.equal('patterns' in flash.match, false)
|
||||||
|
})
|
||||||
|
|
||||||
it('MiMo V2.5 ASR 应有独立精确规格,避免回落到 MiMo V2.5 family', () => {
|
it('MiMo V2.5 ASR 应有独立精确规格,避免回落到 MiMo V2.5 family', () => {
|
||||||
const specFile = JSON.parse(readFileSync(join(ROOT, 'compute', 'model-specs', 'xiaomi.json'), 'utf8'))
|
const specFile = JSON.parse(readFileSync(join(ROOT, 'compute', 'model-specs', 'xiaomi.json'), 'utf8'))
|
||||||
const specs = specFile.specs.filter((item) => item.id === 'mimo-v2.5-asr')
|
const specs = specFile.specs.filter((item) => item.id === 'mimo-v2.5-asr')
|
||||||
@@ -324,6 +355,29 @@ describe('真实数据全量校验', () => {
|
|||||||
assert.ok(specs[0].spec.capabilities.includes('vision'))
|
assert.ok(specs[0].spec.capabilities.includes('vision'))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('Qwen3.8 Flash 应提供完整的多模态推理规格', () => {
|
||||||
|
const specFile = JSON.parse(readFileSync(join(ROOT, 'compute', 'model-specs', 'qwen.json'), 'utf8'))
|
||||||
|
const modelId = 'qwen3.8-flash'
|
||||||
|
const specs = specFile.specs.filter((item) => item.id === modelId)
|
||||||
|
|
||||||
|
assert.equal(specs.length, 1, `model-specs 中 ${modelId} 应且仅应有一条规格`)
|
||||||
|
const modelSpec = specs[0]
|
||||||
|
assert.deepEqual(modelSpec.match.exact, [modelId])
|
||||||
|
assert.equal('patterns' in modelSpec.match, false)
|
||||||
|
assert.equal(modelSpec.family, modelId)
|
||||||
|
assert.equal(modelSpec.spec.contextWindow, 1000000)
|
||||||
|
assert.equal(modelSpec.spec.maxOutputTokens, 131072)
|
||||||
|
assert.equal(modelSpec.spec.supportsReasoning, true)
|
||||||
|
assert.equal(modelSpec.spec.releasedAt, '2026-08-26')
|
||||||
|
assert.ok(modelSpec.spec.capabilities.includes('vision'))
|
||||||
|
assert.ok(modelSpec.spec.capabilities.includes('video_understanding'))
|
||||||
|
assert.ok(modelSpec.spec.capabilities.includes('fast'))
|
||||||
|
assert.deepEqual(modelSpec.spec.serviceType, ['chat', 'reasoning', 'vision'])
|
||||||
|
assert.equal(modelSpec.spec.extra.thinkingMaxTokens, 262144)
|
||||||
|
assert.equal(modelSpec.routing.tier, 'lightweight')
|
||||||
|
assert.equal(modelSpec.routing.reasoning.defaultMode, 'xhigh')
|
||||||
|
})
|
||||||
|
|
||||||
it('基础模型与后缀版本应使用独立精确规格,避免互相误匹配', () => {
|
it('基础模型与后缀版本应使用独立精确规格,避免互相误匹配', () => {
|
||||||
const qwen = JSON.parse(readFileSync(join(ROOT, 'compute', 'model-specs', 'qwen.json'), 'utf8'))
|
const qwen = JSON.parse(readFileSync(join(ROOT, 'compute', 'model-specs', 'qwen.json'), 'utf8'))
|
||||||
const deepseek = JSON.parse(readFileSync(join(ROOT, 'compute', 'model-specs', 'deepseek.json'), 'utf8'))
|
const deepseek = JSON.parse(readFileSync(join(ROOT, 'compute', 'model-specs', 'deepseek.json'), 'utf8'))
|
||||||
@@ -333,12 +387,16 @@ describe('真实数据全量校验', () => {
|
|||||||
const qwenPreview = specFor(qwen, 'qwen3.8-max-preview')
|
const qwenPreview = specFor(qwen, 'qwen3.8-max-preview')
|
||||||
const deepseekBase = specFor(deepseek, 'deepseek-v4-pro')
|
const deepseekBase = specFor(deepseek, 'deepseek-v4-pro')
|
||||||
const deepseek0813 = specFor(deepseek, 'deepseek-v4-pro-0813')
|
const deepseek0813 = specFor(deepseek, 'deepseek-v4-pro-0813')
|
||||||
|
const deepseekFlash = specFor(deepseek, 'deepseek-v4-flash')
|
||||||
|
const deepseekFlash0731 = specFor(deepseek, 'deepseek-v4-flash-0731')
|
||||||
|
|
||||||
for (const [id, modelSpec] of [
|
for (const [id, modelSpec] of [
|
||||||
['qwen3.8-max', qwenBase],
|
['qwen3.8-max', qwenBase],
|
||||||
['qwen3.8-max-preview', qwenPreview],
|
['qwen3.8-max-preview', qwenPreview],
|
||||||
['deepseek-v4-pro', deepseekBase],
|
['deepseek-v4-pro', deepseekBase],
|
||||||
['deepseek-v4-pro-0813', deepseek0813],
|
['deepseek-v4-pro-0813', deepseek0813],
|
||||||
|
['deepseek-v4-flash', deepseekFlash],
|
||||||
|
['deepseek-v4-flash-0731', deepseekFlash0731],
|
||||||
]) {
|
]) {
|
||||||
assert.ok(modelSpec, `model-specs 缺少 ${id}`)
|
assert.ok(modelSpec, `model-specs 缺少 ${id}`)
|
||||||
assert.deepEqual(modelSpec.match.exact, [id])
|
assert.deepEqual(modelSpec.match.exact, [id])
|
||||||
@@ -347,10 +405,14 @@ describe('真实数据全量校验', () => {
|
|||||||
|
|
||||||
assert.equal('patterns' in deepseekBase.match, false)
|
assert.equal('patterns' in deepseekBase.match, false)
|
||||||
assert.equal('patterns' in deepseek0813.match, false)
|
assert.equal('patterns' in deepseek0813.match, false)
|
||||||
|
assert.equal('patterns' in deepseekFlash.match, false)
|
||||||
|
assert.equal('patterns' in deepseekFlash0731.match, false)
|
||||||
assert.equal(qwenBase.spec.contextWindow, qwenPreview.spec.contextWindow)
|
assert.equal(qwenBase.spec.contextWindow, qwenPreview.spec.contextWindow)
|
||||||
assert.equal(qwenBase.spec.maxOutputTokens, qwenPreview.spec.maxOutputTokens)
|
assert.equal(qwenBase.spec.maxOutputTokens, qwenPreview.spec.maxOutputTokens)
|
||||||
assert.equal(deepseekBase.spec.contextWindow, deepseek0813.spec.contextWindow)
|
assert.equal(deepseekBase.spec.contextWindow, deepseek0813.spec.contextWindow)
|
||||||
assert.equal(deepseekBase.spec.maxOutputTokens, deepseek0813.spec.maxOutputTokens)
|
assert.equal(deepseekBase.spec.maxOutputTokens, deepseek0813.spec.maxOutputTokens)
|
||||||
|
assert.equal(deepseekFlash.spec.contextWindow, deepseekFlash0731.spec.contextWindow)
|
||||||
|
assert.equal(deepseekFlash.spec.maxOutputTokens, deepseekFlash0731.spec.maxOutputTokens)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('所有 Provider 应按供应商归属计价,模型来源不覆盖供应商币种', () => {
|
it('所有 Provider 应按供应商归属计价,模型来源不覆盖供应商币种', () => {
|
||||||
|
|||||||
@@ -162,13 +162,10 @@
|
|||||||
{
|
{
|
||||||
"id": "deepseek-v4-flash",
|
"id": "deepseek-v4-flash",
|
||||||
"displayName": "DeepSeek V4 Flash",
|
"displayName": "DeepSeek V4 Flash",
|
||||||
"family": "deepseek-v4",
|
"family": "deepseek-v4-flash",
|
||||||
"match": {
|
"match": {
|
||||||
"exact": [
|
"exact": [
|
||||||
"deepseek-v4-flash"
|
"deepseek-v4-flash"
|
||||||
],
|
|
||||||
"patterns": [
|
|
||||||
"deepseek-v4-flash*"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"spec": {
|
"spec": {
|
||||||
@@ -211,6 +208,111 @@
|
|||||||
"defaultMode": "high"
|
"defaultMode": "high"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "deepseek-v4-flash-0731",
|
||||||
|
"displayName": "DeepSeek V4 Flash 0731",
|
||||||
|
"family": "deepseek-v4-flash-0731",
|
||||||
|
"match": {
|
||||||
|
"exact": [
|
||||||
|
"deepseek-v4-flash-0731"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"contextWindow": 1000000,
|
||||||
|
"maxOutputTokens": 384000,
|
||||||
|
"capabilities": [
|
||||||
|
"chat",
|
||||||
|
"code",
|
||||||
|
"reasoning",
|
||||||
|
"deep_thinking",
|
||||||
|
"multilingual",
|
||||||
|
"tool_use"
|
||||||
|
],
|
||||||
|
"serviceType": [
|
||||||
|
"chat",
|
||||||
|
"reasoning"
|
||||||
|
],
|
||||||
|
"defaultTemperature": 1,
|
||||||
|
"supportsReasoning": true,
|
||||||
|
"extra": {
|
||||||
|
"supportsThinking": true,
|
||||||
|
"thinkingDefault": true,
|
||||||
|
"reasoningEffort": [
|
||||||
|
"high",
|
||||||
|
"max"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"description": "DeepSeek V4 Flash 0731 固定版本,100 万上下文"
|
||||||
|
},
|
||||||
|
"routing": {
|
||||||
|
"tier": "lightweight",
|
||||||
|
"routingPriority": 35,
|
||||||
|
"eligibleForAgent": true,
|
||||||
|
"defaultReference": false,
|
||||||
|
"reasoning": {
|
||||||
|
"supportedModes": [
|
||||||
|
"auto",
|
||||||
|
"high",
|
||||||
|
"max"
|
||||||
|
],
|
||||||
|
"defaultMode": "high"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "deepseek-v4-flash-vision-exp",
|
||||||
|
"displayName": "DeepSeek V4 Flash Vision Exp",
|
||||||
|
"family": "deepseek-v4-flash-vision-exp",
|
||||||
|
"match": {
|
||||||
|
"exact": [
|
||||||
|
"deepseek-v4-flash-vision-exp"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"contextWindow": 1000000,
|
||||||
|
"maxOutputTokens": 384000,
|
||||||
|
"capabilities": [
|
||||||
|
"chat",
|
||||||
|
"code",
|
||||||
|
"reasoning",
|
||||||
|
"deep_thinking",
|
||||||
|
"vision",
|
||||||
|
"multilingual",
|
||||||
|
"tool_use"
|
||||||
|
],
|
||||||
|
"serviceType": [
|
||||||
|
"chat",
|
||||||
|
"reasoning",
|
||||||
|
"vision"
|
||||||
|
],
|
||||||
|
"defaultTemperature": 1,
|
||||||
|
"supportsReasoning": true,
|
||||||
|
"releasedAt": "2026-08-21",
|
||||||
|
"extra": {
|
||||||
|
"supportsThinking": true,
|
||||||
|
"thinkingDefault": true,
|
||||||
|
"reasoningEffort": [
|
||||||
|
"high",
|
||||||
|
"max"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"description": "DeepSeek V4 Flash 实验性视觉版本,支持文本与图像输入,文本能力与 V4 Flash 一致"
|
||||||
|
},
|
||||||
|
"routing": {
|
||||||
|
"tier": "lightweight",
|
||||||
|
"routingPriority": 35,
|
||||||
|
"eligibleForAgent": true,
|
||||||
|
"defaultReference": false,
|
||||||
|
"reasoning": {
|
||||||
|
"supportedModes": [
|
||||||
|
"auto",
|
||||||
|
"high",
|
||||||
|
"max"
|
||||||
|
],
|
||||||
|
"defaultMode": "high"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -50,6 +50,66 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"id": "qwen3.8-flash",
|
||||||
|
"displayName": "Qwen3.8 Flash",
|
||||||
|
"family": "qwen3.8-flash",
|
||||||
|
"match": {
|
||||||
|
"exact": [
|
||||||
|
"qwen3.8-flash"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"spec": {
|
||||||
|
"contextWindow": 1000000,
|
||||||
|
"maxOutputTokens": 131072,
|
||||||
|
"capabilities": [
|
||||||
|
"chat",
|
||||||
|
"reasoning",
|
||||||
|
"deep_thinking",
|
||||||
|
"code",
|
||||||
|
"multilingual",
|
||||||
|
"tool_use",
|
||||||
|
"long_context",
|
||||||
|
"agent",
|
||||||
|
"vision",
|
||||||
|
"video_understanding",
|
||||||
|
"fast"
|
||||||
|
],
|
||||||
|
"serviceType": [
|
||||||
|
"chat",
|
||||||
|
"reasoning",
|
||||||
|
"vision"
|
||||||
|
],
|
||||||
|
"defaultTemperature": 0.6,
|
||||||
|
"defaultTopP": 0.95,
|
||||||
|
"supportsReasoning": true,
|
||||||
|
"extra": {
|
||||||
|
"thinkingDefault": true,
|
||||||
|
"thinkingMaxTokens": 262144
|
||||||
|
},
|
||||||
|
"releasedAt": "2026-08-26",
|
||||||
|
"description": "通义千问 Qwen3.8 Flash,高性价比多模态推理模型,支持 100 万上下文及文本、图像、视频输入"
|
||||||
|
},
|
||||||
|
"routing": {
|
||||||
|
"tier": "lightweight",
|
||||||
|
"routingPriority": 40,
|
||||||
|
"eligibleForAgent": true,
|
||||||
|
"defaultReference": false,
|
||||||
|
"reasoning": {
|
||||||
|
"supportedModes": [
|
||||||
|
"auto",
|
||||||
|
"off",
|
||||||
|
"minimal",
|
||||||
|
"low",
|
||||||
|
"medium",
|
||||||
|
"high",
|
||||||
|
"xhigh",
|
||||||
|
"max"
|
||||||
|
],
|
||||||
|
"defaultMode": "xhigh"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"id": "qwen3.8-max-preview",
|
"id": "qwen3.8-max-preview",
|
||||||
"displayName": "Qwen3.8 Max Preview",
|
"displayName": "Qwen3.8 Max Preview",
|
||||||
|
|||||||
@@ -11,13 +11,56 @@
|
|||||||
"priceCurrency": "CNY",
|
"priceCurrency": "CNY",
|
||||||
"services": [
|
"services": [
|
||||||
"chat",
|
"chat",
|
||||||
"reasoning"
|
"reasoning",
|
||||||
|
"vision"
|
||||||
],
|
],
|
||||||
"tombstones": [
|
"tombstones": [
|
||||||
"deepseek-chat",
|
"deepseek-chat",
|
||||||
"deepseek-reasoner"
|
"deepseek-reasoner"
|
||||||
],
|
],
|
||||||
"models": [
|
"models": [
|
||||||
|
{
|
||||||
|
"modelName": "deepseek-v4-flash-vision-exp",
|
||||||
|
"displayName": "DeepSeek V4 Flash Vision Exp",
|
||||||
|
"serviceType": [
|
||||||
|
"chat",
|
||||||
|
"reasoning",
|
||||||
|
"vision"
|
||||||
|
],
|
||||||
|
"description": "DeepSeek V4 Flash 实验性视觉版本,支持文本与图像输入,文本能力与 V4 Flash 一致,1M 上下文,并发上限 2500",
|
||||||
|
"contextWindow": 1000000,
|
||||||
|
"maxOutputTokens": 384000,
|
||||||
|
"capabilities": [
|
||||||
|
"chat",
|
||||||
|
"code",
|
||||||
|
"reasoning",
|
||||||
|
"deep_thinking",
|
||||||
|
"vision",
|
||||||
|
"long_context",
|
||||||
|
"multilingual",
|
||||||
|
"tool_use"
|
||||||
|
],
|
||||||
|
"inputPrice": 1.008,
|
||||||
|
"outputPrice": 2.016,
|
||||||
|
"defaultTemperature": 1,
|
||||||
|
"defaultTopP": 1,
|
||||||
|
"extra": {
|
||||||
|
"cacheHitPrice": 0.02016,
|
||||||
|
"concurrencyLimit": 2500,
|
||||||
|
"supportsThinking": true,
|
||||||
|
"thinkingDefault": true,
|
||||||
|
"reasoningEffort": [
|
||||||
|
"high",
|
||||||
|
"max"
|
||||||
|
],
|
||||||
|
"features": {
|
||||||
|
"jsonOutput": true,
|
||||||
|
"toolCalls": true,
|
||||||
|
"chatPrefixCompletion": "beta",
|
||||||
|
"fimCompletion": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"modelName": "deepseek-v4-flash",
|
"modelName": "deepseek-v4-flash",
|
||||||
"displayName": "DeepSeek V4 Flash",
|
"displayName": "DeepSeek V4 Flash",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"presetDataVersion": 95,
|
"presetDataVersion": 98,
|
||||||
"updatedAt": "2026-08-26",
|
"updatedAt": "2026-08-27",
|
||||||
"description": "DesireCore 官方配置中心"
|
"description": "DesireCore 官方配置中心"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user