diff --git a/README.md b/README.md index 0484652..ec98a56 100644 --- a/README.md +++ b/README.md @@ -125,7 +125,7 @@ graphtty reads a simple JSON format: ## Benchmarks -graphtty uses a custom Sugiyama-style layout engine and optimized canvas operations for fast rendering. Benchmarks across all 10 sample graphs (50 iterations each, Python 3.11): +graphtty uses a custom Sugiyama-style layout engine and optimized canvas operations for fast rendering. Benchmarks across all 12 sample graphs (50 iterations each, Python 3.11): | Sample | Avg (ms) | Ops/sec | |---|---:|---:| @@ -133,8 +133,10 @@ graphtty uses a custom Sugiyama-style layout engine and optimized canvas operati | book-writer-agent (6 nodes) | 0.25 | 4,083 | | deep-agent (7 nodes) | 0.32 | 3,144 | | function-agent (8 nodes) | 0.37 | 2,686 | +| travel-rag-agent (8 nodes) | 0.41 | 2,451 | | workflow-agent (11 nodes) | 0.49 | 2,060 | | world-map (15 nodes) | 0.61 | 1,651 | +| orchestrator-agent (9 nodes) | 0.64 | 1,561 | | rag-pipeline (10 nodes) | 0.70 | 1,427 | | supervisor-agent (7+subs) | 0.80 | 1,250 | | etl-pipeline (12 nodes) | 0.82 | 1,225 | diff --git a/samples/orchestrator-agent/graph.json b/samples/orchestrator-agent/graph.json new file mode 100644 index 0000000..1543d41 --- /dev/null +++ b/samples/orchestrator-agent/graph.json @@ -0,0 +1,167 @@ +{ + "nodes": [ + { + "id": "__start__", + "name": "__start__", + "type": "__start__", + "subgraph": null, + "metadata": null + }, + { + "id": "orchestrator_agent", + "name": "orchestrator_agent", + "type": "node", + "subgraph": null, + "metadata": null + }, + { + "id": "hr_agent", + "name": "hr_agent", + "type": "node", + "subgraph": null, + "metadata": null + }, + { + "id": "hr_agent_tools", + "name": "tools", + "type": "tool", + "subgraph": null, + "metadata": { + "tool_names": [ + "check_pto_balance", + "submit_leave_request", + "check_leave_request_status", + "check_employee_benefits", + "get_salary_info", + "schedule_hr_meeting" + ], + "tool_count": 6 + } + }, + { + "id": "procurement_agent", + "name": "procurement_agent", + "type": "node", + "subgraph": null, + "metadata": null + }, + { + "id": "procurement_agent_tools", + "name": "tools", + "type": "tool", + "subgraph": null, + "metadata": { + "tool_names": [ + "check_budget_availability", + "get_vendor_information", + "create_purchase_order", + "track_order_status", + "request_budget_reallocation", + "search_preferred_vendors" + ], + "tool_count": 6 + } + }, + { + "id": "policy_agent", + "name": "policy_agent", + "type": "node", + "subgraph": null, + "metadata": null + }, + { + "id": "policy_agent_tools", + "name": "tools", + "type": "tool", + "subgraph": null, + "metadata": { + "tool_names": [ + "get_company_policy", + "check_compliance_status", + "request_policy_clarification", + "search_policy_documents" + ], + "tool_count": 4 + } + }, + { + "id": "__end__", + "name": "__end__", + "type": "__end__", + "subgraph": null, + "metadata": null + } + ], + "edges": [ + { + "source": "hr_agent", + "target": "hr_agent_tools", + "label": null + }, + { + "source": "hr_agent_tools", + "target": "hr_agent", + "label": null + }, + { + "source": "orchestrator_agent", + "target": "hr_agent", + "label": null + }, + { + "source": "hr_agent", + "target": "orchestrator_agent", + "label": null + }, + { + "source": "procurement_agent", + "target": "procurement_agent_tools", + "label": null + }, + { + "source": "procurement_agent_tools", + "target": "procurement_agent", + "label": null + }, + { + "source": "orchestrator_agent", + "target": "procurement_agent", + "label": null + }, + { + "source": "procurement_agent", + "target": "orchestrator_agent", + "label": null + }, + { + "source": "policy_agent", + "target": "policy_agent_tools", + "label": null + }, + { + "source": "policy_agent_tools", + "target": "policy_agent", + "label": null + }, + { + "source": "orchestrator_agent", + "target": "policy_agent", + "label": null + }, + { + "source": "policy_agent", + "target": "orchestrator_agent", + "label": null + }, + { + "source": "__start__", + "target": "orchestrator_agent", + "label": "input" + }, + { + "source": "orchestrator_agent", + "target": "__end__", + "label": "output" + } + ] +} diff --git a/screenshots/orchestrator-agent.png b/screenshots/orchestrator-agent.png new file mode 100644 index 0000000..e751d34 Binary files /dev/null and b/screenshots/orchestrator-agent.png differ diff --git a/scripts/generate_screenshots.py b/scripts/generate_screenshots.py index d28dcdf..f162788 100644 --- a/scripts/generate_screenshots.py +++ b/scripts/generate_screenshots.py @@ -208,6 +208,11 @@ def main(): "solarized", "Travel RAG Agent (solarized)", ), + ( + "samples/orchestrator-agent/graph.json", + "dracula", + "Orchestrator Agent (dracula)", + ), ] images: list[tuple[str, Image.Image]] = []