全局统一映射

This commit is contained in:
CJACK
2026-04-26 01:58:15 +08:00
parent 1b0e8cbadb
commit f13ad231ac
36 changed files with 855 additions and 308 deletions

View File

@@ -2,26 +2,15 @@ export default function ModelSection({ t, form, setForm }) {
return (
<div className="bg-card border border-border rounded-xl p-5 space-y-4">
<h3 className="font-semibold">{t('settings.modelTitle')}</h3>
<div className="grid grid-cols-1 md:grid-cols-2 gap-4">
<label className="text-sm space-y-2">
<span className="text-muted-foreground">{t('settings.claudeMapping')}</span>
<textarea
value={form.claude_mapping_text}
onChange={(e) => setForm((prev) => ({ ...prev, claude_mapping_text: e.target.value }))}
rows={8}
className="w-full bg-background border border-border rounded-lg px-3 py-2 font-mono text-xs"
/>
</label>
<label className="text-sm space-y-2">
<span className="text-muted-foreground">{t('settings.modelAliases')}</span>
<textarea
value={form.model_aliases_text}
onChange={(e) => setForm((prev) => ({ ...prev, model_aliases_text: e.target.value }))}
rows={8}
className="w-full bg-background border border-border rounded-lg px-3 py-2 font-mono text-xs"
/>
</label>
</div>
<label className="text-sm space-y-2 block">
<span className="text-muted-foreground">{t('settings.modelAliases')}</span>
<textarea
value={form.model_aliases_text}
onChange={(e) => setForm((prev) => ({ ...prev, model_aliases_text: e.target.value }))}
rows={12}
className="w-full bg-background border border-border rounded-lg px-3 py-2 font-mono text-xs"
/>
</label>
</div>
)
}

View File

@@ -18,7 +18,6 @@ const DEFAULT_FORM = {
embeddings: { provider: '' },
auto_delete: { mode: 'none' },
history_split: { enabled: true, trigger_after_turns: 1 },
claude_mapping_text: '{\n "fast": "deepseek-v4-flash",\n "slow": "deepseek-v4-pro"\n}',
model_aliases_text: '{}',
}
@@ -75,7 +74,6 @@ function fromServerForm(data) {
enabled: data.history_split?.enabled ?? true,
trigger_after_turns: Number(data.history_split?.trigger_after_turns || 1),
},
claude_mapping_text: JSON.stringify(data.claude_mapping || {}, null, 2),
model_aliases_text: JSON.stringify(data.model_aliases || {}, null, 2),
}
}
@@ -176,10 +174,8 @@ export function useSettingsForm({ apiFetch, t, onMessage, onRefresh, onForceLogo
}, [loadSettings])
const saveSettings = useCallback(async () => {
let claudeMapping = {}
let modelAliases = {}
try {
claudeMapping = parseJSONMap(form.claude_mapping_text, 'claude_mapping', t)
modelAliases = parseJSONMap(form.model_aliases_text, 'model_aliases', t)
} catch (e) {
onMessage('error', e.message)
@@ -188,7 +184,6 @@ export function useSettingsForm({ apiFetch, t, onMessage, onRefresh, onForceLogo
const payload = {
...toServerPayload(form),
claude_mapping: claudeMapping,
model_aliases: modelAliases,
}

View File

@@ -383,8 +383,7 @@
"compatibilityDesc": "Compatibility controls that keep stream output closer to the wire format or safer for the web UI.",
"stripReferenceMarkers": "Strip [reference:N] markers",
"modelTitle": "Model mapping",
"claudeMapping": "Claude mapping (JSON)",
"modelAliases": "Model aliases (JSON)",
"modelAliases": "Global model aliases (JSON)",
"autoDeleteTitle": "Session Cleanup Policy",
"autoDeleteDesc": "Choose how DeepSeek remote chat records are cleaned up after each request completes.",
"autoDeleteMode": "Deletion mode",

View File

@@ -383,8 +383,7 @@
"compatibilityDesc": "用于控制输出格式兼容性,避免把模型原始流里的标记直接暴露到前端。",
"stripReferenceMarkers": "移除 [reference:N] 标记",
"modelTitle": "模型映射",
"claudeMapping": "Claude 映射JSON",
"modelAliases": "模型别名JSON",
"modelAliases": "全局模型映射JSON",
"autoDeleteTitle": "会话删除策略",
"autoDeleteDesc": "选择每次请求完成后如何清理 DeepSeek 远端聊天记录。",
"autoDeleteMode": "删除模式",