chroma-core/chroma · error · ValueError
Tenant name must be at least 3 characters long
Error message
Tenant name must be at least 3 characters long
What it means
SegmentAPI.create_tenant (chromadb/api/segment.py:194) requires tenant names of at least 3 characters. The check runs before the sysdb write, so a short name fails fast with ValueError and no tenant is created.
Source
Thrown at chromadb/api/segment.py:199
@override
def delete_database(self, name: str, tenant: str = DEFAULT_TENANT) -> None:
self._sysdb.delete_database(name=name, tenant=tenant)
@trace_method("SegmentAPI.list_databases", OpenTelemetryGranularity.OPERATION)
@override
def list_databases(
self,
limit: Optional[int] = None,
offset: Optional[int] = None,
tenant: str = DEFAULT_TENANT,
) -> Sequence[t.Database]:
return self._sysdb.list_databases(limit=limit, offset=offset, tenant=tenant)
@trace_method("SegmentAPI.create_tenant", OpenTelemetryGranularity.OPERATION)
@override
def create_tenant(self, name: str) -> None:
if len(name) < 3:
raise ValueError("Tenant name must be at least 3 characters long")
self._sysdb.create_tenant(
name=name,
)
@override
def get_user_identity(self) -> UserIdentity:
return UserIdentity(
user_id="",
tenant=DEFAULT_TENANT,
databases=[DEFAULT_DATABASE],
)
@trace_method("SegmentAPI.get_tenant", OpenTelemetryGranularity.OPERATION)
@override
def get_tenant(self, name: str) -> t.Tenant:
return self._sysdb.get_tenant(name=name)
View on GitHub (pinned to aecdd12c8a)
Solutions
- Use a tenant name of 3+ characters: 'ac' -> 'tenant-ac'
- Map short internal tenant codes to longer canonical names via a lookup table
- Validate/normalize tenant names at the API boundary before they reach Chroma
Example fix
# before client.create_tenant(name='a1') # ValueError # after client.create_tenant(name='tenant-a1')
Defensive patterns
Strategy: validation
Validate before calling
def validate_tenant_name(name: str, minimum: int = 3) -> str:
name = (name or '').strip()
if len(name) < minimum:
raise ValueError(f'tenant name must be at least {minimum} characters: {name!r}')
return name Type guard
def is_valid_tenant_name(name: str) -> bool:
return isinstance(name, str) and len(name.strip()) >= 3 Try / catch
try:
client.create_tenant(name=tenant)
except ValueError as e:
if 'at least 3 characters' in str(e):
client.create_tenant(name=f'tenant-{tenant}')
else:
raise Prevention
- Map short tenant codes to longer canonical tenant names at your API boundary
- Validate tenant names during onboarding, before any Chroma call
- Never pass empty or 1-2 character identifiers into create_tenant
When it happens
Trigger: client.create_tenant('ac') or create_tenant('x') - any tenant name with len < 3, including ''.
Common situations: Multi-tenant apps deriving tenant ids from short codes ('a1', 'us'); onboarding flows accepting arbitrary user input as tenant name; provisioning scripts with abbreviated tenant slugs.
Related errors
- Expected collection name that (1) contains 3-63 characters,
- Database name must be at least 3 characters long
- MinK keys cannot be empty
- MaxK keys cannot be empty
- GroupBy keys cannot be empty
AI-assisted analysis of chroma-core/chroma@aecdd12c8a (2026-08-16).
Data as JSON: /api/errors/5085ff8aef115403.
Report an issue: GitHub.