{"record":{"id":"23063843dc55ca85","repo":"agentscope-ai/agentscope","slug":"dimensions-must-be-a-positive-integer-got-dimens","errorCode":null,"errorMessage":"dimensions must be a positive integer, got {dimensions}.","messagePattern":"dimensions must be a positive integer, got (.+?)\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/agentscope/embedding/_embedding_base.py","lineNumber":171,"sourceCode":"        # never reaches provider-specific request payloads.\n        param_dump = resolved_parameters.model_dump()\n        legacy_dimensions = param_dump.pop(\"dimensions\", None)\n        if dimensions is None:\n            if legacy_dimensions is None:\n                raise ValueError(\n                    \"dimensions is required: pass it explicitly to \"\n                    \"EmbeddingModelBase.__init__ or include it in the \"\n                    \"legacy `parameters` mapping.\",\n                )\n            dimensions = int(legacy_dimensions)\n            resolved_parameters = type(resolved_parameters)(**param_dump)\n        elif legacy_dimensions is not None:\n            # Both routes set it — explicit constructor wins, strip the\n            # legacy mirror so it can't drift.\n            resolved_parameters = type(resolved_parameters)(**param_dump)\n\n        if dimensions <= 0:\n            raise ValueError(\n                f\"dimensions must be a positive integer, got {dimensions}.\",\n            )\n\n        self.credential = credential\n        self.model = model\n        self.dimensions = dimensions\n        self.parameters = resolved_parameters\n        self.context_size = context_size\n        self.batch_size = batch_size\n        self.max_retries = max_retries\n        self.retry_delay = retry_delay\n\n    @classmethod\n    def _get_retryable_exceptions(cls) -> tuple[Type[Exception], ...]:\n        \"\"\"Return exception types that should trigger a retry.\n\n        Defaults to an empty tuple (no retries).  Subclasses can\n        override to declare provider-specific retryable exceptions.","sourceCodeStart":153,"sourceCodeEnd":189,"githubUrl":"https://github.com/agentscope-ai/agentscope/blob/e90f1c7592896cc95f6e5ee506194f533378247d/src/agentscope/embedding/_embedding_base.py#L153-L189","documentation":"EmbeddingModelBase validates that the resolved dimensions value is a positive integer; zero or negative values are rejected at construction time since vector dimensionality must be positive.","triggerScenarios":"Passing dimensions=0 or a negative number explicitly, or a legacy parameters mapping with a non-positive dimensions value.","commonSituations":"Dimensions computed from config arithmetic that defaults to 0 when unset; typos (e.g. dimensions=-1 as a 'not set' sentinel); copy-paste from examples with placeholder values.","solutions":["Set dimensions to the model's actual positive dimension count","Guard config-derived values: fall back to a sane default when the computed value is <= 0","Fail fast at config load with a clear message"],"exampleFix":"# before\ndims = cfg.get(\"dims\", 0)\nmodel = Emb(model=\"v3\", dimensions=dims)\n# after\ndims = cfg.get(\"dims\") or 1024\nmodel = Emb(model=\"v3\", dimensions=dims)","handlingStrategy":"validation","validationCode":"dimensions = dimensions if isinstance(dimensions, int) and dimensions > 0 else DEFAULT_DIMS","typeGuard":"def valid_dimensions(d) -> bool:\\n    return isinstance(d, int) and not isinstance(d, bool) and d > 0","tryCatchPattern":null,"preventionTips":["Never use 0/-1 as 'unset' sentinels","Validate numeric config at load time"],"tags":["embedding","dimensions","validation"],"backgroundTag":"invalid-configuration-value","analyzedSha":"e90f1c7592896cc95f6e5ee506194f533378247d","analyzedAt":"2026-08-28T18:24:12.087Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}