diff --git a/CHANGELOG.md b/CHANGELOG.md index 03bc4dae9..24502827d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,6 +43,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed `WebsocketClientTransport` to use `FrameProcessorSetup.task_manager` instead of `StartFrame.task_manager`. +### Performance + +- Use `uvloop` as the new event loop on Linux and macOS systems. + ## [0.0.68] - 2025-05-28 ### Added diff --git a/pyproject.toml b/pyproject.toml index f3567f68a..a0638a5b0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -31,7 +31,8 @@ dependencies = [ "pyloudnorm~=0.1.1", "resampy~=0.4.3", "soxr~=0.5.0", - "openai~=1.70.0" + "openai~=1.70.0", + "uvloop~=0.21.0; sys_platform!='win32'" ] [project.urls] diff --git a/src/pipecat/__init__.py b/src/pipecat/__init__.py index b1a9c7413..fe1bc421e 100644 --- a/src/pipecat/__init__.py +++ b/src/pipecat/__init__.py @@ -4,10 +4,26 @@ # SPDX-License-Identifier: BSD 2-Clause License # +import asyncio +import sys from importlib.metadata import version from loguru import logger __version__ = version("pipecat-ai") -logger.info(f"ᓚᘏᗢ Pipecat {__version__} ᓚᘏᗢ") +event_loop = "asyncio" + +if sys.platform in ("linux", "darwin"): + try: + import asyncio + + import uvloop + + event_loop = f"uvloop {uvloop.__version__}" + asyncio.set_event_loop_policy(uvloop.EventLoopPolicy()) + except ImportError: + logger.debug(f"Couldn't find `uvloop`") + pass + +logger.info(f"ᓚᘏᗢ Pipecat {__version__} ({event_loop}; Python {sys.version}) ᓚᘏᗢ")