Skip to content

Commit 7d60f69

Browse files
committed
feat(translator): improve text content formatting in prompts and add skip target selector
fix(translator): some pages become unresponsive when using the translation
1 parent 85dfca3 commit 7d60f69

File tree

7 files changed

+21
-16
lines changed

7 files changed

+21
-16
lines changed

entrypoints/content/components/Chat/Messages/Action.vue

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,12 @@
1414
:key="idx"
1515
class="mt-1 text-sm rounded-lg relative inline-block max-w-full bg-white p-2 text-text-primary cursor-pointer hover:bg-gray-100 transition-all"
1616
:class="disabled ? 'opacity-50 pointer-events-none' : ''"
17+
@click="
18+
(ev) =>
19+
Chat.createActionEventDispatcher(action.type)(action.data, ev.target)
20+
"
1721
>
18-
<div
19-
class="flex items-center gap-2"
20-
@click="
21-
(ev) =>
22-
Chat.createActionEventDispatcher(action.type)(action.data, ev.target)
23-
"
24-
>
22+
<div class="flex items-center gap-2">
2523
<div
2624
v-if="action.icon"
2725
class="shrink-0 grow-0"

entrypoints/content/components/Chat/Messages/Assistant.vue

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
<div
1616
v-if="message.reasoning && message.reasoningTime"
1717
class="text-gray-400 text-sm flex items-center justify-between"
18-
:title="message.reasoning"
1918
>
2019
<div
2120
v-if="message.content || message.done"

entrypoints/content/components/Chat/index.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
bottom: { color: '#E9E9EC', size: 36 }
1313
}"
1414
>
15-
<div class="flex flex-col gap-2 px-4 py-4 pt-11">
15+
<div class="flex flex-col gap-2 px-4 py-4 pt-2">
1616
<div
1717
v-for="(item, index) in chat.historyManager.history.value"
1818
:key="index"

entrypoints/content/composables/useTranslator.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { createSharedComposable, useEventListener } from '@vueuse/core'
2-
import { ref, watch } from 'vue'
2+
import { onMounted, ref, watch } from 'vue'
33

44
import { getTranslatorEnv, handleTranslatorEnvUpdated, init, setTranslatorEnv, toggleTranslation, translation } from '@/entrypoints/content/utils/translator'
55
import { LanguageCode } from '@/utils/language/detect'
@@ -45,6 +45,10 @@ async function _useTranslator() {
4545
})
4646
}
4747

48+
onMounted(() => {
49+
setTranslationMenuTargetLanguage(enabled.value, targetLocale.value)
50+
})
51+
4852
useEventListener(document, 'visibilitychange', async () => {
4953
if (document.visibilityState === 'visible') {
5054
setTranslationMenuTargetLanguage(enabled.value, targetLocale.value)

entrypoints/content/utils/translator/utils/domain-selectors.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ const translationIgnoreSelectorMap = transformSelectorMap({
3939
'.graph-before-activity-overview',
4040
'.contribution-activity-listing',
4141
'.pinned-item-list-item-content > div:first-child',
42+
'[data-skip-target-assigned]',
4243
],
4344
})
4445

entrypoints/content/utils/translator/utils/helper.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export function shouldTranslateText(textContent: string | null) {
2626
}
2727

2828
// ignore urls
29-
if (/^(https?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$/.test(text) && text.indexOf(' ') === -1) {
29+
if (/^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)$/.test(text) && text.indexOf(' ') === -1) {
3030
return false
3131
}
3232

utils/prompts/index.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,10 @@ export const chatWithPageContent = definePrompt(async (question: string, pages:
1515
? `<search_results>
1616
${onlineInfo
1717
.map((page, idx) => {
18+
const text = page.textContent?.replace(/(\s|\t)+/g, ' ').replace(/\n+/g, '\n').trim() ?? ''
1819
return `<search_result id="${idx + 1}">
1920
Title: ${page.title ?? ''} | URL: ${page.url ?? ''}
20-
${page.textContent ?? ''}
21+
${text}
2122
</search_result>
2223
`
2324
})
@@ -28,9 +29,10 @@ ${page.textContent ?? ''}
2829
const tabContext = `<tabs_context>
2930
${pages
3031
.map((page, _idx) => {
32+
const text = page.textContent?.replace(/(\s|\t)+/g, ' ').replace(/\n+/g, '\n').trim() ?? ''
3133
return `<tab>
3234
Title: ${page.title ?? ''} | URL: ${page.url ?? ''}
33-
${page.textContent ?? ''}
35+
${text}
3436
</tab>
3537
`
3638
})
@@ -48,10 +50,11 @@ Question: ${question}`
4850
export const summarizeWithPageContent = definePrompt(async (page: Page, question: string) => {
4951
const userConfig = await getUserConfig()
5052
const system = userConfig.llm.summarizeSystemPrompt.get()
53+
const pageText = page.textContent?.replace(/(\s|\t)+/g, ' ').replace(/\n+/g, '\n').trim() ?? ''
5154

5255
const user = `<tab_context>
5356
Title: ${page.title ?? ''} | URL: ${page.url ?? ''}
54-
${page.textContent ?? ''}
57+
${pageText}
5558
</tab_context>
5659
5760
Question: ${question}`
@@ -85,7 +88,7 @@ Note: Each tab content shows only the first 1000 characters. Consider whether th
8588
8689
${pages
8790
.map((page) => {
88-
const text = page.textContent?.replace(/\s+/g, ' ').trim() ?? ''
91+
const text = page.textContent?.replace(/(\s|\t)+/g, ' ').replace(/\n+/g, '\n').trim() ?? ''
8992
const length = text?.length ?? 0
9093
const truncatedText = length > 1000 ? text.slice(0, 1000) + '...[content truncated]' : text
9194
return `<tab>
@@ -124,7 +127,7 @@ Return only the keywords in a JSON array without any explanations.`
124127
? `<tabs_context>
125128
${pages
126129
.map((page) => {
127-
const text = page.textContent?.replace(/\s+/g, ' ').trim() ?? ''
130+
const text = page.textContent?.replace(/(\s|\t)+/g, ' ').replace(/\n+/g, '\n').trim() ?? ''
128131
const length = text?.length ?? 0
129132
const truncatedText = length > 1000 ? text.slice(0, 1000) + '...[content truncated]' : text
130133
return `<tab>

0 commit comments

Comments
 (0)