diff --git a/semantica/vector_store/methods.py b/semantica/vector_store/methods.py index d74d763b..5a558b27 100644 --- a/semantica/vector_store/methods.py +++ b/semantica/vector_store/methods.py @@ -297,7 +297,11 @@ def create_index( config = vector_store_config.get_all() backend = config.get("default_backend", "faiss") dimension = config.get("dimension", 768) - indexer = VectorIndexer(backend=backend, dimension=dimension, **config) + # backend/dimension are already passed explicitly; drop them from the + # forwarded config so VectorIndexer(..., **remaining_config) doesn't + # receive duplicate keyword arguments. + remaining_config = {k: v for k, v in config.items() if k not in ("default_backend", "dimension")} + indexer = VectorIndexer(backend=backend, dimension=dimension, **remaining_config) return indexer.create_index(vectors, ids, **options) diff --git a/tests/vector_store/test_vector_store.py b/tests/vector_store/test_vector_store.py index 219f88c2..80ff3e59 100644 --- a/tests/vector_store/test_vector_store.py +++ b/tests/vector_store/test_vector_store.py @@ -243,5 +243,19 @@ class TestVectorStore(unittest.TestCase): shutil.rmtree(tmpdir, ignore_errors=True) +class TestCreateIndexFunction(unittest.TestCase): + """create_index() forwards vector_store_config's defaults into VectorIndexer, + which already receives backend/dimension as explicit args. Regression for the + 'got multiple values for keyword argument dimension' crash on the default + (unmocked) config, hit by e.g. `semantica embed index`.""" + + def test_create_index_with_default_config(self): + from semantica.vector_store.methods import create_index + + vectors = [np.array([0.1, 0.2, 0.3]), np.array([0.4, 0.5, 0.6])] + index = create_index(vectors, ids=["a", "b"]) + self.assertIsNotNone(index) + + if __name__ == '__main__': unittest.main()