s/SmartTurnAnalyzer/HttpSmartTurnAnalyzer/ and add FalSmartTurnAnalyzer
This commit is contained in:
@@ -10,7 +10,7 @@ import aiohttp
|
|||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
from pipecat.audio.turn.smart_turn import SmartTurnAnalyzer
|
from pipecat.audio.turn.http_smart_turn import HttpSmartTurnAnalyzer
|
||||||
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.pipeline.pipeline import Pipeline
|
from pipecat.pipeline.pipeline import Pipeline
|
||||||
@@ -41,7 +41,9 @@ async def run_bot(webrtc_connection: SmallWebRTCConnection):
|
|||||||
vad_enabled=True,
|
vad_enabled=True,
|
||||||
vad_analyzer=SileroVADAnalyzer(params=VADParams(stop_secs=0.2)),
|
vad_analyzer=SileroVADAnalyzer(params=VADParams(stop_secs=0.2)),
|
||||||
vad_audio_passthrough=True,
|
vad_audio_passthrough=True,
|
||||||
turn_analyzer=SmartTurnAnalyzer(url=remote_smart_turn_url, aiohttp_session=session),
|
turn_analyzer=HttpSmartTurnAnalyzer(
|
||||||
|
url=remote_smart_turn_url, aiohttp_session=session
|
||||||
|
),
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from dotenv import load_dotenv
|
|||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
from pipecat.audio.turn.base_smart_turn import SmartTurnParams
|
from pipecat.audio.turn.base_smart_turn import SmartTurnParams
|
||||||
from pipecat.audio.turn.local_smart_turn import LocalCoreMLSmartTurnAnalyzer
|
from pipecat.audio.turn.local_coreml_smart_turn import LocalCoreMLSmartTurnAnalyzer
|
||||||
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.pipeline.pipeline import Pipeline
|
from pipecat.pipeline.pipeline import Pipeline
|
||||||
|
|||||||
26
src/pipecat/audio/turn/fal_smart_turn.py
Normal file
26
src/pipecat/audio/turn/fal_smart_turn.py
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
#
|
||||||
|
# Copyright (c) 2024–2025, Daily
|
||||||
|
#
|
||||||
|
# SPDX-License-Identifier: BSD 2-Clause License
|
||||||
|
#
|
||||||
|
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
import aiohttp
|
||||||
|
|
||||||
|
from pipecat.audio.turn.http_smart_turn import HttpSmartTurnAnalyzer
|
||||||
|
|
||||||
|
|
||||||
|
class FalSmartTurnAnalyzer(HttpSmartTurnAnalyzer):
|
||||||
|
def __init__(
|
||||||
|
self,
|
||||||
|
*,
|
||||||
|
aiohttp_session: aiohttp.ClientSession,
|
||||||
|
url: str = "https://fal.run/fal-ai/smart-turn/raw",
|
||||||
|
api_key: Optional[str] = None,
|
||||||
|
**kwargs,
|
||||||
|
):
|
||||||
|
headers = {}
|
||||||
|
if api_key:
|
||||||
|
headers = {"Authorization": f"Key {api_key}"}
|
||||||
|
super().__init__(url=url, aiohttp_session=aiohttp_session, headers=headers, **kwargs)
|
||||||
@@ -4,7 +4,6 @@
|
|||||||
# SPDX-License-Identifier: BSD 2-Clause License
|
# SPDX-License-Identifier: BSD 2-Clause License
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
import io
|
import io
|
||||||
from typing import Any, Dict
|
from typing import Any, Dict
|
||||||
@@ -16,10 +15,18 @@ from loguru import logger
|
|||||||
from pipecat.audio.turn.base_smart_turn import BaseSmartTurn, SmartTurnTimeoutException
|
from pipecat.audio.turn.base_smart_turn import BaseSmartTurn, SmartTurnTimeoutException
|
||||||
|
|
||||||
|
|
||||||
class SmartTurnAnalyzer(BaseSmartTurn):
|
class HttpSmartTurnAnalyzer(BaseSmartTurn):
|
||||||
def __init__(self, url: str, aiohttp_session: aiohttp.ClientSession, **kwargs):
|
def __init__(
|
||||||
|
self,
|
||||||
|
*,
|
||||||
|
url: str,
|
||||||
|
aiohttp_session: aiohttp.ClientSession,
|
||||||
|
headers: Dict[str, str] = {},
|
||||||
|
**kwargs,
|
||||||
|
):
|
||||||
super().__init__(**kwargs)
|
super().__init__(**kwargs)
|
||||||
self._url = url
|
self._url = url
|
||||||
|
self._headers = headers
|
||||||
self._aiohttp_session = aiohttp_session
|
self._aiohttp_session = aiohttp_session
|
||||||
|
|
||||||
def _serialize_array(self, audio_array: np.ndarray) -> bytes:
|
def _serialize_array(self, audio_array: np.ndarray) -> bytes:
|
||||||
@@ -32,6 +39,7 @@ class SmartTurnAnalyzer(BaseSmartTurn):
|
|||||||
|
|
||||||
async def _send_raw_request(self, data_bytes: bytes) -> Dict[str, Any]:
|
async def _send_raw_request(self, data_bytes: bytes) -> Dict[str, Any]:
|
||||||
headers = {"Content-Type": "application/octet-stream"}
|
headers = {"Content-Type": "application/octet-stream"}
|
||||||
|
headers.update(self._headers)
|
||||||
logger.trace(f"Sending {len(data_bytes)} bytes as raw body to {self._url}...")
|
logger.trace(f"Sending {len(data_bytes)} bytes as raw body to {self._url}...")
|
||||||
try:
|
try:
|
||||||
timeout = aiohttp.ClientTimeout(total=self._params.stop_secs)
|
timeout = aiohttp.ClientTimeout(total=self._params.stop_secs)
|
||||||
Reference in New Issue
Block a user