amruthpillai/reactive-resume · warning · Error
This feature requires a connected AI provider. Please set on
Error message
This feature requires a connected AI provider. Please set one up in the settings.
What it means
Thrown in the PDF import branch when isLoadingAiProviders is false but hasUsableProvider is false — meaning the provider list finished loading and no provider is both enabled AND testStatus==='success' (see useHasUsableAiProvider). PDF parsing requires a working AI provider on the server, so the client short-circuits before sending the file. The thrown Error is caught by onSubmit's catch and shown as a toast.
Source
Thrown at apps/web/src/dialogs/resume/import.tsx:167
try {
let data: ResumeData | undefined;
if (value.type === "json-resume-json") {
data = parseJSONResume(await value.file.text());
}
if (value.type === "reactive-resume-json") {
data = parseReactiveResumeJSON(await value.file.text());
}
if (value.type === "reactive-resume-v4-json") {
data = parseReactiveResumeV4JSON(await value.file.text());
}
if (value.type === "pdf") {
if (isLoadingAiProviders) throw new Error(t`Loading AI providers. Please try again in a moment.`);
if (!hasUsableProvider)
throw new Error(t`This feature requires a connected AI provider. Please set one up in the settings.`);
const base64 = await fileToBase64(value.file);
data = await client.ai.parsePdf({
file: { name: value.file.name, data: base64 },
});
}
if (value.type === "docx") {
if (isLoadingAiProviders) throw new Error(t`Loading AI providers. Please try again in a moment.`);
if (!hasUsableProvider)
throw new Error(t`This feature requires a connected AI provider. Please set one up in the settings.`);
const base64 = await fileToBase64(value.file);
const mediaType =
value.file.type === "application/msword"
? ("application/msword" as const)View on GitHub (pinned to 3a5b12e2a4)
Solutions
- Open Settings → Integrations and connect an AI provider (e.g. OpenAI-compatible endpoint) with a valid API key.
- If a provider is already connected but failing, run its connection test from the Integrations page and ensure testStatus becomes 'success'.
- Verify the required server-side environment variables / secrets for the chosen provider are set and that the server can reach the provider endpoint.
- Once a usable provider exists, retry the PDF import.
Example fix
// before: no usable provider, import attempted // user clicks Import with a PDF selected -> toast: 'requires a connected AI provider' // after: connect a provider, confirm test passes, then import // Settings -> Integrations -> add provider -> enter key -> test -> status 'success' // return to import dialog, select PDF, import succeeds
Defensive patterns
Strategy: validation
Validate before calling
const { hasUsableProvider } = useHasUsableAiProvider();
function canImportPdf(): boolean {
return hasUsableProvider;
}
// only enable the PDF/DOCX flow when canImportPdf() is true Type guard
function hasUsableAi(providers: { enabled: boolean; testStatus: string }[]): boolean {
return providers.some((p) => p.enabled && p.testStatus === 'success');
} Try / catch
// the dialog already shows an inline 'Set up a provider' hint;
// on submit, branch before throwing:
if (!hasUsableProvider) {
// navigate to Integrations instead of throwing
} Prevention
- Configure and connection-test at least one AI provider before offering PDF/DOCX import.
- Show the 'Set up a provider' banner (already in the dialog) and keep the Import button disabled until hasUsableProvider is true.
- Periodically re-test providers so testStatus stays accurate.
When it happens
Trigger: User has zero AI providers configured and tries to import a PDF. User has providers configured but all are disabled. User has enabled providers but their connection test failed (testStatus !== 'success'), so none are 'usable'. The provider was just disconnected/deleted and the query has already refetched.
Common situations: Fresh install with no AI integration set up. An API key was entered but never passed the connection test. The provider's API key was revoked or the endpoint changed, so the stored testStatus is stale-failed. Environment variables for the AI provider are missing on the server so the connection test fails.
Related errors
- Loading AI providers. Please try again in a moment.
- No data was returned from the AI provider.
- PRECONDITION_FAILED
- Private storage writes are not supported by the local filesy
- JSON.stringify(flattenError(error))
AI-assisted analysis of amruthpillai/reactive-resume@3a5b12e2a4 (2026-08-12).
Data as JSON: /api/errors/49e176e544033603.
Report an issue: GitHub.