remembra 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.
- remembra-0.1.0/.gitignore +61 -0
- remembra-0.1.0/LICENSE +21 -0
- remembra-0.1.0/PKG-INFO +163 -0
- remembra-0.1.0/README.md +107 -0
- remembra-0.1.0/pyproject.toml +142 -0
- remembra-0.1.0/src/remembra/__init__.py +44 -0
- remembra-0.1.0/src/remembra/api/__init__.py +1 -0
- remembra-0.1.0/src/remembra/api/router.py +8 -0
- remembra-0.1.0/src/remembra/api/v1/__init__.py +1 -0
- remembra-0.1.0/src/remembra/api/v1/memories.py +192 -0
- remembra-0.1.0/src/remembra/client/__init__.py +19 -0
- remembra-0.1.0/src/remembra/client/memory.py +306 -0
- remembra-0.1.0/src/remembra/client/types.py +51 -0
- remembra-0.1.0/src/remembra/config.py +68 -0
- remembra-0.1.0/src/remembra/core/__init__.py +1 -0
- remembra-0.1.0/src/remembra/core/health.py +34 -0
- remembra-0.1.0/src/remembra/core/logging.py +23 -0
- remembra-0.1.0/src/remembra/main.py +167 -0
- remembra-0.1.0/src/remembra/models/__init__.py +1 -0
- remembra-0.1.0/src/remembra/models/memory.py +142 -0
- remembra-0.1.0/src/remembra/services/__init__.py +5 -0
- remembra-0.1.0/src/remembra/services/memory.py +338 -0
- remembra-0.1.0/src/remembra/storage/__init__.py +7 -0
- remembra-0.1.0/src/remembra/storage/database.py +434 -0
- remembra-0.1.0/src/remembra/storage/embeddings.py +178 -0
- remembra-0.1.0/src/remembra/storage/qdrant.py +260 -0
- remembra-0.1.0/tests/__init__.py +0 -0
- remembra-0.1.0/tests/test_client.py +174 -0
- remembra-0.1.0/tests/test_main.py +117 -0
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
dist/
|
|
9
|
+
downloads/
|
|
10
|
+
eggs/
|
|
11
|
+
.eggs/
|
|
12
|
+
lib/
|
|
13
|
+
lib64/
|
|
14
|
+
parts/
|
|
15
|
+
sdist/
|
|
16
|
+
var/
|
|
17
|
+
wheels/
|
|
18
|
+
*.egg-info/
|
|
19
|
+
.installed.cfg
|
|
20
|
+
*.egg
|
|
21
|
+
|
|
22
|
+
# Virtual environments
|
|
23
|
+
.venv/
|
|
24
|
+
venv/
|
|
25
|
+
ENV/
|
|
26
|
+
env/
|
|
27
|
+
|
|
28
|
+
# Testing / coverage
|
|
29
|
+
.pytest_cache/
|
|
30
|
+
.coverage
|
|
31
|
+
coverage.xml
|
|
32
|
+
htmlcov/
|
|
33
|
+
.tox/
|
|
34
|
+
|
|
35
|
+
# Type checking
|
|
36
|
+
.mypy_cache/
|
|
37
|
+
.ruff_cache/
|
|
38
|
+
|
|
39
|
+
# IDE
|
|
40
|
+
.vscode/
|
|
41
|
+
.idea/
|
|
42
|
+
*.swp
|
|
43
|
+
*.swo
|
|
44
|
+
.DS_Store
|
|
45
|
+
|
|
46
|
+
# Environment
|
|
47
|
+
.env
|
|
48
|
+
.env.*
|
|
49
|
+
!.env.example
|
|
50
|
+
|
|
51
|
+
# Docker volumes (local dev)
|
|
52
|
+
.qdrant_data/
|
|
53
|
+
.postgres_data/
|
|
54
|
+
|
|
55
|
+
# Logs
|
|
56
|
+
*.log
|
|
57
|
+
logs/
|
|
58
|
+
|
|
59
|
+
# Distribution
|
|
60
|
+
*.tar.gz
|
|
61
|
+
*.whl
|
remembra-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 DolphyTech
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
remembra-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: remembra
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Universal memory layer for AI applications. Self-host in 5 minutes.
|
|
5
|
+
Project-URL: Homepage, https://github.com/AskDolphy/remembra
|
|
6
|
+
Project-URL: Documentation, https://github.com/AskDolphy/remembra#readme
|
|
7
|
+
Project-URL: Repository, https://github.com/AskDolphy/remembra.git
|
|
8
|
+
Project-URL: Issues, https://github.com/AskDolphy/remembra/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/AskDolphy/remembra/blob/main/CHANGELOG.md
|
|
10
|
+
Author-email: DolphyTech <admin@dolphytech.com>
|
|
11
|
+
Maintainer-email: Damany Williams <admin@dolphytech.com>
|
|
12
|
+
License: MIT
|
|
13
|
+
License-File: LICENSE
|
|
14
|
+
Keywords: agent,ai,chatbot,embeddings,langchain,llm,memory,openai,rag,vector-search
|
|
15
|
+
Classifier: Development Status :: 3 - Alpha
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
18
|
+
Classifier: Operating System :: OS Independent
|
|
19
|
+
Classifier: Programming Language :: Python :: 3
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
22
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
23
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
24
|
+
Classifier: Typing :: Typed
|
|
25
|
+
Requires-Python: >=3.11
|
|
26
|
+
Requires-Dist: httpx>=0.27.0
|
|
27
|
+
Provides-Extra: all
|
|
28
|
+
Requires-Dist: aiosqlite>=0.20.0; extra == 'all'
|
|
29
|
+
Requires-Dist: fastapi>=0.115.0; extra == 'all'
|
|
30
|
+
Requires-Dist: openai>=1.0.0; extra == 'all'
|
|
31
|
+
Requires-Dist: pydantic-settings>=2.6.0; extra == 'all'
|
|
32
|
+
Requires-Dist: pydantic>=2.9.0; extra == 'all'
|
|
33
|
+
Requires-Dist: python-ulid>=3.0.0; extra == 'all'
|
|
34
|
+
Requires-Dist: qdrant-client<2.0.0,>=1.12.0; extra == 'all'
|
|
35
|
+
Requires-Dist: structlog>=24.4.0; extra == 'all'
|
|
36
|
+
Requires-Dist: uvicorn[standard]>=0.32.0; extra == 'all'
|
|
37
|
+
Provides-Extra: dev
|
|
38
|
+
Requires-Dist: build>=1.0.0; extra == 'dev'
|
|
39
|
+
Requires-Dist: mypy>=1.13.0; extra == 'dev'
|
|
40
|
+
Requires-Dist: pytest-asyncio>=0.24.0; extra == 'dev'
|
|
41
|
+
Requires-Dist: pytest-cov>=6.0.0; extra == 'dev'
|
|
42
|
+
Requires-Dist: pytest>=8.3.0; extra == 'dev'
|
|
43
|
+
Requires-Dist: ruff>=0.8.0; extra == 'dev'
|
|
44
|
+
Requires-Dist: twine>=5.0.0; extra == 'dev'
|
|
45
|
+
Provides-Extra: server
|
|
46
|
+
Requires-Dist: aiosqlite>=0.20.0; extra == 'server'
|
|
47
|
+
Requires-Dist: fastapi>=0.115.0; extra == 'server'
|
|
48
|
+
Requires-Dist: openai>=1.0.0; extra == 'server'
|
|
49
|
+
Requires-Dist: pydantic-settings>=2.6.0; extra == 'server'
|
|
50
|
+
Requires-Dist: pydantic>=2.9.0; extra == 'server'
|
|
51
|
+
Requires-Dist: python-ulid>=3.0.0; extra == 'server'
|
|
52
|
+
Requires-Dist: qdrant-client<2.0.0,>=1.12.0; extra == 'server'
|
|
53
|
+
Requires-Dist: structlog>=24.4.0; extra == 'server'
|
|
54
|
+
Requires-Dist: uvicorn[standard]>=0.32.0; extra == 'server'
|
|
55
|
+
Description-Content-Type: text/markdown
|
|
56
|
+
|
|
57
|
+
# Remembra - AI Memory Layer
|
|
58
|
+
|
|
59
|
+
> Persistent memory for AI applications. Self-host in 5 minutes.
|
|
60
|
+
|
|
61
|
+
## What Is This?
|
|
62
|
+
|
|
63
|
+
Remembra is a universal memory layer for LLMs. It solves the fundamental problem that every AI forgets everything between sessions.
|
|
64
|
+
|
|
65
|
+
```python
|
|
66
|
+
from remembra import Memory
|
|
67
|
+
|
|
68
|
+
memory = Memory(user_id="user_123")
|
|
69
|
+
|
|
70
|
+
# Store memories
|
|
71
|
+
memory.store("User prefers dark mode and works at Acme Corp")
|
|
72
|
+
|
|
73
|
+
# Recall with context
|
|
74
|
+
context = memory.recall("What are user's preferences?")
|
|
75
|
+
# Returns: "User prefers dark mode. Works at Acme Corp."
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Why We're Building This
|
|
79
|
+
|
|
80
|
+
### The Problem
|
|
81
|
+
Every AI app needs memory. Developers hack together solutions using vector databases, embeddings, and custom retrieval logic. It's complex, fragmented, and everyone rebuilds the same thing.
|
|
82
|
+
|
|
83
|
+
### Current Solutions Suck
|
|
84
|
+
- **Mem0**: $24M raised, but self-hosting docs are trash, pricing jumps from $19 to $249
|
|
85
|
+
- **Zep**: Academic, complex to deploy
|
|
86
|
+
- **Letta**: Not production-ready
|
|
87
|
+
- **LangChain Memory**: Too basic, no persistence
|
|
88
|
+
|
|
89
|
+
### Our Approach
|
|
90
|
+
- **Self-host in 5 minutes**: One Docker command, everything bundled
|
|
91
|
+
- **Fair pricing**: $0 → $29 → $99 (not $19 → $249)
|
|
92
|
+
- **Open source core**: MIT license, own your data
|
|
93
|
+
- **Actually works**: Built because we need it ourselves (Clawdbot)
|
|
94
|
+
|
|
95
|
+
## Core Features
|
|
96
|
+
|
|
97
|
+
### 1. Simple Memory Operations
|
|
98
|
+
- `store()` - Save memories with automatic extraction
|
|
99
|
+
- `recall()` - Semantic search with context
|
|
100
|
+
- `update()` - Intelligent merging
|
|
101
|
+
- `forget()` - GDPR-compliant deletion
|
|
102
|
+
|
|
103
|
+
### 2. Entity Resolution (Our Killer Feature)
|
|
104
|
+
Knows that "Adam", "Adam Smith", "Mr. Smith", and "my husband" are the same person.
|
|
105
|
+
|
|
106
|
+
### 3. Temporal Awareness
|
|
107
|
+
Memories have time context. TTL support. Historical queries.
|
|
108
|
+
|
|
109
|
+
### 4. Hybrid Storage
|
|
110
|
+
Vector (semantic) + Graph (relationships) + Relational (metadata) in one system.
|
|
111
|
+
|
|
112
|
+
### 5. Observability Dashboard
|
|
113
|
+
See what's stored, debug retrievals, visualize entity graphs.
|
|
114
|
+
|
|
115
|
+
## Quick Start
|
|
116
|
+
|
|
117
|
+
### Self-Hosted (Recommended)
|
|
118
|
+
```bash
|
|
119
|
+
docker run -d -p 8787:8787 remembra/remembra
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Python SDK
|
|
123
|
+
```bash
|
|
124
|
+
pip install remembra
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
```python
|
|
128
|
+
from remembra import Memory
|
|
129
|
+
|
|
130
|
+
# Connect to local instance
|
|
131
|
+
memory = Memory(
|
|
132
|
+
base_url="http://localhost:8787",
|
|
133
|
+
user_id="user_123",
|
|
134
|
+
project="my_app"
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
# Store
|
|
138
|
+
memory.store("User's name is John. He's a software engineer at Google.")
|
|
139
|
+
|
|
140
|
+
# Recall
|
|
141
|
+
context = memory.recall("Who is the user?")
|
|
142
|
+
print(context)
|
|
143
|
+
# "John is a software engineer at Google."
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## Documentation
|
|
147
|
+
|
|
148
|
+
- [Product Spec](./PRODUCT-SPEC.md) - Full product specification
|
|
149
|
+
- [Build Plan](./BUILD-PLAN.md) - Week-by-week development plan
|
|
150
|
+
- [Architecture](./ARCHITECTURE.md) - Technical architecture details
|
|
151
|
+
- [API Reference](./API.md) - API documentation
|
|
152
|
+
|
|
153
|
+
## Project Status
|
|
154
|
+
|
|
155
|
+
🚧 **In Development** - MVP target: 12 weeks
|
|
156
|
+
|
|
157
|
+
## License
|
|
158
|
+
|
|
159
|
+
MIT License - Use it however you want.
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
Built by [DolphyTech](https://dolphytech.com)
|
remembra-0.1.0/README.md
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Remembra - AI Memory Layer
|
|
2
|
+
|
|
3
|
+
> Persistent memory for AI applications. Self-host in 5 minutes.
|
|
4
|
+
|
|
5
|
+
## What Is This?
|
|
6
|
+
|
|
7
|
+
Remembra is a universal memory layer for LLMs. It solves the fundamental problem that every AI forgets everything between sessions.
|
|
8
|
+
|
|
9
|
+
```python
|
|
10
|
+
from remembra import Memory
|
|
11
|
+
|
|
12
|
+
memory = Memory(user_id="user_123")
|
|
13
|
+
|
|
14
|
+
# Store memories
|
|
15
|
+
memory.store("User prefers dark mode and works at Acme Corp")
|
|
16
|
+
|
|
17
|
+
# Recall with context
|
|
18
|
+
context = memory.recall("What are user's preferences?")
|
|
19
|
+
# Returns: "User prefers dark mode. Works at Acme Corp."
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Why We're Building This
|
|
23
|
+
|
|
24
|
+
### The Problem
|
|
25
|
+
Every AI app needs memory. Developers hack together solutions using vector databases, embeddings, and custom retrieval logic. It's complex, fragmented, and everyone rebuilds the same thing.
|
|
26
|
+
|
|
27
|
+
### Current Solutions Suck
|
|
28
|
+
- **Mem0**: $24M raised, but self-hosting docs are trash, pricing jumps from $19 to $249
|
|
29
|
+
- **Zep**: Academic, complex to deploy
|
|
30
|
+
- **Letta**: Not production-ready
|
|
31
|
+
- **LangChain Memory**: Too basic, no persistence
|
|
32
|
+
|
|
33
|
+
### Our Approach
|
|
34
|
+
- **Self-host in 5 minutes**: One Docker command, everything bundled
|
|
35
|
+
- **Fair pricing**: $0 → $29 → $99 (not $19 → $249)
|
|
36
|
+
- **Open source core**: MIT license, own your data
|
|
37
|
+
- **Actually works**: Built because we need it ourselves (Clawdbot)
|
|
38
|
+
|
|
39
|
+
## Core Features
|
|
40
|
+
|
|
41
|
+
### 1. Simple Memory Operations
|
|
42
|
+
- `store()` - Save memories with automatic extraction
|
|
43
|
+
- `recall()` - Semantic search with context
|
|
44
|
+
- `update()` - Intelligent merging
|
|
45
|
+
- `forget()` - GDPR-compliant deletion
|
|
46
|
+
|
|
47
|
+
### 2. Entity Resolution (Our Killer Feature)
|
|
48
|
+
Knows that "Adam", "Adam Smith", "Mr. Smith", and "my husband" are the same person.
|
|
49
|
+
|
|
50
|
+
### 3. Temporal Awareness
|
|
51
|
+
Memories have time context. TTL support. Historical queries.
|
|
52
|
+
|
|
53
|
+
### 4. Hybrid Storage
|
|
54
|
+
Vector (semantic) + Graph (relationships) + Relational (metadata) in one system.
|
|
55
|
+
|
|
56
|
+
### 5. Observability Dashboard
|
|
57
|
+
See what's stored, debug retrievals, visualize entity graphs.
|
|
58
|
+
|
|
59
|
+
## Quick Start
|
|
60
|
+
|
|
61
|
+
### Self-Hosted (Recommended)
|
|
62
|
+
```bash
|
|
63
|
+
docker run -d -p 8787:8787 remembra/remembra
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Python SDK
|
|
67
|
+
```bash
|
|
68
|
+
pip install remembra
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
```python
|
|
72
|
+
from remembra import Memory
|
|
73
|
+
|
|
74
|
+
# Connect to local instance
|
|
75
|
+
memory = Memory(
|
|
76
|
+
base_url="http://localhost:8787",
|
|
77
|
+
user_id="user_123",
|
|
78
|
+
project="my_app"
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
# Store
|
|
82
|
+
memory.store("User's name is John. He's a software engineer at Google.")
|
|
83
|
+
|
|
84
|
+
# Recall
|
|
85
|
+
context = memory.recall("Who is the user?")
|
|
86
|
+
print(context)
|
|
87
|
+
# "John is a software engineer at Google."
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Documentation
|
|
91
|
+
|
|
92
|
+
- [Product Spec](./PRODUCT-SPEC.md) - Full product specification
|
|
93
|
+
- [Build Plan](./BUILD-PLAN.md) - Week-by-week development plan
|
|
94
|
+
- [Architecture](./ARCHITECTURE.md) - Technical architecture details
|
|
95
|
+
- [API Reference](./API.md) - API documentation
|
|
96
|
+
|
|
97
|
+
## Project Status
|
|
98
|
+
|
|
99
|
+
🚧 **In Development** - MVP target: 12 weeks
|
|
100
|
+
|
|
101
|
+
## License
|
|
102
|
+
|
|
103
|
+
MIT License - Use it however you want.
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
Built by [DolphyTech](https://dolphytech.com)
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "remembra"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Universal memory layer for AI applications. Self-host in 5 minutes."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = { text = "MIT" }
|
|
11
|
+
requires-python = ">=3.11"
|
|
12
|
+
authors = [
|
|
13
|
+
{ name = "DolphyTech", email = "admin@dolphytech.com" },
|
|
14
|
+
]
|
|
15
|
+
maintainers = [
|
|
16
|
+
{ name = "Damany Williams", email = "admin@dolphytech.com" },
|
|
17
|
+
]
|
|
18
|
+
keywords = [
|
|
19
|
+
"ai",
|
|
20
|
+
"memory",
|
|
21
|
+
"llm",
|
|
22
|
+
"rag",
|
|
23
|
+
"vector-search",
|
|
24
|
+
"embeddings",
|
|
25
|
+
"chatbot",
|
|
26
|
+
"agent",
|
|
27
|
+
"langchain",
|
|
28
|
+
"openai",
|
|
29
|
+
]
|
|
30
|
+
classifiers = [
|
|
31
|
+
"Development Status :: 3 - Alpha",
|
|
32
|
+
"Intended Audience :: Developers",
|
|
33
|
+
"License :: OSI Approved :: MIT License",
|
|
34
|
+
"Operating System :: OS Independent",
|
|
35
|
+
"Programming Language :: Python :: 3",
|
|
36
|
+
"Programming Language :: Python :: 3.11",
|
|
37
|
+
"Programming Language :: Python :: 3.12",
|
|
38
|
+
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
39
|
+
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
40
|
+
"Typing :: Typed",
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
# Core SDK only needs httpx
|
|
44
|
+
dependencies = [
|
|
45
|
+
"httpx>=0.27.0",
|
|
46
|
+
]
|
|
47
|
+
|
|
48
|
+
[project.optional-dependencies]
|
|
49
|
+
# Full server dependencies
|
|
50
|
+
server = [
|
|
51
|
+
"fastapi>=0.115.0",
|
|
52
|
+
"uvicorn[standard]>=0.32.0",
|
|
53
|
+
"pydantic>=2.9.0",
|
|
54
|
+
"pydantic-settings>=2.6.0",
|
|
55
|
+
"qdrant-client>=1.12.0,<2.0.0",
|
|
56
|
+
"python-ulid>=3.0.0",
|
|
57
|
+
"structlog>=24.4.0",
|
|
58
|
+
"aiosqlite>=0.20.0",
|
|
59
|
+
"openai>=1.0.0",
|
|
60
|
+
]
|
|
61
|
+
|
|
62
|
+
# Development dependencies
|
|
63
|
+
dev = [
|
|
64
|
+
"pytest>=8.3.0",
|
|
65
|
+
"pytest-asyncio>=0.24.0",
|
|
66
|
+
"pytest-cov>=6.0.0",
|
|
67
|
+
"ruff>=0.8.0",
|
|
68
|
+
"mypy>=1.13.0",
|
|
69
|
+
"build>=1.0.0",
|
|
70
|
+
"twine>=5.0.0",
|
|
71
|
+
]
|
|
72
|
+
|
|
73
|
+
# All dependencies (SDK + Server)
|
|
74
|
+
all = [
|
|
75
|
+
"remembra[server]",
|
|
76
|
+
]
|
|
77
|
+
|
|
78
|
+
[project.urls]
|
|
79
|
+
Homepage = "https://github.com/AskDolphy/remembra"
|
|
80
|
+
Documentation = "https://github.com/AskDolphy/remembra#readme"
|
|
81
|
+
Repository = "https://github.com/AskDolphy/remembra.git"
|
|
82
|
+
Issues = "https://github.com/AskDolphy/remembra/issues"
|
|
83
|
+
Changelog = "https://github.com/AskDolphy/remembra/blob/main/CHANGELOG.md"
|
|
84
|
+
|
|
85
|
+
[project.scripts]
|
|
86
|
+
remembra = "remembra.main:run"
|
|
87
|
+
remembra-server = "remembra.main:run"
|
|
88
|
+
|
|
89
|
+
# ---------------------------------------------------------------------------
|
|
90
|
+
# Hatch build config
|
|
91
|
+
# ---------------------------------------------------------------------------
|
|
92
|
+
[tool.hatch.build.targets.wheel]
|
|
93
|
+
packages = ["src/remembra"]
|
|
94
|
+
|
|
95
|
+
[tool.hatch.build.targets.sdist]
|
|
96
|
+
include = [
|
|
97
|
+
"/src",
|
|
98
|
+
"/tests",
|
|
99
|
+
"/README.md",
|
|
100
|
+
"/LICENSE",
|
|
101
|
+
"/pyproject.toml",
|
|
102
|
+
]
|
|
103
|
+
|
|
104
|
+
# ---------------------------------------------------------------------------
|
|
105
|
+
# Ruff
|
|
106
|
+
# ---------------------------------------------------------------------------
|
|
107
|
+
[tool.ruff]
|
|
108
|
+
src = ["src"]
|
|
109
|
+
target-version = "py311"
|
|
110
|
+
line-length = 100
|
|
111
|
+
|
|
112
|
+
[tool.ruff.lint]
|
|
113
|
+
select = ["E", "F", "I", "UP", "B", "SIM", "ANN"]
|
|
114
|
+
ignore = ["ANN101", "ANN102", "ANN401"]
|
|
115
|
+
|
|
116
|
+
[tool.ruff.lint.isort]
|
|
117
|
+
known-first-party = ["remembra"]
|
|
118
|
+
|
|
119
|
+
# ---------------------------------------------------------------------------
|
|
120
|
+
# Mypy
|
|
121
|
+
# ---------------------------------------------------------------------------
|
|
122
|
+
[tool.mypy]
|
|
123
|
+
python_version = "3.11"
|
|
124
|
+
strict = true
|
|
125
|
+
files = ["src/remembra"]
|
|
126
|
+
plugins = ["pydantic.mypy"]
|
|
127
|
+
|
|
128
|
+
[[tool.mypy.overrides]]
|
|
129
|
+
module = ["qdrant_client.*", "structlog.*"]
|
|
130
|
+
ignore_missing_imports = true
|
|
131
|
+
|
|
132
|
+
# ---------------------------------------------------------------------------
|
|
133
|
+
# Pytest
|
|
134
|
+
# ---------------------------------------------------------------------------
|
|
135
|
+
[tool.pytest.ini_options]
|
|
136
|
+
asyncio_mode = "auto"
|
|
137
|
+
testpaths = ["tests"]
|
|
138
|
+
addopts = ["--cov=remembra", "--cov-report=term-missing", "--cov-report=xml"]
|
|
139
|
+
|
|
140
|
+
[tool.coverage.run]
|
|
141
|
+
source = ["src/remembra"]
|
|
142
|
+
omit = ["*/tests/*"]
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Remembra – Universal memory layer for AI applications.
|
|
3
|
+
|
|
4
|
+
Quick Start:
|
|
5
|
+
from remembra import Memory
|
|
6
|
+
|
|
7
|
+
memory = Memory(
|
|
8
|
+
base_url="http://localhost:8787",
|
|
9
|
+
user_id="user_123"
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
# Store
|
|
13
|
+
memory.store("John works at Acme Corp as CTO")
|
|
14
|
+
|
|
15
|
+
# Recall
|
|
16
|
+
result = memory.recall("Where does John work?")
|
|
17
|
+
print(result.context) # "John works at Acme Corp as CTO."
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
__version__ = "0.1.0"
|
|
21
|
+
|
|
22
|
+
# SDK exports (client-side)
|
|
23
|
+
from remembra.client.memory import Memory, MemoryError
|
|
24
|
+
from remembra.client.types import (
|
|
25
|
+
EntityItem,
|
|
26
|
+
ForgetResult,
|
|
27
|
+
MemoryItem,
|
|
28
|
+
RecallResult,
|
|
29
|
+
StoreResult,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
__all__ = [
|
|
33
|
+
# Core
|
|
34
|
+
"Memory",
|
|
35
|
+
"MemoryError",
|
|
36
|
+
# Types
|
|
37
|
+
"StoreResult",
|
|
38
|
+
"RecallResult",
|
|
39
|
+
"ForgetResult",
|
|
40
|
+
"MemoryItem",
|
|
41
|
+
"EntityItem",
|
|
42
|
+
# Metadata
|
|
43
|
+
"__version__",
|
|
44
|
+
]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""API layer – versioned routers."""
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""API v1 routers."""
|