agentic-workflow-orchestrator 1.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. agentic_workflow_orchestrator-1.0.0/CHANGELOG.md +51 -0
  2. agentic_workflow_orchestrator-1.0.0/MANIFEST.in +11 -0
  3. agentic_workflow_orchestrator-1.0.0/PKG-INFO +125 -0
  4. agentic_workflow_orchestrator-1.0.0/README.md +70 -0
  5. agentic_workflow_orchestrator-1.0.0/agentic_workflow_orchestrator.egg-info/PKG-INFO +125 -0
  6. agentic_workflow_orchestrator-1.0.0/agentic_workflow_orchestrator.egg-info/SOURCES.txt +31 -0
  7. agentic_workflow_orchestrator-1.0.0/agentic_workflow_orchestrator.egg-info/dependency_links.txt +1 -0
  8. agentic_workflow_orchestrator-1.0.0/agentic_workflow_orchestrator.egg-info/requires.txt +35 -0
  9. agentic_workflow_orchestrator-1.0.0/agentic_workflow_orchestrator.egg-info/top_level.txt +1 -0
  10. agentic_workflow_orchestrator-1.0.0/orchestrator/__init__.py +63 -0
  11. agentic_workflow_orchestrator-1.0.0/orchestrator/engine.py +245 -0
  12. agentic_workflow_orchestrator-1.0.0/orchestrator/llm.py +390 -0
  13. agentic_workflow_orchestrator-1.0.0/orchestrator/mcp_integration.py +283 -0
  14. agentic_workflow_orchestrator-1.0.0/orchestrator/py.typed +0 -0
  15. agentic_workflow_orchestrator-1.0.0/orchestrator/ratelimit.py +65 -0
  16. agentic_workflow_orchestrator-1.0.0/orchestrator/registry.py +104 -0
  17. agentic_workflow_orchestrator-1.0.0/orchestrator/report.py +121 -0
  18. agentic_workflow_orchestrator-1.0.0/orchestrator/spec.py +233 -0
  19. agentic_workflow_orchestrator-1.0.0/pyproject.toml +114 -0
  20. agentic_workflow_orchestrator-1.0.0/setup.cfg +4 -0
  21. agentic_workflow_orchestrator-1.0.0/setup.py +65 -0
  22. agentic_workflow_orchestrator-1.0.0/tests/test_engine.py +170 -0
  23. agentic_workflow_orchestrator-1.0.0/tests/test_go_engine.py +382 -0
  24. agentic_workflow_orchestrator-1.0.0/tests/test_mcp_integration.py +275 -0
