Skip to content

Commit dea4481

Browse files
committed
[BUG] is_default_schema does not do a space check for defaults or #embedding
1 parent c849806 commit dea4481

File tree

2 files changed

+67
-1
lines changed

2 files changed

+67
-1
lines changed

chromadb/test/api/test_schema_e2e.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,64 @@ def test_schema_vector_config_persistence(
107107

108108
collection_name = f"schema_spann_{uuid4().hex}"
109109

110+
schema = Schema()
111+
schema.create_index(
112+
config=VectorIndexConfig(
113+
space="cosine",
114+
spann=SpannIndexConfig(
115+
search_nprobe=16,
116+
write_nprobe=32,
117+
ef_construction=120,
118+
max_neighbors=24,
119+
),
120+
)
121+
)
122+
123+
collection = client.get_or_create_collection(
124+
name=collection_name,
125+
schema=schema,
126+
)
127+
128+
persisted_schema = collection.schema
129+
assert persisted_schema is not None
130+
131+
print(persisted_schema.serialize_to_json())
132+
133+
embedding_override = persisted_schema.keys["#embedding"].float_list
134+
assert embedding_override is not None
135+
vector_index = embedding_override.vector_index
136+
assert vector_index is not None
137+
assert vector_index.enabled is True
138+
assert vector_index.config is not None
139+
assert vector_index.config.space is not None
140+
assert vector_index.config.space == "cosine"
141+
142+
client_reloaded = client_factories.create_client_from_system()
143+
reloaded_collection = client_reloaded.get_collection(
144+
name=collection_name,
145+
)
146+
147+
reloaded_schema = reloaded_collection.schema
148+
assert reloaded_schema is not None
149+
reloaded_embedding_override = reloaded_schema.keys["#embedding"].float_list
150+
assert reloaded_embedding_override is not None
151+
reloaded_vector_index = reloaded_embedding_override.vector_index
152+
assert reloaded_vector_index is not None
153+
assert reloaded_vector_index.config is not None
154+
assert reloaded_vector_index.config.space is not None
155+
assert reloaded_vector_index.config.space == "cosine"
156+
157+
158+
def test_schema_vector_config_persistence_with_ef(
159+
client_factories: "ClientFactories",
160+
) -> None:
161+
"""Ensure schema-provided SPANN settings persist across client restarts."""
162+
163+
client = client_factories.create_client_from_system()
164+
client.reset()
165+
166+
collection_name = f"schema_spann_{uuid4().hex}"
167+
110168
schema = Schema()
111169
embedding_function = SimpleEmbeddingFunction(dim=6)
112170
schema.create_index(

rust/types/src/collection_schema.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1547,8 +1547,13 @@ impl Schema {
15471547
if vector_index.enabled {
15481548
return false;
15491549
}
1550+
if !is_embedding_function_default(&vector_index.config.embedding_function) {
1551+
return false;
1552+
}
1553+
if !is_space_default(&vector_index.config.space) {
1554+
return false;
1555+
}
15501556
// Check that the config has default structure
1551-
// We allow space and embedding_function to vary, but check structure
15521557
if vector_index.config.source_key.is_some() {
15531558
return false;
15541559
}
@@ -1613,6 +1618,9 @@ impl Schema {
16131618
if !vector_index.enabled {
16141619
return false;
16151620
}
1621+
if !is_space_default(&vector_index.config.space) {
1622+
return false;
1623+
}
16161624
// Check that embedding_function is default
16171625
if !is_embedding_function_default(&vector_index.config.embedding_function) {
16181626
return false;

0 commit comments

Comments
 (0)