Pass previous X messages to IGC
This commit is contained in:
parent
fa0d4f96ad
commit
20ffe7ba37
4 changed files with 65 additions and 0 deletions
|
|
@ -9,16 +9,19 @@ 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:flutter/foundation.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:matrix/matrix.dart';
|
||||
import 'package:sentry_flutter/sentry_flutter.dart';
|
||||
|
||||
import '../../../widgets/matrix.dart';
|
||||
|
|
@ -66,6 +69,36 @@ class Choreographer {
|
|||
clear();
|
||||
}
|
||||
|
||||
List<PreviousMessage> prevMessages() {
|
||||
const int howFarBack = 5;
|
||||
final List<Event> events = chatController.timeline?.events ?? [];
|
||||
final List<PreviousMessage> messages = [];
|
||||
for (final Event event in events) {
|
||||
if (event.messageType == MessageTypes.Text ||
|
||||
event.messageType == MessageTypes.Audio) {
|
||||
final Map<String, Object?>? content =
|
||||
(event.messageType == MessageTypes.Text)
|
||||
? event.content
|
||||
: (event as PangeaMessageEvent)
|
||||
.getSpeechToTextLocalOnly(l1LangCode, l2LangCode)
|
||||
?.toJson();
|
||||
if (content != null) {
|
||||
messages.add(
|
||||
PreviousMessage(
|
||||
event.content,
|
||||
event.senderId,
|
||||
event.originServerTs,
|
||||
),
|
||||
);
|
||||
if (messages.length >= howFarBack) {
|
||||
return messages;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return messages;
|
||||
}
|
||||
|
||||
void send(BuildContext context) {
|
||||
if (isFetching) return;
|
||||
|
||||
|
|
|
|||
|
|
@ -43,6 +43,7 @@ class IgcController {
|
|||
userL2: choreographer.l2LangCode!,
|
||||
enableIGC: choreographer.igcEnabled && !onlyTokensAndLanguageDetection,
|
||||
enableIT: choreographer.itEnabled && !onlyTokensAndLanguageDetection,
|
||||
prevMessages: choreographer.prevMessages(),
|
||||
);
|
||||
|
||||
final IGCTextData igcTextDataResponse = await IgcRepo.getIGC(
|
||||
|
|
|
|||
|
|
@ -269,6 +269,21 @@ class PangeaMessageEvent {
|
|||
null;
|
||||
}).toSet();
|
||||
|
||||
SpeechToTextModel? getSpeechToTextLocalOnly(
|
||||
String? l1Code,
|
||||
String? l2Code,
|
||||
) {
|
||||
if (l1Code == null || l2Code == null) {
|
||||
return null;
|
||||
}
|
||||
return representations
|
||||
.firstWhereOrNull(
|
||||
(element) => element.content.speechToText != null,
|
||||
)
|
||||
?.content
|
||||
.speechToText;
|
||||
}
|
||||
|
||||
Future<SpeechToTextModel?> getSpeechToText(
|
||||
String l1Code,
|
||||
String l2Code,
|
||||
|
|
|
|||
|
|
@ -94,12 +94,27 @@ class IgcRepo {
|
|||
}
|
||||
}
|
||||
|
||||
/// Previous text/audio messages sent in chat
|
||||
/// Contain message content, sender, and timestamp
|
||||
class PreviousMessage {
|
||||
Map<String, Object?> content;
|
||||
String sender;
|
||||
DateTime timestamp;
|
||||
|
||||
PreviousMessage(
|
||||
this.content,
|
||||
this.sender,
|
||||
this.timestamp,
|
||||
);
|
||||
}
|
||||
|
||||
class IGCRequestBody {
|
||||
String fullText;
|
||||
String userL1;
|
||||
String userL2;
|
||||
bool enableIT;
|
||||
bool enableIGC;
|
||||
List<PreviousMessage> prevMessages;
|
||||
|
||||
IGCRequestBody({
|
||||
required this.fullText,
|
||||
|
|
@ -107,6 +122,7 @@ class IGCRequestBody {
|
|||
required this.userL2,
|
||||
required this.enableIGC,
|
||||
required this.enableIT,
|
||||
required this.prevMessages,
|
||||
});
|
||||
|
||||
Map<String, dynamic> toJson() => {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue