diff --git a/examples/voice/static/main.py b/examples/voice/static/main.py index 5f512db7..4e3840fc 100644 --- a/examples/voice/static/main.py +++ b/examples/voice/static/main.py @@ -1,15 +1,14 @@ import asyncio import random -from agents import ( - Agent, +from agents import Agent, function_tool +from agents.extensions.handoff_prompt import prompt_with_handoff_instructions +from agents.voice import ( AudioInput, SingleAgentVoiceWorkflow, SingleAgentWorkflowCallbacks, VoicePipeline, - function_tool, ) -from agents.extensions.handoff_prompt import prompt_with_handoff_instructions from .util import AudioPlayer, record_audio diff --git a/examples/voice/streamed/agents.py b/examples/voice/streamed/agents.py index dcf312d7..3cb804b0 100644 --- a/examples/voice/streamed/agents.py +++ b/examples/voice/streamed/agents.py @@ -2,15 +2,9 @@ from collections.abc import AsyncIterator from typing import Callable -from agents import ( - Agent, - Runner, - TResponseInputItem, - VoiceWorkflowBase, - VoiceWorkflowHelper, - function_tool, -) +from agents import Agent, Runner, TResponseInputItem, function_tool from agents.extensions.handoff_prompt import prompt_with_handoff_instructions +from agents.voice import VoiceWorkflowBase, VoiceWorkflowHelper @function_tool diff --git a/examples/voice/streamed/main.py b/examples/voice/streamed/main.py index 36894338..aef3b36e 100644 --- a/examples/voice/streamed/main.py +++ b/examples/voice/streamed/main.py @@ -11,8 +11,7 @@ from textual.widgets import Button, RichLog, Static from typing_extensions import override -from agents import VoicePipeline -from agents.voice.input import StreamedAudioInput +from agents.voice import StreamedAudioInput, VoicePipeline from .agents import MyWorkflow diff --git a/pyproject.toml b/pyproject.toml index 9d0d8c55..7567013b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,6 +54,7 @@ dev = [ "sounddevice", "pynput", "textual", + "websockets", ] [tool.uv.workspace] members = ["agents"] diff --git a/src/agents/__init__.py b/src/agents/__init__.py index c0b47dc8..47bb2649 100644 --- a/src/agents/__init__.py +++ b/src/agents/__init__.py @@ -98,31 +98,6 @@ transcription_span, ) from .usage import Usage -from .voice import ( - AudioInput, - OpenAISTTModel, - OpenAISTTTranscriptionSession, - OpenAITTSModel, - OpenAIVoiceModelProvider, - SingleAgentVoiceWorkflow, - SingleAgentWorkflowCallbacks, - StreamedAudioInput, - StreamedAudioResult, - StreamedTranscriptionSession, - STTModel, - STTModelSettings, - TTSModel, - TTSModelSettings, - VoiceModelProvider, - VoicePipeline, - VoicePipelineConfig, - VoiceStreamEvent, - VoiceStreamEventAudio, - VoiceStreamEventLifecycle, - VoiceWorkflowBase, - VoiceWorkflowHelper, - get_sentence_based_splitter, -) def set_default_openai_key(key: str, use_for_tracing: bool = True) -> None: @@ -268,27 +243,4 @@ def enable_verbose_stdout_logging(): "gen_trace_id", "gen_span_id", "default_tool_error_function", - "AudioInput", - "StreamedAudioInput", - "STTModel", - "STTModelSettings", - "TTSModel", - "TTSModelSettings", - "VoiceModelProvider", - "StreamedAudioResult", - "SingleAgentVoiceWorkflow", - "OpenAIVoiceModelProvider", - "OpenAISTTModel", - "OpenAITTSModel", - "VoiceStreamEventAudio", - "VoiceStreamEventLifecycle", - "VoiceStreamEvent", - "VoicePipeline", - "VoicePipelineConfig", - "get_sentence_based_splitter", - "VoiceWorkflowHelper", - "VoiceWorkflowBase", - "StreamedTranscriptionSession", - "OpenAISTTTranscriptionSession", - "SingleAgentWorkflowCallbacks", ] diff --git a/tests/voice/fake_models.py b/tests/voice/fake_models.py index 3febe428..109ee4cb 100644 --- a/tests/voice/fake_models.py +++ b/tests/voice/fake_models.py @@ -6,16 +6,19 @@ import numpy as np import numpy.typing as npt -from agents.voice import ( - AudioInput, - StreamedAudioInput, - StreamedTranscriptionSession, - STTModel, - STTModelSettings, - TTSModel, - TTSModelSettings, - VoiceWorkflowBase, -) +try: + from agents.voice import ( + AudioInput, + StreamedAudioInput, + StreamedTranscriptionSession, + STTModel, + STTModelSettings, + TTSModel, + TTSModelSettings, + VoiceWorkflowBase, + ) +except ImportError: + pass class FakeTTS(TTSModel): diff --git a/tests/voice/helpers.py b/tests/voice/helpers.py index d2f9ca2e..ae902dc1 100644 --- a/tests/voice/helpers.py +++ b/tests/voice/helpers.py @@ -1,4 +1,7 @@ -from agents.voice import StreamedAudioResult +try: + from agents.voice import StreamedAudioResult +except ImportError: + pass async def extract_events(result: StreamedAudioResult) -> tuple[list[str], list[bytes]]: diff --git a/tests/voice/test_input.py b/tests/voice/test_input.py index 7d4197b5..d41d870d 100644 --- a/tests/voice/test_input.py +++ b/tests/voice/test_input.py @@ -4,9 +4,12 @@ import numpy as np import pytest -from agents import UserError -from agents.voice import AudioInput, StreamedAudioInput -from agents.voice.input import DEFAULT_SAMPLE_RATE, _buffer_to_audio_file +try: + from agents import UserError + from agents.voice import AudioInput, StreamedAudioInput + from agents.voice.input import DEFAULT_SAMPLE_RATE, _buffer_to_audio_file +except ImportError: + pass def test_buffer_to_audio_file_int16(): diff --git a/tests/voice/test_openai_stt.py b/tests/voice/test_openai_stt.py index bb8d3cf8..75559232 100644 --- a/tests/voice/test_openai_stt.py +++ b/tests/voice/test_openai_stt.py @@ -8,11 +8,15 @@ import numpy as np import pytest -from agents.voice import OpenAISTTTranscriptionSession, StreamedAudioInput, STTModelSettings -from agents.voice.exceptions import STTWebsocketConnectionError -from agents.voice.models.openai_stt import EVENT_INACTIVITY_TIMEOUT +try: + from agents.voice import OpenAISTTTranscriptionSession, StreamedAudioInput, STTModelSettings + from agents.voice.exceptions import STTWebsocketConnectionError + from agents.voice.models.openai_stt import EVENT_INACTIVITY_TIMEOUT + + from .fake_models import FakeStreamedAudioInput +except ImportError: + pass -from .fake_models import FakeStreamedAudioInput # ===== Helpers ===== diff --git a/tests/voice/test_openai_tts.py b/tests/voice/test_openai_tts.py index 0fbd6ba8..b18f9e8c 100644 --- a/tests/voice/test_openai_tts.py +++ b/tests/voice/test_openai_tts.py @@ -5,7 +5,10 @@ import pytest -from agents.voice import OpenAITTSModel, TTSModelSettings +try: + from agents.voice import OpenAITTSModel, TTSModelSettings +except ImportError: + pass class _FakeStreamResponse: diff --git a/tests/voice/test_pipeline.py b/tests/voice/test_pipeline.py index f9880267..51904468 100644 --- a/tests/voice/test_pipeline.py +++ b/tests/voice/test_pipeline.py @@ -4,10 +4,13 @@ import numpy.typing as npt import pytest -from agents.voice import AudioInput, TTSModelSettings, VoicePipeline, VoicePipelineConfig +try: + from agents.voice import AudioInput, TTSModelSettings, VoicePipeline, VoicePipelineConfig -from .fake_models import FakeStreamedAudioInput, FakeSTT, FakeTTS, FakeWorkflow -from .helpers import extract_events + from .fake_models import FakeStreamedAudioInput, FakeSTT, FakeTTS, FakeWorkflow + from .helpers import extract_events +except ImportError: + pass @pytest.mark.asyncio diff --git a/tests/voice/test_workflow.py b/tests/voice/test_workflow.py index 465c1247..3f18c049 100644 --- a/tests/voice/test_workflow.py +++ b/tests/voice/test_workflow.py @@ -17,10 +17,14 @@ TResponseOutputItem, TResponseStreamEvent, ) -from agents.voice import SingleAgentVoiceWorkflow -from ..fake_model import get_response_obj -from ..test_responses import get_function_tool, get_function_tool_call, get_text_message +try: + from agents.voice import SingleAgentVoiceWorkflow + + from ..fake_model import get_response_obj + from ..test_responses import get_function_tool, get_function_tool_call, get_text_message +except ImportError: + pass class FakeStreamingModel(Model): diff --git a/uv.lock b/uv.lock index 0f0d22a6..15e091a1 100644 --- a/uv.lock +++ b/uv.lock @@ -1085,6 +1085,7 @@ dev = [ { name = "sounddevice" }, { name = "textual" }, { name = "types-pynput" }, + { name = "websockets" }, ] [package.metadata] @@ -1118,6 +1119,7 @@ dev = [ { name = "sounddevice" }, { name = "textual" }, { name = "types-pynput" }, + { name = "websockets" }, ] [[package]]