Skip to content

Messaging: the live knowledge graph for AI agents - #213

Merged
jsam merged 8 commits into
mainfrom
fm/web-streaming
Oct 3, 2026
Merged

jsam merged 8 commits into
mainfrom
fm/web-streaming

Conversation

@jsam

@jsam jsam commented Oct 3, 2026 •

Copy link
Copy Markdown
Contributor

Reworks InputLayer's messaging around the captain's final message: the live knowledge graph for AI agents, with the hero "Models think. InputLayer knows." "Reactive AI agents", "reasoning layer", "Your AI guesses. InputLayer reasons." and the interim "streaming engine" lead are gone from every pitch surface.

Messaging

  • Home page (front/).
    • Hero block: descriptor, hero, line 2, subhead and the small print scoping "knows".
    • Stack line: "Decision models judge. Language models think. InputLayer knows."
    • The shift: separate knowing from thinking, with before/after code.
    • Four adoption reasons.
    • Instant updates: the 6.83 ms vs 11.3 s / 1,652x proof point.
    • Fast path: the order 4821 voice example.
    • Integrations table, why now (batch to live), flagship guide link, comparison table, get started.
    • Built from the existing header, footer and ComparisonTable, which gained text cells. The page is a server component.
  • Metadata. Site title, description, Open Graph and Twitter text, the footer tagline and every CTA banner.
  • Other surfaces. README hero and intro, docs landing page and docs/README.md, compare pages, the customer story, package descriptions (Cargo.toml, the Python SDK README), the inputlayer-server --help description, the LangChain guide sample text and the GUI welcome line.
  • Wording. "real-time" is now "live" in the SDK, WebSocket and gateway guides.

