ensure speech_to_text endpoint is only called once, round words for per minute string, always auto-speech-to-text for audio message toolbar

pull/1183/head
ggurdin 2 years ago
parent e156408a63
commit f797cdbb4a

@ -1,6 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:material_symbols_icons/symbols.dart'; import 'package:material_symbols_icons/symbols.dart';
import 'package:matrix/matrix.dart';
enum MessageMode { translation, definition, speechToText, textToSpeech } enum MessageMode { translation, definition, speechToText, textToSpeech }
@ -52,4 +53,17 @@ extension MessageModeExtension on MessageMode {
.oopsSomethingWentWrong; // Title to indicate an error or unsupported mode .oopsSomethingWentWrong; // Title to indicate an error or unsupported mode
} }
} }
bool isValidMode(Event event) {
switch (this) {
case MessageMode.translation:
case MessageMode.textToSpeech:
case MessageMode.definition:
return event.messageType == MessageTypes.Text;
case MessageMode.speechToText:
return event.messageType == MessageTypes.Audio;
default:
return true;
}
}
} }

@ -346,6 +346,19 @@ class PangeaMessageEvent {
), ),
); );
_representations?.add(
RepresentationEvent(
timeline: timeline,
content: PangeaRepresentation(
langCode: response.langCode,
text: response.transcript.text,
originalSent: false,
originalWritten: false,
speechToText: response,
),
),
);
return response; return response;
} }

@ -3,7 +3,6 @@ import 'dart:developer';
import 'package:fluffychat/pangea/extensions/pangea_event_extension.dart'; import 'package:fluffychat/pangea/extensions/pangea_event_extension.dart';
import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_choreo_event.dart'; import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_choreo_event.dart';
import 'package:fluffychat/pangea/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/models/pangea_token_model.dart';
import 'package:fluffychat/pangea/models/speech_to_text_models.dart';
import 'package:fluffychat/pangea/models/tokens_event_content_model.dart'; import 'package:fluffychat/pangea/models/tokens_event_content_model.dart';
import 'package:fluffychat/pangea/repo/tokens_repo.dart'; import 'package:fluffychat/pangea/repo/tokens_repo.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
@ -27,15 +26,12 @@ class RepresentationEvent {
ChoreoRecord? _choreo; ChoreoRecord? _choreo;
Timeline timeline; Timeline timeline;
SpeechToTextModel? _speechToTextResponse;
RepresentationEvent({ RepresentationEvent({
required this.timeline, required this.timeline,
Event? event, Event? event,
PangeaRepresentation? content, PangeaRepresentation? content,
PangeaMessageTokens? tokens, PangeaMessageTokens? tokens,
ChoreoRecord? choreo, ChoreoRecord? choreo,
SpeechToTextModel? speechToTextResponse,
}) { }) {
if (event != null && event.type != PangeaEventTypes.representation) { if (event != null && event.type != PangeaEventTypes.representation) {
throw Exception( throw Exception(
@ -46,7 +42,6 @@ class RepresentationEvent {
_content = content; _content = content;
_tokens = tokens; _tokens = tokens;
_choreo = choreo; _choreo = choreo;
_speechToTextResponse = speechToTextResponse;
} }
Event? get event => _event; Event? get event => _event;

@ -138,7 +138,7 @@ class MessageSpeechToTextCardState extends State<MessageSpeechToTextCard> {
} }
String? get wordsPerMinuteString => String? get wordsPerMinuteString =>
speechToTextResponse?.transcript.wordsPerMinute?.toString(); speechToTextResponse?.transcript.wordsPerMinute?.toStringAsFixed(2);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {

@ -172,6 +172,19 @@ class MessageToolbarState extends State<MessageToolbar> {
debugPrint("updating toolbar mode"); debugPrint("updating toolbar mode");
final bool subscribed = final bool subscribed =
MatrixState.pangeaController.subscriptionController.isSubscribed; MatrixState.pangeaController.subscriptionController.isSubscribed;
if (!newMode.isValidMode(widget.pangeaMessageEvent.event)) {
ErrorHandler.logError(
e: "Invalid mode for event",
s: StackTrace.current,
data: {
"newMode": newMode,
"event": widget.pangeaMessageEvent.event,
},
);
return;
}
setState(() { setState(() {
currentMode = newMode; currentMode = newMode;
updatingMode = true; updatingMode = true;
@ -274,12 +287,14 @@ class MessageToolbarState extends State<MessageToolbar> {
PLocalKey.autoPlayMessages, PLocalKey.autoPlayMessages,
) ?? ) ??
true; true;
if (widget.pangeaMessageEvent.isAudioMessage) {
updateMode(MessageMode.speechToText);
return;
}
autoplay autoplay
? updateMode( ? updateMode(MessageMode.textToSpeech)
widget.pangeaMessageEvent.isAudioMessage
? MessageMode.speechToText
: MessageMode.textToSpeech,
)
: updateMode(MessageMode.translation); : updateMode(MessageMode.translation);
}); });

Loading…
Cancel
Save