Ask a model to fill an idempotency_key field and you get a string that looks convincing. Ask twice and you often get two different strings. That is not a bug in the model. Under the hood, tool calls are text that the provider's inference layer parses into JSON: Anthropic returns toolu_ prefixed IDs, OpenAI uses call_ prefixes, and MiniMax publishes its raw XML output along with the regex that converts it, which shows the translation plainly the SylphAI guide to agentic tool calling. Sampling controls which token gets chosen at each position, so any field the model writes, including a UUID-shaped one, is one sample among many.
The provider-supplied tool call ID does not rescue you either. Those IDs identify a call, not a business operation, and a fresh identifier is not automatically a stable business-operation identifier Formation's analysis of agent tool retries. If the orchestrator restarts, replays a step or re-plans, a new call ID appears. Deduplication keyed on it fails.
There is a second drift path that has nothing to do with sampling. A model may decide a valid result was inadequate and request another call. That request is a judgment, not evidence that the previous operation failed Formation's analysis of agent tool retries. If the model regenerates the key on that second attempt, you have created two payments for one intent.
A concrete way to see the difference: run the same tool call twice against a real model with the key in the schema and log the two strings. They will differ at most positions. Run the same call twice with the key derived in code and log the two hashes. They will be byte-identical. That is the whole argument in one experiment, and it takes a few minutes to run.
The drift also survives temperature changes. Lowering temperature narrows the distribution, it does not collapse it to a function. Nothing in the model contract promises that a field is deterministic across calls, and no prompt wording turns a sampled field into one.



