Stay Ahead, Stay ONMINE

Avoidable and Unavoidable Randomness in GPT-4o

Of course there is randomness in GPT-4o’s outputs. After all, the model samples from a probability distribution when choosing each token. But what I didn’t understand was that those very probabilities themselves are not deterministic. Even with consistent prompts, fixed seeds, and temperature set to zero, GPT-4o still introduces subtle, frustrating randomness. There’s no fix for this, and it might not even be something OpenAI could fix if they wanted to, just so we’re clear up front about where this article is headed. Along the way, we’ll examine all the sources of randomness in GPT-4o output, which will require us to break down the sampling process to a low level. We’ll point at the issue—the probabilities vary—and critically examine OpenAI’s official guidance on determinism. First, though, let’s talk about why determinism matters. Determinism means that the same input always produces the same output, like a mathematical function. While LLM creativity is often desirable, determinism serves crucial purposes: researchers need it for reproducible experiments, developers for verifying reported results, and prompt engineers for debugging their changes. Without it, you’re left wondering if different outputs stem from your tweaks or just the random number generator’s mood swings. Flipping a coin We’re going to keep things extremely simple here and prompt the most recent version of GPT-4o (gpt-4o-2024-08-06 in the API) with this:  Flip a coin. Return Heads or Tails only. Flipping a coin with LLMs is a fascinating topic in itself (see for example Van Koevering & Kleinberg, 2024 in the references), but here, we’ll use it as a simple binary question with which to explore determinism, or the lack thereof. This is our first attempt. import os from openai import OpenAI client = OpenAI(api_key=os.getenv(‘OPENAI_API_KEY’)) prompt = ‘Flip a coin. Return Heads or Tails only.’ response = client.chat.completions.create(     model=’gpt-4o-2024-08-06′,     messages=[{‘role’: ‘user’, ‘content’: prompt}], ) print(response.choices[0].message.content) Running the code gave me Heads. Maybe you’ll get Tails, or if you’re really lucky, something far more interesting. The code first initializes an OpenAI client with an API key set in the environment variable OPENAI_API_KEY (to avoid sharing billing credentials here). The main action happens with client.chat.completions.create, where we specify the model to use and send the prompt (as a part of a very simple conversation named messages) to the server. We get an object called response back from the server. This object contains a lot of information, as shown below, so we need to dig into it to extract GPT-4o’s actual response to the message, which is response.choices[0].message.content. > > > responseChatCompletion(id=’chatcmpl-B48EqZBLfUWtp9H7cwnchGTJbBDwr’, choices=[Choice(finish_reason=’stop’, index=0, logprobs=None, message=ChatCompletionMessage(content=’Heads’, refusal=None, role=’assistant’, audio=None, function_call=None, tool_calls=None))], created=1740324680, model=’gpt-4o-2024-08-06′, object=’chat.completion’, service_tier=’default’, system_fingerprint=’fp_eb9dce56a8′, usage=CompletionUsage(completion_tokens=2, prompt_tokens=18, total_tokens=20, completion_tokens_details=CompletionTokensDetails(accepted_prediction_tokens=0, audio_tokens=0, reasoning_tokens=0, rejected_prediction_tokens=0), prompt_tokens_details=PromptTokensDetails(audio_tokens=0, cached_tokens=0))) Now let’s flip the coin ten times. If this were a real, fair coin, of course, we would expect roughly equal heads and tails over time thanks to the law of large numbers. But GPT-4o’s coin doesn’t work quite like that. import os from openai import OpenAI client = OpenAI(api_key=os.getenv(‘OPENAI_API_KEY’)) prompt = ‘Flip a coin. Return Heads or Tails only.’ for _ in range(10):     response = client.chat.completions.create(         model=’gpt-4o-2024-08-06′,         messages=[{‘role’: ‘user’, ‘content’: prompt}],     )     print(response.choices[0].message.content) Running this code gave me the following output, although you might get different output, of course. HeadsHeadsHeadsHeadsHeadsHeadsTailsHeadsHeadsHeads GPT-4o’s coin is clearly biased, but so are humans. Bar-Hillel, Peer, and Acquisti (2014) found that people flipping imaginary coins choose “heads” 80% of the time. Maybe GPT-4o learned that from us. But whatever the reason, we’re just using this simple example to explore determinism. Just how biased is GPT-4o’s coin? Let’s say we wanted to know precisely what percentage of GPT-4o coin flips land Heads. Rather than the obvious (but expensive) approach of flipping it a million times, there’s a smarter way. For classification tasks with a small set of possible answers, we can extract token probabilities instead of generating full responses. With the right prompt, the first token carries all the necessary information, making these API calls incredibly cheap: around 30,000 calls per dollar, since each requires just 18 (cached) input tokens and 1 output token. OpenAI gives us (natural) log probabilities. These are called logprobs in the code, and we convert them to regular probabilities by exponentiation. (We’ll discuss temperature soon, but note that exponentiating logprobs directly like this corresponds to a temperature setting of 1.0, and is how we calculate probabilities throughout this article). OpenAI lets us request logprobs for the top 20 most likely tokens, so we do that. import os import math from openai import OpenAI from tabulate import tabulate client = OpenAI(api_key=os.getenv(‘OPENAI_API_KEY’)) prompt = ‘Flip a coin. Return Heads or Tails only.’ response = client.chat.completions.create(     model=’gpt-4o-2024-08-06′,     max_tokens=1,     logprobs=True,     top_logprobs=20,     messages=[{‘role’: ‘user’, ‘content’: prompt}], ) logprobs_list = response.choices[0].logprobs.content[0].top_logprobs data = [] total_pct = 0.0 for logprob_entry in logprobs_list:     token = logprob_entry.token     logprob = logprob_entry.logprob     pct = math.exp(logprob) * 100  # Convert logprob to a percentage     total_pct += pct     data.append([token, logprob, pct]) print(     tabulate(         data,         headers=[“Token”, “Log Probability”, “Percentage (%)”],         tablefmt=”github”,         floatfmt=(“s”, “.10f”, “.10f”)     ) ) print(f”nTotal probabilities: {total_pct:.6f}%”) If you run this, you’ll get something like the following output, but actual numbers will vary. | Token     |   Log Probability |   Percentage (%) ||———–|——————-|——————|| Heads     |     -0.0380541235 |    96.2660836887 || T         |     -3.2880542278 |     3.7326407467 || Sure      |    -12.5380544662 |     0.0003587502 || Head      |    -12.7880544662 |     0.0002793949 || Tail      |    -13.2880544662 |     0.0001694616 || Certainly |    -13.5380544662 |     0.0001319768 || “T        |    -14.2880544662 |     0.0000623414 || I’m       |    -14.5380544662 |     0.0000485516 || heads     |    -14.5380544662 |     0.0000485516 || Heads     |    -14.9130544662 |     0.0000333690 || ”         |    -15.1630544662 |     0.0000259878 || _heads    |    -15.1630544662 |     0.0000259878 || tails     |    -15.5380544662 |     0.0000178611 || HEAD      |    -15.7880544662 |     0.0000139103 || TAIL      |    -16.2880535126 |     0.0000084370 || T         |    -16.7880535126 |     0.0000051173 || “`       |    -16.7880535126 |     0.0000051173 || Here’s    |    -16.9130535126 |     0.0000045160 || I         |    -17.2880535126 |     0.0000031038 || As        |    -17.2880535126 |     0.0000031038 |Total probabilities: 99.999970% Looking at these probabilities, we see Heads at ≈96% and T at ≈4%. Our prompt is doing pretty well at constraining the model’s responses. Why T and not Tails? This is the tokenizer splitting Tails into T + ails, while keeping Heads as one piece, as we can see in this Python session: > > > import tiktoken > > > encoding = tiktoken.encoding_for_model(“gpt-4o-2024-08-06″) > > > encoding.encode(‘Tails’) [51, 2196] > > > encoding.decode([51]) ‘T’ > > > encoding.encode(‘Heads’) [181043] These probabilities are not deterministic Run the code to display the probabilities for the top 20 tokens again, and you’ll likely get different numbers. Here’s what I got on a second running. | Token     |   Log Probability |   Percentage (%) ||———–|——————-|——————|| Heads     |     -0.0110520627 |    98.9008786933 || T         |     -4.5110521317 |     1.0986894433 || Certainly |    -14.0110521317 |     0.0000822389 || Head      |    -14.2610521317 |     0.0000640477 || Sure      |    -14.2610521317 |     0.0000640477 || Tail      |    -14.3860521317 |     0.0000565219 || heads     |    -15.3860521317 |     0.0000207933 || Heads     |    -15.5110521317 |     0.0000183500 || “`       |    -15.5110521317 |     0.0000183500 || _heads    |    -15.6360521317 |     0.0000161938 || tails     |    -15.6360521317 |     0.0000161938 || I’m       |    -15.8860521317 |     0.0000126117 || “T        |    -15.8860521317 |     0.0000126117 || As        |    -16.3860511780 |     0.0000076494 || ”         |    -16.5110511780 |     0.0000067506 || HEAD      |    -16.6360511780 |     0.0000059574 || TAIL      |    -16.7610511780 |     0.0000052574 || Here’s    |    -16.7610511780 |     0.0000052574 || “        |    -17.1360511780 |     0.0000036133 || T         |    -17.6360511780 |     0.0000021916 |Total probabilities: 99.999987% In their cookbook, OpenAI offers the following advice on receiving “mostly identical” outputs: If the seed, request parameters, and system_fingerprint all match across your requests, then model outputs will mostly be identical. There is a small chance that responses differ even when request parameters and system_fingerprint match, due to the inherent non-determinism of our models. They also give “mostly identical” advice in the reproducible outputs section of their documentation. The request parameters that could affect randomness are temperature and seed. OpenAI also suggests we track system_fingerprint, because differences here might cause differences in output. We’ll examine each of these below, but spoiler: none of them will fix or even explain this non-determinism. Temperature, and why it won’t fix this Temperature controls how random the model’s responses are. Low temperatures (1.5) produce gibberish. Temperature is often called the “creativity parameter”, but this is an oversimplification. In their analysis, Peeperkorn, Kouwenhoven, Brown, and Jordanous (2024) evaluated LLM outputs across four dimensions of creativity: novelty (originality), coherence (logical consistency), cohesion (how well the text flows), and typicality (how well it fits expected patterns). They observed that: temperature is weakly correlated with novelty, and unsurprisingly, moderately correlated with incoherence, but there is no relationship with either cohesion or typicality. But, this is beside the point for coin flipping. Under the hood, the log probabilities are divided by the temperature before they’re renormalized and exponentiated to be converted to probabilities. This creates a non-linear effect: temperature=0.5 squares the probabilities, making likely tokens dominate, while temperature=2.0 applies a square root, flattening the distribution. What about temperature=0.0? Instead of breaking math dividing by zero, the model simply picks the highest-probability token. Sounds deterministic, right? Not quite. Here’s the catch: temperature only comes into play after the log probabilities are computed, when we convert them to probabilities. In summary: if the logprobs aren’t deterministic, setting temperature to 0.0 won’t make the model deterministic. In fact, since we’re just asking the model for the raw logprobs directly rather than generating full responses, the temperature setting doesn’t come into play in our code at all. Seeds, and why they won’t fix this After temperature is used to compute probabilities, the model samples from these probabilities to pick the next token. OpenAI gives us a little control over the sampling process by letting us set the seed parameter for the random number generator. In an ideal world, setting a seed would give us determinism at any temperature. But seeds only affect sampling, not the log probabilities before sampling. In summary: if the logprobs aren’t deterministic, setting a seed won’t make the model deterministic. In fact, seed only matters with non-zero temperatures. With temperature=0.0, the model is always choosing the highest probability token regardless of the seed. Again, since we’re just asking the model for the raw logprobs directly rather than sampling, neither of these settings can help us achieve determinism. System fingerprints, our last hope The system_fingerprint identifies the current combination of model weights, infrastructure, and configuration options in OpenAI’s backend. At least, that’s what OpenAI tells us. Variations in system fingerprints might indeed explain variations in logprobs. Except that they don’t, as we will verify below. Nothing can get you determinism Let’s confirm what we’ve been building toward. We’ll run the same request 10 times with every safeguard in place. Even though neither of these parameters should matter for what we’re doing, you can never be too safe, so we’ll set temperature=0.0 and seed=42. And to see if infrastructure differences explain our varying logprobs, we’ll print system_fingerprint. Here’s the code: import os import math from openai import OpenAI from tabulate import tabulate from tqdm import tqdm client = OpenAI(api_key=os.getenv(‘OPENAI_API_KEY’)) prompt = ‘Flip a coin. Return Heads or Tails only.’ data = [] for _ in tqdm(range(10), desc=’Generating responses’):     response = client.chat.completions.create(         model=’gpt-4o-2024-08-06′,         temperature=0.0,         seed=42,         max_tokens=1,         logprobs=True,         top_logprobs=20,         messages=[{‘role’: ‘user’, ‘content’: prompt}],     )     fingerprint = response.system_fingerprint     logprobs_list = response.choices[0].logprobs.content[0].top_logprobs     heads_logprob = next(         entry.logprob for entry in logprobs_list if entry.token == ‘Heads’     )     pct = math.exp(heads_logprob) * 100     data.append([fingerprint, heads_logprob, f”{pct:.10f}%”]) headers = [“Fingerprint”, “Logprob”, “Probability”] print(tabulate(data, headers=headers, tablefmt=”pipe”)) Running this 10 times, here are the logprobs and probabilities for the token Heads: | Fingerprint   |    Logprob | Probability    ||—————|————|—————-|| fp_f9f4fb6dbf | -0.0380541 | 96.2660836887% || fp_f9f4fb6dbf | -0.0380541 | 96.2660836887% || fp_f9f4fb6dbf | -0.0380541 | 96.2660836887% || fp_f9f4fb6dbf | -0.0380541 | 96.2660836887% || fp_f9f4fb6dbf | -0.160339  | 85.1854886858% || fp_f9f4fb6dbf | -0.0380541 | 96.2660836887% || fp_f9f4fb6dbf | -0.0110521 | 98.9008786933% || fp_f9f4fb6dbf | -0.0380541 | 96.2660836887% || fp_f9f4fb6dbf | -0.0380541 | 96.2660836887% || fp_f9f4fb6dbf | -0.0380541 | 96.2660836887% | Mixture-of-experts makes determinism impossible OpenAI is decidedly not open about the architecture behind GPT-4o. However, it’s widely believed that GPT-4o uses a mixture-of-experts (MoE) architecture with either 8 or 16 experts. According to a paper by Google DeepMind researchers Puigcerver, Riquelme, Mustafa, and Houlsby (hat tip to user elmstedt on the OpenAI forum), mixture-of-experts architectures may add an unavoidable level of non-determinism: Under capacity constraints, all Sparse MoE approaches route tokens in groups of a fixed size and enforce (or encourage) balance within the group. When groups contain tokens from different sequences or inputs, these tokens compete for available spots in expert buffers. Therefore, the model is no longer deterministic at the sequence-level, but only at the batch-level. In other words, when your prompt (a sequence of tokens, in the quote above) reaches OpenAI’s servers, it gets batched with a group of other prompts (OpenAI isn’t open about how many other prompts). Each prompt in the batch is then routed to an “expert” within the model. However, since only so many prompts can be routed to the same expert, the expert your prompt gets routed to will depend on all the other prompts in the batch. This “competition” for experts introduces a real-world randomness completely beyond our control. Non-determinism beyond mixture-of-experts While non-determinism may be inherent to real-world mixture-of-experts models, that does not seem to be the only source of non-determinism in OpenAI’s models. Making a few changes to our code above (switching to gpt-3.5-turbo-0125, looking for the token He since GPT-3.5’s tokenizer splits “Heads” differently, and ignoring system_fingerprint because this model doesn’t have it) reveals that GPT-3.5-turbo also exhibits non-deterministic logprobs: |     Logprob | Probability    ||————-|—————-|| -0.00278289 | 99.7220983436% || -0.00415331 | 99.5855302068% || -0.00258838 | 99.7414961980% || -0.00204034 | 99.7961735289% || -0.00240277 | 99.7600117933% || -0.00204034 | 99.7961735289% || -0.00204034 | 99.7961735289% || -0.00258838 | 99.7414961980% || -0.00351419 | 99.6491976144% || -0.00201214 | 99.7989878007% | No one is claiming that GPT-3.5-turbo uses a mixture-of-experts architecture. Thus, there must be additional factors beyond mixture-of-experts contributing to this non-determinism. What 10,000 GPT-4o coin flip probabilities tell us To better understand the patterns and magnitude of this non-determinism, I conducted a more extensive experiment with GPT-4o, performing 10,000 “coin flips” while recording the probability assigned to “Heads” in each case. The results reveal something fascinating. Across 10,000 API calls with identical parameters, GPT-4o produced not just a few different probability values, but 42 distinct probabilities. If the mixture-of-experts hypothesis were the complete explanation for non-determinism in GPT-4o, we might expect to see one distinct probability for each expert. But GPT-4o is believed to have either 8 or 16 experts, not 42. In the output below, I clustered these probabilities, ensuring that each cluster was separated from the others by 0.01 (as a raw percentage). This groups the output into 12 clusters. Probability          Count           Fingerprints——————————————————————85.1854379113%       5               fp_eb9dce56a8, fp_f9f4fb6dbf85.1854455275%       74              fp_eb9dce56a8, fp_f9f4fb6dbf85.1854886858%       180             fp_eb9dce56a8, fp_f9f4fb6dbf——————————————————————88.0662448207%       31              fp_eb9dce56a8, fp_f9f4fb6dbf88.0678628883%       2               fp_f9f4fb6dbf——————————————————————92.3997629747%       1               fp_eb9dce56a892.3997733012%       4               fp_eb9dce56a892.3997836277%       3               fp_eb9dce56a8——————————————————————92.4128943690%       1               fp_f9f4fb6dbf92.4129143363%       21              fp_eb9dce56a8, fp_f9f4fb6dbf92.4129246643%       8               fp_eb9dce56a8, fp_f9f4fb6dbf——————————————————————93.9906837191%       4               fp_eb9dce56a8——————————————————————95.2569999350%       36              fp_eb9dce56a8——————————————————————96.2660836887%       3391            fp_eb9dce56a8, fp_f9f4fb6dbf96.2661285161%       2636            fp_eb9dce56a8, fp_f9f4fb6dbf——————————————————————97.0674551052%       1               fp_eb9dce56a897.0674778863%       3               fp_eb9dce56a897.0675003058%       4               fp_eb9dce56a897.0675116963%       1               fp_eb9dce56a897.0680739932%       19              fp_eb9dce56a8, fp_f9f4fb6dbf97.0681293191%       6               fp_eb9dce56a8, fp_f9f4fb6dbf97.0681521003%       74              fp_eb9dce56a8, fp_f9f4fb6dbf97.0682421405%       4               fp_eb9dce56a8——————————————————————97.7008960695%       1               fp_f9f4fb6dbf97.7011122645%       3               fp_eb9dce56a897.7011462953%       3               fp_eb9dce56a897.7018178132%       1               fp_eb9dce56a8——————————————————————98.2006069902%       426             fp_eb9dce56a8, fp_f9f4fb6dbf98.2006876548%       6               fp_f9f4fb6dbf98.2007107019%       1               fp_eb9dce56a898.2009525133%       5               fp_eb9dce56a898.2009751945%       1               fp_eb9dce56a898.2009867181%       1               fp_eb9dce56a8——————————————————————98.5930987656%       3               fp_eb9dce56a8, fp_f9f4fb6dbf98.5931104270%       235             fp_eb9dce56a8, fp_f9f4fb6dbf98.5931222721%       4               fp_eb9dce56a8, fp_f9f4fb6dbf98.5931340253%       9               fp_eb9dce56a898.5931571644%       159             fp_eb9dce56a8, fp_f9f4fb6dbf98.5931805790%       384             fp_eb9dce56a8——————————————————————98.9008436920%       95              fp_eb9dce56a8, fp_f9f4fb6dbf98.9008550214%       362             fp_eb9dce56a8, fp_f9f4fb6dbf98.9008786933%       1792            fp_eb9dce56a8, fp_f9f4fb6dbf (With a threshold of 0.001 there are 13 clusters, and with a threshold of 0.0001 there are 17 clusters.) As the chart above demonstrates, this multitude of results cannot be explained by system_fingerprint values. Across all 10,000 calls, I received only two different system fingerprints: 4488 results with fp_f9f4fb6dbf and 5512 with fp_eb9dce56a8, and for the most part the two system fingerprints returned the same sets probabilities, rather than each fingerprint producing its own distinct set of probabilities. It could be that these 12 clusters of probabilities represent 12 different experts. Even assuming that, the variations within the clusters remain puzzling. These don’t seem likely to be simple rounding errors, because they are too systematic and consistent. Take the giant cluster at around 96.266% with two distinct probabilities representing over half of our coin flips. The difference between these two probabilities, 0.0000448274%, is tiny but persistent. Conclusion: Non-determinism is baked in There is an underlying randomness in the log probabilities returned by all currently available non-thinking OpenAI models: GPT-4o, GPT-4o-mini, and the two flavors of GPT-3.5-turbo. Because this non-determinism is baked into the log probabilities, there’s no way for a user to get around it. Temperature and seed values have no effect, and system fingerprints don’t explain it. While mixture-of-experts architectures inherently introduce some randomness in the competition for experts, the non-determinism in GPT-4o seems to go far beyond this, and the non-determinism in GPT-3.5-turbo can’t be explained by this at all, because GPT-3.5-turbo isn’t a mixture-of-experts model. While we can’t verify this claim any more because the model isn’t being served, this behaviour wasn’t seen with GPT-3, according to user _j on the OpenAI forum: It is a symptom that was not seen on prior GPT-3 AI models where across hundreds of trials to investigate sampling, you never had to doubt that logprobs would be the same. Even if you found a top-2 answer that returned exactly the same logprob value via the API, you would never see them switch position or return different values. This suggests that whatever is causing this randomness first emerged in either GPT-3.5 or GPT-3.5-turbo. But regardless of when it emerged, this non-determinism is a serious obstacle to understanding these models. If you want to study a model—how it generalizes, how it biases responses, how it assigns probabilities to different tokens—you need consistency. but as we’ve seen, even when we lock down every knob OpenAI lets us touch, we still can’t get an answer to the simplest possible question: “what is the probability that GPT-4o says a coin lands heads?” Worse, while mixture-of-experts explains some of this non-determinism, there are clearly other, hidden sources of randomness that we can’t see, control, or understand. In an ideal world, the API would provide more transparency by telling us which expert processed our request or by offering additional parameters to control this routing process. Without such visibility, we’re left guessing at the true nature of the variability. References Bar-Hillel, M., Peer, E., & Acquisti, A. (2014). “Heads or tails?” – A reachability bias in binary choice. Journal of Experimental Psychology: Learning, Memory, and Cognition, 40(6), 1656–1663. https://doi.org/10.1037/xlm0000005. Peeperkorn, M., Kouwenhoven, T., Brown, D., & Jordanous, A. (2024). Is temperature the creativity parameter of Large Language Models?. In The 15th International Conference on Computational Creativity (ICCC’24). arXiv:2405.00492. Puigcerver, J., Riquelme, C., Mustafa, B., & Houlsby, N. (2024). From sparse to soft mixtures of experts. In The Twelfth International Conference on Learning Representations (ICLR 2024). https://openreview.net/forum?id=jxpsAj7ltE. arXiv:2308.00951.Van Koevering, K., & Kleinberg, J. (2024). How random is random? Evaluating the Randomness and humanness of LLMs’ coin flips. arXiv:2406.00092.

Of course there is randomness in GPT-4o’s outputs. After all, the model samples from a probability distribution when choosing each token. But what I didn’t understand was that those very probabilities themselves are not deterministic. Even with consistent prompts, fixed seeds, and temperature set to zero, GPT-4o still introduces subtle, frustrating randomness.

There’s no fix for this, and it might not even be something OpenAI could fix if they wanted to, just so we’re clear up front about where this article is headed. Along the way, we’ll examine all the sources of randomness in GPT-4o output, which will require us to break down the sampling process to a low level. We’ll point at the issue—the probabilities vary—and critically examine OpenAI’s official guidance on determinism.

First, though, let’s talk about why determinism matters. Determinism means that the same input always produces the same output, like a mathematical function. While LLM creativity is often desirable, determinism serves crucial purposes: researchers need it for reproducible experiments, developers for verifying reported results, and prompt engineers for debugging their changes. Without it, you’re left wondering if different outputs stem from your tweaks or just the random number generator’s mood swings.

Flipping a coin

We’re going to keep things extremely simple here and prompt the most recent version of GPT-4o (gpt-4o-2024-08-06 in the API) with this:

 Flip a coin. Return Heads or Tails only.

Flipping a coin with LLMs is a fascinating topic in itself (see for example Van Koevering & Kleinberg, 2024 in the references), but here, we’ll use it as a simple binary question with which to explore determinism, or the lack thereof.

This is our first attempt.

import os
from openai import OpenAI
client = OpenAI(api_key=os.getenv('OPENAI_API_KEY'))

prompt = 'Flip a coin. Return Heads or Tails only.'

response = client.chat.completions.create(
    model='gpt-4o-2024-08-06',
    messages=[{'role': 'user', 'content': prompt}],
)

print(response.choices[0].message.content)

Running the code gave me Heads. Maybe you’ll get Tails, or if you’re really lucky, something far more interesting.

The code first initializes an OpenAI client with an API key set in the environment variable OPENAI_API_KEY (to avoid sharing billing credentials here). The main action happens with client.chat.completions.create, where we specify the model to use and send the prompt (as a part of a very simple conversation named messages) to the server. We get an object called response back from the server. This object contains a lot of information, as shown below, so we need to dig into it to extract GPT-4o’s actual response to the message, which is response.choices[0].message.content.

>>> response
ChatCompletion(id=’chatcmpl-B48EqZBLfUWtp9H7cwnchGTJbBDwr’, choices=[Choice(finish_reason=’stop’, index=0, logprobs=None, message=ChatCompletionMessage(content=’Heads’, refusal=None, role=’assistant’, audio=None, function_call=None, tool_calls=None))], created=1740324680, model=’gpt-4o-2024-08-06′, object=’chat.completion’, service_tier=’default’, system_fingerprint=’fp_eb9dce56a8′, usage=CompletionUsage(completion_tokens=2, prompt_tokens=18, total_tokens=20, completion_tokens_details=CompletionTokensDetails(accepted_prediction_tokens=0, audio_tokens=0, reasoning_tokens=0, rejected_prediction_tokens=0), prompt_tokens_details=PromptTokensDetails(audio_tokens=0, cached_tokens=0)))

Now let’s flip the coin ten times. If this were a real, fair coin, of course, we would expect roughly equal heads and tails over time thanks to the law of large numbers. But GPT-4o’s coin doesn’t work quite like that.

