editUserMessage method
Fork after the previous user query (or new conversation if this was the first
user message), then send newText.
Implementation
Future<void> editUserMessage(PupauMessage message, String newText) async {
if (assistant.value == null || conversation.value == null) return;
if (message.isMessageFromAssistant) return;
final String trimmed = newText.trim();
if (trimmed.isEmpty) return;
final String? previousMessageId = _previousUserMessageIdForEdit(message);
isForking.value = true;
update();
try {
if (previousMessageId == null || previousMessageId.isEmpty) {
await createNewConversation();
if (conversation.value == null) {
showErrorSnackbar(Strings.apiErrorGeneric.tr);
return;
}
await loadConversation(conversation.value!.id);
assistantsReplying.value = 0;
isStreaming.value = false;
resetLoadingMessage();
await sendMessage(trimmed, false);
return;
}
final String title =
"${conversation.value?.title ?? Strings.newConversation.tr} (${Strings.edit.tr})";
final PupauConversation? forked =
await ConversationService.forkConversation(
assistantId,
conversation.value!.id,
title,
previousMessageId,
isMarketplace,
);
if (forked == null) {
showErrorSnackbar(Strings.apiErrorGeneric.tr);
return;
}
await loadConversation(forked.id);
assistantsReplying.value = 0;
isStreaming.value = false;
resetLoadingMessage();
await sendMessage(trimmed, false);
} finally {
isForking.value = false;
update();
}
}