Terms
- Context model: a model in a voice agent that produces or consumes context, such as a speech-to-text (STT) model, an LLM, a text-to-speech (TTS) model, or a classifier.
- Context type: a kind of context RCS carries. Each context type defines its direction, its format, its vocabulary, and how a model declares support for it.
- Producer: the model, or a processor beside it, that writes context of a type.
- Consumer: the model that reads it, or acts on it.
- Capabilities: what a producer reports or a consumer performs, declared before the conversation starts, so the models upstream only write what will be used.
How Context Flows
A context type travels inline, with the words it describes. Context reaches client apps through the RTVI standard.Perception
How the user said what they said: their tone, how fast they spoke, and other signals read from the audio or the words.- Direction: from an STT model, or a classifier model after it, to the LLM.
- Producers: any model that reads how a user turn was spoken.
- Consumers: the LLM, which reads it at the head of the user’s message.
Format
The reading comes first in the user’s message, followed by a space and the words:- The reading is
(, one or more signals separated by,, then). - A signal read as labels is
[name label=confidence, …]: its likeliest labels, likeliest first, each with a confidence from 0 to 1 written to two decimals. - A signal read as a value is
[name value=N], such as a rate or a level. - Only a final reading of the turn is written. A turn with no reading has no prefix.
Declaring Perception
A producer declares each signal it reports before the conversation starts, so the LLM can be told how to read them:
RCS Alpha has no shared vocabulary of signals: a producer names its own.
Expression
How the agent should say its reply: the delivery of its words, and the sounds and pauses between them.- Direction: from the LLM, or a classifier model after it, to the TTS model.
- Producers: an LLM taught the tags, or a classifier model that adds tags to an LLM’s plain reply.
- Consumers: the TTS model, and anything that follows the agent’s delivery, such as a client application or a real-time avatar.
Tags
- Tags are never spoken. A consumer that can’t perform a tag leaves it out of the speech.
- Brackets decide the kind, except that a universal name keeps its kind in the other brackets:
[[warm]]still sets a delivery, and<<laugh>>is still a sound. - An unfinished tag at the end of a response, or cut off by an interruption, is removed.
- The reply keeps its tags as written in the conversation’s context.
Universal Names
Deliveries and sounds are named by their universal names, the same whatever the TTS model. A consumer translates each into its own name for it, such as a TTS model that performswarm as warmly.
- One spelling per word: an adjective for a delivery, such as
nervous, and a base word for a sound, such aslaugh. - Different words stay distinct, so
contentandhappyare both names. - Only sounds a voice makes have names. Sound effects, such as applause, have none.
- Any other name passes through as written, for a consumer that takes free text, such as an accent.
Deliveries (118)
Deliveries (118)
affectionate, agitated, alarmed, amazed, amused, angry,
annoyed, anticipating, anxious, apologetic, appalled, ashamed,
bored, calm, cautious, compassionate, confident, confused,
contemplative, contemptuous, content, crying, curious, cute,
deadpan, dejected, delighted, depressed, desperate, determined,
disappointed, disdainful, disgusted, dismissive, distant,
doubtful, dramatic, elated, embarrassed, empathetic,
encouraging, enthusiastic, envious, euphoric, excited, fast,
fearful, flirtatious, frustrated, grateful, guilty, happy,
hesitant, hopeful, hurt, hysterical, impressed, indifferent,
insecure, ironic, jealous, lonely, loud, mad, melancholic,
mischievous, mocking, moved, muttering, mysterious, nervous,
nostalgic, optimistic, outraged, panicked, peaceful,
pessimistic, playful, professional, proud, questioning,
reassuring, regretful, rejected, relaxed, relieved, resigned,
sad, sarcastic, satisfied, scared, screaming, serene, serious,
sheepish, shouting, sincere, singing, skeptical, slow, soft,
somber, stern, surprised, sympathetic, thoughtful, threatened,
tired, triumphant, trusting, uncertain, unhappy, upset,
urgent, warm, whispering, wistful, worriedSounds (46)
Sounds (46)
breath, burp, cackle, chuckle, clear throat, cough, cry, deep breath, exhale, gasp, giggle, groan, growl, grunt, gulp,
hiccup, hiss, huff, hum, inhale, laugh, laugh harder, light breath, lip smack, moan, pant, scoff, sharp exhale, shriek,
shush, sigh, sneeze, sniff, sniffle, snore, snort, sob,
start laughing, swallow, tongue click, um, wheeze, whimper,
whistle, woo, yawnDeclaring Expression
A TTS model declares what it performs before the conversation starts, so the producer is offered only those tags:Reaching Clients
A client app sees context through RTVI 2.3.0 and later:bot-outputcarries the delivery of the text just spoken, by its universal names, such as["warm", "emphasis"], empty for the voice’s baseline. Each sound and pause is a segment of its own, of typeexpression_soundorexpression_pause.user-inputcarries a transcription’s perception reading.
bot-output text never contain tags or readings.
Implementations
Pipecat
Pipecat 1.15.0 and later implement RCS Alpha with expressive conversation, turned on withPipelineParams(enable_expressive_conversation=True). See the reference and the examples.
By default, Pipecat offers the LLM its core names that the TTS service performs.
Roadmap
Context types under consideration for later versions:- Diarization: who is speaking, for conversations with more than one person.
- Intent: when someone means to speak, and whether what they said needs a response.