import os
from openai import OpenAI
client = OpenAI(api_key=os.getenv('OPENAI_API_KEY'))

prompt = 'Flip a coin. Return Heads or Tails only.'

for _ in range(10):
    response = client.chat.completions.create(
        model='gpt-4o-2024-08-06',
        messages=[{'role': 'user', 'content': prompt}],
    )
    print(response.choices[0].message.content)

Running this code gave me the following output, although you might get different output, of course.

Heads
Heads
Heads
Heads
Heads
Heads
Tails
Heads
Heads
Heads

GPT-4o’s coin is clearly biased, but so are humans. Bar-Hillel, Peer, and Acquisti (2014) found that people flipping imaginary coins choose “heads” 80% of the time. Maybe GPT-4o learned that from us. But whatever the reason, we’re just using this simple example to explore determinism.

Just how biased is GPT-4o’s coin?

Let’s say we wanted to know precisely what percentage of GPT-4o coin flips land Heads.

Rather than the obvious (but expensive) approach of flipping it a million times, there’s a smarter way. For classification tasks with a small set of possible answers, we can extract token probabilities instead of generating full responses. With the right prompt, the first token carries all the necessary information, making these API calls incredibly cheap: around 30,000 calls per dollar, since each requires just 18 (cached) input tokens and 1 output token.

OpenAI gives us (natural) log probabilities. These are called logprobs in the code, and we convert them to regular probabilities by exponentiation. (We’ll discuss temperature soon, but note that exponentiating logprobs directly like this corresponds to a temperature setting of 1.0, and is how we calculate probabilities throughout this article). OpenAI lets us request logprobs for the top 20 most likely tokens, so we do that.

import os
import math
from openai import OpenAI
from tabulate import tabulate

client = OpenAI(api_key=os.getenv('OPENAI_API_KEY'))

prompt = 'Flip a coin. Return Heads or Tails only.'

response = client.chat.completions.create(
    model='gpt-4o-2024-08-06',
    max_tokens=1,
    logprobs=True,
    top_logprobs=20,
    messages=[{'role': 'user', 'content': prompt}],
)

logprobs_list = response.choices[0].logprobs.content[0].top_logprobs

data = []
total_pct = 0.0

for logprob_entry in logprobs_list:
    token = logprob_entry.token
    logprob = logprob_entry.logprob
    pct = math.exp(logprob) * 100  # Convert logprob to a percentage
    total_pct += pct
    data.append([token, logprob, pct])

print(
    tabulate(
        data,
        headers=["Token", "Log Probability", "Percentage (%)"],
        tablefmt="github",
        floatfmt=("s", ".10f", ".10f")
    )
)
print(f"nTotal probabilities: {total_pct:.6f}%")

If you run this, you’ll get something like the following output, but actual numbers will vary.

| Token     |   Log Probability |   Percentage (%) |
|———–|——————-|——————|
| Heads     |     -0.0380541235 |    96.2660836887 |
| T         |     -3.2880542278 |     3.7326407467 |
| Sure      |    -12.5380544662 |     0.0003587502 |
| Head      |    -12.7880544662 |     0.0002793949 |
| Tail      |    -13.2880544662 |     0.0001694616 |
| Certainly |    -13.5380544662 |     0.0001319768 |
| “T        |    -14.2880544662 |     0.0000623414 |
| I’m       |    -14.5380544662 |     0.0000485516 |
| heads     |    -14.5380544662 |     0.0000485516 |
| Heads     |    -14.9130544662 |     0.0000333690 |
| ”         |    -15.1630544662 |     0.0000259878 |
| _heads    |    -15.1630544662 |     0.0000259878 |
| tails     |    -15.5380544662 |     0.0000178611 |
| HEAD      |    -15.7880544662 |     0.0000139103 |
| TAIL      |    -16.2880535126 |     0.0000084370 |
| T         |    -16.7880535126 |     0.0000051173 |
| “`       |    -16.7880535126 |     0.0000051173 |
| Here’s    |    -16.9130535126 |     0.0000045160 |
| I         |    -17.2880535126 |     0.0000031038 |
| As        |    -17.2880535126 |     0.0000031038 |

Total probabilities: 99.999970%

Looking at these probabilities, we see Heads at ≈96% and T at ≈4%. Our prompt is doing pretty well at constraining the model’s responses. Why T and not Tails? This is the tokenizer splitting Tails into T + ails, while keeping Heads as one piece, as we can see in this Python session:

>>> import tiktoken
>>> encoding = tiktoken.encoding_for_model("gpt-4o-2024-08-06")
>>> encoding.encode('Tails')
[51, 2196]
>>> encoding.decode([51])
'T'
>>> encoding.encode('Heads')
[181043]

These probabilities are not deterministic

Run the code to display the probabilities for the top 20 tokens again, and you’ll likely get different numbers. Here’s what I got on a second running.

| Token     |   Log Probability |   Percentage (%) |
|———–|——————-|——————|
| Heads     |     -0.0110520627 |    98.9008786933 |
| T         |     -4.5110521317 |     1.0986894433 |
| Certainly |    -14.0110521317 |     0.0000822389 |
| Head      |    -14.2610521317 |     0.0000640477 |
| Sure      |    -14.2610521317 |     0.0000640477 |
| Tail      |    -14.3860521317 |     0.0000565219 |
| heads     |    -15.3860521317 |     0.0000207933 |
| Heads     |    -15.5110521317 |     0.0000183500 |
| “`       |    -15.5110521317 |     0.0000183500 |
| _heads    |    -15.6360521317 |     0.0000161938 |
| tails     |    -15.6360521317 |     0.0000161938 |
| I’m       |    -15.8860521317 |     0.0000126117 |
| “T        |    -15.8860521317 |     0.0000126117 |
| As        |    -16.3860511780 |     0.0000076494 |
| ”         |    -16.5110511780 |     0.0000067506 |
| HEAD      |    -16.6360511780 |     0.0000059574 |
| TAIL      |    -16.7610511780 |     0.0000052574 |
| Here’s    |    -16.7610511780 |     0.0000052574 |
| “        |    -17.1360511780 |     0.0000036133 |
| T         |    -17.6360511780 |     0.0000021916 |

Total probabilities: 99.999987%

In their cookbook, OpenAI offers the following advice on receiving “mostly identical” outputs:

If the seed, request parameters, and system_fingerprint all match across your requests, then model outputs will mostly be identical. There is a small chance that responses differ even when request parameters and system_fingerprint match, due to the inherent non-determinism of our models.

They also give “mostly identical” advice in the reproducible outputs section of their documentation.

The request parameters that could affect randomness are temperature and seed. OpenAI also suggests we track system_fingerprint, because differences here might cause differences in output. We’ll examine each of these below, but spoiler: none of them will fix or even explain this non-determinism.

Temperature, and why it won’t fix this

Temperature controls how random the model’s responses are. Low temperatures (1.5) produce gibberish. Temperature is often called the “creativity parameter”, but this is an oversimplification. In their analysis, Peeperkorn, Kouwenhoven, Brown, and Jordanous (2024) evaluated LLM outputs across four dimensions of creativity: novelty (originality), coherence (logical consistency), cohesion (how well the text flows), and typicality (how well it fits expected patterns). They observed that:

temperature is weakly correlated with novelty, and unsurprisingly, moderately correlated with incoherence, but there is no relationship with either cohesion or typicality.

But, this is beside the point for coin flipping. Under the hood, the log probabilities are divided by the temperature before they’re renormalized and exponentiated to be converted to probabilities. This creates a non-linear effect: temperature=0.5 squares the probabilities, making likely tokens dominate, while temperature=2.0 applies a square root, flattening the distribution.

What about temperature=0.0? Instead of breaking math dividing by zero, the model simply picks the highest-probability token. Sounds deterministic, right? Not quite. Here’s the catch: temperature only comes into play after the log probabilities are computed, when we convert them to probabilities.

In summary: if the logprobs aren’t deterministic, setting temperature to 0.0 won’t make the model deterministic.

In fact, since we’re just asking the model for the raw logprobs directly rather than generating full responses, the temperature setting doesn’t come into play in our code at all.

Seeds, and why they won’t fix this

After temperature is used to compute probabilities, the model samples from these probabilities to pick the next token. OpenAI gives us a little control over the sampling process by letting us set the seed parameter for the random number generator. In an ideal world, setting a seed would give us determinism at any temperature. But seeds only affect sampling, not the log probabilities before sampling.

In summary: if the logprobs aren’t deterministic, setting a seed won’t make the model deterministic.

In fact, seed only matters with non-zero temperatures. With temperature=0.0, the model is always choosing the highest probability token regardless of the seed. Again, since we’re just asking the model for the raw logprobs directly rather than sampling, neither of these settings can help us achieve determinism.

System fingerprints, our last hope

The system_fingerprint identifies the current combination of model weights, infrastructure, and configuration options in OpenAI’s backend. At least, that’s what OpenAI tells us. Variations in system fingerprints might indeed explain variations in logprobs. Except that they don’t, as we will verify below.

Nothing can get you determinism

