moved previous message function to igc controller

This commit is contained in:
ggurdin 2024-08-20 15:13:46 -04:00
parent 54d63b1a4f
commit b5abef7d1a
No known key found for this signature in database
GPG key ID: A01CB41737CBB478
5 changed files with 47 additions and 59 deletions

View file

@ -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<PreviousMessage> prevMessages() {
const int howFarBack = 5;
final List<Event> 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<PreviousMessage> 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;

View file

@ -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<PreviousMessage> prevMessages({int numMessages = 5}) {
final List<Event> events = choreographer.chatController.visibleEvents
.where(
(e) =>
e.type == EventTypes.Message &&
(e.messageType == MessageTypes.Text ||
e.messageType == MessageTypes.Audio),
)
.toList();
final List<PreviousMessage> 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;

View file

@ -269,7 +269,7 @@ class PangeaMessageEvent {
null;
}).toSet();
SpeechToTextModel? getSpeechToTextLocalOnly(
SpeechToTextModel? getSpeechToTextLocal(
String? l1Code,
String? l2Code,
) {

View file

@ -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<PreviousMessage> 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<String, dynamic> 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

View file

@ -88,7 +88,6 @@ class IgcRepo {
userL2: "en",
enableIT: true,
enableIGC: true,
prevMessages: [],
);
return igcTextData;