{"id":50639738,"url":"https://github.com/yeongseon/azure-functions-durable-graph-python","last_synced_at":"2026-06-07T07:04:23.123Z","repository":{"id":348709129,"uuid":"1199533083","full_name":"yeongseon/azure-functions-durable-graph-python","owner":"yeongseon","description":"Manifest-first graph runtime for Azure Functions Python v2 using Durable Functions — Part of the Azure Functions Python DX Toolkit","archived":false,"fork":false,"pushed_at":"2026-05-14T08:25:14.000Z","size":849,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-14T08:37:04.946Z","etag":null,"topics":["azure","azure-functions","durable-functions","dx-toolkit","graph","orchestration","python","serverless","workflow"],"latest_commit_sha":null,"homepage":"https://yeongseon.github.io/azure-functions-durable-graph-python/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yeongseon.png","metadata":{"files":{"readme":"README.ja.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-02T12:52:29.000Z","updated_at":"2026-05-14T08:24:22.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/yeongseon/azure-functions-durable-graph-python","commit_stats":null,"previous_names":["yeongseon/azure-functions-durable-graph","yeongseon/azure-functions-durable-graph-python"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/yeongseon/azure-functions-durable-graph-python","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yeongseon%2Fazure-functions-durable-graph-python","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yeongseon%2Fazure-functions-durable-graph-python/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yeongseon%2Fazure-functions-durable-graph-python/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yeongseon%2Fazure-functions-durable-graph-python/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yeongseon","download_url":"https://codeload.github.com/yeongseon/azure-functions-durable-graph-python/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yeongseon%2Fazure-functions-durable-graph-python/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34011815,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-07T02:00:07.652Z","response_time":124,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["azure","azure-functions","durable-functions","dx-toolkit","graph","orchestration","python","serverless","workflow"],"created_at":"2026-06-07T07:03:57.875Z","updated_at":"2026-06-07T07:04:23.118Z","avatar_url":"https://github.com/yeongseon.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Azure Functions Durable Graph\n\n[![PyPI](https://img.shields.io/pypi/v/azure-functions-durable-graph.svg)](https://pypi.org/project/azure-functions-durable-graph/)\n[![Python Version](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-blue)](https://pypi.org/project/azure-functions-durable-graph/)\n[![CI](https://github.com/yeongseon/azure-functions-durable-graph/actions/workflows/ci-test.yml/badge.svg)](https://github.com/yeongseon/azure-functions-durable-graph/actions/workflows/ci-test.yml)\n[![Release](https://github.com/yeongseon/azure-functions-durable-graph/actions/workflows/publish-pypi.yml/badge.svg)](https://github.com/yeongseon/azure-functions-durable-graph/actions/workflows/publish-pypi.yml)\n[![Security Scans](https://github.com/yeongseon/azure-functions-durable-graph/actions/workflows/security.yml/badge.svg)](https://github.com/yeongseon/azure-functions-durable-graph/actions/workflows/security.yml)\n[![codecov](https://codecov.io/gh/yeongseon/azure-functions-durable-graph/branch/main/graph/badge.svg)](https://codecov.io/gh/yeongseon/azure-functions-durable-graph)\n[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit)](https://pre-commit.com/)\n[![Docs](https://img.shields.io/badge/docs-gh--pages-blue)](https://yeongseon.github.io/azure-functions-durable-graph/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\n他の言語: [한국어](README.ko.md) | [English](README.md) | [简体中文](README.zh-CN.md)\n\n\u003e **Alpha版のお知らせ** — このパッケージは初期開発段階（`0.1.0a0`）です。リリース間でAPIが予告なく変更される場合があります。本番環境での使用前に十分なテストを行ってください。\n\n**Azure Functions** と **Durable Functions** オーケストレーションのためのマニフェストファーストなグラフランタイムです。\n\n---\n\n**Azure Functions Python DX Toolkit** の一部\n→ Azure Functions に FastAPI レベルの開発者体験を提供します\n\n## なぜ必要か\n\nAzure Functions でグラフ形状のワークフローを実行するのは、想像以上に困難です：\n\n- **オーケストレーターの決定論性** — Durable Functions オーケストレーターは決定論的でなければなりません。LLM やツールを直接呼び出すとリプレイの安全性が損なわれます\n- **グラフからランタイムへのギャップ** — ノード/エッジのグラフ設計を Durable Functions のアクティビティに変換するには、繰り返しのボイラープレートが必要です\n- **標準ランタイムの不在** — 各チームがグラフ定義と Durable Functions プリミティブの接続を独自に構築しています\n\n## 機能概要\n\n- **マニフェストファーストランタイム** — グラフ定義を安定したバージョン管理されたマニフェストにコンパイルし、オーケストレーターの決定論性を維持します\n- **自動 HTTP API** — `POST /api/graphs/{graph_name}/runs`、`GET /api/runs/{instance_id}`、イベント注入、キャンセル、ヘルスエンドポイントが自動的に登録されます\n- **決定論的オーケストレーターループ** — すべてのユーザーロジック（ノード実行、ルーティング、イベント処理）は Durable Functions アクティビティで実行され、オーケストレーター内部では実行されません\n- **条件付きルーティングと外部イベント** — `RouteDecision` によるブランチワークフローと human-in-the-loop パターンをサポートします\n\n## スコープ\n\n- Azure Functions Python **v2 プログラミングモデル**\n- `azure-functions-durable` による Durable Functions オーケストレーション\n- Pydantic v2 ベースの状態モデル\n- グラフトポロジー：順次、条件付き、イベント駆動\n\nこのパッケージは LangGraph から独立しており、LangGraph への依存はありません。名前は LangGraph のノード/エッジモデルにインスパイアされています。\n\n## 機能\n\n- グラフノード、ルート、イベントハンドラーを宣言する `ManifestBuilder` API\n- 構成可能な実行ループを持つ決定論的 Durable Functions オーケストレーター\n- Pydantic v2 モデルによる型安全な状態管理\n- 組み込み HTTP エンドポイント：実行開始、ステータス取得、イベント送信、キャンセル、ヘルス、OpenAPI\n- マニフェスト派生ハッシュによるグラフバージョニングで安全なデプロイをサポート\n\n## インストール\n\n```bash\npip install azure-functions-durable-graph\n```\n\nAzure Functions アプリには以下も含めてください：\n\n```text\nazure-functions\nazure-functions-durable\nazure-functions-durable-graph\n```\n\nローカル開発用：\n\n```bash\ngit clone https://github.com/yeongseon/azure-functions-durable-graph.git\ncd azure-functions-durable-graph\npip install -e .[dev]\n```\n\n## クイックスタート\n\n```python\nfrom pydantic import BaseModel\n\nfrom azure_functions_durable_graph import DurableGraphApp, ManifestBuilder, RouteDecision\n\n\nclass MyState(BaseModel):\n    message: str\n    processed: bool = False\n\n\ndef process_message(state: MyState) -\u003e dict:\n    return {\"processed\": True}\n\n\ndef finalize(state: MyState) -\u003e dict:\n    return {\"message\": f\"Done: {state.message}\"}\n\n\nbuilder = ManifestBuilder(graph_name=\"my_graph\", state_model=MyState)\nbuilder.set_entrypoint(\"process\")\nbuilder.add_node(\"process\", process_message, next_node=\"finalize\")\nbuilder.add_node(\"finalize\", finalize, terminal=True)\n\nregistration = builder.build()\n\nruntime = DurableGraphApp()\nruntime.register_registration(registration)\napp = runtime.function_app\n```\n\n### 提供される機能\n\n1. `POST /api/graphs/my_graph/runs` — 新しいグラフ実行を開始します\n2. `GET /api/runs/{instance_id}` — 実行ステータスをポーリングします\n3. `GET /api/health` — 登録済みグラフを一覧表示します\n4. `GET /api/openapi.json` — OpenAPI ドキュメント\n\n## 使用するタイミング\n\n- Azure Functions でグラフ形状の LLM ワークフローが必要な場合\n- 手動のアクティビティ配線なしで決定論的な Durable Functions オーケストレーションが必要な場合\n- Human-in-the-loop 承認パターン（外部イベント）が必要な場合\n- トポロジーハッシュによるバージョン管理されたグラフデプロイが必要な場合\n\n## サンプル\n\n| サンプル | パターン | 主要コンセプト |\n|---------|---------|----------------|\n| [Data Pipeline](examples/data_pipeline/) | 順次実行 | `next_node` チェーン、状態蓄積 |\n| [Content Classifier](examples/content_classifier/) | 条件分岐 | `RouteDecision.next()`、fan-in トポロジー |\n| [Support Agent](examples/support_agent/) | Human-in-the-loop | `wait_for_event`、外部イベント、承認フロー |\n\n## ドキュメント\n\n- プロジェクトドキュメントは `docs/` にあります\n- テスト済みの例は `examples/` にあります\n- プロダクト要件：`PRD.md`\n- 設計原則：`DESIGN.md`\n\n## エコシステム\n\n**Azure Functions Python DX Toolkit** の一部：\n\n| パッケージ | 役割 |\n|---------|------|\n| [azure-functions-validation](https://github.com/yeongseon/azure-functions-validation) | リクエスト・レスポンスバリデーション |\n| [azure-functions-openapi](https://github.com/yeongseon/azure-functions-openapi) | OpenAPI スペックと Swagger UI |\n| [azure-functions-logging](https://github.com/yeongseon/azure-functions-logging) | 構造化ロギングとオブザーバビリティ |\n| [azure-functions-doctor](https://github.com/yeongseon/azure-functions-doctor) | デプロイ前診断 CLI |\n| [azure-functions-scaffold](https://github.com/yeongseon/azure-functions-scaffold) | プロジェクトスキャフォールディング |\n| **azure-functions-durable-graph** | Durable Functions ベースのマニフェストグラフランタイム |\n| [azure-functions-python-cookbook](https://github.com/yeongseon/azure-functions-python-cookbook) | レシピとサンプル |\n\n## 免責事項\n\nこのプロジェクトは独立したコミュニティプロジェクトであり、Microsoft とは\n提携・承認・保守の関係にありません。\n\nAzure および Azure Functions は Microsoft Corporation の商標です。\n\n## ライセンス\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyeongseon%2Fazure-functions-durable-graph-python","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyeongseon%2Fazure-functions-durable-graph-python","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyeongseon%2Fazure-functions-durable-graph-python/lists"}