Metadata-Version: 2.4
Name: outomem
Version: 0.4.0
Summary: The ultimate memory system library for AI agents.
License: Apache-2.0
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: lancedb>=0.5.0
Requires-Dist: fastembed>=0.3.0
Requires-Dist: anthropic>=0.20.0
Requires-Dist: openai>=1.0.0
Requires-Dist: google-genai>=1.0.0
Requires-Dist: pydantic>=2.0.0
Requires-Dist: tiktoken>=0.5.0
Requires-Dist: python-dateutil>=2.8.0
Requires-Dist: neo4j>=5.0.0
Requires-Dist: pyarrow>=14.0.0
Requires-Dist: numpy>=1.24.0
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
Requires-Dist: pytest-mock>=3.10.0; extra == "dev"
Requires-Dist: ruff>=0.1.0; extra == "dev"
Dynamic: license-file

# outomem

<img src="logo.svg" alt="outomem logo" width="400">

Outomem is the ultimate memory system library for AI agents. This tool manages user preferences, finds contradictions, and builds context for agents. The system organizes data into four layers: personalization, long term, temporal sessions, and raw facts. It tracks sentiment and detects when a user changes their mind by looking for polarity flips. Memory strength decays over time to keep context fresh. We built it with a Korean first design approach.

## Installation

```bash
pip install outomem
```

Note: You need external database instances running.

## Quick Start

```python
from outomem import Outomem

# Initialize the memory system
memory = Outomem(
    provider="openai-responses",
    base_url="https://api.openai.com/v1/responses",
    api_key="your-api-key",
    model="gpt-5.4",
    embed_api_url="https://api.openai.com/v1/embeddings",
    embed_api_key="your-api-key",
    embed_model="text-embedding-3-small",
    neo4j_uri="bolt://localhost:7687",
    neo4j_user="neo4j",
    neo4j_password="password",
    db_path="./outomem.lance",
    style_path="./style.md"
)

# Store a new memory
memory.remember("I prefer dark mode for all my applications.")

# Get context for a query
context = memory.get_context("What are the user's UI preferences?")
print(context)
```

## Health Check

Verify that all memory system components are operational before processing requests.

```python
status = memory.health_check()

if status["healthy"]:
    print("All systems operational")
else:
    print(f"LanceDB: {status['lancedb']['connected']}")
    print(f"Neo4j: {status['neo4j']['connected']}")
    print(f"Embedding: {status['embedding']['working']}")
```

The `health_check()` method returns a dict with connection status for LanceDB, Neo4j, and the embedding function, plus table statistics and node counts.

## Philosophy

See [Design Philosophy](ai-docs/philosophy.md).

## Architecture Overview

Outomem uses a layered approach to manage different types of information. The vector store handles semantic retrieval while the graph store manages complex relationships between facts. This hybrid setup allows for both fast similarity search and deep graph traversal.

See [Architecture](ai-docs/architecture.md) for more details.

## API Overview

| Class | Description |
| :--- | :--- |
| Outomem | Main API for managing agent memory and context. |
| LayerManager | Handles vector storage and retrieval. |
| GraphLayerManager | Manages graph database operations for relational facts. |

## Documentation Index

### Core Concepts
- [Design Philosophy](ai-docs/philosophy.md)
- [Architecture](ai-docs/architecture.md)

### Project Management
- [Governance](ai-docs/GOVERNANCE.md)

## Requirements

- Python >= 3.10
- External database instances (configurable)

## License

Apache License 2.0 - See [LICENSE](LICENSE)
