Graph Evolve: Optimize LLM Workflow Graphs
Automatically evolve multi-step LLM workflows with evolutionary optimization.
1 min read
graph-optimizationevolveworkflowssdk
Archive
This is historical material. Use the current Managed Research, Research Factory, and GEPA/GELO pages for product decisions.TL;DR
- Graph Evolve is now available — evolve entire LLM workflow graphs, not just prompts
- Supports policy graphs (solve tasks) and verifier graphs (verifier/score outputs)
- New Python SDK:
pip install synth-aithenfrom synth_ai.products.graph_evolve import ...
What is Graph Evolve?
While standard GEPA optimizes individual prompts, Graph Evolve optimizes entire multi-step workflows:
┌─────────────────────────────────────────────────────────────┐
│ Standard GEPA: Prompt → Better Prompt │
│ Graph Evolve: Workflow → Better Workflow │
│ (structure + prompts + routing) │
└─────────────────────────────────────────────────────────────┘
The optimizer evolves:
- Graph structure: Which nodes exist and how they connect
- Node prompts: What each LLM node does
- Model selection: Which model powers each node
Graph Types
Policy Graphs
Solve tasks: multi-hop QA, code generation, document analysis.
python
config = GraphOptimizationConfig(
dataset_name="hotpotqa",
graph_type="policy",
graph_structure="dag",
)Verifier Graphs
Verifier outputs: evaluate code quality, score game traces, calibrate against human labels.
python
config = GraphOptimizationConfig(
dataset_name="crafter_traces",
graph_type="verifier",
scoring_strategy="rubric",
)New API Endpoints
Start Optimization Job
bash
POST /graph-evolve/jobsStream Events (SSE)
bash
GET /graph-evolve/jobs/{job_id}/eventsGet Results
bash
GET /graph-evolve/jobs/{job_id}/resultSDK Quick Start
python
from synth_ai.products.graph_evolve import GraphOptimizationConfig, GraphOptimizationClient
config = GraphOptimizationConfig.from_toml("config.toml")
async with GraphOptimizationClient(base_url="https://api.usesynth.ai") as client:
job_id = await client.start_job(config)
async for event in client.stream_events(job_id):
if event.get("type") == "generation_completed":
print(f"Gen {event['data']['generation']}: {event['data']['best_score']:.2%}")
result = await client.get_result(job_id)
print(f"Best score: {result['best_score']:.2%}")Cookbooks
What's Next
- VLM (vision) verifier support for multi-modal evaluation
- Graph registry for saving and loading optimized workflows
- Expanded dataset integrations