{"record":{"id":"a5e77277e383e72f","repo":"cocoindex-io/cocoindex","slug":"invalid-vector-dimension-vector-schema-size-a5e772","errorCode":null,"errorMessage":"Invalid vector dimension: {vector_schema.size}","messagePattern":"Invalid vector dimension: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/cocoindex/connectors/lancedb/_target.py","lineNumber":179,"sourceCode":"\n    # Check for LanceType annotation override\n    for annotation in type_info.annotations:\n        if isinstance(annotation, LanceType):\n            return _TypeMapping(annotation.pa_type, annotation.encoder)\n\n    base_type = type_info.base_type\n\n    # Check direct leaf type mappings\n    if base_type in _LEAF_TYPE_MAPPINGS:\n        return _LEAF_TYPE_MAPPINGS[base_type]\n\n    # NumPy ndarray: map to fixed-size list; dimension is handled at the schema layer\n    if base_type is np.ndarray:\n        if vector_schema is None:\n            raise ValueError(\"VectorSchemaProvider is required for NumPy ndarray type.\")\n\n        if vector_schema.size <= 0:\n            raise ValueError(f\"Invalid vector dimension: {vector_schema.size}\")\n\n        # Default to float32 for vectors; use float16 for half-precision\n        pa_elem = (\n            pa.float16()\n            if vector_schema.dtype in (np.half, np.float16)\n            else pa.float32()\n        )\n        # Create fixed-size list type for vector\n        return _TypeMapping(pa.list_(pa_elem, list_size=vector_schema.size))\n\n    elif vector_schema is not None:\n        raise ValueError(\n            f\"VectorSchemaProvider is only supported for NumPy ndarray type. Got type: {python_type}\"\n        )\n\n    # Complex types that need JSON encoding\n    if isinstance(\n        type_info.variant, (SequenceType, MappingType, RecordType, UnionType, AnyType)","sourceCodeStart":161,"sourceCodeEnd":197,"githubUrl":"https://github.com/cocoindex-io/cocoindex/blob/e84aa99b3292c5270a4b313b2a7137ad9ce8ab3b/python/cocoindex/connectors/lancedb/_target.py#L161-L197","documentation":"When mapping an np.ndarray column with a VectorSchemaProvider, the provider's size (vector dimension) must be positive. A zero or negative size cannot produce a valid Arrow fixed-size-list, so a ValueError names the offending dimension.","triggerScenarios":"Passing `VectorSchemaProvider(size=0)` or a negative size in column_specs for an ndarray column, typically from a variable that resolved to 0 (e.g. `len(embedding)` computed before any embedding exists, or an unset config value).","commonSituations":"Dimension read from an empty config/CLI value; constructing the provider from an uninitialized list/array; model config where embedding dimension defaulted to 0.","solutions":["Pass the actual model embedding dimension, e.g. `VectorSchemaProvider(size=768)` for a 768-dim model.","Validate the dimension variable before constructing the provider (`if dim <= 0: raise ...`).","Trace where `size` comes from; fix the config/default that yields 0."],"exampleFix":"// before\nVectorSchemaProvider(size=len(my_embeddings))  # len == 0 before any data\n// after\nVectorSchemaProvider(size=768)  # static model dimension, or validate dim > 0 first","handlingStrategy":"validation","validationCode":"dim = 768  # or from model config\nassert isinstance(dim, int) and dim > 0, f\"Invalid vector dim: {dim}\"\nspec = VectorSchemaProvider(size=dim)","typeGuard":null,"tryCatchPattern":"try:\n    spec = VectorSchemaProvider(size=dim)\nexcept ValueError as e:\n    if \"Invalid vector dimension\" in str(e):\n        raise RuntimeError(f\"Vector dim must be > 0, got {dim!r}; check config\") from e\n    raise","preventionTips":["Never compute size from an empty/uninitialized embedding list; hardcode or load the model dimension.","Validate dimension > 0 at config load time.","Log the resolved dimension when constructing the provider."],"tags":["python","lancedb","vector","validation"],"backgroundTag":"value-out-of-range","analyzedSha":"e84aa99b3292c5270a4b313b2a7137ad9ce8ab3b","analyzedAt":"2026-09-08T15:59:19.997Z","contentChangedAt":"2026-09-08T15:59:19.997Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}