diff --git a/changelog/4191.removed.md b/changelog/4191.removed.md new file mode 100644 index 000000000..d58fc3886 --- /dev/null +++ b/changelog/4191.removed.md @@ -0,0 +1 @@ +- ⚠️ Removed `OpenPipeLLMService` and the `openpipe` extra. OpenPipe was acquired by CoreWeave and the package is no longer maintained. If you were using `openpipe` as an LLM provider, switch to the underlying provider directly (e.g. `openai`). The OpenPipe interface can still be used with `OpenAILLMService` by specifying a `base_url`. diff --git a/docs/api/conf.py b/docs/api/conf.py index 5f7a3c2dc..1bc688efe 100644 --- a/docs/api/conf.py +++ b/docs/api/conf.py @@ -98,7 +98,6 @@ autodoc_mock_imports = [ "cartesia", "camb", "sarvamai", - "openpipe", "openai.types.beta.realtime", "langchain_core", "langchain_core.messages", diff --git a/env.example b/env.example index 183fd23ba..c59a94f8c 100644 --- a/env.example +++ b/env.example @@ -136,9 +136,6 @@ NVIDIA_API_KEY=... # OpenAI OPENAI_API_KEY=... -# OpenPipe -OPENPIPE_API_KEY=... - # OpenRouter OPENROUTER_API_KEY=... diff --git a/examples/foundational/07h-interruptible-openpipe.py b/examples/foundational/07h-interruptible-openpipe.py deleted file mode 100644 index e904b8f55..000000000 --- a/examples/foundational/07h-interruptible-openpipe.py +++ /dev/null @@ -1,130 +0,0 @@ -# -# Copyright (c) 2024-2026, Daily -# -# SPDX-License-Identifier: BSD 2-Clause License -# - - -import os -import time - -from dotenv import load_dotenv -from loguru import logger - -from pipecat.audio.vad.silero import SileroVADAnalyzer -from pipecat.frames.frames import LLMRunFrame -from pipecat.pipeline.pipeline import Pipeline -from pipecat.pipeline.runner import PipelineRunner -from pipecat.pipeline.task import PipelineParams, PipelineTask -from pipecat.processors.aggregators.llm_context import LLMContext -from pipecat.processors.aggregators.llm_response_universal import ( - LLMContextAggregatorPair, - LLMUserAggregatorParams, -) -from pipecat.runner.types import RunnerArguments -from pipecat.runner.utils import create_transport -from pipecat.services.cartesia.tts import CartesiaTTSService -from pipecat.services.deepgram.stt import DeepgramSTTService -from pipecat.services.openpipe.llm import OpenPipeLLMService -from pipecat.transports.base_transport import BaseTransport, TransportParams -from pipecat.transports.daily.transport import DailyParams -from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams - -load_dotenv(override=True) - -# We use lambdas to defer transport parameter creation until the transport -# type is selected at runtime. -transport_params = { - "daily": lambda: DailyParams( - audio_in_enabled=True, - audio_out_enabled=True, - ), - "twilio": lambda: FastAPIWebsocketParams( - audio_in_enabled=True, - audio_out_enabled=True, - ), - "webrtc": lambda: TransportParams( - audio_in_enabled=True, - audio_out_enabled=True, - ), -} - - -async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): - logger.info(f"Starting bot") - - stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY")) - - tts = CartesiaTTSService( - api_key=os.getenv("CARTESIA_API_KEY"), - settings=CartesiaTTSService.Settings( - voice="71a7ad14-091c-4e8e-a314-022ece01c121", # British Reading Lady - ), - ) - - timestamp = int(time.time()) - llm = OpenPipeLLMService( - api_key=os.getenv("OPENAI_API_KEY"), - openpipe_api_key=os.getenv("OPENPIPE_API_KEY"), - tags={"conversation_id": f"pipecat-{timestamp}"}, - settings=OpenPipeLLMService.Settings( - system_instruction="You are a helpful assistant in a voice conversation. Your responses will be spoken aloud, so avoid emojis, bullet points, or other formatting that can't be spoken. Respond to what the user said in a creative, helpful, and brief way.", - ), - ) - - context = LLMContext() - user_aggregator, assistant_aggregator = LLMContextAggregatorPair( - context, - user_params=LLMUserAggregatorParams(vad_analyzer=SileroVADAnalyzer()), - ) - - pipeline = Pipeline( - [ - transport.input(), # Transport user input - stt, - user_aggregator, # User responses - llm, # LLM - tts, # TTS - transport.output(), # Transport bot output - assistant_aggregator, # Assistant spoken responses - ] - ) - - task = PipelineTask( - pipeline, - params=PipelineParams( - enable_metrics=True, - enable_usage_metrics=True, - ), - idle_timeout_secs=runner_args.pipeline_idle_timeout_secs, - ) - - @transport.event_handler("on_client_connected") - async def on_client_connected(transport, client): - logger.info(f"Client connected") - # Kick off the conversation. - context.add_message( - {"role": "developer", "content": "Please introduce yourself to the user."} - ) - await task.queue_frames([LLMRunFrame()]) - - @transport.event_handler("on_client_disconnected") - async def on_client_disconnected(transport, client): - logger.info(f"Client disconnected") - await task.cancel() - - runner = PipelineRunner(handle_sigint=runner_args.handle_sigint) - - await runner.run(task) - - -async def bot(runner_args: RunnerArguments): - """Main bot entry point compatible with Pipecat Cloud.""" - transport = await create_transport(runner_args, transport_params) - await run_bot(transport, runner_args) - - -if __name__ == "__main__": - from pipecat.runner.run import main - - main() diff --git a/examples/foundational/14x-function-calling-openpipe.py b/examples/foundational/14x-function-calling-openpipe.py deleted file mode 100644 index 5074bda2f..000000000 --- a/examples/foundational/14x-function-calling-openpipe.py +++ /dev/null @@ -1,176 +0,0 @@ -# -# Copyright (c) 2024-2026, Daily -# -# SPDX-License-Identifier: BSD 2-Clause License -# - -import os -import time - -from dotenv import load_dotenv -from loguru import logger - -from pipecat.adapters.schemas.function_schema import FunctionSchema -from pipecat.adapters.schemas.tools_schema import ToolsSchema -from pipecat.audio.vad.silero import SileroVADAnalyzer -from pipecat.frames.frames import LLMRunFrame, TTSSpeakFrame -from pipecat.pipeline.pipeline import Pipeline -from pipecat.pipeline.runner import PipelineRunner -from pipecat.pipeline.task import PipelineParams, PipelineTask -from pipecat.processors.aggregators.llm_context import LLMContext -from pipecat.processors.aggregators.llm_response_universal import ( - LLMContextAggregatorPair, - LLMUserAggregatorParams, -) -from pipecat.runner.types import RunnerArguments -from pipecat.runner.utils import create_transport -from pipecat.services.cartesia.tts import CartesiaTTSService -from pipecat.services.deepgram.stt import DeepgramSTTService -from pipecat.services.llm_service import FunctionCallParams -from pipecat.services.openpipe.llm import OpenPipeLLMService -from pipecat.transports.base_transport import BaseTransport, TransportParams -from pipecat.transports.daily.transport import DailyParams -from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams - -load_dotenv(override=True) - - -async def fetch_weather_from_api(params: FunctionCallParams): - await params.result_callback({"conditions": "nice", "temperature": "75"}) - - -async def fetch_restaurant_recommendation(params: FunctionCallParams): - await params.result_callback({"name": "The Golden Dragon"}) - - -# We use lambdas to defer transport parameter creation until the transport -# type is selected at runtime. -transport_params = { - "daily": lambda: DailyParams( - audio_in_enabled=True, - audio_out_enabled=True, - ), - "twilio": lambda: FastAPIWebsocketParams( - audio_in_enabled=True, - audio_out_enabled=True, - ), - "webrtc": lambda: TransportParams( - audio_in_enabled=True, - audio_out_enabled=True, - ), -} - - -async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): - logger.info(f"Starting bot") - - stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY")) - - tts = CartesiaTTSService( - api_key=os.getenv("CARTESIA_API_KEY"), - settings=CartesiaTTSService.Settings( - voice="71a7ad14-091c-4e8e-a314-022ece01c121", # British Reading Lady - ), - ) - - timestamp = int(time.time()) - llm = OpenPipeLLMService( - api_key=os.getenv("OPENAI_API_KEY"), - openpipe_api_key=os.getenv("OPENPIPE_API_KEY"), - tags={"conversation_id": f"pipecat-{timestamp}"}, - settings=OpenPipeLLMService.Settings( - system_instruction="You are a helpful assistant in a voice conversation. Your responses will be spoken aloud, so avoid emojis, bullet points, or other formatting that can't be spoken. Respond to what the user said in a creative, helpful, and brief way.", - ), - ) - - # You can also register a function_name of None to get all functions - # sent to the same callback with an additional function_name parameter. - llm.register_function("get_current_weather", fetch_weather_from_api) - llm.register_function("get_restaurant_recommendation", fetch_restaurant_recommendation) - - @llm.event_handler("on_function_calls_started") - async def on_function_calls_started(service, function_calls): - await tts.queue_frame(TTSSpeakFrame("Let me check on that.")) - - weather_function = FunctionSchema( - name="get_current_weather", - description="Get the current weather", - properties={ - "location": { - "type": "string", - "description": "The city and state, e.g. San Francisco, CA", - }, - "format": { - "type": "string", - "enum": ["celsius", "fahrenheit"], - "description": "The temperature unit to use. Infer this from the user's location.", - }, - }, - required=["location", "format"], - ) - restaurant_function = FunctionSchema( - name="get_restaurant_recommendation", - description="Get a restaurant recommendation", - properties={ - "location": { - "type": "string", - "description": "The city and state, e.g. San Francisco, CA", - }, - }, - required=["location"], - ) - tools = ToolsSchema(standard_tools=[weather_function, restaurant_function]) - - context = LLMContext(tools=tools) - user_aggregator, assistant_aggregator = LLMContextAggregatorPair( - context, - user_params=LLMUserAggregatorParams(vad_analyzer=SileroVADAnalyzer()), - ) - - pipeline = Pipeline( - [ - transport.input(), - stt, - user_aggregator, - llm, - tts, - transport.output(), - assistant_aggregator, - ] - ) - - task = PipelineTask( - pipeline, - params=PipelineParams( - enable_metrics=True, - enable_usage_metrics=True, - ), - idle_timeout_secs=runner_args.pipeline_idle_timeout_secs, - ) - - @transport.event_handler("on_client_connected") - async def on_client_connected(transport, client): - logger.info(f"Client connected") - # Kick off the conversation. - await task.queue_frames([LLMRunFrame()]) - - @transport.event_handler("on_client_disconnected") - async def on_client_disconnected(transport, client): - logger.info(f"Client disconnected") - await task.cancel() - - runner = PipelineRunner(handle_sigint=runner_args.handle_sigint) - - await runner.run(task) - - -async def bot(runner_args: RunnerArguments): - """Main bot entry point compatible with Pipecat Cloud.""" - transport = await create_transport(runner_args, transport_params) - await run_bot(transport, runner_args) - - -if __name__ == "__main__": - from pipecat.runner.run import main - - main() diff --git a/examples/foundational/55zzo-update-settings-openpipe-llm.py b/examples/foundational/55zzo-update-settings-openpipe-llm.py deleted file mode 100644 index d7b554c15..000000000 --- a/examples/foundational/55zzo-update-settings-openpipe-llm.py +++ /dev/null @@ -1,133 +0,0 @@ -# -# Copyright (c) 2024-2026, Daily -# -# SPDX-License-Identifier: BSD 2-Clause License -# - -import asyncio -import os -import time - -from dotenv import load_dotenv -from loguru import logger - -from pipecat.audio.vad.silero import SileroVADAnalyzer -from pipecat.frames.frames import LLMRunFrame, LLMUpdateSettingsFrame -from pipecat.pipeline.pipeline import Pipeline -from pipecat.pipeline.runner import PipelineRunner -from pipecat.pipeline.task import PipelineParams, PipelineTask -from pipecat.processors.aggregators.llm_context import LLMContext -from pipecat.processors.aggregators.llm_response_universal import ( - LLMContextAggregatorPair, - LLMUserAggregatorParams, -) -from pipecat.runner.types import RunnerArguments -from pipecat.runner.utils import create_transport -from pipecat.services.cartesia.tts import CartesiaTTSService -from pipecat.services.deepgram.stt import DeepgramSTTService -from pipecat.services.openpipe.llm import OpenPipeLLMService -from pipecat.transports.base_transport import BaseTransport, TransportParams -from pipecat.transports.daily.transport import DailyParams -from pipecat.transports.websocket.fastapi import FastAPIWebsocketParams - -load_dotenv(override=True) - -transport_params = { - "daily": lambda: DailyParams( - audio_in_enabled=True, - audio_out_enabled=True, - ), - "twilio": lambda: FastAPIWebsocketParams( - audio_in_enabled=True, - audio_out_enabled=True, - ), - "webrtc": lambda: TransportParams( - audio_in_enabled=True, - audio_out_enabled=True, - ), -} - - -async def run_bot(transport: BaseTransport, runner_args: RunnerArguments): - logger.info(f"Starting bot") - - stt = DeepgramSTTService(api_key=os.getenv("DEEPGRAM_API_KEY")) - - tts = CartesiaTTSService( - api_key=os.getenv("CARTESIA_API_KEY"), - settings=CartesiaTTSService.Settings( - voice="71a7ad14-091c-4e8e-a314-022ece01c121", # British Reading Lady - ), - ) - - timestamp = int(time.time()) - llm = OpenPipeLLMService( - api_key=os.getenv("OPENAI_API_KEY"), - openpipe_api_key=os.getenv("OPENPIPE_API_KEY"), - tags={"conversation_id": f"pipecat-{timestamp}"}, - settings=OpenPipeLLMService.Settings( - system_instruction="You are a helpful assistant in a voice conversation. Your responses will be spoken aloud, so avoid emojis, bullet points, or other formatting that can't be spoken. Respond to what the user said in a creative, helpful, and brief way.", - ), - ) - - context = LLMContext() - user_aggregator, assistant_aggregator = LLMContextAggregatorPair( - context, - user_params=LLMUserAggregatorParams(vad_analyzer=SileroVADAnalyzer()), - ) - - pipeline = Pipeline( - [ - transport.input(), - stt, - user_aggregator, - llm, - tts, - transport.output(), - assistant_aggregator, - ] - ) - - task = PipelineTask( - pipeline, - params=PipelineParams( - enable_metrics=True, - enable_usage_metrics=True, - ), - idle_timeout_secs=runner_args.pipeline_idle_timeout_secs, - ) - - @transport.event_handler("on_client_connected") - async def on_client_connected(transport, client): - logger.info(f"Client connected") - context.add_message( - {"role": "developer", "content": "Please introduce yourself to the user."} - ) - await task.queue_frames([LLMRunFrame()]) - - await asyncio.sleep(10) - logger.info("Updating OpenPipe LLM settings: temperature=0.1") - await task.queue_frame( - LLMUpdateSettingsFrame(delta=OpenPipeLLMService.Settings(temperature=0.1)) - ) - - @transport.event_handler("on_client_disconnected") - async def on_client_disconnected(transport, client): - logger.info(f"Client disconnected") - await task.cancel() - - runner = PipelineRunner(handle_sigint=runner_args.handle_sigint) - - await runner.run(task) - - -async def bot(runner_args: RunnerArguments): - """Main bot entry point compatible with Pipecat Cloud.""" - transport = await create_transport(runner_args, transport_params) - await run_bot(transport, runner_args) - - -if __name__ == "__main__": - from pipecat.runner.run import main - - main() diff --git a/pyproject.toml b/pyproject.toml index 4893e48f5..f26ffe819 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -99,7 +99,6 @@ novita = [] nvidia = [ "nvidia-riva-client>=2.25.1,<3" ] openai = [ "pipecat-ai[websockets-base]" ] rnnoise = [ "pyrnnoise~=0.4.1" ] -openpipe = [ "openpipe>=4.50.0,<6" ] openrouter = [] perplexity = [] piper = [ "piper-tts>=1.3.0,<2", "requests>=2.32.5,<3" ] diff --git a/scripts/evals/run-release-evals.py b/scripts/evals/run-release-evals.py index c51409b7c..cfd4b08ee 100644 --- a/scripts/evals/run-release-evals.py +++ b/scripts/evals/run-release-evals.py @@ -113,7 +113,6 @@ TESTS_07 = [ ("07f-interruptible-azure-http.py", EVAL_SIMPLE_MATH), ("07g-interruptible-openai.py", EVAL_SIMPLE_MATH), ("07g-interruptible-openai-http.py", EVAL_SIMPLE_MATH), - ("07h-interruptible-openpipe.py", EVAL_SIMPLE_MATH), ("07j-interruptible-gladia.py", EVAL_SIMPLE_MATH), ("07j-interruptible-gladia-vad.py", EVAL_SIMPLE_MATH), ("07k-interruptible-lmnt.py", EVAL_SIMPLE_MATH), @@ -191,7 +190,6 @@ TESTS_14 = [ ("14r-function-calling-aws.py", EVAL_WEATHER_AND_RESTAURANT), ("14v-function-calling-nebius.py", EVAL_WEATHER), ("14w-function-calling-mistral.py", EVAL_WEATHER), - ("14x-function-calling-openpipe.py", EVAL_WEATHER), ("14y-function-calling-sarvam.py", EVAL_WEATHER), ("14z-function-calling-novita.py", EVAL_WEATHER), # Video diff --git a/src/pipecat/services/openpipe/__init__.py b/src/pipecat/services/openpipe/__init__.py deleted file mode 100644 index 9c1dafedf..000000000 --- a/src/pipecat/services/openpipe/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -# -# Copyright (c) 2024-2026, Daily -# -# SPDX-License-Identifier: BSD 2-Clause License -# - -import sys - -from pipecat.services import DeprecatedModuleProxy - -from .llm import * - -sys.modules[__name__] = DeprecatedModuleProxy(globals(), "openpipe", "openpipe.llm") diff --git a/src/pipecat/services/openpipe/llm.py b/src/pipecat/services/openpipe/llm.py deleted file mode 100644 index 0a8fd9044..000000000 --- a/src/pipecat/services/openpipe/llm.py +++ /dev/null @@ -1,143 +0,0 @@ -# -# Copyright (c) 2024-2026, Daily -# -# SPDX-License-Identifier: BSD 2-Clause License -# - -"""OpenPipe LLM service implementation for Pipecat. - -This module provides an OpenPipe-specific implementation of the OpenAI LLM service, -enabling integration with OpenPipe's fine-tuning and monitoring capabilities. -""" - -from dataclasses import dataclass -from typing import Dict, Optional - -from loguru import logger - -from pipecat.adapters.services.open_ai_adapter import OpenAILLMInvocationParams -from pipecat.services.openai.base_llm import BaseOpenAILLMService -from pipecat.services.openai.llm import OpenAILLMService - -try: - from openpipe import AsyncOpenAI as OpenPipeAI -except ModuleNotFoundError as e: - logger.error(f"Exception: {e}") - logger.error("In order to use OpenPipe, you need to `pip install pipecat-ai[openpipe]`.") - raise Exception(f"Missing module: {e}") - - -@dataclass -class OpenPipeLLMSettings(BaseOpenAILLMService.Settings): - """Settings for OpenPipeLLMService.""" - - pass - - -class OpenPipeLLMService(OpenAILLMService): - """OpenPipe-powered Large Language Model service. - - Extends OpenAI's LLM service to integrate with OpenPipe's fine-tuning and - monitoring platform. Provides enhanced request logging and tagging capabilities - for model training and evaluation. - """ - - Settings = OpenPipeLLMSettings - _settings: Settings - - def __init__( - self, - *, - model: Optional[str] = None, - api_key: Optional[str] = None, - base_url: Optional[str] = None, - openpipe_api_key: Optional[str] = None, - openpipe_base_url: str = "https://app.openpipe.ai/api/v1", - tags: Optional[Dict[str, str]] = None, - settings: Optional[Settings] = None, - **kwargs, - ): - """Initialize OpenPipe LLM service. - - Args: - model: The model name to use. Defaults to "gpt-4.1". - - .. deprecated:: 0.0.105 - Use ``settings=OpenPipeLLMService.Settings(model=...)`` instead. - - api_key: OpenAI API key for authentication. If None, reads from environment. - base_url: Custom OpenAI API endpoint URL. Uses default if None. - openpipe_api_key: OpenPipe API key for enhanced features. If None, reads from environment. - openpipe_base_url: OpenPipe API endpoint URL. Defaults to "https://app.openpipe.ai/api/v1". - tags: Optional dictionary of tags to apply to all requests for tracking. - settings: Runtime-updatable settings. When provided alongside deprecated - parameters, ``settings`` values take precedence. - **kwargs: Additional arguments passed to parent OpenAILLMService. - """ - # 1. Initialize default_settings with hardcoded defaults - default_settings = self.Settings(model="gpt-4.1") - - # 2. Apply direct init arg overrides (deprecated) - if model is not None: - self._warn_init_param_moved_to_settings("model", "model") - default_settings.model = model - - # 3. (No step 3, as there's no params object to apply) - - # 4. Apply settings delta (canonical API, always wins) - if settings is not None: - default_settings.apply_update(settings) - - super().__init__( - api_key=api_key, - base_url=base_url, - openpipe_api_key=openpipe_api_key, - openpipe_base_url=openpipe_base_url, - settings=default_settings, - **kwargs, - ) - self._tags = tags - - def create_client(self, api_key=None, base_url=None, **kwargs): - """Create an OpenPipe client instance. - - Args: - api_key: OpenAI API key for authentication. - base_url: OpenAI API base URL. - **kwargs: Additional arguments including openpipe_api_key and openpipe_base_url. - - Returns: - Configured OpenPipe AsyncOpenAI client instance. - """ - openpipe_api_key = kwargs.get("openpipe_api_key") or "" - openpipe_base_url = kwargs.get("openpipe_base_url") or "" - client = OpenPipeAI( - api_key=api_key, - base_url=base_url, - openpipe={"api_key": openpipe_api_key, "base_url": openpipe_base_url}, - ) - return client - - def build_chat_completion_params(self, params_from_context: OpenAILLMInvocationParams) -> dict: - """Build parameters for OpenPipe chat completion request. - - Adds OpenPipe-specific logging and tagging parameters. - - Args: - params_from_context: Parameters, derived from the LLM context, to - use for the chat completion. Contains messages, tools, and tool - choice. - - Returns: - Dictionary of parameters for the chat completion request. - """ - # Start with base parameters - params = super().build_chat_completion_params(params_from_context) - - # Add OpenPipe-specific parameters - params["openpipe"] = { - "tags": self._tags, - "log_request": True, - } - - return params diff --git a/uv.lock b/uv.lock index 735c68b4f..cda88cdd3 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 2 +revision = 3 requires-python = ">=3.10" resolution-markers = [ "python_full_version >= '3.14'", @@ -4251,22 +4251,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e9/a5/1be1516390333ff9be3a9cb648c9f33df79d5096e5884b5df71a588af463/opencv_python-4.13.0.92-cp37-abi3-win_amd64.whl", hash = "sha256:423d934c9fafb91aad38edf26efb46da91ffbc05f3f59c4b0c72e699720706f5", size = 40212062, upload-time = "2026-02-05T07:02:12.724Z" }, ] -[[package]] -name = "openpipe" -version = "5.0.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "anthropic" }, - { name = "attrs" }, - { name = "httpx" }, - { name = "openai" }, - { name = "python-dateutil" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/7c/34/b487bc0ff60d3ed634e6f7bc34b5138f04e6ae319cc6578001822df93901/openpipe-5.0.0.tar.gz", hash = "sha256:040acc526fece42ba505fcedd8cd584f42482c9bd01f16b2538c9ea9c82882f4", size = 98910, upload-time = "2025-07-31T01:36:29.482Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7a/5e/516010c25a32884a87e1f8303a292f3981fa382cc7570a9ed88fb28681d5/openpipe-5.0.0-py3-none-any.whl", hash = "sha256:c04af7afb4d9bcd52e1250757dd93d0e0ed19c9ff4b524f131dd94aadf4c1a9b", size = 439951, upload-time = "2025-07-31T01:36:28.003Z" }, -] - [[package]] name = "opentelemetry-api" version = "1.40.0" @@ -4781,9 +4765,6 @@ nvidia = [ openai = [ { name = "websockets" }, ] -openpipe = [ - { name = "openpipe" }, -] piper = [ { name = "piper-tts" }, { name = "requests" }, @@ -4933,7 +4914,6 @@ requires-dist = [ { name = "onnxruntime", specifier = "~=1.23.2" }, { name = "openai", specifier = ">=1.74.0,<3" }, { name = "opencv-python", marker = "extra == 'webrtc'", specifier = ">=4.11.0.86,<5" }, - { name = "openpipe", marker = "extra == 'openpipe'", specifier = ">=4.50.0,<6" }, { name = "opentelemetry-api", marker = "extra == 'tracing'", specifier = ">=1.33.0,<2" }, { name = "opentelemetry-instrumentation", marker = "extra == 'tracing'", specifier = ">=0.54b0,<1" }, { name = "opentelemetry-sdk", marker = "extra == 'tracing'", specifier = ">=1.33.0,<2" }, @@ -4996,7 +4976,7 @@ requires-dist = [ { name = "wait-for2", marker = "python_full_version < '3.12'", specifier = ">=0.4.1,<1" }, { name = "websockets", marker = "extra == 'websockets-base'", specifier = ">=13.1,<16.0" }, ] -provides-extras = ["aic", "anthropic", "assemblyai", "asyncai", "aws", "aws-nova-sonic", "azure", "cartesia", "camb", "cerebras", "daily", "deepgram", "deepseek", "nebius", "elevenlabs", "fal", "fireworks", "fish", "gladia", "google", "gradium", "grok", "groq", "gstreamer", "heygen", "hume", "inworld", "koala", "kokoro", "krisp", "langchain", "lemonslice", "livekit", "lmnt", "local", "local-smart-turn", "mcp", "mem0", "mistral", "mlx-whisper", "moondream", "neuphonic", "noisereduce", "novita", "nvidia", "openai", "rnnoise", "openpipe", "openrouter", "perplexity", "piper", "qwen", "remote-smart-turn", "resembleai", "rime", "riva", "runner", "sagemaker", "sambanova", "sarvam", "sentry", "silero", "simli", "smallest", "soniox", "soundfile", "speechmatics", "strands", "tavus", "together", "tracing", "ultravox", "webrtc", "websocket", "websockets-base", "whisper", "xai"] +provides-extras = ["aic", "anthropic", "assemblyai", "asyncai", "aws", "aws-nova-sonic", "azure", "cartesia", "camb", "cerebras", "daily", "deepgram", "deepseek", "elevenlabs", "fal", "fireworks", "fish", "gladia", "google", "gradium", "grok", "groq", "gstreamer", "heygen", "hume", "inworld", "koala", "kokoro", "krisp", "langchain", "lemonslice", "livekit", "lmnt", "local", "local-smart-turn", "mcp", "mem0", "mistral", "mlx-whisper", "moondream", "nebius", "neuphonic", "noisereduce", "novita", "nvidia", "openai", "rnnoise", "openrouter", "perplexity", "piper", "qwen", "remote-smart-turn", "resembleai", "rime", "riva", "runner", "sagemaker", "sambanova", "sarvam", "sentry", "silero", "simli", "smallest", "soniox", "soundfile", "speechmatics", "strands", "tavus", "together", "tracing", "ultravox", "webrtc", "websocket", "websockets-base", "whisper", "xai"] [package.metadata.requires-dev] dev = [