processors(realtime-ai): provide default values
This commit is contained in:
@@ -4,6 +4,7 @@
|
|||||||
# SPDX-License-Identifier: BSD 2-Clause License
|
# SPDX-License-Identifier: BSD 2-Clause License
|
||||||
#
|
#
|
||||||
|
|
||||||
|
from ctypes import DEFAULT_MODE
|
||||||
import dataclasses
|
import dataclasses
|
||||||
|
|
||||||
from typing import List, Literal, Optional, Type
|
from typing import List, Literal, Optional, Type
|
||||||
@@ -26,6 +27,17 @@ from pipecat.services.openai import OpenAILLMService
|
|||||||
from pipecat.transports.base_transport import BaseTransport
|
from pipecat.transports.base_transport import BaseTransport
|
||||||
from pipecat.vad.silero import SileroVAD
|
from pipecat.vad.silero import SileroVAD
|
||||||
|
|
||||||
|
DEFAULT_MESSAGES = [
|
||||||
|
{
|
||||||
|
"role": "system",
|
||||||
|
"content": "You are a helpful LLM in a WebRTC call. Your goal is to demonstrate your capabilities in a succinct way. Your output will be converted to audio so don't include special characters in your answers. Respond to what the user said in a creative and helpful way.",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
DEFAULT_MODEL = "llama3-70b-8192"
|
||||||
|
|
||||||
|
DEFAULT_VOICE = "79a125e8-cd45-4c13-8a67-188112f4dd22"
|
||||||
|
|
||||||
|
|
||||||
class RealtimeAILLMConfig(BaseModel):
|
class RealtimeAILLMConfig(BaseModel):
|
||||||
model: Optional[str] = None
|
model: Optional[str] = None
|
||||||
@@ -42,7 +54,7 @@ class RealtimeAIConfig(BaseModel):
|
|||||||
|
|
||||||
|
|
||||||
class RealtimeAISetup(BaseModel):
|
class RealtimeAISetup(BaseModel):
|
||||||
config: RealtimeAIConfig
|
config: Optional[RealtimeAIConfig] = None
|
||||||
|
|
||||||
|
|
||||||
class RealtimeAIMessageData(BaseModel):
|
class RealtimeAIMessageData(BaseModel):
|
||||||
@@ -115,29 +127,44 @@ class RealtimeAIProcessor(FrameProcessor):
|
|||||||
try:
|
try:
|
||||||
match message.type:
|
match message.type:
|
||||||
case "setup":
|
case "setup":
|
||||||
await self._handle_setup(RealtimeAISetup.model_validate(message.data.setup))
|
setup = None
|
||||||
|
if message.data:
|
||||||
|
setup = message.data.setup
|
||||||
|
await self._handle_setup(setup)
|
||||||
case "config-update":
|
case "config-update":
|
||||||
await self._handle_config_update(RealtimeAIConfig.model_validate(message.data.config))
|
await self._handle_config_update(message.data.config)
|
||||||
case "llm-get-context":
|
case "llm-get-context":
|
||||||
await self._handle_llm_get_context()
|
await self._handle_llm_get_context()
|
||||||
case "llm-update-context":
|
case "llm-update-context":
|
||||||
await self._handle_llm_update_context(RealtimeAIConfig.model_validate(message.data.config))
|
await self._handle_llm_update_context(message.data.config)
|
||||||
except ValidationError as e:
|
except ValidationError as e:
|
||||||
await self._send_response(message.type, False, f"invalid message: {e}")
|
await self._send_response(message.type, False, f"invalid message: {e}")
|
||||||
|
|
||||||
async def _handle_setup(self, setup: RealtimeAISetup):
|
async def _handle_setup(self, setup: RealtimeAISetup | None):
|
||||||
try:
|
try:
|
||||||
vad = SileroVAD()
|
vad = SileroVAD()
|
||||||
|
|
||||||
self._tma_in = LLMUserResponseAggregator(setup.config.llm.messages)
|
model = DEFAULT_MODEL
|
||||||
self._tma_out = LLMAssistantResponseAggregator(setup.config.llm.messages)
|
if setup and setup.config and setup.config.llm and setup.config.llm.model:
|
||||||
|
model = setup.config.llm.model
|
||||||
|
|
||||||
|
messages = DEFAULT_MESSAGES
|
||||||
|
if setup and setup.config and setup.config.llm and setup.config.llm.messages:
|
||||||
|
messages = setup.config.llm.messages
|
||||||
|
|
||||||
|
voice = DEFAULT_VOICE
|
||||||
|
if setup and setup.config and setup.config.tts and setup.config.tts.voice:
|
||||||
|
messages = setup.config.tts.voice
|
||||||
|
|
||||||
|
self._tma_in = LLMUserResponseAggregator(messages)
|
||||||
|
self._tma_out = LLMAssistantResponseAggregator(messages)
|
||||||
|
|
||||||
self._llm = self._llm_cls(
|
self._llm = self._llm_cls(
|
||||||
base_url=self._llm_base_url,
|
base_url=self._llm_base_url,
|
||||||
api_key=self._llm_api_key,
|
api_key=self._llm_api_key,
|
||||||
model=setup.config.llm.model)
|
model=model)
|
||||||
|
|
||||||
self._tts = self._tts_cls(api_key=self._tts_api_key, voice_id=setup.config.tts.voice)
|
self._tts = self._tts_cls(api_key=self._tts_api_key, voice_id=voice)
|
||||||
|
|
||||||
pipeline = Pipeline([
|
pipeline = Pipeline([
|
||||||
vad,
|
vad,
|
||||||
|
|||||||
Reference in New Issue
Block a user