chore: regenerate response improvements (#7018)

* fix: disable sending message while streaming

* chore: don't allow regenerate while streaming
This commit is contained in:
Richard Shiue 2024-12-20 11:42:43 +08:00 committed by GitHub
parent d25a399aba
commit ddcdd545d9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 17 additions and 7 deletions

View File

@ -246,7 +246,7 @@ class ChatBloc extends Bloc<ChatEvent, ChatState> {
emit(
state.copyWith(
promptResponseState: PromptResponseState.sendingQuestion,
promptResponseState: PromptResponseState.streamingAnswer,
),
);
},

View File

@ -197,14 +197,13 @@ class _ChatContentPage extends StatelessWidget {
final refSourceJsonString =
message.metadata?[messageRefSourceJsonStringKey] as String?;
return BlocSelector<ChatBloc, ChatState, bool>(
selector: (state) {
return BlocBuilder<ChatBloc, ChatState>(
builder: (context, state) {
final chatController = context.read<ChatBloc>().chatController;
final messages = chatController.messages
.where((e) => onetimeMessageTypeFromMeta(e.metadata) == null);
return messages.isEmpty ? false : messages.last.id == message.id;
},
builder: (context, isLastMessage) {
final isLastMessage =
messages.isEmpty ? false : messages.last.id == message.id;
return ChatAIMessageWidget(
user: message.author,
messageUserId: message.id,
@ -213,6 +212,7 @@ class _ChatContentPage extends StatelessWidget {
questionId: questionId,
chatId: view.id,
refSourceJsonString: refSourceJsonString,
isStreaming: state.promptResponseState != PromptResponseState.ready,
isLastMessage: isLastMessage,
onSelectedMetadata: (metadata) =>
_onSelectMetadata(context, metadata),

View File

@ -189,6 +189,9 @@ class _DesktopAIPromptInputState extends State<DesktopAIPromptInput> {
}
void handleSendPressed() {
if (widget.isStreaming) {
return;
}
final trimmedText = inputControlCubit.formatIntputText(
textController.text.trim(),
);

View File

@ -155,6 +155,9 @@ class _MobileAIPromptInputState extends State<MobileAIPromptInput> {
}
void handleSendPressed() {
if (widget.isStreaming) {
return;
}
final trimmedText = inputControlCubit.formatIntputText(
textController.text.trim(),
);

View File

@ -35,6 +35,7 @@ class ChatAIMessageWidget extends StatelessWidget {
this.onSelectedMetadata,
this.onRegenerate,
this.isLastMessage = false,
this.isStreaming = false,
});
final User user;
@ -47,6 +48,7 @@ class ChatAIMessageWidget extends StatelessWidget {
final String? refSourceJsonString;
final void Function(ChatMessageRefSource metadata)? onSelectedMetadata;
final void Function(String messageId)? onRegenerate;
final bool isStreaming;
final bool isLastMessage;
@override
@ -81,7 +83,9 @@ class ChatAIMessageWidget extends StatelessWidget {
: ChatAIMessageBubble(
message: message,
isLastMessage: isLastMessage,
showActions: stream == null && state.text.isNotEmpty,
showActions: stream == null &&
state.text.isNotEmpty &&
!isStreaming,
onRegenerate: onRegenerate,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,