moved previous message function to igc controller
This commit is contained in:
parent
54d63b1a4f
commit
b5abef7d1a
5 changed files with 47 additions and 59 deletions
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -269,7 +269,7 @@ class PangeaMessageEvent {
|
|||
null;
|
||||
}).toSet();
|
||||
|
||||
SpeechToTextModel? getSpeechToTextLocalOnly(
|
||||
SpeechToTextModel? getSpeechToTextLocal(
|
||||
String? l1Code,
|
||||
String? l2Code,
|
||||
) {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -88,7 +88,6 @@ class IgcRepo {
|
|||
userL2: "en",
|
||||
enableIT: true,
|
||||
enableIGC: true,
|
||||
prevMessages: [],
|
||||
);
|
||||
|
||||
return igcTextData;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue