2025-09-01 18:56:48 +08:00
export const DEFAULT _HTTP _TIMEOUT = 10000 ; // 调用超时时间
export const DEFAULT _FETCH _LIMIT = 10 ; // 默认最大任务数量
export const DEFAULT _FETCH _INTERVAL = 100 ; // 默认任务间隔时间
2025-10-16 19:35:28 +08:00
export const DEFAULT _BATCH _INTERVAL = 400 ; // 批处理请求间隔时间
2025-09-03 00:37:35 +08:00
export const DEFAULT _BATCH _SIZE = 10 ; // 每次最多发送段落数量
export const DEFAULT _BATCH _LENGTH = 10000 ; // 每次发送最大文字数量
2025-09-03 20:43:07 +08:00
export const DEFAULT _CONTEXT _SIZE = 3 ; // 上下文会话数量
2025-09-01 18:56:48 +08:00
export const INPUT _PLACE _URL = "{{url}}" ; // 占位符
export const INPUT _PLACE _FROM = "{{from}}" ; // 占位符
export const INPUT _PLACE _TO = "{{to}}" ; // 占位符
export const INPUT _PLACE _TEXT = "{{text}}" ; // 占位符
export const INPUT _PLACE _KEY = "{{key}}" ; // 占位符
export const INPUT _PLACE _MODEL = "{{model}}" ; // 占位符
2025-10-04 21:25:54 +08:00
// export const OPT_DICT_BAIDU = "Baidu";
2025-10-03 22:07:48 +08:00
export const OPT _DICT _BING = "Bing" ;
2025-10-03 18:28:50 +08:00
export const OPT _DICT _YOUDAO = "Youdao" ;
2025-10-03 22:07:48 +08:00
export const OPT _DICT _ALL = [ OPT _DICT _BING , OPT _DICT _YOUDAO ] ;
2025-10-03 18:28:50 +08:00
export const OPT _DICT _MAP = new Set ( OPT _DICT _ALL ) ;
export const OPT _SUG _BAIDU = "Baidu" ;
export const OPT _SUG _YOUDAO = "Youdao" ;
export const OPT _SUG _ALL = [ OPT _SUG _BAIDU , OPT _SUG _YOUDAO ] ;
export const OPT _SUG _MAP = new Set ( OPT _SUG _ALL ) ;
2025-09-01 18:56:48 +08:00
2025-10-04 21:25:54 +08:00
export const OPT _TRANS _BUILTINAI = "BuiltinAI" ;
2025-09-01 18:56:48 +08:00
export const OPT _TRANS _GOOGLE = "Google" ;
export const OPT _TRANS _GOOGLE _2 = "Google2" ;
export const OPT _TRANS _MICROSOFT = "Microsoft" ;
2025-10-11 14:46:14 +08:00
export const OPT _TRANS _AZUREAI = "AzureAI" ;
2025-09-01 18:56:48 +08:00
export const OPT _TRANS _DEEPL = "DeepL" ;
export const OPT _TRANS _DEEPLX = "DeepLX" ;
export const OPT _TRANS _DEEPLFREE = "DeepLFree" ;
export const OPT _TRANS _NIUTRANS = "NiuTrans" ;
export const OPT _TRANS _BAIDU = "Baidu" ;
export const OPT _TRANS _TENCENT = "Tencent" ;
export const OPT _TRANS _VOLCENGINE = "Volcengine" ;
export const OPT _TRANS _OPENAI = "OpenAI" ;
export const OPT _TRANS _GEMINI = "Gemini" ;
export const OPT _TRANS _GEMINI _2 = "Gemini2" ;
export const OPT _TRANS _CLAUDE = "Claude" ;
export const OPT _TRANS _CLOUDFLAREAI = "CloudflareAI" ;
export const OPT _TRANS _OLLAMA = "Ollama" ;
export const OPT _TRANS _OPENROUTER = "OpenRouter" ;
export const OPT _TRANS _CUSTOMIZE = "Custom" ;
2025-09-24 23:24:00 +08:00
// 内置支持的翻译引擎
2025-10-30 00:19:13 +08:00
export const OPT _ALL _TRANS _TYPES = [
2025-10-04 21:25:54 +08:00
OPT _TRANS _BUILTINAI ,
2025-09-01 18:56:48 +08:00
OPT _TRANS _GOOGLE ,
OPT _TRANS _GOOGLE _2 ,
OPT _TRANS _MICROSOFT ,
2025-10-11 14:46:14 +08:00
OPT _TRANS _AZUREAI ,
2025-10-04 21:25:54 +08:00
// OPT_TRANS_BAIDU,
2025-09-01 18:56:48 +08:00
OPT _TRANS _TENCENT ,
OPT _TRANS _VOLCENGINE ,
OPT _TRANS _DEEPL ,
OPT _TRANS _DEEPLFREE ,
OPT _TRANS _DEEPLX ,
OPT _TRANS _NIUTRANS ,
OPT _TRANS _OPENAI ,
OPT _TRANS _GEMINI ,
OPT _TRANS _GEMINI _2 ,
OPT _TRANS _CLAUDE ,
OPT _TRANS _CLOUDFLAREAI ,
OPT _TRANS _OLLAMA ,
OPT _TRANS _OPENROUTER ,
OPT _TRANS _CUSTOMIZE ,
] ;
2025-10-02 11:33:33 +08:00
export const OPT _LANGDETECTOR _ALL = [
2025-10-04 21:25:54 +08:00
OPT _TRANS _BUILTINAI ,
2025-10-02 11:33:33 +08:00
OPT _TRANS _GOOGLE ,
OPT _TRANS _MICROSOFT ,
OPT _TRANS _BAIDU ,
OPT _TRANS _TENCENT ,
] ;
2025-10-04 21:25:54 +08:00
export const OPT _LANGDETECTOR _MAP = new Set ( OPT _LANGDETECTOR _ALL ) ;
2025-09-24 23:24:00 +08:00
// 翻译引擎特殊集合
export const API _SPE _TYPES = {
// 内置翻译
2025-10-30 00:19:13 +08:00
builtin : new Set ( OPT _ALL _TRANS _TYPES ) ,
2025-09-24 23:24:00 +08:00
// 机器翻译
machine : new Set ( [
OPT _TRANS _MICROSOFT ,
OPT _TRANS _DEEPLFREE ,
OPT _TRANS _BAIDU ,
OPT _TRANS _TENCENT ,
OPT _TRANS _VOLCENGINE ,
] ) ,
// AI翻译
ai : new Set ( [
OPT _TRANS _OPENAI ,
OPT _TRANS _GEMINI ,
OPT _TRANS _GEMINI _2 ,
OPT _TRANS _CLAUDE ,
OPT _TRANS _OLLAMA ,
OPT _TRANS _OPENROUTER ,
] ) ,
// 支持多key
mulkeys : new Set ( [
2025-10-11 14:46:14 +08:00
OPT _TRANS _AZUREAI ,
2025-09-24 23:24:00 +08:00
OPT _TRANS _DEEPL ,
OPT _TRANS _OPENAI ,
OPT _TRANS _GEMINI ,
OPT _TRANS _GEMINI _2 ,
OPT _TRANS _CLAUDE ,
OPT _TRANS _CLOUDFLAREAI ,
OPT _TRANS _OLLAMA ,
OPT _TRANS _OPENROUTER ,
OPT _TRANS _NIUTRANS ,
OPT _TRANS _CUSTOMIZE ,
] ) ,
// 支持批处理
batch : new Set ( [
2025-10-11 14:46:14 +08:00
OPT _TRANS _AZUREAI ,
2025-09-24 23:24:00 +08:00
OPT _TRANS _GOOGLE _2 ,
OPT _TRANS _MICROSOFT ,
OPT _TRANS _TENCENT ,
OPT _TRANS _DEEPL ,
OPT _TRANS _OPENAI ,
OPT _TRANS _GEMINI ,
OPT _TRANS _GEMINI _2 ,
OPT _TRANS _CLAUDE ,
OPT _TRANS _OLLAMA ,
OPT _TRANS _OPENROUTER ,
OPT _TRANS _CUSTOMIZE ,
] ) ,
// 支持上下文
context : new Set ( [
OPT _TRANS _OPENAI ,
OPT _TRANS _GEMINI ,
OPT _TRANS _GEMINI _2 ,
OPT _TRANS _CLAUDE ,
OPT _TRANS _OLLAMA ,
OPT _TRANS _OPENROUTER ,
OPT _TRANS _CUSTOMIZE ,
] ) ,
} ;
2025-09-03 20:43:07 +08:00
2025-09-24 23:24:00 +08:00
export const BUILTIN _STONES = [
"formal" , // 正式风格
"casual" , // 口语风格
"neutral" , // 中性风格
"technical" , // 技术风格
"marketing" , // 营销风格
"Literary" , // 文学风格
"academic" , // 学术风格
"legal" , // 法律风格
"literal" , // 直译风格
"ldiomatic" , // 意译风格
"transcreation" , // 创译风格
"machine-like" , // 机器风格
"concise" , // 简明风格
] ;
2025-10-01 13:22:22 +08:00
export const BUILTIN _PLACEHOLDERS = [ "{ }" , "{{ }}" , "[ ]" , "[[ ]]" ] ;
2025-10-01 15:35:20 +08:00
export const BUILTIN _PLACETAGS = [ "i" , "a" , "b" , "x" ] ;
2025-09-24 23:24:00 +08:00
2025-09-01 18:56:48 +08:00
export const OPT _LANGS _TO = [
[ "en" , "English - English" ] ,
[ "zh-CN" , "Simplified Chinese - 简体中文" ] ,
[ "zh-TW" , "Traditional Chinese - 繁體中文" ] ,
[ "ar" , "Arabic - العربية" ] ,
[ "bg" , "Bulgarian - Български" ] ,
[ "ca" , "Catalan - Català" ] ,
[ "hr" , "Croatian - Hrvatski" ] ,
[ "cs" , "Czech - Čeština" ] ,
[ "da" , "Danish - Dansk" ] ,
[ "nl" , "Dutch - Nederlands" ] ,
[ "fi" , "Finnish - Suomi" ] ,
[ "fr" , "French - Français" ] ,
[ "de" , "German - Deutsch" ] ,
[ "el" , "Greek - Ελληνικά" ] ,
[ "hi" , "Hindi - हिन्दी" ] ,
[ "hu" , "Hungarian - Magyar" ] ,
[ "id" , "Indonesian - Indonesia" ] ,
[ "it" , "Italian - Italiano" ] ,
[ "ja" , "Japanese - 日本語" ] ,
[ "ko" , "Korean - 한국어" ] ,
[ "ms" , "Malay - Melayu" ] ,
[ "mt" , "Maltese - Malti" ] ,
[ "nb" , "Norwegian - Norsk Bokmål" ] ,
[ "pl" , "Polish - Polski" ] ,
[ "pt" , "Portuguese - Português" ] ,
[ "ro" , "Romanian - Română" ] ,
[ "ru" , "Russian - Русский" ] ,
[ "sk" , "Slovak - Slovenčina" ] ,
[ "sl" , "Slovenian - Slovenščina" ] ,
[ "es" , "Spanish - Español" ] ,
[ "sv" , "Swedish - Svenska" ] ,
[ "ta" , "Tamil - தமிழ்" ] ,
[ "te" , "Telugu - తెలుగు" ] ,
[ "th" , "Thai - ไทย" ] ,
[ "tr" , "Turkish - Türkçe" ] ,
[ "uk" , "Ukrainian - Українська" ] ,
[ "vi" , "Vietnamese - Tiếng Việt" ] ,
] ;
2025-09-27 21:21:56 +08:00
export const OPT _LANGS _LIST = OPT _LANGS _TO . map ( ( [ lang ] ) => lang ) ;
2025-09-01 18:56:48 +08:00
export const OPT _LANGS _FROM = [ [ "auto" , "Auto-detect" ] , ... OPT _LANGS _TO ] ;
2025-09-27 21:21:56 +08:00
export const OPT _LANGS _MAP = new Map ( OPT _LANGS _TO ) ;
// CODE->名称
export const OPT _LANGS _SPEC _NAME = new Map (
OPT _LANGS _FROM . map ( ( [ key , val ] ) => [ key , val . split ( " - " ) [ 0 ] ] )
) ;
export const OPT _LANGS _SPEC _DEFAULT = new Map (
OPT _LANGS _FROM . map ( ( [ key ] ) => [ key , key ] )
) ;
export const OPT _LANGS _SPEC _DEFAULT _UC = new Map (
OPT _LANGS _FROM . map ( ( [ key ] ) => [ key , key . toUpperCase ( ) ] )
) ;
export const OPT _LANGS _TO _SPEC = {
2025-10-04 21:25:54 +08:00
[ OPT _TRANS _BUILTINAI ] : new Map ( [
... OPT _LANGS _SPEC _DEFAULT ,
[ "zh-CN" , "zh" ] ,
[ "zh-TW" , "zh" ] ,
] ) ,
2025-09-27 21:21:56 +08:00
[ OPT _TRANS _GOOGLE ] : OPT _LANGS _SPEC _DEFAULT ,
[ OPT _TRANS _GOOGLE _2 ] : OPT _LANGS _SPEC _DEFAULT ,
2025-09-01 18:56:48 +08:00
[ OPT _TRANS _MICROSOFT ] : new Map ( [
2025-09-27 21:21:56 +08:00
... OPT _LANGS _SPEC _DEFAULT ,
2025-09-01 18:56:48 +08:00
[ "auto" , "" ] ,
[ "zh-CN" , "zh-Hans" ] ,
[ "zh-TW" , "zh-Hant" ] ,
] ) ,
2025-10-11 14:46:14 +08:00
[ OPT _TRANS _AZUREAI ] : new Map ( [
... OPT _LANGS _SPEC _DEFAULT ,
[ "auto" , "" ] ,
[ "zh-CN" , "zh-Hans" ] ,
[ "zh-TW" , "zh-Hant" ] ,
] ) ,
2025-09-01 18:56:48 +08:00
[ OPT _TRANS _DEEPL ] : new Map ( [
2025-09-27 21:21:56 +08:00
... OPT _LANGS _SPEC _DEFAULT _UC ,
2025-09-01 18:56:48 +08:00
[ "auto" , "" ] ,
[ "zh-CN" , "ZH" ] ,
[ "zh-TW" , "ZH" ] ,
] ) ,
[ OPT _TRANS _DEEPLFREE ] : new Map ( [
2025-09-27 21:21:56 +08:00
... OPT _LANGS _SPEC _DEFAULT _UC ,
2025-09-01 18:56:48 +08:00
[ "auto" , "auto" ] ,
[ "zh-CN" , "ZH" ] ,
[ "zh-TW" , "ZH" ] ,
] ) ,
[ OPT _TRANS _DEEPLX ] : new Map ( [
2025-09-27 21:21:56 +08:00
... OPT _LANGS _SPEC _DEFAULT _UC ,
2025-09-01 18:56:48 +08:00
[ "auto" , "auto" ] ,
[ "zh-CN" , "ZH" ] ,
[ "zh-TW" , "ZH" ] ,
] ) ,
[ OPT _TRANS _NIUTRANS ] : new Map ( [
2025-09-27 21:21:56 +08:00
... OPT _LANGS _SPEC _DEFAULT ,
2025-09-01 18:56:48 +08:00
[ "auto" , "auto" ] ,
[ "zh-CN" , "zh" ] ,
[ "zh-TW" , "cht" ] ,
] ) ,
[ OPT _TRANS _VOLCENGINE ] : new Map ( [
2025-09-27 21:21:56 +08:00
... OPT _LANGS _SPEC _DEFAULT ,
2025-09-01 18:56:48 +08:00
[ "auto" , "auto" ] ,
[ "zh-CN" , "zh" ] ,
[ "zh-TW" , "zh-Hant" ] ,
] ) ,
[ OPT _TRANS _BAIDU ] : new Map ( [
2025-09-27 21:21:56 +08:00
... OPT _LANGS _SPEC _DEFAULT ,
2025-09-01 18:56:48 +08:00
[ "zh-CN" , "zh" ] ,
[ "zh-TW" , "cht" ] ,
[ "ar" , "ara" ] ,
[ "bg" , "bul" ] ,
[ "ca" , "cat" ] ,
[ "hr" , "hrv" ] ,
[ "da" , "dan" ] ,
[ "fi" , "fin" ] ,
[ "fr" , "fra" ] ,
[ "hi" , "mai" ] ,
[ "ja" , "jp" ] ,
[ "ko" , "kor" ] ,
[ "ms" , "may" ] ,
[ "mt" , "mlt" ] ,
[ "nb" , "nor" ] ,
[ "ro" , "rom" ] ,
[ "ru" , "ru" ] ,
[ "sl" , "slo" ] ,
[ "es" , "spa" ] ,
[ "sv" , "swe" ] ,
[ "ta" , "tam" ] ,
[ "te" , "tel" ] ,
[ "uk" , "ukr" ] ,
[ "vi" , "vie" ] ,
] ) ,
[ OPT _TRANS _TENCENT ] : new Map ( [
[ "auto" , "auto" ] ,
[ "zh-CN" , "zh" ] ,
[ "zh-TW" , "zh" ] ,
[ "en" , "en" ] ,
[ "ar" , "ar" ] ,
[ "de" , "de" ] ,
[ "ru" , "ru" ] ,
[ "fr" , "fr" ] ,
[ "fi" , "fil" ] ,
[ "ko" , "ko" ] ,
[ "ms" , "ms" ] ,
[ "pt" , "pt" ] ,
[ "ja" , "ja" ] ,
[ "th" , "th" ] ,
[ "tr" , "tr" ] ,
[ "es" , "es" ] ,
[ "it" , "it" ] ,
[ "hi" , "hi" ] ,
[ "id" , "id" ] ,
[ "vi" , "vi" ] ,
] ) ,
2025-09-27 21:21:56 +08:00
[ OPT _TRANS _OPENAI ] : OPT _LANGS _SPEC _DEFAULT ,
[ OPT _TRANS _GEMINI ] : OPT _LANGS _SPEC _DEFAULT ,
[ OPT _TRANS _GEMINI _2 ] : OPT _LANGS _SPEC _DEFAULT ,
[ OPT _TRANS _CLAUDE ] : OPT _LANGS _SPEC _DEFAULT ,
[ OPT _TRANS _OLLAMA ] : OPT _LANGS _SPEC _DEFAULT ,
[ OPT _TRANS _OPENROUTER ] : OPT _LANGS _SPEC _DEFAULT ,
[ OPT _TRANS _CLOUDFLAREAI ] : OPT _LANGS _SPEC _DEFAULT ,
[ OPT _TRANS _CUSTOMIZE ] : OPT _LANGS _SPEC _DEFAULT ,
2025-09-01 18:56:48 +08:00
} ;
2025-09-27 21:21:56 +08:00
const specToCode = ( m ) =>
new Map (
Array . from ( m . entries ( ) ) . map ( ( [ k , v ] ) => {
if ( v === "" ) {
return [ "auto" , "auto" ] ;
}
if ( v === "zh" || v === "ZH" ) {
return [ v , "zh-CN" ] ;
}
return [ v , k ] ;
} )
) ;
// 名称->CODE
export const OPT _LANGS _TO _CODE = { } ;
Object . entries ( OPT _LANGS _TO _SPEC ) . forEach ( ( [ t , m ] ) => {
OPT _LANGS _TO _CODE [ t ] = specToCode ( m ) ;
} ) ;
2025-09-01 18:56:48 +08:00
2025-10-17 01:47:36 +08:00
export const defaultSystemPrompt = ` Act as a translation API. Output a single raw JSON object only. No extra text or fences.
2025-09-24 23:24:00 +08:00
Input :
{ "targetLanguage" : "<lang>" , "title" : "<context>" , "description" : "<context>" , "segments" : [ { "id" : 1 , "text" : "..." } ] , "glossary" : { "sourceTerm" : "targetTerm" } , "tone" : "<formal|casual>" }
2025-09-03 00:37:35 +08:00
Output :
2025-09-24 23:24:00 +08:00
{ "translations" : [ { "id" : 1 , "text" : "..." , "sourceLanguage" : "<detected>" } ] }
2025-09-03 00:37:35 +08:00
2025-09-24 23:24:00 +08:00
Rules :
1. Use title / description for context only ; do not output them .
2. Keep id , order , and count of segments .
3. Preserve whitespace , HTML entities , and all HTML - like tags ( e . g . , < i1 > , < a1 > ) . Translate inner text only .
4. Highest priority : Follow 'glossary' . Use value for translation ; if value is "" , keep the key .
5. Do not translate : content in < code > , < pre > , text enclosed in backticks , or placeholders like { 1 } , { { 1 } } , [ 1 ] , [ [ 1 ] ] .
6. Apply the specified tone to the translation .
7. Detect sourceLanguage for each segment .
8. Return empty or unchanged inputs as is .
2025-09-03 00:37:35 +08:00
2025-09-24 23:24:00 +08:00
Example :
Input : { "targetLanguage" : "zh-CN" , "segments" : [ { "id" : 1 , "text" : "A <b>React</b> component." } ] , "glossary" : { "component" : "组件" , "React" : "" } }
Output : { "translations" : [ { "id" : 1 , "text" : "一个<b>React</b>组件" , "sourceLanguage" : "en" } ] }
2025-09-03 00:37:35 +08:00
2025-09-24 23:24:00 +08:00
Fail - safe : On any error , return { "translations" : [ ] } . ` ;
2025-09-03 00:37:35 +08:00
2025-10-10 21:17:51 +08:00
// const defaultSubtitlePrompt = `Goal: Convert raw subtitle event JSON into a clean, sentence-based JSON array.
2025-10-09 23:55:06 +08:00
2025-10-10 21:17:51 +08:00
// Output (valid JSON array, output ONLY this array):
// [{
// "text": "string", // Full sentence with correct punctuation
// "translation": "string", // Translation in ${INPUT_PLACE_TO}
// "start": int, // Start time (ms)
// "end": int, // End time (ms)
// }]
2025-10-09 23:55:06 +08:00
2025-10-10 21:17:51 +08:00
// Guidelines:
// 1. **Segmentation**: Merge sequential 'utf8' strings from 'segs' into full sentences, merging groups logically.
// 2. **Punctuation**: Ensure proper sentence-final punctuation (., ?, !); add if missing.
// 3. **Translation**: Translate 'text' into ${INPUT_PLACE_TO}, place result in 'translation'.
// 4. **Special Cases**: '[Music]' (and similar cues) are standalone entries. Translate appropriately (e.g., '[音乐]', '[Musique]').
// `;
2025-10-17 01:47:36 +08:00
export const defaultSubtitlePrompt = ` You are an expert AI for subtitle generation. Convert a JSON array of word-level timestamps into a bilingual VTT file.
2025-10-10 21:17:51 +08:00
* * Workflow : * *
1. Merge \ ` text \` fields into complete sentences; ignore empty text.
2. Split long sentences into smaller , manageable subtitle cues ( one sentence per cue ) .
3. Translate each cue into $ { INPUT _PLACE _TO } .
4. Format as VTT :
- Start with \ ` WEBVTT \` .
- Each cue : timestamps ( \ ` start --> end \` in milliseconds), original text, translated text.
- Keep non - speech text ( e . g . , \ ` [Music] \` ) untranslated.
- Separate cues with a blank line .
* * Output : * * Only the pure VTT content .
* * Example : * *
\ ` \` \` vtt
WEBVTT
1000 -- > 3500
Hello world !
你好 , 世界 !
4000 -- > 6000
Good morning .
早上好 。
\ ` \` \` ` ;
2025-10-09 23:55:06 +08:00
2025-10-05 17:47:29 +08:00
const defaultRequestHook = ` async (args, { url, body, headers, userMsg, method } = {}) => {
2025-10-16 23:51:49 +08:00
console . log ( "request hook args:" , { args , url , body , headers , userMsg , method } ) ;
2025-10-05 17:47:29 +08:00
// return { url, body, headers, userMsg, method };
2025-10-16 23:51:49 +08:00
} ; ` ;
2025-09-25 23:08:39 +08:00
const defaultResponseHook = ` async ({ res, ...args }) => {
2025-10-16 23:51:49 +08:00
console . log ( "reaponse hook args:" , { res , args } ) ;
2025-09-25 23:08:39 +08:00
// const translations = [["你好", "zh"]];
// const modelMsg = "";
// return { translations, modelMsg };
2025-10-16 23:51:49 +08:00
} ; ` ;
2025-09-25 23:08:39 +08:00
2025-09-24 23:24:00 +08:00
// 翻译接口默认参数
const defaultApi = {
apiSlug : "" , // 唯一标识
apiName : "" , // 接口名称
apiType : "" , // 接口类型
url : "" ,
key : "" ,
model : "" , // 模型名称
systemPrompt : defaultSystemPrompt ,
2025-10-09 23:55:06 +08:00
subtitlePrompt : defaultSubtitlePrompt ,
2025-09-24 23:24:00 +08:00
userPrompt : "" ,
2025-10-01 13:22:22 +08:00
tone : BUILTIN _STONES [ 0 ] , // 翻译风格
placeholder : BUILTIN _PLACEHOLDERS [ 0 ] , // 占位符
placetag : [ BUILTIN _PLACETAGS [ 0 ] ] , // 占位标签
// aiTerms: false, // AI智能专业术语 ( todo: 备用)
2025-09-01 18:56:48 +08:00
customHeader : "" ,
customBody : "" ,
reqHook : "" , // request 钩子函数
resHook : "" , // response 钩子函数
fetchLimit : DEFAULT _FETCH _LIMIT , // 最大请求数量
fetchInterval : DEFAULT _FETCH _INTERVAL , // 请求间隔时间
2025-09-03 20:43:07 +08:00
httpTimeout : DEFAULT _HTTP _TIMEOUT * 30 , // 请求超时时间
2025-09-03 00:37:35 +08:00
batchInterval : DEFAULT _BATCH _INTERVAL , // 批处理请求间隔时间
batchSize : DEFAULT _BATCH _SIZE , // 每次最多发送段落数量
batchLength : DEFAULT _BATCH _LENGTH , // 每次发送最大文字数量
2025-09-03 12:24:18 +08:00
useBatchFetch : false , // 是否启用聚合发送请求
useContext : false , // 是否启用智能上下文
2025-09-03 20:43:07 +08:00
contextSize : DEFAULT _CONTEXT _SIZE , // 智能上下文保留会话数
2025-10-15 00:59:32 +08:00
temperature : 0.0 ,
2025-09-03 00:37:35 +08:00
maxTokens : 20480 ,
2025-09-01 18:56:48 +08:00
think : false ,
thinkIgnore : "qwen3,deepseek-r1" ,
2025-10-11 14:46:14 +08:00
isDisabled : false , // 是否不显示,
region : "" , // Azure 专用
2025-09-01 18:56:48 +08:00
} ;
2025-09-24 23:24:00 +08:00
const defaultApiOpts = {
2025-10-04 21:25:54 +08:00
[ OPT _TRANS _BUILTINAI ] : defaultApi ,
2025-09-01 18:56:48 +08:00
[ OPT _TRANS _GOOGLE ] : {
... defaultApi ,
url : "https://translate.googleapis.com/translate_a/single" ,
} ,
[ OPT _TRANS _GOOGLE _2 ] : {
... defaultApi ,
url : "https://translate-pa.googleapis.com/v1/translateHtml" ,
key : "AIzaSyATBXajvzQLTDHEQbcpq0Ihe0vWDHmO520" ,
2025-09-03 12:24:18 +08:00
useBatchFetch : true ,
2025-09-01 18:56:48 +08:00
} ,
[ OPT _TRANS _MICROSOFT ] : {
... defaultApi ,
2025-09-03 12:24:18 +08:00
useBatchFetch : true ,
2025-09-01 18:56:48 +08:00
} ,
2025-10-11 14:46:14 +08:00
[ OPT _TRANS _AZUREAI ] : {
... defaultApi ,
url : "https://api.cognitive.microsofttranslator.com/translate?api-version=3.0" ,
useBatchFetch : true ,
} ,
2025-09-01 18:56:48 +08:00
[ OPT _TRANS _BAIDU ] : {
... defaultApi ,
} ,
[ OPT _TRANS _TENCENT ] : {
... defaultApi ,
2025-09-03 12:24:18 +08:00
useBatchFetch : true ,
2025-09-01 18:56:48 +08:00
} ,
[ OPT _TRANS _VOLCENGINE ] : {
... defaultApi ,
} ,
[ OPT _TRANS _DEEPL ] : {
... defaultApi ,
url : "https://api-free.deepl.com/v2/translate" ,
2025-09-03 12:24:18 +08:00
useBatchFetch : true ,
2025-09-01 18:56:48 +08:00
} ,
[ OPT _TRANS _DEEPLFREE ] : {
... defaultApi ,
fetchLimit : 1 ,
} ,
[ OPT _TRANS _DEEPLX ] : {
... defaultApi ,
url : "http://localhost:1188/translate" ,
fetchLimit : 1 ,
} ,
[ OPT _TRANS _NIUTRANS ] : {
... defaultApi ,
url : "https://api.niutrans.com/NiuTransServer/translation" ,
dictNo : "" ,
memoryNo : "" ,
} ,
[ OPT _TRANS _OPENAI ] : {
2025-09-24 23:24:00 +08:00
... defaultApi ,
url : "https://api.openai.com/v1/chat/completions" ,
model : "gpt-4" ,
useBatchFetch : true ,
fetchLimit : 1 ,
2025-09-01 18:56:48 +08:00
} ,
[ OPT _TRANS _GEMINI ] : {
... defaultApi ,
url : ` https://generativelanguage.googleapis.com/v1/models/ ${ INPUT _PLACE _MODEL } :generateContent?key= ${ INPUT _PLACE _KEY } ` ,
model : "gemini-2.5-flash" ,
2025-09-24 23:24:00 +08:00
useBatchFetch : true ,
2025-09-01 18:56:48 +08:00
} ,
[ OPT _TRANS _GEMINI _2 ] : {
... defaultApi ,
url : ` https://generativelanguage.googleapis.com/v1beta/openai/chat/completions ` ,
model : "gemini-2.0-flash" ,
2025-09-24 23:24:00 +08:00
useBatchFetch : true ,
2025-09-01 18:56:48 +08:00
} ,
[ OPT _TRANS _CLAUDE ] : {
... defaultApi ,
url : "https://api.anthropic.com/v1/messages" ,
model : "claude-3-haiku-20240307" ,
2025-09-24 23:24:00 +08:00
useBatchFetch : true ,
2025-09-01 18:56:48 +08:00
} ,
[ OPT _TRANS _CLOUDFLAREAI ] : {
... defaultApi ,
url : "https://api.cloudflare.com/client/v4/accounts/{{ACCOUNT_ID}}/ai/run/@cf/meta/m2m100-1.2b" ,
} ,
[ OPT _TRANS _OLLAMA ] : {
2025-09-24 23:24:00 +08:00
... defaultApi ,
url : "http://localhost:11434/v1/chat/completions" ,
model : "llama3.1" ,
useBatchFetch : true ,
2025-09-01 18:56:48 +08:00
} ,
[ OPT _TRANS _OPENROUTER ] : {
... defaultApi ,
url : "https://openrouter.ai/api/v1/chat/completions" ,
model : "openai/gpt-4o" ,
2025-09-24 23:24:00 +08:00
useBatchFetch : true ,
2025-09-01 18:56:48 +08:00
} ,
[ OPT _TRANS _CUSTOMIZE ] : {
2025-09-24 23:24:00 +08:00
... defaultApi ,
url : "https://translate.googleapis.com/translate_a/single?client=gtx&dj=1&dt=t&ie=UTF-8&q={{text}}&sl=en&tl=zh-CN" ,
2025-09-25 23:08:39 +08:00
reqHook : defaultRequestHook ,
resHook : defaultResponseHook ,
2025-09-01 18:56:48 +08:00
} ,
} ;
2025-09-24 23:24:00 +08:00
// 内置翻译接口列表(带参数)
2025-10-30 00:19:13 +08:00
export const DEFAULT _API _LIST = OPT _ALL _TRANS _TYPES . map ( ( apiType ) => ( {
2025-09-24 23:24:00 +08:00
... defaultApiOpts [ apiType ] ,
apiSlug : apiType ,
apiName : apiType ,
apiType ,
} ) ) ;
export const DEFAULT _API _TYPE = OPT _TRANS _MICROSOFT ;
2025-10-30 00:19:13 +08:00
export const DEFAULT _API _SETTING = DEFAULT _API _LIST . find (
( a ) => a . apiType === DEFAULT _API _TYPE
) ;