diff --git a/src/App.vue b/src/App.vue
index 3b89309..35bf66b 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -90,20 +90,23 @@ const sourceDropdownOpen = ref(false);
const targetDropdownOpen = ref(false);
const speakerDropdownOpen = ref(false);
const toneDropdownOpen = ref(false);
+const evaluationProfileDropdownOpen = ref(false);
const closeAllDropdowns = () => {
sourceDropdownOpen.value = false;
targetDropdownOpen.value = false;
speakerDropdownOpen.value = false;
toneDropdownOpen.value = false;
+ evaluationProfileDropdownOpen.value = false;
};
-const toggleDropdown = (type: 'source' | 'target' | 'speaker' | 'tone') => {
+const toggleDropdown = (type: 'source' | 'target' | 'speaker' | 'tone' | 'evaluationProfile') => {
const states = {
source: sourceDropdownOpen,
target: targetDropdownOpen,
speaker: speakerDropdownOpen,
- tone: toneDropdownOpen
+ tone: toneDropdownOpen,
+ evaluationProfile: evaluationProfileDropdownOpen
};
const targetState = states[type];
@@ -186,6 +189,12 @@ const currentToneLabel = computed(() => {
return TONE_REGISTER_OPTIONS.find(opt => opt.value === settings.toneRegister)?.label || '正式专业';
});
+const currentEvaluationProfileLabel = computed(() => {
+ if (!settings.evaluationProfileId) return '使用主翻译配置(默认)';
+ const profile = settings.profiles.find(p => p.id === settings.evaluationProfileId);
+ return profile ? `${profile.name} — ${profile.modelName}` : '使用主翻译配置(默认)';
+});
+
const swapLanguages = () => {
const temp = { ...settings.sourceLang };
settings.sourceLang = { ...settings.targetLang };
@@ -216,6 +225,20 @@ const evaluateTranslation = async () => {
isEvaluating.value = true;
evaluationResult.value = null;
+ // Determine which API config to use for evaluation
+ let apiBaseUrl = settings.apiBaseUrl;
+ let apiKey = settings.apiKey;
+ let modelName = settings.modelName;
+
+ if (settings.evaluationProfileId) {
+ const profile = settings.profiles.find(p => p.id === settings.evaluationProfileId);
+ if (profile) {
+ apiBaseUrl = profile.apiBaseUrl;
+ apiKey = profile.apiKey;
+ modelName = profile.modelName;
+ }
+ }
+
const evaluationPrompt = settings.evaluationPromptTemplate
.replace(/{SOURCE_LANG}/g, sourceLang.value.englishName)
.replace(/{TARGET_LANG}/g, targetLang.value.englishName)
@@ -226,7 +249,7 @@ const evaluateTranslation = async () => {
.replace(/{TRANSLATED_TEXT}/g, targetText.value);
const requestBody = {
- model: settings.modelName,
+ model: modelName,
messages: [
{ role: "system", content: "You are a professional translation auditor. You must respond in valid JSON format." },
{ role: "user", content: evaluationPrompt }
@@ -238,8 +261,8 @@ const evaluateTranslation = async () => {
try {
const response = await invoke
{{ evaluationResult.improvements }}
@@ -773,6 +796,69 @@ const translate = async () => { )">