{"record":{"id":"d1166b9f1e4da29a","repo":"infiniflow/ragflow","slug":"sandbox-local-max-output-bytes-must-be-greater-tha","errorCode":null,"errorMessage":"SANDBOX_LOCAL_MAX_OUTPUT_BYTES must be greater than 0.","messagePattern":"SANDBOX_LOCAL_MAX_OUTPUT_BYTES must be greater than 0\\.","errorType":"exception","errorClass":"SandboxProviderConfigError","httpStatus":null,"severity":"error","filePath":"agent/sandbox/providers/local.py","lineNumber":264,"sourceCode":"            },\n            \"max_artifact_bytes\": {\n                \"type\": \"integer\",\n                \"required\": False,\n                \"default\": 10485760,\n                \"label\": \"Max Artifact Size (bytes)\",\n                \"description\": \"Maximum size of a single artifact file. Unit: bytes.\",\n                \"min\": 1024,\n                \"max\": 104857600,\n            },\n        }\n\n    def _validate_limits(self) -> None:\n        if self.timeout <= 0:\n            raise SandboxProviderConfigError(\"SANDBOX_LOCAL_TIMEOUT must be greater than 0.\")\n        if self.max_memory_mb <= 0:\n            raise SandboxProviderConfigError(\"SANDBOX_LOCAL_MAX_MEMORY_MB must be greater than 0.\")\n        if self.max_output_bytes <= 0:\n            raise SandboxProviderConfigError(\"SANDBOX_LOCAL_MAX_OUTPUT_BYTES must be greater than 0.\")\n        if self.max_artifacts < 0:\n            raise SandboxProviderConfigError(\"SANDBOX_LOCAL_MAX_ARTIFACTS must be greater than or equal to 0.\")\n        if self.max_artifact_bytes <= 0:\n            raise SandboxProviderConfigError(\"SANDBOX_LOCAL_MAX_ARTIFACT_BYTES must be greater than 0.\")\n\n    def _prepare_script(self, instance_dir: Path, language: str, code: str, args_json: str) -> tuple[list[str], Path]:\n        if language == \"python\":\n            script_path = instance_dir / \"main.py\"\n            script_path.write_text(build_python_wrapper(code, args_json), encoding=\"utf-8\")\n            return [self.python_bin, str(script_path)], script_path\n        if language in {\"javascript\", \"nodejs\"}:\n            script_path = instance_dir / \"main.js\"\n            script_path.write_text(build_javascript_wrapper(code, args_json), encoding=\"utf-8\")\n            return [self.node_bin, str(script_path)], script_path\n        raise RuntimeError(f\"Unsupported language for local provider: {language}\")\n\n    def _build_child_env(self, instance_dir: Path) -> dict[str, str]:\n        env = {","sourceCodeStart":246,"sourceCodeEnd":282,"githubUrl":"https://github.com/infiniflow/ragflow/blob/554fb1133ac3861732235ad9c377eb5e0a770665/agent/sandbox/providers/local.py#L246-L282","documentation":"Raised by LocalProvider._validate_limits() during initialize() when 'max_output_bytes' is zero or negative. This limit is enforced after each run by _validate_output_size(), which sums the UTF-8 byte length of captured stdout and stderr; a non-positive cap is rejected up front with SandboxProviderConfigError. Default is 1 MiB (1048576).","triggerScenarios":"Calling initialize({'max_output_bytes': 0}); passing a negative number; a config template that renders an unset variable as 0. Note the schema also enforces min 1024, so values 1–1023 pass _validate_limits but are below the documented minimum.","commonSituations":"Expecting 0 to mean 'no output limit'; passing a string that int() coerces to 0; tuning limits down so aggressively that verbose tooling (pip install logs, pytest output) trips the runtime check that the config was meant to relax.","solutions":["Set 'max_output_bytes' to a positive byte count at or above 1024 (e.g. 1048576, the default) in the initialize() config.","Omit the key to accept the 1 MiB default.","If generated code prints large payloads, raise the cap (schema max 10485760) or have the code write to files in the artifacts directory instead of stdout.","Fix the upstream env variable (SANDBOX_LOCAL_MAX_OUTPUT_BYTES) if it feeds this config key with 0."],"exampleFix":"// before\nprovider.initialize({\"max_output_bytes\": 0})\n\n// after\nprovider.initialize({\"max_output_bytes\": 1048576})","handlingStrategy":"validation","validationCode":"def valid_output_limit(config: dict) -> bool:\n    return int(config.get(\"max_output_bytes\", 1048576)) > 0","typeGuard":null,"tryCatchPattern":"try:\n    provider.initialize(config)\nexcept SandboxProviderConfigError as e:\n    if \"SANDBOX_LOCAL_MAX_OUTPUT_BYTES\" in str(e):\n        config[\"max_output_bytes\"] = 1048576\n        provider.initialize(config)\n    else:\n        raise","preventionTips":["Budget stdout+stderr together — both count toward the same byte limit.","Route large data through artifacts files, not prints.","Keep the value >= 1024 to also satisfy the documented schema minimum."],"tags":["sandbox","configuration","local-provider","output-limits","validation"],"backgroundTag":null,"analyzedSha":"554fb1133ac3861732235ad9c377eb5e0a770665","analyzedAt":"2026-08-15T09:20:16.380Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}