Skip to content
TheThinkLoop

Template - Policy

Predicate

Policy exception

Whether a request that falls outside policy deserves an exception.

A predicate decision for the judgment calls that written policy doesn't settle, with evidence checks for the reasons exceptions are usually granted or refused.

The decision

PredicateA probability from 0 to 1 that the condition holds.

Is this request eligible for a policy exception?

Evidence checks (asked in the same request)

  • Company error: The request follows a mistake or outage on our side.
  • Long-standing customer: The customer has a long relationship with us.
  • Prior exceptions: The customer has already received an exception or refund.

Expected output: A probability from 0 to 1 that an exception is warranted, plus one probability per evidence check.

Input

The Decisions API reads one input. Combine these fields into it as labeled text so the model sees the facts the decision depends on.

Input fields
FieldTypeRequiredDescription
messagestringYesThe customer's message, verbatim. Include the subject line if there is one.
policy_textstringYesThe policy clause in question and your written criteria for exceptions.
account_historystringNoTenure and any previous exceptions.

Worked examples

  1. Missed a deadline because of the company's outage

    We've been a customer for 6 years and have never asked for anything. Your outage on the 12th made us miss the renewal discount deadline by one day. Could you honour the discount?

    A careful reviewer would say: Yes. Long tenure, a first request, and a miss caused by the company's own outage.

    Run this example
  2. A repeat request with no new circumstances

    I forgot to cancel again before the trial ended. I know you already granted a refund last time, but can you make another exception?

    A careful reviewer would say: No. A second exception for the same avoidable reason.

    Run this example

Expected answers are human judgments written for this template, not model output.

How it works

Exceptions are where company-specific judgment lives. Two businesses with identical policies will grant different exceptions, because they weigh loyalty, fault, and precedent differently.

That is why this template needs your criteria in the input. Without them the model applies generic reasonableness, which is not your policy.

Treat this as a recommendation engine for a human approver, at least at first. Its value is consistency: every request is evaluated against the same checks, and the checks are visible.

Human review and thresholds

Recommended review policy

Keep a person in the loop for approvals. Automation is most defensible for clear refusals of repeat requests and for moving cases where the company was at fault to the front of the review queue. Sample both.

Choosing thresholds

The costs depend on what the exception gives away. For low-value goodwill gestures, a moderate bar is reasonable. For anything with financial or contractual weight, use the probability to order a review queue rather than to decide.

Starting automation threshold
92%
Starting don’t-decide threshold
60%

Starting points for the playground, not recommendations. The right values depend on your costs and on how the model’s confidence tracks accuracy on your data. Calibrate them.

Limitations

  • Exceptions set precedents. A model cannot weigh what granting this request implies for the next hundred.
  • Sympathetic writing can raise the probability without changing the facts. Verify claims about outages, tenure, and history against your records.
  • If you cannot write down your exception criteria, the decision is not ready to automate.

Use it in your code

The template definition is plain JSON: the question, the evidence checks, the input fields, and the starting policy. The SDK call below sends the same question and checks to the Decisions API from your server.

policy-exception.jsonjson
{
  "$format": "thethinkloop.template/v1",
  "slug": "policy-exception",
  "title": "Policy exception",
  "decides": "Whether a request that falls outside policy deserves an exception.",
  "question": {
    "name": "decision",
    "type": "predicate",
    "instructions": "Is this request eligible for a policy exception?"
  },
  "evidenceChecks": [
    {
      "name": "factor_1",
      "label": "Company error",
      "type": "predicate",
      "instructions": "The request follows a mistake or outage on our side."
    },
    {
      "name": "factor_2",
      "label": "Long-standing customer",
      "type": "predicate",
      "instructions": "The customer has a long relationship with us."
    },
    {
      "name": "factor_3",
      "label": "Prior exceptions",
      "type": "predicate",
      "instructions": "The customer has already received an exception or refund."
    }
  ],
  "inputs": [
    {
      "name": "message",
      "type": "string",
      "required": true,
      "description": "The customer's message, verbatim. Include the subject line if there is one."
    },
    {
      "name": "policy_text",
      "type": "string",
      "required": true,
      "description": "The policy clause in question and your written criteria for exceptions."
    },
    {
      "name": "account_history",
      "type": "string",
      "required": false,
      "description": "Tenure and any previous exceptions."
    }
  ],
  "expectedOutput": "A probability from 0 to 1 that an exception is warranted, plus one probability per evidence check.",
  "examples": [
    {
      "title": "Missed a deadline because of the company's outage",
      "input": "We've been a customer for 6 years and have never asked for anything. Your outage on the 12th made us miss the renewal discount deadline by one day. Could you honour the discount?",
      "expected": "Yes"
    },
    {
      "title": "A repeat request with no new circumstances",
      "input": "I forgot to cancel again before the trial ended. I know you already granted a refund last time, but can you make another exception?",
      "expected": "No"
    }
  ],
  "startingPolicy": {
    "automateAt": 0.92,
    "abstainBelow": 0.6,
    "note": "A starting point for exploration, not a recommendation. Calibrate against your own labeled examples."
  }
}
Equivalent SDK calljavascript
import OpenAI from "openai"; // openai >= 7.30.0

const client = new OpenAI(); // reads OPENAI_API_KEY on the server

const decision = await client.decisions.create({
  model: "gpt-6-luna",
  input: "We've been a customer for 6 years and have never asked for anything. Your outage on the 12th made us miss the renewal discount deadline by one day. Could you honour the discount?",
  questions: [
    {
      type: "predicate",
      name: "decision",
      instructions: "Is this request eligible for a policy exception?"
    },
    {
      type: "predicate",
      name: "factor_1",
      instructions: "The request follows a mistake or outage on our side."
    },
    {
      type: "predicate",
      name: "factor_2",
      instructions: "The customer has a long relationship with us."
    },
    {
      type: "predicate",
      name: "factor_3",
      instructions: "The customer has already received an exception or refund."
    }
  ],
});

// Answers come back in question order. A question can also be refused.
const [main, ...checks] = decision.answers;
if (main.type === "refusal") throw new Error("The model declined to answer.");
if (main.type === "predicate") {
  console.log(main.probability); // 0–1 estimate that the condition is true
}

Download it as policy-exception.json, or browse all developer resources.

Need this decision tuned to your policy?

We are running a small number of pilots with B2B teams: your policy, your examples, your thresholds. Request early access.