From 544a2e61c4e8eae52f4fd69df654c626df42b8dc Mon Sep 17 00:00:00 2001 From: ggurdin Date: Wed, 11 Dec 2024 13:05:22 -0500 Subject: [PATCH] don't rely on token offsets from speech_to_text endpoint for creating text spans --- .../chat/message_speech_to_text_card.dart | 39 +++++++++---------- 1 file changed, 18 insertions(+), 21 deletions(-) diff --git a/lib/pangea/widgets/chat/message_speech_to_text_card.dart b/lib/pangea/widgets/chat/message_speech_to_text_card.dart index a529fc192..03db0ba8c 100644 --- a/lib/pangea/widgets/chat/message_speech_to_text_card.dart +++ b/lib/pangea/widgets/chat/message_speech_to_text_card.dart @@ -72,12 +72,11 @@ class MessageSpeechToTextCardState extends State { TextSpan _buildTranscriptText(BuildContext context) { final Transcript transcript = speechToTextResponse!.transcript; final List spans = []; - final String fullText = transcript.text; - int lastEnd = 0; + String remainingFullText = transcript.text; if (transcript.sttTokens.isEmpty) { return TextSpan( - text: fullText, + text: remainingFullText, style: BotStyle.text( context, existingStyle: TextStyle( @@ -89,19 +88,26 @@ class MessageSpeechToTextCardState extends State { } for (final token in transcript.sttTokens) { - if (token.offset > lastEnd) { + final offset = remainingFullText.indexOf(token.token.text.content); + final length = token.length; + + if (remainingFullText.substring(0, offset).trim().isNotEmpty) { + continue; + } + + if (offset > 0) { // Add any plain text before the token spans.add( - TextSpan( - text: fullText.substring(lastEnd, token.offset), - ), + TextSpan(text: remainingFullText.substring(0, offset)), ); - // debugPrint('Pre: ${fullText.substring(lastEnd, token.offset)}'); } spans.add( TextSpan( - text: fullText.substring(token.offset, token.offset + token.length), + text: remainingFullText.substring( + offset, + offset + token.length, + ), style: BotStyle.text( context, existingStyle: TextStyle(color: token.color(context)), @@ -125,21 +131,12 @@ class MessageSpeechToTextCardState extends State { ), ); - // debugPrint( - // 'Main: ${fullText.substring(token.offset, token.offset + token.length)}', - // ); - - lastEnd = token.offset + token.length; + remainingFullText = remainingFullText.substring(offset + length); } - if (lastEnd < fullText.length) { + if (remainingFullText.isNotEmpty) { // Add any remaining text after the last token - spans.add( - TextSpan( - text: fullText.substring(lastEnd), - ), - ); - // debugPrint('Post: ${fullText.substring(lastEnd)}'); + spans.add(TextSpan(text: remainingFullText)); } return TextSpan(children: spans);