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

  1. Open Settings → Integrations and connect an AI provider (e.g. OpenAI-compatible endpoint) with a valid API key.
  2. If a provider is already connected but failing, run its connection test from the Integrations page and ensure testStatus becomes 'success'.
  3. Verify the required server-side environment variables / secrets for the chosen provider are set and that the server can reach the provider endpoint.
  4. 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

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


AI-assisted analysis of amruthpillai/reactive-resume@3a5b12e2a4 (2026-08-12). Data as JSON: /api/errors/49e176e544033603. Report an issue: GitHub.