@@ -0,0 +1,51 @@
1
+ # Changelog
2
+
3
+ All notable changes to the Orchestrator SDK will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [0.1.0] - 2026-06-18
9
+
10
+ ### Added
11
+ - Core orchestration engine: DAG scheduler, worker pool, rate limiting
12
+ - Skill and tool registration system
13
+ - LLM integration with Anthropic (Claude) support and MockLLM for testing
14
+ - MCP (Model Context Protocol) support with three levels of abstraction:
15
+ - Level 1: Direct tool calls (stateless)
16
+ - Level 2: Pre-wrapped MCP skills (semantic)
17
+ - Level 3: Managed MCP servers (cached, lifecycle-managed)
18
+ - Workflow templating: `${input.x}`, `${taskId.output}` references
19
+ - Retry policies: exponential backoff, jitter support
20
+ - Per-task and per-provider rate limiting
21
+ - Comprehensive reporting: timing, LLM token usage, critical path, decisions
22
+ - Python SDK with async-ready API
23
+ - Go reference engine (gRPC + stdio transport)
24
+ - Full test suite (unit + integration + end-to-end)
25
+ - Four runnable examples (hello world, parallel pipeline, LLM review, MCP flexible)
26
+
27
+ ### Documentation
28
+ - Design document (DESIGN.md)
29
+ - Quick start guide (QUICKSTART.md)
30
+ - Testing guide (TESTING.md)
31
+ - MCP integration reference (MCP_INTEGRATION.md)
32
+ - Full API reference in docstrings
33
+
34
+ ## Roadmap
35
+
36
+ ### v0.2.0 (planned)
37
+ - [ ] Dynamic fan-out (foreach loops spawning N parallel children)
38
+ - [ ] Sub-workflows (nested workflow execution)
39
+ - [ ] Durable state persistence (Redis/Postgres backend)
40
+ - [ ] Multi-tenant service mode with resumable runs
41
+ - [ ] Human-in-the-loop approval tasks
42
+ - [ ] Automatic reconnect for failed MCP servers
43
+
44
+ ### v1.0.0 (planned)
45
+ - [ ] JavaScript/TypeScript SDK
46
+ - [ ] Java SDK
47
+ - [ ] Native Go client library
48
+ - [ ] Distributed workflow execution across multiple machines
49
+ - [ ] Advanced observability: distributed tracing, metrics export
50
+ - [ ] Workflow visualization dashboard
51
+ - [ ] Policy engine for compliance checks
@@ -0,0 +1,11 @@
1
+ include README.md
2
+ include LICENSE
3
+ include CHANGELOG.md
4
+ recursive-include orchestrator py.typed
5
+
6
+ # Exclude test and example files from distributions
7
+ exclude tests/
8
+ exclude examples/
9
+ recursive-exclude . __pycache__
10
+ recursive-exclude . *.pyc
11
+ recursive-exclude . .pytest_cache
@@ -0,0 +1,125 @@
1
+ Metadata-Version: 2.4
2
+ Name: agentic-workflow-orchestrator
3
+ Version: 1.0.0
4
+ Summary: Orchestrate multi-agent workflows with autonomous reasoning, parallelism, rate limiting, and LLM integration
5
+ Home-page: https://github.com/org/orchestrator
6
+ Author: Manikandan Kasi
7
+ Author-email: Orchestrator Team <info@orchestrator.dev>
8
+ License: Apache License 2.0
9
+ Project-URL: Homepage, https://github.com/org/orchestrator
10
+ Project-URL: Documentation, https://github.com/org/orchestrator/blob/main/QUICKSTART.md
11
+ Project-URL: Repository, https://github.com/org/orchestrator
12
+ Project-URL: Issues, https://github.com/org/orchestrator/issues
13
+ Keywords: orchestration,workflow,multi-agent,agent,concurrency,rate-limiting,llm,mcp,asyncio
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
17
+ Classifier: License :: OSI Approved :: Apache Software License
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.9
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Operating System :: OS Independent
24
+ Requires-Python: >=3.9
25
+ Description-Content-Type: text/markdown
26
+ Provides-Extra: llm-anthropic
27
+ Requires-Dist: anthropic>=0.7.0; extra == "llm-anthropic"
28
+ Provides-Extra: llm-openai
29
+ Requires-Dist: openai>=1.0.0; extra == "llm-openai"
30
+ Provides-Extra: llm-gemini
31
+ Requires-Dist: google-generativeai>=0.3.0; extra == "llm-gemini"
32
+ Provides-Extra: llm-xai
33
+ Requires-Dist: openai>=1.0.0; extra == "llm-xai"
34
+ Provides-Extra: llm-huggingface
35
+ Requires-Dist: transformers>=4.30.0; extra == "llm-huggingface"
36
+ Requires-Dist: torch>=2.0.0; extra == "llm-huggingface"
37
+ Provides-Extra: llm-azure
38
+ Requires-Dist: openai>=1.0.0; extra == "llm-azure"
39
+ Provides-Extra: llm
40
+ Requires-Dist: anthropic>=0.7.0; extra == "llm"
41
+ Requires-Dist: openai>=1.0.0; extra == "llm"
42
+ Requires-Dist: google-generativeai>=0.3.0; extra == "llm"
43
+ Requires-Dist: transformers>=4.30.0; extra == "llm"
44
+ Requires-Dist: torch>=2.0.0; extra == "llm"
45
+ Provides-Extra: engine
46
+ Provides-Extra: dev
47
+ Requires-Dist: pytest>=7.0; extra == "dev"
48
+ Requires-Dist: pytest-cov>=4.0; extra == "dev"
49
+ Requires-Dist: black>=23.0; extra == "dev"
50
+ Requires-Dist: isort>=5.12; extra == "dev"
51
+ Requires-Dist: mypy>=1.0; extra == "dev"
52
+ Dynamic: author
53
+ Dynamic: home-page
54
+ Dynamic: requires-python
55
+
56
+ # orchestrator (Python reference SDK)
57
+
58
+ In-process workflow orchestration engine + authoring API. Zero required dependencies
59
+ (stdlib `asyncio`); `pyyaml` is optional (for `.yaml` specs), `anthropic` optional (for the
60
+ real LLM adapter).
61
+
62
+ ## Concepts
63
+
64
+ - **Workflow** — a DAG of tasks loaded from a template (`Workflow.from_file/from_dict/from_json`).
65
+ - **Skill** — a registered handler `(ctx, inputs) -> output`, sync or `async`.
66
+ - **Tool** — a registered callable a skill invokes via `ctx.call_tool(...)`.
67
+ - **Orchestrator** — runs a workflow, enforcing concurrency + rate limits, and returns a `Report`.
68
+
69
+ ## Minimal usage
70
+
71
+ ```python
72
+ from orchestrator import Workflow, Orchestrator, Registry, MockLLM
73
+
74
+ reg = Registry()
75
+
76
+ @reg.tool("http.get")
77
+ def http_get(url):
78
+ return {"url": url, "ok": True}
79
+
80
+ @reg.skill("market.fetch")
81
+ def fetch(ctx, inputs):
82
+ ctx.call_tool("http.get", url=f"/prices/{inputs['ticker']}")
83
+ ctx.record_decision("selected primary feed", rationale="lowest latency")
84
+ return {"ticker": inputs["ticker"], "last": 199.4}
85
+
86
+ @reg.skill("llm.classify")
87
+ def classify(ctx, inputs):
88
+ r = ctx.llm(messages=[{"role": "user", "content": inputs["text"]}], model="claude-opus-4-8")
89
+ return r.text
90
+
91
+ wf = Workflow.from_file("../spec/examples/market-analysis.json")
92
+ report = Orchestrator(reg, llm=MockLLM()).run_sync(wf, inputs={"ticker": "AAPL"})
93
+ print(report.to_json())
94
+ ```
95
+
96
+ ## The `ctx` (SkillContext) API
97
+
98
+ | Member | Purpose |
99
+ |---|---|
100
+ | `ctx.inputs` | resolved task inputs |
101
+ | `ctx.call_tool(name, **kwargs)` | invoke a registered tool |
102
+ | `ctx.llm(messages, tools=, model=, **opts)` | call the configured LLM provider; usage is recorded |
103
+ | `ctx.record_decision(summary, rationale=, data=)` | append a critical decision to the trace |
104
+ | `ctx.log(msg)`, `ctx.attempt`, `ctx.cancelled` | logging / retry attempt / cooperative cancel flag |
105
+
106
+ ## Report
107
+
108
+ `report.to_dict()` / `report.to_json()` give: `status`, `duration_ms`, per-task
109
+ `{status, duration_ms, attempts, llm, decisions, error}`, `critical_path` (bottleneck chain),
110
+ `totals` (llm tokens, tool calls, retries), `errors`, and the resolved `output`.
111
+
112
+ ## Run
113
+
114
+ ```bash
115
+ python3 examples/run_market.py
116
+ python3 tests/test_engine.py
117
+ ```
118
+
119
+ ## Using a real LLM
120
+
121
+ ```python
122
+ from orchestrator import AnthropicProvider, Orchestrator
123
+ orch = Orchestrator(reg, llm=AnthropicProvider(model="claude-opus-4-8")) # needs ANTHROPIC_API_KEY + `pip install anthropic`
124
+ ```
125
+ Confirm current Claude model IDs/limits from the Claude API reference before pinning them.
@@ -0,0 +1,70 @@
1
+ # orchestrator (Python reference SDK)
2
+
3
+ In-process workflow orchestration engine + authoring API. Zero required dependencies
4
+ (stdlib `asyncio`); `pyyaml` is optional (for `.yaml` specs), `anthropic` optional (for the
5
+ real LLM adapter).
6
+
7
+ ## Concepts
8
+
9
+ - **Workflow** — a DAG of tasks loaded from a template (`Workflow.from_file/from_dict/from_json`).
10
+ - **Skill** — a registered handler `(ctx, inputs) -> output`, sync or `async`.
11
+ - **Tool** — a registered callable a skill invokes via `ctx.call_tool(...)`.
12
+ - **Orchestrator** — runs a workflow, enforcing concurrency + rate limits, and returns a `Report`.
13
+
14
+ ## Minimal usage
15
+
16
+ ```python
17
+ from orchestrator import Workflow, Orchestrator, Registry, MockLLM
18
+
19
+ reg = Registry()
20
+
21
+ @reg.tool("http.get")
22
+ def http_get(url):
23
+ return {"url": url, "ok": True}
24
+
25
+ @reg.skill("market.fetch")
26
+ def fetch(ctx, inputs):
27
+ ctx.call_tool("http.get", url=f"/prices/{inputs['ticker']}")
28
+ ctx.record_decision("selected primary feed", rationale="lowest latency")
29
+ return {"ticker": inputs["ticker"], "last": 199.4}
30
+
31
+ @reg.skill("llm.classify")
32
+ def classify(ctx, inputs):
33
+ r = ctx.llm(messages=[{"role": "user", "content": inputs["text"]}], model="claude-opus-4-8")
34
+ return r.text
35
+
36
+ wf = Workflow.from_file("../spec/examples/market-analysis.json")
37
+ report = Orchestrator(reg, llm=MockLLM()).run_sync(wf, inputs={"ticker": "AAPL"})
38
+ print(report.to_json())
39
+ ```
40
+
41
+ ## The `ctx` (SkillContext) API
42
+
43
+ | Member | Purpose |
44
+ |---|---|
45
+ | `ctx.inputs` | resolved task inputs |
46
+ | `ctx.call_tool(name, **kwargs)` | invoke a registered tool |
47
+ | `ctx.llm(messages, tools=, model=, **opts)` | call the configured LLM provider; usage is recorded |
48
+ | `ctx.record_decision(summary, rationale=, data=)` | append a critical decision to the trace |
49
+ | `ctx.log(msg)`, `ctx.attempt`, `ctx.cancelled` | logging / retry attempt / cooperative cancel flag |
50
+
51
+ ## Report
52
+
53
+ `report.to_dict()` / `report.to_json()` give: `status`, `duration_ms`, per-task
54
+ `{status, duration_ms, attempts, llm, decisions, error}`, `critical_path` (bottleneck chain),
55
+ `totals` (llm tokens, tool calls, retries), `errors`, and the resolved `output`.
56
+
57
+ ## Run
58
+
59
+ ```bash
60
+ python3 examples/run_market.py
61
+ python3 tests/test_engine.py
62
+ ```
63
+
64
+ ## Using a real LLM
65
+
66
+ ```python
67
+ from orchestrator import AnthropicProvider, Orchestrator
68
+ orch = Orchestrator(reg, llm=AnthropicProvider(model="claude-opus-4-8")) # needs ANTHROPIC_API_KEY + `pip install anthropic`
69
+ ```
70
+ Confirm current Claude model IDs/limits from the Claude API reference before pinning them.
@@ -0,0 +1,125 @@
1
+ Metadata-Version: 2.4
2
+ Name: agentic-workflow-orchestrator
3
+ Version: 1.0.0
4
+ Summary: Orchestrate multi-agent workflows with autonomous reasoning, parallelism, rate limiting, and LLM integration
5
+ Home-page: https://github.com/org/orchestrator
6
+ Author: Manikandan Kasi
7
+ Author-email: Orchestrator Team <info@orchestrator.dev>
8
+ License: Apache License 2.0
9
+ Project-URL: Homepage, https://github.com/org/orchestrator
10
+ Project-URL: Documentation, https://github.com/org/orchestrator/blob/main/QUICKSTART.md
11
+ Project-URL: Repository, https://github.com/org/orchestrator
12
+ Project-URL: Issues, https://github.com/org/orchestrator/issues
13
+ Keywords: orchestration,workflow,multi-agent,agent,concurrency,rate-limiting,llm,mcp,asyncio
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
17
+ Classifier: License :: OSI Approved :: Apache Software License
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.9
20
+ Classifier: Programming Language :: Python :: 3.10
21
+ Classifier: Programming Language :: Python :: 3.11
22
+ Classifier: Programming Language :: Python :: 3.12
23
+ Classifier: Operating System :: OS Independent
24
+ Requires-Python: >=3.9
25
+ Description-Content-Type: text/markdown
26
+ Provides-Extra: llm-anthropic
27
+ Requires-Dist: anthropic>=0.7.0; extra == "llm-anthropic"
28
+ Provides-Extra: llm-openai
29
+ Requires-Dist: openai>=1.0.0; extra == "llm-openai"
30
+ Provides-Extra: llm-gemini
31
+ Requires-Dist: google-generativeai>=0.3.0; extra == "llm-gemini"
32
+ Provides-Extra: llm-xai
33
+ Requires-Dist: openai>=1.0.0; extra == "llm-xai"
34
+ Provides-Extra: llm-huggingface
35
+ Requires-Dist: transformers>=4.30.0; extra == "llm-huggingface"
36
+ Requires-Dist: torch>=2.0.0; extra == "llm-huggingface"
37
+ Provides-Extra: llm-azure
38
+ Requires-Dist: openai>=1.0.0; extra == "llm-azure"
39
+ Provides-Extra: llm
40
+ Requires-Dist: anthropic>=0.7.0; extra == "llm"
41
+ Requires-Dist: openai>=1.0.0; extra == "llm"
42
+ Requires-Dist: google-generativeai>=0.3.0; extra == "llm"
43
+ Requires-Dist: transformers>=4.30.0; extra == "llm"
44
+ Requires-Dist: torch>=2.0.0; extra == "llm"
45
+ Provides-Extra: engine
46
+ Provides-Extra: dev
47
+ Requires-Dist: pytest>=7.0; extra == "dev"
48
+ Requires-Dist: pytest-cov>=4.0; extra == "dev"
49
+ Requires-Dist: black>=23.0; extra == "dev"
50
+ Requires-Dist: isort>=5.12; extra == "dev"
51
+ Requires-Dist: mypy>=1.0; extra == "dev"
52
+ Dynamic: author
53
+ Dynamic: home-page
54
+ Dynamic: requires-python
55
+
56
+ # orchestrator (Python reference SDK)
57
+
58
+ In-process workflow orchestration engine + authoring API. Zero required dependencies
59
+ (stdlib `asyncio`); `pyyaml` is optional (for `.yaml` specs), `anthropic` optional (for the
60
+ real LLM adapter).
61
+
62
+ ## Concepts
63
+
64
+ - **Workflow** — a DAG of tasks loaded from a template (`Workflow.from_file/from_dict/from_json`).
65
+ - **Skill** — a registered handler `(ctx, inputs) -> output`, sync or `async`.
66
+ - **Tool** — a registered callable a skill invokes via `ctx.call_tool(...)`.
67
+ - **Orchestrator** — runs a workflow, enforcing concurrency + rate limits, and returns a `Report`.
68
+
69
+ ## Minimal usage
70
+
71
+ ```python
72
+ from orchestrator import Workflow, Orchestrator, Registry, MockLLM
73
+
74
+ reg = Registry()
75
+
76
+ @reg.tool("http.get")
77
+ def http_get(url):
78
+ return {"url": url, "ok": True}
79
+
80
+ @reg.skill("market.fetch")
81
+ def fetch(ctx, inputs):
82
+ ctx.call_tool("http.get", url=f"/prices/{inputs['ticker']}")
83
+ ctx.record_decision("selected primary feed", rationale="lowest latency")
84
+ return {"ticker": inputs["ticker"], "last": 199.4}
85
+
86
+ @reg.skill("llm.classify")
87
+ def classify(ctx, inputs):
88
+ r = ctx.llm(messages=[{"role": "user", "content": inputs["text"]}], model="claude-opus-4-8")
89
+ return r.text
90
+
91
+ wf = Workflow.from_file("../spec/examples/market-analysis.json")
92
+ report = Orchestrator(reg, llm=MockLLM()).run_sync(wf, inputs={"ticker": "AAPL"})
93
+ print(report.to_json())
94
+ ```
95
+
96
+ ## The `ctx` (SkillContext) API
97
+
98
+ | Member | Purpose |
99
+ |---|---|
100
+ | `ctx.inputs` | resolved task inputs |
101
+ | `ctx.call_tool(name, **kwargs)` | invoke a registered tool |
102
+ | `ctx.llm(messages, tools=, model=, **opts)` | call the configured LLM provider; usage is recorded |
103
+ | `ctx.record_decision(summary, rationale=, data=)` | append a critical decision to the trace |
104
+ | `ctx.log(msg)`, `ctx.attempt`, `ctx.cancelled` | logging / retry attempt / cooperative cancel flag |
105
+
106
+ ## Report
107
+
108
+ `report.to_dict()` / `report.to_json()` give: `status`, `duration_ms`, per-task
109
+ `{status, duration_ms, attempts, llm, decisions, error}`, `critical_path` (bottleneck chain),
110
+ `totals` (llm tokens, tool calls, retries), `errors`, and the resolved `output`.
111
+
112
+ ## Run
113
+
114
+ ```bash
115
+ python3 examples/run_market.py
116
+ python3 tests/test_engine.py
117
+ ```
118
+
119
+ ## Using a real LLM
120
+
121
+ ```python
122
+ from orchestrator import AnthropicProvider, Orchestrator
123
+ orch = Orchestrator(reg, llm=AnthropicProvider(model="claude-opus-4-8")) # needs ANTHROPIC_API_KEY + `pip install anthropic`
124
+ ```
125
+ Confirm current Claude model IDs/limits from the Claude API reference before pinning them.
@@ -0,0 +1,31 @@
1
+ CHANGELOG.md
2
+ MANIFEST.in
3
+ README.md
4
+ pyproject.toml
5
+ setup.py
6
+ ./orchestrator/__init__.py
7
+ ./orchestrator/engine.py
8
+ ./orchestrator/llm.py
9
+ ./orchestrator/mcp_integration.py
10
+ ./orchestrator/py.typed
11
+ ./orchestrator/ratelimit.py
12
+ ./orchestrator/registry.py
13
+ ./orchestrator/report.py
14
+ ./orchestrator/spec.py
15
+ agentic_workflow_orchestrator.egg-info/PKG-INFO
16
+ agentic_workflow_orchestrator.egg-info/SOURCES.txt
17
+ agentic_workflow_orchestrator.egg-info/dependency_links.txt
18
+ agentic_workflow_orchestrator.egg-info/requires.txt
19
+ agentic_workflow_orchestrator.egg-info/top_level.txt
20
+ orchestrator/__init__.py
21
+ orchestrator/engine.py
22
+ orchestrator/llm.py
23
+ orchestrator/mcp_integration.py
24
+ orchestrator/py.typed
25
+ orchestrator/ratelimit.py
26
+ orchestrator/registry.py
27
+ orchestrator/report.py
28
+ orchestrator/spec.py
29
+ tests/test_engine.py
30
+ tests/test_go_engine.py
31
+ tests/test_mcp_integration.py
@@ -0,0 +1,35 @@
1
+
2
+ [dev]
3
+ pytest>=7.0
4
+ pytest-cov>=4.0
5
+ black>=23.0
6
+ isort>=5.12
7
+ mypy>=1.0
8
+
9
+ [engine]
10
+
11
+ [llm]
12
+ anthropic>=0.7.0
13
+ openai>=1.0.0
14
+ google-generativeai>=0.3.0
15
+ transformers>=4.30.0
16
+ torch>=2.0.0
17
+
18
+ [llm-anthropic]
19
+ anthropic>=0.7.0
20
+
21
+ [llm-azure]
22
+ openai>=1.0.0
23
+
24
+ [llm-gemini]
25
+ google-generativeai>=0.3.0
26
+
27
+ [llm-huggingface]
28
+ transformers>=4.30.0
29
+ torch>=2.0.0
30
+
31
+ [llm-openai]
32
+ openai>=1.0.0
33
+
34
+ [llm-xai]
35
+ openai>=1.0.0
@@ -0,0 +1,63 @@
1
+ """Multi-agent workflow orchestration SDK — Python reference implementation.
2
+
3
+ Quick start:
4
+
5
+ from orchestrator import Workflow, Orchestrator, Registry, MockLLM
6
+
7
+ reg = Registry()
8
+
9
+ @reg.skill("market.fetch")
10
+ def fetch(ctx, inputs):
11
+ ctx.record_decision("selected primary feed", rationale="lowest latency")
12
+ return {"ticker": inputs["ticker"], "last": 199.4}
13
+
14
+ wf = Workflow.from_file("spec/examples/market-analysis.json")
15
+ report = Orchestrator(reg, llm=MockLLM()).run_sync(wf, {"ticker": "AAPL"})
16
+ print(report.to_json())
17
+ """
18
+ from .engine import Orchestrator, TaskFailed
19
+ from .llm import (
20
+ AnthropicProvider,
21
+ AzureOpenAIProvider,
22
+ GeminiProvider,
23
+ HuggingFaceProvider,
24
+ LlmProvider,
25
+ LlmResult,
26
+ MockLLM,
27
+ OpenAIProvider,
28
+ XAIProvider,
29
+ )
30
+ from .ratelimit import TokenBucket
31
+ from .registry import Registry, SkillContext
32
+ from .report import Decision, LlmUsage, Report, TaskSpan, Totals
33
+ from .spec import RateLimit, Retry, SpecError, Task, Workflow, resolve_template
34
+
35
+ __all__ = [
36
+ "Orchestrator",
37
+ "TaskFailed",
38
+ "Registry",
39
+ "SkillContext",
40
+ "Workflow",
41
+ "Task",
42
+ "RateLimit",
43
+ "Retry",
44
+ "SpecError",
45
+ "resolve_template",
46
+ "Report",
47
+ "TaskSpan",
48
+ "Decision",
49
+ "LlmUsage",
50
+ "Totals",
51
+ "LlmProvider",
52
+ "LlmResult",
53
+ "MockLLM",
54
+ "AnthropicProvider",
55
+ "OpenAIProvider",
56
+ "GeminiProvider",
57
+ "XAIProvider",
58
+ "HuggingFaceProvider",
59
+ "AzureOpenAIProvider",
60
+ "TokenBucket",
61
+ ]
62
+
63
+ __version__ = "0.1.0"