Available template variables
Use
${'${variableName}'} in any prompt. They are substituted at call time.
${'${avatarName}'}
${'${gender}'}
${'${country}'}
${'${profession}'}
${'${professionMetadata}'}
${'${avatarPrompt}'}
${'${userName}'}
${'${cefrLevel}'}
${'${timezone}'}
${'${timeOfDay}'}
${'${todayDate}'}
${'${userLatestMemoryContext}'}
System prompts by English level
Prod dispatches by the user's English level. Beginner uses a full 19-rule legacy template per provider (Gemini-audio vs Bedrock-text).
Intermediate and Advanced share a prose body and only differ by which task suffix gets appended.
The user's level is set on the Users page.
Beginner — Gemini-audio path
Used when LLM = Gemini and the user's level is
beginner (or anything not recognised). Contains the Task block inline.Beginner — Bedrock-text path
Used when LLM = Bedrock and the user's level is
beginner. Contains its own (shorter) Task block inline.Intermediate — body
Used for
intermediate users (both Gemini and Bedrock paths share this body).
The task suffix below gets appended automatically — Gemini gets the transcript+message version, Bedrock gets the message-only version.
Mirrors buildIntermediateAiReplyBody in prod.
Advanced — body
Used for
advance users (both providers share this body, with the task suffix appended at runtime).
Mirrors buildAdvancedAiReplyBody in prod.
Task suffix — Gemini-audio path
Appended after the intermediate/advanced body when LLM = Gemini. Enforces the
{"transcript":"…","message":"…"} output schema. Beginner has its own copy inline.
Task suffix — Bedrock-text path
Appended after the intermediate/advanced body when LLM = Bedrock. Enforces the
{"message":"…"} output schema (Bedrock gets transcript separately from the STT step).
User first-turn prompt
Injected as the first user message so the AI knows to start the conversation. Mirrors
formatUserContentForIceBreaker.Memory wrapper
Wraps the user's stored memory into a system message. Only used when the memory toggle is on.
First-message variants (intro turn shortcut)
Used by
POST /chatWithAI/getAIReply when isIntro=true. The active variant comes from Settings.Transcription-only prompt
Used by the Gemini-audio STT path when the main reply call doesn't return a transcript.
Suggested reply — base prompt
Powers the call screen's 💡 Suggest a reply button (
POST /chatWithAI/getSuggestions).
Mirrors prod's formatSystemContentForTip. Describes the user's persona — the LLM impersonates
the user and proposes their next line, with the conversation history fed in roles-swapped.
User-centric vars: ${'${userName}'}, ${'${interests}'}, ${'${englishLevel}'},
${'${profession}'}, ${'${professionMetadata}'}.
Suggested reply — trendy-topic prompt
Used instead of the base prompt when the avatar carries discussion
${'${pointers}'} (trendy-topic mode).
Mirrors formatTrendyTopicSystemContentForTip. Vars: ${'${topicName}'}, ${'${pointers}'},
${'${profession}'}, ${'${professionMetadata}'}, ${'${englishLevel}'}.
Suggested reply — meaning add-on (Guiding Mode)
Appended to the suggestion prompt when Include meaning is ticked and the user has a non-English
mother tongue. Forces the
{"tips":"…","tipsMeaning":"…"} JSON shape. Var: ${'${motherTongue}'}.
Memory extraction prompt
Used at call-end only. Runs a separate Gemini-2.5-flash-lite pass against the
user's turns to extract
facts + episodic events, which then get merged
into the user's stored memory. Mirrors prod's
POST /memory/updateMemoryContextForAIChat.