nixbot

builds

failed python3.14-speechrecognition-3.17.0 checks.aarch64-darwin.pkgs-hindsight · build #10775 · raw

1mac02: building i6h02ml0rin8dfnc3cy3k4d09zv991d1-python3.14-speechrecognition-3.17.0.drv2Sourcing python-remove-tests-dir-hook3Sourcing python-catch-conflicts-hook.sh4Sourcing python-remove-bin-bytecode-hook.sh5Sourcing pypa-build-hook6Using pypaBuildPhase7Sourcing python-runtime-deps-check-hook8Using pythonRuntimeDepsCheckHook9Sourcing pypa-install-hook10Using pypaInstallPhase11Sourcing python-imports-check-hook.sh12Using pythonImportsCheckPhase13Sourcing python-metadata-check-hook.sh14Using pythonMetadataCheckPhase15Sourcing python-namespaces-hook16Sourcing python-catch-conflicts-hook.sh17Sourcing pytest-check-hook18Using pytestCheckPhase
unpackPhase
19unpacking source archive /nix/store/6pq7kyqwxqj7p4v46kh94y3lg07ajphq-source20source root is source21setting SOURCE_DATE_EPOCH to timestamp 315619200 of file "source/third-party/irstlm-master.zip"
configurePhase
22no configure script, doing nothing
buildPhase
23Executing pypaBuildPhase24Creating a wheel...25pypa build flags: --no-isolation --outdir dist/ --wheel26* Getting build dependencies for wheel...27running egg_info28creating SpeechRecognition.egg-info29writing SpeechRecognition.egg-info/PKG-INFO30writing dependency_links to SpeechRecognition.egg-info/dependency_links.txt31writing entry points to SpeechRecognition.egg-info/entry_points.txt32writing requirements to SpeechRecognition.egg-info/requires.txt33writing top-level names to SpeechRecognition.egg-info/top_level.txt34writing manifest file 'SpeechRecognition.egg-info/SOURCES.txt'35reading manifest file 'SpeechRecognition.egg-info/SOURCES.txt'36reading manifest template 'MANIFEST.in'37warning: no previously-included files matching '*.pyc' found under directory 'speech_recognition'38adding license file 'LICENSE.txt'39adding license file 'LICENSE-FLAC.txt'40writing manifest file 'SpeechRecognition.egg-info/SOURCES.txt'41* Building wheel...42running bdist_wheel43running build44running build_py45creating build/lib/speech_recognition46copying speech_recognition/__init__.py -> build/lib/speech_recognition47copying speech_recognition/cli.py -> build/lib/speech_recognition48copying speech_recognition/exceptions.py -> build/lib/speech_recognition49copying speech_recognition/audio.py -> build/lib/speech_recognition50copying speech_recognition/__main__.py -> build/lib/speech_recognition51creating build/lib/speech_recognition/recognizers52copying speech_recognition/recognizers/google_cloud.py -> build/lib/speech_recognition/recognizers53copying speech_recognition/recognizers/pocketsphinx.py -> build/lib/speech_recognition/recognizers54copying speech_recognition/recognizers/__init__.py -> build/lib/speech_recognition/recognizers55copying speech_recognition/recognizers/google.py -> build/lib/speech_recognition/recognizers56copying speech_recognition/recognizers/cohere_api.py -> build/lib/speech_recognition/recognizers57copying speech_recognition/recognizers/vosk.py -> build/lib/speech_recognition/recognizers58creating build/lib/speech_recognition/recognizers/whisper_local59copying speech_recognition/recognizers/whisper_local/__init__.py -> build/lib/speech_recognition/recognizers/whisper_local60copying speech_recognition/recognizers/whisper_local/whisper.py -> build/lib/speech_recognition/recognizers/whisper_local61copying speech_recognition/recognizers/whisper_local/faster_whisper.py -> build/lib/speech_recognition/recognizers/whisper_local62copying speech_recognition/recognizers/whisper_local/base.py -> build/lib/speech_recognition/recognizers/whisper_local63creating build/lib/speech_recognition/recognizers/whisper_api64copying speech_recognition/recognizers/whisper_api/__init__.py -> build/lib/speech_recognition/recognizers/whisper_api65copying speech_recognition/recognizers/whisper_api/groq.py -> build/lib/speech_recognition/recognizers/whisper_api66copying speech_recognition/recognizers/whisper_api/openai.py -> build/lib/speech_recognition/recognizers/whisper_api67copying speech_recognition/recognizers/whisper_api/base.py -> build/lib/speech_recognition/recognizers/whisper_api68copying speech_recognition/version.txt -> build/lib/speech_recognition69creating build/lib/speech_recognition/pocketsphinx-data/en-US70copying speech_recognition/pocketsphinx-data/en-US/pronounciation-dictionary.dict -> build/lib/speech_recognition/pocketsphinx-data/en-US71copying speech_recognition/pocketsphinx-data/en-US/language-model.lm.bin -> build/lib/speech_recognition/pocketsphinx-data/en-US72copying speech_recognition/pocketsphinx-data/en-US/LICENSE.txt -> build/lib/speech_recognition/pocketsphinx-data/en-US73creating build/lib/speech_recognition/pocketsphinx-data/en-US/acoustic-model74copying speech_recognition/pocketsphinx-data/en-US/acoustic-model/sendump -> build/lib/speech_recognition/pocketsphinx-data/en-US/acoustic-model75copying speech_recognition/pocketsphinx-data/en-US/acoustic-model/noisedict -> build/lib/speech_recognition/pocketsphinx-data/en-US/acoustic-model76copying speech_recognition/pocketsphinx-data/en-US/acoustic-model/means -> build/lib/speech_recognition/pocketsphinx-data/en-US/acoustic-model77copying speech_recognition/pocketsphinx-data/en-US/acoustic-model/README -> build/lib/speech_recognition/pocketsphinx-data/en-US/acoustic-model78copying speech_recognition/pocketsphinx-data/en-US/acoustic-model/mdef -> build/lib/speech_recognition/pocketsphinx-data/en-US/acoustic-model79copying speech_recognition/pocketsphinx-data/en-US/acoustic-model/transition_matrices -> build/lib/speech_recognition/pocketsphinx-data/en-US/acoustic-model80copying speech_recognition/pocketsphinx-data/en-US/acoustic-model/feat.params -> build/lib/speech_recognition/pocketsphinx-data/en-US/acoustic-model81copying speech_recognition/pocketsphinx-data/en-US/acoustic-model/variances -> build/lib/speech_recognition/pocketsphinx-data/en-US/acoustic-model82installing to build/bdist.macosx-14.0-arm64/wheel83running install84running install_lib85creating build/bdist.macosx-14.0-arm64/wheel86creating build/bdist.macosx-14.0-arm64/wheel/speech_recognition87copying build/lib/speech_recognition/__init__.py -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition88creating build/bdist.macosx-14.0-arm64/wheel/speech_recognition/pocketsphinx-data89creating build/bdist.macosx-14.0-arm64/wheel/speech_recognition/pocketsphinx-data/en-US90copying build/lib/speech_recognition/pocketsphinx-data/en-US/pronounciation-dictionary.dict -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/pocketsphinx-data/en-US91copying build/lib/speech_recognition/pocketsphinx-data/en-US/language-model.lm.bin -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/pocketsphinx-data/en-US92copying build/lib/speech_recognition/pocketsphinx-data/en-US/LICENSE.txt -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/pocketsphinx-data/en-US93creating build/bdist.macosx-14.0-arm64/wheel/speech_recognition/pocketsphinx-data/en-US/acoustic-model94copying build/lib/speech_recognition/pocketsphinx-data/en-US/acoustic-model/sendump -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/pocketsphinx-data/en-US/acoustic-model95copying build/lib/speech_recognition/pocketsphinx-data/en-US/acoustic-model/noisedict -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/pocketsphinx-data/en-US/acoustic-model96copying build/lib/speech_recognition/pocketsphinx-data/en-US/acoustic-model/means -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/pocketsphinx-data/en-US/acoustic-model97copying build/lib/speech_recognition/pocketsphinx-data/en-US/acoustic-model/README -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/pocketsphinx-data/en-US/acoustic-model98copying build/lib/speech_recognition/pocketsphinx-data/en-US/acoustic-model/mdef -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/pocketsphinx-data/en-US/acoustic-model99copying build/lib/speech_recognition/pocketsphinx-data/en-US/acoustic-model/transition_matrices -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/pocketsphinx-data/en-US/acoustic-model100copying build/lib/speech_recognition/pocketsphinx-data/en-US/acoustic-model/feat.params -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/pocketsphinx-data/en-US/acoustic-model101copying build/lib/speech_recognition/pocketsphinx-data/en-US/acoustic-model/variances -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/pocketsphinx-data/en-US/acoustic-model102copying build/lib/speech_recognition/cli.py -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition103creating build/bdist.macosx-14.0-arm64/wheel/speech_recognition/recognizers104copying build/lib/speech_recognition/recognizers/google_cloud.py -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/recognizers105copying build/lib/speech_recognition/recognizers/pocketsphinx.py -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/recognizers106copying build/lib/speech_recognition/recognizers/__init__.py -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/recognizers107copying build/lib/speech_recognition/recognizers/google.py -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/recognizers108creating build/bdist.macosx-14.0-arm64/wheel/speech_recognition/recognizers/whisper_local109copying build/lib/speech_recognition/recognizers/whisper_local/__init__.py -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/recognizers/whisper_local110copying build/lib/speech_recognition/recognizers/whisper_local/whisper.py -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/recognizers/whisper_local111copying build/lib/speech_recognition/recognizers/whisper_local/faster_whisper.py -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/recognizers/whisper_local112copying build/lib/speech_recognition/recognizers/whisper_local/base.py -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/recognizers/whisper_local113creating build/bdist.macosx-14.0-arm64/wheel/speech_recognition/recognizers/whisper_api114copying build/lib/speech_recognition/recognizers/whisper_api/__init__.py -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/recognizers/whisper_api115copying build/lib/speech_recognition/recognizers/whisper_api/groq.py -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/recognizers/whisper_api116copying build/lib/speech_recognition/recognizers/whisper_api/openai.py -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/recognizers/whisper_api117copying build/lib/speech_recognition/recognizers/whisper_api/base.py -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/recognizers/whisper_api118copying build/lib/speech_recognition/recognizers/cohere_api.py -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/recognizers119copying build/lib/speech_recognition/recognizers/vosk.py -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition/recognizers120copying build/lib/speech_recognition/exceptions.py -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition121copying build/lib/speech_recognition/audio.py -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition122copying build/lib/speech_recognition/version.txt -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition123copying build/lib/speech_recognition/__main__.py -> build/bdist.macosx-14.0-arm64/wheel/./speech_recognition124running install_egg_info125running egg_info126writing SpeechRecognition.egg-info/PKG-INFO127writing dependency_links to SpeechRecognition.egg-info/dependency_links.txt128writing entry points to SpeechRecognition.egg-info/entry_points.txt129writing requirements to SpeechRecognition.egg-info/requires.txt130writing top-level names to SpeechRecognition.egg-info/top_level.txt131reading manifest file 'SpeechRecognition.egg-info/SOURCES.txt'132reading manifest template 'MANIFEST.in'133warning: no previously-included files matching '*.pyc' found under directory 'speech_recognition'134adding license file 'LICENSE.txt'135adding license file 'LICENSE-FLAC.txt'136writing manifest file 'SpeechRecognition.egg-info/SOURCES.txt'137Copying SpeechRecognition.egg-info to build/bdist.macosx-14.0-arm64/wheel/./SpeechRecognition-3.17.0-py3.14.egg-info138running install_scripts139creating build/bdist.macosx-14.0-arm64/wheel/speechrecognition-3.17.0.dist-info/WHEEL140creating '/nix/var/nix/builds/nix-79878-2366018834/source/dist/.tmp-hvbijwtj/speechrecognition-3.17.0-py3-none-any.whl' and adding 'build/bdist.macosx-14.0-arm64/wheel' to it141adding 'speech_recognition/__init__.py'142adding 'speech_recognition/__main__.py'143adding 'speech_recognition/audio.py'144adding 'speech_recognition/cli.py'145adding 'speech_recognition/exceptions.py'146adding 'speech_recognition/version.txt'147adding 'speech_recognition/pocketsphinx-data/en-US/LICENSE.txt'148adding 'speech_recognition/pocketsphinx-data/en-US/language-model.lm.bin'149adding 'speech_recognition/pocketsphinx-data/en-US/pronounciation-dictionary.dict'150adding 'speech_recognition/pocketsphinx-data/en-US/acoustic-model/README'151adding 'speech_recognition/pocketsphinx-data/en-US/acoustic-model/feat.params'152adding 'speech_recognition/pocketsphinx-data/en-US/acoustic-model/mdef'153adding 'speech_recognition/pocketsphinx-data/en-US/acoustic-model/means'154adding 'speech_recognition/pocketsphinx-data/en-US/acoustic-model/noisedict'155adding 'speech_recognition/pocketsphinx-data/en-US/acoustic-model/sendump'156adding 'speech_recognition/pocketsphinx-data/en-US/acoustic-model/transition_matrices'157adding 'speech_recognition/pocketsphinx-data/en-US/acoustic-model/variances'158adding 'speech_recognition/recognizers/__init__.py'159adding 'speech_recognition/recognizers/cohere_api.py'160adding 'speech_recognition/recognizers/google.py'161adding 'speech_recognition/recognizers/google_cloud.py'162adding 'speech_recognition/recognizers/pocketsphinx.py'163adding 'speech_recognition/recognizers/vosk.py'164adding 'speech_recognition/recognizers/whisper_api/__init__.py'165adding 'speech_recognition/recognizers/whisper_api/base.py'166adding 'speech_recognition/recognizers/whisper_api/groq.py'167adding 'speech_recognition/recognizers/whisper_api/openai.py'168adding 'speech_recognition/recognizers/whisper_local/__init__.py'169adding 'speech_recognition/recognizers/whisper_local/base.py'170adding 'speech_recognition/recognizers/whisper_local/faster_whisper.py'171adding 'speech_recognition/recognizers/whisper_local/whisper.py'172adding 'speechrecognition-3.17.0.dist-info/licenses/LICENSE-FLAC.txt'173adding 'speechrecognition-3.17.0.dist-info/licenses/LICENSE.txt'174adding 'speechrecognition-3.17.0.dist-info/METADATA'175adding 'speechrecognition-3.17.0.dist-info/WHEEL'176adding 'speechrecognition-3.17.0.dist-info/entry_points.txt'177adding 'speechrecognition-3.17.0.dist-info/top_level.txt'178adding 'speechrecognition-3.17.0.dist-info/RECORD'179removing build/bdist.macosx-14.0-arm64/wheel180Successfully built speechrecognition-3.17.0-py3-none-any.whl181Finished creating a wheel...182Finished executing pypaBuildPhase
pythonRuntimeDepsCheckHook
183Executing pythonRuntimeDepsCheck184Checking runtime dependencies for speechrecognition-3.17.0-py3-none-any.whl185Finished executing pythonRuntimeDepsCheck
installPhase
186Executing pypaInstallPhase187Successfully installed speechrecognition-3.17.0-py3-none-any.whl188Finished executing pypaInstallPhase
pythonOutputDistPhase
189Executing pythonOutputDistPhase190Finished executing pythonOutputDistPhase
fixupPhase
191checking for references to /nix/var/nix/builds/nix-79878-2366018834/ in /nix/store/z4kcg25498annhg459y9finvg0lcbphd-python3.14-speechrecognition-3.17.0-dist...192patching script interpreter paths in /nix/store/z4kcg25498annhg459y9finvg0lcbphd-python3.14-speechrecognition-3.17.0-dist193checking for references to /nix/var/nix/builds/nix-79878-2366018834/ in /nix/store/g0rjnafchwdglyfxl47n98wrm5whlq4x-python3.14-speechrecognition-3.17.0...194patching script interpreter paths in /nix/store/g0rjnafchwdglyfxl47n98wrm5whlq4x-python3.14-speechrecognition-3.17.0195stripping (with command strip and flags -S) in /nix/store/g0rjnafchwdglyfxl47n98wrm5whlq4x-python3.14-speechrecognition-3.17.0/lib /nix/store/g0rjnafchwdglyfxl47n98wrm5whlq4x-python3.14-speechrecognition-3.17.0/bin196Rewriting #!/nix/store/3j0hvszcqcb2vwm5dz0xxfb06cx49k86-python3-3.14.10/bin/python3.14 to #!/nix/store/3j0hvszcqcb2vwm5dz0xxfb06cx49k86-python3-3.14.10197wrapping `/nix/store/g0rjnafchwdglyfxl47n98wrm5whlq4x-python3.14-speechrecognition-3.17.0/bin/sprc'...198Executing pythonRemoveTestsDir199Finished executing pythonRemoveTestsDir
installCheckPhase
200no Makefile or custom installCheckPhase, doing nothing
pythonImportsCheckPhase
201Executing pythonImportsCheckPhase202Check whether the following modules can be imported: speech_recognition
pythonMetadataCheckPhase
203Executing pythonMetadataCheckPhase
pytestCheckPhase
204Executing pytestCheckPhase205pytest flags: -m pytest --ignore-glob=tests/recognizers/test_vosk.py -k not\ \(test_sphinx_keywords\)206============================= test session starts ==============================207platform darwin -- Python 3.14.10, pytest-9.1.1, pluggy-1.7.0208rootdir: /nix/var/nix/builds/nix-79878-2366018834/source209configfile: pyproject.toml210plugins: anyio-4.15.1, pytest_httpserver-1.1.5, respx-0.23.1211collected 66 items / 1 deselected / 65 selected 212213tests/recognizers/test_cohere_api.py .. [ 3%]214tests/recognizers/test_google.py ........ [ 15%]215tests/recognizers/test_google_cloud.py .... [ 21%]216tests/recognizers/whisper_api/test_groq.py . [ 23%]217tests/recognizers/whisper_api/test_openai.py FFF [ 27%]218tests/recognizers/whisper_api/test_openai_compatible.py . [ 29%]219tests/recognizers/whisper_local/test_faster_whisper.py ssss [ 35%]220tests/recognizers/whisper_local/test_whisper.py sss [ 40%]221tests/test_audio.py ......................s.ssssssss [ 89%]222tests/test_recognition.py ssss..s [100%]223224=================================== FAILURES ===================================225_____________________ test_transcribe_with_openai_whisper ______________________226227respx_mock = <respx.router.MockRouter object at 0x11031afd0>228setenv_openai_api_key = None229230 @respx.mock(assert_all_called=True, assert_all_mocked=True)231 def test_transcribe_with_openai_whisper(respx_mock, setenv_openai_api_key):232 respx_mock.post(233 "https://api.openai.com/v1/audio/transcriptions",234 headers__contains={"Authorization": "Bearer sk_openai_api_key"},235 data__contains={"model": "whisper-1"},236 ).mock(237 return_value=httpx.Response(238 200,239 json={"text": "Transcription by OpenAI Whisper"},240 )241 )242 243 audio_data = MagicMock(spec=AudioData)244 audio_data.get_wav_data.return_value = b"audio_data"245 246> actual = openai.recognize(MagicMock(spec=Recognizer), audio_data)247 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^248249tests/recognizers/whisper_api/test_openai.py:34: 250_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 251speech_recognition/recognizers/whisper_api/openai.py:58: in recognize252 return openai_recognizer.recognize(audio_data, model, **kwargs)253 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^254speech_recognition/recognizers/whisper_api/base.py:25: in recognize255 transcript = self.client.audio.transcriptions.create(256/nix/store/91jbfs44n7m7c2nmq5b3994925i5vm1k-python3.14-openai-3.14.1/lib/python3.14/site-packages/openai/_utils/_utils.py:298: in wrapper257 return func(*args, **kwargs)258 ^^^^^^^^^^^^^^^^^^^^^259/nix/store/91jbfs44n7m7c2nmq5b3994925i5vm1k-python3.14-openai-3.14.1/lib/python3.14/site-packages/openai/resources/audio/transcriptions.py:525: in create260 return self._post( # type: ignore[return-value]261/nix/store/91jbfs44n7m7c2nmq5b3994925i5vm1k-python3.14-openai-3.14.1/lib/python3.14/site-packages/openai/_base_client.py:1378: in post262 return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))263 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^264_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 265266self = <openai.OpenAI object at 0x134c64ec0>267cast_to = <class 'openai.types.audio.transcription.Transcription'>268options = FinalRequestOptions(method='post', url='/audio/transcriptions', params={}, headers={'Content-Type': 'multipart/form-da...{'bearer_auth': True}, synthesize_event_and_data=None, content=None, json_data={'model': 'whisper-1'}, extra_json=None)269stream = False270stream_cls = openai.Stream[typing.Annotated[openai.types.audio.transcription_text_segment_event.TranscriptionTextSegmentEvent | ope...ent.TranscriptionTextDoneEvent, PropertyInfo(alias='None', format=None, format_template='None', discriminator='type')]]271272 def request(273 self,274 cast_to: Type[ResponseT],275 options: FinalRequestOptions,276 *,277 stream: bool = False,278 stream_cls: type[_StreamT] | None = None,279 ) -> ResponseT | _StreamT:280 cast_to = self._maybe_override_cast_to(cast_to, options)281 282 # create a copy of the options we were given so that if the283 # options are mutated later & we then retry, the retries are284 # given the original options285 input_options = model_copy(options)286 if input_options.idempotency_key is None and input_options.method.lower() != "get":287 # ensure the idempotency key is reused between requests288 input_options.idempotency_key = self._idempotency_key()289 290 response: httpx2.Response | None = None291 max_retries = input_options.get_max_retries(self.max_retries)292 self._validate_max_retries(max_retries)293 294 retries_taken = 0295 for retries_taken in range(max_retries + 1):296 options = model_copy(input_options)297 options = self._prepare_options(options)298 299 remaining_retries = max_retries - retries_taken300 request = self._build_request(options, retries_taken=retries_taken)301 self._prepare_request(request)302 303 kwargs: HttpxSendArgs = {}304 custom_auth = self._custom_auth(options.security)305 if custom_auth is not None:306 kwargs["auth"] = (307 normalize_httpx2_auth(custom_auth)308 if is_httpx2_sync_client(self._client)309 else normalize_legacy_httpx_auth(custom_auth)310 )311 312 if options.follow_redirects is not None:313 kwargs["follow_redirects"] = options.follow_redirects314 315 log.debug("Sending HTTP Request: %s", get_http_method_for_logging(request.method))316 317 response = None318 try:319 response = self._send_request(320 request,321 stream=stream or self._should_stream_response_body(request=request),322 **kwargs,323 )324 except timeout_exceptions() as err:325 log.debug("Encountered a timeout exception: %s", type(err).__name__)326 327 if remaining_retries > 0:328 self._sleep_for_retry(329 retries_taken=retries_taken,330 max_retries=max_retries,331 options=input_options,332 response=None,333 )334 continue335 336 log.debug("Raising timeout error")337 raise APITimeoutError(request=request) from err338 except OpenAIError as err:339 # Propagate OpenAIErrors as-is, without retrying or wrapping in APIConnectionError340 raise err341 except request_exceptions() as err:342 log.debug("Encountered exception: %s", type(err).__name__)343 344 if remaining_retries > 0:345 self._sleep_for_retry(346 retries_taken=retries_taken,347 max_retries=max_retries,348 options=input_options,349 response=None,350 )351 continue352 353 log.debug("Raising connection error")354 raise APIConnectionError(request=request) from err355 356 log.debug(357 "HTTP Response: %s %i",358 get_http_method_for_logging(request.method),359 response.status_code,360 )361 log.debug("request_id: %s", response.headers.get("x-request-id"))362 363 try:364 response.raise_for_status()365 except status_exceptions() as err: # thrown on 4xx and 5xx status code366 log.debug("Encountered an HTTP status error: %i", response.status_code)367 368 if remaining_retries > 0 and self._should_retry(err.response):369 err.response.close()370 self._sleep_for_retry(371 retries_taken=retries_taken,372 max_retries=max_retries,373 options=input_options,374 response=response,375 )376 continue377 378 # If the response is streamed then we need to explicitly read the response379 # to completion before attempting to access the response text.380 if not err.response.is_closed:381 err.response.read()382 383 log.debug("Re-raising status error")384> raise self._make_status_error_from_response(err.response) from None385E openai.AuthenticationError: Error code: 401 - {'error': {'message': 'Incorrect API key provided: sk_opena*****_key. You can find your API key at https://platform.openai.com/account/api-keys.', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_api_key'}}386387/nix/store/91jbfs44n7m7c2nmq5b3994925i5vm1k-python3.14-openai-3.14.1/lib/python3.14/site-packages/openai/_base_client.py:1151: AuthenticationError388___________________ test_transcribe_with_specified_language ____________________389390respx_mock = <respx.router.MockRouter object at 0x10fea4e90>391setenv_openai_api_key = None392393 @respx.mock(assert_all_called=True, assert_all_mocked=True)394 def test_transcribe_with_specified_language(respx_mock, setenv_openai_api_key):395 # https://github.com/Uberi/speech_recognition/issues/681396 respx_mock.post(397 "https://api.openai.com/v1/audio/transcriptions",398 data__contains={"language": "en"},399 ).respond(400 200,401 json={"text": "English transcription"},402 )403 404 audio_data = MagicMock(spec=AudioData)405 audio_data.get_wav_data.return_value = b"english_audio"406 407> actual = openai.recognize(408 MagicMock(spec=Recognizer), audio_data, language="en"409 )410411tests/recognizers/whisper_api/test_openai.py:54: 412_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 413speech_recognition/recognizers/whisper_api/openai.py:58: in recognize414 return openai_recognizer.recognize(audio_data, model, **kwargs)415 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^416speech_recognition/recognizers/whisper_api/base.py:25: in recognize417 transcript = self.client.audio.transcriptions.create(418/nix/store/91jbfs44n7m7c2nmq5b3994925i5vm1k-python3.14-openai-3.14.1/lib/python3.14/site-packages/openai/_utils/_utils.py:298: in wrapper419 return func(*args, **kwargs)420 ^^^^^^^^^^^^^^^^^^^^^421/nix/store/91jbfs44n7m7c2nmq5b3994925i5vm1k-python3.14-openai-3.14.1/lib/python3.14/site-packages/openai/resources/audio/transcriptions.py:525: in create422 return self._post( # type: ignore[return-value]423/nix/store/91jbfs44n7m7c2nmq5b3994925i5vm1k-python3.14-openai-3.14.1/lib/python3.14/site-packages/openai/_base_client.py:1378: in post424 return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))425 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^426_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 427428self = <openai.OpenAI object at 0x135dd0050>429cast_to = <class 'openai.types.audio.transcription.Transcription'>430options = FinalRequestOptions(method='post', url='/audio/transcriptions', params={}, headers={'Content-Type': 'multipart/form-da...ue}, synthesize_event_and_data=None, content=None, json_data={'model': 'whisper-1', 'language': 'en'}, extra_json=None)431stream = False432stream_cls = openai.Stream[typing.Annotated[openai.types.audio.transcription_text_segment_event.TranscriptionTextSegmentEvent | ope...ent.TranscriptionTextDoneEvent, PropertyInfo(alias='None', format=None, format_template='None', discriminator='type')]]433434 def request(435 self,436 cast_to: Type[ResponseT],437 options: FinalRequestOptions,438 *,439 stream: bool = False,440 stream_cls: type[_StreamT] | None = None,441 ) -> ResponseT | _StreamT:442 cast_to = self._maybe_override_cast_to(cast_to, options)443 444 # create a copy of the options we were given so that if the445 # options are mutated later & we then retry, the retries are446 # given the original options447 input_options = model_copy(options)448 if input_options.idempotency_key is None and input_options.method.lower() != "get":449 # ensure the idempotency key is reused between requests450 input_options.idempotency_key = self._idempotency_key()451 452 response: httpx2.Response | None = None453 max_retries = input_options.get_max_retries(self.max_retries)454 self._validate_max_retries(max_retries)455 456 retries_taken = 0457 for retries_taken in range(max_retries + 1):458 options = model_copy(input_options)459 options = self._prepare_options(options)460 461 remaining_retries = max_retries - retries_taken462 request = self._build_request(options, retries_taken=retries_taken)463 self._prepare_request(request)464 465 kwargs: HttpxSendArgs = {}466 custom_auth = self._custom_auth(options.security)467 if custom_auth is not None:468 kwargs["auth"] = (469 normalize_httpx2_auth(custom_auth)470 if is_httpx2_sync_client(self._client)471 else normalize_legacy_httpx_auth(custom_auth)472 )473 474 if options.follow_redirects is not None:475 kwargs["follow_redirects"] = options.follow_redirects476 477 log.debug("Sending HTTP Request: %s", get_http_method_for_logging(request.method))478 479 response = None480 try:481 response = self._send_request(482 request,483 stream=stream or self._should_stream_response_body(request=request),484 **kwargs,485 )486 except timeout_exceptions() as err:487 log.debug("Encountered a timeout exception: %s", type(err).__name__)488 489 if remaining_retries > 0:490 self._sleep_for_retry(491 retries_taken=retries_taken,492 max_retries=max_retries,493 options=input_options,494 response=None,495 )496 continue497 498 log.debug("Raising timeout error")499 raise APITimeoutError(request=request) from err500 except OpenAIError as err:501 # Propagate OpenAIErrors as-is, without retrying or wrapping in APIConnectionError502 raise err503 except request_exceptions() as err:504 log.debug("Encountered exception: %s", type(err).__name__)505 506 if remaining_retries > 0:507 self._sleep_for_retry(508 retries_taken=retries_taken,509 max_retries=max_retries,510 options=input_options,511 response=None,512 )513 continue514 515 log.debug("Raising connection error")516 raise APIConnectionError(request=request) from err517 518 log.debug(519 "HTTP Response: %s %i",520 get_http_method_for_logging(request.method),521 response.status_code,522 )523 log.debug("request_id: %s", response.headers.get("x-request-id"))524 525 try:526 response.raise_for_status()527 except status_exceptions() as err: # thrown on 4xx and 5xx status code528 log.debug("Encountered an HTTP status error: %i", response.status_code)529 530 if remaining_retries > 0 and self._should_retry(err.response):531 err.response.close()532 self._sleep_for_retry(533 retries_taken=retries_taken,534 max_retries=max_retries,535 options=input_options,536 response=response,537 )538 continue539 540 # If the response is streamed then we need to explicitly read the response541 # to completion before attempting to access the response text.542 if not err.response.is_closed:543 err.response.read()544 545 log.debug("Re-raising status error")546> raise self._make_status_error_from_response(err.response) from None547E openai.AuthenticationError: Error code: 401 - {'error': {'message': 'Incorrect API key provided: sk_opena*****_key. You can find your API key at https://platform.openai.com/account/api-keys.', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_api_key'}}548549/nix/store/91jbfs44n7m7c2nmq5b3994925i5vm1k-python3.14-openai-3.14.1/lib/python3.14/site-packages/openai/_base_client.py:1151: AuthenticationError550____________________ test_transcribe_with_specified_prompt _____________________551552respx_mock = <respx.router.MockRouter object at 0x1104d1ba0>553setenv_openai_api_key = None554555 @respx.mock(assert_all_called=True, assert_all_mocked=True)556 def test_transcribe_with_specified_prompt(respx_mock, setenv_openai_api_key):557 # https://github.com/Uberi/speech_recognition/pull/676558 respx_mock.post(559 "https://api.openai.com/v1/audio/transcriptions",560 # ref: https://cookbook.openai.com/examples/whisper_prompting_guide561 data__contains={"prompt": "Glossary: Aimee, Shawn, BBQ"},562 ).respond(563 200,564 json={"text": "Prompted transcription"},565 )566 567 audio_data = MagicMock(spec=AudioData)568 audio_data.get_wav_data.return_value = b"audio_data"569 570> actual = openai.recognize(571 MagicMock(spec=Recognizer),572 audio_data,573 prompt="Glossary: Aimee, Shawn, BBQ",574 )575576tests/recognizers/whisper_api/test_openai.py:76: 577_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 578speech_recognition/recognizers/whisper_api/openai.py:58: in recognize579 return openai_recognizer.recognize(audio_data, model, **kwargs)580 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^581speech_recognition/recognizers/whisper_api/base.py:25: in recognize582 transcript = self.client.audio.transcriptions.create(583/nix/store/91jbfs44n7m7c2nmq5b3994925i5vm1k-python3.14-openai-3.14.1/lib/python3.14/site-packages/openai/_utils/_utils.py:298: in wrapper584 return func(*args, **kwargs)585 ^^^^^^^^^^^^^^^^^^^^^586/nix/store/91jbfs44n7m7c2nmq5b3994925i5vm1k-python3.14-openai-3.14.1/lib/python3.14/site-packages/openai/resources/audio/transcriptions.py:525: in create587 return self._post( # type: ignore[return-value]588/nix/store/91jbfs44n7m7c2nmq5b3994925i5vm1k-python3.14-openai-3.14.1/lib/python3.14/site-packages/openai/_base_client.py:1378: in post589 return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))590 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^591_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 592593self = <openai.OpenAI object at 0x135bb7750>594cast_to = <class 'openai.types.audio.transcription.Transcription'>595options = FinalRequestOptions(method='post', url='/audio/transcriptions', params={}, headers={'Content-Type': 'multipart/form-da...nd_data=None, content=None, json_data={'model': 'whisper-1', 'prompt': 'Glossary: Aimee, Shawn, BBQ'}, extra_json=None)596stream = False597stream_cls = openai.Stream[typing.Annotated[openai.types.audio.transcription_text_segment_event.TranscriptionTextSegmentEvent | ope...ent.TranscriptionTextDoneEvent, PropertyInfo(alias='None', format=None, format_template='None', discriminator='type')]]598599 def request(600 self,601 cast_to: Type[ResponseT],602 options: FinalRequestOptions,603 *,604 stream: bool = False,605 stream_cls: type[_StreamT] | None = None,606 ) -> ResponseT | _StreamT:607 cast_to = self._maybe_override_cast_to(cast_to, options)608 609 # create a copy of the options we were given so that if the610 # options are mutated later & we then retry, the retries are611 # given the original options612 input_options = model_copy(options)613 if input_options.idempotency_key is None and input_options.method.lower() != "get":614 # ensure the idempotency key is reused between requests615 input_options.idempotency_key = self._idempotency_key()616 617 response: httpx2.Response | None = None618 max_retries = input_options.get_max_retries(self.max_retries)619 self._validate_max_retries(max_retries)620 621 retries_taken = 0622 for retries_taken in range(max_retries + 1):623 options = model_copy(input_options)624 options = self._prepare_options(options)625 626 remaining_retries = max_retries - retries_taken627 request = self._build_request(options, retries_taken=retries_taken)628 self._prepare_request(request)629 630 kwargs: HttpxSendArgs = {}631 custom_auth = self._custom_auth(options.security)632 if custom_auth is not None:633 kwargs["auth"] = (634 normalize_httpx2_auth(custom_auth)635 if is_httpx2_sync_client(self._client)636 else normalize_legacy_httpx_auth(custom_auth)637 )638 639 if options.follow_redirects is not None:640 kwargs["follow_redirects"] = options.follow_redirects641 642 log.debug("Sending HTTP Request: %s", get_http_method_for_logging(request.method))643 644 response = None645 try:646 response = self._send_request(647 request,648 stream=stream or self._should_stream_response_body(request=request),649 **kwargs,650 )651 except timeout_exceptions() as err:652 log.debug("Encountered a timeout exception: %s", type(err).__name__)653 654 if remaining_retries > 0:655 self._sleep_for_retry(656 retries_taken=retries_taken,657 max_retries=max_retries,658 options=input_options,659 response=None,660 )661 continue662 663 log.debug("Raising timeout error")664 raise APITimeoutError(request=request) from err665 except OpenAIError as err:666 # Propagate OpenAIErrors as-is, without retrying or wrapping in APIConnectionError667 raise err668 except request_exceptions() as err:669 log.debug("Encountered exception: %s", type(err).__name__)670 671 if remaining_retries > 0:672 self._sleep_for_retry(673 retries_taken=retries_taken,674 max_retries=max_retries,675 options=input_options,676 response=None,677 )678 continue679 680 log.debug("Raising connection error")681 raise APIConnectionError(request=request) from err682 683 log.debug(684 "HTTP Response: %s %i",685 get_http_method_for_logging(request.method),686 response.status_code,687 )688 log.debug("request_id: %s", response.headers.get("x-request-id"))689 690 try:691 response.raise_for_status()692 except status_exceptions() as err: # thrown on 4xx and 5xx status code693 log.debug("Encountered an HTTP status error: %i", response.status_code)694 695 if remaining_retries > 0 and self._should_retry(err.response):696 err.response.close()697 self._sleep_for_retry(698 retries_taken=retries_taken,699 max_retries=max_retries,700 options=input_options,701 response=response,702 )703 continue704 705 # If the response is streamed then we need to explicitly read the response706 # to completion before attempting to access the response text.707 if not err.response.is_closed:708 err.response.read()709 710 log.debug("Re-raising status error")711> raise self._make_status_error_from_response(err.response) from None712E openai.AuthenticationError: Error code: 401 - {'error': {'message': 'Incorrect API key provided: sk_opena*****_key. You can find your API key at https://platform.openai.com/account/api-keys.', 'type': 'invalid_request_error', 'param': None, 'code': 'invalid_api_key'}}713714/nix/store/91jbfs44n7m7c2nmq5b3994925i5vm1k-python3.14-openai-3.14.1/lib/python3.14/site-packages/openai/_base_client.py:1151: AuthenticationError715=============================== warnings summary ===============================716speech_recognition/__init__.py:7717 /nix/var/nix/builds/nix-79878-2366018834/source/speech_recognition/__init__.py:7: DeprecationWarning: aifc was removed in Python 3.13. Please be aware that you are currently NOT using standard 'aifc', but instead a separately installed 'standard-aifc'.718 import aifc719720-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html721=========================== short test summary info ============================722FAILED tests/recognizers/whisper_api/test_openai.py::test_transcribe_with_openai_whisper - openai.AuthenticationError: Error code: 401 - {'error': {'message': 'Incorr...723FAILED tests/recognizers/whisper_api/test_openai.py::test_transcribe_with_specified_language - openai.AuthenticationError: Error code: 401 - {'error': {'message': 'Incorr...724FAILED tests/recognizers/whisper_api/test_openai.py::test_transcribe_with_specified_prompt - openai.AuthenticationError: Error code: 401 - {'error': {'message': 'Incorr...725====== 3 failed, 41 passed, 21 skipped, 1 deselected, 1 warning in 55.15s ======