gemini(multimodal live): connect on StartFrame

This commit is contained in:
Aleix Conchillo Flaqué
2025-01-26 21:11:17 -08:00
parent 8b5228a105
commit 737e4fa3bd
2 changed files with 24 additions and 8 deletions

View File

@@ -15,6 +15,7 @@ from runner import configure
from pipecat.audio.vad.silero import SileroVADAnalyzer from pipecat.audio.vad.silero import SileroVADAnalyzer
from pipecat.audio.vad.vad_analyzer import VADParams from pipecat.audio.vad.vad_analyzer import VADParams
from pipecat.frames.frames import LLMMessagesAppendFrame
from pipecat.pipeline.pipeline import Pipeline 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
@@ -71,6 +72,21 @@ async def main():
), ),
) )
@transport.event_handler("on_first_participant_joined")
async def on_first_participant_joined(transport, participant):
await task.queue_frames(
[
LLMMessagesAppendFrame(
messages=[
{
"role": "assistant",
"content": "Greet the user.",
}
]
)
]
)
runner = PipelineRunner() runner = PipelineRunner()
await runner.run(task) await runner.run(task)

View File

@@ -248,6 +248,7 @@ class GeminiMultimodalLiveLLMService(LLMService):
async def start(self, frame: StartFrame): async def start(self, frame: StartFrame):
await super().start(frame) await super().start(frame)
await self._connect()
async def stop(self, frame: EndFrame): async def stop(self, frame: EndFrame):
await super().stop(frame) await super().stop(frame)
@@ -385,13 +386,13 @@ class GeminiMultimodalLiveLLMService(LLMService):
await self._ws_send(event.model_dump(exclude_none=True)) await self._ws_send(event.model_dump(exclude_none=True))
async def _connect(self): async def _connect(self):
if self._websocket:
# Here we assume that if we have a websocket, we are connected. We
# handle disconnections in the send/recv code paths.
return
logger.info("Connecting to Gemini service") logger.info("Connecting to Gemini service")
try: try:
if self._websocket:
# Here we assume that if we have a websocket, we are connected. We
# handle disconnections in the send/recv code paths.
return
uri = f"wss://{self.base_url}/ws/google.ai.generativelanguage.v1alpha.GenerativeService.BidiGenerateContent?key={self.api_key}" uri = f"wss://{self.base_url}/ws/google.ai.generativelanguage.v1alpha.GenerativeService.BidiGenerateContent?key={self.api_key}"
logger.info(f"Connecting to {uri}") logger.info(f"Connecting to {uri}")
self._websocket = await websockets.connect(uri=uri) self._websocket = await websockets.connect(uri=uri)
@@ -464,9 +465,8 @@ class GeminiMultimodalLiveLLMService(LLMService):
async def _ws_send(self, message): async def _ws_send(self, message):
# logger.debug(f"Sending message to websocket: {message}") # logger.debug(f"Sending message to websocket: {message}")
try: try:
if not self._websocket: if self._websocket:
await self._connect() await self._websocket.send(json.dumps(message))
await self._websocket.send(json.dumps(message))
except Exception as e: except Exception as e:
if self._disconnecting: if self._disconnecting:
return return