agmem 0.1.6__tar.gz → 0.2.1__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.
- {agmem-0.1.6/agmem.egg-info → agmem-0.2.1}/PKG-INFO +15 -8
- {agmem-0.1.6 → agmem-0.2.1}/README.md +8 -6
- {agmem-0.1.6 → agmem-0.2.1/agmem.egg-info}/PKG-INFO +15 -8
- {agmem-0.1.6 → agmem-0.2.1}/agmem.egg-info/SOURCES.txt +15 -0
- {agmem-0.1.6 → agmem-0.2.1}/agmem.egg-info/requires.txt +6 -0
- {agmem-0.1.6 → agmem-0.2.1}/docs/FEDERATED.md +12 -5
- {agmem-0.1.6 → agmem-0.2.1}/docs/TEST_REPORT.md +7 -3
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/__init__.py +1 -1
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/cli.py +1 -1
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/daemon.py +37 -1
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/distill.py +6 -0
- agmem-0.2.1/memvcs/coordinator/__init__.py +5 -0
- agmem-0.2.1/memvcs/coordinator/server.py +239 -0
- agmem-0.2.1/memvcs/core/compression_metrics.py +248 -0
- agmem-0.2.1/memvcs/core/delta.py +258 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/distiller.py +76 -61
- agmem-0.2.1/memvcs/core/fast_similarity.py +404 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/federated.py +13 -2
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/gardener.py +8 -68
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/pack.py +192 -34
- agmem-0.2.1/memvcs/core/privacy_validator.py +187 -0
- agmem-0.2.1/memvcs/core/protocol_builder.py +198 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/remote.py +82 -2
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/zk_proofs.py +62 -5
- agmem-0.2.1/memvcs/health/__init__.py +25 -0
- agmem-0.2.1/memvcs/health/monitor.py +452 -0
- {agmem-0.1.6 → agmem-0.2.1}/pyproject.toml +12 -1
- {agmem-0.1.6 → agmem-0.2.1}/setup.py +1 -1
- agmem-0.2.1/tests/test_compression_pipeline.py +158 -0
- agmem-0.2.1/tests/test_delta_encoding.py +297 -0
- agmem-0.2.1/tests/test_distiller_dp.py +52 -0
- agmem-0.2.1/tests/test_health_monitor.py +393 -0
- agmem-0.2.1/tests/test_ipfs_integration.py +134 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_pack_gc.py +61 -0
- agmem-0.2.1/tests/test_performance_benchmarks.py +257 -0
- {agmem-0.1.6 → agmem-0.2.1}/LICENSE +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/MANIFEST.in +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/agmem.egg-info/dependency_links.txt +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/agmem.egg-info/entry_points.txt +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/agmem.egg-info/top_level.txt +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/docs/AGMEM_PUBLISHING_SETUP.md +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/docs/CONFIG.md +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/docs/GTM.md +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/docs/KNOWLEDGE_GRAPH.md +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/docs/SEQUENTIAL_VALIDATION.md +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/docs/aux/INSTALL.md +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/examples/basic_workflow.sh +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/__init__.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/add.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/audit.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/base.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/blame.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/branch.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/checkout.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/clean.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/clone.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/commit.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/decay.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/diff.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/federated.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/fsck.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/garden.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/gc.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/graph.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/init.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/log.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/mcp.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/merge.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/pack.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/prove.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/pull.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/push.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/recall.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/reflog.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/remote.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/repair.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/reset.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/resolve.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/resurrect.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/search.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/serve.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/show.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/stash.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/status.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/tag.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/test.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/timeline.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/tree.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/verify.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/commands/when.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/__init__.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/access_index.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/audit.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/compression_pipeline.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/config_loader.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/consistency.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/constants.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/crypto_verify.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/decay.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/diff.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/encryption.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/hooks.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/ipfs_remote.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/knowledge_graph.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/llm/__init__.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/llm/anthropic_provider.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/llm/base.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/llm/factory.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/llm/openai_provider.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/merge.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/objects.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/pii_scanner.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/privacy_budget.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/refs.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/repository.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/schema.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/staging.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/storage/__init__.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/storage/base.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/storage/gcs.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/storage/local.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/storage/s3.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/temporal_index.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/test_runner.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/trust.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/core/vector_store.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/integrations/__init__.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/integrations/mcp_server.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/integrations/web_ui/__init__.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/integrations/web_ui/server.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/retrieval/__init__.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/retrieval/base.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/retrieval/pack.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/retrieval/recaller.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/retrieval/strategies.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/utils/__init__.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/memvcs/utils/helpers.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/setup.cfg +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_access_index.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_advanced_commands.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_audit.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_commit_importance.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_consistency.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_crypto_verify.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_decay.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_edge_cases.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_encryption.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_federated.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_ipfs_remote.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_llm_provider.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_objects.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_pii.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_plan_features.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_privacy_budget.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_repository.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_resolve_helpers.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_retrieval.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_temporal_index.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_trust.py +0 -0
- {agmem-0.1.6 → agmem-0.2.1}/tests/test_zk_proofs.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agmem
|
|
3
|
-
Version: 0.1
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: Agentic Memory Version Control System - Git for AI agent memories
|
|
5
5
|
Home-page: https://github.com/vivek-tiwari-vt/agmem
|
|
6
6
|
Author: agmem Team
|
|
@@ -10,7 +10,7 @@ Project-URL: Homepage, https://github.com/vivek-tiwari-vt/agmem
|
|
|
10
10
|
Project-URL: Documentation, https://github.com/vivek-tiwari-vt/agmem#readme
|
|
11
11
|
Project-URL: Repository, https://github.com/vivek-tiwari-vt/agmem
|
|
12
12
|
Project-URL: Bug Tracker, https://github.com/vivek-tiwari-vt/agmem/issues
|
|
13
|
-
Keywords: ai,agent,memory,version-control,git,vcs,llm,merkle,audit,encryption,differential-privacy,trust,multi-agent
|
|
13
|
+
Keywords: ai,agent,memory,version-control,git,vcs,llm,merkle,audit,encryption,differential-privacy,trust,multi-agent,health-monitoring,delta-encoding,ipfs,federated
|
|
14
14
|
Classifier: Development Status :: 3 - Alpha
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
16
16
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -71,6 +71,10 @@ Provides-Extra: ipfs
|
|
|
71
71
|
Requires-Dist: requests>=2.28.0; extra == "ipfs"
|
|
72
72
|
Provides-Extra: ipfs-daemon
|
|
73
73
|
Requires-Dist: ipfshttpclient>=0.8.0; extra == "ipfs-daemon"
|
|
74
|
+
Provides-Extra: coordinator
|
|
75
|
+
Requires-Dist: fastapi>=0.100.0; extra == "coordinator"
|
|
76
|
+
Requires-Dist: uvicorn[standard]>=0.22.0; extra == "coordinator"
|
|
77
|
+
Requires-Dist: pydantic>=2.0.0; extra == "coordinator"
|
|
74
78
|
Provides-Extra: all
|
|
75
79
|
Requires-Dist: mcp>=1.0.0; extra == "all"
|
|
76
80
|
Requires-Dist: cryptography>=41.0.0; extra == "all"
|
|
@@ -88,6 +92,7 @@ Requires-Dist: networkx>=3.0; extra == "all"
|
|
|
88
92
|
Requires-Dist: tiktoken>=0.5.0; extra == "all"
|
|
89
93
|
Requires-Dist: presidio-analyzer>=2.2.0; extra == "all"
|
|
90
94
|
Requires-Dist: requests>=2.28.0; extra == "all"
|
|
95
|
+
Requires-Dist: pydantic>=2.0.0; extra == "all"
|
|
91
96
|
Dynamic: author
|
|
92
97
|
Dynamic: home-page
|
|
93
98
|
Dynamic: license-file
|
|
@@ -132,13 +137,15 @@ agmem solves all of these problems with a familiar Git-like interface.
|
|
|
132
137
|
- ✅ **Tamper-evident audit trail** — Append-only hash-chained log (init, add, commit, checkout, merge, push, pull, config); `agmem audit` and `agmem audit --verify`
|
|
133
138
|
- ✅ **Multi-agent trust** — Trust store (full / conditional / untrusted) per public key; applied on pull/merge; clone copies remote keys
|
|
134
139
|
- ✅ **Conflict resolution** — `agmem resolve` with ours/theirs/both; conflicts persisted in `.mem/merge/`; path-safe
|
|
135
|
-
- ✅ **Differential privacy** — Epsilon/delta budget in `.mem/privacy_budget.json`; `--private` on `agmem distill` and `agmem garden`; noise
|
|
140
|
+
- ✅ **Differential privacy** — Epsilon/delta budget in `.mem/privacy_budget.json`; `--private` on `agmem distill` and `agmem garden`; noise applies to fact-level data only (metadata fields excluded)
|
|
136
141
|
- ✅ **Pack files & GC** — `agmem gc [--repack]` (reachable from refs, prune loose, optional pack file + index); ObjectStore reads from pack when loose missing
|
|
137
142
|
- ✅ **Multi-provider LLM** — OpenAI and Anthropic via `memvcs.core.llm`; config/repo or env; used by gardener, distiller, consistency, merge
|
|
138
143
|
- ✅ **Temporal querying** — Point-in-time and range queries in temporal index; frontmatter timestamps
|
|
139
|
-
- ✅ **Federated collaboration** — `agmem federated push|pull`;
|
|
140
|
-
- ✅ **Zero-knowledge proofs** — `agmem prove` (hash/signature-based): keyword containment (Merkle set membership), memory freshness (signed timestamp)
|
|
141
|
-
- ✅ **Daemon health** —
|
|
144
|
+
- ✅ **Federated collaboration** — `agmem federated push|pull`; protocol-compliant summaries (agent_id, timestamp, topic_counts, fact_hashes); optional DP on outbound; coordinator API in docs/FEDERATED.md
|
|
145
|
+
- ✅ **Zero-knowledge proofs** — `agmem prove` (hash/signature-based): keyword containment (Merkle set membership), memory freshness (signed timestamp). **Note:** Current implementation is proof-of-knowledge with known limitations; see docs for migration to true zk-SNARKs.
|
|
146
|
+
- ✅ **Daemon health** — 4-point health monitoring (storage, redundancy, staleness, graph consistency) with periodic checks; visible warnings and JSON reports
|
|
147
|
+
- ✅ **Delta encoding** — 5-10x compression for similar objects using Levenshtein distance and SequenceMatcher; enabled in GC repack with multi-tier similarity filtering
|
|
148
|
+
- ✅ **Performance safeguards** — Multi-tier similarity filter (length ratio + SimHash) avoids O(n²×m²) worst-case comparisons
|
|
142
149
|
- ✅ **GPU acceleration** — Vector store detects GPU for embedding model when available
|
|
143
150
|
- ✅ **Optional** — `serve`, `daemon` (watch + auto-commit), `garden` (episode archival), MCP server; install extras as needed
|
|
144
151
|
|
|
@@ -469,8 +476,8 @@ The following 18 capabilities are implemented (or stubbed) per the agmem feature
|
|
|
469
476
|
|
|
470
477
|
| # | Feature | Description |
|
|
471
478
|
|---|---------|-------------|
|
|
472
|
-
| **7** | **Differential privacy** | Epsilon/delta budget per repo in `.mem/privacy_budget.json`. **Usage:** `agmem distill --private`, `agmem garden --private`; blocks when budget exceeded. Config: `differential_privacy.max_epsilon`, `delta`. |
|
|
473
|
-
| **8** | **
|
|
479
|
+
| **7** | **Differential privacy** | Epsilon/delta budget per repo in `.mem/privacy_budget.json`. **Usage:** `agmem distill --private`, `agmem garden --private`; blocks when budget exceeded. Config: `differential_privacy.max_epsilon`, `delta`. **Note:** Now correctly applied to actual facts during extraction, not metadata counts. |
|
|
480
|
+
| **8** | **Cryptographic proofs (proof-of-knowledge)** | Hash/signature-based proofs for keyword containment (Merkle set membership) and memory freshness (signed timestamp). **Command:** `agmem prove --memory <path> --property keyword\|freshness --value <v> [-o out]`. **IMPORTANT:** These are proof-of-knowledge, not true zero-knowledge proofs. Keyword proof leaks word count and allows verifier to test other words. Freshness proof relies on forgeable filesystem mtime. See `memvcs/core/zk_proofs.py` for details and migration path to zk-SNARKs. |
|
|
474
481
|
|
|
475
482
|
### Tier 4 — Storage and distribution
|
|
476
483
|
|
|
@@ -37,13 +37,15 @@ agmem solves all of these problems with a familiar Git-like interface.
|
|
|
37
37
|
- ✅ **Tamper-evident audit trail** — Append-only hash-chained log (init, add, commit, checkout, merge, push, pull, config); `agmem audit` and `agmem audit --verify`
|
|
38
38
|
- ✅ **Multi-agent trust** — Trust store (full / conditional / untrusted) per public key; applied on pull/merge; clone copies remote keys
|
|
39
39
|
- ✅ **Conflict resolution** — `agmem resolve` with ours/theirs/both; conflicts persisted in `.mem/merge/`; path-safe
|
|
40
|
-
- ✅ **Differential privacy** — Epsilon/delta budget in `.mem/privacy_budget.json`; `--private` on `agmem distill` and `agmem garden`; noise
|
|
40
|
+
- ✅ **Differential privacy** — Epsilon/delta budget in `.mem/privacy_budget.json`; `--private` on `agmem distill` and `agmem garden`; noise applies to fact-level data only (metadata fields excluded)
|
|
41
41
|
- ✅ **Pack files & GC** — `agmem gc [--repack]` (reachable from refs, prune loose, optional pack file + index); ObjectStore reads from pack when loose missing
|
|
42
42
|
- ✅ **Multi-provider LLM** — OpenAI and Anthropic via `memvcs.core.llm`; config/repo or env; used by gardener, distiller, consistency, merge
|
|
43
43
|
- ✅ **Temporal querying** — Point-in-time and range queries in temporal index; frontmatter timestamps
|
|
44
|
-
- ✅ **Federated collaboration** — `agmem federated push|pull`;
|
|
45
|
-
- ✅ **Zero-knowledge proofs** — `agmem prove` (hash/signature-based): keyword containment (Merkle set membership), memory freshness (signed timestamp)
|
|
46
|
-
- ✅ **Daemon health** —
|
|
44
|
+
- ✅ **Federated collaboration** — `agmem federated push|pull`; protocol-compliant summaries (agent_id, timestamp, topic_counts, fact_hashes); optional DP on outbound; coordinator API in docs/FEDERATED.md
|
|
45
|
+
- ✅ **Zero-knowledge proofs** — `agmem prove` (hash/signature-based): keyword containment (Merkle set membership), memory freshness (signed timestamp). **Note:** Current implementation is proof-of-knowledge with known limitations; see docs for migration to true zk-SNARKs.
|
|
46
|
+
- ✅ **Daemon health** — 4-point health monitoring (storage, redundancy, staleness, graph consistency) with periodic checks; visible warnings and JSON reports
|
|
47
|
+
- ✅ **Delta encoding** — 5-10x compression for similar objects using Levenshtein distance and SequenceMatcher; enabled in GC repack with multi-tier similarity filtering
|
|
48
|
+
- ✅ **Performance safeguards** — Multi-tier similarity filter (length ratio + SimHash) avoids O(n²×m²) worst-case comparisons
|
|
47
49
|
- ✅ **GPU acceleration** — Vector store detects GPU for embedding model when available
|
|
48
50
|
- ✅ **Optional** — `serve`, `daemon` (watch + auto-commit), `garden` (episode archival), MCP server; install extras as needed
|
|
49
51
|
|
|
@@ -374,8 +376,8 @@ The following 18 capabilities are implemented (or stubbed) per the agmem feature
|
|
|
374
376
|
|
|
375
377
|
| # | Feature | Description |
|
|
376
378
|
|---|---------|-------------|
|
|
377
|
-
| **7** | **Differential privacy** | Epsilon/delta budget per repo in `.mem/privacy_budget.json`. **Usage:** `agmem distill --private`, `agmem garden --private`; blocks when budget exceeded. Config: `differential_privacy.max_epsilon`, `delta`. |
|
|
378
|
-
| **8** | **
|
|
379
|
+
| **7** | **Differential privacy** | Epsilon/delta budget per repo in `.mem/privacy_budget.json`. **Usage:** `agmem distill --private`, `agmem garden --private`; blocks when budget exceeded. Config: `differential_privacy.max_epsilon`, `delta`. **Note:** Now correctly applied to actual facts during extraction, not metadata counts. |
|
|
380
|
+
| **8** | **Cryptographic proofs (proof-of-knowledge)** | Hash/signature-based proofs for keyword containment (Merkle set membership) and memory freshness (signed timestamp). **Command:** `agmem prove --memory <path> --property keyword\|freshness --value <v> [-o out]`. **IMPORTANT:** These are proof-of-knowledge, not true zero-knowledge proofs. Keyword proof leaks word count and allows verifier to test other words. Freshness proof relies on forgeable filesystem mtime. See `memvcs/core/zk_proofs.py` for details and migration path to zk-SNARKs. |
|
|
379
381
|
|
|
380
382
|
### Tier 4 — Storage and distribution
|
|
381
383
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agmem
|
|
3
|
-
Version: 0.1
|
|
3
|
+
Version: 0.2.1
|
|
4
4
|
Summary: Agentic Memory Version Control System - Git for AI agent memories
|
|
5
5
|
Home-page: https://github.com/vivek-tiwari-vt/agmem
|
|
6
6
|
Author: agmem Team
|
|
@@ -10,7 +10,7 @@ Project-URL: Homepage, https://github.com/vivek-tiwari-vt/agmem
|
|
|
10
10
|
Project-URL: Documentation, https://github.com/vivek-tiwari-vt/agmem#readme
|
|
11
11
|
Project-URL: Repository, https://github.com/vivek-tiwari-vt/agmem
|
|
12
12
|
Project-URL: Bug Tracker, https://github.com/vivek-tiwari-vt/agmem/issues
|
|
13
|
-
Keywords: ai,agent,memory,version-control,git,vcs,llm,merkle,audit,encryption,differential-privacy,trust,multi-agent
|
|
13
|
+
Keywords: ai,agent,memory,version-control,git,vcs,llm,merkle,audit,encryption,differential-privacy,trust,multi-agent,health-monitoring,delta-encoding,ipfs,federated
|
|
14
14
|
Classifier: Development Status :: 3 - Alpha
|
|
15
15
|
Classifier: Intended Audience :: Developers
|
|
16
16
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -71,6 +71,10 @@ Provides-Extra: ipfs
|
|
|
71
71
|
Requires-Dist: requests>=2.28.0; extra == "ipfs"
|
|
72
72
|
Provides-Extra: ipfs-daemon
|
|
73
73
|
Requires-Dist: ipfshttpclient>=0.8.0; extra == "ipfs-daemon"
|
|
74
|
+
Provides-Extra: coordinator
|
|
75
|
+
Requires-Dist: fastapi>=0.100.0; extra == "coordinator"
|
|
76
|
+
Requires-Dist: uvicorn[standard]>=0.22.0; extra == "coordinator"
|
|
77
|
+
Requires-Dist: pydantic>=2.0.0; extra == "coordinator"
|
|
74
78
|
Provides-Extra: all
|
|
75
79
|
Requires-Dist: mcp>=1.0.0; extra == "all"
|
|
76
80
|
Requires-Dist: cryptography>=41.0.0; extra == "all"
|
|
@@ -88,6 +92,7 @@ Requires-Dist: networkx>=3.0; extra == "all"
|
|
|
88
92
|
Requires-Dist: tiktoken>=0.5.0; extra == "all"
|
|
89
93
|
Requires-Dist: presidio-analyzer>=2.2.0; extra == "all"
|
|
90
94
|
Requires-Dist: requests>=2.28.0; extra == "all"
|
|
95
|
+
Requires-Dist: pydantic>=2.0.0; extra == "all"
|
|
91
96
|
Dynamic: author
|
|
92
97
|
Dynamic: home-page
|
|
93
98
|
Dynamic: license-file
|
|
@@ -132,13 +137,15 @@ agmem solves all of these problems with a familiar Git-like interface.
|
|
|
132
137
|
- ✅ **Tamper-evident audit trail** — Append-only hash-chained log (init, add, commit, checkout, merge, push, pull, config); `agmem audit` and `agmem audit --verify`
|
|
133
138
|
- ✅ **Multi-agent trust** — Trust store (full / conditional / untrusted) per public key; applied on pull/merge; clone copies remote keys
|
|
134
139
|
- ✅ **Conflict resolution** — `agmem resolve` with ours/theirs/both; conflicts persisted in `.mem/merge/`; path-safe
|
|
135
|
-
- ✅ **Differential privacy** — Epsilon/delta budget in `.mem/privacy_budget.json`; `--private` on `agmem distill` and `agmem garden`; noise
|
|
140
|
+
- ✅ **Differential privacy** — Epsilon/delta budget in `.mem/privacy_budget.json`; `--private` on `agmem distill` and `agmem garden`; noise applies to fact-level data only (metadata fields excluded)
|
|
136
141
|
- ✅ **Pack files & GC** — `agmem gc [--repack]` (reachable from refs, prune loose, optional pack file + index); ObjectStore reads from pack when loose missing
|
|
137
142
|
- ✅ **Multi-provider LLM** — OpenAI and Anthropic via `memvcs.core.llm`; config/repo or env; used by gardener, distiller, consistency, merge
|
|
138
143
|
- ✅ **Temporal querying** — Point-in-time and range queries in temporal index; frontmatter timestamps
|
|
139
|
-
- ✅ **Federated collaboration** — `agmem federated push|pull`;
|
|
140
|
-
- ✅ **Zero-knowledge proofs** — `agmem prove` (hash/signature-based): keyword containment (Merkle set membership), memory freshness (signed timestamp)
|
|
141
|
-
- ✅ **Daemon health** —
|
|
144
|
+
- ✅ **Federated collaboration** — `agmem federated push|pull`; protocol-compliant summaries (agent_id, timestamp, topic_counts, fact_hashes); optional DP on outbound; coordinator API in docs/FEDERATED.md
|
|
145
|
+
- ✅ **Zero-knowledge proofs** — `agmem prove` (hash/signature-based): keyword containment (Merkle set membership), memory freshness (signed timestamp). **Note:** Current implementation is proof-of-knowledge with known limitations; see docs for migration to true zk-SNARKs.
|
|
146
|
+
- ✅ **Daemon health** — 4-point health monitoring (storage, redundancy, staleness, graph consistency) with periodic checks; visible warnings and JSON reports
|
|
147
|
+
- ✅ **Delta encoding** — 5-10x compression for similar objects using Levenshtein distance and SequenceMatcher; enabled in GC repack with multi-tier similarity filtering
|
|
148
|
+
- ✅ **Performance safeguards** — Multi-tier similarity filter (length ratio + SimHash) avoids O(n²×m²) worst-case comparisons
|
|
142
149
|
- ✅ **GPU acceleration** — Vector store detects GPU for embedding model when available
|
|
143
150
|
- ✅ **Optional** — `serve`, `daemon` (watch + auto-commit), `garden` (episode archival), MCP server; install extras as needed
|
|
144
151
|
|
|
@@ -469,8 +476,8 @@ The following 18 capabilities are implemented (or stubbed) per the agmem feature
|
|
|
469
476
|
|
|
470
477
|
| # | Feature | Description |
|
|
471
478
|
|---|---------|-------------|
|
|
472
|
-
| **7** | **Differential privacy** | Epsilon/delta budget per repo in `.mem/privacy_budget.json`. **Usage:** `agmem distill --private`, `agmem garden --private`; blocks when budget exceeded. Config: `differential_privacy.max_epsilon`, `delta`. |
|
|
473
|
-
| **8** | **
|
|
479
|
+
| **7** | **Differential privacy** | Epsilon/delta budget per repo in `.mem/privacy_budget.json`. **Usage:** `agmem distill --private`, `agmem garden --private`; blocks when budget exceeded. Config: `differential_privacy.max_epsilon`, `delta`. **Note:** Now correctly applied to actual facts during extraction, not metadata counts. |
|
|
480
|
+
| **8** | **Cryptographic proofs (proof-of-knowledge)** | Hash/signature-based proofs for keyword containment (Merkle set membership) and memory freshness (signed timestamp). **Command:** `agmem prove --memory <path> --property keyword\|freshness --value <v> [-o out]`. **IMPORTANT:** These are proof-of-knowledge, not true zero-knowledge proofs. Keyword proof leaks word count and allows verifier to test other words. Freshness proof relies on forgeable filesystem mtime. See `memvcs/core/zk_proofs.py` for details and migration path to zk-SNARKs. |
|
|
474
481
|
|
|
475
482
|
### Tier 4 — Storage and distribution
|
|
476
483
|
|
|
@@ -65,18 +65,23 @@ memvcs/commands/timeline.py
|
|
|
65
65
|
memvcs/commands/tree.py
|
|
66
66
|
memvcs/commands/verify.py
|
|
67
67
|
memvcs/commands/when.py
|
|
68
|
+
memvcs/coordinator/__init__.py
|
|
69
|
+
memvcs/coordinator/server.py
|
|
68
70
|
memvcs/core/__init__.py
|
|
69
71
|
memvcs/core/access_index.py
|
|
70
72
|
memvcs/core/audit.py
|
|
73
|
+
memvcs/core/compression_metrics.py
|
|
71
74
|
memvcs/core/compression_pipeline.py
|
|
72
75
|
memvcs/core/config_loader.py
|
|
73
76
|
memvcs/core/consistency.py
|
|
74
77
|
memvcs/core/constants.py
|
|
75
78
|
memvcs/core/crypto_verify.py
|
|
76
79
|
memvcs/core/decay.py
|
|
80
|
+
memvcs/core/delta.py
|
|
77
81
|
memvcs/core/diff.py
|
|
78
82
|
memvcs/core/distiller.py
|
|
79
83
|
memvcs/core/encryption.py
|
|
84
|
+
memvcs/core/fast_similarity.py
|
|
80
85
|
memvcs/core/federated.py
|
|
81
86
|
memvcs/core/gardener.py
|
|
82
87
|
memvcs/core/hooks.py
|
|
@@ -87,6 +92,8 @@ memvcs/core/objects.py
|
|
|
87
92
|
memvcs/core/pack.py
|
|
88
93
|
memvcs/core/pii_scanner.py
|
|
89
94
|
memvcs/core/privacy_budget.py
|
|
95
|
+
memvcs/core/privacy_validator.py
|
|
96
|
+
memvcs/core/protocol_builder.py
|
|
90
97
|
memvcs/core/refs.py
|
|
91
98
|
memvcs/core/remote.py
|
|
92
99
|
memvcs/core/repository.py
|
|
@@ -107,6 +114,8 @@ memvcs/core/storage/base.py
|
|
|
107
114
|
memvcs/core/storage/gcs.py
|
|
108
115
|
memvcs/core/storage/local.py
|
|
109
116
|
memvcs/core/storage/s3.py
|
|
117
|
+
memvcs/health/__init__.py
|
|
118
|
+
memvcs/health/monitor.py
|
|
110
119
|
memvcs/integrations/__init__.py
|
|
111
120
|
memvcs/integrations/mcp_server.py
|
|
112
121
|
memvcs/integrations/web_ui/__init__.py
|
|
@@ -122,16 +131,22 @@ tests/test_access_index.py
|
|
|
122
131
|
tests/test_advanced_commands.py
|
|
123
132
|
tests/test_audit.py
|
|
124
133
|
tests/test_commit_importance.py
|
|
134
|
+
tests/test_compression_pipeline.py
|
|
125
135
|
tests/test_consistency.py
|
|
126
136
|
tests/test_crypto_verify.py
|
|
127
137
|
tests/test_decay.py
|
|
138
|
+
tests/test_delta_encoding.py
|
|
139
|
+
tests/test_distiller_dp.py
|
|
128
140
|
tests/test_edge_cases.py
|
|
129
141
|
tests/test_encryption.py
|
|
130
142
|
tests/test_federated.py
|
|
143
|
+
tests/test_health_monitor.py
|
|
144
|
+
tests/test_ipfs_integration.py
|
|
131
145
|
tests/test_ipfs_remote.py
|
|
132
146
|
tests/test_llm_provider.py
|
|
133
147
|
tests/test_objects.py
|
|
134
148
|
tests/test_pack_gc.py
|
|
149
|
+
tests/test_performance_benchmarks.py
|
|
135
150
|
tests/test_pii.py
|
|
136
151
|
tests/test_plan_features.py
|
|
137
152
|
tests/test_privacy_budget.py
|
|
@@ -17,6 +17,7 @@ networkx>=3.0
|
|
|
17
17
|
tiktoken>=0.5.0
|
|
18
18
|
presidio-analyzer>=2.2.0
|
|
19
19
|
requests>=2.28.0
|
|
20
|
+
pydantic>=2.0.0
|
|
20
21
|
|
|
21
22
|
[anthropic]
|
|
22
23
|
anthropic>=0.18.0
|
|
@@ -25,6 +26,11 @@ anthropic>=0.18.0
|
|
|
25
26
|
boto3>=1.34.0
|
|
26
27
|
google-cloud-storage>=2.0.0
|
|
27
28
|
|
|
29
|
+
[coordinator]
|
|
30
|
+
fastapi>=0.100.0
|
|
31
|
+
uvicorn[standard]>=0.22.0
|
|
32
|
+
pydantic>=2.0.0
|
|
33
|
+
|
|
28
34
|
[crypto]
|
|
29
35
|
cryptography>=41.0.0
|
|
30
36
|
|
|
@@ -23,7 +23,7 @@ In `.mem/config.json` or user config:
|
|
|
23
23
|
|
|
24
24
|
- `coordinator_url`: Base URL of the coordinator (no trailing slash).
|
|
25
25
|
- `memory_types`: Which memory dirs to include in the summary.
|
|
26
|
-
- `differential_privacy.enabled`: If true, numeric fields
|
|
26
|
+
- `differential_privacy.enabled`: If true, fact-level numeric fields are noised before push (metadata is exempt).
|
|
27
27
|
|
|
28
28
|
## Coordinator API
|
|
29
29
|
|
|
@@ -33,15 +33,22 @@ The coordinator must expose two endpoints.
|
|
|
33
33
|
|
|
34
34
|
**Request**
|
|
35
35
|
|
|
36
|
-
- Body: JSON object (
|
|
36
|
+
- Body: JSON object (protocol-compliant summary envelope).
|
|
37
37
|
- `Content-Type: application/json`.
|
|
38
38
|
|
|
39
39
|
**Summary shape**
|
|
40
40
|
|
|
41
|
+
Top-level envelope:
|
|
42
|
+
|
|
43
|
+
- `summary`: object containing the fields below.
|
|
44
|
+
|
|
45
|
+
Summary fields:
|
|
46
|
+
|
|
47
|
+
- `agent_id`: deterministic client identifier (SHA-256).
|
|
48
|
+
- `timestamp`: ISO-8601 UTC timestamp.
|
|
41
49
|
- `memory_types`: list of strings (e.g. `["episodic", "semantic"]`).
|
|
42
|
-
- `
|
|
43
|
-
- `
|
|
44
|
-
- `fact_count`: integer (total fact/file count; may be noised if DP enabled).
|
|
50
|
+
- `topic_counts`: dict of memory type → integer count (may be noised if DP enabled).
|
|
51
|
+
- `fact_hashes`: list of strings (hashes; no raw content).
|
|
45
52
|
|
|
46
53
|
**Response**
|
|
47
54
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# agmem Test Report — What Works and What Doesn’t
|
|
2
2
|
|
|
3
|
-
This report is based on full-flow tests (`scripts/test_full_flow.py`), manual command runs, security fixes, and the knowledge graph feature.
|
|
3
|
+
This report is based on full-flow tests (`scripts/test_full_flow.py`), automated pytest runs, manual command runs, security fixes, and the knowledge graph feature.
|
|
4
|
+
|
|
5
|
+
**Latest automated run (2026-02-01):** 246 passed, 5 skipped in ~45s.
|
|
4
6
|
|
|
5
7
|
---
|
|
6
8
|
|
|
@@ -82,11 +84,13 @@ This report is based on full-flow tests (`scripts/test_full_flow.py`), manual co
|
|
|
82
84
|
|------|--------|------|
|
|
83
85
|
| **Crypto** | ✅ Tests | Merkle build/verify, tampered blob fails verification, signature present but no public key. |
|
|
84
86
|
| **Encryption** | ✅ Tests | Round-trip, wrong key fails, corrupted ciphertext fails. |
|
|
85
|
-
| **Privacy budget** | ✅ Tests | load_budget, spend_epsilon, add_noise, Gardener/Distiller DP integration (mocked). |
|
|
87
|
+
| **Privacy budget** | ✅ Tests | load_budget, spend_epsilon, add_noise, Gardener/Distiller DP integration (mocked), DP sampling (no fixed seed), metadata fields exempted from noise. |
|
|
86
88
|
| **Pack/GC** | ✅ Tests | list_loose_objects, run_gc, write_pack, retrieve_from_pack, ObjectStore read from pack, run_repack dry-run. |
|
|
87
89
|
| **ZK proofs** | ✅ Tests | prove_keyword_containment / verify_proof round-trip; keyword not in file returns False; freshness (skipped without signing key). |
|
|
88
|
-
| **Federated** | ✅ Tests |
|
|
90
|
+
| **Federated** | ✅ Tests | protocol-compliant summary (agent_id, timestamp, topic_counts, fact_hashes), DP noising; push/pull with mock coordinator. |
|
|
89
91
|
| **IPFS** | ✅ Tests | parse_ipfs_url, bundle/unbundle round-trip; push/pull with mock gateway. |
|
|
92
|
+
| **Protocol & privacy** | ✅ Tests | schema validation, privacy audit (metadata noise rejection), strict mode enforcement. |
|
|
93
|
+
| **Performance** | ✅ Tests | Levenshtein, SimHash, multi-tier similarity filtering regression checks. |
|
|
90
94
|
|
|
91
95
|
### Security (vulnerability check)
|
|
92
96
|
|
|
@@ -141,7 +141,7 @@ For more information: https://github.com/vivek-tiwari-vt/agmem
|
|
|
141
141
|
""",
|
|
142
142
|
)
|
|
143
143
|
|
|
144
|
-
parser.add_argument("--version", "-v", action="version", version="%(prog)s 0.1
|
|
144
|
+
parser.add_argument("--version", "-v", action="version", version="%(prog)s 0.2.1")
|
|
145
145
|
|
|
146
146
|
parser.add_argument("--verbose", action="store_true", help="Enable verbose output")
|
|
147
147
|
|
|
@@ -227,11 +227,12 @@ class DaemonCommand:
|
|
|
227
227
|
while running:
|
|
228
228
|
time.sleep(1)
|
|
229
229
|
|
|
230
|
-
# Periodic health check (Merkle/signature
|
|
230
|
+
# Periodic health check (Merkle/signature + operational metrics). Alert only; no destructive action.
|
|
231
231
|
if (
|
|
232
232
|
health_check_interval
|
|
233
233
|
and (time.time() - last_health_check) >= health_check_interval
|
|
234
234
|
):
|
|
235
|
+
# Cryptographic integrity check
|
|
235
236
|
try:
|
|
236
237
|
from ..core.crypto_verify import verify_commit, load_public_key
|
|
237
238
|
|
|
@@ -251,6 +252,41 @@ class DaemonCommand:
|
|
|
251
252
|
sys.stderr.write("Run 'agmem fsck' for safe integrity check.\n")
|
|
252
253
|
except Exception:
|
|
253
254
|
pass
|
|
255
|
+
|
|
256
|
+
# Operational health checks (storage, redundancy, stale memory, graph consistency)
|
|
257
|
+
try:
|
|
258
|
+
from ..health.monitor import HealthMonitor
|
|
259
|
+
|
|
260
|
+
health_monitor = HealthMonitor(repo.root)
|
|
261
|
+
report = health_monitor.perform_all_checks()
|
|
262
|
+
|
|
263
|
+
if report.get("warnings"):
|
|
264
|
+
for warning in report["warnings"]:
|
|
265
|
+
sys.stderr.write(f"Health warning: {warning}\n")
|
|
266
|
+
|
|
267
|
+
# Log summary metrics
|
|
268
|
+
if report.get("storage"):
|
|
269
|
+
storage = report["storage"]
|
|
270
|
+
if "total_size_mb" in storage:
|
|
271
|
+
sys.stderr.write(
|
|
272
|
+
f"Storage: {storage['total_size_mb']:.1f}MB "
|
|
273
|
+
f"({storage['packed_objects']} packed objects)\n"
|
|
274
|
+
)
|
|
275
|
+
if report.get("redundancy"):
|
|
276
|
+
red = report["redundancy"]
|
|
277
|
+
if "redundancy_percentage" in red:
|
|
278
|
+
sys.stderr.write(
|
|
279
|
+
f"Redundancy: {red['redundancy_percentage']:.1f}%\n"
|
|
280
|
+
)
|
|
281
|
+
if report.get("stale_memory"):
|
|
282
|
+
stale = report["stale_memory"]
|
|
283
|
+
if "stale_percentage" in stale:
|
|
284
|
+
sys.stderr.write(
|
|
285
|
+
f"Stale memory: {stale['stale_percentage']:.1f}%\n"
|
|
286
|
+
)
|
|
287
|
+
except Exception:
|
|
288
|
+
pass
|
|
289
|
+
|
|
254
290
|
last_health_check = time.time()
|
|
255
291
|
|
|
256
292
|
if handler.pending:
|
|
@@ -46,6 +46,11 @@ class DistillCommand:
|
|
|
46
46
|
action="store_true",
|
|
47
47
|
help="Use differential privacy (spend epsilon from budget)",
|
|
48
48
|
)
|
|
49
|
+
parser.add_argument(
|
|
50
|
+
"--no-compress",
|
|
51
|
+
action="store_true",
|
|
52
|
+
help="Disable compression pipeline preprocessing",
|
|
53
|
+
)
|
|
49
54
|
|
|
50
55
|
@staticmethod
|
|
51
56
|
def execute(args) -> int:
|
|
@@ -73,6 +78,7 @@ class DistillCommand:
|
|
|
73
78
|
source_dir=args.source,
|
|
74
79
|
target_dir=args.target,
|
|
75
80
|
create_safety_branch=not args.no_branch,
|
|
81
|
+
use_compression_pipeline=not getattr(args, "no_compress", False),
|
|
76
82
|
use_dp=use_dp,
|
|
77
83
|
dp_epsilon=dp_epsilon,
|
|
78
84
|
dp_delta=dp_delta,
|