Add json methods to PreviousMessage

This commit is contained in:
Kelrap 2024-07-31 11:28:26 -04:00 committed by ggurdin
parent 55d75efa06
commit 2ca6d102aa
No known key found for this signature in database
GPG key ID: A01CB41737CBB478
3 changed files with 54 additions and 27 deletions

View file

@ -71,28 +71,36 @@ class Choreographer {
List<PreviousMessage> prevMessages() {
const int howFarBack = 5;
final List<Event> events = chatController.timeline?.events ?? [];
final List<Event> events = chatController.timeline?.events
.where(
(e) =>
e.messageType == MessageTypes.Text ||
e.messageType == MessageTypes.Audio,
)
.toList() ??
[];
// Sort from most recent to least
events.sort(
(a, b) => b.originServerTs.compareTo(a.originServerTs),
);
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;
}
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;
}
}
}

View file

@ -70,6 +70,9 @@ class ModelKey {
static const String enableIGC = "enable_igc";
static const String enableIT = "enable_it";
static const String prevMessages = "prev_messages";
static const String prevContent = "prev_content";
static const String prevSender = "prev_sender";
static const String prevTimestamp = "prev_timestamp";
static const String originalSent = "original_sent";
static const String originalWritten = "original_written";

View file

@ -95,18 +95,33 @@ class IgcRepo {
}
}
/// Previous text/audio messages sent in chat
/// Previous text/audio message 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,
);
PreviousMessage({
required this.content,
required this.sender,
required this.timestamp,
});
factory PreviousMessage.fromJson(Map<String, dynamic> json) =>
PreviousMessage(
content: jsonDecode(json[ModelKey.prevContent]) ?? <String, Object?>{},
sender: json[ModelKey.prevSender] ?? "",
timestamp: json[ModelKey.prevTimestamp] == null
? DateTime.now()
: DateTime.parse(json[ModelKey.prevTimestamp]),
);
Map<String, dynamic> toJson() => {
ModelKey.prevContent: jsonEncode(content),
ModelKey.prevSender: sender,
ModelKey.prevTimestamp: timestamp.toIso8601String(),
};
}
class IGCRequestBody {
@ -132,6 +147,7 @@ class IGCRequestBody {
ModelKey.userL2: userL2,
"enable_it": enableIT,
"enable_igc": enableIGC,
"prev_messages": prevMessages,
ModelKey.prevMessages:
jsonEncode(prevMessages.map((x) => x.toJson()).toList()),
};
}