Compare commits
4 Commits
mb/fix-sen
...
mb/pyproje
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1d80c8d19e | ||
|
|
c93f2900e8 | ||
|
|
a21a65587e | ||
|
|
a80002d3bd |
50
.github/workflows/python-compatibility.yaml
vendored
Normal file
50
.github/workflows/python-compatibility.yaml
vendored
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
name: Python Compatibility Test
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main, develop]
|
||||||
|
paths: ["pyproject.toml"]
|
||||||
|
pull_request:
|
||||||
|
branches: [main, develop]
|
||||||
|
paths: ["pyproject.toml"]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test-compatibility:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
python-version: ["3.10.18", "3.11.13", "3.12.11", "3.13.4"]
|
||||||
|
|
||||||
|
name: Python ${{ matrix.python-version }}
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Install system dependencies
|
||||||
|
run: |
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y \
|
||||||
|
portaudio19-dev \
|
||||||
|
libcairo2-dev \
|
||||||
|
libgirepository1.0-dev \
|
||||||
|
pkg-config
|
||||||
|
|
||||||
|
- name: Install uv
|
||||||
|
uses: astral-sh/setup-uv@v4
|
||||||
|
with:
|
||||||
|
version: "latest"
|
||||||
|
|
||||||
|
- name: Set up Python ${{ matrix.python-version }}
|
||||||
|
run: |
|
||||||
|
uv python install ${{ matrix.python-version }}
|
||||||
|
uv python pin ${{ matrix.python-version }}
|
||||||
|
|
||||||
|
- name: Test uv sync with all extras
|
||||||
|
run: |
|
||||||
|
uv sync --group dev --all-extras --no-extra krisp
|
||||||
|
|
||||||
|
- name: Verify installation
|
||||||
|
run: |
|
||||||
|
uv run python --version
|
||||||
|
uv run python -c "import pipecat; print('✅ Pipecat imports successfully')"
|
||||||
@@ -46,6 +46,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- Added Chinese, Japanese, Korean word timestamp support to
|
- Added Chinese, Japanese, Korean word timestamp support to
|
||||||
`CartesiaTTSService`.
|
`CartesiaTTSService`.
|
||||||
|
|
||||||
|
- Added `region` parameter to `GladiaSTTService`. Accepted values: eu-west (default), us-west.
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
||||||
- System frames are now queued. Before, system frames could be generated from
|
- System frames are now queued. Before, system frames could be generated from
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ FIREWORKS_API_KEY=...
|
|||||||
|
|
||||||
# Gladia
|
# Gladia
|
||||||
GLADIA_API_KEY=...
|
GLADIA_API_KEY=...
|
||||||
|
GLADIA_REGION=...
|
||||||
|
|
||||||
# Google
|
# Google
|
||||||
GOOGLE_API_KEY=...
|
GOOGLE_API_KEY=...
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
|
|||||||
|
|
||||||
stt = GladiaSTTService(
|
stt = GladiaSTTService(
|
||||||
api_key=os.getenv("GLADIA_API_KEY", ""),
|
api_key=os.getenv("GLADIA_API_KEY", ""),
|
||||||
|
region=os.getenv("GLADIA_REGION"),
|
||||||
params=GladiaInputParams(
|
params=GladiaInputParams(
|
||||||
language_config=LanguageConfig(
|
language_config=LanguageConfig(
|
||||||
languages=[Language.EN],
|
languages=[Language.EN],
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
|
|||||||
|
|
||||||
stt = GladiaSTTService(
|
stt = GladiaSTTService(
|
||||||
api_key=os.getenv("GLADIA_API_KEY"),
|
api_key=os.getenv("GLADIA_API_KEY"),
|
||||||
|
region=os.getenv("GLADIA_REGION"),
|
||||||
# live_options=LiveOptions(language=Language.FR),
|
# live_options=LiveOptions(language=Language.FR),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -56,6 +56,7 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
|
|||||||
|
|
||||||
stt = GladiaSTTService(
|
stt = GladiaSTTService(
|
||||||
api_key=os.getenv("GLADIA_API_KEY"),
|
api_key=os.getenv("GLADIA_API_KEY"),
|
||||||
|
region=os.getenv("GLADIA_REGION"),
|
||||||
params=GladiaInputParams(
|
params=GladiaInputParams(
|
||||||
language_config=LanguageConfig(
|
language_config=LanguageConfig(
|
||||||
languages=[Language.EN], # Input in English
|
languages=[Language.EN], # Input in English
|
||||||
|
|||||||
@@ -34,8 +34,6 @@ dependencies = [
|
|||||||
"resampy~=0.4.3",
|
"resampy~=0.4.3",
|
||||||
"soxr~=0.5.0",
|
"soxr~=0.5.0",
|
||||||
"openai>=1.74.0,<2",
|
"openai>=1.74.0,<2",
|
||||||
# Explicit dependency pins for Python 3.11+ compatibility
|
|
||||||
"numba>=0.60.0,<1",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[project.urls]
|
[project.urls]
|
||||||
|
|||||||
@@ -14,7 +14,8 @@ import asyncio
|
|||||||
import base64
|
import base64
|
||||||
import json
|
import json
|
||||||
import warnings
|
import warnings
|
||||||
from typing import Any, AsyncGenerator, Dict, Optional
|
from typing import Any, AsyncGenerator, Dict, Literal, Optional
|
||||||
|
from urllib.parse import urlencode
|
||||||
|
|
||||||
import aiohttp
|
import aiohttp
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
@@ -203,6 +204,7 @@ class GladiaSTTService(STTService):
|
|||||||
self,
|
self,
|
||||||
*,
|
*,
|
||||||
api_key: str,
|
api_key: str,
|
||||||
|
region: Optional[Literal["us-west", "eu-west"]] = "eu-west",
|
||||||
url: str = "https://api.gladia.io/v2/live",
|
url: str = "https://api.gladia.io/v2/live",
|
||||||
confidence: float = 0.5,
|
confidence: float = 0.5,
|
||||||
sample_rate: Optional[int] = None,
|
sample_rate: Optional[int] = None,
|
||||||
@@ -217,6 +219,7 @@ class GladiaSTTService(STTService):
|
|||||||
|
|
||||||
Args:
|
Args:
|
||||||
api_key: Gladia API key for authentication.
|
api_key: Gladia API key for authentication.
|
||||||
|
region: Region used to process audio. eu-west or us-west. Defaults to eu-west.
|
||||||
url: Gladia API URL. Defaults to "https://api.gladia.io/v2/live".
|
url: Gladia API URL. Defaults to "https://api.gladia.io/v2/live".
|
||||||
confidence: Minimum confidence threshold for transcriptions (0.0-1.0).
|
confidence: Minimum confidence threshold for transcriptions (0.0-1.0).
|
||||||
sample_rate: Audio sample rate in Hz. If None, uses service default.
|
sample_rate: Audio sample rate in Hz. If None, uses service default.
|
||||||
@@ -241,6 +244,7 @@ class GladiaSTTService(STTService):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self._api_key = api_key
|
self._api_key = api_key
|
||||||
|
self._region = region
|
||||||
self._url = url
|
self._url = url
|
||||||
self.set_model_name(model)
|
self.set_model_name(model)
|
||||||
self._confidence = confidence
|
self._confidence = confidence
|
||||||
@@ -337,6 +341,13 @@ class GladiaSTTService(STTService):
|
|||||||
|
|
||||||
return settings
|
return settings
|
||||||
|
|
||||||
|
def _get_endpoint_url(self) -> str:
|
||||||
|
query_params = dict()
|
||||||
|
query_params["region"] = self._region or "eu-west"
|
||||||
|
query = urlencode(query_params)
|
||||||
|
|
||||||
|
return f"{self._url}?{query}"
|
||||||
|
|
||||||
async def start(self, frame: StartFrame):
|
async def start(self, frame: StartFrame):
|
||||||
"""Start the Gladia STT websocket connection.
|
"""Start the Gladia STT websocket connection.
|
||||||
|
|
||||||
@@ -485,11 +496,13 @@ class GladiaSTTService(STTService):
|
|||||||
async def _setup_gladia(self, settings: Dict[str, Any]):
|
async def _setup_gladia(self, settings: Dict[str, Any]):
|
||||||
async with aiohttp.ClientSession() as session:
|
async with aiohttp.ClientSession() as session:
|
||||||
async with session.post(
|
async with session.post(
|
||||||
self._url,
|
self._get_endpoint_url(),
|
||||||
headers={"X-Gladia-Key": self._api_key, "Content-Type": "application/json"},
|
headers={"X-Gladia-Key": self._api_key, "Content-Type": "application/json"},
|
||||||
json=settings,
|
json=settings,
|
||||||
) as response:
|
) as response:
|
||||||
if response.ok:
|
if response.ok:
|
||||||
|
response_text = await response.json()
|
||||||
|
logger.error(f"Gladia response: {response_text}")
|
||||||
return await response.json()
|
return await response.json()
|
||||||
else:
|
else:
|
||||||
error_text = await response.text()
|
error_text = await response.text()
|
||||||
|
|||||||
4
uv.lock
generated
4
uv.lock
generated
@@ -4029,7 +4029,6 @@ dependencies = [
|
|||||||
{ name = "loguru" },
|
{ name = "loguru" },
|
||||||
{ name = "markdown" },
|
{ name = "markdown" },
|
||||||
{ name = "nltk" },
|
{ name = "nltk" },
|
||||||
{ name = "numba" },
|
|
||||||
{ name = "numpy" },
|
{ name = "numpy" },
|
||||||
{ name = "openai" },
|
{ name = "openai" },
|
||||||
{ name = "pillow" },
|
{ name = "pillow" },
|
||||||
@@ -4270,7 +4269,6 @@ requires-dist = [
|
|||||||
{ name = "mlx-whisper", marker = "extra == 'mlx-whisper'", specifier = "~=0.4.2" },
|
{ name = "mlx-whisper", marker = "extra == 'mlx-whisper'", specifier = "~=0.4.2" },
|
||||||
{ name = "nltk", specifier = ">=3.9.1,<4" },
|
{ name = "nltk", specifier = ">=3.9.1,<4" },
|
||||||
{ name = "noisereduce", marker = "extra == 'noisereduce'", specifier = "~=3.0.3" },
|
{ name = "noisereduce", marker = "extra == 'noisereduce'", specifier = "~=3.0.3" },
|
||||||
{ name = "numba", specifier = ">=0.60.0,<1" },
|
|
||||||
{ name = "numpy", specifier = ">=1.26.4,<3" },
|
{ name = "numpy", specifier = ">=1.26.4,<3" },
|
||||||
{ name = "nvidia-riva-client", marker = "extra == 'riva'", specifier = "~=2.21.1" },
|
{ name = "nvidia-riva-client", marker = "extra == 'riva'", specifier = "~=2.21.1" },
|
||||||
{ name = "onnxruntime", marker = "extra == 'silero'", specifier = "~=1.20.1" },
|
{ name = "onnxruntime", marker = "extra == 'silero'", specifier = "~=1.20.1" },
|
||||||
@@ -4337,7 +4335,7 @@ dev = [
|
|||||||
{ name = "pytest", specifier = "~=8.4.1" },
|
{ name = "pytest", specifier = "~=8.4.1" },
|
||||||
{ name = "pytest-aiohttp", specifier = "==1.1.0" },
|
{ name = "pytest-aiohttp", specifier = "==1.1.0" },
|
||||||
{ name = "pytest-asyncio", specifier = "~=1.0.0" },
|
{ name = "pytest-asyncio", specifier = "~=1.0.0" },
|
||||||
{ name = "python-dotenv", specifier = "~=1.1.1" },
|
{ name = "python-dotenv", specifier = ">=1.0.1,<2.0.0" },
|
||||||
{ name = "ruff", specifier = "~=0.12.1" },
|
{ name = "ruff", specifier = "~=0.12.1" },
|
||||||
{ name = "setuptools", specifier = "~=78.1.1" },
|
{ name = "setuptools", specifier = "~=78.1.1" },
|
||||||
{ name = "setuptools-scm", specifier = "~=8.3.1" },
|
{ name = "setuptools-scm", specifier = "~=8.3.1" },
|
||||||
|
|||||||
Reference in New Issue
Block a user