Skip to main content

Chat

View as Markdown

Chat

Conversational pipelines: build a Question, send it with client.chat(), and parse the response with Answer. Class tables in the API reference.

Chat is the conversational lane: it works against chat, webhook, and dropper pipeline sources. Under the hood the client opens a pipe with MIME type application/rocketride-question, writes the serialized Question, closes the pipe, and returns the server result.

Build a Question​

import { Question } from 'rocketride';

const question = new Question({ expectJson: true });
question.addInstruction('Format', 'Return a JSON object with keys: summary, keywords.');
question.addExample('Summarize X', { summary: '...', keywords: ['a', 'b'] });
question.addQuestion('Summarize the main points and list keywords.');

If you send the same question again and again with only its context, documents, goals or questions changing (an agent loop does), set question.cachePrefix = true. A provider that supports prompt caching (the Anthropic node, and Claude models on the Bedrock node) may then cache the unchanging start of the prompt; other providers ignore the flag.

new Question({ type?, filter?, expectJson?, cachePrefix?, role? }) — QuestionType is one of QUESTION, SEMANTIC, KEYWORD, GET, PROMPT (default QUESTION). Steer the model with addInstruction, addExample, addContext, addHistory (for multi-turn), addDocuments, addGoal, and addQuestion.

Send it​

const response = await client.chat({ token, question });

chat({ token, question, onSSE? }) — the optional onSSE callback streams server-sent events (token-by-token output) as they arrive. The final answer is in the result body.

Parse the response with Answer​

Answer extracts structure from AI text, which often arrives wrapped in markdown or code fences. The client does not attach an Answer to the result — you read the body and feed it in:

import { Answer } from 'rocketride';

const answerText = response?.answers?.[0];
const answer = new Answer(true); // expectJson
answer.setAnswer(answerText ?? '');
const structured = answer.isJson() ? answer.getJson() : answer.getText();

Semantics worth knowing:

  • new Answer(expectJson = false) — construct with true when you asked the model for JSON; setAnswer() then validates/parses the content as JSON.
  • isJson() returns the expectJson flag the Answer was constructed with — it does not inspect the content.
  • getJson() returns the parsed JSON and throws if the stored answer is not JSON-compatible; getText() returns plain text.
  • Answer.parsePython(value) (static) extracts Python code from a code block.

A complete chat program is example 6.