pyvectorhound 1.1.1__tar.gz → 1.4.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 (103) hide show
  1. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/.github/workflows/ci.yml +5 -5
  2. pyvectorhound-1.4.0/CHANGELOG.md +180 -0
  3. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/Cargo.lock +2 -2
  4. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/Cargo.toml +2 -2
  5. pyvectorhound-1.4.0/DASHBOARD_SHORTCUTS.md +161 -0
  6. pyvectorhound-1.4.0/DEPLOYMENT.md +673 -0
  7. pyvectorhound-1.4.0/LICENSE +22 -0
  8. pyvectorhound-1.4.0/OTEL_SETUP_GUIDE.md +319 -0
  9. pyvectorhound-1.4.0/PKG-INFO +356 -0
  10. pyvectorhound-1.4.0/PRODUCTION_DEPLOYMENT.md +512 -0
  11. pyvectorhound-1.4.0/README.md +294 -0
  12. pyvectorhound-1.4.0/USER_GUIDE.md +609 -0
  13. pyvectorhound-1.4.0/docs/PRODUCT_VISION.md +95 -0
  14. pyvectorhound-1.4.0/docs/ROADMAP.md +197 -0
  15. pyvectorhound-1.4.0/examples/benchmarking_and_trends.py +211 -0
  16. pyvectorhound-1.4.0/examples/mcp_pyvectorhound.py +27 -0
  17. pyvectorhound-1.4.0/examples/retrieval_debug.py +106 -0
  18. pyvectorhound-1.4.0/otel_exporter.py +189 -0
  19. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/pyproject.toml +20 -19
  20. pyvectorhound-1.4.0/pyvectorhound/__init__.py +123 -0
  21. pyvectorhound-1.4.0/pyvectorhound/_mcp_connector.py +105 -0
  22. pyvectorhound-1.4.0/pyvectorhound/_mcp_tools.py +321 -0
  23. pyvectorhound-1.4.0/pyvectorhound/_retry.py +50 -0
  24. pyvectorhound-1.4.0/pyvectorhound/advanced_analytics.py +439 -0
  25. pyvectorhound-1.4.0/pyvectorhound/benchmarking.py +401 -0
  26. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/pyvectorhound/cli.py +12 -0
  27. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/pyvectorhound/comparison.py +74 -36
  28. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/pyvectorhound/database.py +77 -24
  29. pyvectorhound-1.4.0/pyvectorhound/db_adapters.py +549 -0
  30. pyvectorhound-1.4.0/pyvectorhound/diagnosis.py +568 -0
  31. pyvectorhound-1.4.0/pyvectorhound/hound.py +564 -0
  32. pyvectorhound-1.4.0/pyvectorhound/langchain_integration.py +388 -0
  33. pyvectorhound-1.4.0/pyvectorhound/llamaindex_integration.py +470 -0
  34. pyvectorhound-1.4.0/pyvectorhound/otel_integration.py +469 -0
  35. pyvectorhound-1.4.0/pyvectorhound/recommendations.py +570 -0
  36. pyvectorhound-1.4.0/pyvectorhound/retrieval_replay.py +446 -0
  37. pyvectorhound-1.4.0/pyvectorhound/retrieval_tracing.py +423 -0
  38. pyvectorhound-1.4.0/pyvectorhound/scorer.py +263 -0
  39. pyvectorhound-1.4.0/pyvectorhound/scripts/__init__.py +0 -0
  40. pyvectorhound-1.4.0/pyvectorhound/scripts/post_install.py +24 -0
  41. pyvectorhound-1.4.0/pyvectorhound/scripts/setup_shortcuts.sh +35 -0
  42. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/pyvectorhound/server.py +15 -1
  43. pyvectorhound-1.4.0/pyvectorhound/trend_analysis.py +526 -0
  44. pyvectorhound-1.4.0/pyvectorhound/web_dashboard.py +501 -0
  45. pyvectorhound-1.4.0/pyvectorhound.toml +22 -0
  46. pyvectorhound-1.4.0/scripts/setup_shortcuts.sh +30 -0
  47. pyvectorhound-1.4.0/scripts/test_dashboards_crossplatform.sh +208 -0
  48. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/src/lib.rs +3 -4
  49. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/src/metrics.rs +6 -6
  50. pyvectorhound-1.4.0/src/retrieval_ranking.rs +280 -0
  51. pyvectorhound-1.4.0/tests/test_benchmarking.py +307 -0
  52. pyvectorhound-1.4.0/tests/test_database_adapters.py +191 -0
  53. pyvectorhound-1.4.0/tests/test_diagnosis.py +333 -0
  54. pyvectorhound-1.4.0/tests/test_hound.py +223 -0
  55. pyvectorhound-1.4.0/tests/test_recommendations.py +335 -0
  56. pyvectorhound-1.4.0/tests/test_retrieval_replay.py +381 -0
  57. pyvectorhound-1.4.0/tests/test_scorer.py +138 -0
  58. pyvectorhound-1.4.0/tests/test_trend_analysis.py +414 -0
  59. pyvectorhound-1.4.0/tests/test_v05_integrations.py +336 -0
  60. pyvectorhound-1.1.1/CHANGELOG.md +0 -41
  61. pyvectorhound-1.1.1/LICENSE +0 -21
  62. pyvectorhound-1.1.1/PKG-INFO +0 -693
  63. pyvectorhound-1.1.1/README.md +0 -632
  64. pyvectorhound-1.1.1/ROADMAP.md +0 -73
  65. pyvectorhound-1.1.1/examples/retrieval_debug.py +0 -38
  66. pyvectorhound-1.1.1/pyvectorhound/__init__.py +0 -58
  67. pyvectorhound-1.1.1/pyvectorhound/diagnosis.py +0 -303
  68. pyvectorhound-1.1.1/pyvectorhound/hound.py +0 -230
  69. pyvectorhound-1.1.1/pyvectorhound/scorer.py +0 -199
  70. pyvectorhound-1.1.1/tests/test_diagnosis.py +0 -74
  71. pyvectorhound-1.1.1/tests/test_hound.py +0 -55
  72. pyvectorhound-1.1.1/tests/test_vector_operations.py +0 -291
  73. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  74. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  75. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/.github/dependabot.yml +0 -0
  76. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/.gitignore +0 -0
  77. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/.pre-commit-config.yaml +0 -0
  78. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/ARCHITECTURE.md +0 -0
  79. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/CODE_OF_CONDUCT.md +0 -0
  80. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/CONTRIBUTING.md +0 -0
  81. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/Makefile +0 -0
  82. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/OKF_INTEGRATION.md +0 -0
  83. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/SECURITY.md +0 -0
  84. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/docs/ARCHITECTURE.md +0 -0
  85. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/docs/GUIDE.md +0 -0
  86. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/docs/strategy/PYHOUND_FINAL_STATUS.md +0 -0
  87. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/docs/strategy/PyHound_COMPETITIVE_ROADMAP.md +0 -0
  88. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/docs/strategy/PyHound_FINAL_PRODUCT.md +0 -0
  89. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/docs/strategy/PyHound_GITHUB_LAUNCH.md +0 -0
  90. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/docs/strategy/PyHound_LAUNCH_CHECKLIST.md +0 -0
  91. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/docs/strategy/PyHound_UNIFICATION_STRATEGY.md +0 -0
  92. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/docs/strategy/PyHound_vs_Observability.md +0 -0
  93. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/install.sh +0 -0
  94. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/pyvectorhound/_safe_exec.py +0 -0
  95. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/pyvectorhound/backends.py +0 -0
  96. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/pyvectorhound/error_messages.py +0 -0
  97. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/pyvectorhound/errors.py +0 -0
  98. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/pyvectorhound/logging_config.py +0 -0
  99. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/pyvectorhound/okf_diagnostics.py +0 -0
  100. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/pyvectorhound/py.typed +0 -0
  101. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/pyvectorhound/validation.py +0 -0
  102. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/rust-toolchain.toml +0 -0
  103. {pyvectorhound-1.1.1 → pyvectorhound-1.4.0}/tests/test_okf_diagnostics.py +0 -0
