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