Skip to content

Commit 3125dea

Browse files
committed
perf: skip TTS processing when not active
Only run sentence-boundary detection during streaming when autoPlayback or voice overlay is active.
1 parent 92ae32f commit 3125dea

1 file changed

Lines changed: 60 additions & 52 deletions

File tree

src/lib/components/chat/Chat.svelte

Lines changed: 60 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1561,27 +1561,31 @@
15611561
navigator.vibrate(5);
15621562
}
15631563
1564-
// Emit chat event for TTS
1565-
const messageContentParts = getMessageContentParts(
1566-
removeAllDetails(message.content),
1567-
$config?.audio?.tts?.split_on ?? 'punctuation'
1568-
);
1569-
messageContentParts.pop();
1570-
1571-
// dispatch only last sentence and make sure it hasn't been dispatched before
1572-
if (
1573-
messageContentParts.length > 0 &&
1574-
messageContentParts[messageContentParts.length - 1] !== message.lastSentence
1575-
) {
1576-
message.lastSentence = messageContentParts[messageContentParts.length - 1];
1577-
eventTarget.dispatchEvent(
1578-
new CustomEvent('chat', {
1579-
detail: {
1580-
id: message.id,
1581-
content: messageContentParts[messageContentParts.length - 1]
1582-
}
1583-
})
1564+
// Emit chat event for TTS (only when call overlay is active)
1565+
if ($showCallOverlay) {
1566+
const messageContentParts = getMessageContentParts(
1567+
removeAllDetails(message.content),
1568+
$config?.audio?.tts?.split_on ?? 'punctuation'
15841569
);
1570+
messageContentParts.pop();
1571+
1572+
// dispatch only last sentence and make sure it hasn't been dispatched before
1573+
if (
1574+
messageContentParts.length > 0 &&
1575+
messageContentParts[messageContentParts.length - 1] !==
1576+
message.lastSentence
1577+
) {
1578+
message.lastSentence =
1579+
messageContentParts[messageContentParts.length - 1];
1580+
eventTarget.dispatchEvent(
1581+
new CustomEvent('chat', {
1582+
detail: {
1583+
id: message.id,
1584+
content: messageContentParts[messageContentParts.length - 1]
1585+
}
1586+
})
1587+
);
1588+
}
15851589
}
15861590
}
15871591
}
@@ -1595,27 +1599,29 @@
15951599
navigator.vibrate(5);
15961600
}
15971601
1598-
// Emit chat event for TTS
1599-
const messageContentParts = getMessageContentParts(
1600-
removeAllDetails(message.content),
1601-
$config?.audio?.tts?.split_on ?? 'punctuation'
1602-
);
1603-
messageContentParts.pop();
1604-
1605-
// dispatch only last sentence and make sure it hasn't been dispatched before
1606-
if (
1607-
messageContentParts.length > 0 &&
1608-
messageContentParts[messageContentParts.length - 1] !== message.lastSentence
1609-
) {
1610-
message.lastSentence = messageContentParts[messageContentParts.length - 1];
1611-
eventTarget.dispatchEvent(
1612-
new CustomEvent('chat', {
1613-
detail: {
1614-
id: message.id,
1615-
content: messageContentParts[messageContentParts.length - 1]
1616-
}
1617-
})
1602+
// Emit chat event for TTS (only when call overlay is active)
1603+
if ($showCallOverlay) {
1604+
const messageContentParts = getMessageContentParts(
1605+
removeAllDetails(message.content),
1606+
$config?.audio?.tts?.split_on ?? 'punctuation'
16181607
);
1608+
messageContentParts.pop();
1609+
1610+
// dispatch only last sentence and make sure it hasn't been dispatched before
1611+
if (
1612+
messageContentParts.length > 0 &&
1613+
messageContentParts[messageContentParts.length - 1] !== message.lastSentence
1614+
) {
1615+
message.lastSentence = messageContentParts[messageContentParts.length - 1];
1616+
eventTarget.dispatchEvent(
1617+
new CustomEvent('chat', {
1618+
detail: {
1619+
id: message.id,
1620+
content: messageContentParts[messageContentParts.length - 1]
1621+
}
1622+
})
1623+
);
1624+
}
16191625
}
16201626
}
16211627
@@ -1642,18 +1648,20 @@
16421648
document.getElementById(`speak-button-${message.id}`)?.click();
16431649
}
16441650
1645-
// Emit chat event for TTS
1646-
let lastMessageContentPart =
1647-
getMessageContentParts(
1648-
removeAllDetails(message.content),
1649-
$config?.audio?.tts?.split_on ?? 'punctuation'
1650-
)?.at(-1) ?? '';
1651-
if (lastMessageContentPart) {
1652-
eventTarget.dispatchEvent(
1653-
new CustomEvent('chat', {
1654-
detail: { id: message.id, content: lastMessageContentPart }
1655-
})
1656-
);
1651+
// Emit chat event for TTS (only when call overlay is active)
1652+
if ($showCallOverlay) {
1653+
let lastMessageContentPart =
1654+
getMessageContentParts(
1655+
removeAllDetails(message.content),
1656+
$config?.audio?.tts?.split_on ?? 'punctuation'
1657+
)?.at(-1) ?? '';
1658+
if (lastMessageContentPart) {
1659+
eventTarget.dispatchEvent(
1660+
new CustomEvent('chat', {
1661+
detail: { id: message.id, content: lastMessageContentPart }
1662+
})
1663+
);
1664+
}
16571665
}
16581666
eventTarget.dispatchEvent(
16591667
new CustomEvent('chat:finish', {

0 commit comments

Comments
 (0)