Metadata-Version: 2.4
Name: edgygraph
Version: 0.0.88
Summary: Graph-based Pipeline Builder
Author-email: Mathis Siebert <mathis.siebert@gmail.com>
Project-URL: Homepage, https://github.com/mathisxy/edgygraph
Project-URL: Documentation, https://mathisxy.github.io/edgygraph/
Project-URL: Repository, https://github.com/mathisxy/edgygraph
Project-URL: Issues, https://github.com/mathisxy/edgygraph/issues
Classifier: Development Status :: 3 - Alpha
Classifier: Topic :: Software Development :: Libraries
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3.13
Requires-Python: >=3.13
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pydantic>=2.0
Requires-Dist: rich>=14.0
Provides-Extra: dev
Requires-Dist: pyright; extra == "dev"
Requires-Dist: pytest; extra == "dev"
Requires-Dist: pytest-asyncio; extra == "dev"
Provides-Extra: docs
Requires-Dist: mkdocs; extra == "docs"
Requires-Dist: mkdocs-material; extra == "docs"
Requires-Dist: mkdocstrings[python]; extra == "docs"
Requires-Dist: mkdocs-awesome-pages-plugin; extra == "docs"
Dynamic: license-file

# Typed Graph-like Pipeline Builder

[![Pipy](https://img.shields.io/pypi/v/edgygraph)](https://pypi.org/project/edgygraph/)
[![Downloads](https://img.shields.io/pypi/dm/edgygraph)](https://pypi.org/project/edgygraph/#files)
[![Issues](https://img.shields.io/github/issues/mathisxy/edgygraph)](https://github.com/mathisxy/edgygraph/issues)
[![Type Check](https://github.com/mathisxy/edgygraph/actions/workflows/typecheck.yml/badge.svg?branch=main)](https://github.com/mathisxy/Edgy-Graph/actions/workflows/typecheck.yml)
[![Tests](https://github.com/mathisxy/edgygraph/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/mathisxy/Edgy-Graph/actions/workflows/tests.yml)
[![Deploy Docs](https://github.com/mathisxy/edgygraph/actions/workflows/docs.yml/badge.svg)](https://github.com/mathisxy/Edgy-Graph/actions/workflows/docs.yml)
[![Documentation](https://img.shields.io/badge/Docs-GitHub%20Pages-blue)](https://mathisxy.github.io/edgygraph/)

A **pydantically** typed, lightweight **graph framework** for Python that combines features from [Langgraph](https://github.com/langchain-ai/langgraph) with **static type safety**.

A community collection of nodes will be available [here](https://www.github.com/mathisxy/edgynodes/).

## Overview

- **Pydantic Typing**: <br> Built on Pydantic and Generics for 100% strict static type safety.
- **Inheritance or Protocols**: <br> Extend, specialize and join state and node classes.
- **Parallel Task Processing**: <br> Multiple nodes can run simultaneously
- **Dual State Management**:
    - State with automatic change extraction and conflict detection
    - Shared state accessible by all nodes, protected via explicit locking
- **Flexible Routing**: <br> Define simple node-to-node edges or dynamic routing based on functions.
- **Streaming**: <br> A standardized interface for streaming data between nodes.
- **Hooks Interface**: <br> Customizability and predefined interactive step-by-step debugging class.
- **Error Edges**: <br> Configure node error handling in the graph.

## Installation

### PyPI
```bash
pip install edgygraph
```
> Python 3.13+ is required


## Example Workflow

### Import Classes

```python
from edgygraph import State, Shared, Node, START, END, Graph
import asyncio
```

### Create a State

```python
class MyState(State):

    capslock: bool = False
```

### Create a Node

```python
class MyNode(Node[MyState, Shared]):

    async def __call__(self, state: MyState, shared: Shared) -> None:

        if state.capslock:
            print("HELLO WORLD!")
        else:
            print("Hello World!")
```

### Create Instances

```python
state = MyState(capslock=True)
shared = Shared()

node = MyNode()
```

### Create a Graph

```python
graph = Graph[MyState, Shared](
    edges=[
        (
            START,
            node,

            END,
        )
    ]
)
```

### Run Graph

```python
asyncio.run(graph(state, shared))
```

<br>

 > More examples can be found in the examples folder


