| title | Chat |
|---|---|
| sidebar_position | 7 |
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.
from rocketride.schema import Question
question = 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.
Question(type=QuestionType.QUESTION, filter=DocFilter(), expectJson=False, cachePrefix=False, role='') —
QuestionType is one of QUESTION, SEMANTIC, KEYWORD, GET, PROMPT. Steer
the model with addInstruction, addExample, addContext, addHistory (for
multi-turn), addDocuments, addGoal, and addQuestion.
response = await client.chat(token=token, question=question)chat(*, token, question, on_sse=None) is keyword-only; the optional on_sse
callback streams server-sent events (token-by-token output) as they arrive. The
final answer is in the result body.
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:
from rocketride.schema import Answer
answer_text = (response.get('answers') or [None])[0]
answer = Answer(expectJson=True)
answer.setAnswer(answer_text or '')
if answer.isJson():
structured = answer.getJson()
else:
structured = answer.getText()Semantics worth knowing:
setAnswer(value)stores the response, validating/parsing it as JSON whenexpectJsonisTrue.isJson()returns theexpectJsonflag — it does not inspect the content.getJson()returns the parsed JSON; it returnsNoneonly when no answer has been set, and raisesValueErrorif the stored answer is not valid JSON.getText()returns the answer as plain text;parsePython(value)extracts Python code from a code block.answer.tokenscarries the turn-total LLM token usage reported by the server.
A complete chat program is example 6.