Let’s confirm what we’ve been building toward. We’ll run the same request 10 times with every safeguard in place. Even though neither of these parameters should matter for what we’re doing, you can never be too safe, so we’ll set temperature=0.0 and seed=42. And to see if infrastructure differences explain our varying logprobs, we’ll print system_fingerprint. Here’s the code:

import os
import math
from openai import OpenAI
from tabulate import tabulate
from tqdm import tqdm

client = OpenAI(api_key=os.getenv('OPENAI_API_KEY'))

prompt = 'Flip a coin. Return Heads or Tails only.'

data = []

for _ in tqdm(range(10), desc='Generating responses'):
    response = client.chat.completions.create(
        model='gpt-4o-2024-08-06',
        temperature=0.0,
        seed=42,
        max_tokens=1,
        logprobs=True,
        top_logprobs=20,
        messages=[{'role': 'user', 'content': prompt}],
    )

    fingerprint = response.system_fingerprint
    logprobs_list = response.choices[0].logprobs.content[0].top_logprobs
    heads_logprob = next(
        entry.logprob for entry in logprobs_list if entry.token == 'Heads'
    )
    pct = math.exp(heads_logprob) * 100
    data.append([fingerprint, heads_logprob, f"{pct:.10f}%"])

headers = ["Fingerprint", "Logprob", "Probability"]
print(tabulate(data, headers=headers, tablefmt="pipe"))

Running this 10 times, here are the logprobs and probabilities for the token Heads:

| Fingerprint   |    Logprob | Probability    |
|—————|————|—————-|
| fp_f9f4fb6dbf | -0.0380541 | 96.2660836887% |
| fp_f9f4fb6dbf | -0.0380541 | 96.2660836887% |
| fp_f9f4fb6dbf | -0.0380541 | 96.2660836887% |
| fp_f9f4fb6dbf | -0.0380541 | 96.2660836887% |
| fp_f9f4fb6dbf | -0.160339  | 85.1854886858% |
| fp_f9f4fb6dbf | -0.0380541 | 96.2660836887% |
| fp_f9f4fb6dbf | -0.0110521 | 98.9008786933% |
| fp_f9f4fb6dbf | -0.0380541 | 96.2660836887% |
| fp_f9f4fb6dbf | -0.0380541 | 96.2660836887% |
| fp_f9f4fb6dbf | -0.0380541 | 96.2660836887% |

Mixture-of-experts makes determinism impossible

OpenAI is decidedly not open about the architecture behind GPT-4o. However, it’s widely believed that GPT-4o uses a mixture-of-experts (MoE) architecture with either 8 or 16 experts.

According to a paper by Google DeepMind researchers Puigcerver, Riquelme, Mustafa, and Houlsby (hat tip to user elmstedt on the OpenAI forum), mixture-of-experts architectures may add an unavoidable level of non-determinism:

Under capacity constraints, all Sparse MoE approaches route tokens in groups of a fixed size and enforce (or encourage) balance within the group. When groups contain tokens from different sequences or inputs, these tokens compete for available spots in expert buffers. Therefore, the model is no longer deterministic at the sequence-level, but only at the batch-level.

In other words, when your prompt (a sequence of tokens, in the quote above) reaches OpenAI’s servers, it gets batched with a group of other prompts (OpenAI isn’t open about how many other prompts). Each prompt in the batch is then routed to an “expert” within the model. However, since only so many prompts can be routed to the same expert, the expert your prompt gets routed to will depend on all the other prompts in the batch.

This “competition” for experts introduces a real-world randomness completely beyond our control.

Non-determinism beyond mixture-of-experts

While non-determinism may be inherent to real-world mixture-of-experts models, that does not seem to be the only source of non-determinism in OpenAI’s models.

Making a few changes to our code above (switching to gpt-3.5-turbo-0125, looking for the token He since GPT-3.5’s tokenizer splits “Heads” differently, and ignoring system_fingerprint because this model doesn’t have it) reveals that GPT-3.5-turbo also exhibits non-deterministic logprobs:

|     Logprob | Probability    |
|————-|—————-|
| -0.00278289 | 99.7220983436% |
| -0.00415331 | 99.5855302068% |
| -0.00258838 | 99.7414961980% |
| -0.00204034 | 99.7961735289% |
| -0.00240277 | 99.7600117933% |
| -0.00204034 | 99.7961735289% |
| -0.00204034 | 99.7961735289% |
| -0.00258838 | 99.7414961980% |
| -0.00351419 | 99.6491976144% |
| -0.00201214 | 99.7989878007% |

No one is claiming that GPT-3.5-turbo uses a mixture-of-experts architecture. Thus, there must be additional factors beyond mixture-of-experts contributing to this non-determinism.

What 10,000 GPT-4o coin flip probabilities tell us

To better understand the patterns and magnitude of this non-determinism, I conducted a more extensive experiment with GPT-4o, performing 10,000 “coin flips” while recording the probability assigned to “Heads” in each case.

The results reveal something fascinating. Across 10,000 API calls with identical parameters, GPT-4o produced not just a few different probability values, but 42 distinct probabilities. If the mixture-of-experts hypothesis were the complete explanation for non-determinism in GPT-4o, we might expect to see one distinct probability for each expert. But GPT-4o is believed to have either 8 or 16 experts, not 42.

In the output below, I clustered these probabilities, ensuring that each cluster was separated from the others by 0.01 (as a raw percentage). This groups the output into 12 clusters.

Probability          Count           Fingerprints
——————————————————————
85.1854379113%       5               fp_eb9dce56a8, fp_f9f4fb6dbf
85.1854455275%       74              fp_eb9dce56a8, fp_f9f4fb6dbf
85.1854886858%       180             fp_eb9dce56a8, fp_f9f4fb6dbf
——————————————————————
88.0662448207%       31              fp_eb9dce56a8, fp_f9f4fb6dbf
88.0678628883%       2               fp_f9f4fb6dbf
——————————————————————
92.3997629747%       1               fp_eb9dce56a8
92.3997733012%       4               fp_eb9dce56a8
92.3997836277%       3               fp_eb9dce56a8
——————————————————————
92.4128943690%       1               fp_f9f4fb6dbf
92.4129143363%       21              fp_eb9dce56a8, fp_f9f4fb6dbf
92.4129246643%       8               fp_eb9dce56a8, fp_f9f4fb6dbf
——————————————————————
93.9906837191%       4               fp_eb9dce56a8
——————————————————————
95.2569999350%       36              fp_eb9dce56a8
——————————————————————
96.2660836887%       3391            fp_eb9dce56a8, fp_f9f4fb6dbf
96.2661285161%       2636            fp_eb9dce56a8, fp_f9f4fb6dbf
——————————————————————
97.0674551052%       1               fp_eb9dce56a8
97.0674778863%       3               fp_eb9dce56a8
97.0675003058%       4               fp_eb9dce56a8
97.0675116963%       1               fp_eb9dce56a8
97.0680739932%       19              fp_eb9dce56a8, fp_f9f4fb6dbf
97.0681293191%       6               fp_eb9dce56a8, fp_f9f4fb6dbf
97.0681521003%       74              fp_eb9dce56a8, fp_f9f4fb6dbf
97.0682421405%       4               fp_eb9dce56a8
——————————————————————
97.7008960695%       1               fp_f9f4fb6dbf
97.7011122645%       3               fp_eb9dce56a8
97.7011462953%       3               fp_eb9dce56a8
97.7018178132%       1               fp_eb9dce56a8
——————————————————————
98.2006069902%       426             fp_eb9dce56a8, fp_f9f4fb6dbf
98.2006876548%       6               fp_f9f4fb6dbf
98.2007107019%       1               fp_eb9dce56a8
98.2009525133%       5               fp_eb9dce56a8
98.2009751945%       1               fp_eb9dce56a8
98.2009867181%       1               fp_eb9dce56a8
——————————————————————
98.5930987656%       3               fp_eb9dce56a8, fp_f9f4fb6dbf
98.5931104270%       235             fp_eb9dce56a8, fp_f9f4fb6dbf
98.5931222721%       4               fp_eb9dce56a8, fp_f9f4fb6dbf
98.5931340253%       9               fp_eb9dce56a8
98.5931571644%       159             fp_eb9dce56a8, fp_f9f4fb6dbf
98.5931805790%       384             fp_eb9dce56a8
——————————————————————
98.9008436920%       95              fp_eb9dce56a8, fp_f9f4fb6dbf
98.9008550214%       362             fp_eb9dce56a8, fp_f9f4fb6dbf
98.9008786933%       1792            fp_eb9dce56a8, fp_f9f4fb6dbf

(With a threshold of 0.001 there are 13 clusters, and with a threshold of 0.0001 there are 17 clusters.)

As the chart above demonstrates, this multitude of results cannot be explained by system_fingerprint values. Across all 10,000 calls, I received only two different system fingerprints: 4488 results with fp_f9f4fb6dbf and 5512 with fp_eb9dce56a8, and for the most part the two system fingerprints returned the same sets probabilities, rather than each fingerprint producing its own distinct set of probabilities.

It could be that these 12 clusters of probabilities represent 12 different experts. Even assuming that, the variations within the clusters remain puzzling. These don’t seem likely to be simple rounding errors, because they are too systematic and consistent. Take the giant cluster at around 96.266% with two distinct probabilities representing over half of our coin flips. The difference between these two probabilities, 0.0000448274%, is tiny but persistent.

