Skip to content

Handle proxy error #1757

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Apr 9, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 21 additions & 33 deletions apps/studio/electron/main/chat/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
import { MainChannels } from '@onlook/models/constants';
import {
generateObject,
RetryError,
streamText,
type CoreMessage,
type CoreSystemMessage,
Expand Down Expand Up @@ -86,10 +87,6 @@ class LlmManager {
model,
messages,
abortSignal: this.abortController?.signal,
onError: (error) => {
console.error('Error', JSON.stringify(error, null, 2));
throw error;
},
maxSteps: 10,
tools: chatToolSet,
maxTokens: 64000,
Expand All @@ -101,6 +98,9 @@ class LlmManager {
this.emitMessagePart(toolResult);
}
},
onError: (error) => {
throw error;
},
});
const streamParts: TextStreamPart<ToolSet>[] = [];
for await (const partialStream of fullStream) {
Expand All @@ -115,7 +115,6 @@ class LlmManager {
};
} catch (error: any) {
try {
console.error('Error', error);
if (error?.error?.statusCode) {
if (error?.error?.statusCode === 403) {
const rateLimitError = JSON.parse(
Expand All @@ -125,21 +124,26 @@ class LlmManager {
type: 'rate-limited',
rateLimitResult: rateLimitError,
};
} else {
return {
type: 'error',
message: error.error.responseBody,
};
}
}
const errorMessage = this.getErrorMessage(error);
return { message: errorMessage, type: 'error' };
} catch (error) {
console.error('Error parsing error', error);
return { message: 'An unknown error occurred', type: 'error' };
} finally {
this.abortController = null;

if (RetryError.isInstance(error.error)) {
const parsed = JSON.parse(error.error.lastError.responseBody);
return { message: parsed.error.message, type: 'error' };
}

if (error.error instanceof DOMException) {
return { message: 'Request aborted', type: 'error' };
}

return { message: JSON.stringify(error), type: 'error' };
} catch (parseError) {
console.error('Error parsing error', parseError);
return { message: JSON.stringify(parseError), type: 'error' };
}
} finally {
this.abortController?.abort();
this.abortController = null;
}
}

Expand All @@ -159,22 +163,6 @@ class LlmManager {
mainWindow?.webContents.send(MainChannels.CHAT_STREAM_PARTIAL, res);
}

private getErrorMessage(error: unknown): string {
if (error instanceof Error) {
return error.message;
}
if (typeof error === 'string') {
return error;
}
if (error instanceof Response) {
return error.statusText;
}
if (error && typeof error === 'object' && 'message' in error) {
return String(error.message);
}
return 'An unknown chat error occurred';
}

public async generateSuggestions(messages: CoreMessage[]): Promise<ChatSuggestion[]> {
try {
const model = await initModel(LLMProvider.ANTHROPIC, CLAUDE_MODELS.HAIKU, {
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
"dev:studio": "bun --filter @onlook/studio dev",
"build": "bun --filter '!@onlook/web' build",
"ci:build": "bun run build:foundation && bun --filter '!@onlook/web' build",
"dev": "bun --filter '!@onlook/web' dev",
"dev": "bun --elide-lines=0 --filter '!@onlook/web' dev",
"dev:web": "bun --filter @onlook/web dev",
"test": "bun --filter '*' test",
"format": "bun --filter '*' format",
Expand Down