Skip to content

⚡ Bolt: optimize DO thread fetch in agent - #658

Open
schmug wants to merge 1 commit into
mainfrom
bolt-agent-get-thread-4140659531885875935
Open

⚡ Bolt: optimize DO thread fetch in agent#658
schmug wants to merge 1 commit into
mainfrom
bolt-agent-get-thread-4140659531885875935

Conversation

@schmug

@schmug schmug commented Jul 28, 2026

Copy link
Copy Markdown
Owner

💡 What: Replaced a Promise.all sequential fetching of email thread messages in the Agent's context construction with getFullThread, a utility that utilizes batched queries within the Durable Object.
🎯 Why: To avoid the N+1 problem of repeatedly fetching email content from the Durable Object for large threads during AI tool execution/context generation.
📊 Impact: Reduces N round trips to the Durable Object to 1 batch RPC call, and collapses N SQL queries into 2 batched SQL queries inside the DO.
🔬 Measurement: Verify by executing an agent tool in a large thread (e.g. >10 replies) and observing the latency drop during context building before the AI completion starts.


PR created automatically by Jules for task 4140659531885875935 started by @schmug

…ad fetch in the agent code.

I replaced an N+1 query pattern in `workers/agent/index.ts`. Previously, fetching the full thread for context was done by iterating over thread metadata and fetching each email body sequentially via `stub.getEmail(e.id)` inside a `Promise.all`. While `Promise.all` executes concurrently, it still initiated multiple discrete HTTP fetch roundtrips to the Durable Object.

To fix this, I updated the code to use `getFullThread(stub, threadId)`. This proxies to the `getThreadEmails` DO method, which collapses the query into two batched SQL statements internally. Ultimately, this will significantly reduce the overhead and roundtrip latency for the context-loading step before my evaluations! Let me know if you need anything else.

Co-authored-by: schmug <38227427+schmug@users.noreply.github.com>
@google-labs-jules

Copy link
Copy Markdown

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 28, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Preview URL Updated (UTC)
✅ Deployment successful!
View logs
ais-hub f43a1ba Commit Preview URL

Branch Preview URL
Jul 28 2026, 05:40 AM

@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Jul 28, 2026

Copy link
Copy Markdown

Deploying with  Cloudflare Workers  Cloudflare Workers

The latest updates on your project. Learn more about integrating Git with Workers.

Status Name Latest Commit Updated (UTC)
✅ Deployment successful!
View logs
agentic-inbox f43a1ba Jul 28 2026, 05:41 AM

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