Videos Lc8zRh9muoY
Your Agent Failed in Prod. Good Luck Reproducing It. - Tisha Chawla & Susheem Koul, Microsoft
Scene timeline
36 shot(s).
keyframes kept every frame deduplicated
What was stored
- cues
- 182
- whisperx 182
- chunks
- 26
- from 182 cues
- keyframes
- 31
- kept of 36 captured
- frames with text
- 31
- 779 lines read
- chapters
- 0
- from the source metadata
- keyframe bytes
- 3.0 MB
- word timings on 182 cues
Provenance
| stage | state | model | started | took |
|---|---|---|---|---|
fetch |
done | — | 2026-08-11 05:51 | 1m 19s |
stt |
done | — | 2026-08-11 05:52 | 16s |
chunk |
done | — | 2026-08-11 05:53 | 0s |
text_embed |
done | — | 2026-08-11 05:53 | 1s |
keyframe |
done | — | 2026-08-11 05:53 | 39s |
ocr |
done | — | 2026-08-11 05:53 | 21s |
frame_embed |
done | — | 2026-08-11 05:54 | 5s |
Frames, and what the machine read
-
- AlEngineer1.00
- World's Fair0.98
- Your agent failed in prod.0.98
- good luck reproducing it.0.98
- Tisha Chawla· Susheem Koul · Microsoft0.96
-
- asked: sell $1,0000.96
-
- asked: sell $1,0000.95
- sold:1.00
- $190,0001.00
- broker·POST/orders1.00
- 200 OK0.96
- order.status FILLED · $190,0000.97
-
- temperature = 01.00
-
- # unedited, from the threads0.96
- HARD DATA1.00
- 1,000 prompts1.00
- r/LocalLLaMA0.96
- "different outputs at temperature = 0,1.00
- → 80 answers0.98
- mostly the MoE architecture."1.00
- temp 0·vLLM·Qwen-3-8B0.99
- r/LocalLLaMA0.96
- "even at temp 0 you get different0.99
- answers, you're using GPUs."0.99
- Hacker News1.00
- "completely correct or completely wrong,0.99
- depending on minute numerical diffs."1.00
-
- First principles first0.98
-
- 1 sampling determinism ≠ system determinism1.00
- temp 0 fixes the rule (argmax), not the logits you argmax over.0.99
- 2 float addition is NOT associative0.99
- (0.1 + 1e20) - 1e20 = 0 0.1 + (1e20 − 1e20) = 0.10.92
- reorder a reduction → a logit's last bits move → argmax flips.0.99
- 31.00
- the culprit is batch invariance1.00
- same matmul, same GPU, 1000× → bitwise identical.0.99
- prod batches you with strangers; the kernel depends on batch shape.0.99
-
- 1 sampling determinism ≠ system determinism1.00
- temp 0 fixes the rule (argmax), not the logits you argmax over.0.99
- 2 float addition is NOT associative0.99
- (0.1 + 1e20) - 1e20 = 0 0.1 + (1e20 - 1e20) = 0.10.91
- reorder a reduction → a logit's last bits move → argmax flips.0.98
- 31.00
- the culprit is batch invariance1.00
- same matmul, same GPU, 1000× → bitwise identical.0.97
- prod batches you with strangers; the kernel depends on batch shape.1.00
- 41.00
- MoE routing jitter: expert capacity ceiling, route depends on the batch.1.00
- same token? no. we need the SYSTEM to run the same0.99
- STATE TRANSITION.0.98
-
- X wrong question: can we make the model deterministic.0.98
- right question: can we debug & test a run we can't reproduce.1.00
- determinism was never the goal. record the run, replay the recording.1.00
- bitwise determinism1.00
- replayability0.98
- = controllability1.00
- = observability0.99
- same input → identical output.0.99
- reconstruct a run that happened,1.00
- you won't get it from a hosted API,1.00
- well enough to debug. you don't1.00
- and you don't want it: that0.99
- need determinism, you need0.99
- randomness makes the model good.0.97
- the run recorded.1.00
- you don't freeze the model. you capture what it did.0.99
-
- record above the wire, not on it.1.00
- Xat the network layer0.99
- at the boundary0.99
- half your agent never touches1.00
- capture what enters each node1.00
- the network: local retrieval,1.00
- and what leaves it, every I/O,1.00
- in-process tools, memory.1.00
- network or not.0.97
- the socket can't record0.99
- the meaning of each step,1.00
- what isn't on it.0.98
- not the packets.1.00
- tracing records it. replay re-runs it offline: stub the model, O calls.0.97
- Openlnference· Arize Phoenix· LangGraph checkpointers· framework-agnostic0.98
-
- C0.57
- https://onedrive.live.com/:p:/g/personal/d51d325a0b92dae6/IQBAOZIWI0tiT5nXWmK4xswbAaikJAf3vkme9N9RrJAYvL0?rtime=xpaRVQvO3kg&rede...0.99
- ☆0.94
- 品0.96
- 口0.65
- Basics1.00
- Quick Lookups1.00
- Tools1.00
- Sheets0.94
- Reference Material1.00
- Personal1.00
- Save to Instapaper1.00
- agent-replay-whiteboard1.00
- Search1.00
- Sign in1.00
- File1.00
- Home1.00
- Insert1.00
- Draw1.00
- Design1.00
- Transitions1.00
- Animations1.00
- Slide Show1.00
- Review1.00
- View1.00
- Help1.00
- Comments1.00
- Present1.00
- Editing1.00
- 91.00
- 40.58
- 演0.51
- 4:551.00
- II0.54
- Live Demo1.00
- 演0.58
- 111.00
- two kinds of check.0.88
- 121.00
- tldr:0.78
- 清0.57
- 131.00
- code • writeup0.89
-
- M40.98
- README.md1.00
- trade_notional.py1.00
- zsh1.00
- {}002-place_order-1.json M1.00
- {}001-agent-1.json M0.98
- Preview README1.00
- ①README.md0.96
- Preview1.00
- Markdown1.00
- @boundary wrapper (LIVE)1.00
- @boundary("place_order", kind="tool")0.99
- annotate once0.97
- INPUT captured0.99
- symbol=ACME0.99
- quantity=10001.00
- side=sell (args → InputState)0.98
- def place_order(symbol: str, quantity: int) -> dict:0.99
- notional = quantity * SHARE_PRICE1.00
- return {"status": "filled", "notional_cents": notional}0.99
- OUTPUT captured1.00
- {"status": "filled", "notional_cents": 19000000, ...}0.98
- Envelope → store → fixtures/traces/0.99
-
- M+README.md0.98
- trade_notional.py1.00
- zsh1.00
- {}002-place_order-1.json M1.00
- {}001-agent-1.json M0.98
- Preview README1.00
- 日0.87
- examples>financial_incidentstrade_notional.py0.99
- 261.00
- USER_MESSAGE = "Sell about $1,000 of ACME from my portfolio to rebalance."1.00
- 271.00
- 281.00
- 29 > def set_mode(mode: str) -> None: -0.95
- 341.00
- 351.00
- 36 > def _order_input(*args, **kwargs) -> InputState:0.97
- 531.00
- 541.00
- 551.00
- @boundary(TopL, kind="tool", extract_input=_order_input)0.98
- 561.00
- > def place_order(symbol: str, quantity: int, *, side: str = "sell") -> dict[str, Any]:0.98
- 861.00
- 871.00
- 881.00
- @boundary("agent", kind="llm", extract_input=agent_input)0.99
- 89 > def agent_plan(state: dict[str, Any]) -> dict[str, Any]:0.97
- 1021.00
- 1031.00
- 1041.00
- @boundary("agent", kind="llm", extract_input=agent_input)0.99
- 105 > def agent_finalize(state: dict[str, Any], tool_result: dict[str, Any]) -> dict[str, Any]:0.99
- 1201.00
- 1211.00
- 122 > def run_agent(user_message: str = USER_MESSAGE) -> dict[str, Any]:0.99
- 1371.00
-
- M+0.92
- README.md1.00
- trade_notional.py1.00
- python3.10 {}002-place_order-1.json M{}001-agent-1.json M0.99
- Pre+田0.85
- susheemkoul@Susheems-MacBook-Pro chronicle % python examples/financial_incidents/run.py trade record0.99
- X0.68
-
- M+README.md0.94
- trade_notional.py1.00
- zsh0.92
- {}002-place_order-1.json M0.99
- {}001-agent-1.json M0.99
- Preview RE+0.99
- 日0.92
- susheemkoul@Susheems-MacBook-Pro chronicle % python examples/financial_incidents/run.py trade record1.00
- RECORD1.00
- trade-notional1.00
- User request1.00
- Sell about,000of ACME from my portfolio to rebalance.0.99
- Boundary results0.99
- Node1.00
- Kind1.00
- Mode1.00
- Input1.00
- Output0.99
- agent@11.00
- llm0.80
- LIVE1.00
- Sell about $1,000 of ACME from my p...0.99
- → place_order(symbol=ACME, quantity=1000, side=sell)0.97
- place_order@11.00
- tool1.00
- LIVE1.00
- symbol=ACME, quantity=1000, side=se...0.97
- filled: Sold 1000 ACME at $190.00($190,000.00 total)0.99
- agent@20.99
- llm0.91
- LIVE1.00
- tool_result: filled0.98
- Done. Sold 1000 ACME at $190.00 ($190,000.00 total)0.98
- Trace exported0.99
- fixtures/traces/trade-notional/1.00
- susheemkoul@Susheems-MacBook-Pro chronicle %0.99
-
- M+ README.md0.89
- trade_notional.py1.00
- zsh0.86
- {}002-place_order-1.json M {}001-agent-1.json M0.97
- Preview REAC0.96
- 日0.93
- fixtures >traces > trade-notional > {}002-place_order-1.json >{}input_state >{}graph_state > symbol0.95
- "schema_version": "1.0",0.99
- "envelope_id":"2a1f7bf0-d045-4d19-9ba2-67ce2247a849",1.00
- "trace_id": "trace-trade-notional-001",0.99
- "node_id": "place_order",0.99
- "boundary_kind": "tool",0.99
- "parent_envelope_id": "0527fba4-9311-4750-994c-fb5c109e84fc",0.99
- 81.00
- "sequence": 2,0.98
- "invocation_index": 1,0.99
- 101.00
- "timestamp": "2026-06-19T16:00:55.136822Z",0.99
- 111.00
- "metadata": {0.99
- 121.00
- "model_version": "demo-model",0.99
- 131.00
- "sampling_params": {0.98
- 141.00
- "temperature": null,0.99
- 151.00
- "top_p": null,0.97
- 161.00
- "max_tokens": null,0.99
- 171.00
- "seed": null,0.97
- 181.00
- "extra": {}0.97
- 191.00
- 201.00
- "build_id": "financial-demo-trade-notional",0.99
- 211.00
- "tool_schemas": [],0.97
- 221.00
- "framework": "chronicle.boundary",0.99
- 231.00
- "node_id": "place_order",0.99
- 241.00
- "trace_id": "trace-trade-notional-001",1.00
- 251.00
- "extra": {}0.95
- 261.00
- },0.90
- 271.00
- "input_state": {0.99
-
- M README.md0.95
- trade_notional.py1.00
- zsh0.90
- {}002-place_order-1.json M {}001-agent-1.json M0.98
- Preview REAC0.98
- 日0.96
- fixtures>traces > trade-notional > {}002-place_order-1.json >{}input_state >{}graph_state > symbol0.96
- 51.00
- "node_id": "place_order",0.98
- "boundary_kind":"tool",1.00
- "parent_envelope_id":"0527fba4-9311-4750-994c-fb5c109e84fc",1.00
- 81.00
- "sequence": 2,0.98
- "invocation_index": 1,0.99
- 101.00
- "timestamp":"2026-06-19T16:00:55.136822Z",1.00
- 111.00
- "metadata": {0.99
- 121.00
- "model_version":"demo-model",1.00
- 131.00
- "sampling_params": {0.99
- 141.00
- "temperature": null,0.99
- 151.00
- "top_p": null,0.98
- 161.00
- "max_tokens": null,1.00
- 171.00
- "seed": null,0.99
- 181.00
- "extra": {}0.97
- 191.00
- 200.99
- "build_id": "financial-demo-trade-notional",0.99
- 211.00
- "tool_schemas": [],0.95
- 221.00
- "framework": "chronicle.boundary",0.99
- 231.00
- "node_id": "place_order",0.99
- 241.00
- "trace_id": "trace-trade-notional-001",0.99
- 251.00
- "extra": {}0.97
- 261.00
- },0.93
- 271.00
- "input_state": {1.00
- 281.00
- "messages": [],0.99
- 291.00
- "system_prompt": null,0.99
- 301.00
- "rag_chunks": [],0.99
- 311.00
- "graph_state": {0.99
-
- M README.md0.94
- trade_notional.py1.00
- zsh0.83
- {}002-place_order-1.json M {}001-agent-1.json M0.97
- Preview REAC0.98
- 日0.96
- fixtures >traces > trade-notional > {}002-place_order-1.json >{}input_state >{}graph_state > symbol0.95
- "parent_envelope_id": "0527fba4-9311-4750-994c-fb5c109e84fc",0.99
- 81.00
- "sequence": 2,0.97
- 91.00
- "invocation_index": 1,0.98
- 100.92
- "timestamp":"2026-06-19T16:00:55.136822Z",1.00
- 111.00
- "metadata": {0.99
- 121.00
- "model_version":"demo-model",1.00
- 131.00
- "sampling_params": {0.99
- 141.00
- "temperature": null,0.99
- 151.00
- "top_p": null,0.99
- 161.00
- "max_tokens": null,1.00
- 171.00
- "seed": null,0.97
- 181.00
- "extra": {}0.96
- 191.00
- 201.00
- "build_id": "financial-demo-trade-notional",0.99
- 211.00
- "tool_schemas": [],0.98
- 221.00
- "framework": "chronicle.oundary",0.99
- 231.00
- "node_id": "place_order",0.99
- 241.00
- "trace_id": "trace-trade-notional-001",0.99
- 251.00
- "extra": {}0.95
- 261.00
- },0.95
- 271.00
- "input_state": {0.98
- 281.00
- "messages": [],0.99
- 291.00
- "system_prompt": null,0.99
- 300.99
- "rag_chunks": [],0.98
- 311.00
- "graph_state": {0.99
- 321.00
- "symbol": "ACME',0.96
- 330.81
- "quantity": 1000,1.00
-
- M+ README.md0.91
- trade_notional.py1.00
- 日 zsh0.82
- {}002-place_order-1.json M {}001-agent-1.json M0.97
- Preview REAC0.94
- 日0.95
- fixtures > traces >trade-notional > {}002-place_order-1.json >{}input_state >{}graph_state > symbol0.95
- 271.00
- "input_state": {0.98
- 291.00
- "system_prompt": null,0.99
- 301.00
- "rag_chunks": [],0.99
- 311.00
- "graph_state": {0.99
- 321.00
- "symbol": "ACME"0.96
- 331.00
- "quantity": 1000,0.95
- 341.00
- "side": "sell",0.99
- 351.00
- "share_price_cents": 19000,0.99
- 361.00
- "intended_notional_cents":100000,1.00
- 371.00
- "implied_notional_cents": 19000000,0.99
- 381.00
- "max_order_notional_cents": 5000000.99
- 391.00
- 401.00
- },0.94
- 411.00
- "action_result": {0.99
- 421.00
- "tool_calls": [],0.99
- 431.00
- "completion":"filled",1.00
- 441.00
- "finish_reason": null,0.98
- 451.00
- "token_usage": {},0.99
- 461.00
- "raw_response": {0.98
- 471.00
- "status": "filled",1.00
- 481.00
- "blocked": false,1.00
- 491.00
- "symbol": "ACME",0.98
- 501.00
- "quantity": 1000,1.00
- 511.00
- "side": "sell",0.99
- 521.00
- "fill_price_cents": 19000,0.99
- 531.00
- "notional_cents": 19000000,0.98
- 541.00
- "message": "Sold 1000 ACME at $190.00 ($190,000.00 total)"0.99
-
- M README.md0.93
- trade_notional.py1.00
- zsh0.88
- {}002-place_order-1.json M {}001-agent-1.json M0.98
- Preview REAC0.94
- 日0.95
- fixtures>traces >trade-notional>{}00~/Desktop/chronicle/fixtures/traces/trade-notional/001-agent-1.json·Modified0.99
- 271.00
- "input_state": {0.99
- 311.00
- "graph_state": {0.97
- 381.00
- "max_order_notional_cents": 5000000.99
- 391.00
- 401.00
- 411.00
- "action_result": {0.98
- 421.00
- "tool_calls": [],0.98
- 431.00
- "completion": "filled",0.99
- 441.00
- "finish_reason": null,0.99
- 451.00
- "token_usage": {},0.97
- 461.00
- "raw_response": {0.97
- T0.99
- 471.00
- "status": "filled",0.98
- 481.00
- "blocked": false,0.98
- 491.00
- "symbol":"ACME",1.00
- 501.00
- "quantity": 1000,1.00
- 511.00
- "side": "sell",0.99
- 521.00
- "fill_price_cents": 19000,0.99
- 531.00
- "notional_cents": 19000000,1.00
- 541.00
- "message": "Sold 1000 ACME at $190.00 ($190,000.00 total)"0.99
- 551.00
- 561.00
- 571.00
Transcript
182 cues· 2,368 words· 12,851 chars
- 0:00 Imagine something your agent didn't prod was wrong.
- 0:04 Coy the wrong tool, it wrote the wrong thing and now suddenly your team is on call rotation to figure out what actually went wrong.
- 0:14 Pretty common, right?
- 0:15 Now, as per the standard engineering response, your gut will tell you to pull the raw prompt from the telemetry logs, pass it to the same model, using the same prompt and run it locally to isolate the bug, which we'll all do.
- 0:31 And surprisingly, it will work as well.
- 0:33 Run it again, it will work again.
- 0:36 You run it 10 more times, it will be just perfect every time.
- 0:40 But
- 0:41 Now let's talk about that one run which costed you and that will be gone.
- 0:46 You can reproduce it.
- 0:48 And if you can reproduce it, you can debug it.
- 0:50 And if you can debug it, you can promise it won't happen to your next customer or user, right?
- 0:57 Now, I am Tisha.
- 0:58 I have Sushin with me as my co-presenter.
- 1:01 We both run agents against real production backends.
- 1:05 You know, the kind of place where a bad write isn't.
- 1:08 Oh well, done it again.
- 1:09 It's you on a call with a customer explaining where the data actually went.
- 1:15 This whole talk is going to be about that one thing, to lose the second an agent goes hay by in production, which is being able to reproduce it.
- 1:24 That will be a North Star for the next 10 minutes to follow.
- 1:29 Now let's look at how this actually blows up.
- 1:33 You've got an agent hooked to a broker API, which is the scenario I'm taking.
- 1:37 The user says, hey, sell $1,000 of stock.
- 1:42 Now comes the interesting part.
- 1:44 Instead of doing the math, the agent sells the raw number 1,000 and dumps it straight into the quantity field.
- 1:53 Guess what?
- 1:53 It says 1,000 shares instead.
- 1:56 Now, at 190 bucks a share, $1,000 in tech will become how much?
- 2:03 $190,000 disaster, right?
- 2:07 And the very side part is that the API on my infrared returned a clean 200 OK in 30 milliseconds.
- 2:14 We got zero exceptions, zero alerts.
- 2:17 If you see the trade is completely wrong, but your dashboards are sitting there perfectly green, perfectly flawless.
- 2:26 Then such a scenario as we last discussed comes up.
- 2:30 What's the first thing which you will do to try and fix this?
- 2:35 The reflex here is to
- 2:37 know just turn the model temperature down to absolute zero assuming greedy decoding will make everything deterministic right but that's a complete misconception setting the temperature to zero doesn't fix a broken reasoning path it just means the model is going to make the exact same logical error the exact same way at the exact same time and honestly even worse than that
- 3:05 To back up the scenario we just discussed, look at the engineering threads on Reddit and Hacker News.
- 3:11 The hard data shows that temperature zero isn't even truly deterministic on a hardware level.
- 3:17 Running the same prompt a thousand times can still return dozens of completely different responses just due to the underlying GPU non-determinism and the MOE architectures which are there.
- 3:32 So to understand why this actually happens, we'll have to look at it from first principles.
- 3:38 It comes down to four simple things.
- 3:41 One, sampling determinism is a system determinism.
- 3:46 Temperature zero just means always take the argmax, but it doesn't guarantee that the underlying scores stay identical run to run.
- 3:55 2.
- 3:56 Floating point math isn't associative.
- 3:59 The order you add your decimal matters, right?
- 4:03 But a tiny shift in matrix operation alters the final logic and which in turn will flip the winning token.
- 4:11 3.
- 4:13 It's not a concurrency issue.
- 4:15 Rank the same matrix multiplication alone on the GPU a thousand times and I'll guarantee you'll get this exact same bits.
loading