Metadata-Version: 2.4
Name: nexus-enterprise-agent
Version: 0.1.0
Summary: Enterprise-ready, SaaS-native Python multi-agent framework
Project-URL: Homepage, https://github.com/gowrav-vishwakarma/nexus-saas-agent-framework
Project-URL: Repository, https://github.com/gowrav-vishwakarma/nexus-saas-agent-framework
Project-URL: Documentation, https://github.com/gowrav-vishwakarma/nexus-saas-agent-framework/tree/main/docs
Author: Nexus Team
License: MIT
Keywords: agents,llm,multi-agent,orchestration,saas
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Python: >=3.10
Requires-Dist: anyio>=4.0
Requires-Dist: httpx>=0.27
Requires-Dist: jinja2>=3.1
Requires-Dist: pydantic-settings>=2.0
Requires-Dist: pydantic>=2.0
Requires-Dist: pyyaml>=6.0
Requires-Dist: tenacity>=8.0
Requires-Dist: tiktoken>=0.7
Provides-Extra: all
Requires-Dist: aiosqlite>=0.20; extra == 'all'
Requires-Dist: alembic>=1.13; extra == 'all'
Requires-Dist: anthropic>=0.28; extra == 'all'
Requires-Dist: asyncpg>=0.29; extra == 'all'
Requires-Dist: fastapi>=0.111; extra == 'all'
Requires-Dist: filelock>=3.13; extra == 'all'
Requires-Dist: google-genai>=1.0; extra == 'all'
Requires-Dist: groq>=0.9; extra == 'all'
Requires-Dist: litellm>=1.40; extra == 'all'
Requires-Dist: ollama>=0.2; extra == 'all'
Requires-Dist: openai>=1.30; extra == 'all'
Requires-Dist: opentelemetry-api>=1.24; extra == 'all'
Requires-Dist: opentelemetry-exporter-otlp>=1.24; extra == 'all'
Requires-Dist: opentelemetry-sdk>=1.24; extra == 'all'
Requires-Dist: python-dotenv>=1.0; extra == 'all'
Requires-Dist: sse-starlette>=2.1; extra == 'all'
Requires-Dist: uvicorn>=0.30; extra == 'all'
Provides-Extra: anthropic
Requires-Dist: anthropic>=0.28; extra == 'anthropic'
Provides-Extra: dev
Requires-Dist: aiosqlite>=0.20; extra == 'dev'
Requires-Dist: asyncpg>=0.29; extra == 'dev'
Requires-Dist: coverage>=7.0; extra == 'dev'
Requires-Dist: faker>=25.0; extra == 'dev'
Requires-Dist: filelock>=3.13; extra == 'dev'
Requires-Dist: hiredis>=3.0; extra == 'dev'
Requires-Dist: mypy>=1.10; extra == 'dev'
Requires-Dist: pytest-asyncio>=0.23; extra == 'dev'
Requires-Dist: pytest-mock>=3.14; extra == 'dev'
Requires-Dist: pytest>=8.0; extra == 'dev'
Requires-Dist: redis>=5.0; extra == 'dev'
Requires-Dist: respx>=0.21; extra == 'dev'
Requires-Dist: ruff>=0.4; extra == 'dev'
Provides-Extra: fastapi
Requires-Dist: fastapi>=0.111; extra == 'fastapi'
Requires-Dist: python-dotenv>=1.0; extra == 'fastapi'
Requires-Dist: sse-starlette>=2.1; extra == 'fastapi'
Requires-Dist: uvicorn>=0.30; extra == 'fastapi'
Provides-Extra: file
Requires-Dist: filelock>=3.13; extra == 'file'
Provides-Extra: gemini
Requires-Dist: google-genai>=1.0; extra == 'gemini'
Provides-Extra: groq
Requires-Dist: groq>=0.9; extra == 'groq'
Provides-Extra: litellm
Requires-Dist: litellm>=1.40; extra == 'litellm'
Provides-Extra: ollama
Requires-Dist: ollama>=0.2; extra == 'ollama'
Provides-Extra: openai
Requires-Dist: openai>=1.30; extra == 'openai'
Provides-Extra: otel
Requires-Dist: opentelemetry-api>=1.24; extra == 'otel'
Requires-Dist: opentelemetry-exporter-otlp>=1.24; extra == 'otel'
Requires-Dist: opentelemetry-sdk>=1.24; extra == 'otel'
Provides-Extra: postgres
Requires-Dist: alembic>=1.13; extra == 'postgres'
Requires-Dist: asyncpg>=0.29; extra == 'postgres'
Provides-Extra: redis
Requires-Dist: hiredis; extra == 'redis'
Requires-Dist: redis>=5.0; extra == 'redis'
Provides-Extra: sqlite
Requires-Dist: aiosqlite>=0.20; extra == 'sqlite'
Requires-Dist: filelock>=3.13; extra == 'sqlite'
Provides-Extra: test
Requires-Dist: aiosqlite>=0.20; extra == 'test'
Requires-Dist: alembic>=1.13; extra == 'test'
Requires-Dist: anthropic>=0.28; extra == 'test'
Requires-Dist: asyncpg>=0.29; extra == 'test'
Requires-Dist: coverage>=7.0; extra == 'test'
Requires-Dist: faker>=25.0; extra == 'test'
Requires-Dist: fastapi>=0.111; extra == 'test'
Requires-Dist: filelock>=3.13; extra == 'test'
Requires-Dist: hiredis; extra == 'test'
Requires-Dist: hiredis>=3.0; extra == 'test'
Requires-Dist: litellm>=1.40; extra == 'test'
Requires-Dist: mypy>=1.10; extra == 'test'
Requires-Dist: openai>=1.30; extra == 'test'
Requires-Dist: pytest-asyncio>=0.23; extra == 'test'
Requires-Dist: pytest-mock>=3.14; extra == 'test'
Requires-Dist: pytest>=8.0; extra == 'test'
Requires-Dist: python-dotenv>=1.0; extra == 'test'
Requires-Dist: redis>=5.0; extra == 'test'
Requires-Dist: respx>=0.21; extra == 'test'
Requires-Dist: ruff>=0.4; extra == 'test'
Requires-Dist: sse-starlette>=2.1; extra == 'test'
Requires-Dist: uvicorn>=0.30; extra == 'test'
Description-Content-Type: text/markdown

