RTVI simple chat example

This commit is contained in:
James Hush
2025-04-29 11:32:59 +08:00
parent a6a4d3d71f
commit 52b393537a
2 changed files with 37 additions and 8 deletions

View File

@@ -1,17 +1,18 @@
import { import {
RTVIClientAudio, RTVIClientAudio,
RTVIClientVideo, RTVIClientVideo,
useRTVIClient,
useRTVIClientTransportState, useRTVIClientTransportState,
} from '@pipecat-ai/client-react'; } from "@pipecat-ai/client-react";
import { RTVIProvider } from './providers/RTVIProvider'; import { RTVIProvider } from "./providers/RTVIProvider";
import { ConnectButton } from './components/ConnectButton'; import { ConnectButton } from "./components/ConnectButton";
import { StatusDisplay } from './components/StatusDisplay'; import { StatusDisplay } from "./components/StatusDisplay";
import { DebugDisplay } from './components/DebugDisplay'; import { DebugDisplay } from "./components/DebugDisplay";
import './App.css'; import "./App.css";
function BotVideo() { function BotVideo() {
const transportState = useRTVIClientTransportState(); const transportState = useRTVIClientTransportState();
const isConnected = transportState !== 'disconnected'; const isConnected = transportState !== "disconnected";
return ( return (
<div className="bot-container"> <div className="bot-container">
@@ -23,11 +24,31 @@ function BotVideo() {
} }
function AppContent() { function AppContent() {
const client = useRTVIClient();
return ( return (
<div className="app"> <div className="app">
<div className="status-bar"> <div className="status-bar">
<StatusDisplay /> <StatusDisplay />
<ConnectButton /> <ConnectButton />
<div
className="controls"
onClick={async () => {
if (!client) {
console.error("RTVI client is not initialized");
return;
}
client.action({
service: "tts",
action: "say",
arguments: [
{ name: "text", value: "Hello, world!" },
{ name: "interrupt", value: false },
],
});
}}
>
<button className="connect-btn">Say something</button>
</div>
</div> </div>
<div className="main-content"> <div className="main-content">

View File

@@ -40,7 +40,13 @@ from pipecat.pipeline.runner import PipelineRunner
from pipecat.pipeline.task import PipelineParams, PipelineTask from pipecat.pipeline.task import PipelineParams, PipelineTask
from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext from pipecat.processors.aggregators.openai_llm_context import OpenAILLMContext
from pipecat.processors.frame_processor import FrameDirection, FrameProcessor from pipecat.processors.frame_processor import FrameDirection, FrameProcessor
from pipecat.processors.frameworks.rtvi import RTVIConfig, RTVIObserver, RTVIProcessor from pipecat.processors.frameworks.rtvi import (
RTVIConfig,
RTVIObserver,
RTVIProcessor,
RTVIServiceConfig,
RTVIServiceOptionConfig,
)
from pipecat.services.elevenlabs.tts import ElevenLabsTTSService from pipecat.services.elevenlabs.tts import ElevenLabsTTSService
from pipecat.services.openai.llm import OpenAILLMService from pipecat.services.openai.llm import OpenAILLMService
from pipecat.transports.services.daily import DailyParams, DailyTransport from pipecat.transports.services.daily import DailyParams, DailyTransport
@@ -181,6 +187,8 @@ async def main():
# #
# RTVI events for Pipecat client UI # RTVI events for Pipecat client UI
# #
options = RTVIServiceOptionConfig(name="say")
tts_interrupt = RTVIServiceConfig(service="tts", options=[options])
rtvi = RTVIProcessor(config=RTVIConfig(config=[])) rtvi = RTVIProcessor(config=RTVIConfig(config=[]))
pipeline = Pipeline( pipeline = Pipeline(