From b5abef7d1aa37f5eb4c956adb8f2d71eae32e2e2 Mon Sep 17 00:00:00 2001 From: ggurdin Date: Tue, 20 Aug 2024 15:13:46 -0400 Subject: [PATCH] moved previous message function to igc controller --- .../controllers/choreographer.dart | 51 ------------------- .../controllers/igc_controller.dart | 47 ++++++++++++++++- .../pangea_message_event.dart | 2 +- lib/pangea/models/igc_text_data_model.dart | 5 -- lib/pangea/repo/igc_repo.dart | 1 - 5 files changed, 47 insertions(+), 59 deletions(-) diff --git a/lib/pangea/choreographer/controllers/choreographer.dart b/lib/pangea/choreographer/controllers/choreographer.dart index bff53890a..1a11de0e3 100644 --- a/lib/pangea/choreographer/controllers/choreographer.dart +++ b/lib/pangea/choreographer/controllers/choreographer.dart @@ -9,20 +9,16 @@ import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/controllers/subscription_controller.dart'; import 'package:fluffychat/pangea/enum/assistance_state_enum.dart'; import 'package:fluffychat/pangea/enum/edit_type.dart'; -import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; import 'package:fluffychat/pangea/models/it_step.dart'; import 'package:fluffychat/pangea/models/representation_content_model.dart'; import 'package:fluffychat/pangea/models/space_model.dart'; import 'package:fluffychat/pangea/models/tokens_event_content_model.dart'; -import 'package:fluffychat/pangea/repo/igc_repo.dart'; import 'package:fluffychat/pangea/utils/any_state_holder.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:fluffychat/pangea/utils/overlay.dart'; import 'package:fluffychat/pangea/widgets/igc/paywall_card.dart'; -import 'package:fluffychat/utils/matrix_sdk_extensions/filtered_timeline_extension.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import 'package:matrix/matrix.dart'; import 'package:sentry_flutter/sentry_flutter.dart'; import '../../../widgets/matrix.dart'; @@ -70,53 +66,6 @@ class Choreographer { clear(); } - List prevMessages() { - const int howFarBack = 5; - final List eventList = chatController.timeline?.events - .where( - (e) => - e.isVisibleInGui && - (e.messageType == MessageTypes.Text || - e.messageType == MessageTypes.Audio) && - e.status.isSent && - e.type.equals('m.room.message'), - ) - .toList() ?? - []; - final List messages = []; - try { - for (final Event event in eventList) { - final String? content = (event.messageType == MessageTypes.Text) - ? event.content.toString() - : PangeaMessageEvent( - event: event, - // eventList will be empty if the timeline is null - timeline: chatController.timeline!, - ownMessage: event.senderId == - pangeaController.matrixState.client.userID, - ) - .getSpeechToTextLocalOnly(l1LangCode, l2LangCode) - ?.transcript - .text; - if (content != null) { - messages.add( - PreviousMessage( - content: content, - sender: event.senderId, - timestamp: event.originServerTs, - ), - ); - if (messages.length >= howFarBack) { - return messages; - } - } - } - } catch (err, stack) { - ErrorHandler.logError(e: err, s: stack); - } - return messages; - } - void send(BuildContext context) { if (isFetching) return; diff --git a/lib/pangea/choreographer/controllers/igc_controller.dart b/lib/pangea/choreographer/controllers/igc_controller.dart index 89941ccec..237697b40 100644 --- a/lib/pangea/choreographer/controllers/igc_controller.dart +++ b/lib/pangea/choreographer/controllers/igc_controller.dart @@ -4,12 +4,14 @@ import 'dart:developer'; import 'package:fluffychat/pangea/choreographer/controllers/choreographer.dart'; import 'package:fluffychat/pangea/choreographer/controllers/error_service.dart'; import 'package:fluffychat/pangea/choreographer/controllers/span_data_controller.dart'; +import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; import 'package:fluffychat/pangea/models/igc_text_data_model.dart'; import 'package:fluffychat/pangea/models/pangea_match_model.dart'; import 'package:fluffychat/pangea/repo/igc_repo.dart'; import 'package:fluffychat/pangea/widgets/igc/span_card.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:matrix/matrix.dart'; import '../../models/span_card_model.dart'; import '../../utils/error_handler.dart'; @@ -43,7 +45,7 @@ class IgcController { userL2: choreographer.l2LangCode!, enableIGC: choreographer.igcEnabled && !onlyTokensAndLanguageDetection, enableIT: choreographer.itEnabled && !onlyTokensAndLanguageDetection, - prevMessages: choreographer.prevMessages(), + prevMessages: prevMessages(), ); final IGCTextData igcTextDataResponse = await IgcRepo.getIGC( @@ -126,6 +128,49 @@ class IgcController { ); } + /// Get the content of previous text and audio messages in chat. + /// Passed to IGC request to add context. + List prevMessages({int numMessages = 5}) { + final List events = choreographer.chatController.visibleEvents + .where( + (e) => + e.type == EventTypes.Message && + (e.messageType == MessageTypes.Text || + e.messageType == MessageTypes.Audio), + ) + .toList(); + + final List messages = []; + for (final Event event in events) { + final String? content = event.messageType == MessageTypes.Text + ? event.content.toString() + : PangeaMessageEvent( + event: event, + timeline: choreographer.chatController.timeline!, + ownMessage: event.senderId == + choreographer.pangeaController.matrixState.client.userID, + ) + .getSpeechToTextLocal( + choreographer.l1LangCode, + choreographer.l2LangCode, + ) + ?.transcript + .text; + if (content == null) continue; + messages.add( + PreviousMessage( + content: content, + sender: event.senderId, + timestamp: event.originServerTs, + ), + ); + if (messages.length >= numMessages) { + return messages; + } + } + return messages; + } + bool get hasRelevantIGCTextData { if (igcTextData == null) return false; diff --git a/lib/pangea/matrix_event_wrappers/pangea_message_event.dart b/lib/pangea/matrix_event_wrappers/pangea_message_event.dart index edc4abf0e..cd4ce5e76 100644 --- a/lib/pangea/matrix_event_wrappers/pangea_message_event.dart +++ b/lib/pangea/matrix_event_wrappers/pangea_message_event.dart @@ -269,7 +269,7 @@ class PangeaMessageEvent { null; }).toSet(); - SpeechToTextModel? getSpeechToTextLocalOnly( + SpeechToTextModel? getSpeechToTextLocal( String? l1Code, String? l2Code, ) { diff --git a/lib/pangea/models/igc_text_data_model.dart b/lib/pangea/models/igc_text_data_model.dart index eba1c1476..5f32f92d1 100644 --- a/lib/pangea/models/igc_text_data_model.dart +++ b/lib/pangea/models/igc_text_data_model.dart @@ -5,7 +5,6 @@ import 'package:fluffychat/pangea/controllers/language_detection_controller.dart import 'package:fluffychat/pangea/models/pangea_match_model.dart'; import 'package:fluffychat/pangea/models/pangea_token_model.dart'; import 'package:fluffychat/pangea/models/span_card_model.dart'; -import 'package:fluffychat/pangea/repo/igc_repo.dart'; import 'package:fluffychat/pangea/utils/error_handler.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; @@ -27,7 +26,6 @@ class IGCTextData { bool enableIT; bool enableIGC; bool loading = false; - List prevMessages; IGCTextData({ required this.detections, @@ -39,7 +37,6 @@ class IGCTextData { required this.userL2, required this.enableIT, required this.enableIGC, - required this.prevMessages, }); factory IGCTextData.fromJson(Map json) { @@ -79,7 +76,6 @@ class IGCTextData { userL2: json[ModelKey.userL2], enableIT: json["enable_it"], enableIGC: json["enable_igc"], - prevMessages: json["prev_messages"], ); } @@ -97,7 +93,6 @@ class IGCTextData { ModelKey.userL2: userL2, "enable_it": enableIT, "enable_igc": enableIGC, - "prev_messages": prevMessages, }; /// if we haven't run IGC or IT or there are no matches, we use the highest validated detection diff --git a/lib/pangea/repo/igc_repo.dart b/lib/pangea/repo/igc_repo.dart index 861932812..33abb4deb 100644 --- a/lib/pangea/repo/igc_repo.dart +++ b/lib/pangea/repo/igc_repo.dart @@ -88,7 +88,6 @@ class IgcRepo { userL2: "en", enableIT: true, enableIGC: true, - prevMessages: [], ); return igcTextData;