vecforge 0.2.0__tar.gz → 1.0.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 (39) hide show
  1. {vecforge-0.2.0/vecforge.egg-info → vecforge-1.0.0}/PKG-INFO +4 -4
  2. {vecforge-0.2.0 → vecforge-1.0.0}/README.md +2 -2
  3. {vecforge-0.2.0 → vecforge-1.0.0}/pyproject.toml +2 -2
  4. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/__init__.py +1 -1
  5. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/cli/main.py +1 -1
  6. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/search/cascade.py +3 -3
  7. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/search/hybrid.py +2 -1
  8. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/server/app.py +1 -1
  9. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/server/routes.py +1 -1
  10. {vecforge-0.2.0 → vecforge-1.0.0/vecforge.egg-info}/PKG-INFO +4 -4
  11. {vecforge-0.2.0 → vecforge-1.0.0}/LICENSE +0 -0
  12. {vecforge-0.2.0 → vecforge-1.0.0}/NOTICE +0 -0
  13. {vecforge-0.2.0 → vecforge-1.0.0}/setup.cfg +0 -0
  14. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/cli/__init__.py +0 -0
  15. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/core/__init__.py +0 -0
  16. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/core/bm25.py +0 -0
  17. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/core/embedder.py +0 -0
  18. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/core/indexer.py +0 -0
  19. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/core/reranker.py +0 -0
  20. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/core/storage.py +0 -0
  21. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/core/vault.py +0 -0
  22. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/exceptions.py +0 -0
  23. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/ingest/__init__.py +0 -0
  24. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/ingest/dispatcher.py +0 -0
  25. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/ingest/document.py +0 -0
  26. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/search/__init__.py +0 -0
  27. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/search/filters.py +0 -0
  28. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/security/__init__.py +0 -0
  29. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/security/audit.py +0 -0
  30. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/security/encryption.py +0 -0
  31. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/security/namespaces.py +0 -0
  32. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/security/rbac.py +0 -0
  33. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/security/snapshots.py +0 -0
  34. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge/server/__init__.py +0 -0
  35. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge.egg-info/SOURCES.txt +0 -0
  36. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge.egg-info/dependency_links.txt +0 -0
  37. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge.egg-info/entry_points.txt +0 -0
  38. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge.egg-info/requires.txt +0 -0
  39. {vecforge-0.2.0 → vecforge-1.0.0}/vecforge.egg-info/top_level.txt +0 -0
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vecforge
3
- Version: 0.2.0
3
+ Version: 1.0.0
4
4
  Summary: Forge your vector database. Own it forever. Local-first, encrypted, quantum-inspired.
5
5
  Author-email: Suneel Bose K <suneelbose@arcgx.in>
6
6
  License: Business Source License 1.1
7
- Project-URL: Homepage, https://vecforge.arcgx.in
7
+ Project-URL: Homepage, https://bosekarmegam.github.io/vecforge/
8
8
  Project-URL: Repository, https://github.com/bosekarmegam/vecforge
9
9
  Project-URL: Issues, https://github.com/bosekarmegam/vecforge/issues
10
10
  Keywords: vector-database,faiss,embeddings,search,local-first,encrypted
@@ -45,7 +45,8 @@ Provides-Extra: quantum
45
45
  Dynamic: license-file
46
46
 
47
47
  <p align="center">
48
- <h1 align="center">⚡ VecForge</h1>
48
+ <img src="vecforge-logo.svg" alt="VecForge Logo" width="120" height="120">
49
+ <h1 align="center">VecForge</h1>
49
50
  <p align="center"><strong>Forge your vector database. Own it forever.</strong></p>
50
51
  <p align="center">
51
52
  Local-first · Encrypted · Hybrid Search · Zero Cloud Dependency
