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>