{"record":{"id":"7830b099eafc0a12","repo":"chroma-core/chroma","slug":"invalid-parameter-value-parameter-value","errorCode":null,"errorMessage":"Invalid parameter value: {parameter.value}","messagePattern":"Invalid parameter value: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"chromadb/api/configuration.py","lineNumber":117,"sourceCode":"        \"\"\"Initializes a new instance of the Configuration class. Respecting defaults and\n        validators.\"\"\"\n        self.parameter_map = {}\n        if parameters is not None:\n            for parameter in parameters:\n                if parameter.name not in self.definitions:\n                    raise ValueError(f\"Invalid parameter name: {parameter.name}\")\n\n                definition = self.definitions[parameter.name]\n                # Handle the case where we have a recursive configuration definition\n                if isinstance(parameter.value, dict):\n                    child_type = globals().get(parameter.value.get(\"_type\", None))\n                    if child_type is None:\n                        raise ValueError(\n                            f\"Invalid configuration type: {parameter.value}\"\n                        )\n                    parameter.value = child_type.from_json(parameter.value)\n                if not isinstance(parameter.value, type(definition.default_value)):\n                    raise ValueError(f\"Invalid parameter value: {parameter.value}\")\n\n                parameter_validator = definition.validator\n                if not parameter_validator(parameter.value):\n                    raise ValueError(f\"Invalid parameter value: {parameter.value}\")\n                self.parameter_map[parameter.name] = parameter\n        # Apply the defaults for any missing parameters\n        for name, definition in self.definitions.items():\n            if name not in self.parameter_map:\n                self.parameter_map[name] = ConfigurationParameter(\n                    name=name, value=definition.default_value\n                )\n\n        self.configuration_validator()\n\n    def __repr__(self) -> str:\n        return f\"Configuration({self.parameter_map.values()})\"\n\n    def __eq__(self, __value: object) -> bool:","sourceCodeStart":99,"sourceCodeEnd":135,"githubUrl":"https://github.com/chroma-core/chroma/blob/aecdd12c8a891610db8653630b066b32ceb678b5/chromadb/api/configuration.py#L99-L135","documentation":"Raised in ConfigurationInternal.__init__ (chromadb/api/configuration.py:117) when a parameter value's type does not match type(definition.default_value). The constructor enforces exact declared types (str/int/float/bool or a ConfigurationInternal subclass), so a JSON round-trip that turned a number into a string, or a float where an int is declared, is rejected before the validator even runs.","triggerScenarios":"Passing \"100\" (string) for an int-declared parameter like sync_threshold; passing 0.5 for an int parameter; passing 1 for a bool-declared parameter (isinstance(1, bool) is False); JSON deserialization where numbers arrive as strings from env vars or form input.","commonSituations":"Reading settings from environment variables or YAML without coercion; configs edited by hand where numbers are quoted; cross-language producers (JSON from services that stringify numerics).","solutions":["Coerce the value to the declared type before constructing: int(value), float(value), str(value), or bool parsing for \"true\"/\"false\"","Check the expected type from the definition: type(Cls.definitions[name].default_value)","Regenerate the JSON with the same chromadb version that consumes it"],"exampleFix":"# before\nparams = [ConfigurationParameter(name=\"sync_threshold\", value=\"1000\")]\ncfg = HNSWConfigurationInternal(parameters=params)   # str vs int -> error\n# after\nparams = [ConfigurationParameter(name=\"sync_threshold\", value=int(\"1000\"))]\ncfg = HNSWConfigurationInternal(parameters=params)","handlingStrategy":"validation","validationCode":"def coerce_like_default(cls, name, value):\n    default = cls.definitions[name].default_value\n    target = type(default)\n    if isinstance(value, ConfigurationInternal) or isinstance(value, target):\n        return value\n    return target(value)  # int(\"100\"), float(\"0.5\"), etc.\n\nparams = [ConfigurationParameter(n, coerce_like_default(Cls, n, v))\n          for n, v in raw.items()]","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Coerce env-var or YAML strings to the declared type before constructing","Check the declared type via type(Cls.definitions[name].default_value)","Use to_json/from_json round-trips within one version to preserve types"],"tags":["chromadb","configuration","type-mismatch","serialization"],"backgroundTag":"configuration-validation-failed","analyzedSha":"aecdd12c8a891610db8653630b066b32ceb678b5","analyzedAt":"2026-08-16T21:53:27.228Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}