@@ -13,7 +13,7 @@ jobs:
13
13
  steps:
14
14
  - uses: actions/checkout@v4
15
15
 
16
- - uses: dtolnay/rust-toolchain@v1
16
+ - uses: dtolnay/rust-toolchain@stable
17
17
 
18
18
  - uses: Swatinem/rust-cache@v2
19
19
 
@@ -32,7 +32,7 @@ jobs:
32
32
  steps:
33
33
  - uses: actions/checkout@v4
34
34
 
35
- - uses: dtolnay/rust-toolchain@v1
35
+ - uses: dtolnay/rust-toolchain@stable
36
36
 
37
37
  - uses: Swatinem/rust-cache@v2
38
38
 
@@ -40,8 +40,8 @@ jobs:
40
40
  with:
41
41
  python-version: ${{ matrix.python-version }}
42
42
 
43
- - name: Install dependencies
44
- run: cd python && pip install -e ".[dev]"
43
+ - name: Install package + dev dependencies
44
+ run: pip install -e ".[dev]"
45
45
 
46
46
  - name: Run pytest
47
- run: if [ -d "python/tests" ]; then cd python && pytest tests/ -v --tb=short; else echo "No Python tests found"; fi
47
+ run: pytest tests/ -v --tb=short
@@ -0,0 +1,180 @@
1
+ # Changelog
2
+
3
+ All notable changes to PyVectorHound are documented in this file.
4
+
5
+ ## [1.4.0]
6
+
7
+ ### Added
8
+
9
+ - **LLM-as-judge faithfulness / semantic contradiction scoring.** `Diagnosis`
10
+ accepts optional `document_texts` (doc_id -> text) and `llm_judge_fn`
11
+ (`(query, doc_texts) -> dict`) — mirrors the existing `embed_fn` pattern,
12
+ no LLM client bundled. Adds a `faithfulness` component to
13
+ `metrics()`/`hunt()`/`recommendations()`/`root_cause()` that catches
14
+ retrieved documents that are embedding-similar but semantically
15
+ contradict or are irrelevant to the query, a failure mode distance
16
+ metrics alone can't see. Reports `UNKNOWN` honestly when the required
17
+ inputs aren't supplied.
18
+ - **`Hound.diagnose_batch()`** — runs many queries concurrently on a thread
19
+ pool instead of serially, for large-scale evaluation runs. `embed_fn`
20
+ and `llm_judge_fn` calls now retry with exponential backoff + jitter
21
+ (`pyvectorhound/_retry.py`).
22
+ - **Dynamic threshold calibration.** `scorer.py` and `diagnosis.py`'s
23
+ GOOD/MODERATE/WEAK quality-status cutoffs now classify relative to a
24
+ tracked `TrendAnalyzer` baseline (z-score based) when one is available,
25
+ instead of a fixed numeric cutoff — so status doesn't silently drift
26
+ when you swap embedding models. Falls back to the original fixed
27
+ cutoffs on cold start (no baseline yet). `Hound.diagnose()` and
28
+ `Hound.quality_scorer()` wire this up automatically.
29
+
30
+ ## [1.3.3] - Unreleased
31
+
32
+ This release reconciles two independent fix passes that diverged from the
33
+ same base commit (`165cc80`) without knowledge of each other:
34
+
35
+ 1. The repo owner's own prior work (now `1.3.2`, below): the v1.3 retrieval
36
+ ranking feature, a real Milvus `get_embeddings`, and a fix for the
37
+ `_core` extension / fabricated-diagnosis bug.
38
+ 2. A separate remediation pass, done from a stale local clone that had not
39
+ pulled (1), which fixed the *same* `_core`/fabrication bug independently
40
+ (briefly published to PyPI as `1.3.0` before this reconciliation) and
41
+ also fixed a number of other, non-overlapping fabrication bugs the
42
+ `1.3.2` pass didn't touch.
43
+
44
+ Where both passes fixed the same thing (`diagnosis.py`, `scorer.py`,
45
+ `src/lib.rs`'s `_core` symbol, the `pyhound` import), `1.3.2`'s
46
+ implementation was kept as authoritative and the duplicate was discarded.
47
+ Everything below is what pass (2) fixed that pass (1) did not; it's applied
48
+ on top of `1.3.2` unchanged.
49
+
50
+ ### Fixed
51
+ - `Hound.diagnose()` fabricated the query embedding: a query with no
52
+ `query_embedding` got `np.random.randn(768)`, silently producing a
53
+ meaningless diagnosis dressed up with real-looking metrics. It now
54
+ requires a `query_embedding` or a configured `embed_fn` and raises a
55
+ clear `ValueError` otherwise. **Breaking change** for callers that relied
56
+ on the old silent random-vector fallback; `tests/test_hound.py` was
57
+ updated to assert the new behavior (and a new `embed_fn`-path test) in
58
+ place of the old test that asserted the fabricated vector was generated.
59
+ - `Hound.__init__` eagerly called `adapter.connect()`, requiring the
60
+ optional client library and a live server just to construct a `Hound`.
61
+ Connection is now lazy, matching every adapter method's own
62
+ lazy-connect behavior.
63
+ - Database adapters' `search()` (Qdrant, Chroma, Milvus, pgvector,
64
+ Weaviate) returned the *query* embedding as every result's `"embedding"`
65
+ field instead of the real per-document vector, corrupting any downstream
66
+ embedding-space analysis that reads it directly from search results.
67
+ They now fetch and return the actual per-document embedding where the
68
+ underlying client supports it. (Milvus's `search()` additionally now
69
+ requests `vector_field`/`id_field` per `1.3.2`'s configurable field
70
+ names, alongside this fix.)
71
+ - `pydantic` is used in `database.py` (`SecretStr`) but was missing from
72
+ `pyproject.toml` dependencies, so a clean install could fail on import
73
+ if pydantic wasn't already present transitively. Added as a dependency.
74
+ Also moved the `from pydantic import SecretStr` statement below the
75
+ module docstring -- it previously preceded it, which silently discarded
76
+ the module's `__doc__`.
77
+ - Base and optional dependencies were pinned to exact old versions (e.g.
78
+ `numpy==1.20.0`, `black==23.0.0`) with no compatible wheels for some of
79
+ the Python versions this package claims to support (3.8-3.12), breaking
80
+ `pip install .[dev]`. Relaxed to compatible ranges.
81
+ - CI's Python test job referenced a nonexistent `python/` subdirectory and
82
+ never built the Rust extension via `maturin`, so it always ran against
83
+ whatever `_core` state happened to exist (or silently skipped tests
84
+ entirely). It now runs `maturin develop --release` before installing
85
+ dependencies and running pytest, at the actual repo root.
86
+ - Adapter `ImportError` messages told users to `pip install pyhound[...]`
87
+ -- `pyhound` is this project's old name and is not the installable
88
+ package; corrected to `pyvectorhound[...]` across all five adapters.
89
+ - `ModelComparison`/`Hound.compare_models()` fabricated quality scores
90
+ (`f1_score`, `ndcg`, etc.) derived from `hash(model_name)`. It now
91
+ reports only real, published cost/latency metadata unless a `quality_fn`
92
+ is supplied for real, measured quality numbers; unmeasured quality is
93
+ reported as `None` with `quality_measured: False` rather than a fake
94
+ number.
95
+ - `Hound.compare_metrics()` and `Hound.detect_drift()` returned fixed
96
+ placeholder output (zeros / `"No action needed"`) regardless of input,
97
+ with no backing data store. They now raise `NotImplementedError`
98
+ pointing at the real, tested alternative (`track_metric()` +
99
+ `get_trend_report()` / `TrendAnalyzer.detect_drift()`).
100
+ - Removed `tests/test_vector_operations.py`: it tested `VectorStore` and
101
+ `EmbeddingManager` classes that do not exist anywhere in this codebase
102
+ and are outside this package's scope (diagnosing failures in databases
103
+ you already run, not being one).
104
+ - Removed stale `README.md.bak` and `pyvectorhound/__init__.py.bak` files
105
+ left over from a previous edit.
106
+ - `pyvectorhound/diagnosis.py`'s `hunt()` report header still read
107
+ "PyHound Diagnosis Report" after the project's rename; corrected to
108
+ "PyVectorHound", with the matching test assertion updated.
109
+ - The CLI (`cli.py`) and REST server (`server.py`) never threaded
110
+ `query_embedding`/`embed_fn` through to `Hound.diagnose()`, so both would
111
+ hit the `ValueError` above unconditionally once the random-embedding
112
+ fallback was removed. Both now accept and forward a precomputed
113
+ `query_embedding`.
114
+ - `README.md` and `examples/retrieval_debug.py` described a fictional API
115
+ (`VectorHound`, `hound.validate_quality()`, `quality_score()`, DB
116
+ support for Pinecone/Elasticsearch that isn't implemented) instead of
117
+ the real `Hound`/`Diagnosis` classes. Rewritten to match the actual,
118
+ reconciled API, including `embed_fn` and lazy connection.
119
+
120
+ ## [1.3.2] - Unreleased
121
+
122
+ ### Fixed
123
+ - The compiled Rust scoring engine (`pyvectorhound._core`) could never actually load, for two independent reasons: (1) the `#[pymodule]` function was named `pyhound_core` in Rust while `Cargo.toml`/`pyproject.toml` both expect the extension's init symbol to be `_core`; (2) `diagnosis.py` and `scorer.py` imported it as `from pyhound import _core` -- `pyhound` was this project's old name before it was renamed to `pyvectorhound`, and that import was never updated. Both are fixed; `_core` now loads and its isotropy/coverage/distinctiveness/quality-score functions are actually reachable for the first time.
124
+ - `Diagnosis._analyze_embedding()` returned hardcoded placeholder numbers (isotropy 0.72, coverage 0.85, distinctiveness 0.68) and an unconditional `"GOOD"` status regardless of the actual retrieved documents. It now fetches the real per-document embeddings via `adapter.get_embeddings()` and computes real metrics via `_core`, honestly reporting `UNKNOWN` when there isn't enough real data to compute them (fewer than 2 embeddings, no adapter, or `_core` unavailable) rather than a fabricated score.
125
+ - `Diagnosis._analyze_vector_search()`'s MRR was a hardcoded `0.85 if any relevant doc was retrieved, else 0.0`, ignoring rank entirely. It's now a real reciprocal-rank calculation based on the position of the first relevant result.
126
+ - `Diagnosis._analyze_bm25()` and `_analyze_reranker()` unconditionally reported `"GOOD"` with fabricated precision/recall/calibration/NDCG numbers even though no BM25 index or reranker-score subsystem exists anywhere in this codebase. They now honestly report `UNKNOWN` with an explanation, instead of a fake positive verdict. `root_cause()`/`recommendations()` updated so they no longer misinterpret an honest `UNKNOWN` as a real quality problem.
127
+ - `QualityScorer.score()` computed a real `overall` score via `_core` but returned hardcoded `isotropy`/`coverage`/`distinctiveness`/`query_relevance` values alongside it regardless of the input embedding. It now samples real nearest-neighbor embeddings from the corpus via the adapter and computes all four metrics for real (or reports `UNKNOWN` if no adapter/corpus data is available, rather than a fake middling score).
128
+ - `QualityScorer.corpus_health()` returned fixed `avg_isotropy`/`avg_coverage`/`avg_distinctiveness`/`drift`/`trend` values regardless of the actual corpus. It now samples real corpus embeddings and computes real quality metrics; `drift`/`trend` honestly report as not-measured (this class doesn't persist historical snapshots) instead of a fabricated `"stable"`.
129
+ - `QualityScorer.trend_analysis()` returned a fixed `"stable"` direction and `0.02` magnitude for any date range, without looking at any data. It now honestly reports that no historical tracking is wired up, and points callers at `TrendAnalyzer` (which does real time-series tracking) instead.
130
+ - `__version__` in `pyvectorhound/__init__.py` was hardcoded to `"1.2.1"` and had drifted from the actual package version; now reads it from installed package metadata.
131
+
132
+ ### Added
133
+ - Real test coverage in `tests/test_diagnosis.py` and new `tests/test_scorer.py` asserting the above methods respond to real input data instead of returning fixed constants.
134
+
135
+ ### Fixed
136
+ - `MilvusAdapter.get_embeddings()` was a stub that unconditionally returned an empty dict, discarding the requested document IDs instead of querying Milvus. It now retrieves the real stored vectors via `MilvusClient.get()`, with configurable `vector_field`/`id_field` names to match the caller's collection schema.
137
+ - `MilvusAdapter.search()` used a hardcoded `"id"` output field instead of the configurable `id_field`.
138
+ - `pyproject.toml` was still at 1.2.1 while `Cargo.toml` had already moved to 1.3.0 in a prior commit; synced both.
139
+
140
+ ### Added
141
+ - Real test coverage for `pyvectorhound/database.py`'s adapters (`MilvusAdapter`, `QdrantAdapter`, `ChromaAdapter`), which previously had zero tests — only the separate mock-based `db_adapters.py` interface was tested.
142
+ - Replaced two stub tests in `tests/test_hound.py` (`test_unsupported_db`, `test_diagnose`) that were empty `pass` statements with `# TODO` comments — they now actually exercise `Hound`'s real error path and its real adapter-search-to-Diagnosis flow.
143
+
144
+ ## [0.1.1] - 2025-01-20
145
+
146
+ ### Added
147
+ - Component-level diagnostics for retrieval pipelines
148
+ - Root cause analysis for embedding failures
149
+ - Recommendations engine with ROI estimates
150
+ - Support for Elasticsearch, Weaviate, and Pinecone
151
+ - BM25 keyword search diagnostics
152
+ - Reranker performance analysis
153
+
154
+ ### Fixed
155
+ - Memory efficiency improvements in large batch processing
156
+ - Vector similarity computation accuracy
157
+
158
+ ## [0.1.0] - 2024-12-15
159
+
160
+ ### Added
161
+ - Initial release
162
+ - Core retrieval diagnostics engine
163
+ - Embedding quality assessment
164
+ - Vector search performance profiling
165
+ - MIT license
166
+
167
+ ### Known Issues
168
+ - Streaming RAG pipelines not yet supported
169
+ - LLamaIndex integration in progress
170
+
171
+ ## [Unreleased]
172
+
173
+ ### Planned
174
+ - Streaming RAG support
175
+ - LLamaIndex integration
176
+ - Custom metric definitions
177
+ - Dashboard UI
178
+ - API server mode
179
+
180
+ For details, see [ROADMAP.md](../ROADMAP.md).
@@ -1,6 +1,6 @@
1
1
  # This file is automatically @generated by Cargo.
2
2
  # It is not intended for manual editing.
3
- version = 3
3
+ version = 4
4
4
 
5
5
  [[package]]
6
6
  name = "autocfg"
@@ -218,7 +218,7 @@ dependencies = [
218
218
 
219
219
  [[package]]
220
220
  name = "pyvectorhound"
221
- version = "1.0.0"
221
+ version = "1.4.0"
222
222
  dependencies = [
223
223
  "numpy",
224
224
  "pyo3",
@@ -1,9 +1,9 @@
1
1
  [package]
2
2
  name = "pyvectorhound"
3
- version = "1.0.0"
3
+ version = "1.4.0"
4
4
  edition = "2021"
5
5
  authors = ["Georgi Mammen Mullassery <mullassery@gmail.com>"]
6
- license = "MIT"
6
+ license = "Proprietary"
7
7
  description = "Vector search diagnostics engine for RAG/LLM systems"
8
8
  readme = "README.md"
9
9
 
@@ -0,0 +1,161 @@
1
+ # 🎯 Dashboard Keyboard Shortcuts & Usage
2
+
3
+ ## Auto-Start on Installation
4
+
5
+ The CLI dashboard **starts automatically** when you run the package for the first time or import it in Python:
6
+
7
+ ```bash
8
+ $ pip install [package]
9
+ # ✓ Dashboard appears in terminal automatically
10
+
11
+ $ python3 -c "from [package] import *"
12
+ # ✓ Dashboard initializes in background
13
+ ```
14
+
15
+ The dashboard runs in **persistent daemon mode** — if you close it, it restarts automatically with your keyboard shortcuts.
16
+
17
+ ---
18
+
19
+ ## ⌨️ Keyboard Shortcuts
20
+
21
+ After installing the package, run:
22
+
23
+ ```bash
24
+ bash <(curl -s https://raw.githubusercontent.com/Mullassery/[PACKAGE]/main/scripts/setup_shortcuts.sh)
25
+ ```
26
+
27
+ This adds aliases to your `~/.zshrc` or `~/.bashrc`:
28
+
29
+ ### Quick Access (all packages)
30
+
31
+ ```bash
32
+ dashboards # Show all available dashboard shortcuts
33
+ ```
34
+
35
+ ### Per-Package Shortcuts
36
+
37
+ Replace `[PACKAGE]` with any installed Mullassery package name:
38
+
39
+ ```bash
40
+ dash-[PACKAGE] # Static snapshot (single view)
41
+ dash-[PACKAGE]-live # Live dashboard (Ctrl+C to close)
42
+ dash-[PACKAGE]-export # Export metrics to JSON
43
+ ```
44
+
45
+ ### Examples
46
+
47
+ ```bash
48
+ # PyStreamAI
49
+ $ dash-pystreamai # View deployment metrics snapshot
50
+ $ dash-pystreamai-live # Watch real-time inference latency
51
+ $ dash-pystreamai-export # Save metrics for monitoring
52
+
53
+ # PyRoboReplay
54
+ $ dash-pyroboreplay # View RGB+Thermal fusion status
55
+ $ dash-pyroboreplay-live # Monitor decision reconstruction in real-time
56
+ $ dash-pyroboreplay-export # Export to Prometheus/Datadog
57
+
58
+ # PyTerrainMap
59
+ $ dash-pyterrainmap # View spatial layer metrics
60
+ $ dash-pyterrainmap-live # Watch fleet learning converge
61
+ $ dash-pyterrainmap-export # Save to /tmp/pyterrainmap_metrics.json
62
+ ```
63
+
64
+ ---
65
+
66
+ ## 🔄 Dashboard Modes
67
+
68
+ ### Static Snapshot (`--static`)
69
+ ```bash
70
+ $ dash-pystreamai # Single view, exits immediately
71
+ # Useful for: CI/CD logs, monitoring integration, one-time checks
72
+ ```
73
+
74
+ ### Live View (`--live`)
75
+ ```bash
76
+ $ dash-pystreamai-live # Continuous updates until Ctrl+C
77
+ # Useful for: real-time monitoring, troubleshooting, development
78
+ ```
79
+
80
+ ### JSON Export (`--export`)
81
+ ```bash
82
+ $ dash-pystreamai-export # Saves to /tmp/pystreamai_metrics.json
83
+ # Useful for: integration with Prometheus, Datadog, custom dashboards
84
+ ```
85
+
86
+ ---
87
+
88
+ ## 🛑 Remove Keyboard Shortcuts
89
+
90
+ To uninstall all dashboard aliases:
91
+
92
+ ```bash
93
+ bash <(curl -s https://raw.githubusercontent.com/Mullassery/[PACKAGE]/main/scripts/setup_shortcuts.sh) --remove
94
+ ```
95
+
96
+ This removes all `dash-*` aliases from your shell config.
97
+
98
+ ---
99
+
100
+ ## 📊 Monitoring Integration
101
+
102
+ Export metrics for external monitoring systems:
103
+
104
+ ```bash
105
+ # Prometheus
106
+ $ dash-pystreamai-export > prometheus_metrics.txt
107
+
108
+ # Datadog (with custom agent)
109
+ $ dash-pystreamai-live | \
110
+ grep -o 'Status.*' | \
111
+ datadog-agent custom-metric
112
+
113
+ # JSON for custom dashboards
114
+ $ dash-pystreamai-export | jq '.metrics'
115
+ ```
116
+
117
+ ---
118
+
119
+ ## ❓ Troubleshooting
120
+
121
+ **Shortcuts not working?**
122
+ ```bash
123
+ # Reload shell config
124
+ $ source ~/.zshrc # macOS/Linux (zsh)
125
+ $ source ~/.bashrc # Linux (bash)
126
+
127
+ # Or restart your terminal
128
+ ```
129
+
130
+ **Dashboard won't start?**
131
+ ```bash
132
+ # Ensure package is installed
133
+ $ pip list | grep pystreamai
134
+
135
+ # Start manually
136
+ $ pystreamai dashboard --static
137
+ ```
138
+
139
+ **Dashboard keeps closing?**
140
+ ```bash
141
+ # Use live mode (restarts automatically)
142
+ $ dash-pystreamai-live
143
+ ```
144
+
145
+ ---
146
+
147
+ ## 📖 Package-Specific Shortcuts
148
+
149
+ The following Mullassery packages support dashboard shortcuts:
150
+
151
+ - ✅ PyStreamAI (deployment metrics)
152
+ - ✅ PyStreamMCP (tool orchestration)
153
+ - ✅ PyStreamPDF (document processing)
154
+ - ✅ PyStreamXL (formula extraction)
155
+ - ✅ StatGuardian (data quality)
156
+ - ✅ PyReverseETL (activation pipelines)
157
+ - ✅ PyTerrainMap (spatial analysis)
158
+ - ✅ PyRoboReplay (multi-modal fusion)
159
+ - ✅ PyRoboSimulator (world engine)
160
+
161
+ Run `dashboards` to see all available shortcuts.