{useLocation().pathname}
+} + +// renderPage loads /me (for the CSRF token every write needs) and renders +// the page at /settings/ai in a data router, so its leave guard works. +async function renderPage() { + const api = createApiClient(fakeLocation('/settings/ai'), createNetworkStatus(window), createVerifiedSession(localStorage)) + await api.loadMe() + render( +Settings · Admin
+Loading models…
} + {canList && models.isError &&Model list unavailable: {models.error.message}
} + {!canList && !providerChanged && ( +Add the API key to choose from the provider's models.
+ )} ++ {aiProviderLabels[saved.provider]}'s API key is stored. Remove it (Replace → Remove key) before switching + provider. +
+ )} + {typedModel && ( +{aiProviderLabels[draft.provider]} takes no API key.
+ ) : ( +{saveErrorMessage(save.error)}
} + {resetPrompt.isError && !confirmingReset && ( ++ The system prompt was not reset: {resetPrompt.error.message} +
+ )} + +Save the provider change before adding its key.
} +Verifying…
+ if (verify.isError) { + return ( ++ {verifyErrorMessage(verify.error)} +
+Verified · {formatVerifiedDate(saved.key_verified_at)}
+ } + return ( +Not verified yet
+{children}
+ {error !== null && ( ++ {error} +
+ )} +