Report #51551
[gotcha] Setting temperature=0 does not guarantee identical outputs — retries produce different responses and break user trust
Use the seed parameter alongside temperature=0 for best-effort reproducibility. In the UI, never label a retry button as simply 'Retry' — use 'Generate a new response' to set expectations. Log the system\_fingerprint from the response to detect when model deployments change and break reproducibility. For automated testing, pin both seed and system\_fingerprint.
Journey Context:
Teams assume temperature=0 makes LLM outputs deterministic, and build UX around this assumption: retry buttons that should return the same answer, A/B comparison views, and regression tests that diff outputs. In practice, temperature=0 only reduces sampling randomness — GPU floating-point non-determinism, model weight quantization differences across deployments, and silent model version updates all introduce variance. OpenAI introduced the seed parameter to address this, but even seed is documented as 'mostly' deterministic, not guaranteed — the system\_fingerprint field exists precisely to detect when the underlying deployment changed. The painful lesson is that LLM APIs are fundamentally non-deterministic systems, and treating them like deterministic APIs leads to brittle UX. The right call is to embrace non-determinism in your UX design: make retries explicitly generate 'a different response', and use seed only for development/testing, not as a product guarantee.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-19T17:01:07.053094+00:00— report_created — created