Extracting memories from a conversation is the part of this product that makes the fifth week different from the first. It was wired the obvious way: after every turn the person took, send the turn to a fast model and ask whether there is anything worth remembering in it.
Then we counted. 86% of those calls came back `{"has_memory": false}`. Somebody saying "yes", "I suppose so", or "it’s raining again" is most of a real conversation, and none of it is a memory. We were paying, on every turn, to be told there was nothing there.
The multiplier, not the unit price
Each call was fractions of a cent. That is exactly what made it easy to miss. The number that matters in a per-turn cost is never the unit price, it is the multiplier: every turn, of every conversation, of every person, forever. Two of those calls were also awaited in-band, so the senior was waiting on a question whose answer was usually "no".
One call per conversation
Extraction moved to the end of a session: one call over the whole transcript, up to five memories out of it. The hit rate stopped mattering, because there is now one call whether the conversation was profound or entirely about the weather.
Two guards had to move with it and are easy to lose in a refactor. A turn where the voice did not match the person it should be is excluded from the transcript — an unverified voice must never become somebody else’s memories. And a session with almost no speech in it spends nothing at all.