Use cases replaced by a flagship article

  • Removed the industry use-case pages, content/use-cases/*, the footer link and the README "Use Cases" list.
  • Old /use-cases/... URLs redirect to the new article (meta refresh, because the site is a static export).
  • Added content/blog/building-a-voice-agent-that-knows.mdx with the provided text unchanged; only a category field was added to the frontmatter. It's linked from the home page and the README.

Licence, labels and CTAs

  • The licence is described as source-available (Elastic License 2.0) everywhere. The commercial page and COMMERCIAL_LICENSE.md now match the licence text: redistribution under ELv2 is allowed, and "forking and selling" is gone because the licence doesn't contain it.
  • Customer stories are labelled "Illustrative" on the index and on each story page.
  • Every CTA that went to demo.inputlayer.ai (TLS currently broken) now goes to the quickstart or docs.
  • The design-partner evaluation is worded as an invitation.

Performance content

BENCHMARKS.md and the benchmark blog posts are identical to main. The README "What Makes It Different / Incremental updates" section and the compare-page figures are restored as on main.

Testing

  • cd front && npm run build passes. I checked the static export in a browser at 1280 px and 390 px: no horizontal page scroll, no console errors. The use-case URLs redirect to the article.

@jsam jsam changed the title Messaging: the streaming engine for AI agents Messaging: the live knowledge graph for AI agents Oct 3, 2026
jsam added 7 commits October 3, 2026 21:21
Rebuild the home page around the approved message: the streaming engine
for AI agents. Replace demo.inputlayer.ai CTAs with the quickstart,
update site metadata and Open Graph text, and align the commercial page
and COMMERCIAL_LICENSE.md with the Elastic License 2.0 text.
Update the README hero, intro and use cases, the docs landing page, use
case and compare pages, and package descriptions to the approved
message. Correct the 6.83 ms claim to what BENCHMARKS.md measures, drop
'no other' claims, remove unmeasured time-to-learn claims, and label
customer stories as illustrative.
Rewrite the benchmarks post around the bound-query versus full-closure
comparison it actually reports, correct the retraction timings, and
replace unqualified real-time wording. Let the home-page diagram scroll
inside its card on narrow screens.
Replace the streaming-engine hero, descriptor and section copy with the
final message: "Models think. InputLayer knows." Add the stack line,
the knowing/thinking shift, four adoption reasons, the fast-path voice
example and the integrations table to the home page, keep batch-to-live
as the why-now section, and carry the same language through README,
docs, use cases, compare pages, metadata and package descriptions.
Replace unqualified real-time wording in the SDK, WebSocket and gateway
guides with live, set the inputlayer-server --help description to the
approved descriptor, and word the design-partner card as an invitation.
Restore BENCHMARKS.md, the benchmark blog posts, the README incremental
updates section and the compare-page figures exactly as on main, and put
the 6.83 ms vs 11.3 s proof point back on the home page.
…icle

Remove the industry use-case pages, their content and the footer link,
redirect the old use-case URLs to the new article, and publish
"Building a Voice Agent That Knows" as the flagship guide, linked from
the home page and README.
@jsam
jsam force-pushed the fm/web-streaming branch from b45c7c1 to aa948e3 Compare October 3, 2026 21:23
@jsam
jsam marked this pull request as ready for review October 3, 2026 21:27
@jsam
jsam merged commit 3492a59 into main Oct 3, 2026
14 checks passed
@jsam
jsam deleted the fm/web-streaming branch October 3, 2026 21:32
jsam added a commit that referenced this pull request Oct 4, 2026
…ry request (#249)

The release-checkpoint performance gate fails on main: cheap_query serial
p50 is 1.110x the approved baseline e732cd5 on the 32-vCPU runner
(115 -> 126 us). Concurrent latency and throughput did not move. Bisected
to #214 (per-connection request pipelining), made worse by #222.

Cause: the pipeline runs requests in a `FuturesUnordered`. Its `poll_next`
wakes its own task and returns `Pending` after any poll that polled every
future in the set. With one request in flight, which is every serial
client, that happens on each request's first poll. The connection task
wakes itself, tokio schedules that as a yield, and a yield wakes an idle
worker to take the task. Each request therefore costs one more context
switch (4.0 -> 5.0 per query) and a hand-off of the connection task to
another core. #222 added no work per query but made the hand-off dearer:
user cycles per query rose 15% at the same instruction count.

Fix: keep one never-woken future in the set. After the pipeline's first
poll it is never polled again, so no poll reaches every future and the
forced yield no longer fires. The yield after futures that wake
themselves still applies. Pipelining, ordering, deadlines, cancellation
and the credential fence are unchanged. Nothing is added per request: no
lock, atomic or allocation. Each connection gets one more set node.

Bisect (cheap_query, `?edge(1, Y)`, serial). Server counters per query
from perf stat. Ratios are against e732cd5, from an interleaved probe
with one pinned server per commit, 40 rounds:

| commit | PR | user instr/query | ctx switches/query | p50 ratio |
|---|---|---|---|---|
| e732cd5 | baseline | 1.282M | 4.0 | 1.000 |
| d75ce6e | #208 atomic programs | 1.279M | 4.0 | 0.993 |
| 4578fe6 | #215 notification stream | 1.271M | 4.0 | 0.991 |
| 71a4d24 | #216 online backup | 1.275M | 4.0 | 1.016 |
| 2f621c5 | #200 first-update latency | 1.272M | 4.0 | 1.009 |
| e96df5c | #207 | 1.279M | 4.0 | 0.998 |
| 4dd8fe9 | #209 shard index | 1.272M | 4.0 | 0.987 |
| 277c7f0 | #206 | 1.274M | 4.0 | 1.008 |
| 3554c98 | #214 pipelining, deadlines | 1.296M | 5.0 | 1.020 |
| 3492a59 | #213 | 1.294M | 5.0 | 1.030 |
| 2ba9a5a | #212 provenance | 1.297M | 5.0 | 1.029 |
| 9ed61b4 | #204 key expiry | 1.297M | 5.0 | 1.027 |
| be35ee3 | #221 | 1.297M | 5.0 | 1.013 |
| c98a590 | #222 bounded streaming | 1.298M | 5.0 | 1.047 |
| a6fd628 | #219 wildcard fix | 1.297M | 5.0 | 1.061 |
| b7f7ad6 | #220 WAL durability | 1.300M | 5.0 | 1.056 |
| de54807 | #223 shared standing eval | 1.299M | 5.0 | 1.071 |
| 55ec34d | #225 checkpoint-1 fixes | 1.300M | 5.0 | 1.045 |
| 23712b8 | main | 1.300M | 5.0 | 1.064 |
| this change | | 1.300M | 4.0 | 1.033 |

Confirming A/Bs with the gate's own fixture (fresh pinned servers each
round, 40 rounds, ratio [95% interval]):

- #214 vs its parent 277c7f0: 1.039 [1.027..1.049]
- #222 vs its parent be35ee3: 1.025 [1.006..1.044]
- A/A 3554c98: 1.010 [1.002..1.025]
- e732cd5 -> main: 1.048 [1.028..1.066]
- main -> this change: 0.978 [0.958..0.989]
- e732cd5 -> this change: 1.021 [1.009..1.044], PASS (budget 1.05)

User cycles per query (perf stat, same instruction count): e732cd5 958K,
be35ee3 1053K, c98a590 1206K, this change 1006K.

Full gate, all fixtures, 20 rounds, servers pinned to CPUs 2-15:

- main -> this change: no metric worse. Every required metric is PASS, or
  INCONCLUSIVE with an interval that includes 1.0. cheap_query p50 0.979
  [0.953..1.007].
- e732cd5 -> this change: cheap_query p50 1.029 [1.019..1.072],
  INCONCLUSIVE on a busy host (load average up to 22); bound_query p50
  1.022, PASS. The insert and delta metrics improved since the baseline.

The shared host is about 4x slower per query than the CI runner, so the
same hand-off is a smaller share of each query here than there.

The remaining ~1.7% of user instructions per query since #214 is the
pipeline's own per-request bookkeeping: the boxed request future (one
4-8 KiB allocation), its set node, the request control and the in-flight
maps.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant