{"record":{"id":"e70546419a0bd1d2","repo":"sgl-project/sglang","slug":"minimax-h3-s3-material-uris-require-a-configure","errorCode":null,"errorMessage":"MiniMax H3 s3:// material URIs require a configured artifact resolver","messagePattern":"MiniMax H3 s3:// material URIs require a configured artifact resolver","errorType":"validation","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"python/sglang/multimodal_gen/runtime/pipelines_core/stages/model_specific_stages/minimax_h3/material_io.py","lineNumber":805,"sourceCode":"    if scheme == \"file\":\n        assert parsed is not None\n        if parsed.netloc not in {\"\", \"localhost\"}:\n            raise ValueError(f\"file URI host must be local, got {parsed.netloc!r}\")\n        output_path = _checked_material_file(\n            Path(urllib.parse.unquote(parsed.path)),\n            label=\"MiniMax H3 material source\",\n        )\n        _validate_material_once(batch, uri, output_path, condition_type=condition_type)\n        return output_path\n    if not scheme:\n        output_path = _checked_material_file(\n            Path(uri).expanduser(),\n            label=\"MiniMax H3 material source\",\n        )\n        _validate_material_once(batch, uri, output_path, condition_type=condition_type)\n        return output_path\n    if scheme == \"s3\":\n        raise NotImplementedError(\n            \"MiniMax H3 s3:// material URIs require a configured artifact resolver\"\n        )\n\n    cache = batch.extra.setdefault(MINIMAX_H3_MATERIAL_CACHE_EXTRA_KEY, {})\n    cached = cache.get(uri)\n    if isinstance(cached, str):\n        cached_path = Path(cached)\n        if cached_path.exists():\n            output_path = _checked_material_file(\n                cached_path,\n                label=\"cached MiniMax H3 material\",\n            )\n            _validate_material_once(\n                batch, uri, output_path, condition_type=condition_type\n            )\n            return output_path\n        cache.pop(uri, None)\n","sourceCodeStart":787,"sourceCodeEnd":823,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/multimodal_gen/runtime/pipelines_core/stages/model_specific_stages/minimax_h3/material_io.py#L787-L823","documentation":"An s3:// material URI was supplied, but MiniMax H3 material localization has no artifact resolver configured, so it explicitly refuses S3.","triggerScenarios":"Passing 's3://bucket/key.png' to minimax_h3_localize_material_uri in a deployment without an S3 resolver.","commonSituations":"Porting configs from another pipeline that supported s3://; assuming object-storage URIs work out of the box.","solutions":["Download/copy the object to local disk or serve it over HTTP(S) and use that URI","Check whether your deployment offers an artifact resolver integration to enable","Use a pre-signed https URL from S3"],"exampleFix":"# before\nuri = \"s3://mybucket/ref.png\"\n# after\nuri = \"https://mybucket.s3.amazonaws.com/ref.png?X-Amz-...\"","handlingStrategy":"fallback","validationCode":"if uri.startswith('s3://'): raise_for_request('s3 not supported; provide https or local path')","typeGuard":null,"tryCatchPattern":"except NotImplementedError as e: convert object to https/local and retry","preventionTips":["Whitelist schemes at the API boundary","Serve assets over http(s) instead of s3://"],"tags":["s3","minimax-h3","material-uri"],"backgroundTag":"unsupported-uri-scheme","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}