diff --git a/src/components/biz/ai-translate-modal.tsx b/src/components/biz/ai-translate-modal.tsx index fd706ec..78858a5 100644 --- a/src/components/biz/ai-translate-modal.tsx +++ b/src/components/biz/ai-translate-modal.tsx @@ -25,6 +25,7 @@ type Props = { languages: string[]; paths: string[]; prompt: string | undefined; + model?: string | undefined; initialSelectedLanguages?: string[]; getExistingByPath?: (path: string) => Record; onConfirm: ( @@ -33,7 +34,7 @@ type Props = { ) => Promise | void; }; -function AiTranslateModalImpl({ open, onOpenChange, languages, paths, prompt, initialSelectedLanguages, getExistingByPath, onConfirm }: Props) { +function AiTranslateModalImpl({ open, onOpenChange, languages, paths, prompt, model, initialSelectedLanguages, getExistingByPath, onConfirm }: Props) { const [inputsByKey, setInputsByKey] = useState>({}); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); @@ -92,7 +93,7 @@ function AiTranslateModalImpl({ open, onOpenChange, languages, paths, prompt, in setLoading(true); setError(null); try { - const result = await requestTranslations({ items, languages: selectedLangs, prompt }); + const result = await requestTranslations({ items, languages: selectedLangs, prompt, model }); await onConfirm(result, { overwrite, selectedLanguages: selectedLangs }); setInputsByKey({}); onOpenChange(false); diff --git a/src/components/biz/project-settings-modal.tsx b/src/components/biz/project-settings-modal.tsx index 01e684e..19d4c7f 100644 --- a/src/components/biz/project-settings-modal.tsx +++ b/src/components/biz/project-settings-modal.tsx @@ -8,13 +8,14 @@ type Props = { open: boolean; onOpenChange: (v: boolean) => void; project: Project | null; - onSave: (update: { name: string; preferences: { aiPrompt?: string } }) => Promise | void; + onSave: (update: { name: string; preferences: { aiPrompt?: string; aiModel?: string } }) => Promise | void; onDelete: () => Promise | void; }; function ProjectSettingsModalImpl({ open, onOpenChange, project, onSave, onDelete }: Props) { const [name, setName] = useState(""); const [aiPrompt, setAiPrompt] = useState(""); + const [aiModel, setAiModel] = useState(""); const [saving, setSaving] = useState(false); const [err, setErr] = useState(null); @@ -22,6 +23,7 @@ function ProjectSettingsModalImpl({ open, onOpenChange, project, onSave, onDelet if (open) { setName(project?.name ?? ""); setAiPrompt(project?.preferences?.aiPrompt ?? ""); + setAiModel(project?.preferences?.aiModel ?? ""); setSaving(false); setErr(null); } @@ -35,7 +37,7 @@ function ProjectSettingsModalImpl({ open, onOpenChange, project, onSave, onDelet try { await onSave({ name: trimmed, - preferences: { aiPrompt }, + preferences: { aiPrompt, aiModel }, }); onOpenChange(false); } catch (e) { @@ -69,6 +71,22 @@ function ProjectSettingsModalImpl({ open, onOpenChange, project, onSave, onDelet setName(e.target.value)} placeholder="输入项目名称" /> +
+ + setAiModel(e.target.value)} + placeholder="例如:openai/gpt-5" + /> + + +