{"record":{"id":"3b445f88d7dcb843","repo":"langgenius/dify","slug":"provider-not-initialize-3b445f","errorCode":"provider_not_initialize","errorMessage":"ex.description","messagePattern":"ex\\.description","errorType":"error_code","errorClass":"ProviderNotInitializeError","httpStatus":400,"severity":"error","filePath":"api/controllers/console/datasets/datasets_document.py","lineNumber":569,"sourceCode":"        except services.errors.account.NoPermissionError as e:\n            raise Forbidden(str(e))\n\n        knowledge_config = KnowledgeConfig.model_validate(console_ns.payload or {})\n\n        if not dataset.indexing_technique and not knowledge_config.indexing_technique:\n            raise ValueError(\"indexing_technique is required.\")\n\n        # validate args\n        DocumentService.document_create_args_validate(knowledge_config)\n\n        try:\n            documents, batch = DocumentService.save_document_with_dataset_id(\n                dataset, knowledge_config, current_user, session=session\n            )\n            dataset = DatasetService.get_dataset(dataset_id_str, session)\n\n        except ProviderTokenNotInitError as ex:\n            raise ProviderNotInitializeError(ex.description)\n        except QuotaExceededError:\n            raise ProviderQuotaExceededError()\n        except ModelCurrentlyNotSupportError:\n            raise ProviderModelCurrentlyNotSupportError()\n\n        return dump_response(\n            DatasetAndDocumentResponse,\n            {\"dataset\": dataset, \"documents\": document_responses(documents, session=session), \"batch\": batch},\n        )\n\n    @setup_required\n    @login_required\n    @account_initialization_required\n    @console_ns.response(204, \"Documents deleted successfully\")\n    @with_current_user\n    @with_current_tenant_id\n    @rbac_permission_required(RBACResourceScope.DATASET, RBACPermission.DATASET_EDIT)\n    @with_session","sourceCodeStart":551,"sourceCodeEnd":587,"githubUrl":"https://github.com/langgenius/dify/blob/ef8544b173fd6cd7a8e71df2cab576e52bebbfbc/api/controllers/console/datasets/datasets_document.py#L551-L587","documentation":"ProviderNotInitializeError (HTTP 400, code provider_not_initialize) raised in DatasetDocumentListApi.post when DocumentService.save_document_with_dataset_id raises ProviderTokenNotInitError — the model provider needed for embedding (or LLM for QA/QA-summary mode) has no valid credentials initialised. The original ex.description is forwarded as the error detail.","triggerScenarios":"POST /console/api/datasets/<dataset_id>/documents during the save/indexing step when the embedding model provider (or the LLM provider for parent/child or QA splitting) is not configured or its token is invalid. The dataset may have an embedding_model_provider set, but the provider row has no usable credential.","commonSituations":"First upload to a high_quality dataset before configuring any embedding provider in Settings -> Model Provider; provider credentials revoked/expired after the dataset was created; the provider plugin (e.g. a custom connector) was uninstalled; env vars for the provider missing in self-hosted deployments.","solutions":["In Settings -> Model Provider, configure valid credentials for the embedding model provider the dataset references.","If the dataset points at a removed provider, update dataset.embedding_model_provider / embedding_model to an available one.","Restart the worker/API after changing provider env vars so credentials are picked up.","Verify the provider plugin is installed and enabled when using plugin-based providers."],"exampleFix":"// before\nPOST /console/api/datasets/<id>/documents { ..., indexing_technique: 'high_quality' }\n  →  400 provider_not_initialize\n\n// after — configure embedding provider, then retry\n// Settings → Model Provider → add OpenAI key + embedding model\nPOST /console/api/datasets/<id>/documents { ..., indexing_technique: 'high_quality' }  // 200","handlingStrategy":"validation","validationCode":"from core.model_manager import ModelManager\nfrom graphon.model_runtime.entities.model_entities import ModelType\nfrom core.errors.error import ProviderTokenNotInitError\n\ndef embedding_provider_ready(tenant_id: str, provider: str, model: str) -> bool:\n    if not provider:\n        return False\n    try:\n        mm = ModelManager.for_tenant(tenant_id=tenant_id)\n        mm.get_model_instance(\n            tenant_id=tenant_id, provider=provider, model_type=ModelType.TEXT_EMBEDDING, model=model or \"\",\n        )\n        return True\n    except ProviderTokenNotInitError:\n        return False\n    except Exception:\n        return False\n\nif not embedding_provider_ready(tenant_id, dataset.embedding_model_provider, dataset.embedding_model or \"\"):\n    return error(\"Configure the embedding provider before uploading.\")","typeGuard":"def has_initialised_embedding_provider(tenant_id: str, provider: str, model: str) -> bool:\n    \"\"\"True only when the provider has usable credentials for the model.\"\"\"\n    return embedding_provider_ready(tenant_id, provider, model)","tryCatchPattern":"from core.errors.error import ProviderTokenNotInitError\nfrom controllers.console.app.error import ProviderNotInitializeError\n\ntry:\n    documents, batch = DocumentService.save_document_with_dataset_id(\n        dataset, knowledge_config, current_user, session=session\n    )\nexcept ProviderTokenNotInitError as ex:\n    raise ProviderNotInitializeError(ex.description)","preventionTips":["Run a pre-flight embedding-provider check before the first high_quality upload.","Keep dataset.embedding_model_provider / embedding_model in sync with the configured providers after any provider change.","After uninstalling a provider plugin, sweep datasets referencing it and rebind them."],"tags":["embedding","model-provider","datasets","rag","configuration"],"backgroundTag":null,"analyzedSha":"ef8544b173fd6cd7a8e71df2cab576e52bebbfbc","analyzedAt":"2026-08-12T05:15:17.394Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}