Skip to content

Hi, I'm Pablo.

I build multi-agent systems at Jupiter, from Madrid. Much of the work is checking whether a prompt or model change actually makes an agent better.

Before that I wrote Solana programs in Rust and the tooling that tells you when they break. I keep notes on what I learn, and I take on one consulting project at a time.

From the bench

The simulation that said no

simulateTransaction → response

"value": {
  "err": "BlockhashNotFound",
  "logs": [],
  "unitsConsumed": 0
}

Zero compute units and an empty log: none of the instructions ran. The RPC call itself succeeded, so the failure only shows up in value.err. Anything that asks a user to sign should check that field first, not the response status.

Read the note

Averages you can't add

pipes/daily_avg.pipe

-- materialise per day: keep the state, not the number
SELECT toStartOfDay(ts) AS day, city,
       avgState(latency_ms) AS latency
FROM events
GROUP BY day, city

-- any window later: merge the states
SELECT toStartOfWeek(day) AS week, city,
       avgMerge(latency) AS avg_latency
FROM daily_latency
GROUP BY week, city

When days have different volumes, the average of daily averages is not the weekly average. Storing the aggregate state instead of the finished number lets one materialised view answer any window correctly.

Read the note

More on the work page

Notes I'd start with

Recently written

All 31 notes