Conclusion: Non-determinism is baked in

There is an underlying randomness in the log probabilities returned by all currently available non-thinking OpenAI models: GPT-4o, GPT-4o-mini, and the two flavors of GPT-3.5-turbo. Because this non-determinism is baked into the log probabilities, there’s no way for a user to get around it. Temperature and seed values have no effect, and system fingerprints don’t explain it.

While mixture-of-experts architectures inherently introduce some randomness in the competition for experts, the non-determinism in GPT-4o seems to go far beyond this, and the non-determinism in GPT-3.5-turbo can’t be explained by this at all, because GPT-3.5-turbo isn’t a mixture-of-experts model.

While we can’t verify this claim any more because the model isn’t being served, this behaviour wasn’t seen with GPT-3, according to user _j on the OpenAI forum:

It is a symptom that was not seen on prior GPT-3 AI models where across hundreds of trials to investigate sampling, you never had to doubt that logprobs would be the same. Even if you found a top-2 answer that returned exactly the same logprob value via the API, you would never see them switch position or return different values.

This suggests that whatever is causing this randomness first emerged in either GPT-3.5 or GPT-3.5-turbo.

But regardless of when it emerged, this non-determinism is a serious obstacle to understanding these models. If you want to study a model—how it generalizes, how it biases responses, how it assigns probabilities to different tokens—you need consistency. but as we’ve seen, even when we lock down every knob OpenAI lets us touch, we still can’t get an answer to the simplest possible question: “what is the probability that GPT-4o says a coin lands heads?”

Worse, while mixture-of-experts explains some of this non-determinism, there are clearly other, hidden sources of randomness that we can’t see, control, or understand. In an ideal world, the API would provide more transparency by telling us which expert processed our request or by offering additional parameters to control this routing process. Without such visibility, we’re left guessing at the true nature of the variability.

References

Bar-Hillel, M., Peer, E., & Acquisti, A. (2014). “Heads or tails?” – A reachability bias in binary choice. Journal of Experimental Psychology: Learning, Memory, and Cognition, 40(6), 1656–1663. https://doi.org/10.1037/xlm0000005.

Peeperkorn, M., Kouwenhoven, T., Brown, D., & Jordanous, A. (2024). Is temperature the creativity parameter of Large Language Models?. In The 15th International Conference on Computational Creativity (ICCC’24). arXiv:2405.00492.

Puigcerver, J., Riquelme, C., Mustafa, B., & Houlsby, N. (2024). From sparse to soft mixtures of experts. In The Twelfth International Conference on Learning Representations (ICLR 2024). https://openreview.net/forum?id=jxpsAj7ltE. arXiv:2308.00951.Van Koevering, K., & Kleinberg, J. (2024). How random is random? Evaluating the Randomness and humanness of LLMs’ coin flips. arXiv:2406.00092.

Shape
Shape
Stay Ahead

Explore More Insights

Stay ahead with more perspectives on cutting-edge power, infrastructure, energy,  bitcoin and AI solutions. Explore these articles to uncover strategies and insights shaping the future of industries.

Shape

How Jeetu Patel made Cisco unrecognizable

From dashboard sprawl to Cloud Control The most visible proof point of the new Cisco is Cloud Control, the unified management plane that now spans networking, security, compute, observability, collaboration, and an expanding ecosystem of third-party tools. Cisco is careful to note that this is not just another single pane

Read More »

IBM, ServiceNow team to bring AI to legacy enterprise systems

Decades of deeply interconnected legacy systems are the biggest barrier to moving fast on AI, the companies stated. Their pairings will take advantage of Big Blue’s expertise in working with large systems, such as its mainframe environment, and extensive legacy applications, along with ServiceNow’s workflow and agent management platforms. “Most

Read More »

Energy Secretary Keeps Coal-Fired Power Generation Alive in the Northwest

WASHINGTON—U.S. Secretary of Energy Chris Wright today issued an emergency order to keep affordable, reliable, and secure coal generation online and address critical grid reliability issues facing the Northwestern region of the United States. The emergency order directs TransAlta Centralia Generation LLC (TransAlta) to ensure that Unit 2 of the Centralia Generating Station in Centralia, Washington, a coal-fired power plant, remains available to operate. Centralia Unit 2 was scheduled to shut down at the end of 2025. The order minimizes the risk and cost of unnecessary blackouts. “Taking reliable generation off the grid compromises energy reliability and needlessly raises energy costs for Americans,” said Energy Secretary Wright. “During peak summer demand, Northwesterners deserve continued access to affordable, reliable, and secure energy to power and cool their homes.” Thanks to President Trump’s leadership, coal plants across the country are being saved from premature retirement and reversing plans to shut down. In 2025, more than 17 gigawatts of coal-power electricity generation were saved from going offline. As outlined in DOE’s Resource Adequacy Report, power outages could increase by 100 times by 2030 if the U.S. continues to take reliable power offline. The availability of Centralia to operate will continue to be an asset to maintain reliability in the Western Electricity Coordinating Council (WECC) Northwest region. The North American Electric Reliability Corporation’s (NERC) 2025 Long-Term Reliability Assessment assessed that the WECC Northwest region is at high risk of energy shortfalls over the next five years, noting that “rapid forecasted demand growth is driving the need for more resources” and that “periods of unserved energy are projected for both summer and winter.” This order is in effect beginning on June 15, 2026, through September 12, 2026. Background: According to the U.S. Environmental Protection Agency’s data, in 2025, Centralia generated an average of approximately 340,000 MWh per month, providing vital generation capacity to the region.  ###

Read More »

United States, Cyprus, Greece, Israel and Rice University To Establish Eastern Mediterranean Energy Center in Houston

HOUSTON, TEXAS—U.S. Secretary of Energy Chris Wright today signed a Declaration of Intent (DOI) with the Minister of Energy, Commerce, and Industry of the Republic of Cyprus Michael Damianos, Minister of Environment and Energy for Greece Stavros Papastavrou, Israeli Ambassador to the United States Dr. Yechiel Leiter, and President of Rice University Reginald DesRoches to establish the Eastern Mediterranean Energy Center (EMEC). The agreement establishes a framework to strengthen cooperation between the respective nations through the Eastern Mediterranean Energy Center (EMEC). It also advances a key initiative envisioned under Secretary Rubio’s Eastern Mediterranean Security and Energy Partnership Act of 2019. The agreement advances President Trump’s commitment to strengthening America’s partnerships with key allies while expanding opportunities for U.S. energy development, innovation, and investment. As global energy demand continues to grow, the United States, Cyprus, Greece, and Israel will work together to promote energy security, strengthen critical infrastructure, support emerging technologies, and advance long-term economic growth throughout the Eastern Mediterranean. “The Eastern Mediterranean Energy Center will help fulfill President Trump’s vision of prosperity and energy security at home and abroad,” said Secretary Wright. “The Eastern Mediterranean is an increasingly important region for global energy development, and this agreement strengthens cooperation among key allies while advancing our shared goals of energy abundance, economic prosperity, and regional stability. By establishing the Eastern Mediterranean Energy Center at Rice University in Houston, we are ensuring all member nations of this agreement will benefit from a lasting partnership bound together by the brightest minds and industry leaders in hydrocarbon development.” The partnership will support collaboration on shared priorities including natural gas development, U.S. LNG infrastructure, energy transportation networks, grid reliability, critical infrastructure resilience, and emerging technologies. It will also facilitate scientific and technical exchanges, research partnerships, workforce development initiatives, and engagement with industry stakeholders. The Trump

Read More »

Energy Secretary Secures Carolinas’ Grid Ahead of Period of Hot Weather

WASHINGTON—The U.S. Department of Energy (DOE) today issued an emergency order to mitigate blackouts in the Carolinas’ ahead of a period of hot weather. Issued pursuant to Section 202(c) of the Federal Power Act, the order authorizes Duke Energy Carolinas, LLC (“DEC”) and Duke Energy Progress, LLC (“DEP”) (collectively, “Duke Energy”) to operate specified units located within Duke Energy’s service territory to operate up to their maximum generation output levels, notwithstanding air quality or other permit limitations arising under federal, state, or local law or regulation, or other applicable source of law. The order was issued subsequent to Duke Energy’s application. The order will mitigate the risk of unnecessary blackouts brought on by unusually high load forecasts and high temperatures across the region. “Maintaining affordable, reliable, and secure power in the Duke Energy service territory is non-negotiable,” said U.S. Secretary of Energy Chris Wright. “The previous administration’s energy subtraction policies weakened the grid, leaving Americans more vulnerable during events like this. Thanks to President Trump’s leadership, we are reversing those failures and using every available tool ensuring Americans in the Carolinas’ have continued access to affordable, reliable, and secure energy to power and cool their homes.” On day one, President Trump declared a national energy emergency after the Biden administration’s energy subtraction agenda left behind a grid increasingly vulnerable to blackouts. The order is in effect beginning at 4:00 PM ET on June 11, 2026, and shall expire at 10:00 PM ET on June 12, 2026. Background: Duke Energy stated that some generating units are limited in providing needed generation because of conditions and limitations in their environmental permits. As a result, the system “may not have sufficient generation available to meet this unusually high demand and [Duke Energy] may be forced to curtail load in order to maintain security

