Updates to cloud examples: cloud-simple so it can be deployed and use Krisp

This commit is contained in:
Mark Backman
2025-07-26 22:19:05 -04:00
parent 49435cd115
commit 250dec2371
3 changed files with 41 additions and 1 deletions

View File

@@ -14,6 +14,7 @@ from pipecat.pipeline.pipeline import Pipeline
from pipecat.pipeline.runner import PipelineRunner 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.frameworks.rtvi import RTVIConfig, RTVIObserver, RTVIProcessor
from pipecat.runner.cloud import SmallWebRTCSessionArguments from pipecat.runner.cloud import SmallWebRTCSessionArguments
from pipecat.services.cartesia.tts import CartesiaTTSService from pipecat.services.cartesia.tts import CartesiaTTSService
from pipecat.services.deepgram.stt import DeepgramSTTService from pipecat.services.deepgram.stt import DeepgramSTTService
@@ -53,9 +54,12 @@ async def run_bot(transport):
context = OpenAILLMContext(messages) context = OpenAILLMContext(messages)
context_aggregator = llm.create_context_aggregator(context) context_aggregator = llm.create_context_aggregator(context)
rtvi = RTVIProcessor(config=RTVIConfig(config=[]))
pipeline = Pipeline( pipeline = Pipeline(
[ [
transport.input(), transport.input(),
rtvi,
stt, stt,
context_aggregator.user(), context_aggregator.user(),
llm, llm,
@@ -71,6 +75,7 @@ async def run_bot(transport):
enable_metrics=True, enable_metrics=True,
enable_usage_metrics=True, enable_usage_metrics=True,
), ),
observers=[RTVIObserver(rtvi)],
) )
@transport.event_handler("on_client_connected") @transport.event_handler("on_client_connected")

View File

@@ -5,6 +5,8 @@
# #
import os import os
from dataclasses import dataclass
from typing import Any, Optional
from dotenv import load_dotenv from dotenv import load_dotenv
from loguru import logger from loguru import logger
@@ -14,7 +16,9 @@ from pipecat.pipeline.pipeline import Pipeline
from pipecat.pipeline.runner import PipelineRunner 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.runner.cloud import SmallWebRTCSessionArguments
# from pipecat.runner.cloud import SmallWebRTCSessionArguments # Need a release of Pipecat to use this
from pipecat.processors.frameworks.rtvi import RTVIConfig, RTVIObserver, RTVIProcessor
from pipecat.services.cartesia.tts import CartesiaTTSService from pipecat.services.cartesia.tts import CartesiaTTSService
from pipecat.services.deepgram.stt import DeepgramSTTService from pipecat.services.deepgram.stt import DeepgramSTTService
from pipecat.services.openai.llm import OpenAILLMService from pipecat.services.openai.llm import OpenAILLMService
@@ -30,6 +34,26 @@ except ImportError:
load_dotenv(override=True) load_dotenv(override=True)
# For now, we'll just define SmallWebRTCSessionArguments here directly since Pipecat
# isn't released with the pipecat.runner.cloud module yet.
# This saves us from having to build a Docker container from my branch or main to
# deploy to PCC.
@dataclass
class SmallWebRTCSessionArguments:
"""Small WebRTC session arguments for local development.
This will be replaced by pipecatcloud.agent.SmallWebRTCSessionArguments
when WebRTC support is added to Pipecat Cloud.
"""
webrtc_connection: Any
session_id: Optional[str] = None
# Check if we're running locally
IS_LOCAL_RUN = os.environ.get("LOCAL_RUN", "0") == "1"
async def run_bot(transport): async def run_bot(transport):
"""Main bot logic that works with any transport.""" """Main bot logic that works with any transport."""
logger.info(f"Starting bot") logger.info(f"Starting bot")
@@ -53,9 +77,12 @@ async def run_bot(transport):
context = OpenAILLMContext(messages) context = OpenAILLMContext(messages)
context_aggregator = llm.create_context_aggregator(context) context_aggregator = llm.create_context_aggregator(context)
rtvi = RTVIProcessor(config=RTVIConfig(config=[]))
pipeline = Pipeline( pipeline = Pipeline(
[ [
transport.input(), transport.input(),
rtvi,
stt, stt,
context_aggregator.user(), context_aggregator.user(),
llm, llm,
@@ -71,6 +98,7 @@ async def run_bot(transport):
enable_metrics=True, enable_metrics=True,
enable_usage_metrics=True, enable_usage_metrics=True,
), ),
observers=[RTVIObserver(rtvi)],
) )
@transport.event_handler("on_client_connected") @transport.event_handler("on_client_connected")
@@ -94,12 +122,18 @@ async def bot(session_args: DailySessionArguments | SmallWebRTCSessionArguments)
if isinstance(session_args, DailySessionArguments): if isinstance(session_args, DailySessionArguments):
from pipecat.transports.services.daily import DailyParams, DailyTransport from pipecat.transports.services.daily import DailyParams, DailyTransport
if not IS_LOCAL_RUN:
from pipecat.audio.filters.krisp_filter import KrispFilter
transport = DailyTransport( transport = DailyTransport(
session_args.room_url, session_args.room_url,
session_args.token, session_args.token,
"Pipecat Bot", "Pipecat Bot",
params=DailyParams( params=DailyParams(
audio_in_enabled=True, audio_in_enabled=True,
audio_in_filter=None
if IS_LOCAL_RUN
else KrispFilter(), # Only use Krisp in production
audio_out_enabled=True, audio_out_enabled=True,
vad_analyzer=SileroVADAnalyzer(), vad_analyzer=SileroVADAnalyzer(),
), ),

View File

@@ -2,6 +2,7 @@ agent_name = "cloud-simple-bot"
image = "your_dockerhub_username/cloud-simple-bot:0.1" image = "your_dockerhub_username/cloud-simple-bot:0.1"
image_credentials = "dockerhub-access" image_credentials = "dockerhub-access"
secret_set = "cloud-simple-bot-secrets" secret_set = "cloud-simple-bot-secrets"
enable_krisp = true
[scaling] [scaling]
min_agents = 0 min_agents = 0