llm strategy hands each tick to a real model. The model receives a fixed-shape prompt (mandate + price context + oracle list), returns a structured JSON decision, and the runtime owns execution. The model can never invent strikes, exceed the spend cap, or bypass the on-chain pause.
This page covers the hosted fleet path (the production deployment). The legacy llmAgent.ts tool-loop path still ships in the single-agent runtime; see Runtime Overview for that variant.
Files
Tested-working models
The wizard surfaces exactly three options. Anything else is unsupported.
Other Gemini aliases (
gemini-flash-latest, gemini-2.0-flash, …) returned 404/429/503 in testing and are not surfaced.
Provider routing
pickLlm(modelName) in fleet.ts:
/v1/chat/completions. Zero new dependencies.
Prompt shape
Single-shot, no tools. Structure:Confidence normalization
Different models return confidence in different shapes:0-100. Anything outside [0,100] is clamped.
Runtime guardrails
llm.ts. OpenAI-compatible fetch client
Per-tick token budget
Single-shot prompt is about 1,500 tokens vs ~7,500 for the tool-loop path. At 15-min ticks one agent burns ~100 RPD on Groq free tier. ~10 sustainable agents on free Groq, ~15 on free Gemini.Limits
- Spend per tick bounded at
AGENT_TRADE_DUSDC(default $2). Runtime caps, not model honor system. - Strike must exist + be quoteable at execution time. Model cannot invent.
- Signal-only fires when the PM is empty so a funded user always sees ticks happening before they fund.
- Auto-disable after 3 days of
<$1balance kills the runtime cost for abandoned agents.