Read More »

Energy Department Issues RFP to Advance President Trump’s 172-Million-Barrel Strategic Petroleum Reserve Exchange

WASHINGTON—The U.S. Department of Energy (DOE) today issued a Request for Proposal (RFP) for an exchange of up to 40 million barrels of crude oil from the Strategic Petroleum Reserve (SPR). Today’s solicitation opens competitive bidding, continuing DOE’s execution of President Trump’s 172-million-barrel release as part of a coordinated 400-million-barrel action by International Energy Agency (IEA) member nations’ strategic reserves. Under President Trump’s leadership, DOE has advanced an unprecedented series of large-scale SPR exchange solicitations at record speed. These actions have moved critical crude oil supplies into the market to address short term supply disruptions and bolster energy security for the United States and its allies. The crude oil will originate from the SPR’s Big Hill and Bryan Mound sites. This action builds on the Department’s four previous solicitations that collectively awarded more than 133 million barrels across three completed exchanges. DOE’s earlier exchanges demonstrated the SPR’s ability to rapidly deliver crude under emergency authorities while achieving a 26 percent premium in returned barrels—expanding the reserve at no additional cost to American taxpayers. “With today’s announcement, we are accelerating the President’s commitment to a coordinated and strategic release that stabilizes global oil markets,” said DOE Acting Assistant Secretary for the Hydrocarbons and Geothermal Energy Office Curt Coccodrilli. “This exchange will help move oil swiftly to refiners, ease short-term supply pressures, and ensure the Strategic Petroleum Reserve continues to grow stronger through the return of premium barrels.” Under DOE’s exchange authority, participating companies will return the 40 million borrowed barrels with additional premium barrels, ensuring immediate market supply while increasing the SPR’s long-term inventory. Bids for this solicitation are due no later than 11:00 A.M. Central Time on Monday, June 15, 2026. For more information on the SPR, please visit DOE’s website. 

Read More »

DOE’s Hydrocarbons and Geothermal Energy Office Invests $3.6 Million to Modernize America’s Coal-Fired Power Plants

WASHINGTON—The U.S. Department of Energy’s (DOE) Hydrocarbons and Geothermal Energy Office (HGEO) today announced $3.6 million for nine design and engineering projects that will support the refurbishment or retrofit of existing coal power plants with transformational technologies that address wastewater systems and improve the efficiency, reliability, flexibility, and performance of coal and natural gas use. By upgrading our nation’s existing coal facilities, these initiatives will help strengthen the backbone of America’s power grid and ensure all American’s have access to affordable, reliable, and secure energy when they need it most. These efforts help to advance President Trump’s Executive Orders Reinvigorating America’s Beautiful Clean Coal Industry and Strengthening the Reliability and Security of the United States Electric Grid to restore common-sense energy policies that prioritize dependable power, affordability, and American workers. “America’s coal fleet is an undeniable pillar of our energy dominance and economic strength, but for too long, policies have undermined this vital industry and the dedicated workforce behind it, threatening our grid’s stability and driving up costs for everyday Americans,” said DOE Acting Assistant Secretary of the Hydrocarbons and Geothermal Energy Office Curt Coccodrilli. “With the project investments announced today, we are decisively moving to champion our existing coal plants, ensuring they continue to deliver affordable, reliable power, keep the lights on, and fuel America’s progress for generations to come.” Projects have been selected under three topic areas to provide a path forward to rapidly and cost-effectively restore the stability of the nation’s bulk power system while also finding beneficial uses for wastes generated by coal-based energy production. The projects will be executed in three phases, with design and engineering completed in Phase I, final engineering and detailed design completed in Phase II, and technology implementation and validation completed in Phase III. Selectees to receive Phase I funding include: Baker Hughes Energy Transition LLC (Houston, Texas),

Read More »

Energy Department Releases Finalized Fusion Science and Technology Roadmap to Accelerate Commercial Fusion Power

WASHINGTON—The U.S. Department of Energy (DOE) today released the finalized Fusion Science and Technology (FS&T) Roadmap, a national strategy to accelerate the development and commercialization of fusion energy on the most rapid, responsible timeline in history. Building on earlier roadmap efforts, the finalized roadmap brings together fusion science, technology, infrastructure, workforce development, and commercialization priorities into a single national strategy to support fusion pilot plants and commercial fusion power in the mid-2030s. Fusion is the process that powers the sun and stars. For decades, scientists and engineers have worked to bring that same process to Earth as a source of abundant, reliable energy. The finalized roadmap outlines how DOE, industry, universities, and national laboratories will work together to accelerate the path toward commercial fusion energy in the United States. This effort advances President Trump’s energy dominance agenda and reinforces the Administration’s commitment to expanding reliable American energy production, strengthening domestic supply chains, and maintaining U.S. leadership in critical technologies. By accelerating progress toward commercial fusion power, DOE is helping secure a future of abundant and reliable energy. “Fusion energy has entered a new era defined by extraordinary scientific progress and public-private momentum,” said DOE Under Secretary for Science Dr. Darío Gil. “With this roadmap, we now have the clarity, coordination, and sustained commitment needed to turn the promise of fusion into a reality for the American people.” Developed with input from more than 800 scientists and engineers across the public and private sectors, the finalized FS&T Roadmap reflects contributions from more than 15 private companies, over 10 National Laboratories, and more than 70 universities. The roadmap identifies the critical science and technology gaps that must be closed to realize fusion pilot plants and strengthen U.S. leadership in the global fusion industry. The FS&T Roadmap establishes a unified strategy for the U.S.

Read More »

Amazon claims its data centers are 7x more water-efficient than the industry average

“Amazon is on the leading edge, but it’s not a secret recipe,” he said. What sets the company apart is scale, execution, facility design, geographic mix, and its aggressive pursuit of energy goals. Others are doing the similar things, if through different avenues: Microsoft is investing in closed-loop cooling systems that dramatically reduce evaporative water loss. Google is heavily focused on reclaimed water and using AI to optimize data centers. Meta has long relied on outside-air cooling. And overall, the industry is moving toward liquid cooling for dense AI deployments, “which changes the water equation again,” said Kimball. One of the big variables is location: Climate influences water efficiency, so where a company builds its infrastructure is as important as its cooling methods. Further, power-consumptive AI changes the discussion, he emphasized; traditional enterprise workloads and dense AI training clusters create very different thermal profiles.

Read More »

Marvell announces 102.4 Tbps switch silicon built for AI

Data movement has become an important concern in modern AI data centers. In the past, a cluster of a few servers could adequately handle back-office applications and databases. But with AI’s gigantic models, all sections of the data center need to move and receive data at high speeds. That requires a lot more power use than in the past. GPU- and XPU-based systems are approaching 120KW per rack, and switching and networking components consume approximately 15-25% of total rack power, making low-power switch silicon a strategic requirement. The Teralynx T100 delivers up to 25% lower power consumption than competitive solutions at a higher data rate. This enables AI infrastructures to deploy more accelerators within existing power envelopes without requiring additional power infrastructure. “As AI workloads evolve and scale exponentially, hyperscalers require network architectures that optimize latency, power and scalability simultaneously,” said Rishi Chugh, vice president and general manager of the data center switch business unit at Marvell, in a statement.

Read More »

From the data center to the edge: How to build secure, effective enterprise AI infrastructure

While hyperscalers and neo-cloud providers may get the lion’s share of attention for providing AI infrastructure, many enterprises are taking a build-it-themselves approach to meet their specific AI requirements. The success of such projects is crucial to achieving business objectives, yet companies face significant challenges as they try to scale pilots to production. Organizations must keep up with the dynamic, ever-changing demands that AI applications place on compute and network infrastructure, from the data center to the edge. That means architecting systems to grow as demand warrants and to avoid performance bottlenecks. The architecture must also account for AI-driven security vulnerabilities and ensure appropriate defenses are in place. Yes, it’s a tall order. But here, in simplified form, is a three-step plan for meeting those objectives. Step one: Go modular Integrating all the required components in piecemeal fashion for an AI factory is complex, costly, and fraught with integration risk. Start with a modular design, based on proven NVIDIA reference architectures. A modular approach combines pre-validated accelerated computing hardware, AI software, and orchestration platforms, as well as networking and storage capabilities. A modular strategy speeds implementation and creates a faster time to value for your AI infrastructure. Using modules that combine compute, networking, and storage makes it easier to scale capacity as needed, whether in the data center or at edge facilities. In addition, the modular approach simplifies the job of addressing varying requirements, from inferencing engines at the edge to massive-scale model training in the data center, while staying within the same solution family. The same applies to easing integration processes, as modular platforms offer pre-validated software. The Cisco Secure AI Factory with NVIDIA approach, for example, includes hardware (Cisco AI PODS) that is pre-validated to work with NVIDIA AI Enterprise software; Cisco Security and Splunk Observability software; orchestration

Read More »

