Skip to main content
In this quickstart, you’ll build a LiveKit voice agent with Prism as its model, and talk to it from your browser. Your agent answers questions about a made-up cafe, and runs a function in your code to look up its hours. Prism plugs into LiveKit Agents as a realtime model, like OpenAI Realtime. It replaces a pipeline agent’s speech-to-text, LLM, and text-to-speech plugins: Prism listens, finds the end of each turn, and replies out loud. LiveKit carries the audio between the room and your agent.

What you’ll need

  • A Rime API key. If you don’t have one, create one.
  • A LiveKit Cloud project, with its URL, an API key, and the key’s secret. Your own LiveKit server works too.
  • uv 0.9.26 or later, which installs Python for the project if needed. The Rime SDK needs Python 3.11 or later.
  • A browser with a microphone.

Build the agent

1

Create the project

Create a Python project:
Before you install anything, add this to pyproject.toml, so the plugin’s Git workspace doesn’t replace the published LiveKit Agents:
pyproject.toml
Now install the packages, pinned to the versions we tested. The Rime plugin is a preview build from Rime’s fork of LiveKit Agents, because no LiveKit release has Prism support yet. Its realtime extra adds the Rime SDK:
2

Set your credentials

Create .env.local in your project folder with your own values. Your LiveKit Cloud project’s settings show its URL and let you create an API key and secret:
.env.local
3

Save the agent

Save this script as agent.py in your project folder. It registers an agent named prism-agent, which starts a Prism session in the aurora voice and greets the caller in each room it joins.
agent.py
Here’s what each part does:
  • rime.realtime.RealtimeModel: Prism, passed to AgentSession as its llm. It connects to wss://prism.api.rime.ai/v1/realtime by default. Prism does all three jobs, so the session has no stt, tts, vad, or turn_detection.
  • voice: aurora, wawona, brando, or astra.
  • CafeAgent: Prism’s instructions and tools.
  • @function_tool: makes get_opening_hours a tool, described to Prism by its docstring. Prism decides when to call it, LiveKit runs it in your agent, and Prism replies with the result.
  • text_input=False: keeps this example voice only. It’s optional, because the plugin also takes typed input through the history.
  • ctx.add_shutdown_callback(model.aclose): closes the model and its SDK client when the job ends.
  • generate_reply: asks Prism to speak first.
4

Start the agent

Run it in development mode from your project folder:
The agent connects to your LiveKit project and logs registered worker with "agent_name": "prism-agent". Leave it running. You can ignore the warning that dev is deprecated, or use lk agent dev from the LiveKit CLI instead.
5

Talk to the agent

  1. In LiveKit Cloud, open your project’s Agent Console.
  2. Set the agent name to prism-agent.
  3. Select Start a session.
  4. When your browser asks, allow microphone access.
Prism greets you as soon as you join, so you know the session works. Now ask, “What time do you close today?”While the tool runs, Prism can say a short filler phrase, or skip it if it already spoke before the call. Then you’ll hear the hours from get_opening_hours: 8 a.m. to 4 p.m. Only the tool result has them, so hearing 4 p.m. means the room, the Prism session, turn detection, and your tool all work.Next, try to cut in: talk while Prism replies, and it stops to answer you.If the call doesn’t work:
  • The agent never joins: check that the console’s agent name is prism-agent and the terminal shows registered worker.
  • The agent joins but stays silent: look for a Rime plugin error in the terminal, and look up its code in Errors and limits.

How Prism changes a LiveKit agent

Prism runs the whole conversation, so a few LiveKit features work differently than in a pipeline agent: To choose your own speech-to-text and LLM instead, build a pipeline agent with the LiveKit text-to-speech quickstart, where Rime gives the agent its voice.

Use your own LiveKit server

On your own server, which has no Agent Console, send the agent to a room with the LiveKit CLI:
  1. In .env.local, set LIVEKIT_URL, LIVEKIT_API_KEY, and LIVEKIT_API_SECRET to your server’s values, and start the agent the same way.
  2. Send the agent to a room. Pass your server details with --url, --api-key, and --api-secret, or set the same three variables in your shell.
  3. Join the prism-test room from any LiveKit client with a microphone, such as an app built with LiveKit’s frontend SDKs.

Next steps

Now that your agent answers, you can: