# Hacks for LLM Determinism

Date: 2026-01-22

There is nothing more frustrating than building a beautiful flow or a sleek backend, only to have a Large Language Model (LLM) decide that *today* is the day it wants to be a "poet" instead of a data processor.

---

We’ve all been there: your API expects a strict JSON object, but the model decides to preface it with, *"Certainly! Here is the data you requested in JSON format:"* — and suddenly, your entire production pipeline crashes with a `SyntaxError`.

Over the last year, I’ve moved away from "prompt engineering" alone and started focusing on **AI hacks**. By manipulating the actual request object, you can force the model into submission.

Here is how I keep my LLMs on a short, technical leash.


## 1. The "Golden Rule": `response_format`

If you are still begging the AI to "strictly reply with JSON" in the prompt text, you’re working too hard. Modern models (like GPT-4o or Gemini) now support a dedicated parameter in the request body.

By setting `response_format: { "type": "json_object" }`, you are essentially telling the model's brain that its only possible output vocabulary is valid JSON.

**The Hack:**
In your JS Function, don't just send the prompt. Send this:

```javascript
payload = {
    "model": "gpt-4o",
    "messages": [...],
    "response_format": { "type": "json_object" }
};

```

*Note: You must still include the word "JSON" somewhere in your system or user message for this to work.*

---

## 2. Token Limitation: `max_tokens`

We often think of `max_tokens` as a way to save money, but I use it as a **logical constraint**.

If I am asking the model for a "Yes" or "No" classification, I set `max_tokens` to **1**. This physically prevents the model from explaining *why* it chose "Yes." It has to give me the character and shut up.

---

## 3. The "Creativity Killswitch": `temperature` and `top_p`

For developers, `temperature: 1.0` is the enemy. It introduces randomness. I want the same input to produce a similar, high-quality output every time.

* **`temperature: 0`**: Makes the model deterministic. It will always choose the most likely next token.
* **`top_p: 0.1`**: This is "Nucleus Sampling." Setting it low ensures the model only considers the top 10% of most likely words.

---

## 4. `logit_bias`: Banning or Forcing Words

This is the ultimate "under-the-hood" hack. Every word (token) has an ID. With `logit_bias`, you can manually increase or decrease the probability of specific tokens appearing.

* **Want to ban the word "Apologies"?** Find its token ID and set the bias to `-100`.
* **Want to force a specific ID?** Set it to `+100`.

This is incredibly useful if you have a UI that strictly only accepts three specific command strings and you want to ensure the AI never hallucinates a fourth one.

---

## 5. `seed`: For Reproducible Debugging

One of the hardest parts of AI development is "flaky tests", where a bug happens once but you can't recreate it because the AI changed its mind.

By passing a `seed: 12345` in your `payload`, the model will attempt to generate the exact same response for the same prompt. This is a lifesaver during the debugging phase.

---

## Summary 

Prompt engineering is for writers; **Payload Engineering** is for developers. By shifting your control logic from the *text* to the *parameters*, you build systems that are resilient, predictable, and—most importantly—ready for production.

Stop asking nicely. Start configuring.
