arterm-sedov commited on
Commit
eeb587f
Β·
1 Parent(s): abe172e

Add user-friendly error messages proposition report

Browse files
docs/20250923_USER_FRIENDLY_ERROR_MESSAGES_IMPLEMENTATION_REPORT.md ADDED
@@ -0,0 +1,343 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # User-Friendly Error Messages Implementation Report
2
+
3
+ **Date:** 2025-01-23
4
+ **Issue:** Silent failure for API errors (e.g., OpenRouter 404) in chat interface
5
+ **Status:** Analysis Complete - Implementation Plan Ready
6
+
7
+ ## Executive Summary
8
+
9
+ Currently, when API errors occur (like the OpenRouter 404 error for `openrouter/sonoma-dusk-alpha`), the system logs detailed error information to the terminal but shows only generic error messages or silent failures to users in the chat interface. This creates a poor user experience where users don't understand what went wrong or how to fix it.
10
+
11
+ ## Current Error Handling Analysis
12
+
13
+ ### 1. Error Flow Architecture
14
+
15
+ ```
16
+ User Input β†’ LangChain Agent β†’ Native Streaming β†’ Error Handler β†’ Chat Display
17
+ ↓ ↓ ↓ ↓ ↓
18
+ Message LLM Instance StreamingEvent ErrorInfo Generic Error
19
+ ```
20
+
21
+ ### 2. Current Error Handling Points
22
+
23
+ #### A. Streaming Level (`native_langchain_streaming.py`)
24
+ - **Location:** Lines 638-663
25
+ - **Current Behavior:**
26
+ - Logs detailed error to terminal with full traceback
27
+ - Yields generic `StreamingEvent` with `_get_error_message(str(e), language)`
28
+ - Uses basic error template from i18n translations
29
+
30
+ #### B. Error Handler (`error_handler.py`)
31
+ - **Location:** Lines 741-787
32
+ - **Current Behavior:**
33
+ - Comprehensive error classification system exists
34
+ - Supports OpenRouter-specific error codes (400, 401, 403, 404, etc.)
35
+ - Provides structured `ErrorInfo` with descriptions and suggested actions
36
+ - **Issue:** Not integrated with streaming system
37
+
38
+ #### C. Chat Interface (`chat_tab.py`)
39
+ - **Current Behavior:**
40
+ - Receives streaming events and displays them
41
+ - No specific error message processing
42
+ - Generic error display
43
+
44
+ ### 3. Current Error Message System
45
+
46
+ #### A. I18n Translations (`i18n_translations.py`)
47
+ - **Current Error Templates:**
48
+ ```python
49
+ "error": "❌ **Error: {error}**",
50
+ "tool_error": "❌ **Tool Error: {error}**",
51
+ "unknown_tool": "❌ **Unknown Tool: {tool_name}**"
52
+ ```
53
+
54
+ #### B. Streaming Error Messages (`native_langchain_streaming.py`)
55
+ - **Current Implementation:**
56
+ ```python
57
+ def _get_error_message(self, error: str, language: str = "en") -> str:
58
+ template = get_translation_key("error", language)
59
+ return template.format(error=error)
60
+ ```
61
+
62
+ ## Problem Analysis
63
+
64
+ ### 1. Root Cause
65
+ The error handling system has two disconnected components:
66
+ - **Comprehensive Error Handler:** Classifies errors and provides detailed information
67
+ - **Streaming System:** Uses basic error templates without leveraging error classification
68
+
69
+ ### 2. Specific Issues
70
+
71
+ #### A. OpenRouter 404 Error
72
+ - **Raw Error:** `Error code: 404 - {'error': {'message': 'No endpoints found for openrouter/sonoma-dusk-alpha.', 'code': 404}`
73
+ - **Current User Message:** `❌ **Error: Error code: 404 - {'error': {'message': 'No endpoints found for openrouter/sonoma-dusk-alpha.', 'code': 404}`
74
+ - **Should Be:** User-friendly message explaining the model is not available and suggesting alternatives
75
+
76
+ #### B. Silent Failures
77
+ - Some errors result in no user feedback
78
+ - Users don't know if the system is working or broken
79
+ - No guidance on how to resolve issues
80
+
81
+ ## Proposed Solution
82
+
83
+ ### 1. Enhanced Error Message Registry
84
+
85
+ #### A. Create User-Friendly Error Message Registry
86
+ ```python
87
+ # agent_ng/user_friendly_errors.py
88
+ class UserFriendlyErrorRegistry:
89
+ """Registry for user-friendly error messages"""
90
+
91
+ ERROR_MESSAGES = {
92
+ # OpenRouter Errors
93
+ "openrouter_404": {
94
+ "en": {
95
+ "title": "🚫 Model Not Available",
96
+ "message": "The selected model '{model}' is not available on OpenRouter.",
97
+ "suggestion": "Please try a different model or check the OpenRouter documentation for available models.",
98
+ "action": "Switch to a different model"
99
+ },
100
+ "ru": {
101
+ "title": "🚫 МодСль нСдоступна",
102
+ "message": "Выбранная модСль '{model}' нСдоступна Π² OpenRouter.",
103
+ "suggestion": "ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ Π΄Ρ€ΡƒΠ³ΡƒΡŽ модСль ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ OpenRouter для доступных ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ.",
104
+ "action": "ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° Π΄Ρ€ΡƒΠ³ΡƒΡŽ модСль"
105
+ }
106
+ },
107
+ "openrouter_401": {
108
+ "en": {
109
+ "title": "πŸ”‘ Authentication Error",
110
+ "message": "Invalid OpenRouter API key.",
111
+ "suggestion": "Please check your API key configuration in the settings.",
112
+ "action": "Check API key settings"
113
+ }
114
+ },
115
+ # Add more error types...
116
+ }
117
+ ```
118
+
119
+ #### B. Enhanced Error Classification Integration
120
+ ```python
121
+ # agent_ng/enhanced_error_handler.py
122
+ class EnhancedErrorHandler:
123
+ """Enhanced error handler with user-friendly messages"""
124
+
125
+ def __init__(self):
126
+ self.error_handler = get_error_handler()
127
+ self.user_friendly_registry = UserFriendlyErrorRegistry()
128
+
129
+ def get_user_friendly_error(self, error: Exception, language: str = "en") -> Dict[str, str]:
130
+ """Get user-friendly error message for display"""
131
+ # Classify error using existing error handler
132
+ error_info = self.error_handler.classify_error(error)
133
+
134
+ if error_info:
135
+ # Map to user-friendly message
136
+ return self._map_to_user_friendly(error_info, language)
137
+ else:
138
+ # Fallback to generic error
139
+ return self._get_generic_error(str(error), language)
140
+ ```
141
+
142
+ ### 2. Streaming System Integration
143
+
144
+ #### A. Enhanced Streaming Error Handling
145
+ ```python
146
+ # agent_ng/native_langchain_streaming.py
147
+ def _get_user_friendly_error_message(self, error: Exception, language: str = "en") -> str:
148
+ """Get user-friendly error message for streaming"""
149
+ from .enhanced_error_handler import get_enhanced_error_handler
150
+
151
+ enhanced_handler = get_enhanced_error_handler()
152
+ error_data = enhanced_handler.get_user_friendly_error(error, language)
153
+
154
+ # Format as rich markdown message
155
+ return f"""
156
+ ## {error_data['title']}
157
+
158
+ {error_data['message']}
159
+
160
+ **πŸ’‘ Suggestion:** {error_data['suggestion']}
161
+
162
+ **πŸ”§ Action:** {error_data['action']}
163
+ """
164
+ ```
165
+
166
+ #### B. Provider-Specific Error Detection
167
+ ```python
168
+ def _detect_provider_from_error(self, error: str) -> str:
169
+ """Detect provider from error message"""
170
+ error_lower = error.lower()
171
+
172
+ if 'openrouter' in error_lower:
173
+ return 'openrouter'
174
+ elif 'mistral' in error_lower:
175
+ return 'mistral'
176
+ elif 'groq' in error_lower:
177
+ return 'groq'
178
+ # Add more providers...
179
+
180
+ return 'unknown'
181
+ ```
182
+
183
+ ### 3. Error Message Categories
184
+
185
+ #### A. API Errors
186
+ - **404 Not Found:** Model not available
187
+ - **401 Unauthorized:** Invalid API key
188
+ - **403 Forbidden:** Insufficient permissions
189
+ - **429 Rate Limited:** Too many requests
190
+ - **500 Internal Server Error:** Provider issues
191
+
192
+ #### B. Configuration Errors
193
+ - **Missing API Key:** No API key configured
194
+ - **Invalid Model:** Model not supported
195
+ - **Network Issues:** Connection problems
196
+
197
+ #### C. System Errors
198
+ - **Memory Issues:** Context too long
199
+ - **Tool Errors:** Tool execution failures
200
+ - **Streaming Errors:** Real-time processing issues
201
+
202
+ ### 4. Implementation Plan
203
+
204
+ #### Phase 1: Core Infrastructure
205
+ 1. **Create User-Friendly Error Registry**
206
+ - Define error message templates
207
+ - Support multiple languages (EN/RU)
208
+ - Include actionable suggestions
209
+
210
+ 2. **Enhanced Error Handler**
211
+ - Integrate with existing error classification
212
+ - Map technical errors to user-friendly messages
213
+ - Extract context (model, provider, etc.)
214
+
215
+ #### Phase 2: Streaming Integration
216
+ 1. **Update Native Streaming**
217
+ - Replace generic error messages
218
+ - Use enhanced error handler
219
+ - Maintain backward compatibility
220
+
221
+ 2. **Error Context Extraction**
222
+ - Parse error messages for specific details
223
+ - Extract model names, error codes, etc.
224
+ - Provide contextual suggestions
225
+
226
+ #### Phase 3: UI Enhancement
227
+ 1. **Rich Error Display**
228
+ - Markdown formatting for better readability
229
+ - Icons and visual indicators
230
+ - Collapsible error details
231
+
232
+ 2. **Actionable Suggestions**
233
+ - Quick action buttons
234
+ - Model switching suggestions
235
+ - Configuration guidance
236
+
237
+ ### 5. Error Message Examples
238
+
239
+ #### A. OpenRouter 404 Error
240
+ **Current:**
241
+ ```
242
+ ❌ **Error: Error code: 404 - {'error': {'message': 'No endpoints found for openrouter/sonoma-dusk-alpha.', 'code': 404}
243
+ ```
244
+
245
+ **Proposed:**
246
+ ```
247
+ ## 🚫 Model Not Available
248
+
249
+ The selected model 'sonoma-dusk-alpha' is not available on OpenRouter.
250
+
251
+ **πŸ’‘ Suggestion:** Please try a different model or check the OpenRouter documentation for available models.
252
+
253
+ **πŸ”§ Action:** Switch to a different model
254
+
255
+ <details>
256
+ <summary>Technical Details</summary>
257
+
258
+ - Provider: OpenRouter
259
+ - Error Code: 404
260
+ - Model: sonoma-dusk-alpha
261
+ - Timestamp: 2025-01-23 10:30:45
262
+
263
+ </details>
264
+ ```
265
+
266
+ #### B. API Key Error
267
+ **Current:**
268
+ ```
269
+ ❌ **Error: 401 Unauthorized**
270
+ ```
271
+
272
+ **Proposed:**
273
+ ```
274
+ ## πŸ”‘ Authentication Error
275
+
276
+ Invalid OpenRouter API key detected.
277
+
278
+ **πŸ’‘ Suggestion:** Please check your API key configuration in the settings.
279
+
280
+ **πŸ”§ Action:** Check API key settings
281
+
282
+ <details>
283
+ <summary>Technical Details</summary>
284
+
285
+ - Provider: OpenRouter
286
+ - Error Code: 401
287
+ - Issue: Invalid API key
288
+ - Timestamp: 2025-01-23 10:30:45
289
+
290
+ </details>
291
+ ```
292
+
293
+ ### 6. Benefits
294
+
295
+ #### A. User Experience
296
+ - **Clear Communication:** Users understand what went wrong
297
+ - **Actionable Guidance:** Specific steps to resolve issues
298
+ - **Reduced Frustration:** No more silent failures or cryptic errors
299
+
300
+ #### B. Developer Experience
301
+ - **Centralized Error Management:** All error messages in one place
302
+ - **Easy Maintenance:** Simple to add new error types
303
+ - **Consistent Formatting:** Standardized error display
304
+
305
+ #### C. System Reliability
306
+ - **Better Error Tracking:** Detailed error context
307
+ - **Improved Debugging:** Rich error information
308
+ - **Graceful Degradation:** System continues working despite errors
309
+
310
+ ## Implementation Files
311
+
312
+ ### New Files
313
+ 1. `agent_ng/user_friendly_errors.py` - Error message registry
314
+ 2. `agent_ng/enhanced_error_handler.py` - Enhanced error handling
315
+ 3. `agent_ng/error_message_formatter.py` - Message formatting utilities
316
+
317
+ ### Modified Files
318
+ 1. `agent_ng/native_langchain_streaming.py` - Integrate enhanced error handling
319
+ 2. `agent_ng/i18n_translations.py` - Add error message translations
320
+ 3. `agent_ng/tabs/chat_tab.py` - Enhanced error display (if needed)
321
+
322
+ ## Testing Strategy
323
+
324
+ ### 1. Unit Tests
325
+ - Test error message generation
326
+ - Test error classification mapping
327
+ - Test language support
328
+
329
+ ### 2. Integration Tests
330
+ - Test streaming error handling
331
+ - Test UI error display
332
+ - Test error context extraction
333
+
334
+ ### 3. User Acceptance Tests
335
+ - Test user-friendly error messages
336
+ - Test actionable suggestions
337
+ - Test error recovery flows
338
+
339
+ ## Conclusion
340
+
341
+ The implementation of user-friendly error messages will significantly improve the user experience by providing clear, actionable error information instead of technical error codes. The proposed solution leverages the existing error handling infrastructure while adding a user-friendly layer that makes errors understandable and actionable.
342
+
343
+ The phased implementation approach ensures minimal disruption to existing functionality while providing immediate benefits to users experiencing API errors like the OpenRouter 404 issue.