{"record":{"id":"7797e4e3a1e53cd8","repo":"lancedb/lancedb","slug":"invalid-output-dimension-self-output-dimension-f","errorCode":null,"errorMessage":"Invalid output_dimension {self.output_dimension} for {self.name}. Valid options: {self._VALID_DIMENSIONS}","messagePattern":"Invalid output_dimension (.+?) for (.+?)\\. Valid options: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/python/lancedb/embeddings/voyageai.py","lineNumber":252,"sourceCode":"        \"voyage-code-2\",\n    ]\n    multimodal_embedding_models: list = [\"voyage-multimodal-3\", \"voyage-multimodal-3.5\"]\n    contextual_embedding_models: list = [\"voyage-context-3\"]\n\n    def _is_multimodal_model(self, model_name: str):\n        return (\n            model_name in self.multimodal_embedding_models or \"multimodal\" in model_name\n        )\n\n    def _is_contextual_model(self, model_name: str):\n        return model_name in self.contextual_embedding_models or \"context\" in model_name\n\n    def ndims(self):\n        # Handle flexible dimension models\n        if self.name in self._FLEXIBLE_DIM_MODELS:\n            if self.output_dimension is not None:\n                if self.output_dimension not in self._VALID_DIMENSIONS:\n                    raise ValueError(\n                        f\"Invalid output_dimension {self.output_dimension} \"\n                        f\"for {self.name}. Valid options: {self._VALID_DIMENSIONS}\"\n                    )\n                return self.output_dimension\n            return 1024  # default dimension\n\n        if self.name == \"voyage-3-lite\":\n            return 512\n        elif self.name == \"voyage-code-2\":\n            return 1536\n        elif self.name in [\n            \"voyage-4\",\n            \"voyage-4-lite\",\n            \"voyage-4-large\",\n            \"voyage-context-3\",\n            \"voyage-3.5\",\n            \"voyage-3.5-lite\",\n            \"voyage-3\",","sourceCodeStart":234,"sourceCodeEnd":270,"githubUrl":"https://github.com/lancedb/lancedb/blob/c7b051aff7039333a3f61b79217246c27676806a/python/python/lancedb/embeddings/voyageai.py#L234-L270","documentation":"VoyageAI flexible-dimension models (e.g. voyage-3 family) accept a configurable output_dimension, but only within a fixed set of valid values. When ndims() is called and the configured output_dimension is not in _VALID_DIMENSIONS, this ValueError is raised. It catches configuration mistakes early rather than failing at query time with dimension mismatches.","triggerScenarios":"Creating a VoyageAIEmbeddingFunction with a flexible-dim model name and an output_dimension outside the valid set (e.g. 500 or 999 for a model supporting 256/512/1024/2048), then creating a table or querying, which triggers ndims().","commonSituations":"Typo or guess at valid dimensions; copying an output_dimension valid for one flexible model to another that supports a different set; hardcoding a dimension from old model documentation.","solutions":["Set output_dimension to one of the values listed in the error message's _VALID_DIMENSIONS for that model.","Omit output_dimension entirely to use the model default (1024).","Check the VoyageAI documentation for the exact valid dimensions of your specific model name."],"exampleFix":"// before\nfunc = get_registry().get(\"voyageai\").create(name=\"voyage-3-large\", output_dimension=500)\n// after\nfunc = get_registry().get(\"voyageai\").create(name=\"voyage-3-large\", output_dimension=1024)","handlingStrategy":"validation","validationCode":"VALID = {256, 512, 1024, 2048}  # check _VALID_DIMENSIONS for your model\nif output_dimension is not None and output_dimension not in VALID:\n    raise ValueError(f\"output_dimension must be one of {sorted(VALID)}\")","typeGuard":"def has_valid_output_dimension(func) -> bool:\n    od = getattr(func, \"output_dimension\", None)\n    return od is None or od in func._VALID_DIMENSIONS","tryCatchPattern":"try:\n    table = db.create_table(\"t\", mode=\"overwrite\", embedding_dimensions=func.ndims())\nexcept ValueError as e:\n    if \"Invalid output_dimension\" in str(e):\n        func.output_dimension = None  # fall back to model default\n        table = db.create_table(\"t\", mode=\"overwrite\", embedding_dimensions=func.ndims())\n    else:\n        raise","preventionTips":["Only set output_dimension from the model's documented valid list, never arbitrary values.","Check VoyageAI model docs for the exact dimension options of your chosen model.","Omit output_dimension unless you specifically need a reduced vector size."],"tags":["python","embeddings","configuration","dimensions"],"backgroundTag":"invalid-config-value","analyzedSha":"c7b051aff7039333a3f61b79217246c27676806a","analyzedAt":"2026-09-08T23:42:37.579Z","contentChangedAt":"2026-09-08T23:42:37.579Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}