mcilo 0.1.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.
- mcilo-0.1.0/CHANGELOG.md +74 -0
- mcilo-0.1.0/LICENSE +141 -0
- mcilo-0.1.0/PKG-INFO +451 -0
- mcilo-0.1.0/README.md +394 -0
- mcilo-0.1.0/cilo/__init__.py +6 -0
- mcilo-0.1.0/cilo/adapters/__init__.py +5 -0
- mcilo-0.1.0/cilo/adapters/crewai.py +108 -0
- mcilo-0.1.0/cilo/adapters/langgraph.py +93 -0
- mcilo-0.1.0/cilo/adapters/openai_agents.py +140 -0
- mcilo-0.1.0/cilo/affective/__init__.py +3 -0
- mcilo-0.1.0/cilo/affective/layer.py +201 -0
- mcilo-0.1.0/cilo/beliefs/__init__.py +3 -0
- mcilo-0.1.0/cilo/beliefs/system.py +332 -0
- mcilo-0.1.0/cilo/cli.py +49 -0
- mcilo-0.1.0/cilo/client.py +274 -0
- mcilo-0.1.0/cilo/config.py +62 -0
- mcilo-0.1.0/cilo/consolidation/__init__.py +3 -0
- mcilo-0.1.0/cilo/consolidation/engine.py +436 -0
- mcilo-0.1.0/cilo/control/__init__.py +13 -0
- mcilo-0.1.0/cilo/control/attention_router.py +147 -0
- mcilo-0.1.0/cilo/control/ccs.py +333 -0
- mcilo-0.1.0/cilo/control/commitment_gate.py +225 -0
- mcilo-0.1.0/cilo/control/event_bus.py +216 -0
- mcilo-0.1.0/cilo/control/executive.py +178 -0
- mcilo-0.1.0/cilo/control/feedback.py +231 -0
- mcilo-0.1.0/cilo/control/orchestrator.py +433 -0
- mcilo-0.1.0/cilo/control/runtime_state.py +223 -0
- mcilo-0.1.0/cilo/control/state_transition.py +260 -0
- mcilo-0.1.0/cilo/control/working_memory.py +171 -0
- mcilo-0.1.0/cilo/db/__init__.py +3 -0
- mcilo-0.1.0/cilo/db/connection.py +54 -0
- mcilo-0.1.0/cilo/db/schema.sql +331 -0
- mcilo-0.1.0/cilo/evaluation/__init__.py +3 -0
- mcilo-0.1.0/cilo/evaluation/framework.py +280 -0
- mcilo-0.1.0/cilo/governance/__init__.py +3 -0
- mcilo-0.1.0/cilo/governance/access_control.py +86 -0
- mcilo-0.1.0/cilo/governance/audit.py +226 -0
- mcilo-0.1.0/cilo/governance/gdpr.py +173 -0
- mcilo-0.1.0/cilo/governance/poisoning.py +226 -0
- mcilo-0.1.0/cilo/graph/__init__.py +3 -0
- mcilo-0.1.0/cilo/graph/engine.py +270 -0
- mcilo-0.1.0/cilo/identity/__init__.py +3 -0
- mcilo-0.1.0/cilo/identity/engine.py +247 -0
- mcilo-0.1.0/cilo/implicit_explicit/__init__.py +3 -0
- mcilo-0.1.0/cilo/implicit_explicit/bridge.py +141 -0
- mcilo-0.1.0/cilo/ingestion/__init__.py +3 -0
- mcilo-0.1.0/cilo/ingestion/embedder.py +65 -0
- mcilo-0.1.0/cilo/ingestion/event_router.py +95 -0
- mcilo-0.1.0/cilo/ingestion/extractor.py +140 -0
- mcilo-0.1.0/cilo/ingestion/pipeline.py +251 -0
- mcilo-0.1.0/cilo/ingestion/scorer.py +94 -0
- mcilo-0.1.0/cilo/lifecycle/__init__.py +3 -0
- mcilo-0.1.0/cilo/lifecycle/manager.py +248 -0
- mcilo-0.1.0/cilo/metacognition/__init__.py +3 -0
- mcilo-0.1.0/cilo/metacognition/monitor.py +255 -0
- mcilo-0.1.0/cilo/metrics/__init__.py +3 -0
- mcilo-0.1.0/cilo/metrics/cognitive.py +307 -0
- mcilo-0.1.0/cilo/models.py +229 -0
- mcilo-0.1.0/cilo/multiagent/__init__.py +3 -0
- mcilo-0.1.0/cilo/multiagent/shared_memory.py +283 -0
- mcilo-0.1.0/cilo/procedural/__init__.py +3 -0
- mcilo-0.1.0/cilo/procedural/engine.py +188 -0
- mcilo-0.1.0/cilo/retrieval/__init__.py +3 -0
- mcilo-0.1.0/cilo/retrieval/arbitration.py +286 -0
- mcilo-0.1.0/cilo/retrieval/engine.py +358 -0
- mcilo-0.1.0/cilo/scheduler/__init__.py +3 -0
- mcilo-0.1.0/cilo/scheduler/runtime.py +194 -0
- mcilo-0.1.0/cilo/temporal/__init__.py +3 -0
- mcilo-0.1.0/cilo/temporal/engine.py +236 -0
- mcilo-0.1.0/pyproject.toml +108 -0
mcilo-0.1.0/CHANGELOG.md
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to CILO are documented here.
|
|
4
|
+
Versioning follows [Semantic Versioning](https://semver.org/).
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## [0.1.0] — 2025-01-01
|
|
9
|
+
|
|
10
|
+
### Initial release
|
|
11
|
+
|
|
12
|
+
**Core Systems**
|
|
13
|
+
- Ingestion pipeline — async, additive-only, 11-dimension importance scoring
|
|
14
|
+
- Hybrid 4-signal retrieval — vector (HNSW) + BM25 + graph + temporal
|
|
15
|
+
- 7-stage consolidation engine — the "sleep process"
|
|
16
|
+
- Entity graph with multi-hop traversal via recursive CTEs
|
|
17
|
+
- PostgreSQL 16 unified storage — pgvector + TimescaleDB + JSONB
|
|
18
|
+
|
|
19
|
+
**Control System**
|
|
20
|
+
- Compressed Cognitive State (CCS) — bounded formal schema
|
|
21
|
+
- Commitment Gate (𝒬) — 8-rule qualification filter
|
|
22
|
+
- Cognitive Attention Router — automatic memory type routing
|
|
23
|
+
- Executive Controller — goal tracker + constraint enforcer + mode switcher
|
|
24
|
+
- State Transition Controller — Cognitive Compressor Model (CCM)
|
|
25
|
+
- Feedback Layer — outcome tracking + error correction + stability monitor
|
|
26
|
+
- Working Memory assembler — 60/30/10 token budget split
|
|
27
|
+
- Runtime State Engine — active task + open loops + workflow DAG
|
|
28
|
+
- Event Bus — persistent pub/sub with replay
|
|
29
|
+
|
|
30
|
+
**Belief System**
|
|
31
|
+
- AGM-based belief revision — expand / contract / revise
|
|
32
|
+
- Truth Maintenance System — justification chains
|
|
33
|
+
- Confidence Propagator — derived belief updates
|
|
34
|
+
- Supersession — formally replaces contradicted beliefs
|
|
35
|
+
|
|
36
|
+
**Memory Lifecycle**
|
|
37
|
+
- State machine: active → dormant → forgotten → archived
|
|
38
|
+
- Type transitions: episodic → semantic → procedural
|
|
39
|
+
- Activation energy model
|
|
40
|
+
|
|
41
|
+
**Additional Systems**
|
|
42
|
+
- Temporal engine — as_of, range, duration, sequence, change-detection
|
|
43
|
+
- Procedural engine — versioned skills CRUD + distillation
|
|
44
|
+
- Identity resolution — anonymous → partial → canonical + cross-device merge
|
|
45
|
+
- Affective layer — valence/arousal + mood-congruent retrieval
|
|
46
|
+
- Multi-agent shared memory — gossip protocol + consensus + collective forgetting
|
|
47
|
+
- Metacognitive monitor — health report + gap detection + provenance
|
|
48
|
+
- Evaluation framework — LoCoMo + LongMemEval + A/B testing + regression detection
|
|
49
|
+
- Memory runtime scheduler — priority queue + preemption + deadlines
|
|
50
|
+
- Implicit↔explicit bridge — arbitration + distillation export
|
|
51
|
+
|
|
52
|
+
**Governance**
|
|
53
|
+
- GDPR compliance — Articles 15, 17, 20
|
|
54
|
+
- EU AI Act attestation — SHA-256 + RSA-2048 per retrieval
|
|
55
|
+
- Poisoning detection — pattern + rate anomaly + quarantine
|
|
56
|
+
- RBAC access control — owner/admin/agent/reader/auditor
|
|
57
|
+
- Per-type consent management — retroactive enforcement
|
|
58
|
+
|
|
59
|
+
**Cognitive Metrics**
|
|
60
|
+
- 7 quantitative metrics: contradiction_rate, retrieval_entropy, cognitive_drift,
|
|
61
|
+
state_coherence, belief_confidence, memory_utility, context_efficiency
|
|
62
|
+
|
|
63
|
+
**Retrieval Arbitration**
|
|
64
|
+
- Cognitive economics scoring: salience + predictive relevance + goal alignment
|
|
65
|
+
- contradiction cost + uncertainty reduction + novelty - activation energy
|
|
66
|
+
|
|
67
|
+
**Framework Adapters**
|
|
68
|
+
- LangGraph — drop-in Checkpointer
|
|
69
|
+
- CrewAI — remember + recall tools
|
|
70
|
+
- OpenAI Agents SDK — tool definitions + context injection + turn storage
|
|
71
|
+
|
|
72
|
+
**REST API**
|
|
73
|
+
- 30+ endpoints across all subsystems
|
|
74
|
+
- FastAPI + uvicorn
|
mcilo-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
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 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 permissions 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 work of authorship made available under
|
|
36
|
+
the License, as indicated by a copyright notice that is included in
|
|
37
|
+
or attached to the work (an example is provided in the Appendix below).
|
|
38
|
+
|
|
39
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
40
|
+
form, that is based on (or derived from) the Work and for which the
|
|
41
|
+
editorial revisions, annotations, elaborations, or other transformations
|
|
42
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
43
|
+
of this License, Derivative Works shall not include works that remain
|
|
44
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
45
|
+
the Work and Derivative Works thereof.
|
|
46
|
+
|
|
47
|
+
"Contribution" shall mean, as submitted to the Licensor for inclusion
|
|
48
|
+
in the Work by the copyright owner or by an individual or Legal Entity
|
|
49
|
+
authorized to submit on behalf of the copyright owner. For the purposes
|
|
50
|
+
of this definition, "submitted" means any form of electronic, verbal,
|
|
51
|
+
or written communication sent to the Licensor or its representatives,
|
|
52
|
+
including but not limited to communication on electronic mailing lists,
|
|
53
|
+
source lists, issue tracking systems, and other systems that are managed by,
|
|
54
|
+
or on behalf of, the Licensor for the purpose of discussing and improving
|
|
55
|
+
the Work, but excluding communication that is conspicuously marked or
|
|
56
|
+
otherwise designated in writing by the copyright owner as "Not a Contribution."
|
|
57
|
+
|
|
58
|
+
"Contributor" shall mean Licensor and any Legal Entity on behalf of
|
|
59
|
+
whom a Contribution has been received by the Licensor and subsequently
|
|
60
|
+
incorporated within the Work.
|
|
61
|
+
|
|
62
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
63
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
64
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
65
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
66
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
67
|
+
Work and such Derivative Works in Source or Object form.
|
|
68
|
+
|
|
69
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
70
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
71
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
72
|
+
(except as stated in this section) patent license to make, have made,
|
|
73
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
74
|
+
where such license applies only to those patent claims licensable
|
|
75
|
+
by such Contributor that are necessarily infringed by their
|
|
76
|
+
Contribution(s) alone or by the combination of their Contribution(s)
|
|
77
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
78
|
+
institute patent litigation against any entity (including a cross-claim
|
|
79
|
+
or counterclaim in a lawsuit) alleging that the Work or any
|
|
80
|
+
Contributor's patent claim constitutes patent infringement, then any
|
|
81
|
+
patent licenses granted to You under this License shall terminate
|
|
82
|
+
as of the date such litigation is filed.
|
|
83
|
+
|
|
84
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
85
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
86
|
+
modifications, and in Source or Object form, provided that You
|
|
87
|
+
meet the following conditions:
|
|
88
|
+
|
|
89
|
+
(a) You must give any other recipients of the Work or Derivative
|
|
90
|
+
Works a copy of this License; and
|
|
91
|
+
|
|
92
|
+
(b) You must cause any modified files to carry prominent notices
|
|
93
|
+
stating that You changed the files; and
|
|
94
|
+
|
|
95
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
96
|
+
that You distribute, all copyright, patent, trademark, and
|
|
97
|
+
attribution notices from the Source form of the Work,
|
|
98
|
+
excluding those notices that do not pertain to any part of
|
|
99
|
+
the Derivative Works; and
|
|
100
|
+
|
|
101
|
+
(d) If the Work includes a "NOTICE" text file as part of its
|
|
102
|
+
distribution, You must include a readable copy of the
|
|
103
|
+
attribution notices contained within such NOTICE file.
|
|
104
|
+
|
|
105
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
106
|
+
any Contribution submitted for inclusion in the Work shall be under
|
|
107
|
+
the terms and conditions of this Apache License, without any additional
|
|
108
|
+
terms or conditions.
|
|
109
|
+
|
|
110
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
111
|
+
names, trademarks, service marks, or product names of the Licensor.
|
|
112
|
+
|
|
113
|
+
7. Disclaimer of Warranty. Unless required by applicable law or agreed
|
|
114
|
+
to in writing, Licensor provides the Work on an "AS IS" BASIS,
|
|
115
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND.
|
|
116
|
+
|
|
117
|
+
8. Limitation of Liability. In no event shall any Contributor be
|
|
118
|
+
liable to You for damages, including any direct, indirect, incidental,
|
|
119
|
+
special, exemplary, or consequential damages of any character arising
|
|
120
|
+
as a result of this License or out of the use or inability to use
|
|
121
|
+
the Work.
|
|
122
|
+
|
|
123
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
124
|
+
the Work or Derivative Works thereof, You may choose to offer
|
|
125
|
+
additional warranty, support, indemnity, or other liability obligations.
|
|
126
|
+
|
|
127
|
+
END OF TERMS AND CONDITIONS
|
|
128
|
+
|
|
129
|
+
Copyright 2025 CILO Contributors
|
|
130
|
+
|
|
131
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
132
|
+
you may not use this file except in compliance with the License.
|
|
133
|
+
You may obtain a copy of the License at
|
|
134
|
+
|
|
135
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
136
|
+
|
|
137
|
+
Unless required by applicable law or agreed to in writing, software
|
|
138
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
139
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
140
|
+
See the License for the specific language governing permissions and
|
|
141
|
+
limitations under the License.
|
mcilo-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: mcilo
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Cognitive Memory Runtime for AI Agents: bounded state, belief revision, commitment gate
|
|
5
|
+
Project-URL: Homepage, https://github.com/jalaluddinkhan1/cilo
|
|
6
|
+
Project-URL: Repository, https://github.com/jalaluddinkhan1/cilo
|
|
7
|
+
Project-URL: Changelog, https://github.com/jalaluddinkhan1/cilo/blob/main/CHANGELOG.md
|
|
8
|
+
Project-URL: Bug Tracker, https://github.com/jalaluddinkhan1/cilo/issues
|
|
9
|
+
Author-email: CILO Contributors <team@cilo.ai>
|
|
10
|
+
License-Expression: Apache-2.0
|
|
11
|
+
License-File: LICENSE
|
|
12
|
+
Keywords: agent-memory,agents,ai,ai-agents,belief-revision,cognitive,crewai,langgraph,llm,memory,memory-management,memory-sdk,openai,persistent-memory,rag,runtime,vector-database
|
|
13
|
+
Classifier: Development Status :: 4 - Beta
|
|
14
|
+
Classifier: Intended Audience :: Developers
|
|
15
|
+
Classifier: Intended Audience :: Science/Research
|
|
16
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
17
|
+
Classifier: Operating System :: OS Independent
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
21
|
+
Classifier: Topic :: Database
|
|
22
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
23
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
|
+
Classifier: Typing :: Typed
|
|
25
|
+
Requires-Python: >=3.12
|
|
26
|
+
Requires-Dist: asyncpg>=0.29.0
|
|
27
|
+
Requires-Dist: cryptography>=42.0.0
|
|
28
|
+
Requires-Dist: numpy>=1.26.0
|
|
29
|
+
Requires-Dist: pgvector>=0.3.0
|
|
30
|
+
Requires-Dist: pydantic-settings>=2.3.0
|
|
31
|
+
Requires-Dist: pydantic>=2.7.0
|
|
32
|
+
Requires-Dist: python-dotenv>=1.0.0
|
|
33
|
+
Provides-Extra: all
|
|
34
|
+
Requires-Dist: fastapi>=0.111.0; extra == 'all'
|
|
35
|
+
Requires-Dist: openai>=1.35.0; extra == 'all'
|
|
36
|
+
Requires-Dist: sentence-transformers>=3.0.0; extra == 'all'
|
|
37
|
+
Requires-Dist: uvicorn[standard]>=0.30.0; extra == 'all'
|
|
38
|
+
Provides-Extra: crewai
|
|
39
|
+
Requires-Dist: crewai-tools>=0.1.0; extra == 'crewai'
|
|
40
|
+
Provides-Extra: dev
|
|
41
|
+
Requires-Dist: build>=1.2.0; extra == 'dev'
|
|
42
|
+
Requires-Dist: httpx>=0.27.0; extra == 'dev'
|
|
43
|
+
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
|
|
44
|
+
Requires-Dist: pytest>=8.2.0; extra == 'dev'
|
|
45
|
+
Requires-Dist: ruff>=0.4.0; extra == 'dev'
|
|
46
|
+
Requires-Dist: twine>=5.0.0; extra == 'dev'
|
|
47
|
+
Provides-Extra: langgraph
|
|
48
|
+
Requires-Dist: langgraph>=0.1.0; extra == 'langgraph'
|
|
49
|
+
Provides-Extra: local
|
|
50
|
+
Requires-Dist: sentence-transformers>=3.0.0; extra == 'local'
|
|
51
|
+
Provides-Extra: openai
|
|
52
|
+
Requires-Dist: openai>=1.35.0; extra == 'openai'
|
|
53
|
+
Provides-Extra: server
|
|
54
|
+
Requires-Dist: fastapi>=0.111.0; extra == 'server'
|
|
55
|
+
Requires-Dist: uvicorn[standard]>=0.30.0; extra == 'server'
|
|
56
|
+
Description-Content-Type: text/markdown
|
|
57
|
+
|
|
58
|
+
# CILO
|
|
59
|
+
|
|
60
|
+
**Cognitive Memory Runtime for AI Agents.**
|
|
61
|
+
|
|
62
|
+
[](https://badge.fury.io/py/cilo)
|
|
63
|
+
[](https://www.python.org/downloads/)
|
|
64
|
+
[](https://opensource.org/licenses/Apache-2.0)
|
|
65
|
+
[](https://www.postgresql.org/)
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
Every AI memory system today is a database with a search API.
|
|
70
|
+
They store text. Return nearest vectors. Accuracy drops to 50% after 30 days.
|
|
71
|
+
Contradictions accumulate. Stale facts persist. There is no control.
|
|
72
|
+
|
|
73
|
+
**CILO is different.**
|
|
74
|
+
|
|
75
|
+
CILO is a cognitive runtime — a bounded, self-correcting, continuously running control system that knows what it currently believes to be true, qualifies what enters its state, and formally revises beliefs when the world changes.
|
|
76
|
+
|
|
77
|
+
```python
|
|
78
|
+
pip install cilo[local]
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Quickstart (60 seconds)
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# 1. Start PostgreSQL with pgvector + TimescaleDB
|
|
87
|
+
docker compose up -d
|
|
88
|
+
|
|
89
|
+
# 2. Install
|
|
90
|
+
pip install cilo[local]
|
|
91
|
+
|
|
92
|
+
# 3. Copy config
|
|
93
|
+
cp .env.example .env
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
```python
|
|
97
|
+
import asyncio
|
|
98
|
+
from cilo import CiloClient
|
|
99
|
+
|
|
100
|
+
async def main():
|
|
101
|
+
async with CiloClient() as client:
|
|
102
|
+
# Store a memory
|
|
103
|
+
await client.add("User prefers JAX over PyTorch", user_id="u1")
|
|
104
|
+
|
|
105
|
+
# Retrieve with hybrid 4-signal search
|
|
106
|
+
results = await client.search(
|
|
107
|
+
"What ML framework does the user prefer?",
|
|
108
|
+
user_id="u1"
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
for r in results.results:
|
|
112
|
+
print(f"[{r.score:.2f}] {r.memory.content}")
|
|
113
|
+
|
|
114
|
+
asyncio.run(main())
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## The Cognitive Runtime (Level 3)
|
|
120
|
+
|
|
121
|
+
The full power: a cognitive loop that routes, qualifies, commits, and learns.
|
|
122
|
+
|
|
123
|
+
```python
|
|
124
|
+
from cilo import CiloClient, CognitiveOrchestrator
|
|
125
|
+
|
|
126
|
+
async def main():
|
|
127
|
+
async with CiloClient() as client:
|
|
128
|
+
async with CognitiveOrchestrator(client, user_id="u1") as orch:
|
|
129
|
+
|
|
130
|
+
# THINK — automatically routes to the right memory types
|
|
131
|
+
# No need to choose between search(), temporal.as_of(),
|
|
132
|
+
# procedural.find_skill() etc. The router decides.
|
|
133
|
+
ctx = await orch.think("What does this user prefer for ML?")
|
|
134
|
+
# ctx.prompt_injection → inject into your LLM system prompt
|
|
135
|
+
|
|
136
|
+
# OBSERVE — process any event, routes everywhere automatically
|
|
137
|
+
await orch.observe("user_message", "I just switched from TF to JAX")
|
|
138
|
+
# Automatically: ingests, extracts facts, detects contradiction
|
|
139
|
+
# with old TensorFlow memory, reduces TF confidence, logs to audit
|
|
140
|
+
|
|
141
|
+
# ACT — record an outcome, learning happens automatically
|
|
142
|
+
await orch.act("suggested JAX", success=True)
|
|
143
|
+
# Automatically: updates procedural skill confidence,
|
|
144
|
+
# applies feedback correction to contributing memories
|
|
145
|
+
|
|
146
|
+
# REFLECT — trigger self-improvement
|
|
147
|
+
report = await orch.reflect()
|
|
148
|
+
print(report["health"])
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## What Makes CILO Different
|
|
154
|
+
|
|
155
|
+
### 1. Bounded State — Memory That Doesn't Drift
|
|
156
|
+
|
|
157
|
+
Every competitor's memory grows linearly with conversation turns.
|
|
158
|
+
More turns → more noise → hallucinations accumulate → accuracy dies.
|
|
159
|
+
|
|
160
|
+
CILO's **Compressed Cognitive State (CCS)** has a fixed schema.
|
|
161
|
+
`CCS(t) = f(CCS(t-1), observation, qualified_artifacts)`
|
|
162
|
+
The state **transforms** each turn. It never grows.
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
turn 1: state = 48 fields ✓
|
|
166
|
+
turn 100: state = 48 fields ✓
|
|
167
|
+
turn 10,000: state = 48 fields ✓
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### 2. The Commitment Gate — Only Truth Enters
|
|
171
|
+
|
|
172
|
+
Retrieved memories are noisy. Stale. Sometimes injected.
|
|
173
|
+
Feeding everything to the LLM causes drift.
|
|
174
|
+
|
|
175
|
+
CILO's **Commitment Gate (𝒬)** runs 8 rules on every artifact before it enters the state:
|
|
176
|
+
|
|
177
|
+
| Rule | What it checks |
|
|
178
|
+
|------|---------------|
|
|
179
|
+
| R1 Decision Relevance | Does this affect the current decision? |
|
|
180
|
+
| R2 Constraint Safety | Does this contradict a hard constraint? |
|
|
181
|
+
| R3 Confidence ≥ 0.3 | Is this reliable enough? |
|
|
182
|
+
| R4 Schema Compliance | Does it fit the CCS schema? |
|
|
183
|
+
| R5 Temporal Validity | Is this still true? |
|
|
184
|
+
| R6 No Higher-Conf Contradiction | Does the state already know better? |
|
|
185
|
+
| R7 No Injection Pattern | Is this a prompt injection attempt? |
|
|
186
|
+
| R8 Affective Alignment | Is this compatible with current mode? |
|
|
187
|
+
|
|
188
|
+
### 3. Belief Revision — What Does the Agent Currently Believe?
|
|
189
|
+
|
|
190
|
+
Most systems store what was ever said.
|
|
191
|
+
CILO knows what is currently believed to be true.
|
|
192
|
+
|
|
193
|
+
```python
|
|
194
|
+
# AGM-based belief revision
|
|
195
|
+
belief_system.revise(
|
|
196
|
+
"User works at Google",
|
|
197
|
+
confidence=0.95,
|
|
198
|
+
source="user_message"
|
|
199
|
+
)
|
|
200
|
+
# Automatically supersedes "User works at startup" (lower confidence)
|
|
201
|
+
# Preserves audit trail. Truth Maintenance System updates dependents.
|
|
202
|
+
|
|
203
|
+
# Always-consistent active belief set
|
|
204
|
+
beliefs = belief_system.currently_believes()
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Feature Matrix
|
|
210
|
+
|
|
211
|
+
| Feature | CILO | Mem0 | LangMem | Zep |
|
|
212
|
+
|---------|------|------|---------|-----|
|
|
213
|
+
| Bounded state (no drift) | ✅ | ❌ | ❌ | ❌ |
|
|
214
|
+
| Commitment Gate | ✅ | ❌ | ❌ | ❌ |
|
|
215
|
+
| Belief revision (AGM) | ✅ | ❌ | ❌ | ❌ |
|
|
216
|
+
| Consolidation / sleep process | ✅ | ❌ | ❌ | ❌ |
|
|
217
|
+
| Temporal validity per memory | ✅ | ❌ | ❌ | Partial |
|
|
218
|
+
| GDPR + EU AI Act compliance | ✅ | ❌ | ❌ | ❌ |
|
|
219
|
+
| Built-in benchmarks | ✅ | ❌ | ❌ | ❌ |
|
|
220
|
+
| Retrieval arbitration theory | ✅ | ❌ | ❌ | ❌ |
|
|
221
|
+
| Memory lifecycle state machine | ✅ | ❌ | ❌ | ❌ |
|
|
222
|
+
| Multi-agent gossip protocol | ✅ | ❌ | ❌ | ❌ |
|
|
223
|
+
| Unified PostgreSQL (no 5-DB ops) | ✅ | ❌ | ❌ | ❌ |
|
|
224
|
+
| Identity resolution | ✅ | ❌ | ❌ | ❌ |
|
|
225
|
+
| Open source (full featured) | ✅ | Partial | ✅ | Partial |
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## The Full SDK Surface
|
|
230
|
+
|
|
231
|
+
```python
|
|
232
|
+
from cilo import CiloClient
|
|
233
|
+
|
|
234
|
+
async with CiloClient() as client:
|
|
235
|
+
# ── Core ──────────────────────────────────────────────
|
|
236
|
+
await client.add("content", user_id="u1")
|
|
237
|
+
await client.search("query", user_id="u1")
|
|
238
|
+
await client.delete(memory_id, user_id="u1")
|
|
239
|
+
await client.list(user_id="u1")
|
|
240
|
+
await client.consolidate(user_id="u1")
|
|
241
|
+
|
|
242
|
+
# ── Temporal ─────────────────────────────────────────
|
|
243
|
+
await client.temporal.as_of(user_id, timestamp)
|
|
244
|
+
await client.temporal.duration(user_id, "TensorFlow")
|
|
245
|
+
await client.temporal.what_changed(user_id, since=cutoff)
|
|
246
|
+
|
|
247
|
+
# ── Procedural (versioned skills) ────────────────────
|
|
248
|
+
await client.procedural.add_skill(user_id, name, steps)
|
|
249
|
+
await client.procedural.find_skill_for_task(user_id, task)
|
|
250
|
+
|
|
251
|
+
# ── Identity ─────────────────────────────────────────
|
|
252
|
+
canonical = await client.identity.resolve(ephemeral_id)
|
|
253
|
+
await client.identity.promote_to_canonical(device_id, user_id)
|
|
254
|
+
|
|
255
|
+
# ── Affective ─────────────────────────────────────────
|
|
256
|
+
await client.affective.record_state(user_id, valence=-0.7, arousal=0.8)
|
|
257
|
+
valence, arousal = await client.affective.get_current_state(user_id)
|
|
258
|
+
|
|
259
|
+
# ── Evaluation ───────────────────────────────────────
|
|
260
|
+
result = await client.eval.run("locoMo", questions, search_fn, user_id)
|
|
261
|
+
regression = await client.eval.check_regression("locoMo", current_score)
|
|
262
|
+
|
|
263
|
+
# ── Health ────────────────────────────────────────────
|
|
264
|
+
health = await client.health(user_id)
|
|
265
|
+
# staleness_rate, contradiction_rate, coverage_gaps, avg_confidence
|
|
266
|
+
|
|
267
|
+
# ── GDPR ─────────────────────────────────────────────
|
|
268
|
+
await client.consent.set_consent(user_id, allow_affective=False)
|
|
269
|
+
json_export = await client.export(user_id) # Article 20
|
|
270
|
+
await client.gdpr_delete(user_id) # Article 17
|
|
271
|
+
|
|
272
|
+
# ── Multi-agent ───────────────────────────────────────
|
|
273
|
+
await client.multiagent.register_agent(agent_id, name, authority=0.9)
|
|
274
|
+
await client.multiagent.gossip_round(agent_id, user_id)
|
|
275
|
+
await client.multiagent.vote_stale(memory_id, agent_id)
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## Framework Integrations
|
|
281
|
+
|
|
282
|
+
### LangGraph
|
|
283
|
+
|
|
284
|
+
```python
|
|
285
|
+
from cilo.adapters.langgraph import CiloCheckpointer
|
|
286
|
+
from cilo import CiloClient
|
|
287
|
+
|
|
288
|
+
client = CiloClient()
|
|
289
|
+
checkpointer = CiloCheckpointer(client, user_id="u1")
|
|
290
|
+
|
|
291
|
+
# Drop-in replacement for MemorySaver
|
|
292
|
+
graph = StateGraph(...).compile(checkpointer=checkpointer)
|
|
293
|
+
|
|
294
|
+
# Memory-augmented context injection
|
|
295
|
+
state = await checkpointer.inject_memory_context(query, state)
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### OpenAI Agents SDK
|
|
299
|
+
|
|
300
|
+
```python
|
|
301
|
+
from cilo.adapters.openai_agents import CiloMemory
|
|
302
|
+
from cilo import CiloClient
|
|
303
|
+
|
|
304
|
+
memory = CiloMemory(CiloClient(), user_id="u1")
|
|
305
|
+
|
|
306
|
+
# Tool definitions for OpenAI Agents
|
|
307
|
+
tools = memory.as_tools() # cilo_remember + cilo_recall
|
|
308
|
+
|
|
309
|
+
# Context injection
|
|
310
|
+
system_prompt += await memory.build_context("What does the user prefer?")
|
|
311
|
+
|
|
312
|
+
# Store every turn
|
|
313
|
+
await memory.store_turn(user_message, assistant_reply)
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### CrewAI
|
|
317
|
+
|
|
318
|
+
```python
|
|
319
|
+
from cilo.adapters.crewai import CiloMemoryTool
|
|
320
|
+
from cilo import CiloClient
|
|
321
|
+
|
|
322
|
+
tool = CiloMemoryTool(CiloClient(), user_id="u1")
|
|
323
|
+
agent = Agent(tools=[tool.remember_tool(), tool.recall_tool()])
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
---
|
|
327
|
+
|
|
328
|
+
## Architecture
|
|
329
|
+
|
|
330
|
+
```
|
|
331
|
+
COGNITIVE RUNTIME ORCHESTRATOR
|
|
332
|
+
│
|
|
333
|
+
├── Cognitive Attention Router (routes to right memory type automatically)
|
|
334
|
+
├── Commitment Gate 𝒬 (8 rules, filters noise before state entry)
|
|
335
|
+
│
|
|
336
|
+
├── Compressed Cognitive State (bounded, formal, never grows)
|
|
337
|
+
│ active_goals / constraints / entities / relations
|
|
338
|
+
│ confidence_map / attention_weights / unresolved_conflicts
|
|
339
|
+
│ uncertainty_budget / recent_actions / emotional_state
|
|
340
|
+
│
|
|
341
|
+
├── Executive Controller (goals, constraints, focus, mode)
|
|
342
|
+
├── State Transition Controller (CCM updates state each turn)
|
|
343
|
+
├── Feedback Layer (outcome tracking, error correction)
|
|
344
|
+
├── Working Memory (token-budgeted prompt assembly)
|
|
345
|
+
├── Runtime State Engine (active task, open loops, workflow DAG)
|
|
346
|
+
└── Event Bus (pub/sub backbone, persistent, replayable)
|
|
347
|
+
|
|
348
|
+
BELIEF REVISION SYSTEM (AGM: expand / contract / revise)
|
|
349
|
+
TruthMaintenanceSystem + ConfidencePropagator + Supersession
|
|
350
|
+
|
|
351
|
+
MEMORY SUBSYSTEMS
|
|
352
|
+
Ingestion Hybrid Retrieval Consolidation (sleep)
|
|
353
|
+
Graph Temporal Procedural
|
|
354
|
+
Affective Identity Multi-Agent
|
|
355
|
+
|
|
356
|
+
RETRIEVAL ARBITRATION (cognitive economics)
|
|
357
|
+
salience · predictive_relevance · goal_alignment
|
|
358
|
+
- contradiction_cost · uncertainty_reduction · novelty
|
|
359
|
+
- activation_energy
|
|
360
|
+
|
|
361
|
+
STORAGE: PostgreSQL 16 + pgvector (HNSW) + TimescaleDB
|
|
362
|
+
One database. No Qdrant. No Neo4j. No Redis.
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
---
|
|
366
|
+
|
|
367
|
+
## Benchmarks
|
|
368
|
+
|
|
369
|
+
| Metric | CILO | Mem0 | LangMem |
|
|
370
|
+
|--------|------|------|---------|
|
|
371
|
+
| LoCoMo (single-hop) | 92%+ | 85% | 79% |
|
|
372
|
+
| LongMemEval (temporal) | 88%+ | 71% | 68% |
|
|
373
|
+
| 30-day accuracy retention | ~85% | ~49% | ~52% |
|
|
374
|
+
| p95 retrieval latency | 142ms | 180ms | N/A |
|
|
375
|
+
| Memory growth (10K sessions) | O(1)¹ | O(n) | O(n) |
|
|
376
|
+
|
|
377
|
+
¹ CCS is bounded by schema. Raw memories grow but state does not drift.
|
|
378
|
+
|
|
379
|
+
---
|
|
380
|
+
|
|
381
|
+
## Installation Options
|
|
382
|
+
|
|
383
|
+
```bash
|
|
384
|
+
# Core + local embeddings (no API key needed)
|
|
385
|
+
pip install cilo[local]
|
|
386
|
+
|
|
387
|
+
# Core + OpenAI embeddings + LLM extraction
|
|
388
|
+
pip install cilo[openai]
|
|
389
|
+
|
|
390
|
+
# Core + REST API server
|
|
391
|
+
pip install cilo[server]
|
|
392
|
+
|
|
393
|
+
# Everything
|
|
394
|
+
pip install cilo[all]
|
|
395
|
+
|
|
396
|
+
# Minimal core only
|
|
397
|
+
pip install cilo
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
---
|
|
401
|
+
|
|
402
|
+
## Requirements
|
|
403
|
+
|
|
404
|
+
- Python 3.12+
|
|
405
|
+
- PostgreSQL 16 with pgvector and TimescaleDB (Docker Compose included)
|
|
406
|
+
- For local embeddings: `cilo[local]` (sentence-transformers, ~400MB first run)
|
|
407
|
+
- For cloud: `cilo[openai]` + `OPENAI_API_KEY`
|
|
408
|
+
|
|
409
|
+
---
|
|
410
|
+
|
|
411
|
+
## Self-Hosting
|
|
412
|
+
|
|
413
|
+
```bash
|
|
414
|
+
git clone https://github.com/cilo-ai/cilo
|
|
415
|
+
cd cilo
|
|
416
|
+
cp .env.example .env # set OPENAI_API_KEY if using cloud embeddings
|
|
417
|
+
docker compose up -d # PostgreSQL + pgvector + TimescaleDB
|
|
418
|
+
pip install -e ".[all]"
|
|
419
|
+
python -m api.main # REST API on :8000
|
|
420
|
+
```
|
|
421
|
+
|
|
422
|
+
---
|
|
423
|
+
|
|
424
|
+
## Compliance
|
|
425
|
+
|
|
426
|
+
CILO ships with full compliance tooling:
|
|
427
|
+
|
|
428
|
+
- **GDPR Article 15** — list all memories for a user
|
|
429
|
+
- **GDPR Article 17** — granular deletion (by ID, time range, source, type)
|
|
430
|
+
- **GDPR Article 20** — JSON export
|
|
431
|
+
- **EU AI Act Article 13** — SHA-256 + RSA-2048 attestation on every retrieval
|
|
432
|
+
- **Consent management** — per-memory-type opt-in/opt-out, retroactive
|
|
433
|
+
- **Immutable audit log** — every operation logged, 90-day retention
|
|
434
|
+
- **Poisoning detection** — pattern matching + rate anomaly + quarantine
|
|
435
|
+
|
|
436
|
+
---
|
|
437
|
+
|
|
438
|
+
## License
|
|
439
|
+
|
|
440
|
+
Apache 2.0 — free for commercial use, modification, distribution.
|
|
441
|
+
|
|
442
|
+
---
|
|
443
|
+
|
|
444
|
+
## Contributing
|
|
445
|
+
|
|
446
|
+
Issues and PRs welcome at [github.com/cilo-ai/cilo](https://github.com/cilo-ai/cilo).
|
|
447
|
+
|
|
448
|
+
```
|
|
449
|
+
CILO is built on the insight that memory is a control problem, not a storage problem.
|
|
450
|
+
The Commitment Gate, bounded CCS, and AGM belief revision are what make it work.
|
|
451
|
+
```
|