{"record":{"id":"783d94e12d6b5bb4","repo":"cocoindex-io/cocoindex","slug":"unsupported-dense-vector-dtype-dtype-r-zvec-den","errorCode":null,"errorMessage":"Unsupported dense vector dtype {dtype!r}; zvec dense vectors must be float32 or float16. For compressed storage, use a float32 vector with ZvecVectorDef(quantize=\"int8\").","messagePattern":"Unsupported dense vector dtype (.+?); zvec dense vectors must be float32 or float16\\. For compressed storage, use a float32 vector with ZvecVectorDef\\(quantize=\"int8\"\\)\\.","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/cocoindex/connectors/zvec/_target.py","lineNumber":318,"sourceCode":"    str: _zvec.DataType.ARRAY_STRING,\n    int: _zvec.DataType.ARRAY_INT64,\n    float: _zvec.DataType.ARRAY_DOUBLE,\n    bool: _zvec.DataType.ARRAY_BOOL,\n}\n\n\ndef _json_encoder(value: Any) -> str:\n    return json.dumps(value, default=str)\n\n\ndef _dense_vector_data_type(dtype: np.dtype) -> Any:\n    # zvec's dense vector index only accepts FP32 and FP16. For smaller storage,\n    # keep an FP32 vector and set quantize on ZvecVectorDef (e.g. \"int8\").\n    if dtype == np.float32:\n        return _zvec.DataType.VECTOR_FP32\n    if dtype == np.float16:\n        return _zvec.DataType.VECTOR_FP16\n    raise ValueError(\n        f\"Unsupported dense vector dtype {dtype!r}; zvec dense vectors must be \"\n        \"float32 or float16. For compressed storage, use a float32 vector with \"\n        'ZvecVectorDef(quantize=\"int8\").'\n    )\n\n\ndef _scalar_data_type(type_info: Any) -> tuple[Any, ValueEncoder | None]:\n    base_type = type_info.base_type\n    if base_type in _LEAF_SCALAR_MAPPINGS:\n        return _LEAF_SCALAR_MAPPINGS[base_type]\n    if isinstance(type_info.variant, SequenceType):\n        elem_info = analyze_type_info(type_info.variant.elem_type)\n        mapped = _ARRAY_ELEM_MAPPINGS.get(elem_info.base_type)\n        if mapped is not None:\n            return mapped, None\n    # Fallback: store complex/unknown types as a JSON string.\n    return _zvec.DataType.STRING, _json_encoder\n","sourceCodeStart":300,"sourceCodeEnd":336,"githubUrl":"https://github.com/cocoindex-io/cocoindex/blob/e84aa99b3292c5270a4b313b2a7137ad9ce8ab3b/python/cocoindex/connectors/zvec/_target.py#L300-L336","documentation":"zvec dense vector columns only support float32 and float16 dtypes. _dense_vector_data_type raises ValueError for any other numpy dtype (e.g. float64, bfloat16, int8), and points to ZvecVectorDef(quantize=\"int8\") for compressed storage.","triggerScenarios":"Declaring a vector column whose numpy ndarray annotation/override has dtype float64, bfloat16, int8, etc., resolved via _resolve_column in from_class.","commonSituations":"Embeddings produced by a model/lib in float64 or bfloat16 passed straight through; loading vectors with np.array without dtype=float32.","solutions":["Cast vectors to np.float32 (v.astype(np.float32)) before indexing","Or use np.float16 if half precision is acceptable","For smaller storage, keep float32 and set ZvecVectorDef(quantize=\"int8\")"],"exampleFix":"// before\nvec: Annotated[np.ndarray, VectorSchema(size=768)]  # float64 from model\n// after\nvec: Annotated[np.ndarray, VectorSchema(size=768)] = np.zeros(768, dtype=np.float32)","handlingStrategy":"validation","validationCode":"assert vectors.dtype in (np.float32, np.float16), f\"unsupported dtype {vectors.dtype}; cast to float32\"","typeGuard":"def is_zvec_vector_dtype(a: np.ndarray) -> bool:\n    return a.dtype in (np.float32, np.float16)","tryCatchPattern":"try:\n    schema = ZvecCollection.from_class(Row)\nexcept ValueError as e:\n    if \"Unsupported dense vector dtype\" in str(e):\n        vectors = vectors.astype(np.float32)\n    else:\n        raise","preventionTips":["Cast embedding outputs with .astype(np.float32) before indexing","Never rely on model default dtypes (often float32 but check bfloat16 models)","Use ZvecVectorDef(quantize=\"int8\") for compression instead of int8 dtype"],"tags":["python","numpy","dtype","vector","zvec"],"backgroundTag":"unsupported-dtype","analyzedSha":"e84aa99b3292c5270a4b313b2a7137ad9ce8ab3b","analyzedAt":"2026-09-08T15:59:19.997Z","contentChangedAt":"2026-09-08T15:59:19.997Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}