Skip to content

Commit 74313a6

Browse files
webui: extend cached props fallback to offline errors
Treat connection failures (refused, DNS, timeout, fetch) the same way as server 5xx so the warning banner shows up when cache is available, instead of falling back to a full error screen.
1 parent d69718d commit 74313a6

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

tools/server/webui/src/lib/stores/server.svelte.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -182,38 +182,45 @@ class ServerStore {
182182
} catch (error) {
183183
const hadCachedProps = this._serverProps !== null;
184184
let errorMessage = 'Failed to connect to server';
185+
let isOfflineLikeError = false;
186+
let isServerSideError = false;
185187

186188
if (error instanceof Error) {
187189
// Handle specific error types with user-friendly messages
188190
if (error.name === 'TypeError' && error.message.includes('fetch')) {
189191
errorMessage = 'Server is not running or unreachable';
192+
isOfflineLikeError = true;
190193
} else if (error.message.includes('ECONNREFUSED')) {
191194
errorMessage = 'Connection refused - server may be offline';
195+
isOfflineLikeError = true;
192196
} else if (error.message.includes('ENOTFOUND')) {
193197
errorMessage = 'Server not found - check server address';
198+
isOfflineLikeError = true;
194199
} else if (error.message.includes('ETIMEDOUT')) {
195200
errorMessage = 'Connection timeout - server may be overloaded';
201+
isOfflineLikeError = true;
196202
} else if (error.message.includes('503')) {
197203
errorMessage = 'Server temporarily unavailable - try again shortly';
204+
isServerSideError = true;
198205
} else if (error.message.includes('500')) {
199206
errorMessage = 'Server error - check server logs';
207+
isServerSideError = true;
200208
} else if (error.message.includes('404')) {
201209
errorMessage = 'Server endpoint not found';
202210
} else if (error.message.includes('403') || error.message.includes('401')) {
203211
errorMessage = 'Access denied';
204212
}
205213
}
206214

207-
const is500Error = error instanceof Error && error.message.includes('500');
215+
let cachedProps: ApiLlamaCppServerProps | null = null;
208216

209217
if (!hadCachedProps) {
210-
const cachedProps = this.readCachedServerProps();
218+
cachedProps = this.readCachedServerProps();
211219
if (cachedProps) {
212220
this._serverProps = cachedProps;
213221
this._error = null;
214222

215-
// For 500 errors with cached props, show as warning instead of error
216-
if (is500Error) {
223+
if (isOfflineLikeError || isServerSideError) {
217224
this._serverWarning = errorMessage;
218225
}
219226

@@ -227,8 +234,7 @@ class ServerStore {
227234
} else {
228235
this._error = null;
229236

230-
// For 500 errors with cached props, show as warning instead of error
231-
if (is500Error) {
237+
if (isOfflineLikeError || isServerSideError) {
232238
this._serverWarning = errorMessage;
233239
}
234240

0 commit comments

Comments
 (0)