-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
263 lines (249 loc) · 10.2 KB
/
Copy pathindex.html
File metadata and controls
263 lines (249 loc) · 10.2 KB
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
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>AgentFlow — Event-native metrics that move when events happen</title>
<meta name="description" content="Event-native metrics layer: business metrics that update when events happen, with measured ~1 s event-to-metric freshness, live entity lookups, typed contracts, and Python + TypeScript SDKs.">
<meta property="og:title" content="AgentFlow — Event-native metrics that move when events happen">
<meta property="og:description" content="Business metrics that move when events happen — measured ~1 s event-to-metric freshness for people, dashboards, services, and AI agents alike.">
<meta property="og:image" content="https://brownjuly2003-code.github.io/agentflow/og-image.png">
<meta property="og:type" content="website">
<link rel="icon" href="logo.svg" type="image/svg+xml">
<link rel="stylesheet" href="style.css">
</head>
<body>
<header class="site-header">
<div class="shell header-row">
<a class="brand" href="#top" aria-label="AgentFlow home">
<img src="logo.svg" alt="" width="140" height="28">
</a>
<nav class="header-nav" aria-label="Primary">
<a href="https://github.com/brownjuly2003-code/agentflow/blob/main/docs/api-reference.md">Docs</a>
<a href="https://github.com/brownjuly2003-code/agentflow/blob/main/docs/benchmark.md">Benchmark</a>
<a href="https://github.com/brownjuly2003-code/agentflow/blob/main/docs/competitive-analysis.md">Market</a>
</nav>
</div>
</header>
<main id="top">
<section class="hero">
<div class="shell hero-grid">
<div class="hero-copy">
<p class="eyebrow">Event-native metrics layer</p>
<h1>Business metrics that move when events happen.</h1>
<p class="hero-text">
Every metric declares which events move it, and the serving layer
keeps reads fresh by invalidating its cache when events arrive —
a measured 1.1 s p50 event-to-metric freshness. Query live
entities and metrics over typed contracts, from Python or
TypeScript. Consumers are whoever needs the number now: people,
dashboards, services, and AI agents.
</p>
<div class="hero-actions">
<a class="button button-primary" href="https://github.com/brownjuly2003-code/agentflow/blob/main/docs/api-reference.md">View docs</a>
<a class="button button-secondary" href="https://github.com/brownjuly2003-code/agentflow">Repository</a>
</div>
<dl class="hero-facts">
<div>
<dt>Core stack</dt>
<dd>Kafka -> Flink -> DuckDB or Iceberg -> FastAPI</dd>
</div>
<div>
<dt>SDKs</dt>
<dd>Python and TypeScript</dd>
</div>
<div>
<dt>License</dt>
<dd>MIT</dd>
</div>
</dl>
</div>
<aside class="hero-panel" aria-label="API example">
<p class="panel-label">Support workflow</p>
<pre><code>from agentflow import AgentFlowClient
client = AgentFlowClient(
"https://api.agentflow.dev",
api_key="demo-key",
)
order = client.get_order("ORD-20260404-1001")
print(order.status)</code></pre>
<p class="panel-note">Order freshness is returned with the response, so the caller can decide whether to trust it.</p>
</aside>
</div>
</section>
<section class="section">
<div class="shell narrow">
<p class="section-kicker">Problem</p>
<h2>A decision is only as good as the number behind it.</h2>
<p class="section-text">
BI on a replica answers yesterday's questions, and most workflows still
read from stale warehouse snapshots, ad hoc service calls, or a cache
that quietly serves 30-second-old numbers. That breaks down fastest in
support, operations, and merchandising, where a six-hour-old answer is
often worse than no answer at all. AgentFlow turns live operational
data into a serving layer with typed entities, metrics, query endpoints,
and explicit freshness signals.
</p>
</div>
</section>
<section class="section">
<div class="shell">
<div class="section-head">
<div>
<p class="section-kicker">User journeys</p>
<h2>Built for the moments where stale context costs money.</h2>
</div>
</div>
<div class="journey-grid">
<article class="journey-card">
<div class="journey-meta">
<span>Support</span>
<span class="status">Live entity lookup</span>
</div>
<h3>Answer "where is my order?" from current state.</h3>
<pre><code>GET /v1/entity/order/ORD-20260404-1001
{
"status": "delivered",
"freshness_seconds": 12.4
}</code></pre>
</article>
<article class="journey-card">
<div class="journey-meta">
<span>Ops</span>
<span class="status">Freshness and SLO</span>
</div>
<h3>Check pipeline health before the incident worsens.</h3>
<pre><code>GET /v1/health
GET /v1/slo
healthy
error_budget_remaining: 0.91</code></pre>
</article>
<article class="journey-card">
<div class="journey-meta">
<span>Merch</span>
<span class="status">Query and ranking</span>
</div>
<h3>Rank top products without writing SQL by hand.</h3>
<pre><code>POST /v1/query
{
"question": "top products by revenue today",
"limit": 5
}</code></pre>
</article>
</div>
</div>
</section>
<section class="section">
<div class="shell">
<div class="section-head">
<div>
<p class="section-kicker">Why AgentFlow</p>
<h2>A serving layer, not another dashboard tool.</h2>
</div>
</div>
<div class="tile-grid">
<article class="tile">
<h3>Freshness surfaced</h3>
<p>Responses carry freshness and health context so agents can caveat or escalate instead of bluffing.</p>
</article>
<article class="tile">
<h3>Dual SDK parity</h3>
<p>The same core API is reachable from Python and TypeScript without custom wrappers per workflow.</p>
</article>
<article class="tile">
<h3>Contracts, not guesswork</h3>
<p>Schema contracts, diffs, and version-aware responses make downstream agent tooling safer to evolve.</p>
</article>
<article class="tile">
<h3>Self-directed deployment</h3>
<p>Run the local demo path now, or extend toward the full streaming stack without rewriting the API surface.</p>
</article>
</div>
</div>
</section>
<section class="section metrics-section">
<div class="shell">
<div class="section-head">
<div>
<p class="section-kicker">Performance baseline</p>
<h2>Current benchmark numbers from the repository baseline.</h2>
</div>
<p class="section-note">Source: <a href="https://github.com/brownjuly2003-code/agentflow/blob/main/docs/release-readiness.md">docs/release-readiness.md</a> — aggregate load-test run (569 requests, 0 failures).</p>
</div>
<div class="metrics-grid">
<article class="metric">
<strong>56 ms</strong>
<span>aggregate p50 latency</span>
</article>
<article class="metric">
<strong>260 ms</strong>
<span>aggregate p95 latency</span>
</article>
<article class="metric">
<strong>330 ms</strong>
<span>aggregate p99 latency</span>
</article>
<article class="metric">
<strong>27.8 RPS</strong>
<span>single-node requests per second</span>
</article>
<article class="metric">
<strong>0%</strong>
<span>observed failure rate</span>
</article>
</div>
</div>
</section>
<section class="section">
<div class="shell install-grid">
<div>
<p class="section-kicker">Get started</p>
<h2>Run the local path first.</h2>
<p class="section-text">
Start with the demo path, inspect the API surface, then move into the
benchmark, contracts, and operational routes. The quickest way to get
signal is to query a seeded order and one live metric.
</p>
</div>
<pre class="install-block"><code>pip install agentflow-client
from agentflow import AgentFlowClient
client = AgentFlowClient(
"http://localhost:8000",
api_key="dev-key",
)
print(client.get_metric("revenue", "24h").value)</code></pre>
</div>
</section>
<section class="section">
<div class="shell links-panel">
<div class="section-head">
<div>
<p class="section-kicker">Links</p>
<h2>Everything you need to evaluate the current state.</h2>
</div>
</div>
<div class="links-grid">
<a class="link-card" href="https://github.com/brownjuly2003-code/agentflow/blob/main/docs/api-reference.md">
<strong>Docs</strong>
<span>API reference, security audit, competitive analysis</span>
</a>
<a class="link-card" href="https://github.com/brownjuly2003-code/agentflow">
<strong>Repository</strong>
<span>Repository, setup, CI workflows, local demo path</span>
</a>
<a class="link-card" href="https://github.com/brownjuly2003-code/agentflow/blob/main/docs/freshness-benchmark.md">
<strong>Freshness benchmark</strong>
<span>How the ~1 s event-to-metric number is measured and reproduced</span>
</a>
</div>
</div>
</section>
</main>
<footer class="site-footer">
<div class="shell footer-row">
<p>AgentFlow is released under the MIT license.</p>
<p>Contact: open an issue in the repository.</p>
</div>
</footer>
</body>
</html>