OpenAI weighs Nvidia-backed lease for 10 GW Ohio data center campus

OpenAI would control the computing equipment under a 20-year lease and begin payments once the site starts operating, with the first phase expected in 2028. Nvidia is expected to supply the hardware and guarantee both OpenAI’s lease obligations and the developer’s financing, the report added. The reported structure highlights a broader shift in AI infrastructure strategy, where model developers, chip suppliers, and energy providers are forging increasingly long-term partnerships to secure compute capacity amid surging demand. “These types of symbiotic deals are becoming the norm as AI infrastructure rolls out,” said Neil Shah, vice president for research and partner at Counterpoint Research. “If a CIO picks OpenAI to be the base layer, they shouldn’t just accept whatever infrastructure comes with it. CIOs need to negotiate and demand that OpenAI uses a mix of capacity so all your eggs are not in one premium basket like Nvidia.” OpenAI and Nvidia did not immediately respond to requests for comment.

Read More »

Arista unveils 1.6T rack-scale switch family for AI infrastructure

The new Arista family joins a growing ecosystem of vendors looking to tap into the 1.6T Ethernet world, which includes Cisco, Nvidia, Celestica and others. “Arista Network’s new 7060XE7 Series is a strong signal of where large-scale AI fabrics are heading: higher bandwidth, better power efficiency, and tighter integration between compute, optics, silicon, cooling, and network operating software,” wrote Sameh Boujelbene, vice president, data center switch and AI networks market research for Dell Oro, in a LinkedIn post. Among the features that stand out to her are “strong customer and ecosystem validation from Microsoft Azure, Oracle Cloud Infrastructure, Meta, AMD, and Broadcom.”

Read More »

Water Emerges as a Critical Constraint for AI Data Centers

“There really has been a major shift within the last couple of years,” Bajpayee said. “I would even say within the last 12 months is where we have seen suddenly a rapid increase in the data center operators’ desire to control their water destiny.” For Gradiant, the MIT-born water technology company that built its reputation serving semiconductor manufacturers, pharmaceutical companies, and industrial customers worldwide, that shift has translated into a rapidly expanding pipeline of data center opportunities. More importantly, Bajpayee believes it signals a fundamental change in how the industry thinks about water itself. The conversation is no longer centered primarily on sustainability metrics or corporate environmental goals. Instead, operators increasingly view water as a business continuity issue. “We’re seeing operators themselves come to us and tell us that these are issues they are facing,” Bajpayee said. “They want to make sure they don’t get stalled, their permits don’t get pulled, their business doesn’t get stopped, and communities don’t push them out because they didn’t figure out a way to control their water.” From Water Treatment to Water Strategy That shift is occurring as Gradiant expands deployments of its recently announced HyperSolved platform, an end-to-end cooling water management system purpose-built for AI data centers. The company says HyperSolved is now being deployed with several of the world’s largest hyperscale operators across North America, Europe, and Asia, reflecting growing industry demand for integrated approaches to water infrastructure. While compute, networking, and power systems have evolved rapidly during the AI era, water management often remains fragmented, requiring operators to coordinate multiple vendors responsible for sourcing, treatment, cooling, wastewater management, reuse, discharge, and regulatory compliance. Gradiant’s approach seeks to consolidate those functions into a single integrated platform and operating model. The timing reflects the growing scale of the challenge. New AI data center

Read More »

Microsoft will invest $80B in AI data centers in fiscal 2025

And Microsoft isn’t the only one that is ramping up its investments into AI-enabled data centers. Rival cloud service providers are all investing in either upgrading or opening new data centers to capture a larger chunk of business from developers and users of large language models (LLMs).  In a report published in October 2024, Bloomberg Intelligence estimated that demand for generative AI would push Microsoft, AWS, Google, Oracle, Meta, and Apple would between them devote $200 billion to capex in 2025, up from $110 billion in 2023. Microsoft is one of the biggest spenders, followed closely by Google and AWS, Bloomberg Intelligence said. Its estimate of Microsoft’s capital spending on AI, at $62.4 billion for calendar 2025, is lower than Smith’s claim that the company will invest $80 billion in the fiscal year to June 30, 2025. Both figures, though, are way higher than Microsoft’s 2020 capital expenditure of “just” $17.6 billion. The majority of the increased spending is tied to cloud services and the expansion of AI infrastructure needed to provide compute capacity for OpenAI workloads. Separately, last October Amazon CEO Andy Jassy said his company planned total capex spend of $75 billion in 2024 and even more in 2025, with much of it going to AWS, its cloud computing division.

Read More »

John Deere unveils more autonomous farm machines to address skill labor shortage

Join our daily and weekly newsletters for the latest updates and exclusive content on industry-leading AI coverage. Learn More Self-driving tractors might be the path to self-driving cars. John Deere has revealed a new line of autonomous machines and tech across agriculture, construction and commercial landscaping. The Moline, Illinois-based John Deere has been in business for 187 years, yet it’s been a regular as a non-tech company showing off technology at the big tech trade show in Las Vegas and is back at CES 2025 with more autonomous tractors and other vehicles. This is not something we usually cover, but John Deere has a lot of data that is interesting in the big picture of tech. The message from the company is that there aren’t enough skilled farm laborers to do the work that its customers need. It’s been a challenge for most of the last two decades, said Jahmy Hindman, CTO at John Deere, in a briefing. Much of the tech will come this fall and after that. He noted that the average farmer in the U.S. is over 58 and works 12 to 18 hours a day to grow food for us. And he said the American Farm Bureau Federation estimates there are roughly 2.4 million farm jobs that need to be filled annually; and the agricultural work force continues to shrink. (This is my hint to the anti-immigration crowd). John Deere’s autonomous 9RX Tractor. Farmers can oversee it using an app. While each of these industries experiences their own set of challenges, a commonality across all is skilled labor availability. In construction, about 80% percent of contractors struggle to find skilled labor. And in commercial landscaping, 86% of landscaping business owners can’t find labor to fill open positions, he said. “They have to figure out how to do

Read More »

2025 playbook for enterprise AI success, from agents to evals

Join our daily and weekly newsletters for the latest updates and exclusive content on industry-leading AI coverage. Learn More 2025 is poised to be a pivotal year for enterprise AI. The past year has seen rapid innovation, and this year will see the same. This has made it more critical than ever to revisit your AI strategy to stay competitive and create value for your customers. From scaling AI agents to optimizing costs, here are the five critical areas enterprises should prioritize for their AI strategy this year. 1. Agents: the next generation of automation AI agents are no longer theoretical. In 2025, they’re indispensable tools for enterprises looking to streamline operations and enhance customer interactions. Unlike traditional software, agents powered by large language models (LLMs) can make nuanced decisions, navigate complex multi-step tasks, and integrate seamlessly with tools and APIs. At the start of 2024, agents were not ready for prime time, making frustrating mistakes like hallucinating URLs. They started getting better as frontier large language models themselves improved. “Let me put it this way,” said Sam Witteveen, cofounder of Red Dragon, a company that develops agents for companies, and that recently reviewed the 48 agents it built last year. “Interestingly, the ones that we built at the start of the year, a lot of those worked way better at the end of the year just because the models got better.” Witteveen shared this in the video podcast we filmed to discuss these five big trends in detail. Models are getting better and hallucinating less, and they’re also being trained to do agentic tasks. Another feature that the model providers are researching is a way to use the LLM as a judge, and as models get cheaper (something we’ll cover below), companies can use three or more models to

Read More »

OpenAI’s red teaming innovations define new essentials for security leaders in the AI era

Join our daily and weekly newsletters for the latest updates and exclusive content on industry-leading AI coverage. Learn More OpenAI has taken a more aggressive approach to red teaming than its AI competitors, demonstrating its security teams’ advanced capabilities in two areas: multi-step reinforcement and external red teaming. OpenAI recently released two papers that set a new competitive standard for improving the quality, reliability and safety of AI models in these two techniques and more. The first paper, “OpenAI’s Approach to External Red Teaming for AI Models and Systems,” reports that specialized teams outside the company have proven effective in uncovering vulnerabilities that might otherwise have made it into a released model because in-house testing techniques may have missed them. In the second paper, “Diverse and Effective Red Teaming with Auto-Generated Rewards and Multi-Step Reinforcement Learning,” OpenAI introduces an automated framework that relies on iterative reinforcement learning to generate a broad spectrum of novel, wide-ranging attacks. Going all-in on red teaming pays practical, competitive dividends It’s encouraging to see competitive intensity in red teaming growing among AI companies. When Anthropic released its AI red team guidelines in June of last year, it joined AI providers including Google, Microsoft, Nvidia, OpenAI, and even the U.S.’s National Institute of Standards and Technology (NIST), which all had released red teaming frameworks. Investing heavily in red teaming yields tangible benefits for security leaders in any organization. OpenAI’s paper on external red teaming provides a detailed analysis of how the company strives to create specialized external teams that include cybersecurity and subject matter experts. The goal is to see if knowledgeable external teams can defeat models’ security perimeters and find gaps in their security, biases and controls that prompt-based testing couldn’t find. What makes OpenAI’s recent papers noteworthy is how well they define using human-in-the-middle

Read More »