Recent submissions

Comment · 1 month ago
Comment · 1 month ago
If a handler starts a sleep/human approval/RPC call, or so, then this timer/promise is persisted in Restate's journal. Restate does the waiting. The handler process itself can suspend (e.g. on a serverless function), and the bidirectional connection is closed. Once the timer fires/approval comes in, Restate re-invokes the service with the journal of previously completed steps, and the service can replay to the exact point in the code where it suspended and continue from there. Restate is like a DB for journals, so you can sleep for as long as needed, also months.

So you have fast persistence of events while a handler can make progress, and suspensions while waiting.

Comment · 1 month ago
Comment · 4 months ago
As agents run longer and spend more money, many agent frameworks are adding resiliency features like checkpoint recovery and pause-resume approvals.

But to get your agent to production, checkpointing is not enough. There is quite a big gap left for you to handle: failure detection, automatic retries, high availability, scale-out, idempotency, concurrency, session coordination, versioning, ...

I wrote a blog post on what’s left to solve, and how to solve it.

TL;DR Instead of tying resiliency together with your agent framework, agents should be built on top of a highly-available orchestration layer that owns the end-to-end execution, guarantees it completes, and handles all of the points above.

Optionally, agent frameworks can be used on top of this to help abstracting away the agent loop.

Is this also how you see it and productionize your agents?

Comment · 7 months ago
AI agents often run for minutes, hours, or even days. This makes deploying new versions tricky: what happens if an agent starts on one version of your code and resumes later after you’ve deployed another?

If you swap out code from under an agent, execution can break. Or worse, a changed description or tool implementation can cause your agent to silently misinterpret its own history and produce inconsistent results.

This blog post introduces how to solve this via immutable deployments and pinned executions: - Each deployment lives at a unique endpoint and represents an immutable, versioned snapshot of your code, prompts, tools, and schemas - Every execution is pinned to its deployment; retries, resumptions, and callbacks always return to the same version - New requests route to latest

The blog post shows how Restate implements this in practice. Versioning becomes an infrastructure property you don’t need to think about, rather than something you solve in code.

Comment · 1 year ago
We've used purely excalidraw. Nice to hear you like them!
Comment · 2 years ago
Here is a fan-out example for async tasks: https://docs.restate.dev/use-cases/async-tasks#parallelizing... First, a number of tasks are scheduled, and then their results are collected (fan-in). This probably comes closest to what you are looking for. Each of those tasks gets executed durably, and their execution tracked by Restate.
Comment · 2 years ago

Live from the official Hacker News API

A modern reader for Hacker News · SvelteKit + Skeleton