Skip to main content
The 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:
Both providers speak OpenAI’s /v1/chat/completions. Zero new dependencies.

Prompt shape

Single-shot, no tools. Structure:
Output schema:

Confidence normalization

Different models return confidence in different shapes:
After normalization confidence is always 0-100. Anything outside [0,100] is clamped.

Runtime guardrails

llm.ts. OpenAI-compatible fetch client

One retry on 429/5xx after 2s, then throws so the caller can fall back to Groq.

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 <$1 balance kills the runtime cost for abandoned agents.