summaryrefslogtreecommitdiff
path: root/llama.cpp/tools/server/webui/src/routes/+error.svelte
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2026-02-12 20:57:17 +0100
committerMitja Felicijan <mitja.felicijan@gmail.com>2026-02-12 20:57:17 +0100
commitb333b06772c89d96aacb5490d6a219fba7c09cc6 (patch)
tree211df60083a5946baa2ed61d33d8121b7e251b06 /llama.cpp/tools/server/webui/src/routes/+error.svelte
downloadllmnpc-b333b06772c89d96aacb5490d6a219fba7c09cc6.tar.gz
Engage!
Diffstat (limited to 'llama.cpp/tools/server/webui/src/routes/+error.svelte')
-rw-r--r--llama.cpp/tools/server/webui/src/routes/+error.svelte70
1 files changed, 70 insertions, 0 deletions
diff --git a/llama.cpp/tools/server/webui/src/routes/+error.svelte b/llama.cpp/tools/server/webui/src/routes/+error.svelte
new file mode 100644
index 0000000..faddf0b
--- /dev/null
+++ b/llama.cpp/tools/server/webui/src/routes/+error.svelte
@@ -0,0 +1,70 @@
+<script lang="ts">
+ import { page } from '$app/stores';
+ import { goto } from '$app/navigation';
+ import { ServerErrorSplash } from '$lib/components/app';
+
+ let error = $derived($page.error);
+ let status = $derived($page.status);
+
+ // Check if this is an API key related error
+ let isApiKeyError = $derived(
+ status === 401 ||
+ status === 403 ||
+ error?.message?.toLowerCase().includes('access denied') ||
+ error?.message?.toLowerCase().includes('unauthorized') ||
+ error?.message?.toLowerCase().includes('invalid api key')
+ );
+
+ function handleRetry() {
+ // Navigate back to home page after successful API key validation
+ goto('#/');
+ }
+</script>
+
+<svelte:head>
+ <title>Error {status} - WebUI</title>
+</svelte:head>
+
+{#if isApiKeyError}
+ <ServerErrorSplash
+ error={error?.message || 'Access denied - check server permissions'}
+ onRetry={handleRetry}
+ showRetry={false}
+ showTroubleshooting={false}
+ />
+{:else}
+ <!-- Generic error page for non-API key errors -->
+ <div class="flex h-full items-center justify-center">
+ <div class="w-full max-w-md px-4 text-center">
+ <div class="mb-6">
+ <div
+ class="mx-auto mb-4 flex h-16 w-16 items-center justify-center rounded-full bg-destructive/10"
+ >
+ <svg
+ class="h-8 w-8 text-destructive"
+ fill="none"
+ stroke="currentColor"
+ viewBox="0 0 24 24"
+ >
+ <path
+ stroke-linecap="round"
+ stroke-linejoin="round"
+ stroke-width="2"
+ d="M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-2.5L13.732 4c-.77-.833-1.964-.833-2.732 0L3.732 16.5c-.77.833.192 2.5 1.732 2.5z"
+ />
+ </svg>
+ </div>
+ <h1 class="mb-2 text-2xl font-bold">Error {status}</h1>
+ <p class="text-muted-foreground">
+ {error?.message || 'Something went wrong'}
+ </p>
+ </div>
+ <button
+ onclick={() => goto('#/')}
+ class="rounded-md bg-primary px-4 py-2 text-primary-foreground hover:bg-primary/90"
+ >
+ Go Home
+ </button>
+ </div>
+ </div>
+{/if}