{"record":{"id":"cbae802c2fa87b52","repo":"infiniflow/ragflow","slug":"provider-not-initialized-call-initialize-first-cbae80","errorCode":null,"errorMessage":"Provider not initialized. Call initialize() first.","messagePattern":"Provider not initialized\\. Call initialize\\(\\) first\\.","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"agent/sandbox/providers/local.py","lineNumber":91,"sourceCode":"\n    def initialize(self, config: Dict[str, Any]) -> bool:\n        self.python_bin = str(config.get(\"python_bin\", \"python3\"))\n        self.node_bin = str(config.get(\"node_bin\", \"node\"))\n        self.work_dir = Path(str(config.get(\"work_dir\", \"/tmp/ragflow-codeexec\"))).resolve()\n        self.timeout = int(config.get(\"timeout\", 30))\n        self.max_memory_mb = int(config.get(\"max_memory_mb\", 512))\n        self.max_output_bytes = int(config.get(\"max_output_bytes\", 1024 * 1024))\n        self.max_artifacts = int(config.get(\"max_artifacts\", 20))\n        self.max_artifact_bytes = int(config.get(\"max_artifact_bytes\", 10 * 1024 * 1024))\n\n        self._validate_limits()\n        self.work_dir.mkdir(parents=True, exist_ok=True, mode=0o700)\n        self._initialized = True\n        return True\n\n    def create_instance(self, template: str = \"python\") -> SandboxInstance:\n        if not self._initialized:\n            raise RuntimeError(\"Provider not initialized. Call initialize() first.\")\n\n        language = self._normalize_language(template)\n        instance_id = str(uuid.uuid4())\n        instance_dir = self.work_dir / instance_id\n        instance_dir.mkdir(mode=0o700)\n        (instance_dir / \"artifacts\").mkdir(mode=0o700)\n        self._instances[instance_id] = instance_dir\n\n        return SandboxInstance(\n            instance_id=instance_id,\n            provider=\"local\",\n            status=\"running\",\n            metadata={\"language\": language, \"work_dir\": str(instance_dir)},\n        )\n\n    def execute_code(\n        self,\n        instance_id: str,","sourceCodeStart":73,"sourceCodeEnd":109,"githubUrl":"https://github.com/infiniflow/ragflow/blob/554fb1133ac3861732235ad9c377eb5e0a770665/agent/sandbox/providers/local.py#L73-L109","documentation":"Guard in LocalSandboxProvider.create_instance: initialize() was never successfully completed. initialize() validates limits, creates the 0o700 work_dir, and sets `_initialized` — any earlier failure (e.g., invalid limits raising during _validate_limits) leaves the provider uninitialized.","triggerScenarios":"Instantiating LocalSandboxProvider and calling create_instance directly; initialize() raised in _validate_limits (bad max_* config values) or work_dir creation failed (permission denied), and the error was swallowed upstream.","commonSituations":"work_dir path under a directory the process cannot write (read-only volume, root-owned dir); config passing non-integer or non-positive limits; unit tests constructing providers without init.","solutions":["Call initialize(config) and let its exceptions propagate — fix the underlying limit/work_dir error it reports.","Verify the configured work_dir parent exists and is writable by the service user.","Ensure max_memory_mb / max_output_bytes / max_artifacts / max_artifact_bytes are positive integers."],"exampleFix":"# before\nprovider = LocalSandboxProvider(...)\ninstance = provider.create_instance(\"python\")\n\n# after\nprovider = LocalSandboxProvider(...)\nprovider.initialize(config)  # raises on invalid limits or unwritable work_dir\ninstance = provider.create_instance(\"python\")","handlingStrategy":"validation","validationCode":"import os\n\nwork_dir = config.get(\"work_dir\", \"/tmp/sandbox\")\nparent = os.path.dirname(work_dir.rstrip(\"/\")) or \"/\"\nif not os.access(parent, os.W_OK):\n    raise ValueError(f\"Cannot create sandbox work_dir {work_dir}: parent {parent} not writable\")\nprovider.initialize(config)","typeGuard":"def is_local_provider_ready(p) -> bool:\n    return bool(getattr(p, \"_initialized\", False))","tryCatchPattern":"try:\n    provider.create_instance(\"python\")\nexcept RuntimeError as e:\n    if \"not initialized\" in str(e):\n        provider.initialize(config)\n        instance = provider.create_instance(\"python\")\n    else:\n        raise","preventionTips":["Let initialize() exceptions propagate; its validation errors name the real problem.","Provision a writable work_dir (correct ownership, 0o700) as part of deployment.","Keep limit configs (max_memory_mb, max_output_bytes, ...) positive integers."],"tags":["local","provider","lifecycle","initialization"],"backgroundTag":null,"analyzedSha":"554fb1133ac3861732235ad9c377eb5e0a770665","analyzedAt":"2026-08-15T09:20:16.380Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}