Ora
All guides All guides

Getting started

Your first decision in the Playground Call the API from your code Save, share and reuse queries

Financial decisions

Decide on a stock with just its symbol Write your own rule Read probabilities and choose thresholds

Rule playground

From English to rule Combining conditions Offsets and windows Reading beliefs Rules plus forecasts in one request Turning a rule into an alert or workflow

Automation

Send a Slack alert when a rule fires Send decisions to your own system Run a watchlist every day after the close

Production

Handle errors, rate limits and retries

Cookbooks

All cookbooks Rank a watchlist by probability Send a pre-open digest Trend filter plus entry trigger Breakout confirmation with volume RSI and Bollinger mean-reversion checks Gap-fill playbook to your order system Confidence-gated actions Detect two-way risk Size positions by volatility regime Risk guardrail before an order Ask many questions in one request Self-consistency: three wordings Route support tickets Is a headline relevant to a symbol?

Use cases

Tag financial news for trading signalsGuardrails for LLM appsSupport ticket triage and routingFilter retrieved passages before your LLM answersVerify claims and citations against a source

Guides / Cookbooks

Cookbooks · Techniques · Intermediate · about 8 min

Self-consistency: three wordings

Ask the same question in three wordings in one request. If the answers agree, the wording is sound; if one disagrees, find out why before you act on it.

  1. When to use it

    Before you put a new question into production, and whenever a question's wording is changed. Three wordings in one request cost little more than one (Ask many questions in one request).

  2. The request

    {
      "model": "ora-fin1",
      "state": {
        "symbol": "TSLA"
      },
      "questions": {
        "drop_a": {
          "type": "yes_no",
          "instructions": "Will it drop at least 5% at some point in the next month?"
        },
        "drop_b": {
          "type": "yes_no",
          "instructions": "Over the coming month, will it trade at least 5% below the latest close at any point?"
        },
        "drop_c": {
          "type": "yes_no",
          "instructions": "Within roughly 21 trading sessions, will the low reach 5% or more under the current price?"
        },
        "up_a": {
          "type": "yes_no",
          "instructions": "Will the stock be higher in a week?"
        },
        "up_b": {
          "type": "yes_no",
          "instructions": "Five trading days from now, will it close above the latest close?"
        },
        "up_c": {
          "type": "yes_no",
          "instructions": "Will next week end with the price up from where it is now?"
        }
      }
    }
    Open this in the Playground
  3. The real response

    {
      "model": "ora-fin1",
      "answers": {
        "drop_a": {
          "type": "yes_no",
          "yes_no": 0.638
        },
        "drop_b": {
          "type": "yes_no",
          "yes_no": 0.593
        },
        "drop_c": {
          "type": "yes_no",
          "yes_no": 0.184
        },
        "up_a": {
          "type": "yes_no",
          "yes_no": 0.487
        },
        "up_b": {
          "type": "yes_no",
          "yes_no": 0.534
        },
        "up_c": {
          "type": "yes_no",
          "yes_no": 0.496
        }
      },
      "usage": {
        "input_tokens": 483,
        "output_tokens": 24
      },
      "context": {
        "source": "server",
        "symbol": "TSLA",
        "as_of": "2026-10-30"
      },
      "version": "ora-fin-0.1.1"
    }

    The week question is consistent: up_a, up_b, up_c span 0.047. The drawdown question is not: drop_a 0.638 and drop_b 0.593 agree, but drop_c is 0.184, a spread of 0.454. The third wording ("the low reach 5% or more under the current price") is the odd one out, so it is the one to drop, and the plain wording stays.

  4. The code

    Requires curl 7.76+. Save as run.sh, then: bash run.sh
    curl -sS https://oramodel.com/v1/systemone \
      -H "Authorization: Bearer $JEV_API_KEY" \
      -H "Content-Type: application/json" \
      -d '{
      "model": "ora-fin1",
      "state": {
        "symbol": "TSLA"
      },
      "questions": {
        "drop_a": {
          "type": "yes_no",
          "instructions": "Will it drop at least 5% at some point in the next month?"
        },
        "drop_b": {
          "type": "yes_no",
          "instructions": "Over the coming month, will it trade at least 5% below the latest close at any point?"
        },
        "drop_c": {
          "type": "yes_no",
          "instructions": "Within roughly 21 trading sessions, will the low reach 5% or more under the current price?"
        },
        "up_a": {
          "type": "yes_no",
          "instructions": "Will the stock be higher in a week?"
        },
        "up_b": {
          "type": "yes_no",
          "instructions": "Five trading days from now, will it close above the latest close?"
        },
        "up_c": {
          "type": "yes_no",
          "instructions": "Will next week end with the price up from where it is now?"
        }
      }
    }'
    from statistics import median
    
    def consistent(answers, names, max_spread=0.10):
        v = [answers[n]["yes_no"] for n in names]
        return max(v) - min(v) <= max_spread, median(v)
    
    ok, p = consistent(data["answers"], ["drop_a", "drop_b", "drop_c"])
    if not ok:
        flag_for_review("drop wordings disagree")   # don't act on p
  5. Act on it

    A wide spread is a problem with the question, not a signal about the stock. Rewrite or remove the outlier, re-run, and keep the clearest wording as the one you use from then on. A narrow spread lets you use the median and move on.

  6. Variations

    • Use it once when designing questions, not on every call.
    • The Paraphrase check examples pair wordings with the real outcome.
    • Text questions: compare the winning choice across wordings, and treat disagreement as low confidence.

Information, not investment advice. Every number on this page is a real response for the session shown; answers change with each session.

What's next

Create an account Open the Playground Everything here also lives in the console, next to your keys and usage.