soma.cell

E0033: think_option

E0033 think_option — an unknown or mistyped think() option.

A compile-time error of soma check, the checker of the Soma programming language (soma explain E0033).

The rule

The options map passed to think() accepts only max_tokens, max_rounds, timeout (in milliseconds), tools_allowed and requires; any other key, such as "temperature", is a check error. Soma refuses unknown options at check time because they would otherwise be rejected when the model is called. Remove the option, or for a typed answer use think_json(prompt, map("as", "TypeName")), whose as must name a declared cell type.

A program that triggers it

wrong.cell

cell agent SupportTriage {
    face {
        signal classify(ticket: String) -> String
    }
    state triage {
        initial: open
        open -> classified
    }
    on classify(ticket: String) {
        let label = think("Label this support ticket as billing, bug or other: {ticket}",
            map("max_tokens", 20, "temperature", 0))
        transition(ticket, "classified")
        return label
    }
}

What soma check prints:

$ soma check wrong.cell
error: "temperature" is not a think() option — the options are max_tokens, max_rounds, timeout (ms), tools_allowed and requires; a typed answer is think_json(prompt, map("as", "TypeName"))
  --> wrong.cell:11:35
   |
11 |             map("max_tokens", 20, "temperature", 0))
   |                                   ^
  = code: E0033
✗ 1 error(s), 0 warning(s).

The fix field of soma check --json: the options are max_tokens, max_rounds, timeout (ms), tools_allowed and requires; a typed answer is think_json(prompt, map("as", "TypeName"))

On line 11, map("max_tokens", 20, "temperature", 0)) becomes map("max_tokens", 20)).

wrong.cell → right.cell

--- wrong.cell
+++ right.cell
@@ -9,5 +9,5 @@
     on classify(ticket: String) {
         let label = think("Label this support ticket as billing, bug or other: {ticket}",
-            map("max_tokens", 20, "temperature", 0))
+            map("max_tokens", 20))
         transition(ticket, "classified")
         return label

With the fix, soma check accepts the program:

$ soma check right.cell
✓ All checks passed.