Compare commits

...

4 Commits

Author SHA1 Message Date
Mark Backman
1d80c8d19e Remove explicit version pin for numba 2025-08-06 11:35:32 -04:00
Mark Backman
c93f2900e8 Add pyproject.toml compatiblity workflow to ensure pyproject.toml works across versions 2025-08-06 11:35:32 -04:00
Fabrice Lamant
a21a65587e Add new region feature for GladiaSTTService in CHANGELOG 2025-08-06 11:32:15 -04:00
Fabrice Lamant
a80002d3bd Add new region parameter to Gladia 2025-08-06 11:32:15 -04:00
9 changed files with 73 additions and 8 deletions

View 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')"

View File

@@ -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
`CartesiaTTSService`.
- Added `region` parameter to `GladiaSTTService`. Accepted values: eu-west (default), us-west.
### Changed
- System frames are now queued. Before, system frames could be generated from

View File

@@ -44,6 +44,7 @@ FIREWORKS_API_KEY=...
# Gladia
GLADIA_API_KEY=...
GLADIA_REGION=...
# Google
GOOGLE_API_KEY=...
@@ -135,4 +136,4 @@ SAMBANOVA_API_KEY=...
SENTRY_DSN=...
# Heygen
HEYGEN_API_KEY=...
HEYGEN_API_KEY=...

View File

@@ -55,6 +55,7 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
stt = GladiaSTTService(
api_key=os.getenv("GLADIA_API_KEY", ""),
region=os.getenv("GLADIA_REGION"),
params=GladiaInputParams(
language_config=LanguageConfig(
languages=[Language.EN],

View File

@@ -47,6 +47,7 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
stt = GladiaSTTService(
api_key=os.getenv("GLADIA_API_KEY"),
region=os.getenv("GLADIA_REGION"),
# live_options=LiveOptions(language=Language.FR),
)

View File

@@ -56,6 +56,7 @@ async def run_bot(transport: BaseTransport, runner_args: RunnerArguments):
stt = GladiaSTTService(
api_key=os.getenv("GLADIA_API_KEY"),
region=os.getenv("GLADIA_REGION"),
params=GladiaInputParams(
language_config=LanguageConfig(
languages=[Language.EN], # Input in English

View File

@@ -34,8 +34,6 @@ dependencies = [
"resampy~=0.4.3",
"soxr~=0.5.0",
"openai>=1.74.0,<2",
# Explicit dependency pins for Python 3.11+ compatibility
"numba>=0.60.0,<1",
]
[project.urls]

View File

@@ -14,7 +14,8 @@ import asyncio
import base64
import json
import warnings
from typing import Any, AsyncGenerator, Dict, Optional
from typing import Any, AsyncGenerator, Dict, Literal, Optional
from urllib.parse import urlencode
import aiohttp
from loguru import logger
@@ -203,6 +204,7 @@ class GladiaSTTService(STTService):
self,
*,
api_key: str,
region: Optional[Literal["us-west", "eu-west"]] = "eu-west",
url: str = "https://api.gladia.io/v2/live",
confidence: float = 0.5,
sample_rate: Optional[int] = None,
@@ -217,6 +219,7 @@ class GladiaSTTService(STTService):
Args:
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".
confidence: Minimum confidence threshold for transcriptions (0.0-1.0).
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._region = region
self._url = url
self.set_model_name(model)
self._confidence = confidence
@@ -337,6 +341,13 @@ class GladiaSTTService(STTService):
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):
"""Start the Gladia STT websocket connection.
@@ -485,11 +496,13 @@ class GladiaSTTService(STTService):
async def _setup_gladia(self, settings: Dict[str, Any]):
async with aiohttp.ClientSession() as session:
async with session.post(
self._url,
self._get_endpoint_url(),
headers={"X-Gladia-Key": self._api_key, "Content-Type": "application/json"},
json=settings,
) as response:
if response.ok:
response_text = await response.json()
logger.error(f"Gladia response: {response_text}")
return await response.json()
else:
error_text = await response.text()

4
uv.lock generated
View File

@@ -4029,7 +4029,6 @@ dependencies = [
{ name = "loguru" },
{ name = "markdown" },
{ name = "nltk" },
{ name = "numba" },
{ name = "numpy" },
{ name = "openai" },
{ name = "pillow" },
@@ -4270,7 +4269,6 @@ requires-dist = [
{ name = "mlx-whisper", marker = "extra == 'mlx-whisper'", specifier = "~=0.4.2" },
{ name = "nltk", specifier = ">=3.9.1,<4" },
{ name = "noisereduce", marker = "extra == 'noisereduce'", specifier = "~=3.0.3" },
{ name = "numba", specifier = ">=0.60.0,<1" },
{ name = "numpy", specifier = ">=1.26.4,<3" },
{ name = "nvidia-riva-client", marker = "extra == 'riva'", specifier = "~=2.21.1" },
{ name = "onnxruntime", marker = "extra == 'silero'", specifier = "~=1.20.1" },
@@ -4337,7 +4335,7 @@ dev = [
{ name = "pytest", specifier = "~=8.4.1" },
{ name = "pytest-aiohttp", specifier = "==1.1.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 = "setuptools", specifier = "~=78.1.1" },
{ name = "setuptools-scm", specifier = "~=8.3.1" },