feat: revamp DeepSeek v4 model handling

- replace legacy DeepSeek ids with the new deepseek-v4 model family\n- move thinking control to request parameters and preserve assistant reasoning content\n- switch history split to IGNORE transcript injection and map upload auth failures to 401\n- update admin defaults, API docs, samples, and tests for the new model scheme
This commit is contained in:
CJACK
2026-04-26 00:02:14 +08:00
parent ed9efc5858
commit 131ca7d398
66 changed files with 949 additions and 697 deletions

View File

@@ -50,18 +50,12 @@ export default function ApiTesterContainer({ config, onMessage, authFetch }) {
const customKeyManaged = customKeyActive && configuredKeys.includes(trimmedApiKey)
const models = [
{ id: 'deepseek-chat', name: 'deepseek-chat', icon: 'MessageSquare', desc: t('apiTester.models.chat'), color: 'text-amber-500' },
{ id: 'deepseek-reasoner', name: 'deepseek-reasoner', icon: 'Cpu', desc: t('apiTester.models.reasoner'), color: 'text-amber-600' },
{ id: 'deepseek-chat-search', name: 'deepseek-chat-search', icon: 'SearchIcon', desc: t('apiTester.models.chatSearch'), color: 'text-cyan-500' },
{ id: 'deepseek-reasoner-search', name: 'deepseek-reasoner-search', icon: 'SearchIcon', desc: t('apiTester.models.reasonerSearch'), color: 'text-cyan-600' },
{ id: 'deepseek-expert-chat', name: 'deepseek-expert-chat', icon: 'MessageSquare', desc: t('apiTester.models.expertChat'), color: 'text-emerald-500' },
{ id: 'deepseek-expert-reasoner', name: 'deepseek-expert-reasoner', icon: 'Cpu', desc: t('apiTester.models.expertReasoner'), color: 'text-emerald-600' },
{ id: 'deepseek-expert-chat-search', name: 'deepseek-expert-chat-search', icon: 'SearchIcon', desc: t('apiTester.models.expertChatSearch'), color: 'text-teal-500' },
{ id: 'deepseek-expert-reasoner-search', name: 'deepseek-expert-reasoner-search', icon: 'SearchIcon', desc: t('apiTester.models.expertReasonerSearch'), color: 'text-teal-600' },
{ id: 'deepseek-vision-chat', name: 'deepseek-vision-chat', icon: 'MessageSquare', desc: t('apiTester.models.visionChat'), color: 'text-violet-500' },
{ id: 'deepseek-vision-reasoner', name: 'deepseek-vision-reasoner', icon: 'Cpu', desc: t('apiTester.models.visionReasoner'), color: 'text-violet-600' },
{ id: 'deepseek-vision-chat-search', name: 'deepseek-vision-chat-search', icon: 'SearchIcon', desc: t('apiTester.models.visionChatSearch'), color: 'text-fuchsia-500' },
{ id: 'deepseek-vision-reasoner-search', name: 'deepseek-vision-reasoner-search', icon: 'SearchIcon', desc: t('apiTester.models.visionReasonerSearch'), color: 'text-fuchsia-600' },
{ id: 'deepseek-v4-flash', name: 'deepseek-v4-flash', icon: 'MessageSquare', desc: t('apiTester.models.flash'), color: 'text-amber-500' },
{ id: 'deepseek-v4-pro', name: 'deepseek-v4-pro', icon: 'Cpu', desc: t('apiTester.models.pro'), color: 'text-amber-600' },
{ id: 'deepseek-v4-flash-search', name: 'deepseek-v4-flash-search', icon: 'SearchIcon', desc: t('apiTester.models.flashSearch'), color: 'text-cyan-500' },
{ id: 'deepseek-v4-pro-search', name: 'deepseek-v4-pro-search', icon: 'SearchIcon', desc: t('apiTester.models.proSearch'), color: 'text-cyan-600' },
{ id: 'deepseek-v4-vision', name: 'deepseek-v4-vision', icon: 'ImageIcon', desc: t('apiTester.models.vision'), color: 'text-violet-500' },
{ id: 'deepseek-v4-vision-search', name: 'deepseek-v4-vision-search', icon: 'SearchIcon', desc: t('apiTester.models.visionSearch'), color: 'text-fuchsia-600' },
]
const { runTest, stopGeneration } = useChatStreamClient({

View File

@@ -1,7 +1,7 @@
import { useEffect, useRef, useState } from 'react'
export function useApiTesterState({ t }) {
const [model, setModel] = useState('deepseek-chat')
const [model, setModel] = useState('deepseek-v4-flash')
const defaultMessage = t('apiTester.defaultMessage')
const [message, setMessage] = useState(defaultMessage)
const [apiKey, setApiKey] = useState('')

View File

@@ -18,7 +18,7 @@ const DEFAULT_FORM = {
embeddings: { provider: '' },
auto_delete: { mode: 'none' },
history_split: { enabled: true, trigger_after_turns: 1 },
claude_mapping_text: '{\n "fast": "deepseek-chat",\n "slow": "deepseek-reasoner"\n}',
claude_mapping_text: '{\n "fast": "deepseek-v4-flash",\n "slow": "deepseek-v4-pro"\n}',
model_aliases_text: '{}',
}

View File

@@ -219,18 +219,12 @@
"apiTester": {
"defaultMessage": "Hello, please introduce yourself in one sentence.",
"models": {
"chat": "Non-reasoning model",
"reasoner": "Reasoning model",
"chatSearch": "Non-reasoning model (with search)",
"reasonerSearch": "Reasoning model (with search)",
"expertChat": "Non-reasoning expert mode",
"expertReasoner": "Reasoning expert mode",
"expertChatSearch": "Non-reasoning expert mode (with search)",
"expertReasonerSearch": "Reasoning expert mode (with search)",
"visionChat": "Non-reasoning vision mode",
"visionReasoner": "Reasoning vision mode",
"visionChatSearch": "Non-reasoning vision mode (with search)",
"visionReasonerSearch": "Reasoning vision mode (with search)"
"flash": "v4 Flash (thinking on by default)",
"pro": "v4 Pro (thinking on by default)",
"flashSearch": "v4 Flash (with search)",
"proSearch": "v4 Pro (with search)",
"vision": "v4 Vision (thinking on by default)",
"visionSearch": "v4 Vision (with search)"
},
"missingApiKey": "Please provide an API key.",
"requestFailed": "Request failed.",

View File

@@ -219,18 +219,12 @@
"apiTester": {
"defaultMessage": "你好,请用一句话介绍你自己。",
"models": {
"chat": "非思考模型",
"reasoner": "思考模型",
"chatSearch": "非思考模型 (带搜索)",
"reasonerSearch": "思考模型 (带搜索)",
"expertChat": "非思考专家模式",
"expertReasoner": "思考专家模式",
"expertChatSearch": "非思考专家模式 (带搜索)",
"expertReasonerSearch": "思考专家模式 (带搜索)",
"visionChat": "非思考视觉模式",
"visionReasoner": "思考视觉模式",
"visionChatSearch": "非思考视觉模式 (带搜索)",
"visionReasonerSearch": "思考视觉模式 (带搜索)"
"flash": "v4 Flash默认开启思考",
"pro": "v4 Pro默认开启思考",
"flashSearch": "v4 Flash带搜索",
"proSearch": "v4 Pro带搜索",
"vision": "v4 Vision默认开启思考",
"visionSearch": "v4 Vision带搜索"
},
"missingApiKey": "请提供 API 密钥",
"requestFailed": "请求失败",