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( emit(
state.copyWith( state.copyWith(
promptResponseState: PromptResponseState.sendingQuestion, promptResponseState: PromptResponseState.streamingAnswer,
), ),
); );
}, },

View File

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

View File

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

View File

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

View File

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