feat(chat): Improve error handling and message versioning
This commit is contained in:
@@ -878,13 +878,10 @@ class _AssistantMessageWidgetState extends ConsumerState<AssistantMessageWidget>
|
||||
),
|
||||
),
|
||||
|
||||
// Display error banner if message has an error
|
||||
if (widget.message is ChatMessage &&
|
||||
(widget.message as ChatMessage).error != null) ...[
|
||||
// Display error banner if message or active version has an error
|
||||
if (_getActiveError() != null) ...[
|
||||
const SizedBox(height: Spacing.sm),
|
||||
_buildErrorBanner(
|
||||
(widget.message as ChatMessage).error!,
|
||||
),
|
||||
_buildErrorBanner(_getActiveError()!),
|
||||
],
|
||||
|
||||
if (hasCodeExecutions) ...[
|
||||
@@ -933,6 +930,21 @@ class _AssistantMessageWidgetState extends ConsumerState<AssistantMessageWidget>
|
||||
);
|
||||
}
|
||||
|
||||
/// Get the error for the currently active message or version.
|
||||
ChatMessageError? _getActiveError() {
|
||||
if (widget.message is! ChatMessage) return null;
|
||||
final msg = widget.message as ChatMessage;
|
||||
|
||||
// If viewing a version, return the version's error
|
||||
if (_activeVersionIndex >= 0 &&
|
||||
_activeVersionIndex < msg.versions.length) {
|
||||
return msg.versions[_activeVersionIndex].error;
|
||||
}
|
||||
|
||||
// Otherwise return the main message's error
|
||||
return msg.error;
|
||||
}
|
||||
|
||||
/// Build an error banner matching OpenWebUI's error display style.
|
||||
/// Shows error content in a red-tinted container with an info icon.
|
||||
Widget _buildErrorBanner(ChatMessageError error) {
|
||||
@@ -1303,8 +1315,9 @@ class _AssistantMessageWidgetState extends ConsumerState<AssistantMessageWidget>
|
||||
final messageId = _messageId;
|
||||
final hasSpeechText = _ttsPlainText.trim().isNotEmpty;
|
||||
// Check for error using the error field (preferred) or legacy content detection
|
||||
final hasErrorField = widget.message is ChatMessage &&
|
||||
(widget.message as ChatMessage).error != null;
|
||||
// Also check the active version's error if viewing a version
|
||||
final activeError = _getActiveError();
|
||||
final hasErrorField = activeError != null;
|
||||
final isErrorMessage = hasErrorField ||
|
||||
widget.message.content.contains('⚠️') ||
|
||||
widget.message.content.contains('Error') ||
|
||||
|
||||
Reference in New Issue
Block a user