verilore 0.11.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.
- verilore-0.11.0/LICENSE +51 -0
- verilore-0.11.0/NOTICE +4 -0
- verilore-0.11.0/PKG-INFO +118 -0
- verilore-0.11.0/README.md +351 -0
- verilore-0.11.0/docs/pypi.md +55 -0
- verilore-0.11.0/pyproject.toml +199 -0
- verilore-0.11.0/setup.cfg +4 -0
- verilore-0.11.0/tests/test_adjudication_program_runner.py +107 -0
- verilore-0.11.0/tests/test_adr_supersession_declarations.py +529 -0
- verilore-0.11.0/tests/test_adversarial_supersession.py +44 -0
- verilore-0.11.0/tests/test_agency_readiness.py +28 -0
- verilore-0.11.0/tests/test_api.py +265 -0
- verilore-0.11.0/tests/test_api_contract.py +308 -0
- verilore-0.11.0/tests/test_benchmark_ground_truth.py +92 -0
- verilore-0.11.0/tests/test_check_versioning_migration_head.py +164 -0
- verilore-0.11.0/tests/test_chunk_boundaries.py +57 -0
- verilore-0.11.0/tests/test_chunker.py +45 -0
- verilore-0.11.0/tests/test_chunking_guarantees.py +121 -0
- verilore-0.11.0/tests/test_ci_model_provisioning.py +213 -0
- verilore-0.11.0/tests/test_claim_embedding_cache.py +381 -0
- verilore-0.11.0/tests/test_claim_rejection_message.py +134 -0
- verilore-0.11.0/tests/test_claim_state.py +257 -0
- verilore-0.11.0/tests/test_claims_block_state.py +142 -0
- verilore-0.11.0/tests/test_cli_corpus_reset_and_prune.py +253 -0
- verilore-0.11.0/tests/test_cli_errors_format.py +340 -0
- verilore-0.11.0/tests/test_cli_json_contract.py +212 -0
- verilore-0.11.0/tests/test_cli_memory_in_process.py +155 -0
- verilore-0.11.0/tests/test_confidence.py +84 -0
- verilore-0.11.0/tests/test_conflict_hint_coverage.py +277 -0
- verilore-0.11.0/tests/test_context_budget.py +104 -0
- verilore-0.11.0/tests/test_context_product.py +344 -0
- verilore-0.11.0/tests/test_corpus_create_403.py +122 -0
- verilore-0.11.0/tests/test_corpus_isolation.py +345 -0
- verilore-0.11.0/tests/test_corpus_scope.py +367 -0
- verilore-0.11.0/tests/test_credential_management.py +1551 -0
- verilore-0.11.0/tests/test_cross_document_supersession.py +324 -0
- verilore-0.11.0/tests/test_decision_provider_contract.py +57 -0
- verilore-0.11.0/tests/test_default_corpus_is_writable.py +193 -0
- verilore-0.11.0/tests/test_deployment_profiles_and_lifecycle.py +1524 -0
- verilore-0.11.0/tests/test_embedder.py +137 -0
- verilore-0.11.0/tests/test_embedder_backend_equivalence.py +200 -0
- verilore-0.11.0/tests/test_enforcement_e2e.py +1289 -0
- verilore-0.11.0/tests/test_error_and_log_hygiene.py +272 -0
- verilore-0.11.0/tests/test_error_taxonomy.py +191 -0
- verilore-0.11.0/tests/test_eval_reproducibility.py +24 -0
- verilore-0.11.0/tests/test_evaluation.py +159 -0
- verilore-0.11.0/tests/test_evidence_gate_tied_to_head.py +141 -0
- verilore-0.11.0/tests/test_feed_adapters.py +269 -0
- verilore-0.11.0/tests/test_feed_cursor.py +23 -0
- verilore-0.11.0/tests/test_feed_integration.py +340 -0
- verilore-0.11.0/tests/test_file_path_inputs_resolve_through_roots.py +148 -0
- verilore-0.11.0/tests/test_five_minute_path.py +1359 -0
- verilore-0.11.0/tests/test_flight_recorder_accuracy.py +313 -0
- verilore-0.11.0/tests/test_fresh_corpus_and_lexical_ingest.py +139 -0
- verilore-0.11.0/tests/test_grounding.py +282 -0
- verilore-0.11.0/tests/test_health_endpoints.py +137 -0
- verilore-0.11.0/tests/test_history_lineage.py +65 -0
- verilore-0.11.0/tests/test_history_lineage_and_ingest_speed.py +543 -0
- verilore-0.11.0/tests/test_hnsw_small_corpus_recall.py +253 -0
- verilore-0.11.0/tests/test_ingest_repo_in_process.py +113 -0
- verilore-0.11.0/tests/test_ingestion_and_ranking_regressions.py +599 -0
- verilore-0.11.0/tests/test_ingestion_lifecycle.py +398 -0
- verilore-0.11.0/tests/test_ingestion_reports_what_it_stored.py +198 -0
- verilore-0.11.0/tests/test_ingestion_statistics.py +624 -0
- verilore-0.11.0/tests/test_integration_adapter.py +122 -0
- verilore-0.11.0/tests/test_integration_brand_kit_scenario.py +360 -0
- verilore-0.11.0/tests/test_integration_guide_examples.py +99 -0
- verilore-0.11.0/tests/test_laptop_setup.py +287 -0
- verilore-0.11.0/tests/test_lazy_chunk_embeddings.py +283 -0
- verilore-0.11.0/tests/test_lexical_mode.py +432 -0
- verilore-0.11.0/tests/test_linux_wsl_guided_remediation.py +152 -0
- verilore-0.11.0/tests/test_local_postgres_secrets.py +93 -0
- verilore-0.11.0/tests/test_local_postgres_ux.py +639 -0
- verilore-0.11.0/tests/test_markdown_claim_extraction.py +245 -0
- verilore-0.11.0/tests/test_marketing_reference_integration.py +611 -0
- verilore-0.11.0/tests/test_mcp_client_docs.py +124 -0
- verilore-0.11.0/tests/test_mcp_revalidate_and_verified_writes.py +140 -0
- verilore-0.11.0/tests/test_mcp_server.py +133 -0
- verilore-0.11.0/tests/test_memory_adjudication.py +88 -0
- verilore-0.11.0/tests/test_memory_benchmark.py +664 -0
- verilore-0.11.0/tests/test_memory_benchmark_interfaces.py +362 -0
- verilore-0.11.0/tests/test_memory_benchmark_labels.py +467 -0
- verilore-0.11.0/tests/test_memory_client.py +666 -0
- verilore-0.11.0/tests/test_memory_core.py +664 -0
- verilore-0.11.0/tests/test_memory_decision_benchmark.py +33 -0
- verilore-0.11.0/tests/test_memory_decision_dataset.py +38 -0
- verilore-0.11.0/tests/test_memory_decision_jev.py +107 -0
- verilore-0.11.0/tests/test_memory_evaluation_lab.py +15 -0
- verilore-0.11.0/tests/test_memory_heldout_labels.py +307 -0
- verilore-0.11.0/tests/test_memory_http.py +289 -0
- verilore-0.11.0/tests/test_memory_ingestion.py +341 -0
- verilore-0.11.0/tests/test_memory_load_equivalence.py +187 -0
- verilore-0.11.0/tests/test_memory_mcp.py +205 -0
- verilore-0.11.0/tests/test_memory_multiple_evidence.py +436 -0
- verilore-0.11.0/tests/test_memory_pack.py +482 -0
- verilore-0.11.0/tests/test_memory_pack_performance.py +266 -0
- verilore-0.11.0/tests/test_memory_proof.py +282 -0
- verilore-0.11.0/tests/test_memory_public.py +862 -0
- verilore-0.11.0/tests/test_memory_query.py +739 -0
- verilore-0.11.0/tests/test_memory_query_adapters.py +264 -0
- verilore-0.11.0/tests/test_memory_query_interfaces.py +162 -0
- verilore-0.11.0/tests/test_memory_question_labels.py +230 -0
- verilore-0.11.0/tests/test_memory_reasoning.py +161 -0
- verilore-0.11.0/tests/test_memory_receipt.py +342 -0
- verilore-0.11.0/tests/test_memory_remember_mcp.py +342 -0
- verilore-0.11.0/tests/test_memory_roles.py +63 -0
- verilore-0.11.0/tests/test_memory_snapshot_seal.py +181 -0
- verilore-0.11.0/tests/test_memory_stdio.py +55 -0
- verilore-0.11.0/tests/test_migration_contract.py +121 -0
- verilore-0.11.0/tests/test_model_free_package.py +214 -0
- verilore-0.11.0/tests/test_operator_cli.py +236 -0
- verilore-0.11.0/tests/test_package_imports.py +53 -0
- verilore-0.11.0/tests/test_paragraph_dilution_and_coverage.py +261 -0
- verilore-0.11.0/tests/test_parser.py +36 -0
- verilore-0.11.0/tests/test_path_prefix.py +456 -0
- verilore-0.11.0/tests/test_platform_guided_remediation.py +178 -0
- verilore-0.11.0/tests/test_proof_cli.py +609 -0
- verilore-0.11.0/tests/test_prose_extraction_honesty.py +198 -0
- verilore-0.11.0/tests/test_prose_extraction_parity.py +42 -0
- verilore-0.11.0/tests/test_provider_conformance.py +329 -0
- verilore-0.11.0/tests/test_publish_workflow.py +120 -0
- verilore-0.11.0/tests/test_quality_gate.py +106 -0
- verilore-0.11.0/tests/test_query_log.py +197 -0
- verilore-0.11.0/tests/test_query_withholds.py +150 -0
- verilore-0.11.0/tests/test_ranking_authority_tiebreak.py +181 -0
- verilore-0.11.0/tests/test_receipt_surfaces.py +184 -0
- verilore-0.11.0/tests/test_release_packaging.py +343 -0
- verilore-0.11.0/tests/test_remember_decisions.py +598 -0
- verilore-0.11.0/tests/test_remember_file_respects_ingest_roots.py +106 -0
- verilore-0.11.0/tests/test_repository_docs_ingest_cleanly.py +189 -0
- verilore-0.11.0/tests/test_reranker.py +87 -0
- verilore-0.11.0/tests/test_retrieval_match_status.py +190 -0
- verilore-0.11.0/tests/test_revalidate.py +293 -0
- verilore-0.11.0/tests/test_runtime_equivalence.py +648 -0
- verilore-0.11.0/tests/test_runtime_lifecycle.py +597 -0
- verilore-0.11.0/tests/test_scope_forgery.py +481 -0
- verilore-0.11.0/tests/test_scope_token_loud_mismatch.py +435 -0
- verilore-0.11.0/tests/test_score_cap_and_compound_ambiguity.py +131 -0
- verilore-0.11.0/tests/test_sdk.py +160 -0
- verilore-0.11.0/tests/test_sdk_error_envelope.py +63 -0
- verilore-0.11.0/tests/test_sdk_retry.py +256 -0
- verilore-0.11.0/tests/test_search_semantics.py +353 -0
- verilore-0.11.0/tests/test_security.py +178 -0
- verilore-0.11.0/tests/test_serve_cli.py +156 -0
- verilore-0.11.0/tests/test_shared_core_enforces_adapter_policies.py +120 -0
- verilore-0.11.0/tests/test_similarity.py +143 -0
- verilore-0.11.0/tests/test_skip_gate_and_runner_evidence.py +484 -0
- verilore-0.11.0/tests/test_source_formats.py +85 -0
- verilore-0.11.0/tests/test_stable_claim_keys.py +243 -0
- verilore-0.11.0/tests/test_stale_fact_benchmark.py +41 -0
- verilore-0.11.0/tests/test_supersession_ordering.py +138 -0
- verilore-0.11.0/tests/test_supersession_table_and_history_regressions.py +339 -0
- verilore-0.11.0/tests/test_surface_equivalence.py +243 -0
- verilore-0.11.0/tests/test_sync_connection_reuse.py +269 -0
- verilore-0.11.0/tests/test_table_row_ranking.py +217 -0
- verilore-0.11.0/tests/test_tenant_connection_isolation.py +270 -0
- verilore-0.11.0/tests/test_tenant_control_effectiveness.py +452 -0
- verilore-0.11.0/tests/test_tenant_isolation.py +826 -0
- verilore-0.11.0/tests/test_unparseable_frontmatter_reported.py +149 -0
- verilore-0.11.0/tests/test_unsearchable_documents.py +189 -0
- verilore-0.11.0/tests/test_verifiable_memory_release.py +204 -0
- verilore-0.11.0/tests/test_wheel_contents.py +167 -0
- verilore-0.11.0/tests/test_withholding.py +344 -0
- verilore-0.11.0/verilore/__init__.py +93 -0
- verilore-0.11.0/verilore/api/__init__.py +0 -0
- verilore-0.11.0/verilore/api/dependencies.py +33 -0
- verilore-0.11.0/verilore/api/errors.py +52 -0
- verilore-0.11.0/verilore/api/main.py +627 -0
- verilore-0.11.0/verilore/api/models/memory.py +320 -0
- verilore-0.11.0/verilore/api/models/remember.py +173 -0
- verilore-0.11.0/verilore/api/models/schemas.py +491 -0
- verilore-0.11.0/verilore/api/routers/__init__.py +0 -0
- verilore-0.11.0/verilore/api/routers/context.py +129 -0
- verilore-0.11.0/verilore/api/routers/corpora.py +156 -0
- verilore-0.11.0/verilore/api/routers/ingest.py +85 -0
- verilore-0.11.0/verilore/api/routers/memory.py +352 -0
- verilore-0.11.0/verilore/api/routers/query.py +449 -0
- verilore-0.11.0/verilore/api/routers/search.py +102 -0
- verilore-0.11.0/verilore/api/runtime.py +801 -0
- verilore-0.11.0/verilore/api/services/__init__.py +24 -0
- verilore-0.11.0/verilore/api/services/authz.py +707 -0
- verilore-0.11.0/verilore/api/services/benchmark.py +304 -0
- verilore-0.11.0/verilore/api/services/chunker.py +69 -0
- verilore-0.11.0/verilore/api/services/claim_embeddings.py +315 -0
- verilore-0.11.0/verilore/api/services/confidence.py +143 -0
- verilore-0.11.0/verilore/api/services/context_packer.py +640 -0
- verilore-0.11.0/verilore/api/services/context_service.py +184 -0
- verilore-0.11.0/verilore/api/services/corpora.py +347 -0
- verilore-0.11.0/verilore/api/services/db.py +258 -0
- verilore-0.11.0/verilore/api/services/embedder.py +512 -0
- verilore-0.11.0/verilore/api/services/evaluation.py +122 -0
- verilore-0.11.0/verilore/api/services/ingest_paths.py +114 -0
- verilore-0.11.0/verilore/api/services/ingestion.py +1158 -0
- verilore-0.11.0/verilore/api/services/llm.py +161 -0
- verilore-0.11.0/verilore/api/services/llm_service.py +30 -0
- verilore-0.11.0/verilore/api/services/markdown_claims.py +1264 -0
- verilore-0.11.0/verilore/api/services/memory.py +1726 -0
- verilore-0.11.0/verilore/api/services/memory_adjudication.py +214 -0
- verilore-0.11.0/verilore/api/services/memory_benchmark.py +1531 -0
- verilore-0.11.0/verilore/api/services/memory_decision_benchmark.py +131 -0
- verilore-0.11.0/verilore/api/services/memory_decision_dataset.py +152 -0
- verilore-0.11.0/verilore/api/services/memory_decision_spike.py +276 -0
- verilore-0.11.0/verilore/api/services/memory_evaluation_lab.py +172 -0
- verilore-0.11.0/verilore/api/services/memory_feed.py +212 -0
- verilore-0.11.0/verilore/api/services/memory_public.py +752 -0
- verilore-0.11.0/verilore/api/services/memory_query.py +791 -0
- verilore-0.11.0/verilore/api/services/memory_query_benchmark.py +1275 -0
- verilore-0.11.0/verilore/api/services/memory_reasoning.py +338 -0
- verilore-0.11.0/verilore/api/services/memory_relevance.py +893 -0
- verilore-0.11.0/verilore/api/services/observability.py +72 -0
- verilore-0.11.0/verilore/api/services/parser.py +624 -0
- verilore-0.11.0/verilore/api/services/posture.py +384 -0
- verilore-0.11.0/verilore/api/services/quality_gate.py +136 -0
- verilore-0.11.0/verilore/api/services/query_log.py +281 -0
- verilore-0.11.0/verilore/api/services/rehydrate.py +237 -0
- verilore-0.11.0/verilore/api/services/related.py +22 -0
- verilore-0.11.0/verilore/api/services/remember.py +714 -0
- verilore-0.11.0/verilore/api/services/repository.py +496 -0
- verilore-0.11.0/verilore/api/services/reranker.py +69 -0
- verilore-0.11.0/verilore/api/services/resources.py +128 -0
- verilore-0.11.0/verilore/api/services/retrieval.py +394 -0
- verilore-0.11.0/verilore/api/services/retrieval_mode.py +49 -0
- verilore-0.11.0/verilore/api/services/revalidate.py +612 -0
- verilore-0.11.0/verilore/api/services/similarity.py +121 -0
- verilore-0.11.0/verilore/api/services/source_formats.py +349 -0
- verilore-0.11.0/verilore/api/services/telemetry.py +132 -0
- verilore-0.11.0/verilore/api/services/timeline.py +36 -0
- verilore-0.11.0/verilore/cli/__init__.py +0 -0
- verilore-0.11.0/verilore/cli/config.py +149 -0
- verilore-0.11.0/verilore/cli/doctor.py +423 -0
- verilore-0.11.0/verilore/cli/errors.py +408 -0
- verilore-0.11.0/verilore/cli/main.py +2882 -0
- verilore-0.11.0/verilore/cli/memory.py +287 -0
- verilore-0.11.0/verilore/cli/postgres.py +922 -0
- verilore-0.11.0/verilore/cli/render.py +446 -0
- verilore-0.11.0/verilore/cli/runtime.py +136 -0
- verilore-0.11.0/verilore/errors.py +544 -0
- verilore-0.11.0/verilore/mcp_server.py +695 -0
- verilore-0.11.0/verilore/migrations/__init__.py +36 -0
- verilore-0.11.0/verilore/migrations/alembic.ini +41 -0
- verilore-0.11.0/verilore/migrations/env.py +70 -0
- verilore-0.11.0/verilore/migrations/versions/001_initial_schema.py +167 -0
- verilore-0.11.0/verilore/migrations/versions/002_corpora.py +72 -0
- verilore-0.11.0/verilore/migrations/versions/003_manifest_corpus.py +39 -0
- verilore-0.11.0/verilore/migrations/versions/004_memory.py +288 -0
- verilore-0.11.0/verilore/migrations/versions/005_multiple_evidence.py +60 -0
- verilore-0.11.0/verilore/migrations/versions/006_snapshot_membership_seal.py +94 -0
- verilore-0.11.0/verilore/migrations/versions/007_claim_embedding_cache.py +66 -0
- verilore-0.11.0/verilore/migrations/versions/008_tenant_scoped_access.py +156 -0
- verilore-0.11.0/verilore/migrations/versions/009_permission_granularity_and_erasure.py +285 -0
- verilore-0.11.0/verilore/migrations/versions/010_bind_unrestricted_scope.py +244 -0
- verilore-0.11.0/verilore/migrations/versions/011_cross_document_supersession.py +148 -0
- verilore-0.11.0/verilore/migrations/versions/012_claim_embedding_hnsw.py +71 -0
- verilore-0.11.0/verilore/migrations/versions/013_info_state_and_extraction_mode.py +27 -0
- verilore-0.11.0/verilore/migrations/versions/014_scope_token_hardening.py +160 -0
- verilore-0.11.0/verilore/migrations/versions/015_rls_scope_enforcement.py +200 -0
- verilore-0.11.0/verilore/migrations/versions/016_hoist_scope_initplan.py +95 -0
- verilore-0.11.0/verilore/pack.py +470 -0
- verilore-0.11.0/verilore/proof.py +493 -0
- verilore-0.11.0/verilore/proof_cli.py +551 -0
- verilore-0.11.0/verilore/receipt.py +567 -0
- verilore-0.11.0/verilore/runtime.py +44 -0
- verilore-0.11.0/verilore/sdk.py +1588 -0
- verilore-0.11.0/verilore.egg-info/PKG-INFO +118 -0
- verilore-0.11.0/verilore.egg-info/SOURCES.txt +269 -0
- verilore-0.11.0/verilore.egg-info/dependency_links.txt +1 -0
- verilore-0.11.0/verilore.egg-info/entry_points.txt +4 -0
- verilore-0.11.0/verilore.egg-info/requires.txt +37 -0
- verilore-0.11.0/verilore.egg-info/top_level.txt +3 -0
- verilore-0.11.0/verilore_errors.py +14 -0
- verilore-0.11.0/verilore_sdk.py +14 -0
verilore-0.11.0/LICENSE
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
+
|
|
7
|
+
1. Definitions.
|
|
8
|
+
|
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
10
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
11
|
+
|
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
13
|
+
the copyright owner that is granting the License.
|
|
14
|
+
|
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
16
|
+
other entities that control, are controlled by, or are under common
|
|
17
|
+
control with that acting entity. For the purposes of this definition,
|
|
18
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
19
|
+
direction or management of such entity, whether by contract or
|
|
20
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
21
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
22
|
+
|
|
23
|
+
"You" (or "Your") shall mean an individual or legal entity
|
|
24
|
+
exercising rights granted by this License.
|
|
25
|
+
|
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
27
|
+
including but not limited to software source code, documentation
|
|
28
|
+
source, and configuration files.
|
|
29
|
+
|
|
30
|
+
"Object" form shall mean any form resulting from mechanical
|
|
31
|
+
transformation or translation of a Source form, including but
|
|
32
|
+
not limited to compiled object code, generated documentation,
|
|
33
|
+
and conversions to other media types.
|
|
34
|
+
|
|
35
|
+
"Work" shall mean the licensor's work, whether in Source or Object
|
|
36
|
+
form, made available to the public under the terms of this License.
|
|
37
|
+
|
|
38
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
39
|
+
form, that is based on the Work and for which the copyright
|
|
40
|
+
ownership is exercisable by at least one of the authors of the Work.
|
|
41
|
+
For the purposes of this definition, "Derivative Works" shall not
|
|
42
|
+
include any work that is a copy of the Work.
|
|
43
|
+
|
|
44
|
+
"Notices" shall mean any document that is included with the Work
|
|
45
|
+
to the extent required by applicable law or in accordance with
|
|
46
|
+
the terms of this License, for the purpose of informing recipients
|
|
47
|
+
of the existence and location of specific licenses, notices, and
|
|
48
|
+
warranties required by law or in accordance with the terms of this
|
|
49
|
+
License.
|
|
50
|
+
|
|
51
|
+
"Annual
|
verilore-0.11.0/NOTICE
ADDED
verilore-0.11.0/PKG-INFO
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: verilore
|
|
3
|
+
Version: 0.11.0
|
|
4
|
+
Summary: Versioned, evidence-backed memory for AI apps: every answer cites its source and the time it was true.
|
|
5
|
+
Author: Raunak Dey
|
|
6
|
+
License-Expression: Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/raunakdey-07/verilore
|
|
8
|
+
Project-URL: Repository, https://github.com/raunakdey-07/verilore
|
|
9
|
+
Project-URL: Documentation, https://github.com/raunakdey-07/verilore/blob/main/docs/integration/guide.md
|
|
10
|
+
Project-URL: Changelog, https://github.com/raunakdey-07/verilore/blob/main/CHANGELOG.md
|
|
11
|
+
Project-URL: Issues, https://github.com/raunakdey-07/verilore/issues
|
|
12
|
+
Keywords: memory,rag,llm,provenance,pgvector,mcp,ai-agents
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Framework :: FastAPI
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
22
|
+
Classifier: Topic :: Software Development :: Libraries
|
|
23
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
24
|
+
Classifier: Operating System :: POSIX :: Linux
|
|
25
|
+
Classifier: Operating System :: MacOS
|
|
26
|
+
Requires-Python: <3.15,>=3.11
|
|
27
|
+
Description-Content-Type: text/markdown
|
|
28
|
+
License-File: LICENSE
|
|
29
|
+
License-File: NOTICE
|
|
30
|
+
Requires-Dist: fastapi>=0.110.0
|
|
31
|
+
Requires-Dist: uvicorn>=0.27.0
|
|
32
|
+
Requires-Dist: sqlalchemy[asyncio]>=2.0.0
|
|
33
|
+
Requires-Dist: asyncpg>=0.30.0
|
|
34
|
+
Requires-Dist: pydantic>=2.0.0
|
|
35
|
+
Requires-Dist: python-frontmatter>=1.1.0
|
|
36
|
+
Requires-Dist: alembic>=1.13.0
|
|
37
|
+
Requires-Dist: onnxruntime>=1.17.0
|
|
38
|
+
Requires-Dist: tokenizers>=0.15.0
|
|
39
|
+
Requires-Dist: huggingface-hub>=0.23.0
|
|
40
|
+
Requires-Dist: httpx>=0.27.0
|
|
41
|
+
Requires-Dist: prometheus-fastapi-instrumentator>=7.0.0
|
|
42
|
+
Requires-Dist: pyyaml>=6.0
|
|
43
|
+
Requires-Dist: langchain-text-splitters>=1.0.0
|
|
44
|
+
Requires-Dist: typer>=0.9.0
|
|
45
|
+
Requires-Dist: psycopg2-binary>=2.9.0
|
|
46
|
+
Requires-Dist: pgvector>=0.3.0
|
|
47
|
+
Requires-Dist: mcp>=2.1.0
|
|
48
|
+
Provides-Extra: cli
|
|
49
|
+
Provides-Extra: mcp
|
|
50
|
+
Requires-Dist: mcp>=2.1.0; extra == "mcp"
|
|
51
|
+
Provides-Extra: migrations
|
|
52
|
+
Requires-Dist: alembic>=1.13.0; extra == "migrations"
|
|
53
|
+
Requires-Dist: psycopg2-binary>=2.9.0; extra == "migrations"
|
|
54
|
+
Requires-Dist: pgvector>=0.3.0; extra == "migrations"
|
|
55
|
+
Provides-Extra: torch
|
|
56
|
+
Requires-Dist: sentence-transformers>=2.5.0; extra == "torch"
|
|
57
|
+
Provides-Extra: dev
|
|
58
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
59
|
+
Requires-Dist: pytest-asyncio>=0.23.0; extra == "dev"
|
|
60
|
+
Requires-Dist: black>=24.0.0; extra == "dev"
|
|
61
|
+
Requires-Dist: flake8>=7.0.0; extra == "dev"
|
|
62
|
+
Dynamic: license-file
|
|
63
|
+
|
|
64
|
+
# Verilore
|
|
65
|
+
|
|
66
|
+
Memory for AI applications that remembers what changed, what was true when, and
|
|
67
|
+
why to believe the recorded state. Add Verilore to an application, record a fact,
|
|
68
|
+
and get back an answer with its source, the time it was true, and the exact
|
|
69
|
+
characters that support it. Export a receipt and verify it on a machine that has
|
|
70
|
+
never heard of Verilore.
|
|
71
|
+
|
|
72
|
+
## Install
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
uv tool install --python 3.13 verilore
|
|
76
|
+
# or, with a Python from 3.11 to 3.14:
|
|
77
|
+
pipx install verilore
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Verilore runs on macOS and Linux, and on Windows through WSL 2, with Python 3.11
|
|
81
|
+
to 3.14 (3.13 at most on an Intel Mac). uv downloads 3.13 if you do not have it,
|
|
82
|
+
which also covers a system whose own Python is newer, such as Fedora 45's 3.15
|
|
83
|
+
(Fedora's uv downloads only when asked: run `uv python install 3.13` first).
|
|
84
|
+
It needs PostgreSQL 15 or newer with pgvector: with Podman or Docker installed,
|
|
85
|
+
`verilore init` starts one for you, and to use one you already run, pass
|
|
86
|
+
`verilore init --database-url ...`.
|
|
87
|
+
[Your system](https://github.com/raunakdey-07/verilore/blob/main/docs/quickstart.md#your-system)
|
|
88
|
+
says how to get uv and Podman on each.
|
|
89
|
+
|
|
90
|
+
## Quickstart
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
verilore init
|
|
94
|
+
verilore ingest-repo ./docs --corpus project
|
|
95
|
+
verilore recall "What is the primary datastore?" --corpus project
|
|
96
|
+
verilore explain "What is the primary datastore?" --corpus project
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
`init` sets up the database and records it for every later command, so nothing
|
|
100
|
+
needs exporting. Something wrong? Run `verilore doctor`.
|
|
101
|
+
|
|
102
|
+
From Python:
|
|
103
|
+
|
|
104
|
+
```python
|
|
105
|
+
from verilore import Verilore
|
|
106
|
+
|
|
107
|
+
client = Verilore("default")
|
|
108
|
+
client.remember("Support answers within one business day.", key="support.sla")
|
|
109
|
+
memory = client.recall("What is the support SLA?").current_memories[0]
|
|
110
|
+
print(f"{memory.claim} [{memory.status}]")
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Links
|
|
114
|
+
|
|
115
|
+
- [README](https://github.com/raunakdey-07/verilore#readme): what it is, and what it refuses to do
|
|
116
|
+
- [Integration guide](https://github.com/raunakdey-07/verilore/blob/main/docs/integration/guide.md): wiring it into an app
|
|
117
|
+
- [Changelog](https://github.com/raunakdey-07/verilore/blob/main/CHANGELOG.md)
|
|
118
|
+
- [License: Apache-2.0](https://github.com/raunakdey-07/verilore/blob/main/LICENSE)
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
# Verilore
|
|
2
|
+
|
|
3
|
+
[](https://github.com/raunakdey-07/verilore/releases)
|
|
4
|
+
[](https://github.com/raunakdey-07/verilore/actions/workflows/ci.yml)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
|
|
7
|
+
Verilore was called Mind Palace until v0.10.0.
|
|
8
|
+
|
|
9
|
+
[Current release: v0.11.0](docs/release-map.md) · [Changelog](CHANGELOG.md)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
**Memory for AI applications that remembers what changed, what was true when, and
|
|
13
|
+
why to believe the recorded state.**
|
|
14
|
+
|
|
15
|
+
Add Verilore to an application, record a fact, and get back an answer with its
|
|
16
|
+
source, the time it was true, and the exact characters that support it. Export a
|
|
17
|
+
receipt and verify it on a machine that has never heard of Verilore.
|
|
18
|
+
|
|
19
|
+
```text
|
|
20
|
+
remember a statement becomes memory, with evidence
|
|
21
|
+
recall an answer, its source, and the time it was true
|
|
22
|
+
explain the characters that support it, and what replaced it
|
|
23
|
+
history the supersession chain, oldest first
|
|
24
|
+
receipt what was returned, plus the digest of the whole response
|
|
25
|
+
verify offline: no database, no model, no network
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Run `verilore` with no arguments and it prints the first three commands, in
|
|
29
|
+
the order a newcomer needs them.
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Quickstart
|
|
34
|
+
|
|
35
|
+
For wiring Verilore into a coding agent so it tracks your project's decisions and
|
|
36
|
+
runbooks. CI runs these commands against a built wheel (`scripts/cleanroom_quickstart.py`),
|
|
37
|
+
and its `Laptop path on Podman` job runs the first three on a machine with no
|
|
38
|
+
database and nothing exported.
|
|
39
|
+
|
|
40
|
+
Lines starting with `$ ` are the commands CI runs; type them without the `$ `.
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Install the command from PyPI. Verilore runs on Python 3.11 to 3.14; uv downloads
|
|
44
|
+
# 3.13 if you do not have it (Fedora's uv downloads only when asked: run
|
|
45
|
+
# `uv python install 3.13` first). macOS, Ubuntu, WSL, Debian, Fedora, Arch:
|
|
46
|
+
# docs/quickstart.md#your-system says how to get uv and Podman on each.
|
|
47
|
+
uv tool install --python 3.13 verilore
|
|
48
|
+
# or, with a Python from 3.11 to 3.14: pipx install verilore
|
|
49
|
+
|
|
50
|
+
# The whole local setup. With Podman or Docker installed, init starts a local
|
|
51
|
+
# PostgreSQL (the first run downloads its image once), applies the schema,
|
|
52
|
+
# creates your first corpus and records the database for every later command.
|
|
53
|
+
# Run it again any time; it changes nothing.
|
|
54
|
+
$ verilore init
|
|
55
|
+
|
|
56
|
+
# Ingest a plain ADR. No frontmatter, no `claims:` block: headings, list items and
|
|
57
|
+
# `Key: Value` lines become claims, each quoted from the file it came from.
|
|
58
|
+
# docs/adr/001-datastore.md is the worked example; point this at your own.
|
|
59
|
+
$ verilore ingest-repo ./docs/adr --corpus project
|
|
60
|
+
|
|
61
|
+
# Recall. An ambiguous answer prints the claims it could not separate, with ids.
|
|
62
|
+
$ verilore recall "What is the primary datastore?" --corpus project
|
|
63
|
+
|
|
64
|
+
# Record what replaces it. `--topic-key` retires what is live under that key, across
|
|
65
|
+
# files: the new statement is a different document from the old one.
|
|
66
|
+
$ verilore remember "The primary datastore is PostgreSQL 16." \
|
|
67
|
+
--corpus project --key architecture.datastore --topic-key architecture.datastore
|
|
68
|
+
|
|
69
|
+
# What is true now, and what it displaced.
|
|
70
|
+
$ verilore recall "What is the primary datastore?" --corpus project
|
|
71
|
+
$ verilore history "" --corpus project
|
|
72
|
+
|
|
73
|
+
# Verify the answer offline: no database, no model, no network.
|
|
74
|
+
$ verilore receipt "What is the primary datastore?" --corpus project -o receipt.json
|
|
75
|
+
$ verilore verify receipt.json
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Nothing needs exporting. `init` records the database in `~/.verilore/config.toml`
|
|
79
|
+
(mode 0600), and every command and `verilore-mcp` read it; an exported
|
|
80
|
+
`DATABASE_URL` still wins. The container it creates is `verilore-postgres`,
|
|
81
|
+
listening on 127.0.0.1:5432 only, with its data in the `verilore-pgdata` volume,
|
|
82
|
+
so removing the container loses no memory. To use a PostgreSQL you already run,
|
|
83
|
+
`verilore init --database-url ...` once; see
|
|
84
|
+
[Running against your own PostgreSQL](docs/deployment.md#running-against-your-own-postgresql).
|
|
85
|
+
Local mode needs no secrets; a server deployment still takes them from the
|
|
86
|
+
environment.
|
|
87
|
+
|
|
88
|
+
Working on Verilore itself? Install from a clone instead, then run the same commands:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
git clone https://github.com/raunakdey-07/verilore.git && cd verilore
|
|
92
|
+
uv venv --python 3.13 && . .venv/bin/activate && uv pip install -e '.[cli,mcp]'
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
The first `recall` builds an ONNX session: about 1.4 s, then 0.3 s. A background
|
|
96
|
+
runtime holds it and the connection pool warm after that;
|
|
97
|
+
`verilore runtime status` says whether one is up. `VERILORE_RUNTIME=0` turns
|
|
98
|
+
it off, and `VERILORE_LEXICAL=1` turns the model off.
|
|
99
|
+
|
|
100
|
+
Something wrong? Run `verilore doctor`.
|
|
101
|
+
|
|
102
|
+
`pip install -e '.[cli,mcp]'` resolved 79 distributions totalling 216 MB, of which
|
|
103
|
+
the three embedding packages are 79 MB (measured before `psycopg2-binary` and
|
|
104
|
+
`pgvector`, two small packages, became core dependencies so `init` can migrate). `sentence-transformers` and torch are the
|
|
105
|
+
`[torch]` extra and add about 1.35 GB. The extra is not needed for recall, and the
|
|
106
|
+
two backends return the same vectors -- measured minimum cosine 0.99999833 -- so it
|
|
107
|
+
buys a different import time and nothing else. The one thing that does need it is
|
|
108
|
+
`rerank=true` on the REST search endpoint, which asks for the cross-encoder
|
|
109
|
+
reranker; on the default stack that raises, because returning unreranked results
|
|
110
|
+
under a rerank request would be a lie. `verilore search` and every other command
|
|
111
|
+
leave it off.
|
|
112
|
+
|
|
113
|
+
Your agent gets the same commands over MCP, with the same `match_status` and
|
|
114
|
+
`candidates` on the answer and the same `supersedes_claim_id` on the write, which
|
|
115
|
+
takes an id prefix or a phrase from the claim's own text. A document can say so
|
|
116
|
+
itself: `supersedes: 0001.md` in its frontmatter. Point the client at
|
|
117
|
+
`verilore-mcp`: it uses the database `init` recorded unless the client's config
|
|
118
|
+
sets `DATABASE_URL`, and `VERILORE_INGEST_ROOTS` limits the directories it may
|
|
119
|
+
read. The JSON for OpenCode, Zed and Claude Code is in [connecting an agent](docs/mcp.md).
|
|
120
|
+
|
|
121
|
+
`recall` and `remember` also report a `query_id`. Grade a wrong answer; it appends
|
|
122
|
+
to `~/.verilore/logs/queries.jsonl` and changes nothing else.
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
verilore feedback <query_id> --verdict wrong --note "meant the cache"
|
|
126
|
+
verilore feedback-summary
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Managing corpora and credentials
|
|
130
|
+
|
|
131
|
+
- `verilore ingest-repo <path> --delete-removed` retires documents whose source file is gone.
|
|
132
|
+
- `verilore corpus reset <name> --yes` erases and re-initialises one corpus, with its grants intact.
|
|
133
|
+
- `verilore corpus delete <name> --yes` removes a corpus entirely.
|
|
134
|
+
- `verilore posture` reports whether the database role actually enforces row-level security.
|
|
135
|
+
- `verilore credential issue|list|grant|ungrant|revoke` manages access without changing a secret.
|
|
136
|
+
|
|
137
|
+
## Out-of-the-box Linux and WSL2
|
|
138
|
+
|
|
139
|
+
On Linux and WSL2, `verilore init` starts a stopped container of ours, or creates
|
|
140
|
+
`verilore-postgres` when nothing is running, with Podman or Docker; a remote
|
|
141
|
+
database is never touched. When it cannot, it says why and what to do instead of
|
|
142
|
+
a generic error: the install command for your distribution when there is no
|
|
143
|
+
container engine, the engine's own error when the container will not start, and
|
|
144
|
+
`--database-url` when port 5432 belongs to a program that is not PostgreSQL.
|
|
145
|
+
Connection and authentication failures print the specific remediation (start the
|
|
146
|
+
service, fix the password) instead of a traceback. `pytest` auto-detects a local
|
|
147
|
+
development Postgres, so the suite runs with no `DATABASE_URL`.
|
|
148
|
+
|
|
149
|
+
## Documents and claims
|
|
150
|
+
|
|
151
|
+
`remember` is for facts you have in hand. A directory of Markdown you already have
|
|
152
|
+
goes through `verilore ingest-repo ./docs`, and there are two ways for a document
|
|
153
|
+
to become memory.
|
|
154
|
+
|
|
155
|
+
**Plain Markdown needs no annotation.** A heading path scopes what follows it, and
|
|
156
|
+
the claims under it are its list items, its numbered entries and its `Key: Value`
|
|
157
|
+
lines. Every one is quoted back from the file it came from, so the evidence is the
|
|
158
|
+
document's own bytes:
|
|
159
|
+
|
|
160
|
+
```markdown
|
|
161
|
+
# ADR 001: primary datastore
|
|
162
|
+
|
|
163
|
+
- The primary datastore is PostgreSQL 15.
|
|
164
|
+
- Writes go through the repository layer.
|
|
165
|
+
|
|
166
|
+
## Status
|
|
167
|
+
|
|
168
|
+
Status: Accepted
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
**A `claims:` block is the authoring interface** when you want to name the keys
|
|
172
|
+
yourself. It says what to remember, and the evidence quote must appear **verbatim**
|
|
173
|
+
in the body:
|
|
174
|
+
|
|
175
|
+
```markdown
|
|
176
|
+
---
|
|
177
|
+
title: Deployment architecture
|
|
178
|
+
claims:
|
|
179
|
+
- key: architecture.datastore
|
|
180
|
+
value: PostgreSQL
|
|
181
|
+
claim: The primary datastore is PostgreSQL.
|
|
182
|
+
evidence: The primary datastore is PostgreSQL.
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
# Deployment architecture
|
|
186
|
+
|
|
187
|
+
The primary datastore is PostgreSQL. It runs in three availability zones.
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
A `claims:` block wins outright: if a document has one, the structural reader does
|
|
191
|
+
not run on it. An author's key is a decision, and the tool does not second-guess it.
|
|
192
|
+
|
|
193
|
+
What is extracted is never inferred. Nothing is summarised, reworded or merged; a
|
|
194
|
+
claim is a line that was in the file, and its evidence is a character range of the
|
|
195
|
+
archived chunk. See [docs/authoring.md](docs/authoring.md) for the exact-quote rule
|
|
196
|
+
and both rejections with their messages.
|
|
197
|
+
|
|
198
|
+
From Python, with no server and no subprocess:
|
|
199
|
+
|
|
200
|
+
```python
|
|
201
|
+
from verilore import Verilore
|
|
202
|
+
|
|
203
|
+
client = Verilore("default")
|
|
204
|
+
client.remember("Support answers within one business day.", key="support.sla")
|
|
205
|
+
memory = client.recall("What is the support SLA?").current_memories[0]
|
|
206
|
+
print(f"{memory.claim} [{memory.status}]")
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
## What it does not do
|
|
210
|
+
|
|
211
|
+
- **It does not decide what is true.** It records what was written, attributed.
|
|
212
|
+
Correctness of the original source is never established — only its provenance.
|
|
213
|
+
- **It does not infer claims.** Every claim is a line from a document (a list
|
|
214
|
+
item, a `Key: Value` line, or, in a document with no list items, a rule-like
|
|
215
|
+
sentence) or a statement you gave it, quoted back unchanged.
|
|
216
|
+
- **It is not a vector store.** Retrieval is one stage of a pipeline that ends in
|
|
217
|
+
provenance, not the product.
|
|
218
|
+
- **It does not authenticate its own history.** A receipt proves internal
|
|
219
|
+
consistency. Trust requires an anchor you pinned yourself, outside this system.
|
|
220
|
+
- **A draft section of an approved document is searchable.** Search and the
|
|
221
|
+
other chunk routes skip draft, rejected and superseded documents, but not a
|
|
222
|
+
`## Brainstorm` section inside an approved one (#138).
|
|
223
|
+
- **No token budgets.** The `budget` argument is a character count of the JSON
|
|
224
|
+
response, not a token count.
|
|
225
|
+
- **No metadata filters.** Scoping is by corpus and `path_prefix`.
|
|
226
|
+
- **No single-claim deletion.** Withdrawal is a new `rejected` version of the
|
|
227
|
+
same key; the archive is append-only.
|
|
228
|
+
- **No comparative benchmark result.** No number in this repository is evidence
|
|
229
|
+
of generalisation.
|
|
230
|
+
- **Prose without rule-like sentences produces no claims.** A document with no
|
|
231
|
+
list items and no must/never/always/should sentences is stored as text only,
|
|
232
|
+
and the ingest warns `prose_not_extracted` (#158).
|
|
233
|
+
- **Without the model, a text-only document is found by keyword only.** Under
|
|
234
|
+
`VERILORE_LEXICAL=1`, or when the model is not installed (the ingest then warns
|
|
235
|
+
`embedding_unavailable`), its text is stored without a vector until
|
|
236
|
+
`verilore reindex` adds one (#173).
|
|
237
|
+
- **A supersession retires one claim.** `--supersedes` names it, or `--topic-key`
|
|
238
|
+
retires whatever is live under that key, and either works across files. Where two
|
|
239
|
+
documents disagree under one key and neither is retired, recall reports the
|
|
240
|
+
disagreement rather than picking one.
|
|
241
|
+
- **A `claims:` block is YAML, and YAML is strict.** A backtick, a colon-space or
|
|
242
|
+
a leading `@` in an evidence quote discards the whole block. Quote the value.
|
|
243
|
+
The ingest now says `frontmatter_unparseable` instead of `no_claims_declared`.
|
|
244
|
+
- **An agent can write memory, and that is a risk.** `memory_remember` is one
|
|
245
|
+
of 17 MCP tools and the first that writes. Without `file=` the evidence for the
|
|
246
|
+
claim is the statement itself, so it proves what the agent was told and not that
|
|
247
|
+
it is true ([why, and the review it needs](docs/authoring.md#memory_remember)).
|
|
248
|
+
- **The install is 216 MB, not gigabytes**, unless you ask. Every latency and size
|
|
249
|
+
figure recorded up to v0.9.1 measured a `sentence-transformers` import, because
|
|
250
|
+
that was the default then; those figures describe the opt-in `[torch]` stack, not
|
|
251
|
+
what you get now. See [the install](#quickstart) for both sizes and what the extra
|
|
252
|
+
is for.
|
|
253
|
+
- **`--as-of` queries need a timestamp you actually wrote at.** Memory is stamped
|
|
254
|
+
when it is recorded, so a time-travel query dated before the write returns
|
|
255
|
+
nothing. There is no backdating.
|
|
256
|
+
- **Retrieval quality is measured on small frozen sets**, not on your corpus.
|
|
257
|
+
See [evaluation](docs/evaluation/) for what was actually measured, including
|
|
258
|
+
the questions the current system gets wrong.
|
|
259
|
+
|
|
260
|
+
## What is measured
|
|
261
|
+
|
|
262
|
+
Two held-out numbers, and neither is superseded by the other:
|
|
263
|
+
|
|
264
|
+
| benchmark | result | what it is |
|
|
265
|
+
|---|---|---|
|
|
266
|
+
| M006.75 frozen held-out | **45/60 (75.0%)** exact on current source | the frozen benchmark, safety invariants at 60/60 |
|
|
267
|
+
| independently authored, 157 questions | **131/157 (83.4%)** | a generalisation figure, and a known limitation |
|
|
268
|
+
|
|
269
|
+
Both are reported because reporting only the better one would be the dishonest
|
|
270
|
+
choice. v0.9.0 changed no benchmark input, policy, evaluator semantic,
|
|
271
|
+
tokenizer or threshold, and that is measured: all 60 canonical per-question
|
|
272
|
+
decisions are identical to `v0.8.0`. [The reproducibility report](docs/evaluation/m00675-reproducibility.md)
|
|
273
|
+
records one discrepancy that release found and did not paper over.
|
|
274
|
+
|
|
275
|
+
## Head-to-head stale-fact benchmark
|
|
276
|
+
|
|
277
|
+
A reproducible comparison between Verilore and a plain top-k chunk RAG baseline
|
|
278
|
+
using the same ONNX embedding model. Run with:
|
|
279
|
+
|
|
280
|
+
```
|
|
281
|
+
DATABASE_URL=postgresql://mpadmin:secret@localhost:5432/verilore python scripts/benchmark_stale_facts.py
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
The script ingests a multi-evolution ADR and spec corpus, runs Verilore and
|
|
285
|
+
three RAG baselines (plain top-k, recency-reranked, metadata-filtered) over
|
|
286
|
+
33 questions across supersession, spec updates, half-absent compounds, and cached
|
|
287
|
+
answer revalidation, and prints a comparison table.
|
|
288
|
+
|
|
289
|
+
Latest run (illustrative; re-run to reproduce):
|
|
290
|
+
|
|
291
|
+
| metric | verilore | plain_rag | rag_recency | rag_metadata |
|
|
292
|
+
|---|---:|---:|---:|---:|
|
|
293
|
+
| authoritative_top1_accuracy | 0.939 | 0.303 | 0.424 | 0.939 |
|
|
294
|
+
| stale_contamination_rate | 0.000 | 0.970 | 0.758 | 0.000 |
|
|
295
|
+
| compound_completeness | 1.000 | 0.000 | 0.167 | 1.000 |
|
|
296
|
+
| abstention_accuracy | 1.000 | 0.500 | 0.500 | 0.500 |
|
|
297
|
+
| cached_revalidation_accuracy | 1.000 | 0.000 | 0.000 | 0.000 |
|
|
298
|
+
|
|
299
|
+
The corpus and questions were written by this project's author, so the table
|
|
300
|
+
is a regression check, not evidence of comparative quality.
|
|
301
|
+
|
|
302
|
+
## Reading order
|
|
303
|
+
|
|
304
|
+
Four documents, and then stop.
|
|
305
|
+
|
|
306
|
+
| | | |
|
|
307
|
+
|---|---|---|
|
|
308
|
+
| 1 | This file | what it is, and what it refuses to do |
|
|
309
|
+
| 2 | [Quickstart](docs/quickstart.md) | the commands, expanded; every `$ ` line in it runs in CI |
|
|
310
|
+
| 3 | [Integration guide](docs/integration/guide.md) | wiring Verilore into an app |
|
|
311
|
+
| 4 | [Authoring memory](docs/authoring.md) | how to write a document that answers |
|
|
312
|
+
|
|
313
|
+
## Everything else — later
|
|
314
|
+
|
|
315
|
+
| | |
|
|
316
|
+
|---|---|
|
|
317
|
+
| [Local runtime and model-free mode](docs/runtime.md) | the warm process, and running with no model |
|
|
318
|
+
| [Deployment and authentication](docs/deployment.md) | health, observability, credentials, multi-tenancy |
|
|
319
|
+
| [Security](docs/security.md) | threat model, credential handling, what is logged |
|
|
320
|
+
| [Errors](docs/errors.md) | every code the CLI and API return |
|
|
321
|
+
| [Deletion and erasure](docs/deletion-and-erasure.md) | removing a person's data |
|
|
322
|
+
| [Operational memory feed](docs/feed.md) | ordering, cursors, consistency |
|
|
323
|
+
| [Providers](docs/providers.md) | LLM and embedding providers |
|
|
324
|
+
| [Architecture and the memory model](docs/architecture/) | how the layers fit; why memory beyond RAG |
|
|
325
|
+
| [Surfaces](docs/quickstart.md#the-full-walkthrough) | CLI, SDK, REST, MCP, and what each can reach |
|
|
326
|
+
| [Status](docs/STATUS.md) | what is measured, what is outstanding |
|
|
327
|
+
| [Changelog](CHANGELOG.md) | every release, and every fix |
|
|
328
|
+
| [Release map](docs/release-map.md) | milestone to version |
|
|
329
|
+
| [Evaluation](docs/evaluation/) | the frozen benchmarks, and their results |
|
|
330
|
+
| [Progress](docs/archive/PROGRESS.md) | one line per phase; [full history](docs/archive/internal/progress-history.md) |
|
|
331
|
+
| [Examples](examples/) | the product in one file: [decision memory](examples/decision-memory/), [project log](examples/project-log/) |
|
|
332
|
+
| [Withdrawn](docs/archive/withdrawn/README.md) | material deliberately removed, and why |
|
|
333
|
+
|
|
334
|
+
## Contributing
|
|
335
|
+
|
|
336
|
+
```bash
|
|
337
|
+
uv venv --python 3.13 && . .venv/bin/activate
|
|
338
|
+
uv pip install -e '.[cli,mcp,dev]'
|
|
339
|
+
pytest -q
|
|
340
|
+
```
|
|
341
|
+
|
|
342
|
+
The suite needs PostgreSQL with pgvector: `verilore init` starts one, or from the
|
|
343
|
+
checkout `docker compose up -d postgresql` starts the one in `docker-compose.yml`.
|
|
344
|
+
It will not run against an unreachable database — it fails instead of skipping
|
|
345
|
+
everything.
|
|
346
|
+
[CONTRIBUTING.md](CONTRIBUTING.md) has the rest, and [SECURITY.md](SECURITY.md)
|
|
347
|
+
says how to report a vulnerability privately.
|
|
348
|
+
|
|
349
|
+
## License
|
|
350
|
+
|
|
351
|
+
Apache 2.0. See [LICENSE](LICENSE).
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Verilore
|
|
2
|
+
|
|
3
|
+
Memory for AI applications that remembers what changed, what was true when, and
|
|
4
|
+
why to believe the recorded state. Add Verilore to an application, record a fact,
|
|
5
|
+
and get back an answer with its source, the time it was true, and the exact
|
|
6
|
+
characters that support it. Export a receipt and verify it on a machine that has
|
|
7
|
+
never heard of Verilore.
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
uv tool install --python 3.13 verilore
|
|
13
|
+
# or, with a Python from 3.11 to 3.14:
|
|
14
|
+
pipx install verilore
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Verilore runs on macOS and Linux, and on Windows through WSL 2, with Python 3.11
|
|
18
|
+
to 3.14 (3.13 at most on an Intel Mac). uv downloads 3.13 if you do not have it,
|
|
19
|
+
which also covers a system whose own Python is newer, such as Fedora 45's 3.15
|
|
20
|
+
(Fedora's uv downloads only when asked: run `uv python install 3.13` first).
|
|
21
|
+
It needs PostgreSQL 15 or newer with pgvector: with Podman or Docker installed,
|
|
22
|
+
`verilore init` starts one for you, and to use one you already run, pass
|
|
23
|
+
`verilore init --database-url ...`.
|
|
24
|
+
[Your system](https://github.com/raunakdey-07/verilore/blob/main/docs/quickstart.md#your-system)
|
|
25
|
+
says how to get uv and Podman on each.
|
|
26
|
+
|
|
27
|
+
## Quickstart
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
verilore init
|
|
31
|
+
verilore ingest-repo ./docs --corpus project
|
|
32
|
+
verilore recall "What is the primary datastore?" --corpus project
|
|
33
|
+
verilore explain "What is the primary datastore?" --corpus project
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
`init` sets up the database and records it for every later command, so nothing
|
|
37
|
+
needs exporting. Something wrong? Run `verilore doctor`.
|
|
38
|
+
|
|
39
|
+
From Python:
|
|
40
|
+
|
|
41
|
+
```python
|
|
42
|
+
from verilore import Verilore
|
|
43
|
+
|
|
44
|
+
client = Verilore("default")
|
|
45
|
+
client.remember("Support answers within one business day.", key="support.sla")
|
|
46
|
+
memory = client.recall("What is the support SLA?").current_memories[0]
|
|
47
|
+
print(f"{memory.claim} [{memory.status}]")
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Links
|
|
51
|
+
|
|
52
|
+
- [README](https://github.com/raunakdey-07/verilore#readme): what it is, and what it refuses to do
|
|
53
|
+
- [Integration guide](https://github.com/raunakdey-07/verilore/blob/main/docs/integration/guide.md): wiring it into an app
|
|
54
|
+
- [Changelog](https://github.com/raunakdey-07/verilore/blob/main/CHANGELOG.md)
|
|
55
|
+
- [License: Apache-2.0](https://github.com/raunakdey-07/verilore/blob/main/LICENSE)
|