Add retranslate
This commit is contained in:
@@ -809,4 +809,5 @@ export const languageEnglish = {
|
|||||||
summarizationPrompt: "Summarization Prompt",
|
summarizationPrompt: "Summarization Prompt",
|
||||||
translatorPrompt: "Translation Prompt",
|
translatorPrompt: "Translation Prompt",
|
||||||
translateBeforeHTMLFormatting: "Translate Before HTML Formatting",
|
translateBeforeHTMLFormatting: "Translate Before HTML Formatting",
|
||||||
|
retranslate: "Retranslate",
|
||||||
}
|
}
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
import { type Unsubscriber } from "svelte/store";
|
import { type Unsubscriber } from "svelte/store";
|
||||||
import { isEqual } from "lodash";
|
import { isEqual } from "lodash";
|
||||||
import { sayTTS } from "src/ts/process/tts";
|
import { sayTTS } from "src/ts/process/tts";
|
||||||
import { capitalize } from "src/ts/util";
|
import { capitalize, sleep } from "src/ts/util";
|
||||||
import { longpress } from "src/ts/gui/longtouch";
|
import { longpress } from "src/ts/gui/longtouch";
|
||||||
import { ColorSchemeTypeStore } from "src/ts/gui/colorscheme";
|
import { ColorSchemeTypeStore } from "src/ts/gui/colorscheme";
|
||||||
import { ConnectionOpenStore } from "src/ts/sync/multiuser";
|
import { ConnectionOpenStore } from "src/ts/sync/multiuser";
|
||||||
@@ -21,6 +21,7 @@
|
|||||||
let translating = $state(false)
|
let translating = $state(false)
|
||||||
let editMode = $state(false)
|
let editMode = $state(false)
|
||||||
let statusMessage:string = $state('')
|
let statusMessage:string = $state('')
|
||||||
|
let retranslate = false
|
||||||
interface Props {
|
interface Props {
|
||||||
message?: string;
|
message?: string;
|
||||||
name?: string;
|
name?: string;
|
||||||
@@ -148,9 +149,13 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(translateText){
|
if(translateText){
|
||||||
if(DBState.db.translator === 'llm' && DBState.db.translateBeforeHTMLFormatting){
|
let doRetranslate = retranslate
|
||||||
|
retranslate = false
|
||||||
|
console.log(`retranslating: ${doRetranslate}`)
|
||||||
|
if(DBState.db.translatorType === 'llm' && DBState.db.translateBeforeHTMLFormatting){
|
||||||
|
await sleep(100)
|
||||||
translating = true
|
translating = true
|
||||||
data = await translateHTML(data, false, charArg, chatID)
|
data = await translateHTML(data, false, charArg, chatID, doRetranslate)
|
||||||
translating = false
|
translating = false
|
||||||
const marked = await ParseMarkdown(data, charArg, mode, chatID, getCbsCondition())
|
const marked = await ParseMarkdown(data, charArg, mode, chatID, getCbsCondition())
|
||||||
lastParsedQueue = marked
|
lastParsedQueue = marked
|
||||||
@@ -160,7 +165,7 @@
|
|||||||
else if(!DBState.db.legacyTranslation){
|
else if(!DBState.db.legacyTranslation){
|
||||||
const marked = await ParseMarkdown(data, charArg, 'pretranslate', chatID, getCbsCondition())
|
const marked = await ParseMarkdown(data, charArg, 'pretranslate', chatID, getCbsCondition())
|
||||||
translating = true
|
translating = true
|
||||||
const translated = await postTranslationParse(await translateHTML(marked, false, charArg, chatID))
|
const translated = await postTranslationParse(await translateHTML(marked, false, charArg, chatID, doRetranslate))
|
||||||
translating = false
|
translating = false
|
||||||
lastParsedQueue = translated
|
lastParsedQueue = translated
|
||||||
lastCharArg = charArg
|
lastCharArg = charArg
|
||||||
@@ -169,7 +174,7 @@
|
|||||||
else{
|
else{
|
||||||
const marked = await ParseMarkdown(data, charArg, mode, chatID, getCbsCondition())
|
const marked = await ParseMarkdown(data, charArg, mode, chatID, getCbsCondition())
|
||||||
translating = true
|
translating = true
|
||||||
const translated = await translateHTML(marked, false, charArg, chatID)
|
const translated = await translateHTML(marked, false, charArg, chatID, doRetranslate)
|
||||||
translating = false
|
translating = false
|
||||||
lastParsedQueue = translated
|
lastParsedQueue = translated
|
||||||
lastCharArg = charArg
|
lastCharArg = charArg
|
||||||
@@ -228,24 +233,40 @@
|
|||||||
|
|
||||||
|
|
||||||
{#snippet genInfo()}
|
{#snippet genInfo()}
|
||||||
{#if messageGenerationInfo && DBState.db.requestInfoInsideChat}
|
<div class="flex flex-col items-end">
|
||||||
<div>
|
{#if messageGenerationInfo && DBState.db.requestInfoInsideChat}
|
||||||
<button class="text-sm p-1 text-textcolor2 border-darkborderc float-end mr-2 my-2
|
|
||||||
hover:ring-darkbutton hover:ring rounded-md hover:text-textcolor transition-all flex justify-center items-center"
|
<button class="text-sm p-1 text-textcolor2 border-darkborderc float-end mr-2 my-1
|
||||||
onclick={() => {
|
hover:ring-darkbutton hover:ring rounded-md hover:text-textcolor transition-all flex justify-center items-center"
|
||||||
alertRequestData({
|
onclick={() => {
|
||||||
genInfo: messageGenerationInfo,
|
alertRequestData({
|
||||||
idx: idx,
|
genInfo: messageGenerationInfo,
|
||||||
})
|
idx: idx,
|
||||||
}}
|
})
|
||||||
>
|
}}
|
||||||
<BotIcon size={20} />
|
>
|
||||||
<span class="ml-1">
|
<BotIcon size={20} />
|
||||||
{capitalize(getModelInfo(messageGenerationInfo.model).shortName)}
|
<span class="ml-1">
|
||||||
</span>
|
{capitalize(getModelInfo(messageGenerationInfo.model).shortName)}
|
||||||
</button>
|
</span>
|
||||||
|
</button>
|
||||||
|
{/if}
|
||||||
|
{#if DBState.db.translatorType === 'llm' && translated && !lastParsed.startsWith(`div class="flex justify-center items-center"><div class="animate-spin`)}
|
||||||
|
<button class="text-sm p-1 text-textcolor2 border-darkborderc float-end mr-2 my-1
|
||||||
|
hover:ring-darkbutton hover:ring rounded-md hover:text-textcolor transition-all flex justify-center items-center"
|
||||||
|
onclick={() => {
|
||||||
|
lastParsed = `<div class="flex justify-center items-center"><div class="animate-spin rounded-full h-8 w-8 border-b-2 border-textcolor"></div></div>`
|
||||||
|
retranslate = true
|
||||||
|
$ReloadGUIPointer = $ReloadGUIPointer + 1
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<RefreshCcwIcon size={20} />
|
||||||
|
<span class="ml-1">
|
||||||
|
{language.retranslate}
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
|
||||||
{/snippet}
|
{/snippet}
|
||||||
|
|
||||||
{#snippet textBox()}
|
{#snippet textBox()}
|
||||||
|
|||||||
@@ -216,7 +216,7 @@ export function isExpTranslator(){
|
|||||||
return db.translatorType === 'llm' || db.translatorType === 'deepl' || db.translatorType === 'deeplX'
|
return db.translatorType === 'llm' || db.translatorType === 'deepl' || db.translatorType === 'deeplX'
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function translateHTML(html: string, reverse:boolean, charArg:simpleCharacterArgument|string = '', chatID:number): Promise<string> {
|
export async function translateHTML(html: string, reverse:boolean, charArg:simpleCharacterArgument|string = '', chatID:number, regenerate = false): Promise<string> {
|
||||||
let alwaysExistChar: character | groupChat | simpleCharacterArgument;
|
let alwaysExistChar: character | groupChat | simpleCharacterArgument;
|
||||||
if(charArg !== ''){
|
if(charArg !== ''){
|
||||||
if(typeof(charArg) === 'string'){
|
if(typeof(charArg) === 'string'){
|
||||||
@@ -245,7 +245,7 @@ export async function translateHTML(html: string, reverse:boolean, charArg:simpl
|
|||||||
}
|
}
|
||||||
if(db.translatorType === 'llm'){
|
if(db.translatorType === 'llm'){
|
||||||
const tr = db.translator || 'en'
|
const tr = db.translator || 'en'
|
||||||
return translateLLM(html, {to: tr})
|
return translateLLM(html, {to: tr, regenerate})
|
||||||
}
|
}
|
||||||
const dom = new DOMParser().parseFromString(html, 'text/html');
|
const dom = new DOMParser().parseFromString(html, 'text/html');
|
||||||
console.log(html)
|
console.log(html)
|
||||||
@@ -447,10 +447,12 @@ function needSuperChunkedTranslate(){
|
|||||||
return getDatabase().translatorType === 'deeplX'
|
return getDatabase().translatorType === 'deeplX'
|
||||||
}
|
}
|
||||||
|
|
||||||
async function translateLLM(text:string, arg:{to:string}):Promise<string>{
|
async function translateLLM(text:string, arg:{to:string, regenerate?:boolean}):Promise<string>{
|
||||||
const cacheMatch = await LLMCacheStorage.getItem(text)
|
if(!arg.regenerate){
|
||||||
if(cacheMatch){
|
const cacheMatch = await LLMCacheStorage.getItem(text)
|
||||||
return cacheMatch as string
|
if(cacheMatch){
|
||||||
|
return cacheMatch as string
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const styleDecodeRegex = /\<risu-style\>(.+?)\<\/risu-style\>/gms
|
const styleDecodeRegex = /\<risu-style\>(.+?)\<\/risu-style\>/gms
|
||||||
let styleDecodes:string[] = []
|
let styleDecodes:string[] = []
|
||||||
|
|||||||
Reference in New Issue
Block a user