{"record":{"id":"180b0963b6f87ee9","repo":"chroma-core/chroma","slug":"invalid-field-in-contains-join-contains","errorCode":null,"errorMessage":"Invalid field in contains: {', '.join(contains)}, available fields: {', '.join(record_set.keys())}","messagePattern":"Invalid field in contains: (.+?), available fields: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"chromadb/api/types.py","lineNumber":519,"sourceCode":"def validate_record_set_contains_one(\n    record_set: BaseRecordSet, contains_one: Set[str]\n) -> None:\n    \"\"\"\n    Validates that exactly one of the fields in contains_one is not None.\n    \"\"\"\n    _validate_record_set_contains(record_set, contains_one)\n    if sum(record_set[field] is not None for field in contains_one) != 1:  # type: ignore[literal-required]\n        raise ValueError(f\"Exactly one of {', '.join(contains_one)} must be provided\")\n\n\ndef _validate_record_set_contains(\n    record_set: BaseRecordSet, contains: Set[str]\n) -> None:\n    \"\"\"\n    Validates that all fields in contains are valid fields of the Record.\n    \"\"\"\n    if any(field not in record_set for field in contains):\n        raise ValueError(\n            f\"Invalid field in contains: {', '.join(contains)}, available fields: {', '.join(record_set.keys())}\"\n        )\n\n\nParameter = TypeVar(\"Parameter\", Document, Image, Embedding, Metadata, ID)\n\nInclude = List[\n    Literal[\"documents\", \"embeddings\", \"metadatas\", \"distances\", \"uris\", \"data\"]\n]\nIncludeMetadataDocuments: Include = [\"metadatas\", \"documents\"]\nIncludeMetadataDocumentsEmbeddings: Include = [\"metadatas\", \"documents\", \"embeddings\"]\nIncludeMetadataDocumentsEmbeddingsDistances: Include = [\n    \"metadatas\",\n    \"documents\",\n    \"embeddings\",\n    \"distances\",\n]\nIncludeMetadataDocumentsDistances: Include = [\"metadatas\", \"documents\", \"distances\"]","sourceCodeStart":501,"sourceCodeEnd":537,"githubUrl":"https://github.com/chroma-core/chroma/blob/aecdd12c8a891610db8653630b066b32ceb678b5/chromadb/api/types.py#L501-L537","documentation":"_validate_record_set_contains (chromadb/api/types.py:511) is the shared precondition of the contains_any/contains_one validators: every field named in the contains set must be an existing key of the record set. It guards against programming errors in code that assembles validator arguments - not against bad end-user data. Public-API users do not see it; it surfaces when custom code invokes the validators with a field name the record set does not have.","triggerScenarios":"Calling validate_record_set_contains_one(record_set, {'documens'}) with a typo; passing {'metadatas'} as a contains field when validating a query record set that has no metadatas key; forks or frameworks that rename record-set fields without updating the contains sets.","commonSituations":"Typos in field-name sets; assuming all record set types (insert vs query vs update) share the same keys; hard-coded field lists drifting from the actual record set definition.","solutions":["Spell field names exactly as the record set keys - print record_set.keys() to see what is available","Derive the contains set from shared helpers like get_default_embeddable_record_set_fields() instead of literals","Drop fields from the contains set that do not exist for that operation"],"exampleFix":null,"handlingStrategy":"type-guard","validationCode":"if not set(contains).issubset(record_set.keys()):\n    raise ValueError(f'unknown fields: {set(contains) - set(record_set.keys())}')\nvalidate_record_set_contains_one(record_set, contains)","typeGuard":"def valid_contains(record_set, contains) -> bool:\n    return all(f in record_set for f in contains)","tryCatchPattern":null,"preventionTips":["Derive contains sets from record_set.keys() or Chroma helpers, never hard-code them","Print record_set.keys() when wiring up validators","Keep field-name sets in one constant per record-set type"],"tags":["chromadb","python","validation","internal-api","field-names"],"backgroundTag":"invalid-field-name","analyzedSha":"aecdd12c8a891610db8653630b066b32ceb678b5","analyzedAt":"2026-08-16T21:53:27.228Z","schemaVersion":2},"datasetVersion":"2026-08-16T23:17:17.608Z"}