Give your AI agents human-like memory. The pluggable memory layer for AI applications.
Project description
Remina
Memory infrastructure for AI applications.
Remina is the memory layer for AI systems. Extract facts, persist context, and retrieve relevant memories — with pluggable infrastructure that fits your stack.
from remina import Memory
memory = Memory()
# Extract and store facts
memory.add("I'm John, I work at Google as a software engineer.", user_id="john")
# Semantic retrieval
results = memory.search("What is John's profession?", user_id="john")
# → ["Works as a software engineer at Google"]
Why Remina
AI applications without persistent memory accumulate technical debt: lost context, repeated user friction, degraded personalization. Remina addresses this at the infrastructure layer.
Core capabilities:
- Automatic fact extraction — LLM-powered extraction from conversations
- Hybrid retrieval — Vector similarity + temporal decay + importance weighting
- Deduplication — Similarity-based duplicate prevention
- Pluggable architecture — Swap storage, vectors, embeddings, and LLM providers independently
Installation
pip install remina
Provider extras: openai, anthropic, gemini, pinecone, qdrant, chroma, postgres, mongodb, redis.
Quick Start
from remina import Memory
# Defaults: OpenAI embeddings + Chroma vectors + SQLite storage
memory = Memory()
# Extract facts from conversation
memory.add(
messages=[
{"role": "user", "content": "I just moved to Seattle"},
{"role": "assistant", "content": "How do you like it?"},
{"role": "user", "content": "Great city, but the rain takes adjustment"}
],
user_id="user_123"
)
# Extracts: ["Lives in Seattle", "Likes Seattle", "Rain requires adjustment"]
# Semantic search
results = memory.search("Where does the user live?", user_id="user_123")
# Retrieve all
all_memories = memory.get_all(user_id="user_123")
# Cleanup
memory.close()
Async API
from remina import AsyncMemory
import asyncio
async def main():
memory = AsyncMemory()
await memory.add("I prefer dark mode", user_id="user_123")
results = await memory.search("user preferences", user_id="user_123")
await memory.close()
asyncio.run(main())
Configuration
from remina import Memory
config = {
"llm": {
"provider": "openai", # or "anthropic", "gemini", "ollama"
"config": {"model": "gpt-4o-mini"}
},
"embedder": {
"provider": "openai",
"config": {"model": "text-embedding-3-small"}
},
"vector_store": {
"provider": "qdrant", # or "pinecone", "chroma", "pgvector"
"config": {"url": "http://localhost:6333"}
},
"storage": {
"provider": "postgres", # or "mongodb", "sqlite"
"config": {
"host": "localhost",
"database": "remina",
"user": "postgres",
"password": "password"
}
},
"cache": {
"redis_url": "redis://localhost:6379",
"enabled": True
}
}
memory = Memory(config)
Supported Providers
| Category | Providers |
|---|---|
| LLMs | OpenAI, Anthropic, Gemini, Ollama |
| Embeddings | OpenAI, Gemini, Cohere, Ollama, HuggingFace |
| Vector Stores | Pinecone, Qdrant, Chroma, pgvector |
| Storage | PostgreSQL, MongoDB, SQLite |
| Cache | Redis |
Roadmap
v0.2 — Extraction & Intelligence
- Conversation ingestion pipeline
- Contradiction detection
- Memory consolidation
v0.3 — Graph & Relationships
- Memory graph with relationship linking
- Graph-enhanced retrieval
- Adaptive decay rates
v0.4 — Provider Expansion
- Weaviate, Milvus vector stores
- DynamoDB, Supabase storage
- Voyage, HuggingFace embeddings
- vLLM local inference
v1.0 — Production Hardening
- TypeScript SDK
- REST API wrapper
- Prometheus metrics
- Distributed tracing
Contributing
git clone https://github.com/bikidsx/remina
cd remina-memory
pip install -e ".[dev]"
pytest
See CONTRIBUTING.md for details.
License
Apache 2.0
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file remina-0.1.5.tar.gz.
File metadata
- Download URL: remina-0.1.5.tar.gz
- Upload date:
- Size: 31.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.15 {"installer":{"name":"uv","version":"0.9.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Deepin","version":"25","id":"crimson","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a46edfd0aba2718a0fed16b66a8c68324dc9b0e4589d28527eb3b7dbd611e9f2
|
|
| MD5 |
ff6958d26f78022bcddbb24f7638f163
|
|
| BLAKE2b-256 |
f2b5999a6a1153f8fca8bed6c1f9634f85d18cfb93991400a669f94d44c86182
|
File details
Details for the file remina-0.1.5-py3-none-any.whl.
File metadata
- Download URL: remina-0.1.5-py3-none-any.whl
- Upload date:
- Size: 44.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.15 {"installer":{"name":"uv","version":"0.9.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Deepin","version":"25","id":"crimson","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dba0f37e03cd8f79ff32a74fe1064698f1b27389801d25a8486f44e9c3ab8eb7
|
|
| MD5 |
36fec61feac1fa5402e5ce683b5589ad
|
|
| BLAKE2b-256 |
f959b2dea6ae82bc4e9657b9a745f73b4a3a7e5d352dd76d30aff21667d3a398
|