Skip to content

Commit f319ade

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 a6fbdf7 commit f319ade

1 file changed

Lines changed: 46 additions & 40 deletions

File tree

src/lib/components/chat/Chat.svelte

Lines changed: 46 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1512,27 +1512,31 @@
15121512
navigator.vibrate(5);
15131513
}
15141514
1515-
// Emit chat event for TTS
1516-
const messageContentParts = getMessageContentParts(
1517-
removeAllDetails(message.content),
1518-
$config?.audio?.tts?.split_on ?? 'punctuation'
1519-
);
1520-
messageContentParts.pop();
1521-
1522-
// dispatch only last sentence and make sure it hasn't been dispatched before
1523-
if (
1524-
messageContentParts.length > 0 &&
1525-
messageContentParts[messageContentParts.length - 1] !== message.lastSentence
1526-
) {
1527-
message.lastSentence = messageContentParts[messageContentParts.length - 1];
1528-
eventTarget.dispatchEvent(
1529-
new CustomEvent('chat', {
1530-
detail: {
1531-
id: message.id,
1532-
content: messageContentParts[messageContentParts.length - 1]
1533-
}
1534-
})
1515+
// Emit chat event for TTS (skip when TTS is not active)
1516+
if ($settings?.responseAutoPlayback || $showCallOverlay) {
1517+
const messageContentParts = getMessageContentParts(
1518+
removeAllDetails(message.content),
1519+
$config?.audio?.tts?.split_on ?? 'punctuation'
15351520
);
1521+
messageContentParts.pop();
1522+
1523+
// dispatch only last sentence and make sure it hasn't been dispatched before
1524+
if (
1525+
messageContentParts.length > 0 &&
1526+
messageContentParts[messageContentParts.length - 1] !==
1527+
message.lastSentence
1528+
) {
1529+
message.lastSentence =
1530+
messageContentParts[messageContentParts.length - 1];
1531+
eventTarget.dispatchEvent(
1532+
new CustomEvent('chat', {
1533+
detail: {
1534+
id: message.id,
1535+
content: messageContentParts[messageContentParts.length - 1]
1536+
}
1537+
})
1538+
);
1539+
}
15361540
}
15371541
}
15381542
}
@@ -1546,27 +1550,29 @@
15461550
navigator.vibrate(5);
15471551
}
15481552
1549-
// Emit chat event for TTS
1550-
const messageContentParts = getMessageContentParts(
1551-
removeAllDetails(message.content),
1552-
$config?.audio?.tts?.split_on ?? 'punctuation'
1553-
);
1554-
messageContentParts.pop();
1555-
1556-
// dispatch only last sentence and make sure it hasn't been dispatched before
1557-
if (
1558-
messageContentParts.length > 0 &&
1559-
messageContentParts[messageContentParts.length - 1] !== message.lastSentence
1560-
) {
1561-
message.lastSentence = messageContentParts[messageContentParts.length - 1];
1562-
eventTarget.dispatchEvent(
1563-
new CustomEvent('chat', {
1564-
detail: {
1565-
id: message.id,
1566-
content: messageContentParts[messageContentParts.length - 1]
1567-
}
1568-
})
1553+
// Emit chat event for TTS (skip when TTS is not active)
1554+
if ($settings?.responseAutoPlayback || $showCallOverlay) {
1555+
const messageContentParts = getMessageContentParts(
1556+
removeAllDetails(message.content),
1557+
$config?.audio?.tts?.split_on ?? 'punctuation'
15691558
);
1559+
messageContentParts.pop();
1560+
1561+
// dispatch only last sentence and make sure it hasn't been dispatched before
1562+
if (
1563+
messageContentParts.length > 0 &&
1564+
messageContentParts[messageContentParts.length - 1] !== message.lastSentence
1565+
) {
1566+
message.lastSentence = messageContentParts[messageContentParts.length - 1];
1567+
eventTarget.dispatchEvent(
1568+
new CustomEvent('chat', {
1569+
detail: {
1570+
id: message.id,
1571+
content: messageContentParts[messageContentParts.length - 1]
1572+
}
1573+
})
1574+
);
1575+
}
15701576
}
15711577
}
15721578

0 commit comments

Comments
 (0)