alma-memory 0.5.0__py3-none-any.whl → 0.5.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. alma/__init__.py +33 -1
  2. alma/core.py +124 -16
  3. alma/extraction/auto_learner.py +4 -3
  4. alma/graph/__init__.py +26 -1
  5. alma/graph/backends/__init__.py +14 -0
  6. alma/graph/backends/kuzu.py +624 -0
  7. alma/graph/backends/memgraph.py +432 -0
  8. alma/integration/claude_agents.py +22 -10
  9. alma/learning/protocols.py +3 -3
  10. alma/mcp/tools.py +9 -11
  11. alma/observability/__init__.py +84 -0
  12. alma/observability/config.py +302 -0
  13. alma/observability/logging.py +424 -0
  14. alma/observability/metrics.py +583 -0
  15. alma/observability/tracing.py +440 -0
  16. alma/retrieval/engine.py +65 -4
  17. alma/storage/__init__.py +29 -0
  18. alma/storage/azure_cosmos.py +343 -132
  19. alma/storage/base.py +58 -0
  20. alma/storage/constants.py +103 -0
  21. alma/storage/file_based.py +3 -8
  22. alma/storage/migrations/__init__.py +21 -0
  23. alma/storage/migrations/base.py +321 -0
  24. alma/storage/migrations/runner.py +323 -0
  25. alma/storage/migrations/version_stores.py +337 -0
  26. alma/storage/migrations/versions/__init__.py +11 -0
  27. alma/storage/migrations/versions/v1_0_0.py +373 -0
  28. alma/storage/postgresql.py +185 -78
  29. alma/storage/sqlite_local.py +149 -50
  30. alma/testing/__init__.py +46 -0
  31. alma/testing/factories.py +301 -0
  32. alma/testing/mocks.py +389 -0
  33. {alma_memory-0.5.0.dist-info → alma_memory-0.5.1.dist-info}/METADATA +42 -8
  34. {alma_memory-0.5.0.dist-info → alma_memory-0.5.1.dist-info}/RECORD +36 -19
  35. {alma_memory-0.5.0.dist-info → alma_memory-0.5.1.dist-info}/WHEEL +0 -0
  36. {alma_memory-0.5.0.dist-info → alma_memory-0.5.1.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: alma-memory
3
- Version: 0.5.0
3
+ Version: 0.5.1
4
4
  Summary: Agent Learning Memory Architecture - Persistent memory for AI agents
5
5
  Author-email: RBKunnela <aiagentsprompt@gmail.com>
6
6
  License: MIT
@@ -41,6 +41,10 @@ Requires-Dist: pinecone>=3.0.0; extra == "pinecone"
41
41
  Provides-Extra: mcp
42
42
  Requires-Dist: pydantic>=2.0.0; extra == "mcp"
43
43
  Requires-Dist: aiohttp>=3.9.0; extra == "mcp"
44
+ Provides-Extra: observability
45
+ Requires-Dist: opentelemetry-api>=1.20.0; extra == "observability"
46
+ Requires-Dist: opentelemetry-sdk>=1.20.0; extra == "observability"
47
+ Requires-Dist: opentelemetry-exporter-otlp-proto-grpc>=1.20.0; extra == "observability"
44
48
  Provides-Extra: dev
45
49
  Requires-Dist: pytest>=7.0.0; extra == "dev"
46
50
  Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
@@ -52,7 +56,7 @@ Requires-Dist: black>=24.0.0; extra == "dev"
52
56
  Requires-Dist: bandit[toml]>=1.7.0; extra == "dev"
53
57
  Requires-Dist: numpy>=1.24.0; extra == "dev"
54
58
  Provides-Extra: all
55
- Requires-Dist: alma-memory[azure,chroma,dev,local,mcp,pinecone,postgres,qdrant]; extra == "all"
59
+ Requires-Dist: alma-memory[azure,chroma,dev,local,mcp,observability,pinecone,postgres,qdrant]; extra == "all"
56
60
 
57
61
  # ALMA - Agent Learning Memory Architecture
58
62
 
@@ -79,7 +83,7 @@ ALMA isn't just another memory framework. Here's what sets it apart from alterna
79
83
  | **Event System** | Webhooks + in-process callbacks | None | React to memory changes in real-time |
80
84
  | **TypeScript SDK** | Full-featured client library | None | First-class JavaScript/TypeScript support |
81
85
  | **Vector DB Support** | 6 backends (PostgreSQL, Qdrant, Pinecone, Chroma, SQLite, Azure) | Limited | Deploy anywhere |
82
- | **Graph Memory** | Pluggable backends (Neo4j, In-memory) | Limited | Entity relationship tracking |
86
+ | **Graph Memory** | Pluggable backends (Neo4j, Memgraph, Kuzu, In-memory) | Limited | Entity relationship tracking |
83
87
  | **Harness Pattern** | Decouples agent from domain memory | None | Reusable agent architecture |
84
88
  | **MCP Integration** | Native stdio/HTTP server | None | Direct Claude Code integration |
85
89
  | **Domain Memory Factory** | 6 pre-built schemas | None | Instant setup for any domain |
@@ -111,9 +115,16 @@ ALMA isn't just another memory framework. Here's what sets it apart from alterna
111
115
  - **Graph Database Abstraction** (`alma/graph/`)
112
116
  - Pluggable `GraphBackend` interface
113
117
  - Neo4j backend for production
118
+ - Memgraph backend for high-performance in-memory graphs
119
+ - Kuzu backend for embedded graph storage (no server required)
114
120
  - In-memory backend for testing
115
121
  - Factory function `create_graph_backend()` for easy setup
116
122
 
123
+ - **Testing Module** (`alma/testing/`)
124
+ - `MockStorage` - In-memory storage backend for isolated testing
125
+ - `MockEmbedder` - Deterministic fake embedding provider
126
+ - Factory functions for creating test data with sensible defaults
127
+
117
128
  ### Phase 1: Core Features
118
129
 
119
130
  - **Memory Consolidation Engine** (`alma/consolidation/`)
@@ -434,14 +445,23 @@ Capture entity relationships for complex reasoning:
434
445
  ```python
435
446
  from alma.graph import create_graph_backend, BackendGraphStore, EntityExtractor
436
447
 
437
- # Create graph backend (Neo4j for production, memory for testing)
448
+ # Create graph backend - multiple options available:
449
+
450
+ # Neo4j (production, hosted)
438
451
  backend = create_graph_backend(
439
452
  "neo4j",
440
453
  uri="neo4j+s://xxx.databases.neo4j.io",
441
454
  username="neo4j",
442
455
  password="your-password"
443
456
  )
444
- # Or for testing:
457
+
458
+ # Memgraph (high-performance, in-memory)
459
+ # backend = create_graph_backend("memgraph", uri="bolt://localhost:7687")
460
+
461
+ # Kuzu (embedded, no server required)
462
+ # backend = create_graph_backend("kuzu", database_path="./my_graph_db")
463
+
464
+ # In-memory (testing)
445
465
  # backend = create_graph_backend("memory")
446
466
 
447
467
  # Create store with backend
@@ -693,9 +713,12 @@ print(f"Recommendation: {signal.recommendation}")
693
713
  | +---------------+ +------------------+ +---------------+ |
694
714
  +-------------------------------------------------------------------------+
695
715
  | GRAPH LAYER |
696
- | +---------------+ +------------------+ |
697
- | | Neo4j | | In-Memory | |
698
- | +---------------+ +------------------+ |
716
+ | +---------------+ +------------------+ +---------------+ |
717
+ | | Neo4j | | Memgraph | | Kuzu | |
718
+ | +---------------+ +------------------+ +---------------+ |
719
+ | +---------------+ |
720
+ | | In-Memory | |
721
+ | +---------------+ |
699
722
  +-------------------------------------------------------------------------+
700
723
  | INTEGRATION LAYER |
701
724
  | +-------------------------------------------------------------------+ |
@@ -819,6 +842,7 @@ chroma:
819
842
  | Pinecone Backend | Serverless vector DB | Done |
820
843
  | Chroma Backend | Lightweight vector DB | Done |
821
844
  | Graph Abstraction | Pluggable graph backends | Done |
845
+ | Testing Module | Mocks and factories for testing | Done |
822
846
 
823
847
  ---
824
848
 
@@ -850,6 +874,16 @@ docker run -p 6333:6333 qdrant/qdrant
850
874
  - Ensure `embedding_dim` in config matches your embedding provider
851
875
  - Local: 384, Azure text-embedding-3-small: 1536
852
876
 
877
+ **Memgraph connection refused**
878
+ ```bash
879
+ # Start Memgraph with Docker
880
+ docker run -p 7687:7687 memgraph/memgraph-mage
881
+ ```
882
+
883
+ **Kuzu database locked**
884
+ - Ensure only one process accesses the database at a time
885
+ - Use `read_only=True` for concurrent read access
886
+
853
887
  ### Debug Logging
854
888
 
855
889
  ```python
@@ -1,5 +1,5 @@
1
- alma/__init__.py,sha256=XJ-yrVNtw5A12ZU5Yc16h5_m7eDdiTnpQRqn9YCkFas,3932
2
- alma/core.py,sha256=AwTiX44nWk_Es3Sz5jR6nyF64-8O6j9Btjqsn7fcxJg,9688
1
+ alma/__init__.py,sha256=kki36AOOriED4U04-qvRSgjrZLGiz7NPdoKFXesQGZc,4770
2
+ alma/core.py,sha256=4JhEMh-xDZnU84hXtZXHd4uHuo-JWFzzOSEVcCnCVbI,13276
3
3
  alma/exceptions.py,sha256=chGNPmOUWJnx-9-fAtBZIBLBeFmINTHuzqsejt_rrk4,873
4
4
  alma/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  alma/types.py,sha256=708rjkZwOfI7PgvfK0N2UyIMpjzi6Jf0vVilfEyWKbM,8167
@@ -21,13 +21,15 @@ alma/events/storage_mixin.py,sha256=t4Y1BCv3CTz_0FoJtAblf4s_qIWK3hrNAH4CLqc2DTo,
21
21
  alma/events/types.py,sha256=DGJe8W5DNs8SHYRbwdgV7OoRF952HoEVz0T9dv5A-LA,3795
22
22
  alma/events/webhook.py,sha256=eavcXDTYKYu3GueDrAd0L8JFUkLczjNgmZJpiia0Rvw,12983
23
23
  alma/extraction/__init__.py,sha256=2ZYxMAjjbgvWvtMn4flCsFla7OSR45bMtuUDuRRlG9E,597
24
- alma/extraction/auto_learner.py,sha256=B7qMcJ-wR69aHaYPr9D8SURBAAkwq4AXhJ44nJhED2Y,9117
24
+ alma/extraction/auto_learner.py,sha256=SzB1bnUvza7zQ4c62e2uCv0BH4SGk89Pt7Qvp6sihMo,9145
25
25
  alma/extraction/extractor.py,sha256=2VC4tcnHAF1zjax7MI09jb9Q3dUmWxFeBLOMd-7Aj1E,13160
26
- alma/graph/__init__.py,sha256=KyC2wWBN9bivwL7yDOpkKfMXOSU8zLFFurMS2BxfReE,1903
26
+ alma/graph/__init__.py,sha256=pvX_r8Ss8vahFbJGCLbqXPCEmJ8V7pTimta0WPteIV8,2673
27
27
  alma/graph/base.py,sha256=A3yqNI4DiY0D3MuNaa6Sv41hfzzqwrs38ahs6qcaD-g,4042
28
28
  alma/graph/extraction.py,sha256=Esb4jRHAJxE3QRutSpasMmRKq_MMDQtcMOnHeahLcZY,6063
29
29
  alma/graph/store.py,sha256=V9KjfFaKagOxD2FYITrjnQgDdu9U2z4wetHBnXhqROc,28450
30
- alma/graph/backends/__init__.py,sha256=IKewfN2G0QJfmPBJePHCkfVILq1PY5ehggMeJziX_Os,421
30
+ alma/graph/backends/__init__.py,sha256=RdrLSwZGeG5MGBrb9uGI-lAzl_90ggnih1yNbtYupts,870
31
+ alma/graph/backends/kuzu.py,sha256=F3cnRI7V-HdMQ0duXBFZmLrUhx-Fd5kAIWy5kQvvvYw,21172
32
+ alma/graph/backends/memgraph.py,sha256=m3m0Ajoqof_eFTgwH7B5JeV3a2EWGd0axpat93mhGyo,15245
31
33
  alma/graph/backends/memory.py,sha256=qdb8ixGHZKMqs6673sCJORteD6KaTLDpXhs8fJS2oQs,8218
32
34
  alma/graph/backends/neo4j.py,sha256=gSL813Et0lEx8zrLv6R5mgq651ZMcnJPN__iPhF561o,14347
33
35
  alma/harness/__init__.py,sha256=ZuORMt41ArCXlLcrpaCuHW3BUvH27YcxWRnqQ6ZXiMo,684
@@ -37,40 +39,55 @@ alma/initializer/__init__.py,sha256=VhG5hSgdselyToBnvixcyjrTtsnNhVvWdi7kfUVc0RM,
37
39
  alma/initializer/initializer.py,sha256=2SyHgreopClPQ0loyA29lcJp_pK1ssubK2529cQk8hc,13204
38
40
  alma/initializer/types.py,sha256=ADeWwyqiG9uI0DkukDNGA81JNeCPfY6m__LsKgXQmZA,7875
39
41
  alma/integration/__init__.py,sha256=YhJSurb10eOlh227HqqgCtzayDljbmjI2dn347HVua0,1276
40
- alma/integration/claude_agents.py,sha256=-256HWoG7Z-g6Kgx21QBnEa_GBpkZ37fr9NwiJH67Ec,13263
42
+ alma/integration/claude_agents.py,sha256=cJTDgidqTX5no92yPG2ZXSzCJjcP1tbvaEAO-7VT784,13647
41
43
  alma/integration/helena.py,sha256=BcTvac8vGmbHwogAbNMQsZssMOlBT-DxwLKWPfPXie4,12099
42
44
  alma/integration/victor.py,sha256=DR_6RLj1hpNHnTUC5jhWo59WQr7qDF6VOtn98cyxhoo,13527
43
45
  alma/learning/__init__.py,sha256=XH3H-vEMY1TOBQxiC3H6c_iWtzR8xrQH9PqQL1vv6b4,1870
44
46
  alma/learning/forgetting.py,sha256=TSBZ0Ad8hJEIPXteXse78czyPQBDEiPgNAvkH__e9bg,46546
45
47
  alma/learning/heuristic_extractor.py,sha256=FO-TIS1NQZUdQXuD924-2odw7GQETRxchxjxk-fzYGs,12084
46
- alma/learning/protocols.py,sha256=0x3wi4xeMRBBJVRJ-9mXIemFirQfh1-pM7-9Apz2Kho,12229
48
+ alma/learning/protocols.py,sha256=OSYAo5r9o3Zx6wGyKGcN_4qq0QOJQfj5Y_2awlArvPw,12239
47
49
  alma/learning/validation.py,sha256=i_-TmoDyBXVHjAiEQnb1QtliuLxNsbxwud3C0IoaHjY,11065
48
50
  alma/mcp/__init__.py,sha256=Qr913n8XG02abbBs78mMKKLo3VzVJMt71TehAhuhqrE,947
49
51
  alma/mcp/__main__.py,sha256=ySdPB2MK-Mau6ofOlAsIv-jIXuyMpUpJuoNbj-GEqwA,3954
50
52
  alma/mcp/resources.py,sha256=5YxoTCgzBzFoP07US_ZuBPnrL7F0t9WAX5Cins7XJf8,3499
51
53
  alma/mcp/server.py,sha256=5qBk35JDvWwh6e8xNl7mj_L7O3NpfeRkPqo_Mm7k7pk,21541
52
- alma/mcp/tools.py,sha256=Wwq2aFDnnSLDhTAzHbnujC4PJLvCIhqPf-_mQnwSBj0,14585
54
+ alma/mcp/tools.py,sha256=wbHJ9-fyz_mH9F-kfFpP6JDtxBPMjTflWTwpdUtWuPk,14566
55
+ alma/observability/__init__.py,sha256=nnWZ5jKNW45fageF6y0rm6CDA4dcqqvChAWAhORiRlI,1831
56
+ alma/observability/config.py,sha256=Kphbd5j6voJMcgpKWZHZuM6oJt_XIrUozde0sgtkXw0,10423
57
+ alma/observability/logging.py,sha256=v-K1nviFwwIVPIgtwzqAUJizFQ_60nq04KkoaJV-cXI,12275
58
+ alma/observability/metrics.py,sha256=GJdtIefL7k_WzHZO2FIJ6NoIs_zDeu2olM8_LZCRQx4,17707
59
+ alma/observability/tracing.py,sha256=7hplIcF0-kw_2tq6kFK6DBA6qLl_ziQiRbVVTRVZ6FA,13300
53
60
  alma/progress/__init__.py,sha256=0VqMDlICHRHrYFAp-HzNVaN1JikST--kFGDd7803WGk,371
54
61
  alma/progress/tracker.py,sha256=0E7YghcEHiw1Gorm28ON7SBOlVb7SXSHUHy8cGeMg0k,19290
55
62
  alma/progress/types.py,sha256=sxouhkNO6OLmDuhrPnn6uqEEwOj6nLZeRh-krgTh4nA,7026
56
63
  alma/retrieval/__init__.py,sha256=htuoJ-jiaUooA3bdc9DEcgfpNHlqlqGqiKgdjwq9y1Y,1006
57
64
  alma/retrieval/cache.py,sha256=l1VY2k6OzvrFxJfzkZ1rch9zWfl2-80pttgW_11sxbc,34585
58
65
  alma/retrieval/embeddings.py,sha256=XwTjPnnfW4VB9FGN3FQ_nWZ1hAaJLufXNZYbWMwkct0,6496
59
- alma/retrieval/engine.py,sha256=AH4junHgWbzWYD5kqHvcxQW_YuRfHl_dBtGbEJD4egQ,13016
66
+ alma/retrieval/engine.py,sha256=cEtUd4ih9PnMPttpDGpIwznEdhRLiklMit1NDXI6fCE,15346
60
67
  alma/retrieval/scoring.py,sha256=WaMu4HN5ui9y0yV8AKEcix0xvav4mvXV7rn8ihAYURw,10350
61
68
  alma/session/__init__.py,sha256=4LWuYdF8N5XxcmVZA8verJV5XF_eRCgU-M_0Hkfovgg,352
62
69
  alma/session/manager.py,sha256=U_a2_1VySD_QwJY6tyukko4pHDcxQaLzUZmgUH4I2W4,12638
63
70
  alma/session/types.py,sha256=VIIE330GiWAkWN4SaJhUa_BrpEdLMWIbUvTRciT6C8I,9501
64
- alma/storage/__init__.py,sha256=CwH7w9O-OGpC1osh-UxmWao6fJmmMyaGeCSpjfbrE-c,1520
65
- alma/storage/azure_cosmos.py,sha256=cw2jkATSurLmRJScIHnMFFCeknQDAep5izB_ByiwahI,35345
66
- alma/storage/base.py,sha256=jdkNCKLId99nLWrWNdSDfpu09r4Raapz245OfOaA3RA,14175
71
+ alma/storage/__init__.py,sha256=pz21kK-BshEFUePhbZJXJrxG8XZpV9x25S92rCUMMeg,2190
72
+ alma/storage/azure_cosmos.py,sha256=l9w9-3rV12QMszilJvB_7aOiAp3ZyTOW0c61tutzHaY,44856
73
+ alma/storage/base.py,sha256=NyLW6FJ-B24Ui13PEtAWNFN3u_cmsdj1EOpHTxlTojU,15914
67
74
  alma/storage/chroma.py,sha256=Csim64cbtX_z6g2fsy91xEpnsRGQ_Llb8vu7QOOJ-lE,51218
68
- alma/storage/file_based.py,sha256=NaDytkeBRmreGsH8_F62UFiTLheuhRTSAQSAeBbuWsg,22249
75
+ alma/storage/constants.py,sha256=dL7AycQvGbMZkXaDUFeSHiTBQdm8bhAPEdzSijaqnxM,2870
76
+ alma/storage/file_based.py,sha256=cbvL50-p3bnTQF2XcIOZY0q3J7K42pPKhptwRRBlE94,22046
69
77
  alma/storage/pinecone.py,sha256=dGgncFgLZUsMRAt6nnlFISDNbsTU0ZFahiTXle08eRk,37904
70
- alma/storage/postgresql.py,sha256=QLM11lrHp11hEfqbnKWVNtCU8kECy9o2Jk4fQLgKnYY,54477
78
+ alma/storage/postgresql.py,sha256=H1QWUpi3ZfVzsjKxiMXI-mM9LV298QJexqvAIZVLXwc,59966
71
79
  alma/storage/qdrant.py,sha256=We74ewKkGdLpfpsZC-40MVLkzrjJHP49xcg7t7aF1Gg,43460
72
- alma/storage/sqlite_local.py,sha256=aa4ZWqoib7y9Lma1u5ZjAzHxFAk41kgFW4PmTDm9cPI,48854
73
- alma_memory-0.5.0.dist-info/METADATA,sha256=3vFcHkpOCQb5W0ZEi6hwmWUBQh60olwkA8VNz2NfiKk,28249
74
- alma_memory-0.5.0.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
75
- alma_memory-0.5.0.dist-info/top_level.txt,sha256=5oN68LXctTl8a8i1LA-5WqSaP-pDA-J0x1AfCFfLm4A,5
76
- alma_memory-0.5.0.dist-info/RECORD,,
80
+ alma/storage/sqlite_local.py,sha256=IiIdpP4cfqPyJsRcyCP9FH2DwI3BnvfImG4GmJ0h5dc,52688
81
+ alma/storage/migrations/__init__.py,sha256=32NDopwU1uz2uubUHQrbFrRD4_Xa8gGzxNjtHUtAO8M,422
82
+ alma/storage/migrations/base.py,sha256=HGzgoaek52dkLNxlcA7j3tFi2__55kF-XlE-WPVtOYo,8968
83
+ alma/storage/migrations/runner.py,sha256=CVdxsnyizXW66PwRGXWfpmfIwDtFIw9qablYxkY8llg,10197
84
+ alma/storage/migrations/version_stores.py,sha256=WGgCMR0v0ebcYM6gEr6BaH6jajckbOUVqvHgPmLFFvc,11402
85
+ alma/storage/migrations/versions/__init__.py,sha256=QbusluTjsupbcMoPi37Gr8G4ceTrlhLQJGkDGvw1-EA,300
86
+ alma/storage/migrations/versions/v1_0_0.py,sha256=YhCmlVZPb_Ble1_xmPzpKYCHXCymMDzey8Kmaj1o5I8,12753
87
+ alma/testing/__init__.py,sha256=JOqZWPEBgBGIbhoDWurpDbCxNYDxmFv7iVAV_DU0Ak8,1320
88
+ alma/testing/factories.py,sha256=jUOrYywFg9flyaD2Dqds3NpszOC9ewmaMQxYI3DuGbM,9746
89
+ alma/testing/mocks.py,sha256=KCu5uvSjramki5F3DVICP1wOoAUbjCp4yK5jn2NSL2o,12321
90
+ alma_memory-0.5.1.dist-info/METADATA,sha256=iYoRCbVf8f-ctI3Dy8Xjvkmdv1QaEq0fFMyfXW3ztVM,29681
91
+ alma_memory-0.5.1.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
92
+ alma_memory-0.5.1.dist-info/top_level.txt,sha256=5oN68LXctTl8a8i1LA-5WqSaP-pDA-J0x1AfCFfLm4A,5
93
+ alma_memory-0.5.1.dist-info/RECORD,,