a few updates
This commit is contained in:
@@ -55,21 +55,17 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
|
|||||||
|
|
||||||
stt = TogetherSTTService(api_key=os.getenv("TOGETHER_API_KEY"))
|
stt = TogetherSTTService(api_key=os.getenv("TOGETHER_API_KEY"))
|
||||||
|
|
||||||
tts = TogetherTTSService(
|
tts = TogetherTTSService(api_key=os.getenv("TOGETHER_API_KEY"))
|
||||||
|
|
||||||
|
llm = TogetherLLMService(
|
||||||
api_key=os.getenv("TOGETHER_API_KEY"),
|
api_key=os.getenv("TOGETHER_API_KEY"),
|
||||||
voice="tara",
|
settings=TogetherLLMService.Settings(
|
||||||
|
model="Qwen/Qwen3.5-9B",
|
||||||
|
system_instruction="You are a helpful LLM in a WebRTC call. Your goal is to demonstrate your capabilities in a succinct way. Your output will be spoken aloud, so avoid special characters that can't easily be spoken, such as emojis or bullet points. Respond to what the user said in a creative and helpful way.",
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
llm = TogetherLLMService(api_key=os.getenv("TOGETHER_API_KEY"))
|
context = LLMContext()
|
||||||
|
|
||||||
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 spoken aloud, so avoid special characters that can't easily be spoken, such as emojis or bullet points. Respond to what the user said in a creative and helpful way.",
|
|
||||||
},
|
|
||||||
]
|
|
||||||
|
|
||||||
context = LLMContext(messages)
|
|
||||||
user_aggregator, assistant_aggregator = LLMContextAggregatorPair(
|
user_aggregator, assistant_aggregator = LLMContextAggregatorPair(
|
||||||
context,
|
context,
|
||||||
user_params=LLMUserAggregatorParams(vad_analyzer=SileroVADAnalyzer()),
|
user_params=LLMUserAggregatorParams(vad_analyzer=SileroVADAnalyzer()),
|
||||||
@@ -100,7 +96,7 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
|
|||||||
async def on_client_connected(transport, client):
|
async def on_client_connected(transport, client):
|
||||||
logger.info(f"Client connected")
|
logger.info(f"Client connected")
|
||||||
# Kick off the conversation.
|
# Kick off the conversation.
|
||||||
messages.append({"role": "system", "content": "Please introduce yourself to the user."})
|
context.add_message({"role": "user", "content": "Please introduce yourself"})
|
||||||
await task.queue_frames([LLMRunFrame()])
|
await task.queue_frames([LLMRunFrame()])
|
||||||
|
|
||||||
@transport.event_handler("on_client_disconnected")
|
@transport.event_handler("on_client_disconnected")
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class TogetherLLMService(OpenAILLMService):
|
|||||||
self,
|
self,
|
||||||
*,
|
*,
|
||||||
api_key: str,
|
api_key: str,
|
||||||
base_url: str = "https://api.together.xyz/v1",
|
base_url: str = "https://api.together.ai/v1",
|
||||||
model: Optional[str] = None,
|
model: Optional[str] = None,
|
||||||
settings: Optional[Settings] = None,
|
settings: Optional[Settings] = None,
|
||||||
**kwargs,
|
**kwargs,
|
||||||
@@ -45,8 +45,8 @@ class TogetherLLMService(OpenAILLMService):
|
|||||||
|
|
||||||
Args:
|
Args:
|
||||||
api_key: The API key for accessing Together.ai's API.
|
api_key: The API key for accessing Together.ai's API.
|
||||||
base_url: The base URL for Together.ai API. Defaults to "https://api.together.xyz/v1".
|
base_url: The base URL for Together.ai API. Defaults to "https://api.together.ai/v1".
|
||||||
model: The model identifier to use. Defaults to "meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo".
|
model: The model identifier to use.
|
||||||
|
|
||||||
.. deprecated:: 0.0.105
|
.. deprecated:: 0.0.105
|
||||||
Use ``settings=TogetherLLMService.Settings(model=...)`` instead.
|
Use ``settings=TogetherLLMService.Settings(model=...)`` instead.
|
||||||
@@ -56,7 +56,7 @@ class TogetherLLMService(OpenAILLMService):
|
|||||||
**kwargs: Additional keyword arguments passed to OpenAILLMService.
|
**kwargs: Additional keyword arguments passed to OpenAILLMService.
|
||||||
"""
|
"""
|
||||||
# 1. Initialize default_settings with hardcoded defaults
|
# 1. Initialize default_settings with hardcoded defaults
|
||||||
default_settings = self.Settings(model="meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo")
|
default_settings = self.Settings(model=model)
|
||||||
|
|
||||||
# 2. Apply direct init arg overrides (deprecated)
|
# 2. Apply direct init arg overrides (deprecated)
|
||||||
if model is not None:
|
if model is not None:
|
||||||
|
|||||||
@@ -296,7 +296,7 @@ class TogetherSTTService(WebsocketSTTService):
|
|||||||
Args:
|
Args:
|
||||||
evt: The delta event from the server.
|
evt: The delta event from the server.
|
||||||
"""
|
"""
|
||||||
delta = evt.get("transcript", "")
|
delta = evt.get("delta", "")
|
||||||
if delta.strip():
|
if delta.strip():
|
||||||
await self.push_frame(
|
await self.push_frame(
|
||||||
InterimTranscriptionFrame(
|
InterimTranscriptionFrame(
|
||||||
@@ -321,6 +321,7 @@ class TogetherSTTService(WebsocketSTTService):
|
|||||||
self._user_id,
|
self._user_id,
|
||||||
time_now_iso8601(),
|
time_now_iso8601(),
|
||||||
result=evt,
|
result=evt,
|
||||||
|
finalized=True,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
await self._handle_transcription_trace(transcript, True, self._settings.language)
|
await self._handle_transcription_trace(transcript, True, self._settings.language)
|
||||||
|
|||||||
@@ -225,20 +225,17 @@ class TogetherTTSService(WebsocketTTSService):
|
|||||||
Args:
|
Args:
|
||||||
message: The message dict to serialize and send.
|
message: The message dict to serialize and send.
|
||||||
"""
|
"""
|
||||||
try:
|
if not self._disconnecting:
|
||||||
if not self._disconnecting and self._websocket:
|
await self.send_with_retry(json.dumps(message), self._report_error)
|
||||||
await self._websocket.send(json.dumps(message))
|
|
||||||
except Exception as e:
|
|
||||||
if self._disconnecting or not self._websocket:
|
|
||||||
return
|
|
||||||
await self.push_error(
|
|
||||||
error_msg=f"Error sending message: {e}",
|
|
||||||
exception=e,
|
|
||||||
)
|
|
||||||
|
|
||||||
async def flush_audio(self):
|
async def flush_audio(self, context_id: Optional[str] = None):
|
||||||
"""Flush any pending audio and finalize the current context."""
|
"""Flush any pending audio and finalize the current context.
|
||||||
logger.trace(f"{self}: flushing audio")
|
|
||||||
|
Args:
|
||||||
|
context_id: Pipecat TTS context (unused for Together; required for
|
||||||
|
compatibility with :meth:`TTSService.on_turn_context_completed`).
|
||||||
|
"""
|
||||||
|
logger.trace(f"{self}: flushing audio (context_id={context_id})")
|
||||||
await self._ws_send({"type": "input_text_buffer.commit"})
|
await self._ws_send({"type": "input_text_buffer.commit"})
|
||||||
|
|
||||||
# ------------------------------------------------------------------
|
# ------------------------------------------------------------------
|
||||||
@@ -252,7 +249,9 @@ class TogetherTTSService(WebsocketTTSService):
|
|||||||
this method with automatic reconnection on connection errors.
|
this method with automatic reconnection on connection errors.
|
||||||
"""
|
"""
|
||||||
async for message in self._websocket:
|
async for message in self._websocket:
|
||||||
if not isinstance(message, str):
|
if isinstance(message, bytes):
|
||||||
|
message = message.decode("utf-8")
|
||||||
|
elif not isinstance(message, str):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
Reference in New Issue
Block a user