@@ -13,6 +13,7 @@ import {
13
13
import { MainChannels } from '@onlook/models/constants' ;
14
14
import {
15
15
generateObject ,
16
+ RetryError ,
16
17
streamText ,
17
18
type CoreMessage ,
18
19
type CoreSystemMessage ,
@@ -86,10 +87,6 @@ class LlmManager {
86
87
model,
87
88
messages,
88
89
abortSignal : this . abortController ?. signal ,
89
- onError : ( error ) => {
90
- console . error ( 'Error' , JSON . stringify ( error , null , 2 ) ) ;
91
- throw error ;
92
- } ,
93
90
maxSteps : 10 ,
94
91
tools : chatToolSet ,
95
92
maxTokens : 64000 ,
@@ -101,6 +98,9 @@ class LlmManager {
101
98
this . emitMessagePart ( toolResult ) ;
102
99
}
103
100
} ,
101
+ onError : ( error ) => {
102
+ throw error ;
103
+ } ,
104
104
} ) ;
105
105
const streamParts : TextStreamPart < ToolSet > [ ] = [ ] ;
106
106
for await ( const partialStream of fullStream ) {
@@ -115,7 +115,6 @@ class LlmManager {
115
115
} ;
116
116
} catch ( error : any ) {
117
117
try {
118
- console . error ( 'Error' , error ) ;
119
118
if ( error ?. error ?. statusCode ) {
120
119
if ( error ?. error ?. statusCode === 403 ) {
121
120
const rateLimitError = JSON . parse (
@@ -125,21 +124,26 @@ class LlmManager {
125
124
type : 'rate-limited' ,
126
125
rateLimitResult : rateLimitError ,
127
126
} ;
128
- } else {
129
- return {
130
- type : 'error' ,
131
- message : error . error . responseBody ,
132
- } ;
133
127
}
134
128
}
135
- const errorMessage = this . getErrorMessage ( error ) ;
136
- return { message : errorMessage , type : 'error' } ;
137
- } catch ( error ) {
138
- console . error ( 'Error parsing error' , error ) ;
139
- return { message : 'An unknown error occurred' , type : 'error' } ;
140
- } finally {
141
- this . abortController = null ;
129
+
130
+ if ( RetryError . isInstance ( error . error ) ) {
131
+ const parsed = JSON . parse ( error . error . lastError . responseBody ) ;
132
+ return { message : parsed . error . message , type : 'error' } ;
133
+ }
134
+
135
+ if ( error . error instanceof DOMException ) {
136
+ return { message : 'Request aborted' , type : 'error' } ;
137
+ }
138
+
139
+ return { message : JSON . stringify ( error ) , type : 'error' } ;
140
+ } catch ( parseError ) {
141
+ console . error ( 'Error parsing error' , parseError ) ;
142
+ return { message : JSON . stringify ( parseError ) , type : 'error' } ;
142
143
}
144
+ } finally {
145
+ this . abortController ?. abort ( ) ;
146
+ this . abortController = null ;
143
147
}
144
148
}
145
149
@@ -159,22 +163,6 @@ class LlmManager {
159
163
mainWindow ?. webContents . send ( MainChannels . CHAT_STREAM_PARTIAL , res ) ;
160
164
}
161
165
162
- private getErrorMessage ( error : unknown ) : string {
163
- if ( error instanceof Error ) {
164
- return error . message ;
165
- }
166
- if ( typeof error === 'string' ) {
167
- return error ;
168
- }
169
- if ( error instanceof Response ) {
170
- return error . statusText ;
171
- }
172
- if ( error && typeof error === 'object' && 'message' in error ) {
173
- return String ( error . message ) ;
174
- }
175
- return 'An unknown chat error occurred' ;
176
- }
177
-
178
166
public async generateSuggestions ( messages : CoreMessage [ ] ) : Promise < ChatSuggestion [ ] > {
179
167
try {
180
168
const model = await initModel ( LLMProvider . ANTHROPIC , CLAUDE_MODELS . HAIKU , {
0 commit comments