embedflow 0.3.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.3.0 → embedflow-0.5.0}/CHANGELOG.md +19 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/CITATION.cff +2 -2
- {embedflow-0.3.0 → embedflow-0.5.0}/MANIFEST.in +1 -1
- {embedflow-0.3.0 → embedflow-0.5.0}/PKG-INFO +27 -5
- {embedflow-0.3.0 → embedflow-0.5.0}/README.md +18 -2
- {embedflow-0.3.0 → embedflow-0.5.0}/README_PYPI.md +19 -3
- {embedflow-0.3.0 → embedflow-0.5.0}/docs/configuration.md +27 -1
- {embedflow-0.3.0 → embedflow-0.5.0}/docs/installation.md +14 -0
- embedflow-0.5.0/docs/integrations/milvus.md +165 -0
- embedflow-0.5.0/docs/integrations/weaviate.md +114 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/docs/limitations.md +1 -1
- {embedflow-0.3.0 → embedflow-0.5.0}/docs/releasing.md +7 -7
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/__init__.py +2 -2
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/cli.py +200 -49
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/compatibility/evaluate.py +6 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/config.py +177 -6
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/indexes/__init__.py +4 -0
- embedflow-0.5.0/embedflow/indexes/milvus_backend.py +1056 -0
- embedflow-0.5.0/embedflow/indexes/weaviate_backend.py +779 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/migration/facade.py +71 -10
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/runtime.py +30 -4
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow.egg-info/PKG-INFO +27 -5
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow.egg-info/SOURCES.txt +18 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow.egg-info/requires.txt +8 -0
- embedflow-0.5.0/examples/milvus/README.md +39 -0
- embedflow-0.5.0/examples/milvus/compose.yaml +48 -0
- embedflow-0.5.0/examples/milvus/embedflow.yaml.example +26 -0
- embedflow-0.5.0/examples/milvus/run_demo.sh +15 -0
- embedflow-0.5.0/examples/pinecone/embedflow.yaml.example +35 -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.3.0 → embedflow-0.5.0}/pyproject.toml +6 -2
- embedflow-0.5.0/scripts/milvus_fixture.py +102 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/scripts/release_gate.py +34 -2
- embedflow-0.5.0/scripts/validate_milvus.py +356 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/scripts/validate_pgvector_10k.py +2 -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.3.0 → embedflow-0.5.0}/CONTRIBUTING.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/LICENSE +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/SECURITY.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/docs/api.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/docs/assets/README.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/docs/assets/candidate-gap-example.svg +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/docs/assets/dashboard-screenshot.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/docs/assets/terminal-demo.txt +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/docs/cli.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/docs/concepts.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/docs/contributing-benchmarks.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/docs/economics.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/docs/integrations/faiss.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/docs/integrations/pgvector.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/docs/integrations/pinecone.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/docs/integrations/qdrant.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/docs/methodology.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/docs/quickstart.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/docs/registry.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/__main__.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/analysis.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/api.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/cache/__init__.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/cache/base.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/cache/persistent_cache.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/compatibility/__init__.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/compatibility/candidate_gap.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/compatibility/containment.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/compatibility/metrics.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/compatibility/migration_depth.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/compatibility/probe.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/compatibility/report.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/compatibility/t2.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/data/__init__.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/data/registry/__init__.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/data/registry/benchmark_profiles.jsonl +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/data/registry/checksums.sha256 +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/data/registry/migrations.jsonl +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/data/registry/registry_manifest.json +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/data/registry/research_summaries.json +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/data/registry/schema_version.json +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/frozen/T2_V1_FROZEN_SPEC.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/frozen/T2_V1_FROZEN_SPEC.sha256 +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/indexes/base.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/indexes/faiss_backend.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/indexes/pgvector_backend.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/indexes/pinecone_backend.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/indexes/qdrant_backend.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/metrics/__init__.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/metrics/latency.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/migration/__init__.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/migration/compatibility.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/migration/materializer.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/migration/planner.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/migration/state.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/models/__init__.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/models/base.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/models/huggingface.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/registry/__init__.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/registry/loader.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/registry/matcher.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/registry/schema.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/serving/__init__.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/serving/api.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/serving/engine.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/serving/factory.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/serving/schemas.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow.egg-info/dependency_links.txt +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow.egg-info/entry_points.txt +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/embedflow.egg-info/top_level.txt +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/faiss/README.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/faiss/documents.jsonl +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/faiss/embedflow.yaml +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/faiss/queries.jsonl +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/pgvector/README.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/pgvector/build_index.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/pgvector/compose.yaml +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/pgvector/embedflow.yaml +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/pgvector/init.sql +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/pgvector/queries.jsonl +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/pgvector/run_demo.sh +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/pinecone/README.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/pinecone/run_smoke.sh +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/qdrant/README.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/qdrant/build_index.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/qdrant/documents.jsonl +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/qdrant/embedflow.yaml +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/qdrant/queries.jsonl +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/research_analysis/README.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/research_analysis/documents.jsonl +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/research_analysis/embedflow.yaml +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/research_analysis/qrels.json +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/examples/research_analysis/queries.jsonl +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/frozen/T2_V1_FROZEN_SPEC.md +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/frozen/T2_V1_FROZEN_SPEC.sha256 +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/requirements-dev.txt +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/requirements.txt +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/scripts/pinecone_smoke.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/scripts/real_qdrant_smoke.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/scripts/run_demo.sh +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/scripts/run_tests.sh +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/setup.cfg +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/src/__init__.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/src/embed.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/src/probe_features.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/src/storage.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/src/t2_v1.py +0 -0
- {embedflow-0.3.0 → embedflow-0.5.0}/src/utils.py +0 -0
|
@@ -1,5 +1,24 @@
|
|
|
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
|
+
|
|
13
|
+
## v0.4.0 — Milvus backend
|
|
14
|
+
|
|
15
|
+
- Added a read-only Milvus backend for existing dense `FLOAT_VECTOR`
|
|
16
|
+
collections.
|
|
17
|
+
- Added collection/database/partition selection, HNSW/IVF search parameters,
|
|
18
|
+
metric and schema auditing, and Milvus-backed document text resolution.
|
|
19
|
+
- Added deterministic standalone Docker fixtures, examples, and optional
|
|
20
|
+
`pymilvus` packaging.
|
|
21
|
+
|
|
3
22
|
## v0.3.0 — Pinecone backend
|
|
4
23
|
|
|
5
24
|
- Added a read-only Pinecone backend for existing dense indexes.
|
|
@@ -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
|
include README.md README_PYPI.md LICENSE CHANGELOG.md CONTRIBUTING.md SECURITY.md CITATION.cff requirements.txt requirements-dev.txt
|
|
2
2
|
recursive-include docs *
|
|
3
|
-
recursive-include examples *.md *.yaml *.json *.jsonl *.py *.sql *.sh
|
|
3
|
+
recursive-include examples *.md *.yaml *.yaml.example *.json *.jsonl *.py *.sql *.sh
|
|
4
4
|
recursive-include scripts *.sh *.py
|
|
5
5
|
recursive-include frozen *.md *.sha256
|
|
6
6
|
prune .github
|
|
@@ -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
|
|
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
|
|
@@ -31,6 +31,10 @@ Provides-Extra: pgvector
|
|
|
31
31
|
Requires-Dist: psycopg[binary]>=3.2; extra == "pgvector"
|
|
32
32
|
Provides-Extra: pinecone
|
|
33
33
|
Requires-Dist: pinecone>=6.0; extra == "pinecone"
|
|
34
|
+
Provides-Extra: milvus
|
|
35
|
+
Requires-Dist: pymilvus<4,>=2.5.5; extra == "milvus"
|
|
36
|
+
Provides-Extra: weaviate
|
|
37
|
+
Requires-Dist: weaviate-client<5,>=4.16; extra == "weaviate"
|
|
34
38
|
Provides-Extra: models
|
|
35
39
|
Requires-Dist: huggingface-hub<1.0,>=0.34; extra == "models"
|
|
36
40
|
Requires-Dist: transformers<5.0,>=4.45; extra == "models"
|
|
@@ -45,6 +49,8 @@ Requires-Dist: faiss-cpu>=1.8.0; extra == "all"
|
|
|
45
49
|
Requires-Dist: qdrant-client>=1.9; extra == "all"
|
|
46
50
|
Requires-Dist: psycopg[binary]>=3.2; extra == "all"
|
|
47
51
|
Requires-Dist: pinecone>=6.0; extra == "all"
|
|
52
|
+
Requires-Dist: pymilvus<4,>=2.5.5; extra == "all"
|
|
53
|
+
Requires-Dist: weaviate-client<5,>=4.16; extra == "all"
|
|
48
54
|
Requires-Dist: huggingface-hub<1.0,>=0.34; extra == "all"
|
|
49
55
|
Requires-Dist: transformers<5.0,>=4.45; extra == "all"
|
|
50
56
|
Requires-Dist: sentence-transformers>=3.0; extra == "all"
|
|
@@ -65,7 +71,7 @@ Dynamic: license-file
|
|
|
65
71
|
EmbedFlow lets a new embedding model serve over candidates from an existing
|
|
66
72
|
vector index while target document vectors are materialized progressively. It
|
|
67
73
|
supports migration analysis, persistent caching, background work, FAISS,
|
|
68
|
-
Qdrant, pgvector, Pinecone, a CLI, and FastAPI.
|
|
74
|
+
Qdrant, pgvector, Pinecone, Milvus, Weaviate, a CLI, and FastAPI.
|
|
69
75
|
|
|
70
76
|
The full project README and architecture diagram are on
|
|
71
77
|
<https://github.com/arnsri33/embedflow>.
|
|
@@ -94,6 +100,18 @@ For an existing Pinecone dense index:
|
|
|
94
100
|
python -m pip install "embedflow[pinecone]"
|
|
95
101
|
```
|
|
96
102
|
|
|
103
|
+
For an existing Milvus collection:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
python -m pip install "embedflow[milvus]"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
For an existing Weaviate v4 collection:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
python -m pip install "embedflow[weaviate]"
|
|
113
|
+
```
|
|
114
|
+
|
|
97
115
|
Qdrant and model-runtime extras are documented in the
|
|
98
116
|
[installation guide](https://github.com/arnsri33/embedflow/blob/main/docs/installation.md).
|
|
99
117
|
For model-backed analysis, install `embedflow[faiss,models,dashboard]`.
|
|
@@ -196,11 +214,15 @@ for definitions and reproduction details.
|
|
|
196
214
|
| Qdrant | Supported |
|
|
197
215
|
| pgvector | Supported |
|
|
198
216
|
| Pinecone | Supported |
|
|
217
|
+
| Milvus | Supported |
|
|
218
|
+
| Weaviate | Supported |
|
|
199
219
|
|
|
200
220
|
See the [FAISS guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/faiss.md),
|
|
201
221
|
[Qdrant guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/qdrant.md),
|
|
202
222
|
and [pgvector guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/pgvector.md),
|
|
203
|
-
and [Pinecone guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/pinecone.md)
|
|
223
|
+
and [Pinecone guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/pinecone.md),
|
|
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).
|
|
204
226
|
|
|
205
227
|
## CLI
|
|
206
228
|
|
|
@@ -220,7 +242,7 @@ cover the remaining commands and endpoints.
|
|
|
220
242
|
|
|
221
243
|
## Status
|
|
222
244
|
|
|
223
|
-
EmbedFlow v0.
|
|
245
|
+
EmbedFlow v0.5.0 is an alpha release for research and early real-world
|
|
224
246
|
testing. T2-v1 is an empirical finite-tail diagnostic, partial rankings can
|
|
225
247
|
differ from fully warm target reranking, and ANN fidelity needs a reference
|
|
226
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, 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
|
|
|
@@ -58,6 +58,18 @@ For an existing Pinecone dense index:
|
|
|
58
58
|
python -m pip install "embedflow[pinecone]"
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
+
For an existing Milvus collection:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
python -m pip install "embedflow[milvus]"
|
|
65
|
+
```
|
|
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
|
+
|
|
61
73
|
Qdrant and model-runtime extras are documented in
|
|
62
74
|
[`docs/installation.md`](https://github.com/arnsri33/embedflow/blob/main/docs/installation.md).
|
|
63
75
|
For model-backed analysis, install `embedflow[faiss,models,dashboard]`.
|
|
@@ -197,6 +209,8 @@ is measured separately and is `UNKNOWN` until an exact reference is supplied.
|
|
|
197
209
|
| Qdrant | Supported |
|
|
198
210
|
| pgvector | Supported |
|
|
199
211
|
| Pinecone | Supported |
|
|
212
|
+
| Milvus | Supported |
|
|
213
|
+
| Weaviate | Supported |
|
|
200
214
|
|
|
201
215
|
Backend-specific setup and examples:
|
|
202
216
|
|
|
@@ -204,6 +218,8 @@ Backend-specific setup and examples:
|
|
|
204
218
|
- [Qdrant](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/qdrant.md)
|
|
205
219
|
- [pgvector](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/pgvector.md)
|
|
206
220
|
- [Pinecone](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/pinecone.md)
|
|
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)
|
|
207
223
|
- [Adding a backend](https://github.com/arnsri33/embedflow/blob/main/CONTRIBUTING.md)
|
|
208
224
|
|
|
209
225
|
## CLI
|
|
@@ -238,7 +254,7 @@ OpenAPI documentation; see
|
|
|
238
254
|
|
|
239
255
|
## Status
|
|
240
256
|
|
|
241
|
-
EmbedFlow v0.
|
|
257
|
+
EmbedFlow v0.5.0 is an alpha release for research and early real-world
|
|
242
258
|
testing.
|
|
243
259
|
|
|
244
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, 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>.
|
|
@@ -34,6 +34,18 @@ For an existing Pinecone dense index:
|
|
|
34
34
|
python -m pip install "embedflow[pinecone]"
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
+
For an existing Milvus collection:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
python -m pip install "embedflow[milvus]"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
For an existing Weaviate v4 collection:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
python -m pip install "embedflow[weaviate]"
|
|
47
|
+
```
|
|
48
|
+
|
|
37
49
|
Qdrant and model-runtime extras are documented in the
|
|
38
50
|
[installation guide](https://github.com/arnsri33/embedflow/blob/main/docs/installation.md).
|
|
39
51
|
For model-backed analysis, install `embedflow[faiss,models,dashboard]`.
|
|
@@ -136,11 +148,15 @@ for definitions and reproduction details.
|
|
|
136
148
|
| Qdrant | Supported |
|
|
137
149
|
| pgvector | Supported |
|
|
138
150
|
| Pinecone | Supported |
|
|
151
|
+
| Milvus | Supported |
|
|
152
|
+
| Weaviate | Supported |
|
|
139
153
|
|
|
140
154
|
See the [FAISS guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/faiss.md),
|
|
141
155
|
[Qdrant guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/qdrant.md),
|
|
142
156
|
and [pgvector guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/pgvector.md),
|
|
143
|
-
and [Pinecone guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/pinecone.md)
|
|
157
|
+
and [Pinecone guide](https://github.com/arnsri33/embedflow/blob/main/docs/integrations/pinecone.md),
|
|
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).
|
|
144
160
|
|
|
145
161
|
## CLI
|
|
146
162
|
|
|
@@ -160,7 +176,7 @@ cover the remaining commands and endpoints.
|
|
|
160
176
|
|
|
161
177
|
## Status
|
|
162
178
|
|
|
163
|
-
EmbedFlow v0.
|
|
179
|
+
EmbedFlow v0.5.0 is an alpha release for research and early real-world
|
|
164
180
|
testing. T2-v1 is an empirical finite-tail diagnostic, partial rankings can
|
|
165
181
|
differ from fully warm target reranking, and ANN fidelity needs a reference
|
|
166
182
|
comparison to audit.
|
|
@@ -14,7 +14,7 @@ target:
|
|
|
14
14
|
device: cuda
|
|
15
15
|
|
|
16
16
|
index:
|
|
17
|
-
backend: faiss # faiss, qdrant, pgvector, 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
|
|
@@ -24,6 +24,11 @@ index:
|
|
|
24
24
|
# hnsw_ef_search, ivfflat_probes
|
|
25
25
|
# Pinecone fields: host (preferred) or index_name, api_key_env, namespace,
|
|
26
26
|
# text_metadata_field
|
|
27
|
+
# Milvus fields: uri, token_env, database, collection, id_field, vector_field,
|
|
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
|
|
27
32
|
|
|
28
33
|
documents:
|
|
29
34
|
path: ./documents.jsonl
|
|
@@ -95,6 +100,27 @@ EMBEDFLOW_PINECONE_INDEX_NAME
|
|
|
95
100
|
EMBEDFLOW_PINECONE_NAMESPACE
|
|
96
101
|
EMBEDFLOW_PINECONE_TEXT_METADATA_FIELD
|
|
97
102
|
EMBEDFLOW_PINECONE_API_KEY_ENV
|
|
103
|
+
EMBEDFLOW_MILVUS_URI
|
|
104
|
+
EMBEDFLOW_MILVUS_TOKEN_ENV
|
|
105
|
+
EMBEDFLOW_MILVUS_DATABASE
|
|
106
|
+
EMBEDFLOW_MILVUS_COLLECTION
|
|
107
|
+
EMBEDFLOW_MILVUS_ID_FIELD
|
|
108
|
+
EMBEDFLOW_MILVUS_VECTOR_FIELD
|
|
109
|
+
EMBEDFLOW_MILVUS_TEXT_FIELD
|
|
110
|
+
EMBEDFLOW_MILVUS_PARTITIONS
|
|
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
|
|
98
124
|
EMBEDFLOW_INDEX_NPROBE
|
|
99
125
|
EMBEDFLOW_DOCUMENTS_PATH
|
|
100
126
|
EMBEDFLOW_CACHE_PATH
|
|
@@ -32,6 +32,8 @@ python -m pip install -e .
|
|
|
32
32
|
| `qdrant` | Qdrant client and adapter |
|
|
33
33
|
| `pgvector` | Psycopg 3 binary driver and pgvector adapter |
|
|
34
34
|
| `pinecone` | Official Pinecone Python SDK and adapter |
|
|
35
|
+
| `milvus` | Official pymilvus SDK and adapter |
|
|
36
|
+
| `weaviate` | Official Weaviate Python v4 SDK and adapter |
|
|
35
37
|
| `models` | PyTorch, Transformers, Sentence Transformers, and Hub client |
|
|
36
38
|
| `dashboard` | FastAPI, Uvicorn, and Pydantic |
|
|
37
39
|
| `dev` | Pytest, Ruff, and build tooling |
|
|
@@ -66,6 +68,18 @@ Install the optional adapter with `python -m pip install "embedflow[pinecone]"`.
|
|
|
66
68
|
Set `PINECONE_API_KEY` in the environment and configure an existing dense
|
|
67
69
|
index host; see [`integrations/pinecone.md`](integrations/pinecone.md).
|
|
68
70
|
|
|
71
|
+
## Milvus
|
|
72
|
+
|
|
73
|
+
Install the optional adapter with `python -m pip install "embedflow[milvus]"`.
|
|
74
|
+
Configure an existing collection URI, database, and vector field; see
|
|
75
|
+
[`integrations/milvus.md`](integrations/milvus.md).
|
|
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
|
+
|
|
69
83
|
## CPU and GPU
|
|
70
84
|
|
|
71
85
|
The deterministic demo runs on CPU. Real model serving accepts `--device cpu`
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
# Milvus
|
|
2
|
+
|
|
3
|
+
EmbedFlow can use an existing Milvus collection as a read-only source
|
|
4
|
+
candidate index. A source query is executed by Milvus, the returned documents
|
|
5
|
+
are reranked by the target model, and target vectors are stored in EmbedFlow's
|
|
6
|
+
local cache. The adapter does not copy or rebuild the source collection.
|
|
7
|
+
|
|
8
|
+
## Install and connect
|
|
9
|
+
|
|
10
|
+
Install the optional official SDK (the adapter is tested with pymilvus 2.5.5
|
|
11
|
+
through 3.0.1):
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
python -m pip install "embedflow[milvus]"
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
For a local standalone server, the URI is normally
|
|
18
|
+
`http://127.0.0.1:19530`. Cloud/Milvus-compatible endpoints can use the same
|
|
19
|
+
`MilvusClient` URI and token semantics. Keep credentials out of YAML:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
export EMBEDFLOW_MILVUS_TOKEN='user:password-or-cloud-token'
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
An unauthenticated local server may omit the variable. EmbedFlow never puts a
|
|
26
|
+
token in status, telemetry, generated configuration, or error messages.
|
|
27
|
+
|
|
28
|
+
Example configuration for a collection that stores its own text:
|
|
29
|
+
|
|
30
|
+
```yaml
|
|
31
|
+
source:
|
|
32
|
+
model: sentence-transformers/all-MiniLM-L6-v2
|
|
33
|
+
dimension: 384
|
|
34
|
+
device: cuda
|
|
35
|
+
target:
|
|
36
|
+
model: Qwen/Qwen3-Embedding-0.6B
|
|
37
|
+
device: cuda
|
|
38
|
+
index:
|
|
39
|
+
backend: milvus
|
|
40
|
+
uri: http://127.0.0.1:19530
|
|
41
|
+
token_env: EMBEDFLOW_MILVUS_TOKEN
|
|
42
|
+
database: default
|
|
43
|
+
collection: documents
|
|
44
|
+
id_field: id
|
|
45
|
+
vector_field: embedding
|
|
46
|
+
text_field: content
|
|
47
|
+
metric: cosine
|
|
48
|
+
partition_names: []
|
|
49
|
+
auto_load: false
|
|
50
|
+
documents:
|
|
51
|
+
path: ./documents.jsonl
|
|
52
|
+
id_field: id
|
|
53
|
+
text_field: text
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
`uri`, `database`, `collection`, `id_field`, `vector_field`, and
|
|
57
|
+
`text_field` are quoted as ordinary SDK arguments; they are not interpolated
|
|
58
|
+
into SQL. `vector_field` should identify a dense `FLOAT_VECTOR` field. The
|
|
59
|
+
first release does not claim support for `SPARSE_FLOAT_VECTOR`, `BINARY_VECTOR`,
|
|
60
|
+
`FLOAT16_VECTOR`, or `BFLOAT16_VECTOR`. If a collection has multiple dense
|
|
61
|
+
vector fields, configure `vector_field` explicitly.
|
|
62
|
+
|
|
63
|
+
## Text and IDs
|
|
64
|
+
|
|
65
|
+
There are two supported text layouts:
|
|
66
|
+
|
|
67
|
+
* Set `text_field` when the Milvus collection has `id`, `embedding`, and a
|
|
68
|
+
string text field. Search requests ask Milvus for only that field.
|
|
69
|
+
* Keep `text_field` unset and provide the normal EmbedFlow JSONL document
|
|
70
|
+
store. Candidate retrieval then asks Milvus for IDs only and resolves text
|
|
71
|
+
through the shared document-store contract.
|
|
72
|
+
|
|
73
|
+
Milvus `INT64` and `VARCHAR` primary keys are supported. IDs are exposed to
|
|
74
|
+
EmbedFlow as strings, so an INT64 value `42` is represented as `"42"` at the
|
|
75
|
+
application boundary while a VARCHAR value `"42"` remains a string. No numeric
|
|
76
|
+
coercion is performed for VARCHAR IDs.
|
|
77
|
+
|
|
78
|
+
## Metrics and indexes
|
|
79
|
+
|
|
80
|
+
Canonical metric names are `cosine`, `inner_product`/`dot`, and
|
|
81
|
+
`l2`/`euclidean`; they map to Milvus `COSINE`, `IP`, and `L2`. Milvus returns
|
|
82
|
+
COSINE/IP similarities (larger is better) and L2 distances (smaller is
|
|
83
|
+
better). EmbedFlow negates L2 distances only, preserving the shared
|
|
84
|
+
higher-is-better `SearchHit.score` convention.
|
|
85
|
+
|
|
86
|
+
The adapter does not create indexes. Existing HNSW and IVF_FLAT indexes are
|
|
87
|
+
queried when present. Optional native search parameters can be supplied as:
|
|
88
|
+
|
|
89
|
+
```yaml
|
|
90
|
+
index:
|
|
91
|
+
search_params:
|
|
92
|
+
ef: 64 # HNSW; raised to at least top-k when required by Milvus
|
|
93
|
+
# nprobe: 16 # IVF_FLAT
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Native Milvus form (`metric_type` plus `params`) is also accepted. Unknown
|
|
97
|
+
keys are rejected. `ef` is never sent below the requested top-k because HNSW
|
|
98
|
+
servers reject that request.
|
|
99
|
+
|
|
100
|
+
## Loading, databases, and partitions
|
|
101
|
+
|
|
102
|
+
EmbedFlow checks collection load state. `auto_load: false` (the conservative
|
|
103
|
+
default) returns an actionable error if the collection is not loaded. Set
|
|
104
|
+
`auto_load: true` only when explicitly permitting EmbedFlow to load this
|
|
105
|
+
collection; EmbedFlow never releases or unloads a collection.
|
|
106
|
+
|
|
107
|
+
`database` selects the Milvus database. `partition_names` restricts every
|
|
108
|
+
search and text lookup to the listed partitions. A missing partition fails at
|
|
109
|
+
connection time when the server exposes partition metadata. No arbitrary
|
|
110
|
+
Milvus filter expression is exposed because the shared `VectorIndex` contract
|
|
111
|
+
has no portable filter field.
|
|
112
|
+
|
|
113
|
+
## Commands and audit
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
embedflow doctor --config embedflow.yaml
|
|
117
|
+
embedflow audit-index --config embedflow.yaml
|
|
118
|
+
embedflow analyze --config embedflow.yaml --queries ./probe_queries.jsonl
|
|
119
|
+
embedflow serve --config embedflow.yaml --device cuda
|
|
120
|
+
embedflow search --config embedflow.yaml "your query"
|
|
121
|
+
embedflow status --config embedflow.yaml
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
`audit-index` reports URI (redacted), database, collection, fields, dense
|
|
125
|
+
vector type, dimension, metric, index type, load state, partitions, row
|
|
126
|
+
count, and a small retrieval/text probe. It intentionally keeps ANN fidelity,
|
|
127
|
+
T2-v1 compatibility, and candidate quality as separate `UNKNOWN`/empirical
|
|
128
|
+
questions; a reachable collection is not proof of migration compatibility.
|
|
129
|
+
|
|
130
|
+
Normal `doctor`, `audit-index`, `analyze`, `serve`, `search`, `status`, and
|
|
131
|
+
`prewarm` operations are read-only against the configured collection. Fixture
|
|
132
|
+
creation and inserts are confined to `scripts/milvus_fixture.py`, tests, and
|
|
133
|
+
the example setup.
|
|
134
|
+
|
|
135
|
+
## Local example
|
|
136
|
+
|
|
137
|
+
The repository includes a small standalone deployment and deterministic
|
|
138
|
+
fixture:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
cd examples/milvus
|
|
142
|
+
docker compose up -d
|
|
143
|
+
python -m pip install "embedflow[milvus,dashboard]"
|
|
144
|
+
./run_demo.sh
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
The fixture utility is deliberately explicit and refuses to overwrite an
|
|
148
|
+
existing collection. It can create HNSW, IVF_FLAT, or FLAT test indexes. No
|
|
149
|
+
model weights or credentials are committed.
|
|
150
|
+
|
|
151
|
+
## Troubleshooting and limitations
|
|
152
|
+
|
|
153
|
+
* `Milvus support requires ...`: install the `[milvus]` extra in the active
|
|
154
|
+
environment.
|
|
155
|
+
* `collection ... was not found`: check `uri`, `database`, and collection name.
|
|
156
|
+
* `collection ... is not loaded`: load it administratively or opt in to
|
|
157
|
+
`auto_load: true`.
|
|
158
|
+
* Dimension/metric errors mean the configured source model contract does not
|
|
159
|
+
match the existing vector field/index; EmbedFlow does not rewrite it.
|
|
160
|
+
* The adapter uses one synchronous `MilvusClient`; concurrent calls are
|
|
161
|
+
serialized by a lock. A pool is intentionally not introduced for this
|
|
162
|
+
release.
|
|
163
|
+
* Milvus-compatible URI/token semantics should work with Zilliz Cloud where
|
|
164
|
+
supported by the SDK, but Zilliz Cloud has not been independently validated
|
|
165
|
+
for this release.
|
|
@@ -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]==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, 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``
|