Metadata-Version: 2.5
Name: smrititantra
Version: 0.1.0
Summary: Memory for AI agents: ingest, recall, learn - library, HTTP service, and MCP server over one async core
Project-URL: Homepage, https://github.com/NoesisResearch/smrititantra
Project-URL: Repository, https://github.com/NoesisResearch/smrititantra
Project-URL: Issues, https://github.com/NoesisResearch/smrititantra/issues
Author: Daksh Gaur
License-Expression: Apache-2.0
License-File: LICENSE
Keywords: agents,ai,mcp,memory,rag,semantic-layer
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Typing :: Typed
Requires-Python: >=3.12
Requires-Dist: httpx>=0.27
Requires-Dist: pydantic-settings>=2.14.1
Requires-Dist: pydantic>=2.13.4
Provides-Extra: all
Requires-Dist: aioboto3>=13; extra == 'all'
Requires-Dist: asyncpg>=0.29; extra == 'all'
Requires-Dist: fastapi>=0.110; extra == 'all'
Requires-Dist: mcp>=2; extra == 'all'
Requires-Dist: motor>=3.4; extra == 'all'
Requires-Dist: neo4j>=5; extra == 'all'
Requires-Dist: numpy>=1.26; extra == 'all'
Requires-Dist: opentelemetry-api>=1.27; extra == 'all'
Requires-Dist: opentelemetry-sdk>=1.27; extra == 'all'
Requires-Dist: python-multipart>=0.0.9; extra == 'all'
Requires-Dist: pyyaml>=6; extra == 'all'
Requires-Dist: qdrant-client>=1; extra == 'all'
Requires-Dist: sqlglot>=25; extra == 'all'
Requires-Dist: uvicorn>=0.29; extra == 'all'
Provides-Extra: dev
Requires-Dist: httpx2>=2; extra == 'dev'
Requires-Dist: mypy>=1.14.1; extra == 'dev'
Requires-Dist: pre-commit>=4.6.0; extra == 'dev'
Requires-Dist: psutil>=6; extra == 'dev'
Requires-Dist: pytest-asyncio>=1.4.0; extra == 'dev'
Requires-Dist: pytest>=8.3.4; extra == 'dev'
Requires-Dist: ruff>=0.15.17; extra == 'dev'
Requires-Dist: twine>=6; extra == 'dev'
Provides-Extra: docs
Requires-Dist: mkdocs-material>=9.5; extra == 'docs'
Requires-Dist: mkdocs>=1.6; extra == 'docs'
Requires-Dist: mkdocstrings[python]>=0.26; extra == 'docs'
Provides-Extra: local
Requires-Dist: asyncpg>=0.29; extra == 'local'
Requires-Dist: numpy>=1.26; extra == 'local'
Requires-Dist: pyyaml>=6; extra == 'local'
Requires-Dist: sqlglot>=25; extra == 'local'
Provides-Extra: mongo
Requires-Dist: motor>=3.4; extra == 'mongo'
Provides-Extra: neo4j
Requires-Dist: neo4j>=5; extra == 'neo4j'
Provides-Extra: otel
Requires-Dist: opentelemetry-api>=1.27; extra == 'otel'
Requires-Dist: opentelemetry-sdk>=1.27; extra == 'otel'
Provides-Extra: qdrant
Requires-Dist: qdrant-client>=1; extra == 'qdrant'
Provides-Extra: s3
Requires-Dist: aioboto3>=13; extra == 's3'
Provides-Extra: server
Requires-Dist: fastapi>=0.110; extra == 'server'
Requires-Dist: mcp>=2; extra == 'server'
Requires-Dist: python-multipart>=0.0.9; extra == 'server'
Requires-Dist: uvicorn>=0.29; extra == 'server'
Description-Content-Type: text/markdown

# SmritiTantra

Memory for AI agents: ingest, recall, learn — one shared async core, served
three ways: embedded in your process, over HTTP, or as an MCP server.

[Full documentation →](https://noesisresearch.github.io/smrititantra/)

## Install

A bare install is a lightweight remote SDK (`smrititantra.connect()`, models,
exceptions, the sync facade):

```bash
pip install smrititantra
```

Everything heavier lives behind an extra — mix in what you need:

```bash
pip install "smrititantra[local]"    # embedded engine + Postgres store
pip install "smrititantra[server]"   # HTTP + MCP service
pip install "smrititantra[all]"      # local + server + every scale backend
```

| Extra    | Adds |
|----------|------|
| `local`  | the embedded engine, Postgres store |
| `server` | the FastAPI HTTP service + MCP server |
| `s3`     | S3/MinIO artifact store |
| `qdrant` | Qdrant vector-index backend at scale |
| `neo4j`  | Neo4j graph-serving tier at scale |
| `mongo`  | MongoDB source connector |
| `otel`   | OpenTelemetry tracing spans |

## Quickstart

```python
import asyncio
from smrititantra import Smrititantra

async def main() -> None:
    async with Smrititantra() as smriti:
        await smriti.concepts.author(
            kind="metric", name="net_revenue",
            metadata={"title": "Net Revenue", "description": "Gross minus refunds."},
            body="Net revenue is gross order value minus refunds.",
        )
        await smriti.snapshots.compile()
        pack = await smriti.recall("what is net revenue")
        print(pack.confidence, [i.ref for i in pack.required])

asyncio.run(main())
```

Or try the self-contained demo (no database or config needed):

```bash
pip install "smrititantra[local]"
smrititantra demo
```

## CLI

`smrititantra --help` covers the full surface: `orgs`, `sources`, `sync`,
`import`, `mine-workload`, `mine`, `coverage`, `gaps`, `reviews`, `compile`,
`recall`, `search`, `get`, `graph`, `snapshots`, `config`, `agents`, `keys`,
`serve`, `mcp`, `demo`, `init`. Details in the
[CLI reference](https://noesisresearch.github.io/smrititantra/cli/).

## License

Apache-2.0 — see [LICENSE](LICENSE).
