cherry-studio/src/renderer/src/services/TranslateService.ts
Lei Huang e74391562b
fix: prompt-injection-like behavior in translation #956 (#974)
* fix: prompt-injection-like behavior in translation #956

* fix: edit translation prompt to embded text to system prompt
2025-02-04 15:49:17 +08:00

38 lines
1.1 KiB
TypeScript

import i18n from '@renderer/i18n'
import store from '@renderer/store'
import { fetchTranslate } from './ApiService'
import { getDefaultTopic } from './AssistantService'
import { getDefaultTranslateAssistant } from './AssistantService'
import { getUserMessage } from './MessagesService'
export const translateText = async (text: string, targetLanguage: string, onResponse?: (text: string) => void) => {
const translateModel = store.getState().llm.translateModel
if (!translateModel) {
window.message.error({
content: i18n.t('translate.error.not_configured'),
key: 'translate-message'
})
return Promise.reject(new Error(i18n.t('translate.error.not_configured')))
}
const assistant = getDefaultTranslateAssistant(targetLanguage, text)
const message = getUserMessage({
assistant,
topic: getDefaultTopic('default'),
type: 'text',
content: ''
})
const translatedText = await fetchTranslate({ message, assistant, onResponse })
const trimmedText = translatedText.trim()
if (!trimmedText) {
return Promise.reject(new Error(i18n.t('translate.error.failed')))
}
return trimmedText
}