{"record":{"id":"d14c3b84ceb6dd7d","repo":"docling-project/docling","slug":"unsupported-kserve-request-parameter-type-for-grpc","errorCode":null,"errorMessage":"Unsupported KServe request parameter type for gRPC: key={key}, type={type(value)}. Supported: bool, int, float, str.","messagePattern":"Unsupported KServe request parameter type for gRPC: key=(.+?), type=(.+?)\\. Supported: bool, int, float, str\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"docling/models/inference_engines/common/kserve_v2_grpc.py","lineNumber":105,"sourceCode":"            parameter.int64_param = int_value\n            return\n        if int_value <= (2**63 - 1):\n            parameter.int64_param = int_value\n            return\n        if int_value <= (2**64 - 1):\n            parameter.uint64_param = int_value\n            return\n        raise ValueError(\n            \"Unsupported KServe request parameter integer range for gRPC: \"\n            f\"key={key}, value={int_value}\"\n        )\n    if isinstance(value, float | np.floating):\n        parameter.double_param = float(value)\n        return\n    if isinstance(value, str):\n        parameter.string_param = value\n        return\n    raise ValueError(\n        \"Unsupported KServe request parameter type for gRPC: \"\n        f\"key={key}, type={type(value)}. Supported: bool, int, float, str.\"\n    )\n\n\ndef _encode_contents(tensor: np.ndarray, contents: Any) -> None:\n    \"\"\"Populate an InferTensorContents message from a numpy array (non-binary path).\"\"\"\n    flat = tensor.flatten()\n    if tensor.dtype == np.float32:\n        contents.fp32_contents.extend(flat.tolist())\n    elif tensor.dtype == np.float64:\n        contents.fp64_contents.extend(flat.tolist())\n    elif tensor.dtype in (np.int8, np.int16, np.int32):\n        contents.int_contents.extend(flat.astype(np.int32).tolist())\n    elif tensor.dtype == np.int64:\n        contents.int64_contents.extend(flat.tolist())\n    elif tensor.dtype in (np.uint8, np.uint16, np.uint32):\n        contents.uint_contents.extend(flat.astype(np.uint32).tolist())","sourceCodeStart":87,"sourceCodeEnd":123,"githubUrl":"https://github.com/docling-project/docling/blob/61d76f1ff3f8428065465889f7b4577da7df704c/docling/models/inference_engines/common/kserve_v2_grpc.py#L87-L123","documentation":"Raised as ValueError by _set_request_parameter when a request parameter value has a type the KServe gRPC protobuf schema cannot represent. Only bool, int (incl. numpy integers), float (incl. numpy floats), and str are accepted; note bool is checked first because bool is a subclass of int in Python.","triggerScenarios":"Passing None, list, dict, tuple, bytes, or any custom object as a value in the parameters mapping of a KServe gRPC inference request.","commonSituations":"Forwarding an unfiltered config dict (which contains nested structures) as request parameters; optional parameters left as None; json-serialized values that arrive as lists.","solutions":["Flatten/serialize non-primitive values: json.dumps for lists/dicts, drop None entries.","Filter the parameters mapping to bool/int/float/str before the call.","If you need structured parameters, encode them as a JSON string parameter."],"exampleFix":"# before\nparams = {'thresholds': [0.1, 0.5], 'note': None}  # list/None -> ValueError\n\n# after\nimport json\nparams = {'thresholds': json.dumps([0.1, 0.5])}\nparams = {k: v for k, v in params.items() if v is not None}","handlingStrategy":"validation","validationCode":"import json\nallowed = (bool, int, float, str)\nclean = {}\nfor k, v in params.items():\n    if v is None:\n        continue\n    clean[k] = json.dumps(v) if isinstance(v, (list, dict)) else v","typeGuard":"def is_grpc_param(v) -> bool:\n    return isinstance(v, (bool, int, float, str)) and not isinstance(v, bool) or isinstance(v, bool)","tryCatchPattern":null,"preventionTips":["Never forward raw config dicts as request parameters — flatten first.","JSON-encode structured values; drop None.","Centralize parameter sanitization in one helper used by all engines."],"tags":["kserve","grpc","validation","parameters","serialization"],"backgroundTag":null,"analyzedSha":"61d76f1ff3f8428065465889f7b4577da7df704c","analyzedAt":"2026-08-14T23:53:18.727Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}