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.
Files changed (149) hide show
  1. {embedflow-0.3.0 → embedflow-0.5.0}/CHANGELOG.md +19 -0
  2. {embedflow-0.3.0 → embedflow-0.5.0}/CITATION.cff +2 -2
  3. {embedflow-0.3.0 → embedflow-0.5.0}/MANIFEST.in +1 -1
  4. {embedflow-0.3.0 → embedflow-0.5.0}/PKG-INFO +27 -5
  5. {embedflow-0.3.0 → embedflow-0.5.0}/README.md +18 -2
  6. {embedflow-0.3.0 → embedflow-0.5.0}/README_PYPI.md +19 -3
  7. {embedflow-0.3.0 → embedflow-0.5.0}/docs/configuration.md +27 -1
  8. {embedflow-0.3.0 → embedflow-0.5.0}/docs/installation.md +14 -0
  9. embedflow-0.5.0/docs/integrations/milvus.md +165 -0
  10. embedflow-0.5.0/docs/integrations/weaviate.md +114 -0
  11. {embedflow-0.3.0 → embedflow-0.5.0}/docs/limitations.md +1 -1
  12. {embedflow-0.3.0 → embedflow-0.5.0}/docs/releasing.md +7 -7
  13. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/__init__.py +2 -2
  14. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/cli.py +200 -49
  15. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/compatibility/evaluate.py +6 -0
  16. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/config.py +177 -6
  17. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/indexes/__init__.py +4 -0
  18. embedflow-0.5.0/embedflow/indexes/milvus_backend.py +1056 -0
  19. embedflow-0.5.0/embedflow/indexes/weaviate_backend.py +779 -0
  20. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/migration/facade.py +71 -10
  21. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/runtime.py +30 -4
  22. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow.egg-info/PKG-INFO +27 -5
  23. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow.egg-info/SOURCES.txt +18 -0
  24. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow.egg-info/requires.txt +8 -0
  25. embedflow-0.5.0/examples/milvus/README.md +39 -0
  26. embedflow-0.5.0/examples/milvus/compose.yaml +48 -0
  27. embedflow-0.5.0/examples/milvus/embedflow.yaml.example +26 -0
  28. embedflow-0.5.0/examples/milvus/run_demo.sh +15 -0
  29. embedflow-0.5.0/examples/pinecone/embedflow.yaml.example +35 -0
  30. embedflow-0.5.0/examples/weaviate/README.md +32 -0
  31. embedflow-0.5.0/examples/weaviate/compose.yaml +19 -0
  32. embedflow-0.5.0/examples/weaviate/embedflow.yaml.example +22 -0
  33. embedflow-0.5.0/examples/weaviate/run_demo.sh +7 -0
  34. {embedflow-0.3.0 → embedflow-0.5.0}/pyproject.toml +6 -2
  35. embedflow-0.5.0/scripts/milvus_fixture.py +102 -0
  36. {embedflow-0.3.0 → embedflow-0.5.0}/scripts/release_gate.py +34 -2
  37. embedflow-0.5.0/scripts/validate_milvus.py +356 -0
  38. {embedflow-0.3.0 → embedflow-0.5.0}/scripts/validate_pgvector_10k.py +2 -2
  39. embedflow-0.5.0/scripts/validate_weaviate.py +301 -0
  40. embedflow-0.5.0/scripts/weaviate_fixture.py +120 -0
  41. embedflow-0.5.0/scripts/weaviate_smoke.py +50 -0
  42. {embedflow-0.3.0 → embedflow-0.5.0}/CONTRIBUTING.md +0 -0
  43. {embedflow-0.3.0 → embedflow-0.5.0}/LICENSE +0 -0
  44. {embedflow-0.3.0 → embedflow-0.5.0}/SECURITY.md +0 -0
  45. {embedflow-0.3.0 → embedflow-0.5.0}/docs/api.md +0 -0
  46. {embedflow-0.3.0 → embedflow-0.5.0}/docs/assets/README.md +0 -0
  47. {embedflow-0.3.0 → embedflow-0.5.0}/docs/assets/candidate-gap-example.svg +0 -0
  48. {embedflow-0.3.0 → embedflow-0.5.0}/docs/assets/dashboard-screenshot.md +0 -0
  49. {embedflow-0.3.0 → embedflow-0.5.0}/docs/assets/terminal-demo.txt +0 -0
  50. {embedflow-0.3.0 → embedflow-0.5.0}/docs/cli.md +0 -0
  51. {embedflow-0.3.0 → embedflow-0.5.0}/docs/concepts.md +0 -0
  52. {embedflow-0.3.0 → embedflow-0.5.0}/docs/contributing-benchmarks.md +0 -0
  53. {embedflow-0.3.0 → embedflow-0.5.0}/docs/economics.md +0 -0
  54. {embedflow-0.3.0 → embedflow-0.5.0}/docs/integrations/faiss.md +0 -0
  55. {embedflow-0.3.0 → embedflow-0.5.0}/docs/integrations/pgvector.md +0 -0
  56. {embedflow-0.3.0 → embedflow-0.5.0}/docs/integrations/pinecone.md +0 -0
  57. {embedflow-0.3.0 → embedflow-0.5.0}/docs/integrations/qdrant.md +0 -0
  58. {embedflow-0.3.0 → embedflow-0.5.0}/docs/methodology.md +0 -0
  59. {embedflow-0.3.0 → embedflow-0.5.0}/docs/quickstart.md +0 -0
  60. {embedflow-0.3.0 → embedflow-0.5.0}/docs/registry.md +0 -0
  61. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/__main__.py +0 -0
  62. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/analysis.py +0 -0
  63. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/api.py +0 -0
  64. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/cache/__init__.py +0 -0
  65. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/cache/base.py +0 -0
  66. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/cache/persistent_cache.py +0 -0
  67. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/compatibility/__init__.py +0 -0
  68. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/compatibility/candidate_gap.py +0 -0
  69. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/compatibility/containment.py +0 -0
  70. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/compatibility/metrics.py +0 -0
  71. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/compatibility/migration_depth.py +0 -0
  72. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/compatibility/probe.py +0 -0
  73. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/compatibility/report.py +0 -0
  74. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/compatibility/t2.py +0 -0
  75. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/data/__init__.py +0 -0
  76. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/data/registry/__init__.py +0 -0
  77. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/data/registry/benchmark_profiles.jsonl +0 -0
  78. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/data/registry/checksums.sha256 +0 -0
  79. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/data/registry/migrations.jsonl +0 -0
  80. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/data/registry/registry_manifest.json +0 -0
  81. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/data/registry/research_summaries.json +0 -0
  82. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/data/registry/schema_version.json +0 -0
  83. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/frozen/T2_V1_FROZEN_SPEC.md +0 -0
  84. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/frozen/T2_V1_FROZEN_SPEC.sha256 +0 -0
  85. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/indexes/base.py +0 -0
  86. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/indexes/faiss_backend.py +0 -0
  87. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/indexes/pgvector_backend.py +0 -0
  88. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/indexes/pinecone_backend.py +0 -0
  89. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/indexes/qdrant_backend.py +0 -0
  90. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/metrics/__init__.py +0 -0
  91. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/metrics/latency.py +0 -0
  92. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/migration/__init__.py +0 -0
  93. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/migration/compatibility.py +0 -0
  94. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/migration/materializer.py +0 -0
  95. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/migration/planner.py +0 -0
  96. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/migration/state.py +0 -0
  97. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/models/__init__.py +0 -0
  98. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/models/base.py +0 -0
  99. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/models/huggingface.py +0 -0
  100. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/registry/__init__.py +0 -0
  101. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/registry/loader.py +0 -0
  102. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/registry/matcher.py +0 -0
  103. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/registry/schema.py +0 -0
  104. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/serving/__init__.py +0 -0
  105. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/serving/api.py +0 -0
  106. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/serving/engine.py +0 -0
  107. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/serving/factory.py +0 -0
  108. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow/serving/schemas.py +0 -0
  109. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow.egg-info/dependency_links.txt +0 -0
  110. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow.egg-info/entry_points.txt +0 -0
  111. {embedflow-0.3.0 → embedflow-0.5.0}/embedflow.egg-info/top_level.txt +0 -0
  112. {embedflow-0.3.0 → embedflow-0.5.0}/examples/faiss/README.md +0 -0
  113. {embedflow-0.3.0 → embedflow-0.5.0}/examples/faiss/documents.jsonl +0 -0
  114. {embedflow-0.3.0 → embedflow-0.5.0}/examples/faiss/embedflow.yaml +0 -0
  115. {embedflow-0.3.0 → embedflow-0.5.0}/examples/faiss/queries.jsonl +0 -0
  116. {embedflow-0.3.0 → embedflow-0.5.0}/examples/pgvector/README.md +0 -0
  117. {embedflow-0.3.0 → embedflow-0.5.0}/examples/pgvector/build_index.py +0 -0
  118. {embedflow-0.3.0 → embedflow-0.5.0}/examples/pgvector/compose.yaml +0 -0
  119. {embedflow-0.3.0 → embedflow-0.5.0}/examples/pgvector/embedflow.yaml +0 -0
  120. {embedflow-0.3.0 → embedflow-0.5.0}/examples/pgvector/init.sql +0 -0
  121. {embedflow-0.3.0 → embedflow-0.5.0}/examples/pgvector/queries.jsonl +0 -0
  122. {embedflow-0.3.0 → embedflow-0.5.0}/examples/pgvector/run_demo.sh +0 -0
  123. {embedflow-0.3.0 → embedflow-0.5.0}/examples/pinecone/README.md +0 -0
  124. {embedflow-0.3.0 → embedflow-0.5.0}/examples/pinecone/run_smoke.sh +0 -0
  125. {embedflow-0.3.0 → embedflow-0.5.0}/examples/qdrant/README.md +0 -0
  126. {embedflow-0.3.0 → embedflow-0.5.0}/examples/qdrant/build_index.py +0 -0
  127. {embedflow-0.3.0 → embedflow-0.5.0}/examples/qdrant/documents.jsonl +0 -0
  128. {embedflow-0.3.0 → embedflow-0.5.0}/examples/qdrant/embedflow.yaml +0 -0
  129. {embedflow-0.3.0 → embedflow-0.5.0}/examples/qdrant/queries.jsonl +0 -0
  130. {embedflow-0.3.0 → embedflow-0.5.0}/examples/research_analysis/README.md +0 -0
  131. {embedflow-0.3.0 → embedflow-0.5.0}/examples/research_analysis/documents.jsonl +0 -0
  132. {embedflow-0.3.0 → embedflow-0.5.0}/examples/research_analysis/embedflow.yaml +0 -0
  133. {embedflow-0.3.0 → embedflow-0.5.0}/examples/research_analysis/qrels.json +0 -0
  134. {embedflow-0.3.0 → embedflow-0.5.0}/examples/research_analysis/queries.jsonl +0 -0
  135. {embedflow-0.3.0 → embedflow-0.5.0}/frozen/T2_V1_FROZEN_SPEC.md +0 -0
  136. {embedflow-0.3.0 → embedflow-0.5.0}/frozen/T2_V1_FROZEN_SPEC.sha256 +0 -0
  137. {embedflow-0.3.0 → embedflow-0.5.0}/requirements-dev.txt +0 -0
  138. {embedflow-0.3.0 → embedflow-0.5.0}/requirements.txt +0 -0
  139. {embedflow-0.3.0 → embedflow-0.5.0}/scripts/pinecone_smoke.py +0 -0
  140. {embedflow-0.3.0 → embedflow-0.5.0}/scripts/real_qdrant_smoke.py +0 -0
  141. {embedflow-0.3.0 → embedflow-0.5.0}/scripts/run_demo.sh +0 -0
  142. {embedflow-0.3.0 → embedflow-0.5.0}/scripts/run_tests.sh +0 -0
  143. {embedflow-0.3.0 → embedflow-0.5.0}/setup.cfg +0 -0
  144. {embedflow-0.3.0 → embedflow-0.5.0}/src/__init__.py +0 -0
  145. {embedflow-0.3.0 → embedflow-0.5.0}/src/embed.py +0 -0
  146. {embedflow-0.3.0 → embedflow-0.5.0}/src/probe_features.py +0 -0
  147. {embedflow-0.3.0 → embedflow-0.5.0}/src/storage.py +0 -0
  148. {embedflow-0.3.0 → embedflow-0.5.0}/src/t2_v1.py +0 -0
  149. {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.3.0
6
- date-released: 2026-09-06
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.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.3.0 is an alpha release for research and early real-world
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.3.0 is an alpha release for research and early real-world
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.3.0 is an alpha release for research and early real-world
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 pinecone
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.0 is an alpha release for research and early real-world
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.3.0-py3-none-any.whl
22
- tar -tzf dist/embedflow-0.3.0.tar.gz
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.3.0-py3-none-any.whl
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.3.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.3.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.3.0rc1` for the TestPyPI-only trial. Keep production `0.3.0` unchanged.
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.3.0`.
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.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 Pinecone index.
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``