Chat

Chat is the surface where everything else shows up. It's the runtime for DARS, not a thin wrapper around a model.

What chat actually does

When a user sends a message, the chat backend at chat-api.true.trading opens a Server-Sent Events stream and pushes back five kinds of frames: reasoning chunks, tool-use frames, tool-result previews, final answer tokens, and a terminal done frame with citations. The client renders all five differently — reasoning is shown in a thinking-mode visualizer, tool use renders as inline pills, and the final answer streams character by character.

# SSE frame types
event: reasoning   # thinking-mode visualizer
event: tool_call   # tool name + sanitized args
event: tool_result # compressed payload preview
event: token       # final answer streaming
event: done        # turn complete + citations

Default model

The default reasoning model is Claude Haiku 4.5, chosen for its latency-to-quality ratio at scale. Heavier work — research-agent deep-dives, signal-agent narrative composition — escalates to Sonnet-class models when the orchestrator’s complexity score crosses a configured threshold. Escalation reasons are logged and visible in the trace.

Memory model

Chat sessions are persisted per wallet. The orchestrator carries a sliding window of the conversation plus a long-term summary updated at session boundaries. The user-visible Reset chat button clears the window but keeps the long-term profile, which feeds personalization (preferred assets, time-zone, language). To wipe the long-term profile entirely, use Settings → Privacy → Erase profile.

Quick actions

Twelve curated prompts ship as one-tap entry points, translated into eight languages and updated based on usage telemetry.

  • 60-Sec News — global market debrief in one minute.
  • What’s Hot — top movers and unusual flow.
  • Surprise Me — opportunistic asset surfacing.
  • Dip Alert — local lows worth a closer look.
  • Bull or Bear This Week — directional read with reasons.
Copy constraint

Public-facing surfaces avoid the words trading, investing, finance, financial. Use thought, signal, read, flow instead. This isn’t a stylistic preference — it’s a regulatory constraint that keeps the surface compliant in the jurisdictions TRUE serves.

For Users

Chat works in eight languages. Switch with the language selector in the top nav — your conversation history follows you. Voice input is available on mobile. Quick actions surface what’s most relevant to your watchlist; you can pin or hide any of them.

For Developers

The chat endpoint is publicly documented and auth-gated by a TRUE bearer token.

POST https://chat-api.true.trading/v1/chat

Request body:

{
  "message": "What's SOL doing today?",
  "session_id": "ses_01JX...",
  "locale": "en",
  "stream": true
}

Streaming response is SSE with the frame types above. Reconnection logic should resume from the last event: token cursor; the server idempotently re-emits any token after the cursor on reconnect. Idempotency keys (Idempotency-Key header) deduplicate retried POSTs within a 24-hour window.

// Minimal TypeScript client
const r = await fetch('https://chat-api.true.trading/v1/chat', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${token}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': crypto.randomUUID(),
  },
  body: JSON.stringify({ message, session_id, stream: true }),
});

const reader = r.body!.getReader();
const decoder = new TextDecoder();
let buf = '';
while (true) {
  const { value, done } = await reader.read();
  if (done) break;
  buf += decoder.decode(value, { stream: true });
  // parse SSE frames out of `buf` and dispatch...
}

Error frames carry event: error with a structured payload (code, retryable, message). 429s include Retry-After. See Rate Limits for the full table.

Safety

Never paste seed phrases, private keys, or recovery phrases into chat. Chat content is logged for abuse-prevention and quality review, and even encrypted-at-rest logs are an unnecessary attack surface for secrets that should never leave your wallet. The chat will refuse a message that looks like a seed phrase, but the only safe rule is: don’t type it.

Safety, limits, failure modes

  • Streaming dropouts. Reconnect with the cursor from the last token frame; the server resumes from the next token deterministically.
  • Idempotency window. 24 hours. After that, the same key on a new POST creates a new turn.
  • Sliding window size. Last 30 turns by default; older turns roll into the long-term summary.
  • Rate limit on free tier. 60 requests / minute / token. Higher tiers available for partners.

See also

  • Agents — what produces the frames the chat renders.
  • MCP — call the same tools the chat uses, from your own client.
  • Webhooks — push delivery for signals, catalysts, and agentic actions.
Last updated: