compass-kb-validation 2.6.0__tar.gz → 2.7.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.
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/PKG-INFO +9 -3
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/README.md +8 -2
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/compass_kb_validation.egg-info/PKG-INFO +9 -3
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/compass_kb_validation.egg-info/SOURCES.txt +3 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/discover_and_validate.py +12 -8
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/__init__.py +1 -1
- compass_kb_validation-2.7.0/ingestion_validation/citation.py +696 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/cli.py +137 -27
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/config/__init__.py +71 -14
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/grounding.py +129 -27
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/live_dashboard.py +1 -1
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/mcp_server.py +2 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/notifications.py +3 -1
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/profiler.py +7 -3
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/providers/vectorstore.py +4 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/remediation.py +11 -6
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/report/__init__.py +11 -2
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/report/analysis.py +19 -7
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/validators/api_upload.py +1 -1
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/validators/base_sparql.py +14 -4
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/validators/redis_chunks.py +6 -1
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/validators/registry.py +1 -1
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/validators/retrieval_quality.py +21 -7
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/validators/s3_storage.py +11 -1
- compass_kb_validation-2.7.0/tests/test_citation.py +406 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_grounding.py +15 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_neptune_bugfixes2.py +13 -1
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_profiler.py +2 -2
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_reporting.py +26 -2
- compass_kb_validation-2.7.0/tests/test_review_hardening.py +113 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/LICENSE +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/compass_kb_validation.egg-info/dependency_links.txt +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/compass_kb_validation.egg-info/entry_points.txt +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/compass_kb_validation.egg-info/requires.txt +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/compass_kb_validation.egg-info/top_level.txt +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/__main__.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/ask.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/baseline.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/chunk_coherence.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/config_lint.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/content_inspect.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/corpus.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/corpus_health.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/diagnostics.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/embedding_drift.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/eval_interop.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/init_wizard.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/models/__init__.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/pipeline/__init__.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/provenance.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/providers/__init__.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/providers/embedding.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/providers/graph.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/providers/source.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/providers/storage.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/report/_report_css.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/report/_report_js.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/report/export.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/report/shell.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/retrieval_analysis.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/trend_tracker.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/utils/__init__.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/validators/__init__.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/validators/base.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/validators/cross_stage.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/validators/graphdb_metadata.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/ingestion_validation/validators/neptune_metadata.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/profile_kb.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/pyproject.toml +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/run_validation.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/setup.cfg +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_alt_adapters.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_analysis_report.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_api_upload.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_ask.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_baseline.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_benchmark.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_check_catalog.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_cli.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_config.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_config_lint.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_content_inspect.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_corpus.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_corpus_health.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_coverage.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_cross_stage.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_diagnostics.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_discover_cli.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_discovery_parallel.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_embedding_drift.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_eval_interop.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_gate.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_graph_transport.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_graph_validators.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_init_wizard.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_manifest.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_mcp.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_migration.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_models.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_neptune_bugfixes.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_notifications.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_pipeline.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_providers.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_redis_chunks.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_registry.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_remediation.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_retrieval_assertions.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_retrieval_quality.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_run_cli.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_sources.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_storage_validator.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_trends.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_universal_concerns.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_utils.py +0 -0
- {compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/tests/test_vectorstore_filters.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: compass-kb-validation
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.7.0
|
|
4
4
|
Summary: Knowledge-base readiness validation for RAG & AI agents — config-driven, deterministic pipeline integrity checks.
|
|
5
5
|
Author: COMPASS
|
|
6
6
|
License: MIT
|
|
@@ -229,8 +229,14 @@ compass ask --project my-kb --batch questions.jsonl --format eval --output eval_
|
|
|
229
229
|
compass quality --project my-kb
|
|
230
230
|
compass freshness --project my-kb --stale-after 30
|
|
231
231
|
|
|
232
|
-
#
|
|
233
|
-
#
|
|
232
|
+
# Validate an EXTERNAL eval's output against the KB COMPASS already has access to. Not an eval,
|
|
233
|
+
# not a tracer: the eval (an LLM judge, or the bot's captured trace) claims "grounded",
|
|
234
|
+
# "cited MIS p.1", "28%" - COMPASS deterministically checks those claims against ground truth
|
|
235
|
+
# in the KB and attributes any failure to a layer (retrieval vs the model), never scoring answer
|
|
236
|
+
# quality. Verifies each CITED claim at its cited location: a fabricated number, a wrong page, a
|
|
237
|
+
# fact present in the KB but not retrieved, or a source not in the KB. Uses the eval's retrieved
|
|
238
|
+
# chunks when present (Level 1) and the live KB (Level 2); the answer text + a reachable KB alone
|
|
239
|
+
# still catches fabricated figures and phantom citations.
|
|
234
240
|
compass grounding-audit --project my-kb --eval-result case.json --fail-on-fabrication
|
|
235
241
|
```
|
|
236
242
|
|
|
@@ -162,8 +162,14 @@ compass ask --project my-kb --batch questions.jsonl --format eval --output eval_
|
|
|
162
162
|
compass quality --project my-kb
|
|
163
163
|
compass freshness --project my-kb --stale-after 30
|
|
164
164
|
|
|
165
|
-
#
|
|
166
|
-
#
|
|
165
|
+
# Validate an EXTERNAL eval's output against the KB COMPASS already has access to. Not an eval,
|
|
166
|
+
# not a tracer: the eval (an LLM judge, or the bot's captured trace) claims "grounded",
|
|
167
|
+
# "cited MIS p.1", "28%" - COMPASS deterministically checks those claims against ground truth
|
|
168
|
+
# in the KB and attributes any failure to a layer (retrieval vs the model), never scoring answer
|
|
169
|
+
# quality. Verifies each CITED claim at its cited location: a fabricated number, a wrong page, a
|
|
170
|
+
# fact present in the KB but not retrieved, or a source not in the KB. Uses the eval's retrieved
|
|
171
|
+
# chunks when present (Level 1) and the live KB (Level 2); the answer text + a reachable KB alone
|
|
172
|
+
# still catches fabricated figures and phantom citations.
|
|
167
173
|
compass grounding-audit --project my-kb --eval-result case.json --fail-on-fabrication
|
|
168
174
|
```
|
|
169
175
|
|
{compass_kb_validation-2.6.0 → compass_kb_validation-2.7.0}/compass_kb_validation.egg-info/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: compass-kb-validation
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.7.0
|
|
4
4
|
Summary: Knowledge-base readiness validation for RAG & AI agents — config-driven, deterministic pipeline integrity checks.
|
|
5
5
|
Author: COMPASS
|
|
6
6
|
License: MIT
|
|
@@ -229,8 +229,14 @@ compass ask --project my-kb --batch questions.jsonl --format eval --output eval_
|
|
|
229
229
|
compass quality --project my-kb
|
|
230
230
|
compass freshness --project my-kb --stale-after 30
|
|
231
231
|
|
|
232
|
-
#
|
|
233
|
-
#
|
|
232
|
+
# Validate an EXTERNAL eval's output against the KB COMPASS already has access to. Not an eval,
|
|
233
|
+
# not a tracer: the eval (an LLM judge, or the bot's captured trace) claims "grounded",
|
|
234
|
+
# "cited MIS p.1", "28%" - COMPASS deterministically checks those claims against ground truth
|
|
235
|
+
# in the KB and attributes any failure to a layer (retrieval vs the model), never scoring answer
|
|
236
|
+
# quality. Verifies each CITED claim at its cited location: a fabricated number, a wrong page, a
|
|
237
|
+
# fact present in the KB but not retrieved, or a source not in the KB. Uses the eval's retrieved
|
|
238
|
+
# chunks when present (Level 1) and the live KB (Level 2); the answer text + a reachable KB alone
|
|
239
|
+
# still catches fabricated figures and phantom citations.
|
|
234
240
|
compass grounding-audit --project my-kb --eval-result case.json --fail-on-fabrication
|
|
235
241
|
```
|
|
236
242
|
|
|
@@ -15,6 +15,7 @@ ingestion_validation/__main__.py
|
|
|
15
15
|
ingestion_validation/ask.py
|
|
16
16
|
ingestion_validation/baseline.py
|
|
17
17
|
ingestion_validation/chunk_coherence.py
|
|
18
|
+
ingestion_validation/citation.py
|
|
18
19
|
ingestion_validation/cli.py
|
|
19
20
|
ingestion_validation/config_lint.py
|
|
20
21
|
ingestion_validation/content_inspect.py
|
|
@@ -67,6 +68,7 @@ tests/test_ask.py
|
|
|
67
68
|
tests/test_baseline.py
|
|
68
69
|
tests/test_benchmark.py
|
|
69
70
|
tests/test_check_catalog.py
|
|
71
|
+
tests/test_citation.py
|
|
70
72
|
tests/test_cli.py
|
|
71
73
|
tests/test_config.py
|
|
72
74
|
tests/test_config_lint.py
|
|
@@ -101,6 +103,7 @@ tests/test_remediation.py
|
|
|
101
103
|
tests/test_reporting.py
|
|
102
104
|
tests/test_retrieval_assertions.py
|
|
103
105
|
tests/test_retrieval_quality.py
|
|
106
|
+
tests/test_review_hardening.py
|
|
104
107
|
tests/test_run_cli.py
|
|
105
108
|
tests/test_sources.py
|
|
106
109
|
tests/test_storage_validator.py
|
|
@@ -138,14 +138,14 @@ def _resolve_skip_steps(settings, *, include_graphdb: bool, include_retrieval: b
|
|
|
138
138
|
(BUG-22). ``--keep s3_storage`` overrides the auto-skip.
|
|
139
139
|
"""
|
|
140
140
|
skip = ["API Upload"]
|
|
141
|
-
# Graph validation runs by default when
|
|
142
|
-
# sparql_query
|
|
143
|
-
#
|
|
144
|
-
#
|
|
141
|
+
# Graph validation runs by default when THIS PROJECT declares a per-document graph
|
|
142
|
+
# query (sparql_query) - the signal that graph validation is actually intended. It must
|
|
143
|
+
# NOT key off `neptune.endpoint`, which resolves from a shared NEPTUNE_ENDPOINT env var:
|
|
144
|
+
# doing so turned graph on for every project whenever that env var was set, so a project
|
|
145
|
+
# with no graph block inherited another project's Neptune and failed all 19 graph checks
|
|
146
|
+
# (regression). Opt out with --skip neptune_metadata; --include-graphdb still forces on.
|
|
145
147
|
nep, gdb = settings.neptune, settings.graphdb
|
|
146
|
-
graph_configured = bool(
|
|
147
|
-
getattr(nep, "sparql_query", "") or getattr(nep, "endpoint", "")
|
|
148
|
-
or getattr(gdb, "sparql_query", "") or getattr(gdb, "base_url", ""))
|
|
148
|
+
graph_configured = bool(getattr(nep, "sparql_query", "") or getattr(gdb, "sparql_query", ""))
|
|
149
149
|
if not (include_graphdb or graph_configured):
|
|
150
150
|
skip += ["GraphDB Metadata", "Neptune Metadata"]
|
|
151
151
|
if not include_retrieval:
|
|
@@ -479,7 +479,11 @@ def main(argv=None) -> int:
|
|
|
479
479
|
print(f" Run ID: {run_id}")
|
|
480
480
|
print("=" * 60)
|
|
481
481
|
|
|
482
|
-
|
|
482
|
+
try:
|
|
483
|
+
documents = discover_documents(settings, folder_filter=args.folder, limit=args.limit)
|
|
484
|
+
except Exception as exc: # noqa: BLE001 - an unreachable/misconfigured source must not traceback
|
|
485
|
+
print(f"\n Could not discover documents (is the storage/index reachable and configured?): {exc}")
|
|
486
|
+
return EXIT_CONFIG
|
|
483
487
|
print(f"\n Found {len(documents)} document(s)\n")
|
|
484
488
|
# Corpus-level minimum-document gate (s3.min_documents). A no-arg --limit run that
|
|
485
489
|
# finds fewer than expected is a real problem worth failing on.
|