@@ -59,7 +60,6 @@ Dynamic: license-file
59
60
  Built by **Suneel Bose K** — Founder & CEO, [ArcGX TechLabs Private Limited](https://arcgx.in)
60
61
 
61
62
  [![PyPI version](https://img.shields.io/pypi/v/vecforge.svg)](https://pypi.org/project/vecforge/)
62
- [![PyPI downloads](https://img.shields.io/pypi/dm/vecforge.svg)](https://pypi.org/project/vecforge/)
63
63
  [![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](LICENSE)
64
64
  [![Python 3.10+](https://img.shields.io/badge/Python-3.10+-green.svg)](https://python.org)
65
65
  [![Tests](https://github.com/bosekarmegam/vecforge/actions/workflows/tests.yml/badge.svg)](https://github.com/bosekarmegam/vecforge/actions/workflows/tests.yml)
@@ -1,5 +1,6 @@
1
1
  <p align="center">
2
- <h1 align="center">⚡ VecForge</h1>
2
+ <img src="vecforge-logo.svg" alt="VecForge Logo" width="120" height="120">
3
+ <h1 align="center">VecForge</h1>
3
4
  <p align="center"><strong>Forge your vector database. Own it forever.</strong></p>
4
5
  <p align="center">
5
6
  Local-first · Encrypted · Hybrid Search · Zero Cloud Dependency
@@ -13,7 +14,6 @@
13
14
  Built by **Suneel Bose K** — Founder & CEO, [ArcGX TechLabs Private Limited](https://arcgx.in)
14
15
 
15
16
  [![PyPI version](https://img.shields.io/pypi/v/vecforge.svg)](https://pypi.org/project/vecforge/)
16
- [![PyPI downloads](https://img.shields.io/pypi/dm/vecforge.svg)](https://pypi.org/project/vecforge/)
17
17
  [![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](LICENSE)
18
18
  [![Python 3.10+](https://img.shields.io/badge/Python-3.10+-green.svg)](https://python.org)
19
19
  [![Tests](https://github.com/bosekarmegam/vecforge/actions/workflows/tests.yml/badge.svg)](https://github.com/bosekarmegam/vecforge/actions/workflows/tests.yml)
@@ -8,7 +8,7 @@ build-backend = "setuptools.build_meta"
8
8
 
9
9
  [project]
10
10
  name = "vecforge"
11
- version = "0.2.0"
11
+ version = "1.0.0"
12
12
  description = "Forge your vector database. Own it forever. Local-first, encrypted, quantum-inspired."
13
13
  readme = "README.md"
14
14
  license = {text = "Business Source License 1.1"}
@@ -59,7 +59,7 @@ quantum = []
59
59
  vecforge = "vecforge.cli.main:cli"
60
60
 
61
61
  [project.urls]
62
- Homepage = "https://vecforge.arcgx.in"
62
+ Homepage = "https://bosekarmegam.github.io/vecforge/"
63
63
  Repository = "https://github.com/bosekarmegam/vecforge"
64
64
  Issues = "https://github.com/bosekarmegam/vecforge/issues"
65
65
 
@@ -52,7 +52,7 @@ __all__ = [
52
52
  "IngestError",
53
53
  ]
54
54
 
55
- __version__ = "0.2.0"
55
+ __version__ = "1.0.0"
56
56
  __author__ = "Suneel Bose K"
57
57
  __company__ = "ArcGX TechLabs Private Limited"
58
58
  __license__ = "BSL-1.1"
@@ -23,7 +23,7 @@ import click
23
23
 
24
24
 
25
25
  @click.group()
26
- @click.version_option(version="0.2.0", prog_name="VecForge")
26
+ @click.version_option(version="1.0.0", prog_name="VecForge")
27
27
  def cli() -> None:
28
28
  """VecForge — Forge your vector database. Own it forever.
29
29
 
@@ -32,7 +32,7 @@ from vecforge.core.bm25 import BM25Engine
32
32
  from vecforge.core.indexer import FaissIndexer
33
33
  from vecforge.core.reranker import Reranker
34
34
  from vecforge.search.filters import MetadataFilter
35
- from vecforge.search.hybrid import reciprocal_rank_fusion
35
+ from vecforge.search.hybrid import weighted_linear_fusion
36
36
 
37
37
  logger = logging.getLogger(__name__)
38
38
 
@@ -134,12 +134,12 @@ class CascadeSearcher:
134
134
  dense_scores, dense_ids = self._indexer.search(query_vector, top_k=retrieval_k)
135
135
  logger.debug("Stage 1 (Dense): retrieved %d candidates", len(dense_ids))
136
136
 
137
- # ─── Stage 2: Sparse keyword merge via RRF ───
137
+ # ─── Stage 2: Sparse keyword merge via Weighted Linear Fusion ───
138
138
  bm25_results = self._bm25.search(query_text, top_k=retrieval_k)
139
139
  sparse_ids = [r.doc_index for r in bm25_results]
140
140
  sparse_scores = [r.score for r in bm25_results]
141
141
 
142
- fused = reciprocal_rank_fusion(
142
+ fused = weighted_linear_fusion(
143
143
  dense_ids=dense_ids,
144
144
  dense_scores=dense_scores,
145
145
  sparse_ids=sparse_ids,
@@ -119,6 +119,7 @@ def weighted_linear_fusion(
119
119
  fused_scores: dict[int, float] = {}
120
120
 
121
121
  # perf: Normalize dense scores to [0, 1]
122
+ effective_alpha = alpha if len(sparse_scores) > 0 else 1.0
122
123
  if len(dense_scores) > 0:
123
124
  d_min, d_max = float(dense_scores.min()), float(dense_scores.max())
124
125
  d_range = d_max - d_min if d_max > d_min else 1.0
@@ -128,7 +129,7 @@ def weighted_linear_fusion(
128
129
  if doc_id_int < 0:
129
130
  continue
130
131
  norm_score = (float(score) - d_min) / d_range
131
- fused_scores[doc_id_int] = alpha * norm_score
132
+ fused_scores[doc_id_int] = effective_alpha * norm_score
132
133
 
133
134
  # perf: Normalize sparse scores to [0, 1]
134
135
  if len(sparse_scores) > 0:
@@ -43,7 +43,7 @@ def create_app(vault_path: str = ":memory:") -> FastAPI:
43
43
  "Built by Suneel Bose K · ArcGX TechLabs Private Limited.\n"
44
44
  "Licensed under BSL 1.1."
45
45
  ),
46
- version="0.2.0",
46
+ version="1.0.0",
47
47
  docs_url="/docs",
48
48
  redoc_url="/redoc",
49
49
  )
@@ -208,7 +208,7 @@ def create_router(vault_path: str) -> APIRouter:
208
208
  return {
209
209
  "status": "healthy",
210
210
  "service": "VecForge",
211
- "version": "0.2.0",
211
+ "version": "1.0.0",
212
212
  "built_by": "Suneel Bose K · ArcGX TechLabs",
213
213
  }
214
214
 
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vecforge
3
- Version: 0.2.0
3
+ Version: 1.0.0
4
4
  Summary: Forge your vector database. Own it forever. Local-first, encrypted, quantum-inspired.
5
5
  Author-email: Suneel Bose K <suneelbose@arcgx.in>
6
6
  License: Business Source License 1.1
7
- Project-URL: Homepage, https://vecforge.arcgx.in
7
+ Project-URL: Homepage, https://bosekarmegam.github.io/vecforge/
8
8
  Project-URL: Repository, https://github.com/bosekarmegam/vecforge
9
9
  Project-URL: Issues, https://github.com/bosekarmegam/vecforge/issues
10
10
  Keywords: vector-database,faiss,embeddings,search,local-first,encrypted
@@ -45,7 +45,8 @@ Provides-Extra: quantum
45
45
  Dynamic: license-file
46
46
 
47
47
  <p align="center">
48
- <h1 align="center">⚡ VecForge</h1>
48
+ <img src="vecforge-logo.svg" alt="VecForge Logo" width="120" height="120">
49
+ <h1 align="center">VecForge</h1>
49
50
  <p align="center"><strong>Forge your vector database. Own it forever.</strong></p>
50
51
  <p align="center">
51
52
  Local-first · Encrypted · Hybrid Search · Zero Cloud Dependency
@@ -59,7 +60,6 @@ Dynamic: license-file
59
60
  Built by **Suneel Bose K** — Founder & CEO, [ArcGX TechLabs Private Limited](https://arcgx.in)
60
61
 
61
62
  [![PyPI version](https://img.shields.io/pypi/v/vecforge.svg)](https://pypi.org/project/vecforge/)
62
- [![PyPI downloads](https://img.shields.io/pypi/dm/vecforge.svg)](https://pypi.org/project/vecforge/)
63
63
  [![License: BSL 1.1](https://img.shields.io/badge/License-BSL%201.1-blue.svg)](LICENSE)
64
64
  [![Python 3.10+](https://img.shields.io/badge/Python-3.10+-green.svg)](https://python.org)
65
65
  [![Tests](https://github.com/bosekarmegam/vecforge/actions/workflows/tests.yml/badge.svg)](https://github.com/bosekarmegam/vecforge/actions/workflows/tests.yml)
File without changes
File without changes
File without changes
File without changes