> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://documentation.celestory.io/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# The AI Text Request Block: What It Won't Tell You

# 🕵️ The AI Text Request Block: What It Won't Tell You

The **AI text request** block sends a question to a language model and outputs its answer into the scenario. It has one trait that nothing in the interface points out: it never tells you when something went wrong. This guide describes that behavior as it actually is, not as it's assumed to be.

${frame}[Video: the AI text request block](https://celestory-docs-videos.netlify.app/en/panorama-ia/requete-ia-texte.html)

## 🧩 What the Block Exposes

-   **prompt**: the message sent to the model. Empty if nothing is plugged in.
-   **system prompt**: the role instruction. Empty if nothing is plugged in.
-   **model**: only two choices, from a closed list — `mistralai/ministral-3b-2512` (the default) and `google/gemini-2.5-flash`. No free entry.
-   **temperature**: a number. **1 by default.**
-   **result**: the answer, as text. Empty string by default.

There is no setting for answer length. The only way to bound it is to write it into the instruction itself ("120 words maximum").

**No API key lives in your project.** The call leaves the app for Celestory's own servers, which carry the billing with the model provider. Good news for security — and a reason to read the quota section below.

## 🔇 Trap #1 — No "On Error" Output

Unlike the Baserow block, which has a dedicated failure path, the AI text request block has none. If the call fails — network down, server unreachable — the error goes to the browser console, invisible to anyone without developer tools open, and the scenario **carries on normally**, with an **empty result**.

🔺 There is no way to wire a fallback behavior on failure, because no output signals it. If your scenario writes `result` to a database or displays it as-is, a network outage silently becomes a blank field.

**What to do:** never let `result` flow straight into a database write or a screen. Always interpose a condition that checks whether the text is empty, and decide what to show in that case.

## 🎭 Trap #2 — A Server Error Can Become "The Answer"

This is the more serious of the two. The block never checks that the request actually succeeded: it reads the response body as text regardless of whether the server answered correctly or not. A monthly quota reached, a temporarily unavailable model, or a rejected input all produce a technical message on the server side — not a sentence — and that message **lands in `result` exactly as a real model answer would**.

🔺 Nothing in the interface or in the data distinguishes a real answer from an error message copied verbatim. If `result` flows into a Baserow column or a screen, that message can be shown to a user, or written to a database, **as if it were the model's answer**.

**What to do:** validate the shape of `result` before using it. A real answer doesn't look like a technical message. Better still: ask the model for a recognizable format in the instruction, and reject anything that doesn't match it.

## 🌡️ Trap #3 — The Default Temperature Is 1

**The block's default setting is 1**, the highest value commonly used. At temperature 1, the answer to the **same question** changes from one call to the next. For professional use — summarizing, classifying, answering from data — that's rarely what's wanted: hard to justify why two identical requests got two different answers.

| Use case | Recommended temperature |
| --- | --- |
| Summarizing, classifying, extracting, answering from data | 0.1 to 0.3 |
| Rephrasing, softening a message | 0.4 to 0.6 |
| Writing a variant, brainstorming ideas | 0.8 to 1 |

🔺 Never set temperature to **exactly 0**. The server treats a 0 as "nothing was set" and **silently replaces it with 0.5** — the opposite of the intended effect. For genuinely deterministic output, use a value close to zero but not zero itself, for example 0.1.

## 🔒 A Fourth, Inherited Trap: Silence on the Subscription

The AI text request block is one of the features reserved for the **Business** plan, like the HTML5 block, **HTTP Request**, or the **MCP** connector. On an account whose subscription has expired, it **doesn't run at all — no message, no error, nothing in `result`**. If an AI text request block "does nothing," check the subscription end date before suspecting the instruction.

## ⭐ The Star Doesn't Mean What You'd Think

In the add-block menu, the AI text request block carries a star ⭐ labeled **ORGANIZATION**. It does not indicate AI credit consumption: it's the same badge carried by any block reserved for the Organization plan — HTML5, HTTP Request, MCP, Input Camera. The star flags a **subscription tier**, not a cost.

Using the block is counted against a monthly AI generations quota tied to your account — the same quota as the graph's AI assistant. It is not the credit system used by the AI Generation studio (images, videos, audio): those are two separate counters, and the AI text request block doesn't appear in the second one at all.

## ✅ What Real-World Use Has Shown

These practices come from projects reviewed after the fact, not from a hunch:

-   **Explicitly forbid the model from filling in gaps.** The phrase that works: *"if the information isn't in the data provided, say you can't find it."* Without it, a model invents a plausible-sounding answer.
-   **Have it cite the identifiers** it relies on. An answer that cites its sources can be checked at a glance, and the exercise discourages invention.
-   **Set temperature low** for any factual use — see Trap #3 above.
-   **Show what's sent to the model.** A collapsible "what I'm sending to the model" block, shown before the call, answers in advance the question any outside reviewer will ask.
-   **Never let a model produce an amount or a calculation** that a rule could produce instead. That's the most serious mistake an application like this can make: the model drafts, summarizes, explains — it doesn't decide.

## 🧠 Choosing the Model

The two available models don't serve the same purpose. `mistralai/ministral-3b-2512` — the default — is small and fast: good for a one-sentence summary, rephrasing, or labeling. `google/gemini-2.5-flash` is the recommended choice whenever a strict instruction must be followed, reasoning is needed over a supplied context, or the model should refuse to answer rather than invent one. Set the **model** point explicitly — don't let the default decide for you.

→ Next step: in an existing scenario, find every AI text request block and check that a condition tests `result` before it flows to a screen or a database write.