memorylayer-server 0.0.3__tar.gz → 0.0.4__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.
- memorylayer_server-0.0.4/PKG-INFO +331 -0
- memorylayer_server-0.0.4/README.md +256 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/pyproject.toml +5 -2
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/__init__.py +1 -1
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/api/v1/associations.py +4 -17
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/api/v1/context_environment.py +5 -19
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/api/v1/contradictions.py +4 -17
- memorylayer_server-0.0.4/src/memorylayer_server/api/v1/deps.py +61 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/api/v1/memories.py +131 -260
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/api/v1/schemas.py +69 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/api/v1/sessions.py +126 -46
- memorylayer_server-0.0.4/src/memorylayer_server/api/v1/workspaces.py +810 -0
- memorylayer_server-0.0.4/src/memorylayer_server/cli.py +226 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/config.py +11 -4
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/dependencies.py +14 -5
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/lifecycle/routes.py +1 -1
- memorylayer_server-0.0.4/src/memorylayer_server/services/_constants.py +108 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/association/base.py +1 -5
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/authentication/base.py +37 -3
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/authentication/default.py +70 -13
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/authorization/base.py +1 -1
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/cache/base.py +1 -1
- memorylayer_server-0.0.4/src/memorylayer_server/services/cache/lru.py +123 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/cache/noop.py +1 -1
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/context_environment/base.py +1 -2
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/contradiction/base.py +1 -3
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/decay/base.py +6 -3
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/decay/default.py +10 -4
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/deduplication/base.py +1 -5
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/embedding/base.py +1 -4
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/extraction/base.py +7 -7
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/llm/base.py +1 -4
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/memory/base.py +11 -11
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/memory/default.py +62 -27
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/ontology/base.py +1 -2
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/reflect/base.py +1 -5
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/reranker/base.py +1 -3
- memorylayer_server-0.0.4/src/memorylayer_server/services/reranker/rrf/__init__.py +8 -0
- memorylayer_server-0.0.4/src/memorylayer_server/services/reranker/rrf/provider.py +295 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/semantic_tiering/base.py +14 -18
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/session/base.py +62 -37
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/session/in_memory.py +240 -43
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/session/persistent.py +119 -190
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/storage/base.py +53 -2
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/storage/in_memory.py +88 -1
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/storage/sqlite.py +416 -277
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/tasks/asyncio_impl.py +5 -4
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/tasks/base.py +21 -18
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/tasks/handlers.py +5 -1
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/workspace/base.py +1 -4
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/workspace/default.py +10 -0
- memorylayer_server-0.0.4/src/memorylayer_server/tasks/__init__.py +0 -0
- {memorylayer_server-0.0.3/src/memorylayer_server/services/memory → memorylayer_server-0.0.4/src/memorylayer_server/tasks}/auto_enrich_handler.py +11 -15
- {memorylayer_server-0.0.3/src/memorylayer_server/services/session → memorylayer_server-0.0.4/src/memorylayer_server/tasks}/cleanup_task.py +4 -4
- memorylayer_server-0.0.3/src/memorylayer_server/services/contradiction/task_handler.py → memorylayer_server-0.0.4/src/memorylayer_server/tasks/contradiction_check_handler.py +5 -9
- memorylayer_server-0.0.3/src/memorylayer_server/services/decay/task_handler.py → memorylayer_server-0.0.4/src/memorylayer_server/tasks/decay_task_handler.py +6 -10
- {memorylayer_server-0.0.3/src/memorylayer_server/services/extraction → memorylayer_server-0.0.4/src/memorylayer_server/tasks}/fact_decomposition_handler.py +13 -17
- memorylayer_server-0.0.4/src/memorylayer_server/tasks/remember_working_memory_handler.py +79 -0
- memorylayer_server-0.0.3/src/memorylayer_server/services/semantic_tiering/task_handler.py → memorylayer_server-0.0.4/src/memorylayer_server/tasks/semantic_tiering_task_handler.py +6 -11
- memorylayer_server-0.0.4/src/memorylayer_server/tasks/session_touch_handler.py +45 -0
- memorylayer_server-0.0.3/PKG-INFO +0 -150
- memorylayer_server-0.0.3/README.md +0 -76
- memorylayer_server-0.0.3/src/memorylayer_server/api/v1/workspaces.py +0 -376
- memorylayer_server-0.0.3/src/memorylayer_server/cli.py +0 -98
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/.gitignore +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/api/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/api/health.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/api/v1/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/lifecycle/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/lifecycle/cors.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/lifecycle/fastapi.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/main.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/models/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/models/association.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/models/auth.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/models/authz.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/models/llm.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/models/memory.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/models/session.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/models/workspace.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/association/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/association/default.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/authentication/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/authorization/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/authorization/default.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/cache/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/context_environment/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/context_environment/default.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/context_environment/executors/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/context_environment/executors/base.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/context_environment/executors/restricted.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/context_environment/executors/smolagents_executor.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/context_environment/hooks.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/context_environment/rlm.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/contradiction/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/contradiction/default.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/decay/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/deduplication/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/deduplication/default.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/embedding/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/embedding/google.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/embedding/local.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/embedding/mock.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/embedding/openai.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/embedding/service_default.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/extraction/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/extraction/default.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/llm/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/llm/anthropic.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/llm/google.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/llm/noop.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/llm/openai.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/llm/registry.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/llm/service_default.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/memory/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/ontology/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/ontology/default.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/reflect/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/reflect/default.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/reranker/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/reranker/default.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/reranker/hyde/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/reranker/hyde/provider.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/reranker/llm/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/reranker/llm/provider.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/reranker/local/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/reranker/local/provider.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/reranker/none/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/reranker/none/provider.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/semantic_tiering/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/semantic_tiering/default.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/session/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/storage/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/tasks/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/services/workspace/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/utils/__init__.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/utils/datetime.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/utils/hashing.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/utils/id_generation.py +0 -0
- {memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/utils/vector_math.py +0 -0
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: memorylayer-server
|
|
3
|
+
Version: 0.0.4
|
|
4
|
+
Summary: MemoryLayer.ai - API-first memory infrastructure for LLM-powered agents (open source core)
|
|
5
|
+
Project-URL: Homepage, https://memorylayer.ai
|
|
6
|
+
Project-URL: Documentation, https://docs.memorylayer.ai
|
|
7
|
+
Project-URL: Repository, https://github.com/scitrera/memorylayer
|
|
8
|
+
Project-URL: Issues, https://github.com/scitrera/memorylayer/issues
|
|
9
|
+
Author-email: Scitrera <open-source-team@scitrera.com>
|
|
10
|
+
License: Apache 2.0
|
|
11
|
+
Keywords: agents,ai,llm,memory,rag,vector-search
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
18
|
+
Requires-Python: >=3.12
|
|
19
|
+
Requires-Dist: aiosqlite>=0.22.1
|
|
20
|
+
Requires-Dist: click>=8.3.1
|
|
21
|
+
Requires-Dist: fastapi>=0.128.7
|
|
22
|
+
Requires-Dist: httpx>=0.28.1
|
|
23
|
+
Requires-Dist: numpy>2.0.0
|
|
24
|
+
Requires-Dist: pydantic-settings>=2.12.0
|
|
25
|
+
Requires-Dist: pydantic>=2.12.5
|
|
26
|
+
Requires-Dist: python-multipart>=0.0.22
|
|
27
|
+
Requires-Dist: scitrera-app-framework>=0.0.69
|
|
28
|
+
Requires-Dist: scitrera-ext-cachetools>=0.0.1
|
|
29
|
+
Requires-Dist: scitrera-rt-data>=0.0.7
|
|
30
|
+
Requires-Dist: sqlalchemy[asyncio]>=2.0.46
|
|
31
|
+
Requires-Dist: sqlite-vec>=0.1.7a2
|
|
32
|
+
Requires-Dist: uvicorn[standard]>=0.30.0
|
|
33
|
+
Provides-Extra: all
|
|
34
|
+
Requires-Dist: anthropic>=0.79.0; extra == 'all'
|
|
35
|
+
Requires-Dist: google-genai>=1.62.0; extra == 'all'
|
|
36
|
+
Requires-Dist: mypy>=1.19.1; extra == 'all'
|
|
37
|
+
Requires-Dist: openai>=2.18.0; extra == 'all'
|
|
38
|
+
Requires-Dist: pytest-asyncio>=1.3.0; extra == 'all'
|
|
39
|
+
Requires-Dist: pytest-cov>=7.0.0; extra == 'all'
|
|
40
|
+
Requires-Dist: pytest>=9.0.2; extra == 'all'
|
|
41
|
+
Requires-Dist: respx>=0.22.0; extra == 'all'
|
|
42
|
+
Requires-Dist: ruff>=0.15.0; extra == 'all'
|
|
43
|
+
Requires-Dist: sentence-transformers>=5.2.2; extra == 'all'
|
|
44
|
+
Requires-Dist: smolagents<2.0,>=1.0; extra == 'all'
|
|
45
|
+
Requires-Dist: tiktoken>=0.12.0; extra == 'all'
|
|
46
|
+
Provides-Extra: anthropic
|
|
47
|
+
Requires-Dist: anthropic>=0.79.0; extra == 'anthropic'
|
|
48
|
+
Provides-Extra: context
|
|
49
|
+
Requires-Dist: smolagents<2.0,>=1.0; extra == 'context'
|
|
50
|
+
Provides-Extra: dev
|
|
51
|
+
Requires-Dist: mypy>=1.19.1; extra == 'dev'
|
|
52
|
+
Requires-Dist: pytest-asyncio>=1.3.0; extra == 'dev'
|
|
53
|
+
Requires-Dist: pytest-cov>=7.0.0; extra == 'dev'
|
|
54
|
+
Requires-Dist: pytest>=9.0.2; extra == 'dev'
|
|
55
|
+
Requires-Dist: respx>=0.22.0; extra == 'dev'
|
|
56
|
+
Requires-Dist: ruff>=0.15.0; extra == 'dev'
|
|
57
|
+
Provides-Extra: embeddings
|
|
58
|
+
Requires-Dist: google-genai>=1.62.0; extra == 'embeddings'
|
|
59
|
+
Requires-Dist: openai>=2.18.0; extra == 'embeddings'
|
|
60
|
+
Requires-Dist: sentence-transformers>=5.2.2; extra == 'embeddings'
|
|
61
|
+
Requires-Dist: tiktoken>=0.12.0; extra == 'embeddings'
|
|
62
|
+
Provides-Extra: google
|
|
63
|
+
Requires-Dist: google-genai>=1.62.0; extra == 'google'
|
|
64
|
+
Provides-Extra: llm
|
|
65
|
+
Requires-Dist: anthropic>=0.79.0; extra == 'llm'
|
|
66
|
+
Requires-Dist: google-genai>=1.62.0; extra == 'llm'
|
|
67
|
+
Requires-Dist: openai>=2.18.0; extra == 'llm'
|
|
68
|
+
Requires-Dist: tiktoken>=0.12.0; extra == 'llm'
|
|
69
|
+
Provides-Extra: local
|
|
70
|
+
Requires-Dist: sentence-transformers>=5.2.2; extra == 'local'
|
|
71
|
+
Provides-Extra: openai
|
|
72
|
+
Requires-Dist: openai>=2.18.0; extra == 'openai'
|
|
73
|
+
Requires-Dist: tiktoken>=0.12.0; extra == 'openai'
|
|
74
|
+
Description-Content-Type: text/markdown
|
|
75
|
+
|
|
76
|
+
# MemoryLayer.ai Server
|
|
77
|
+
|
|
78
|
+
**API-first memory infrastructure for LLM-powered agents.**
|
|
79
|
+
|
|
80
|
+
MemoryLayer provides cognitive memory capabilities for AI agents, including episodic, semantic, procedural, and working memory with vector-based retrieval, graph-based associations, and server-side computation sandboxes.
|
|
81
|
+
|
|
82
|
+
## Features
|
|
83
|
+
|
|
84
|
+
- **Cognitive Memory Architecture** — Episodic, semantic, procedural, and working memory types
|
|
85
|
+
- **Vector Search** — SQLite with sqlite-vec for efficient similarity search
|
|
86
|
+
- **Knowledge Graph** — 60+ relationship types organized into 11 categories for memory associations
|
|
87
|
+
- **Context Environment** — Server-side Python sandboxes for memory analysis and computation
|
|
88
|
+
- **Session Management** — Working memory with TTL and commit to long-term storage
|
|
89
|
+
- **REST API** — Full-featured HTTP API for all memory operations
|
|
90
|
+
- **Multiple Embedding Providers** — OpenAI, Google GenAI, sentence-transformers (local), and mock (testing)
|
|
91
|
+
- **Health Endpoints** — `/health` and `/health/ready` for monitoring and readiness checks
|
|
92
|
+
|
|
93
|
+
## Installation
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# Basic installation
|
|
97
|
+
pip install memorylayer-server
|
|
98
|
+
|
|
99
|
+
# With OpenAI embeddings
|
|
100
|
+
pip install memorylayer-server[openai]
|
|
101
|
+
|
|
102
|
+
# With Google GenAI embeddings
|
|
103
|
+
pip install memorylayer-server[google]
|
|
104
|
+
|
|
105
|
+
# With local embeddings (sentence-transformers)
|
|
106
|
+
pip install memorylayer-server[local]
|
|
107
|
+
|
|
108
|
+
# All embedding providers
|
|
109
|
+
pip install memorylayer-server[all]
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**Package name:** `memorylayer-server` (PyPI)
|
|
113
|
+
**Import name:** `memorylayer_server`
|
|
114
|
+
|
|
115
|
+
## Quick Start
|
|
116
|
+
|
|
117
|
+
### Start the HTTP Server
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
# Start on default port (61001)
|
|
121
|
+
memorylayer serve
|
|
122
|
+
|
|
123
|
+
# Custom port
|
|
124
|
+
memorylayer serve --port 8080
|
|
125
|
+
|
|
126
|
+
# Bind to all interfaces
|
|
127
|
+
memorylayer serve --host 0.0.0.0
|
|
128
|
+
|
|
129
|
+
# Debug mode
|
|
130
|
+
memorylayer serve --verbose
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Docker
|
|
134
|
+
|
|
135
|
+
The official Docker image comes with all optional dependencies pre-installed and defaults to `local` embeddings (no API key required):
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
docker run -d \
|
|
139
|
+
--name memorylayer \
|
|
140
|
+
-p 61001:61001 \
|
|
141
|
+
-v memorylayer-data:/data \
|
|
142
|
+
scitrera/memorylayer-server
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**With OpenAI embeddings:**
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
docker run -d \
|
|
149
|
+
--name memorylayer \
|
|
150
|
+
-p 61001:61001 \
|
|
151
|
+
-v memorylayer-data:/data \
|
|
152
|
+
-e MEMORYLAYER_EMBEDDING_PROVIDER=openai \
|
|
153
|
+
-e MEMORYLAYER_EMBEDDING_OPENAI_API_KEY=sk-... \
|
|
154
|
+
scitrera/memorylayer-server
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## API Usage
|
|
158
|
+
|
|
159
|
+
The server exposes a REST API. Use any HTTP client, or install the Python SDK (`pip install memorylayer-client`) for a typed client:
|
|
160
|
+
|
|
161
|
+
```python
|
|
162
|
+
from memorylayer import MemoryLayerClient
|
|
163
|
+
|
|
164
|
+
async with MemoryLayerClient(base_url="http://localhost:61001") as client:
|
|
165
|
+
# Store a memory
|
|
166
|
+
memory = await client.remember(
|
|
167
|
+
content="User prefers Python for backend development",
|
|
168
|
+
type="semantic",
|
|
169
|
+
importance=0.8,
|
|
170
|
+
tags=["preferences", "programming"]
|
|
171
|
+
)
|
|
172
|
+
|
|
173
|
+
# Recall memories
|
|
174
|
+
results = await client.recall(
|
|
175
|
+
query="What programming languages does the user like?",
|
|
176
|
+
limit=5
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
# Create associations
|
|
180
|
+
await client.associate(
|
|
181
|
+
source_id=memory.id,
|
|
182
|
+
target_id=other_memory.id,
|
|
183
|
+
relationship="related_to",
|
|
184
|
+
strength=0.9
|
|
185
|
+
)
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## Configuration
|
|
189
|
+
|
|
190
|
+
### Environment Variables
|
|
191
|
+
|
|
192
|
+
| Variable | Default | Description |
|
|
193
|
+
|----------|---------|-------------|
|
|
194
|
+
| `MEMORYLAYER_SERVER_HOST` | `127.0.0.1` | Server bind address |
|
|
195
|
+
| `MEMORYLAYER_SERVER_PORT` | `61001` | Server port |
|
|
196
|
+
| `MEMORYLAYER_DATA_DIR` | `~/.config/memorylayer-server` | Data directory |
|
|
197
|
+
| `MEMORYLAYER_SQLITE_STORAGE_PATH` | `memorylayer.db` | SQLite database path (relative to data dir) |
|
|
198
|
+
| `MEMORYLAYER_EMBEDDING_PROVIDER` | `local` | Embedding provider (`openai`, `google`, `local`, `mock`) |
|
|
199
|
+
| `MEMORYLAYER_EMBEDDING_OPENAI_API_KEY` | — | OpenAI API key |
|
|
200
|
+
| `MEMORYLAYER_EMBEDDING_GOOGLE_API_KEY` | — | Google API key |
|
|
201
|
+
|
|
202
|
+
### Embedding Providers
|
|
203
|
+
|
|
204
|
+
**Local (sentence-transformers)** — Default provider, no API key required:
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
pip install memorylayer-server[local]
|
|
208
|
+
export MEMORYLAYER_EMBEDDING_PROVIDER=local
|
|
209
|
+
memorylayer serve
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
**OpenAI:**
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
pip install memorylayer-server[openai]
|
|
216
|
+
export MEMORYLAYER_EMBEDDING_PROVIDER=openai
|
|
217
|
+
export MEMORYLAYER_EMBEDDING_OPENAI_API_KEY=sk-...
|
|
218
|
+
memorylayer serve
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**Google GenAI:**
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
pip install memorylayer-server[google]
|
|
225
|
+
export MEMORYLAYER_EMBEDDING_PROVIDER=google
|
|
226
|
+
export MEMORYLAYER_EMBEDDING_GOOGLE_API_KEY=...
|
|
227
|
+
memorylayer serve
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
**Mock (testing only):**
|
|
231
|
+
|
|
232
|
+
```bash
|
|
233
|
+
export MEMORYLAYER_EMBEDDING_PROVIDER=mock
|
|
234
|
+
memorylayer serve
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### LLM Provider (Optional)
|
|
238
|
+
|
|
239
|
+
Some features (reflection, smart extraction, context environment queries) require an LLM provider configured via profiles:
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
# OpenAI
|
|
243
|
+
export MEMORYLAYER_LLM_PROFILE_DEFAULT_PROVIDER=openai
|
|
244
|
+
export MEMORYLAYER_LLM_PROFILE_DEFAULT_API_KEY=sk-...
|
|
245
|
+
|
|
246
|
+
# Anthropic Claude
|
|
247
|
+
export MEMORYLAYER_LLM_PROFILE_DEFAULT_PROVIDER=anthropic
|
|
248
|
+
export MEMORYLAYER_LLM_PROFILE_DEFAULT_API_KEY=sk-ant-...
|
|
249
|
+
|
|
250
|
+
# Google Gemini
|
|
251
|
+
export MEMORYLAYER_LLM_PROFILE_DEFAULT_PROVIDER=google
|
|
252
|
+
export MEMORYLAYER_LLM_PROFILE_DEFAULT_API_KEY=...
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
**Profile configuration variables** (replace `DEFAULT` with any profile name):
|
|
256
|
+
|
|
257
|
+
| Variable | Description |
|
|
258
|
+
|----------|-------------|
|
|
259
|
+
| `MEMORYLAYER_LLM_PROFILE_<NAME>_PROVIDER` | Provider (`openai`, `anthropic`, `google`) |
|
|
260
|
+
| `MEMORYLAYER_LLM_PROFILE_<NAME>_API_KEY` | API key |
|
|
261
|
+
| `MEMORYLAYER_LLM_PROFILE_<NAME>_MODEL` | Model name override |
|
|
262
|
+
| `MEMORYLAYER_LLM_PROFILE_<NAME>_BASE_URL` | Custom API base URL |
|
|
263
|
+
| `MEMORYLAYER_LLM_PROFILE_<NAME>_MAX_TOKENS` | Max response tokens |
|
|
264
|
+
| `MEMORYLAYER_LLM_PROFILE_<NAME>_TEMPERATURE` | Sampling temperature |
|
|
265
|
+
|
|
266
|
+
Without an LLM provider, core memory operations (remember, recall, forget, associate) work normally, but synthesis features will be unavailable.
|
|
267
|
+
|
|
268
|
+
### Context Environment
|
|
269
|
+
|
|
270
|
+
The Context Environment provides server-side Python sandboxes for memory analysis and computation. See [Context Environment documentation](https://docs.memorylayer.ai/guides/context-environment/) for details.
|
|
271
|
+
|
|
272
|
+
**Configuration:**
|
|
273
|
+
|
|
274
|
+
| Variable | Default | Description |
|
|
275
|
+
|----------|---------|-------------|
|
|
276
|
+
| `MEMORYLAYER_CONTEXT_EXECUTOR` | `smolagents` | Executor backend (`smolagents` or `restricted`) |
|
|
277
|
+
| `MEMORYLAYER_CONTEXT_MAX_EXEC_SECONDS` | `30` | Timeout per code execution |
|
|
278
|
+
| `MEMORYLAYER_CONTEXT_MAX_OUTPUT_CHARS` | `50000` | Max captured stdout characters |
|
|
279
|
+
| `MEMORYLAYER_CONTEXT_QUERY_MAX_TOKENS` | `4096` | Max tokens for server-side LLM queries |
|
|
280
|
+
| `MEMORYLAYER_CONTEXT_MAX_MEMORY_BYTES` | `268435456` | Memory limit per sandbox (256 MB) |
|
|
281
|
+
| `MEMORYLAYER_CONTEXT_RLM_MAX_ITERATIONS` | `10` | Max iterations for RLM loops |
|
|
282
|
+
| `MEMORYLAYER_CONTEXT_RLM_MAX_EXEC_SECONDS` | `120` | Total timeout for RLM loops |
|
|
283
|
+
| `MEMORYLAYER_CONTEXT_MAX_OPERATIONS` | `1000000` | Max operations per sandbox execution |
|
|
284
|
+
|
|
285
|
+
## Storage
|
|
286
|
+
|
|
287
|
+
The default storage backend is **SQLite** with **sqlite-vec** for vector operations. The database file defaults to `~/.config/memorylayer-server/memorylayer.db` and contains all memories, embeddings, associations, and session data.
|
|
288
|
+
|
|
289
|
+
**Override the data directory:**
|
|
290
|
+
|
|
291
|
+
```bash
|
|
292
|
+
export MEMORYLAYER_DATA_DIR=/var/lib/memorylayer
|
|
293
|
+
```
|
|
294
|
+
|
|
295
|
+
**Override the database path:**
|
|
296
|
+
|
|
297
|
+
```bash
|
|
298
|
+
export MEMORYLAYER_SQLITE_STORAGE_PATH=/var/lib/memorylayer/data.db
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
## Recall Modes
|
|
302
|
+
|
|
303
|
+
The active recall mode is **RAG** (vector similarity + graph traversal). LLM and Hybrid modes are deprecated.
|
|
304
|
+
|
|
305
|
+
## MCP Integration
|
|
306
|
+
|
|
307
|
+
The Model Context Protocol (MCP) server is a **separate TypeScript package** (`@scitrera/memorylayer-mcp-server`), not part of this Python server CLI.
|
|
308
|
+
|
|
309
|
+
To use MemoryLayer with Claude Code or Claude Desktop:
|
|
310
|
+
|
|
311
|
+
1. Start the HTTP server: `memorylayer serve`
|
|
312
|
+
2. Install and configure the MCP server: `npm install -g @scitrera/memorylayer-mcp-server`
|
|
313
|
+
|
|
314
|
+
See the [MCP Server documentation](https://docs.memorylayer.ai/integrations/mcp-server/) for setup instructions.
|
|
315
|
+
|
|
316
|
+
## Health Checks
|
|
317
|
+
|
|
318
|
+
- **`GET /health`** — Basic health check (returns immediately)
|
|
319
|
+
- **`GET /health/ready`** — Readiness check (verifies storage connectivity)
|
|
320
|
+
|
|
321
|
+
The Docker image includes a built-in health check at `/health` (every 30s, 10s startup grace period).
|
|
322
|
+
|
|
323
|
+
## Documentation
|
|
324
|
+
|
|
325
|
+
- **Website:** [https://memorylayer.ai](https://memorylayer.ai)
|
|
326
|
+
- **Docs:** [https://docs.memorylayer.ai](https://docs.memorylayer.ai)
|
|
327
|
+
- **GitHub:** [https://github.com/scitrera/memorylayer](https://github.com/scitrera/memorylayer)
|
|
328
|
+
|
|
329
|
+
## License
|
|
330
|
+
|
|
331
|
+
Apache 2.0 License -- see [LICENSE](../LICENSE) for details.
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
# MemoryLayer.ai Server
|
|
2
|
+
|
|
3
|
+
**API-first memory infrastructure for LLM-powered agents.**
|
|
4
|
+
|
|
5
|
+
MemoryLayer provides cognitive memory capabilities for AI agents, including episodic, semantic, procedural, and working memory with vector-based retrieval, graph-based associations, and server-side computation sandboxes.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **Cognitive Memory Architecture** — Episodic, semantic, procedural, and working memory types
|
|
10
|
+
- **Vector Search** — SQLite with sqlite-vec for efficient similarity search
|
|
11
|
+
- **Knowledge Graph** — 60+ relationship types organized into 11 categories for memory associations
|
|
12
|
+
- **Context Environment** — Server-side Python sandboxes for memory analysis and computation
|
|
13
|
+
- **Session Management** — Working memory with TTL and commit to long-term storage
|
|
14
|
+
- **REST API** — Full-featured HTTP API for all memory operations
|
|
15
|
+
- **Multiple Embedding Providers** — OpenAI, Google GenAI, sentence-transformers (local), and mock (testing)
|
|
16
|
+
- **Health Endpoints** — `/health` and `/health/ready` for monitoring and readiness checks
|
|
17
|
+
|
|
18
|
+
## Installation
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# Basic installation
|
|
22
|
+
pip install memorylayer-server
|
|
23
|
+
|
|
24
|
+
# With OpenAI embeddings
|
|
25
|
+
pip install memorylayer-server[openai]
|
|
26
|
+
|
|
27
|
+
# With Google GenAI embeddings
|
|
28
|
+
pip install memorylayer-server[google]
|
|
29
|
+
|
|
30
|
+
# With local embeddings (sentence-transformers)
|
|
31
|
+
pip install memorylayer-server[local]
|
|
32
|
+
|
|
33
|
+
# All embedding providers
|
|
34
|
+
pip install memorylayer-server[all]
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**Package name:** `memorylayer-server` (PyPI)
|
|
38
|
+
**Import name:** `memorylayer_server`
|
|
39
|
+
|
|
40
|
+
## Quick Start
|
|
41
|
+
|
|
42
|
+
### Start the HTTP Server
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# Start on default port (61001)
|
|
46
|
+
memorylayer serve
|
|
47
|
+
|
|
48
|
+
# Custom port
|
|
49
|
+
memorylayer serve --port 8080
|
|
50
|
+
|
|
51
|
+
# Bind to all interfaces
|
|
52
|
+
memorylayer serve --host 0.0.0.0
|
|
53
|
+
|
|
54
|
+
# Debug mode
|
|
55
|
+
memorylayer serve --verbose
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Docker
|
|
59
|
+
|
|
60
|
+
The official Docker image comes with all optional dependencies pre-installed and defaults to `local` embeddings (no API key required):
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
docker run -d \
|
|
64
|
+
--name memorylayer \
|
|
65
|
+
-p 61001:61001 \
|
|
66
|
+
-v memorylayer-data:/data \
|
|
67
|
+
scitrera/memorylayer-server
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**With OpenAI embeddings:**
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
docker run -d \
|
|
74
|
+
--name memorylayer \
|
|
75
|
+
-p 61001:61001 \
|
|
76
|
+
-v memorylayer-data:/data \
|
|
77
|
+
-e MEMORYLAYER_EMBEDDING_PROVIDER=openai \
|
|
78
|
+
-e MEMORYLAYER_EMBEDDING_OPENAI_API_KEY=sk-... \
|
|
79
|
+
scitrera/memorylayer-server
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## API Usage
|
|
83
|
+
|
|
84
|
+
The server exposes a REST API. Use any HTTP client, or install the Python SDK (`pip install memorylayer-client`) for a typed client:
|
|
85
|
+
|
|
86
|
+
```python
|
|
87
|
+
from memorylayer import MemoryLayerClient
|
|
88
|
+
|
|
89
|
+
async with MemoryLayerClient(base_url="http://localhost:61001") as client:
|
|
90
|
+
# Store a memory
|
|
91
|
+
memory = await client.remember(
|
|
92
|
+
content="User prefers Python for backend development",
|
|
93
|
+
type="semantic",
|
|
94
|
+
importance=0.8,
|
|
95
|
+
tags=["preferences", "programming"]
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
# Recall memories
|
|
99
|
+
results = await client.recall(
|
|
100
|
+
query="What programming languages does the user like?",
|
|
101
|
+
limit=5
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
# Create associations
|
|
105
|
+
await client.associate(
|
|
106
|
+
source_id=memory.id,
|
|
107
|
+
target_id=other_memory.id,
|
|
108
|
+
relationship="related_to",
|
|
109
|
+
strength=0.9
|
|
110
|
+
)
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Configuration
|
|
114
|
+
|
|
115
|
+
### Environment Variables
|
|
116
|
+
|
|
117
|
+
| Variable | Default | Description |
|
|
118
|
+
|----------|---------|-------------|
|
|
119
|
+
| `MEMORYLAYER_SERVER_HOST` | `127.0.0.1` | Server bind address |
|
|
120
|
+
| `MEMORYLAYER_SERVER_PORT` | `61001` | Server port |
|
|
121
|
+
| `MEMORYLAYER_DATA_DIR` | `~/.config/memorylayer-server` | Data directory |
|
|
122
|
+
| `MEMORYLAYER_SQLITE_STORAGE_PATH` | `memorylayer.db` | SQLite database path (relative to data dir) |
|
|
123
|
+
| `MEMORYLAYER_EMBEDDING_PROVIDER` | `local` | Embedding provider (`openai`, `google`, `local`, `mock`) |
|
|
124
|
+
| `MEMORYLAYER_EMBEDDING_OPENAI_API_KEY` | — | OpenAI API key |
|
|
125
|
+
| `MEMORYLAYER_EMBEDDING_GOOGLE_API_KEY` | — | Google API key |
|
|
126
|
+
|
|
127
|
+
### Embedding Providers
|
|
128
|
+
|
|
129
|
+
**Local (sentence-transformers)** — Default provider, no API key required:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
pip install memorylayer-server[local]
|
|
133
|
+
export MEMORYLAYER_EMBEDDING_PROVIDER=local
|
|
134
|
+
memorylayer serve
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**OpenAI:**
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
pip install memorylayer-server[openai]
|
|
141
|
+
export MEMORYLAYER_EMBEDDING_PROVIDER=openai
|
|
142
|
+
export MEMORYLAYER_EMBEDDING_OPENAI_API_KEY=sk-...
|
|
143
|
+
memorylayer serve
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Google GenAI:**
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
pip install memorylayer-server[google]
|
|
150
|
+
export MEMORYLAYER_EMBEDDING_PROVIDER=google
|
|
151
|
+
export MEMORYLAYER_EMBEDDING_GOOGLE_API_KEY=...
|
|
152
|
+
memorylayer serve
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**Mock (testing only):**
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
export MEMORYLAYER_EMBEDDING_PROVIDER=mock
|
|
159
|
+
memorylayer serve
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### LLM Provider (Optional)
|
|
163
|
+
|
|
164
|
+
Some features (reflection, smart extraction, context environment queries) require an LLM provider configured via profiles:
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
# OpenAI
|
|
168
|
+
export MEMORYLAYER_LLM_PROFILE_DEFAULT_PROVIDER=openai
|
|
169
|
+
export MEMORYLAYER_LLM_PROFILE_DEFAULT_API_KEY=sk-...
|
|
170
|
+
|
|
171
|
+
# Anthropic Claude
|
|
172
|
+
export MEMORYLAYER_LLM_PROFILE_DEFAULT_PROVIDER=anthropic
|
|
173
|
+
export MEMORYLAYER_LLM_PROFILE_DEFAULT_API_KEY=sk-ant-...
|
|
174
|
+
|
|
175
|
+
# Google Gemini
|
|
176
|
+
export MEMORYLAYER_LLM_PROFILE_DEFAULT_PROVIDER=google
|
|
177
|
+
export MEMORYLAYER_LLM_PROFILE_DEFAULT_API_KEY=...
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**Profile configuration variables** (replace `DEFAULT` with any profile name):
|
|
181
|
+
|
|
182
|
+
| Variable | Description |
|
|
183
|
+
|----------|-------------|
|
|
184
|
+
| `MEMORYLAYER_LLM_PROFILE_<NAME>_PROVIDER` | Provider (`openai`, `anthropic`, `google`) |
|
|
185
|
+
| `MEMORYLAYER_LLM_PROFILE_<NAME>_API_KEY` | API key |
|
|
186
|
+
| `MEMORYLAYER_LLM_PROFILE_<NAME>_MODEL` | Model name override |
|
|
187
|
+
| `MEMORYLAYER_LLM_PROFILE_<NAME>_BASE_URL` | Custom API base URL |
|
|
188
|
+
| `MEMORYLAYER_LLM_PROFILE_<NAME>_MAX_TOKENS` | Max response tokens |
|
|
189
|
+
| `MEMORYLAYER_LLM_PROFILE_<NAME>_TEMPERATURE` | Sampling temperature |
|
|
190
|
+
|
|
191
|
+
Without an LLM provider, core memory operations (remember, recall, forget, associate) work normally, but synthesis features will be unavailable.
|
|
192
|
+
|
|
193
|
+
### Context Environment
|
|
194
|
+
|
|
195
|
+
The Context Environment provides server-side Python sandboxes for memory analysis and computation. See [Context Environment documentation](https://docs.memorylayer.ai/guides/context-environment/) for details.
|
|
196
|
+
|
|
197
|
+
**Configuration:**
|
|
198
|
+
|
|
199
|
+
| Variable | Default | Description |
|
|
200
|
+
|----------|---------|-------------|
|
|
201
|
+
| `MEMORYLAYER_CONTEXT_EXECUTOR` | `smolagents` | Executor backend (`smolagents` or `restricted`) |
|
|
202
|
+
| `MEMORYLAYER_CONTEXT_MAX_EXEC_SECONDS` | `30` | Timeout per code execution |
|
|
203
|
+
| `MEMORYLAYER_CONTEXT_MAX_OUTPUT_CHARS` | `50000` | Max captured stdout characters |
|
|
204
|
+
| `MEMORYLAYER_CONTEXT_QUERY_MAX_TOKENS` | `4096` | Max tokens for server-side LLM queries |
|
|
205
|
+
| `MEMORYLAYER_CONTEXT_MAX_MEMORY_BYTES` | `268435456` | Memory limit per sandbox (256 MB) |
|
|
206
|
+
| `MEMORYLAYER_CONTEXT_RLM_MAX_ITERATIONS` | `10` | Max iterations for RLM loops |
|
|
207
|
+
| `MEMORYLAYER_CONTEXT_RLM_MAX_EXEC_SECONDS` | `120` | Total timeout for RLM loops |
|
|
208
|
+
| `MEMORYLAYER_CONTEXT_MAX_OPERATIONS` | `1000000` | Max operations per sandbox execution |
|
|
209
|
+
|
|
210
|
+
## Storage
|
|
211
|
+
|
|
212
|
+
The default storage backend is **SQLite** with **sqlite-vec** for vector operations. The database file defaults to `~/.config/memorylayer-server/memorylayer.db` and contains all memories, embeddings, associations, and session data.
|
|
213
|
+
|
|
214
|
+
**Override the data directory:**
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
export MEMORYLAYER_DATA_DIR=/var/lib/memorylayer
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
**Override the database path:**
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
export MEMORYLAYER_SQLITE_STORAGE_PATH=/var/lib/memorylayer/data.db
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
## Recall Modes
|
|
227
|
+
|
|
228
|
+
The active recall mode is **RAG** (vector similarity + graph traversal). LLM and Hybrid modes are deprecated.
|
|
229
|
+
|
|
230
|
+
## MCP Integration
|
|
231
|
+
|
|
232
|
+
The Model Context Protocol (MCP) server is a **separate TypeScript package** (`@scitrera/memorylayer-mcp-server`), not part of this Python server CLI.
|
|
233
|
+
|
|
234
|
+
To use MemoryLayer with Claude Code or Claude Desktop:
|
|
235
|
+
|
|
236
|
+
1. Start the HTTP server: `memorylayer serve`
|
|
237
|
+
2. Install and configure the MCP server: `npm install -g @scitrera/memorylayer-mcp-server`
|
|
238
|
+
|
|
239
|
+
See the [MCP Server documentation](https://docs.memorylayer.ai/integrations/mcp-server/) for setup instructions.
|
|
240
|
+
|
|
241
|
+
## Health Checks
|
|
242
|
+
|
|
243
|
+
- **`GET /health`** — Basic health check (returns immediately)
|
|
244
|
+
- **`GET /health/ready`** — Readiness check (verifies storage connectivity)
|
|
245
|
+
|
|
246
|
+
The Docker image includes a built-in health check at `/health` (every 30s, 10s startup grace period).
|
|
247
|
+
|
|
248
|
+
## Documentation
|
|
249
|
+
|
|
250
|
+
- **Website:** [https://memorylayer.ai](https://memorylayer.ai)
|
|
251
|
+
- **Docs:** [https://docs.memorylayer.ai](https://docs.memorylayer.ai)
|
|
252
|
+
- **GitHub:** [https://github.com/scitrera/memorylayer](https://github.com/scitrera/memorylayer)
|
|
253
|
+
|
|
254
|
+
## License
|
|
255
|
+
|
|
256
|
+
Apache 2.0 License -- see [LICENSE](../LICENSE) for details.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "memorylayer-server"
|
|
3
|
-
version = "0.0.
|
|
3
|
+
version = "0.0.4"
|
|
4
4
|
description = "MemoryLayer.ai - API-first memory infrastructure for LLM-powered agents (open source core)"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -19,8 +19,9 @@ classifiers = [
|
|
|
19
19
|
]
|
|
20
20
|
|
|
21
21
|
dependencies = [
|
|
22
|
-
"scitrera-app-framework>=0.0.
|
|
22
|
+
"scitrera-app-framework>=0.0.69",
|
|
23
23
|
"scitrera-rt-data>=0.0.7",
|
|
24
|
+
"scitrera-ext-cachetools>=0.0.1",
|
|
24
25
|
"fastapi>=0.128.7",
|
|
25
26
|
"uvicorn[standard]>=0.30.0",
|
|
26
27
|
"pydantic>=2.12.5",
|
|
@@ -118,6 +119,8 @@ testpaths = ["tests"]
|
|
|
118
119
|
markers = [
|
|
119
120
|
"slow: marks tests as slow (deselect with '-m \"not slow\"')",
|
|
120
121
|
"integration: marks tests as integration tests (deselect with '-m \"not integration\"')",
|
|
122
|
+
"llm: marks tests requiring a live LLM provider (deselect with '-m \"not llm\"')",
|
|
123
|
+
"llm_quality: marks LLM output quality tests (deselect with '-m \"not llm_quality\"')",
|
|
121
124
|
]
|
|
122
125
|
|
|
123
126
|
[tool.mypy]
|
{memorylayer_server-0.0.3 → memorylayer_server-0.0.4}/src/memorylayer_server/api/v1/associations.py
RENAMED
|
@@ -9,19 +9,15 @@ Endpoints:
|
|
|
9
9
|
import logging
|
|
10
10
|
|
|
11
11
|
from fastapi import APIRouter, HTTPException, Depends, Request, status
|
|
12
|
-
from scitrera_app_framework import Plugin, Variables
|
|
12
|
+
from scitrera_app_framework import Plugin, Variables
|
|
13
13
|
|
|
14
14
|
from .. import EXT_MULTI_API_ROUTERS
|
|
15
15
|
|
|
16
16
|
from ...models.association import AssociateInput
|
|
17
17
|
from memorylayer_server.lifecycle.fastapi import get_logger, get_variables_dep
|
|
18
18
|
from ...services.association import AssociationService
|
|
19
|
-
from ...services.authentication import
|
|
20
|
-
|
|
21
|
-
AuthenticationError,
|
|
22
|
-
EXT_AUTHENTICATION_SERVICE,
|
|
23
|
-
)
|
|
24
|
-
from ...services.authorization import AuthorizationService, EXT_AUTHORIZATION_SERVICE
|
|
19
|
+
from ...services.authentication import AuthenticationService
|
|
20
|
+
from ...services.authorization import AuthorizationService
|
|
25
21
|
from .schemas import (
|
|
26
22
|
AssociationCreateRequest,
|
|
27
23
|
MemoryTraverseRequest,
|
|
@@ -30,21 +26,12 @@ from .schemas import (
|
|
|
30
26
|
GraphQueryResult,
|
|
31
27
|
ErrorResponse,
|
|
32
28
|
)
|
|
29
|
+
from .deps import get_auth_service, get_authz_service
|
|
33
30
|
|
|
34
31
|
router = APIRouter(prefix='/v1', tags=["associations"])
|
|
35
32
|
|
|
36
33
|
|
|
37
34
|
# Dependencies for services
|
|
38
|
-
async def get_auth_service(v: Variables = Depends(get_variables_dep)) -> AuthenticationService:
|
|
39
|
-
"""Get authentication service instance."""
|
|
40
|
-
return get_extension(EXT_AUTHENTICATION_SERVICE, v)
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
async def get_authz_service(v: Variables = Depends(get_variables_dep)) -> AuthorizationService:
|
|
44
|
-
"""Get authorization service instance."""
|
|
45
|
-
return get_extension(EXT_AUTHORIZATION_SERVICE, v)
|
|
46
|
-
|
|
47
|
-
|
|
48
35
|
async def get_association_service(v: Variables = Depends(get_variables_dep)) -> AssociationService:
|
|
49
36
|
"""Get association service instance from dependency injection."""
|
|
50
37
|
from ...services.association import get_association_service as _get_association_service
|