Metadata-Version: 2.4
Name: nfactorial
Version: 0.1.0
Summary: A Python framework for building AI agents with advanced orchestration capabilities
Project-URL: Homepage, https://factorial.sh
Project-URL: Repository, https://github.com/ricardo-agz/nfactorial
Project-URL: Documentation, https://factorial.sh
Project-URL: Issues, https://github.com/ricardo-agz/nfactorial/issues
Classifier: Typing :: Typed
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Requires-Dist: python-dotenv>=1.0.0
Requires-Dist: openai>=1.81.0
Requires-Dist: pydantic<3,>=2.10
Requires-Dist: redis>=6.1.0
Requires-Dist: fastapi<1,>=0.110.0
Requires-Dist: uvicorn[standard]>=0.34.2
Requires-Dist: websockets>=15.0.1
Provides-Extra: dev
Requires-Dist: mypy; extra == "dev"
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-asyncio; extra == "dev"
Requires-Dist: black; extra == "dev"
Requires-Dist: isort>=5.12.0; extra == "dev"
Requires-Dist: flake8>=6.0.0; extra == "dev"

# nFactorial

Factorial is a Python framework for reliably running high-concurrency agents asynchronously. 
It's designed for production workloads where you need to process thousands of agent tasks concurrently with built-in retries, monitoring, and distributed execution.

![Dashboard](https://raw.githubusercontent.com/ricardo-agz/nfactorial/main/docs/static/img/dashboard.png)

## Features

* **Distributed execution**: Run agents across multiple workers and machines with Redis-based coordination
* **Fault tolerance**: Automatic retries, backoff strategies, and recovery of dropped tasks from crashed workers
* **Real-time events**: Stream progress updates and results via WebSocket or Redis pub/sub
* **In-flight agent task management**: Cancel, steer, and monitor running tasks
* **Observability**: Built-in metrics dashboard and comprehensive logging
* **Deferred tools**: Support for long-running operations that complete outside the agent execution

## Installation

```bash
pip install nfactorial
```

## Quick Start

```python
from factorial import Agent, Orchestrator, gpt_41

# Define tools
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "Get the current weather",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {"type": "string"},
                },
                "required": ["location"],
            },
        },
    }
]

# Define tool actions
def get_weather(location: str) -> str:
    return f"The weather in {location} is sunny and 72°F"

# Create agent
agent = Agent(
    instructions="You help users get weather information.",
    model=gpt_41,
    tools=tools,
    tool_actions={"get_weather": get_weather},
)

# Create orchestrator
orchestrator = Orchestrator()
orchestrator.register_runner(
    agent=agent,
    agent_worker_config=AgentWorkerConfig(workers=30),
)

# Run the system
if __name__ == "__main__":
    orchestrator.run()
```
