Skip to content

Commit cee92af

Browse files
authored
Add context info to server error (#17663)
* fix: Add context info to server error * chore: update webui build output
1 parent ed32089 commit cee92af

File tree

5 files changed

+148
-44
lines changed

5 files changed

+148
-44
lines changed

tools/server/public/index.html.gz

385 Bytes
Binary file not shown.

tools/server/webui/src/lib/components/app/chat/ChatScreen/ChatScreen.svelte

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,7 @@
575575

576576
<DialogChatError
577577
message={activeErrorDialog?.message ?? ''}
578+
contextInfo={activeErrorDialog?.contextInfo}
578579
onOpenChange={handleErrorDialogOpenChange}
579580
open={Boolean(activeErrorDialog)}
580581
type={activeErrorDialog?.type ?? 'server'}

tools/server/webui/src/lib/components/app/dialogs/DialogChatError.svelte

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@
66
open: boolean;
77
type: 'timeout' | 'server';
88
message: string;
9+
contextInfo?: { n_prompt_tokens: number; n_ctx: number };
910
onOpenChange?: (open: boolean) => void;
1011
}
1112
12-
let { open = $bindable(), type, message, onOpenChange }: Props = $props();
13+
let { open = $bindable(), type, message, contextInfo, onOpenChange }: Props = $props();
1314
1415
const isTimeout = $derived(type === 'timeout');
1516
const title = $derived(isTimeout ? 'TCP Timeout' : 'Server Error');
@@ -51,6 +52,15 @@
5152

5253
<div class={`rounded-lg border px-4 py-3 text-sm ${badgeClass}`}>
5354
<p class="font-medium">{message}</p>
55+
{#if contextInfo}
56+
<div class="mt-2 space-y-1 text-xs opacity-80">
57+
<p>
58+
<span class="font-medium">Prompt tokens:</span>
59+
{contextInfo.n_prompt_tokens.toLocaleString()}
60+
</p>
61+
<p><span class="font-medium">Context size:</span> {contextInfo.n_ctx.toLocaleString()}</p>
62+
</div>
63+
{/if}
5464
</div>
5565

5666
<AlertDialog.Footer>

tools/server/webui/src/lib/services/chat.ts

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -764,18 +764,33 @@ export class ChatService {
764764
* @param response - HTTP response object
765765
* @returns Promise<Error> - Parsed error with context info if available
766766
*/
767-
private static async parseErrorResponse(response: Response): Promise<Error> {
767+
private static async parseErrorResponse(
768+
response: Response
769+
): Promise<Error & { contextInfo?: { n_prompt_tokens: number; n_ctx: number } }> {
768770
try {
769771
const errorText = await response.text();
770772
const errorData: ApiErrorResponse = JSON.parse(errorText);
771773

772774
const message = errorData.error?.message || 'Unknown server error';
773-
const error = new Error(message);
775+
const error = new Error(message) as Error & {
776+
contextInfo?: { n_prompt_tokens: number; n_ctx: number };
777+
};
774778
error.name = response.status === 400 ? 'ServerError' : 'HttpError';
775779

780+
if (errorData.error && 'n_prompt_tokens' in errorData.error && 'n_ctx' in errorData.error) {
781+
error.contextInfo = {
782+
n_prompt_tokens: errorData.error.n_prompt_tokens,
783+
n_ctx: errorData.error.n_ctx
784+
};
785+
}
786+
776787
return error;
777788
} catch {
778-
const fallback = new Error(`Server error (${response.status}): ${response.statusText}`);
789+
const fallback = new Error(
790+
`Server error (${response.status}): ${response.statusText}`
791+
) as Error & {
792+
contextInfo?: { n_prompt_tokens: number; n_ctx: number };
793+
};
779794
fallback.name = 'HttpError';
780795
return fallback;
781796
}

0 commit comments

Comments
 (0)