Pass previous X messages to IGC

This commit is contained in:
Kelrap 2024-07-29 14:49:12 -04:00 committed by ggurdin
parent fa0d4f96ad
commit 20ffe7ba37
No known key found for this signature in database
GPG key ID: A01CB41737CBB478
4 changed files with 65 additions and 0 deletions

View file

@ -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;

View file

@ -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(

View file

@ -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,

View file

@ -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() => {