2 files changed
+70
lib/features/chat/providers/chat_notifier.dart
+12
@@ -54,6 +54,15 @@ class PendingToolApproval {
54
PendingToolApproval({required this.toolCall, required this.completer});
55
}
56
57
+bool shouldIncludeMessageInChatContext(Message message) {
58
+ if (message.role == MessageRole.assistant &&
59
+ message.status == MessageStatus.error &&
60
+ message.content.trim().isEmpty) {
61
+ return false;
62
+ }
63
+ return true;
64
+}
65
+
66
class ChatState {
67
final List<Message> messages;
68
final List<Message> allMessages;
@@ -1545,6 +1554,9 @@ class ChatNotifier extends Notifier<ChatState> {
1554
}
1555
1556
for (final message in state.messages) {
1557
+ if (!shouldIncludeMessageInChatContext(message)) {
1558
+ continue;
1559
+ }
1560
if (message.role != MessageRole.system || settings.showSystemMessages) {
1561
messages.add(message);
1562
}
test/features/chat/providers/chat_context_filter_test.dart
new
+58
@@ -0,0 +1,58 @@
1
+import 'package:flutter_test/flutter_test.dart';
2
+import 'package:localmind/core/models/enums.dart';
3
+import 'package:localmind/features/chat/data/models/message.dart';
4
+import 'package:localmind/features/chat/providers/chat_notifier.dart';
5
+
6
+void main() {
7
+ group('shouldIncludeMessageInChatContext', () {
8
+ test('drops empty errored assistant placeholders', () {
9
+ final message = _message(
10
+ role: MessageRole.assistant,
11
+ status: MessageStatus.error,
12
+ content: '',
13
+ );
14
+
15
+ expect(shouldIncludeMessageInChatContext(message), isFalse);
16
+ });
17
+
18
+ test('keeps assistant errors that already have content', () {
19
+ final message = _message(
20
+ role: MessageRole.assistant,
21
+ status: MessageStatus.error,
22
+ content: 'Partial response',
23
+ );
24
+
25
+ expect(shouldIncludeMessageInChatContext(message), isTrue);
26
+ });
27
+
28
+ test('keeps non-assistant messages and completed assistant messages', () {
29
+ expect(
30
+ shouldIncludeMessageInChatContext(
31
+ _message(role: MessageRole.user, content: 'hello'),
32
+ ),
33
+ isTrue,
34
+ );
35
+ expect(
36
+ shouldIncludeMessageInChatContext(
37
+ _message(role: MessageRole.assistant, content: 'hi'),
38
+ ),
39
+ isTrue,
40
+ );
41
+ });
42
+ });
43
+}
44
+
45
+Message _message({
46
+ required MessageRole role,
47
+ MessageStatus status = MessageStatus.complete,
48
+ String content = '',
49
+}) {
50
+ return Message(
51
+ id: 'message-${role.name}-${status.name}-$content',
52
+ conversationId: 'conversation-1',
53
+ role: role,
54
+ content: content,
55
+ createdAt: DateTime.utc(2026, 9, 21),
56
+ status: status,
57
+ );
58
+}