File size: 11,052 Bytes
8d11900 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 | <!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="Visual reference library for AI orchestration patterns including supervisor workers, planners, evaluators, routing, fallback and human approval.">
<title>Orchestration Patterns</title>
<style>
:root{
--bg:#07101f;--panel:#0d1930;--panel2:#101f3c;--line:#243b61;
--text:#f4f7ff;--muted:#9eb1cd;--cyan:#4edaff;--blue:#6e8fff;
--violet:#9e7cff;--green:#5ce0a5;--amber:#ffd273;--red:#ff8998;
}
*{box-sizing:border-box}
body{
margin:0;background:
radial-gradient(circle at 12% -5%,rgba(78,218,255,.13),transparent 30%),
radial-gradient(circle at 91% 0,rgba(158,124,255,.13),transparent 27%),
var(--bg);
color:var(--text);font:15px/1.55 Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
}
.wrap{max-width:1180px;margin:auto;padding:0 22px}
.hero{text-align:center;padding:66px 0 32px}
.badge{display:inline-block;border:1px solid var(--line);background:#0b1930;color:var(--cyan);border-radius:999px;padding:7px 12px;font-size:11px;font-weight:850;letter-spacing:.1em;text-transform:uppercase}
h1{font-size:clamp(44px,7vw,76px);line-height:1;margin:20px 0 14px;letter-spacing:-.055em}
.grad{background:linear-gradient(90deg,var(--cyan),#d7e1ff,var(--violet));background-clip:text;-webkit-background-clip:text;color:transparent}
.hero p{max-width:790px;margin:auto;color:var(--muted);font-size:18px}
.filters{display:grid;grid-template-columns:1.5fr 1fr;gap:10px;position:sticky;top:0;z-index:30;padding:12px 0;background:rgba(7,16,31,.9);backdrop-filter:blur(15px)}
input,select{
width:100%;background:#0a1830;color:var(--text);border:1px solid var(--line);border-radius:11px;padding:11px 12px;outline:none
}
.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:15px;padding:24px 0 48px}
.card{
border:1px solid var(--line);background:linear-gradient(150deg,#101f3c,#09162b);
border-radius:18px;padding:18px;box-shadow:0 18px 45px rgba(0,0,0,.23)
}
.top{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}
.num{font-size:11px;color:var(--cyan);font-weight:850;letter-spacing:.08em;text-transform:uppercase}
.name{font-size:21px;font-weight:900;letter-spacing:-.025em;margin:2px 0}
.cat{font-size:10px;padding:5px 8px;border:1px solid #2e4975;background:#12233f;color:#bdd0ea;border-radius:999px}
.desc{color:var(--muted);font-size:13px;margin:9px 0 13px}
.diagram{
min-height:172px;border:1px solid #1d3358;border-radius:14px;background:
linear-gradient(rgba(255,255,255,.025) 1px,transparent 1px),
linear-gradient(90deg,rgba(255,255,255,.025) 1px,transparent 1px),
#07152a;background-size:24px 24px;padding:13px;display:flex;align-items:center;justify-content:center
}
.flow{display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap;max-width:100%}
.node{font-size:11px;font-weight:800;padding:8px 9px;border:1px solid #345486;border-radius:9px;background:#102543;white-space:nowrap}
.node.core{border-color:#56b8ff;background:#123459}
.node.verify{border-color:#7d6fff;background:#261d49}
.node.human{border-color:#c79b4f;background:#372b17}
.arrow{color:var(--cyan);font-weight:900}
.tags{display:flex;flex-wrap:wrap;gap:7px;margin-top:13px}
.tag{font-size:10px;border:1px solid #263f67;background:#0d1d36;color:#bad0ea;padding:5px 7px;border-radius:999px}
.footerrow{display:flex;justify-content:space-between;align-items:center;margin-top:13px;color:var(--muted);font-size:11px}
.empty{display:none;text-align:center;color:var(--muted);padding:50px;border:1px dashed var(--line);border-radius:16px}
.info{margin-bottom:55px;padding:18px;border:1px solid var(--line);border-radius:16px;background:#0b1930;color:var(--muted)}
footer{border-top:1px solid var(--line);padding:28px 0 44px;color:var(--muted);font-size:13px}
footer strong{color:var(--text)}
@media(max-width:800px){.grid{grid-template-columns:1fr}.filters{grid-template-columns:1fr}}
</style>
</head>
<body>
<header class="hero">
<div class="wrap">
<span class="badge">AI Architecture · Visual Reference</span>
<h1>Orchestration <span class="grad">Patterns</span></h1>
<p>Explore reusable patterns for agent coordination, routing, verification, recovery and human control.</p>
</div>
</header>
<main class="wrap">
<div class="filters">
<input id="search" placeholder="Search patterns, use cases or concepts…" aria-label="Search">
<select id="category" aria-label="Category"><option value="all">All categories</option></select>
</div>
<section id="grid" class="grid"></section>
<div id="empty" class="empty">No orchestration pattern matches the current filters.</div>
<div class="info">
<strong style="color:#f4f7ff">How to use this library.</strong>
Patterns are not mutually exclusive. Production AI systems often combine several of them—for example dynamic routing, supervisor delegation, evaluation, retries and human approval inside one workflow.
</div>
</main>
<footer>
<div class="wrap">
<strong>Orchestration Patterns</strong> — an independent educational Hugging Face Space.<br>
Collaboration and partnerships: <strong>agenten@magenta.de</strong>
</div>
</footer>
<script>
const patterns = [
{
name:"Supervisor → Workers",category:"Multi-Agent",
description:"A central supervisor delegates work to specialist agents and aggregates their results.",
nodes:["Supervisor","Researcher","Developer","Reviewer"],layout:"branch",
tags:["delegation","multi-agent","control"]
},
{
name:"Sequential Workflow",category:"Workflow",
description:"Tasks execute in a fixed order, making the workflow predictable and easy to audit.",
nodes:["Input","Research","Analyze","Generate","Output"],layout:"line",
tags:["deterministic","handoffs","pipeline"]
},
{
name:"Parallel Execution",category:"Workflow",
description:"Independent agents work simultaneously before their outputs are synthesized.",
nodes:["Input","Agent A","Agent B","Agent C","Synthesis"],layout:"branch",
tags:["parallel","latency","specialists"]
},
{
name:"Planner → Executors",category:"Agentic",
description:"A planner decomposes a goal into subtasks that are executed by specialist agents.",
nodes:["Goal","Planner","Executor A","Executor B","Result"],layout:"branch",
tags:["planning","long-horizon","delegation"]
},
{
name:"Evaluator Loop",category:"Reliability",
description:"Generated output is evaluated and retried or revised until it passes a quality check.",
nodes:["Generate","Evaluate","Retry","Output"],layout:"loop",
tags:["evaluation","retry","quality"]
},
{
name:"Generator → Critic",category:"Reliability",
description:"One agent generates, another critiques, and a revision step improves the result.",
nodes:["Generator","Critic","Revision","Verifier"],layout:"line",
tags:["critique","revision","verification"]
},
{
name:"Human Approval",category:"Control",
description:"Execution pauses at a defined control point until a human approves the proposed action.",
nodes:["Agent","Risk Check","Human Approval","Execute"],layout:"line",
tags:["human-in-the-loop","governance","safety"],human:true
},
{
name:"Retry + Fallback",category:"Reliability",
description:"A failed model, tool or provider is retried before traffic falls back to an alternative path.",
nodes:["Primary","Failure Check","Retry","Fallback","Output"],layout:"line",
tags:["resilience","failover","recovery"]
},
{
name:"Dynamic Model Routing",category:"Routing",
description:"Requests are routed to model classes according to task, cost, latency or capability.",
nodes:["Request","Router","Fast","Reasoning","Specialist"],layout:"branch",
tags:["model routing","cost","latency"]
},
{
name:"Event-Driven Orchestration",category:"Automation",
description:"Events such as webhooks, alerts or new data trigger agents, tools or workflows.",
nodes:["Event","Trigger","Orchestrator","Agent / Tool","Action"],layout:"line",
tags:["automation","events","webhooks"]
},
{
name:"Human Escalation",category:"Control",
description:"Low-confidence cases are escalated from AI execution to human review.",
nodes:["Agent","Confidence","Human Review","Decision"],layout:"line",
tags:["uncertainty","review","escalation"],human:true
},
{
name:"Verification Chain",category:"Reliability",
description:"Outputs move through multiple validation layers before they are accepted.",
nodes:["Agent Output","Rule Check","Verifier","Final Output"],layout:"line",
tags:["validation","verifier","safety"]
}
];
const $=id=>document.getElementById(id);
const category=$("category");
[...new Set(patterns.map(p=>p.category))].sort().forEach(c=>{
const o=document.createElement("option");o.value=c;o.textContent=c;category.appendChild(o);
});
function diagram(p){
if(p.layout==="branch"){
return `<div class="flow">
<span class="node core">${p.nodes[0]}</span><span class="arrow">→</span>
${p.nodes.slice(1,-1).map(n=>`<span class="node">${n}</span>`).join("")}
<span class="arrow">→</span><span class="node verify">${p.nodes[p.nodes.length-1]}</span>
</div>`;
}
if(p.layout==="loop"){
return `<div class="flow">
<span class="node core">${p.nodes[0]}</span><span class="arrow">→</span>
<span class="node verify">${p.nodes[1]}</span><span class="arrow">↺</span>
<span class="node">${p.nodes[2]}</span><span class="arrow">→</span>
<span class="node">${p.nodes[3]}</span>
</div>`;
}
return `<div class="flow">${p.nodes.map((n,i)=>`
<span class="node ${p.human&&n.includes("Human")?"human":i===0?"core":n.includes("Verifier")?"verify":""}">${n}</span>
${i<p.nodes.length-1?'<span class="arrow">→</span>':''}`).join("")}</div>`;
}
function render(){
const q=$("search").value.toLowerCase().trim(),cat=category.value;
const data=patterns.filter(p=>{
const hay=[p.name,p.category,p.description,...p.tags,...p.nodes].join(" ").toLowerCase();
return (!q||hay.includes(q))&&(cat==="all"||p.category===cat);
});
$("grid").innerHTML=data.map((p,i)=>`
<article class="card">
<div class="top">
<div><div class="num">Pattern ${String(i+1).padStart(2,"0")}</div><div class="name">${p.name}</div></div>
<span class="cat">${p.category}</span>
</div>
<div class="desc">${p.description}</div>
<div class="diagram">${diagram(p)}</div>
<div class="tags">${p.tags.map(t=>`<span class="tag">${t}</span>`).join("")}</div>
<div class="footerrow"><span>Reusable architecture pattern</span><span>${p.nodes.length} stages</span></div>
</article>`).join("");
$("empty").style.display=data.length?"none":"block";
}
$("search").addEventListener("input",render);
category.addEventListener("change",render);
render();
</script>
</body>
</html>
|