embedflow 0.4.0__tar.gz → 0.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {embedflow-0.4.0 → embedflow-0.5.0}/CHANGELOG.md +10 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/CITATION.cff +2 -2
- {embedflow-0.4.0 → embedflow-0.5.0}/PKG-INFO +15 -4
- {embedflow-0.4.0 → embedflow-0.5.0}/README.md +10 -2
- {embedflow-0.4.0 → embedflow-0.5.0}/README_PYPI.md +10 -2
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/configuration.md +16 -1
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/installation.md +7 -0
- embedflow-0.5.0/docs/integrations/weaviate.md +114 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/limitations.md +1 -1
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/releasing.md +7 -7
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/__init__.py +2 -2
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/cli.py +134 -50
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/compatibility/evaluate.py +3 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/config.py +71 -3
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/indexes/__init__.py +2 -0
- embedflow-0.5.0/embedflow/indexes/weaviate_backend.py +779 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/migration/facade.py +37 -10
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/runtime.py +16 -3
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow.egg-info/PKG-INFO +15 -4
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow.egg-info/SOURCES.txt +9 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow.egg-info/requires.txt +4 -0
- embedflow-0.5.0/examples/weaviate/README.md +32 -0
- embedflow-0.5.0/examples/weaviate/compose.yaml +19 -0
- embedflow-0.5.0/examples/weaviate/embedflow.yaml.example +22 -0
- embedflow-0.5.0/examples/weaviate/run_demo.sh +7 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/pyproject.toml +4 -2
- {embedflow-0.4.0 → embedflow-0.5.0}/scripts/release_gate.py +19 -2
- embedflow-0.5.0/scripts/validate_weaviate.py +301 -0
- embedflow-0.5.0/scripts/weaviate_fixture.py +120 -0
- embedflow-0.5.0/scripts/weaviate_smoke.py +50 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/CONTRIBUTING.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/LICENSE +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/MANIFEST.in +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/SECURITY.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/api.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/assets/README.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/assets/candidate-gap-example.svg +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/assets/dashboard-screenshot.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/assets/terminal-demo.txt +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/cli.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/concepts.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/contributing-benchmarks.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/economics.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/integrations/faiss.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/integrations/milvus.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/integrations/pgvector.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/integrations/pinecone.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/integrations/qdrant.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/methodology.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/quickstart.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/docs/registry.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/__main__.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/analysis.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/api.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/cache/__init__.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/cache/base.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/cache/persistent_cache.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/compatibility/__init__.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/compatibility/candidate_gap.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/compatibility/containment.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/compatibility/metrics.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/compatibility/migration_depth.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/compatibility/probe.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/compatibility/report.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/compatibility/t2.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/data/__init__.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/data/registry/__init__.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/data/registry/benchmark_profiles.jsonl +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/data/registry/checksums.sha256 +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/data/registry/migrations.jsonl +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/data/registry/registry_manifest.json +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/data/registry/research_summaries.json +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/data/registry/schema_version.json +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/frozen/T2_V1_FROZEN_SPEC.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/frozen/T2_V1_FROZEN_SPEC.sha256 +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/indexes/base.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/indexes/faiss_backend.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/indexes/milvus_backend.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/indexes/pgvector_backend.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/indexes/pinecone_backend.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/indexes/qdrant_backend.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/metrics/__init__.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/metrics/latency.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/migration/__init__.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/migration/compatibility.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/migration/materializer.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/migration/planner.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/migration/state.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/models/__init__.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/models/base.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/models/huggingface.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/registry/__init__.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/registry/loader.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/registry/matcher.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/registry/schema.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/serving/__init__.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/serving/api.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/serving/engine.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/serving/factory.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow/serving/schemas.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow.egg-info/dependency_links.txt +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow.egg-info/entry_points.txt +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/embedflow.egg-info/top_level.txt +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/faiss/README.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/faiss/documents.jsonl +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/faiss/embedflow.yaml +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/faiss/queries.jsonl +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/milvus/README.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/milvus/compose.yaml +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/milvus/embedflow.yaml.example +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/milvus/run_demo.sh +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/pgvector/README.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/pgvector/build_index.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/pgvector/compose.yaml +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/pgvector/embedflow.yaml +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/pgvector/init.sql +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/pgvector/queries.jsonl +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/pgvector/run_demo.sh +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/pinecone/README.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/pinecone/embedflow.yaml.example +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/pinecone/run_smoke.sh +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/qdrant/README.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/qdrant/build_index.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/qdrant/documents.jsonl +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/qdrant/embedflow.yaml +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/qdrant/queries.jsonl +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/research_analysis/README.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/research_analysis/documents.jsonl +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/research_analysis/embedflow.yaml +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/research_analysis/qrels.json +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/examples/research_analysis/queries.jsonl +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/frozen/T2_V1_FROZEN_SPEC.md +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/frozen/T2_V1_FROZEN_SPEC.sha256 +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/requirements-dev.txt +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/requirements.txt +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/scripts/milvus_fixture.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/scripts/pinecone_smoke.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/scripts/real_qdrant_smoke.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/scripts/run_demo.sh +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/scripts/run_tests.sh +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/scripts/validate_milvus.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/scripts/validate_pgvector_10k.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/setup.cfg +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/src/__init__.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/src/embed.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/src/probe_features.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/src/storage.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/src/t2_v1.py +0 -0
- {embedflow-0.4.0 → embedflow-0.5.0}/src/utils.py +0 -0
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v0.5.0 — Weaviate backend
|
|
4
|
+
|
|
5
|
+
- Added a read-only Weaviate v4 backend for existing externally-vectorized
|
|
6
|
+
dense collections, including named-vector selection and UUID IDs.
|
|
7
|
+
- Added HTTP/gRPC connection settings, property-backed or external text
|
|
8
|
+
resolution, metric normalization, collection auditing, and safe client
|
|
9
|
+
shutdown.
|
|
10
|
+
- Added the optional `weaviate-client` extra, Docker fixture, example, and
|
|
11
|
+
live 10,000-object validation harness.
|
|
12
|
+
|
|
3
13
|
## v0.4.0 — Milvus backend
|
|
4
14
|
|
|
5
15
|
- Added a read-only Milvus backend for existing dense `FLOAT_VECTOR`
|
|
@@ -2,8 +2,8 @@ cff-version: 1.2.0
|
|
|
2
2
|
title: "EmbedFlow: Upgrading Legacy Embeddings Without Full Upfront Re-Embedding"
|
|
3
3
|
message: "If EmbedFlow contributes to your work, please cite this software release."
|
|
4
4
|
type: software
|
|
5
|
-
version: 0.
|
|
6
|
-
date-released: 2026-09-
|
|
5
|
+
version: 0.5.0
|
|
6
|
+
date-released: 2026-09-13
|
|
7
7
|
repository-code: "https://github.com/arnsri33/embedflow"
|
|
8
8
|
url: "https://github.com/arnsri33/embedflow"
|
|
9
9
|
license: AGPL-3.0-only
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: embedflow
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.0
|
|
4
4
|
Summary: Progressive embedding-model migration over existing vector indexes.
|
|
5
5
|
Author: Arnav Srivastav
|
|
6
6
|
License-Expression: AGPL-3.0-only
|
|
@@ -8,7 +8,7 @@ Project-URL: Homepage, https://embedflow.org
|
|
|
8
8
|
Project-URL: Repository, https://github.com/arnsri33/embedflow
|
|
9
9
|
Project-URL: Documentation, https://github.com/arnsri33/embedflow#readme
|
|
10
10
|
Project-URL: Issues, https://github.com/arnsri33/embedflow/issues
|
|
11
|
-
Keywords: embeddings,vector-search,rag,information-retrieval,faiss,qdrant,pgvector,pinecone,milvus
|
|
11
|
+
Keywords: embeddings,vector-search,rag,information-retrieval,faiss,qdrant,pgvector,pinecone,milvus,weaviate
|
|
12
12
|
Classifier: Development Status :: 3 - Alpha
|
|
13
13
|
Classifier: Intended Audience :: Developers
|
|
14
14
|
Classifier: Intended Audience :: Science/Research
|
|
@@ -33,6 +33,8 @@ Provides-Extra: pinecone
|
|
|
33
33
|
Requires-Dist: pinecone>=6.0; extra == "pinecone"
|
|
34
34
|
Provides-Extra: milvus
|
|
35
35
|
Requires-Dist: pymilvus<4,>=2.5.5; extra == "milvus"
|
|
36
|
+
Provides-Extra: weaviate
|
|
37
|
+
Requires-Dist: weaviate-client<5,>=4.16; extra == "weaviate"
|
|
36
38
|
Provides-Extra: models
|
|
37
39
|
Requires-Dist: huggingface-hub<1.0,>=0.34; extra == "models"
|
|
38
40
|
Requires-Dist: transformers<5.0,>=4.45; extra == "models"
|
|
@@ -48,6 +50,7 @@ Requires-Dist: qdrant-client>=1.9; extra == "all"
|
|
|
48
50
|
Requires-Dist: psycopg[binary]>=3.2; extra == "all"
|
|
49
51
|
Requires-Dist: pinecone>=6.0; extra == "all"
|
|
50
52
|
Requires-Dist: pymilvus<4,>=2.5.5; extra == "all"
|
|
53
|
+
Requires-Dist: weaviate-client<5,>=4.16; extra == "all"
|
|
51
54
|
Requires-Dist: huggingface-hub<1.0,>=0.34; extra == "all"
|
|
52
55
|
Requires-Dist: transformers<5.0,>=4.45; extra == "all"
|
|
53
56
|
Requires-Dist: sentence-transformers>=3.0; extra == "all"
|
|
@@ -68,7 +71,7 @@ Dynamic: license-file
|
|
|
68
71
|
EmbedFlow lets a new embedding model serve over candidates from an existing
|
|
69
72
|
vector index while target document vectors are materialized progressively. It
|
|
70
73
|
supports migration analysis, persistent caching, background work, FAISS,
|
|
71
|
-
Qdrant, pgvector, Pinecone, Milvus, a CLI, and FastAPI.
|
|
74
|
+
Qdrant, pgvector, Pinecone, Milvus, Weaviate, a CLI, and FastAPI.
|
|
72
75
|
|
|
73
76
|
The full project README and architecture diagram are on
|
|
74
77
|
<https://github.com/arnsri33/embedflow>.
|
|
@@ -103,6 +106,12 @@ For an existing Milvus collection:
|
|
|
103
106
|
python -m pip install "embedflow[milvus]"
|
|
104
107
|
```
|
|
105
108
|
|
|
109
|
+
For an existing Weaviate v4 collection:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
python -m pip install "embedflow[weaviate]"
|
|
113
|
+
```
|
|
114
|
+
|
|
106
115
|
Qdrant and model-runtime extras are documented in the
|
|
107
116
|
[installation guide](https://github.com/arnsri33/embedflow/blob/main/docs/installation.md).
|
|
108
117
|
For model-backed analysis, install `embedflow[faiss,models,dashboard]`.
|
|
@@ -206,12 +215,14 @@ for definitions and reproduction details.
|
|
|
206
215
|
| pgvector | Supported |
|
|
207
216
|
| Pinecone | Supported |
|
|
208
217
|
| Milvus | Supported |
|
|
218
|
+
| Weaviate | Supported |
|
|
209
219
|
|
|
210
220
|
See the [FAISS guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/faiss.md),
|
|
211
221
|
[Qdrant guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/qdrant.md),
|
|
212
222
|
and [pgvector guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/pgvector.md),
|
|
213
223
|
and [Pinecone guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/pinecone.md),
|
|
214
224
|
and [Milvus guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/milvus.md).
|
|
225
|
+
See the [Weaviate guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/weaviate.md).
|
|
215
226
|
|
|
216
227
|
## CLI
|
|
217
228
|
|
|
@@ -231,7 +242,7 @@ cover the remaining commands and endpoints.
|
|
|
231
242
|
|
|
232
243
|
## Status
|
|
233
244
|
|
|
234
|
-
EmbedFlow v0.
|
|
245
|
+
EmbedFlow v0.5.0 is an alpha release for research and early real-world
|
|
235
246
|
testing. T2-v1 is an empirical finite-tail diagnostic, partial rankings can
|
|
236
247
|
differ from fully warm target reranking, and ANN fidelity needs a reference
|
|
237
248
|
comparison to audit.
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
EmbedFlow lets a new embedding model serve over candidates from an existing
|
|
8
8
|
vector index while target document vectors are materialized progressively. It
|
|
9
9
|
supports migration analysis, persistent caching, background work, and serving
|
|
10
|
-
through FAISS, Qdrant, pgvector, Pinecone, Milvus, a CLI, and FastAPI.
|
|
10
|
+
through FAISS, Qdrant, pgvector, Pinecone, Milvus, Weaviate, a CLI, and FastAPI.
|
|
11
11
|
|
|
12
12
|
[Quickstart](#try-it) · [Documentation](#documentation) · [Research](#research)
|
|
13
13
|
|
|
@@ -64,6 +64,12 @@ For an existing Milvus collection:
|
|
|
64
64
|
python -m pip install "embedflow[milvus]"
|
|
65
65
|
```
|
|
66
66
|
|
|
67
|
+
For an existing Weaviate v4 collection (HTTP and gRPC endpoints required):
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
python -m pip install "embedflow[weaviate]"
|
|
71
|
+
```
|
|
72
|
+
|
|
67
73
|
Qdrant and model-runtime extras are documented in
|
|
68
74
|
[`docs/installation.md`](https://github.com/arnsri33/embedflow/blob/main/docs/installation.md).
|
|
69
75
|
For model-backed analysis, install `embedflow[faiss,models,dashboard]`.
|
|
@@ -204,6 +210,7 @@ is measured separately and is `UNKNOWN` until an exact reference is supplied.
|
|
|
204
210
|
| pgvector | Supported |
|
|
205
211
|
| Pinecone | Supported |
|
|
206
212
|
| Milvus | Supported |
|
|
213
|
+
| Weaviate | Supported |
|
|
207
214
|
|
|
208
215
|
Backend-specific setup and examples:
|
|
209
216
|
|
|
@@ -212,6 +219,7 @@ Backend-specific setup and examples:
|
|
|
212
219
|
- [pgvector](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/pgvector.md)
|
|
213
220
|
- [Pinecone](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/pinecone.md)
|
|
214
221
|
- [Milvus](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/milvus.md)
|
|
222
|
+
- [Weaviate](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/weaviate.md)
|
|
215
223
|
- [Adding a backend](https://github.com/arnsri33/embedflow/blob/main/CONTRIBUTING.md)
|
|
216
224
|
|
|
217
225
|
## CLI
|
|
@@ -246,7 +254,7 @@ OpenAPI documentation; see
|
|
|
246
254
|
|
|
247
255
|
## Status
|
|
248
256
|
|
|
249
|
-
EmbedFlow v0.
|
|
257
|
+
EmbedFlow v0.5.0 is an alpha release for research and early real-world
|
|
250
258
|
testing.
|
|
251
259
|
|
|
252
260
|
- T2-v1 reports an empirical finite-tail diagnostic.
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
EmbedFlow lets a new embedding model serve over candidates from an existing
|
|
6
6
|
vector index while target document vectors are materialized progressively. It
|
|
7
7
|
supports migration analysis, persistent caching, background work, FAISS,
|
|
8
|
-
Qdrant, pgvector, Pinecone, Milvus, a CLI, and FastAPI.
|
|
8
|
+
Qdrant, pgvector, Pinecone, Milvus, Weaviate, a CLI, and FastAPI.
|
|
9
9
|
|
|
10
10
|
The full project README and architecture diagram are on
|
|
11
11
|
<https://github.com/arnsri33/embedflow>.
|
|
@@ -40,6 +40,12 @@ For an existing Milvus collection:
|
|
|
40
40
|
python -m pip install "embedflow[milvus]"
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
+
For an existing Weaviate v4 collection:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
python -m pip install "embedflow[weaviate]"
|
|
47
|
+
```
|
|
48
|
+
|
|
43
49
|
Qdrant and model-runtime extras are documented in the
|
|
44
50
|
[installation guide](https://github.com/arnsri33/embedflow/blob/main/docs/installation.md).
|
|
45
51
|
For model-backed analysis, install `embedflow[faiss,models,dashboard]`.
|
|
@@ -143,12 +149,14 @@ for definitions and reproduction details.
|
|
|
143
149
|
| pgvector | Supported |
|
|
144
150
|
| Pinecone | Supported |
|
|
145
151
|
| Milvus | Supported |
|
|
152
|
+
| Weaviate | Supported |
|
|
146
153
|
|
|
147
154
|
See the [FAISS guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/faiss.md),
|
|
148
155
|
[Qdrant guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/qdrant.md),
|
|
149
156
|
and [pgvector guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/pgvector.md),
|
|
150
157
|
and [Pinecone guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/pinecone.md),
|
|
151
158
|
and [Milvus guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/milvus.md).
|
|
159
|
+
See the [Weaviate guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/weaviate.md).
|
|
152
160
|
|
|
153
161
|
## CLI
|
|
154
162
|
|
|
@@ -168,7 +176,7 @@ cover the remaining commands and endpoints.
|
|
|
168
176
|
|
|
169
177
|
## Status
|
|
170
178
|
|
|
171
|
-
EmbedFlow v0.
|
|
179
|
+
EmbedFlow v0.5.0 is an alpha release for research and early real-world
|
|
172
180
|
testing. T2-v1 is an empirical finite-tail diagnostic, partial rankings can
|
|
173
181
|
differ from fully warm target reranking, and ANN fidelity needs a reference
|
|
174
182
|
comparison to audit.
|
|
@@ -14,7 +14,7 @@ target:
|
|
|
14
14
|
device: cuda
|
|
15
15
|
|
|
16
16
|
index:
|
|
17
|
-
backend: faiss # faiss, qdrant, pgvector, pinecone, or
|
|
17
|
+
backend: faiss # faiss, qdrant, pgvector, pinecone, milvus, or weaviate
|
|
18
18
|
path: ./legacy.index
|
|
19
19
|
ids: ./legacy.index.ids.json # FAISS sidecar
|
|
20
20
|
metric: cosine
|
|
@@ -26,6 +26,9 @@ index:
|
|
|
26
26
|
# text_metadata_field
|
|
27
27
|
# Milvus fields: uri, token_env, database, collection, id_field, vector_field,
|
|
28
28
|
# text_field, partition_names, search_params, auto_load
|
|
29
|
+
# Weaviate fields: uri (or http_host/http_port), grpc_host/grpc_port,
|
|
30
|
+
# secure, collection, vector_name, text_property,
|
|
31
|
+
# tenant, api_key_env
|
|
29
32
|
|
|
30
33
|
documents:
|
|
31
34
|
path: ./documents.jsonl
|
|
@@ -106,6 +109,18 @@ EMBEDFLOW_MILVUS_VECTOR_FIELD
|
|
|
106
109
|
EMBEDFLOW_MILVUS_TEXT_FIELD
|
|
107
110
|
EMBEDFLOW_MILVUS_PARTITIONS
|
|
108
111
|
EMBEDFLOW_MILVUS_AUTO_LOAD
|
|
112
|
+
EMBEDFLOW_WEAVIATE_URI
|
|
113
|
+
EMBEDFLOW_WEAVIATE_HTTP_HOST
|
|
114
|
+
EMBEDFLOW_WEAVIATE_HTTP_PORT
|
|
115
|
+
EMBEDFLOW_WEAVIATE_GRPC_HOST
|
|
116
|
+
EMBEDFLOW_WEAVIATE_GRPC_PORT
|
|
117
|
+
EMBEDFLOW_WEAVIATE_SECURE
|
|
118
|
+
EMBEDFLOW_WEAVIATE_GRPC_SECURE
|
|
119
|
+
EMBEDFLOW_WEAVIATE_API_KEY_ENV
|
|
120
|
+
EMBEDFLOW_WEAVIATE_COLLECTION
|
|
121
|
+
EMBEDFLOW_WEAVIATE_VECTOR_NAME
|
|
122
|
+
EMBEDFLOW_WEAVIATE_TEXT_PROPERTY
|
|
123
|
+
EMBEDFLOW_WEAVIATE_TENANT
|
|
109
124
|
EMBEDFLOW_INDEX_NPROBE
|
|
110
125
|
EMBEDFLOW_DOCUMENTS_PATH
|
|
111
126
|
EMBEDFLOW_CACHE_PATH
|
|
@@ -33,6 +33,7 @@ python -m pip install -e .
|
|
|
33
33
|
| `pgvector` | Psycopg 3 binary driver and pgvector adapter |
|
|
34
34
|
| `pinecone` | Official Pinecone Python SDK and adapter |
|
|
35
35
|
| `milvus` | Official pymilvus SDK and adapter |
|
|
36
|
+
| `weaviate` | Official Weaviate Python v4 SDK and adapter |
|
|
36
37
|
| `models` | PyTorch, Transformers, Sentence Transformers, and Hub client |
|
|
37
38
|
| `dashboard` | FastAPI, Uvicorn, and Pydantic |
|
|
38
39
|
| `dev` | Pytest, Ruff, and build tooling |
|
|
@@ -73,6 +74,12 @@ Install the optional adapter with `python -m pip install "embedflow[milvus]"`.
|
|
|
73
74
|
Configure an existing collection URI, database, and vector field; see
|
|
74
75
|
[`integrations/milvus.md`](integrations/milvus.md).
|
|
75
76
|
|
|
77
|
+
## Weaviate
|
|
78
|
+
|
|
79
|
+
Install the current v4 client with `python -m pip install "embedflow[weaviate]"`.
|
|
80
|
+
Configure an existing externally-vectorized collection, including both the
|
|
81
|
+
HTTP and gRPC endpoints; see [`integrations/weaviate.md`](integrations/weaviate.md).
|
|
82
|
+
|
|
76
83
|
## CPU and GPU
|
|
77
84
|
|
|
78
85
|
The deterministic demo runs on CPU. Real model serving accepts `--device cpu`
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Weaviate
|
|
2
|
+
|
|
3
|
+
EmbedFlow's Weaviate backend (tested with `weaviate-client` 4.23.1 and
|
|
4
|
+
Weaviate 1.30.6) reads an existing, externally vectorized dense collection.
|
|
5
|
+
It retrieves candidates with the v4 `near_vector` API, reranks them with the
|
|
6
|
+
target model, and progressively materializes target vectors in EmbedFlow's
|
|
7
|
+
local cache. It does not create, update, delete, batch-import, or re-vectorize
|
|
8
|
+
objects in the source collection.
|
|
9
|
+
|
|
10
|
+
## Install and connect
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
python -m pip install "embedflow[weaviate]"
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
The local v4 client needs both HTTP and gRPC. A standard Docker deployment
|
|
17
|
+
exposes HTTP 8080 and gRPC 50051:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
cd examples/weaviate
|
|
21
|
+
docker compose up -d
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Configuration uses a URI or explicit host/port fields:
|
|
25
|
+
|
|
26
|
+
```yaml
|
|
27
|
+
index:
|
|
28
|
+
backend: weaviate
|
|
29
|
+
uri: http://127.0.0.1:8080
|
|
30
|
+
http_port: 8080
|
|
31
|
+
grpc_host: 127.0.0.1
|
|
32
|
+
grpc_port: 50051
|
|
33
|
+
collection: Documents
|
|
34
|
+
vector_name: default
|
|
35
|
+
text_property: content
|
|
36
|
+
metric: cosine
|
|
37
|
+
api_key_env: WEAVIATE_API_KEY
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
For a custom or cloud-compatible endpoint set `http_host`, `http_port`,
|
|
41
|
+
`grpc_host`, `grpc_port`, `secure`, and `grpc_secure` as appropriate. Keep the
|
|
42
|
+
credential out of YAML:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
export WEAVIATE_API_KEY='your-key'
|
|
46
|
+
embedflow doctor --config ./embedflow.yaml
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Cloud connections use the same v4 URI/token conventions. This release has
|
|
50
|
+
validated local standalone Weaviate, not an independently operated Weaviate
|
|
51
|
+
Cloud cluster.
|
|
52
|
+
|
|
53
|
+
## Collection contract
|
|
54
|
+
|
|
55
|
+
The selected collection must contain a dense, externally supplied vector. Set
|
|
56
|
+
`vector_name` for named-vector collections; if more than one vector exists and
|
|
57
|
+
the name is omitted, EmbedFlow fails rather than guessing. `cosine`, `dot` (or
|
|
58
|
+
`inner_product`), and `l2`/`euclidean` are supported. Weaviate's distance is
|
|
59
|
+
converted to EmbedFlow's larger-is-better score convention (`-distance`), so
|
|
60
|
+
rank order remains the server's rank order.
|
|
61
|
+
|
|
62
|
+
Weaviate objects use UUIDs. EmbedFlow preserves their canonical string form;
|
|
63
|
+
it does not generate IDs during reads. The source model dimension must match
|
|
64
|
+
the existing vector index. Weaviate versions that do not expose dimensionality
|
|
65
|
+
in collection configuration report the value as unverified and the server
|
|
66
|
+
still validates each query vector.
|
|
67
|
+
|
|
68
|
+
For text, choose one of these modes:
|
|
69
|
+
|
|
70
|
+
* `text_property: content` requests only that property with each candidate and
|
|
71
|
+
validates that it is a string.
|
|
72
|
+
* Provide the normal EmbedFlow JSONL `documents` store. Candidate queries then
|
|
73
|
+
request no Weaviate properties and the shared document store resolves text.
|
|
74
|
+
|
|
75
|
+
The adapter requests no stored vector payload. `tenant` can bind a configured
|
|
76
|
+
multi-tenant collection to one tenant; an omitted tenant never selects one
|
|
77
|
+
implicitly.
|
|
78
|
+
|
|
79
|
+
## Audit and operations
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
embedflow audit-index --config ./embedflow.yaml
|
|
83
|
+
embedflow analyze --config ./embedflow.yaml
|
|
84
|
+
embedflow serve --config ./embedflow.yaml --device cuda
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
`doctor` and `audit-index` report readiness, collection/vector configuration,
|
|
88
|
+
metric, object count, tenant, and text resolution. Reachability is reported
|
|
89
|
+
separately from candidate compatibility and ANN fidelity; a healthy server is
|
|
90
|
+
not evidence that a model migration is scientifically safe. `client.close()`
|
|
91
|
+
is called when a one-shot command or serving session shuts down.
|
|
92
|
+
|
|
93
|
+
## Read-only and troubleshooting
|
|
94
|
+
|
|
95
|
+
The production adapter uses only collection lookup/config, `near_vector`,
|
|
96
|
+
batched property lookup, iteration, and aggregate counts. Fixture creation and
|
|
97
|
+
batch writes live only in `scripts/weaviate_fixture.py` and tests. Do not point
|
|
98
|
+
fixture setup at a user collection.
|
|
99
|
+
|
|
100
|
+
* `Weaviate support requires ...`: install the optional extra in the active
|
|
101
|
+
environment.
|
|
102
|
+
* HTTP works but startup says gRPC is unavailable: expose 50051 and set
|
|
103
|
+
`grpc_host`/`grpc_port` correctly; v4 search uses gRPC.
|
|
104
|
+
* `vector_name ... was not found` or multiple-vector errors: inspect the
|
|
105
|
+
collection schema and configure the exact name.
|
|
106
|
+
* Dimension or metric mismatch: use the source model contract and the
|
|
107
|
+
collection's configured distance metric.
|
|
108
|
+
* Missing/invalid text: fix `text_property` or use an external document store.
|
|
109
|
+
|
|
110
|
+
The adapter does not expose arbitrary Weaviate filters or index-tuning writes.
|
|
111
|
+
HNSW configuration is introspected read-only. Integrated Weaviate vectorizers
|
|
112
|
+
are not treated as the EmbedFlow source model unless their contract is
|
|
113
|
+
independently verified; this release focuses on externally vectorized dense
|
|
114
|
+
collections.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Limitations and release scope
|
|
2
2
|
|
|
3
|
-
EmbedFlow v0.
|
|
3
|
+
EmbedFlow v0.5.0 is an alpha release for research and early real-world
|
|
4
4
|
testing. The serving path is designed to make migration experiments concrete;
|
|
5
5
|
production rollout still requires application-specific validation.
|
|
6
6
|
|
|
@@ -18,8 +18,8 @@ python -m twine check dist/*
|
|
|
18
18
|
Inspect both archives before uploading:
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
unzip -l dist/embedflow-0.
|
|
22
|
-
tar -tzf dist/embedflow-0.
|
|
21
|
+
unzip -l dist/embedflow-0.5.0-py3-none-any.whl
|
|
22
|
+
tar -tzf dist/embedflow-0.5.0.tar.gz
|
|
23
23
|
sha256sum dist/*
|
|
24
24
|
```
|
|
25
25
|
|
|
@@ -32,7 +32,7 @@ Test the wheel outside the source tree:
|
|
|
32
32
|
```bash
|
|
33
33
|
python -m venv /tmp/embedflow-wheel-test
|
|
34
34
|
/tmp/embedflow-wheel-test/bin/python -m pip install --upgrade pip
|
|
35
|
-
/tmp/embedflow-wheel-test/bin/python -m pip install dist/embedflow-0.
|
|
35
|
+
/tmp/embedflow-wheel-test/bin/python -m pip install dist/embedflow-0.5.0-py3-none-any.whl
|
|
36
36
|
cd /tmp
|
|
37
37
|
/tmp/embedflow-wheel-test/bin/python -c "import embedflow; print(embedflow.__version__)"
|
|
38
38
|
/tmp/embedflow-wheel-test/bin/embedflow --help
|
|
@@ -65,7 +65,7 @@ python -m venv /tmp/embedflow-testpypi
|
|
|
65
65
|
/tmp/embedflow-testpypi/bin/python -m pip install \
|
|
66
66
|
--index-url https://test.pypi.org/simple/ \
|
|
67
67
|
--extra-index-url https://pypi.org/simple/ \
|
|
68
|
-
embedflow==0.
|
|
68
|
+
embedflow==0.5.0
|
|
69
69
|
cd /tmp
|
|
70
70
|
/tmp/embedflow-testpypi/bin/python -c "import embedflow; print(embedflow.__version__)"
|
|
71
71
|
/tmp/embedflow-testpypi/bin/embedflow --help
|
|
@@ -79,11 +79,11 @@ Test optional integrations in a second clean environment:
|
|
|
79
79
|
/tmp/embedflow-testpypi/bin/python -m pip install \
|
|
80
80
|
--index-url https://test.pypi.org/simple/ \
|
|
81
81
|
--extra-index-url https://pypi.org/simple/ \
|
|
82
|
-
"embedflow[faiss,dashboard,pinecone,milvus]==0.
|
|
82
|
+
"embedflow[faiss,dashboard,pinecone,milvus,weaviate]==0.5.0"
|
|
83
83
|
```
|
|
84
84
|
|
|
85
85
|
If the same filename already exists on TestPyPI, use a pre-release such as
|
|
86
|
-
`0.
|
|
86
|
+
`0.5.0rc1` for the TestPyPI-only trial. Keep production `0.5.0` unchanged.
|
|
87
87
|
|
|
88
88
|
## Trusted Publishing configuration
|
|
89
89
|
|
|
@@ -115,7 +115,7 @@ above keeps the test step explicit.
|
|
|
115
115
|
3. Run the final release gate and review the generated report.
|
|
116
116
|
4. Configure the PyPI pending publisher and protected `pypi` environment.
|
|
117
117
|
5. Create a Git tag and GitHub Release for the exact package version, for
|
|
118
|
-
example `v0.
|
|
118
|
+
example `v0.5.0`.
|
|
119
119
|
6. Approve the `pypi` environment when the release workflow is ready.
|
|
120
120
|
7. Verify the files and metadata on PyPI.
|
|
121
121
|
8. Install from production PyPI in a directory outside this checkout.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"""EmbedFlow: progressive embedding-model migration for existing indexes."""
|
|
2
2
|
|
|
3
|
-
__version__ = "0.
|
|
3
|
+
__version__ = "0.5.0"
|
|
4
4
|
|
|
5
5
|
from .config import EmbedFlowConfig, load_config
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
def migrate(*args, **kwargs):
|
|
9
|
-
"""Start progressive migration over an existing FAISS, Qdrant, pgvector, Pinecone, or
|
|
9
|
+
"""Start progressive migration over an existing FAISS, Qdrant, pgvector, Pinecone, Milvus, or Weaviate index.
|
|
10
10
|
|
|
11
11
|
Imported lazily to keep the lightweight configuration package free of
|
|
12
12
|
model-serving dependencies at import time. See ``embedflow.migration``
|