# Nexus

**Enterprise-ready agent framework.** Describe agents in config. Wire who is calling and where data lives at run time. Call `run()`.

No global LLM settings. No shared agent singleton. Built for multi-tenant SaaS apps.

---

## Install

From PyPI:

```bash
pip install nexus-enterprise-agent
```

With optional extras (storage, LLM providers, FastAPI):

```bash
pip install "nexus-enterprise-agent[sqlite,litellm,fastapi]"
```

From GitHub:

```bash
pip install "git+https://github.com/gowrav-vishwakarma/nexus-saas-agent-framework.git"
```

For local development, clone the repo and sync dependencies:

```bash
uv sync --extra dev --extra sqlite --extra file
```

For the SaaS API example:

```bash
uv sync --extra fastapi --extra sqlite --extra litellm
```

Copy [.env.example](.env.example) to `.env` and set your LLM API key.

Run tests:

```bash
uv run pytest
```

---

## Run in 3 steps

| Step | File | Purpose |
|------|------|---------|
| 1 | `team.yaml` | What agents exist and how they connect |
| 2 | `team_prompts.py` | How they speak (prompt templates) |
| 3 | Short Python script | Who is calling (tenant, user, chat id) |

The repo includes a working team at [examples/orchestration/](examples/orchestration/).

```bash
uv run python examples/orchestration/run_team.py "Analyze Q4 revenue"
```

---

## Minimal example

```python
import asyncio
from nexus import OrchestrationManifest, OrchestrationRuntime, RunContext

async def main():
    manifest = OrchestrationManifest.load("examples/orchestration/research_team.yaml")
    runtime = OrchestrationRuntime.from_manifest(
        manifest,
        run_context=RunContext(
            tenant_id="demo",
            user_id="user-1",
            session_id="chat-1",  # set before building runtime for teams
        ),
    )
    result = await runtime.run("Analyze Q4 revenue")
    print(result.final_response)

asyncio.run(main())
```

Every parameter (optional fields and defaults) is documented in [docs/assets/complete-manifest.annotated.yaml](docs/assets/complete-manifest.annotated.yaml) and [docs/assets/complete-run.annotated.py](docs/assets/complete-run.annotated.py).

---

## Learn more

Full documentation: **[docs/index.md](docs/index.md)**

| Topic | Doc |
|-------|-----|
| Architecture (what goes where) | [docs/architecture.md](docs/architecture.md) |
| YAML walkthrough | [docs/getting-started.md](docs/getting-started.md) |
| Python API walkthrough | [docs/getting-started-python.md](docs/getting-started-python.md) |
| All YAML fields + defaults | [docs/reference/manifest-schema.md](docs/reference/manifest-schema.md) |
| Memory (cross-session facts) | [docs/reference/memory.md](docs/reference/memory.md) |
| Context summary (long chats) | [docs/reference/context-summary.md](docs/reference/context-summary.md) |
| Multi-tenant SaaS example | [docs/guides/saas-example.md](docs/guides/saas-example.md) |
| Example index | [docs/examples.md](docs/examples.md) |
| Full design spec | [NEXUS_AGENT_PRD.md](NEXUS_AGENT_PRD.md) |

---

## Examples

- [examples/orchestration/](examples/orchestration/) — YAML multi-agent team
- [examples/nexus_saas_api.py](examples/nexus_saas_api.py) — FastAPI SaaS API with plan tiers

```bash
uv run uvicorn examples.nexus_saas_api:app --host 0.0.0.0 --port 8000
```
