openspeechapi 0.2.4__tar.gz → 0.2.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (247) hide show
  1. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/PKG-INFO +1 -1
  2. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/__init__.py +1 -1
  3. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/logging_config.py +16 -2
  4. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/pyproject.toml +1 -1
  5. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_logging.py +32 -0
  6. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.dockerignore +0 -0
  7. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.env.example +0 -0
  8. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.github/workflows/ci.yml +0 -0
  9. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.gitignore +0 -0
  10. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.tmp/audio/en.aiff +0 -0
  11. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.tmp/audio/en_16k.wav +0 -0
  12. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.tmp/audio/en_16k_pad6.wav +0 -0
  13. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.tmp/audio/en_long.aiff +0 -0
  14. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.tmp/audio/en_long_16k.wav +0 -0
  15. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.tmp/audio/en_mid.aiff +0 -0
  16. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.tmp/audio/en_mid_16k.wav +0 -0
  17. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.tmp/audio/zh.aiff +0 -0
  18. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.tmp/audio/zh_16k.wav +0 -0
  19. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.tmp/openspeech-8600.log +0 -0
  20. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.tmp/openspeech-serve.log +0 -0
  21. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.tmp/webui-server.log +0 -0
  22. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.tmp/webui-server.pid +0 -0
  23. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.tmp/wlk12101.log +0 -0
  24. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.tmp/wlk12101.pid +0 -0
  25. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.tmp/wlk12102.log +0 -0
  26. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/.tmp/wlk12102.pid +0 -0
  27. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/AGENTS.md +0 -0
  28. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/CLAUDE.md +0 -0
  29. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/Dockerfile +0 -0
  30. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/README.md +0 -0
  31. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/aibox-script/aibox-1.0.0-SNAPSHOT-stdout.log +0 -0
  32. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/aibox-script/aibox.2026-04-02.log +0 -0
  33. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/aibox-script/com.user.restart-jar.plist +0 -0
  34. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/aibox-script/restart-jar.sh +0 -0
  35. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/aibox-script.tar.gz +0 -0
  36. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/docker-compose.yml +0 -0
  37. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/docs/architecture/local-engine-manager.md +0 -0
  38. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/docs/architecture/logging-spec.md +0 -0
  39. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/docs/architecture/stt-engineering-optimization-guide.md +0 -0
  40. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/docs/architecture/stt-streaming-spec.md +0 -0
  41. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/docs/architecture/webui-phase-a.md +0 -0
  42. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/docs/engines/fish-speech-docker.md +0 -0
  43. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/docs/engines/fish-speech-native.md +0 -0
  44. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/docs/engines/stt-native-models.md +0 -0
  45. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/docs/superpowers/plans/2026-04-01-phase1-implementation.md +0 -0
  46. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/docs/superpowers/plans/2026-04-11-macos-native-tts-stt.md +0 -0
  47. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/docs/superpowers/specs/2026-04-01-openspeech-api-design.md +0 -0
  48. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/docs/superpowers/specs/2026-04-03-hot-lazy-loading.md +0 -0
  49. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/docs/superpowers/specs/2026-04-03-phase2-protocol-layer.md +0 -0
  50. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/docs/superpowers/specs/2026-04-03-phase3-production.md +0 -0
  51. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/docs/superpowers/specs/2026-04-11-macos-native-tts-stt-design.md +0 -0
  52. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/docs/superpowers/specs/2026-04-12-cloud-providers-webui-design.md +0 -0
  53. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/docs/superpowers/specs/2026-04-15-streaming-tts-stt-fixes-display-names.md +0 -0
  54. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/docs/superpowers/specs/2026-04-16-provider-management-engines-rename.md +0 -0
  55. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/examples/client_stt.py +0 -0
  56. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/examples/client_tts.py +0 -0
  57. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/examples/stt_simple.py +0 -0
  58. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/examples/tts_simple.py +0 -0
  59. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/__main__.py +0 -0
  60. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/cli.py +0 -0
  61. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/client/__init__.py +0 -0
  62. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/client/client.py +0 -0
  63. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/config.py +0 -0
  64. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/core/__init__.py +0 -0
  65. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/core/base.py +0 -0
  66. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/core/enums.py +0 -0
  67. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/core/models.py +0 -0
  68. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/core/registry.py +0 -0
  69. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/core/settings.py +0 -0
  70. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/demo.py +0 -0
  71. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/dispatch/__init__.py +0 -0
  72. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/dispatch/context.py +0 -0
  73. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/dispatch/dispatcher.py +0 -0
  74. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/dispatch/executors/__init__.py +0 -0
  75. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/dispatch/executors/base.py +0 -0
  76. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/dispatch/executors/in_process.py +0 -0
  77. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/dispatch/executors/remote.py +0 -0
  78. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/dispatch/executors/subprocess_exec.py +0 -0
  79. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/dispatch/fanout.py +0 -0
  80. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/dispatch/filters.py +0 -0
  81. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/dispatch/lifecycle.py +0 -0
  82. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/dispatch/watcher.py +0 -0
  83. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/engine_catalog.py +0 -0
  84. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/engine_registry.yaml +0 -0
  85. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/exceptions.py +0 -0
  86. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/factory.py +0 -0
  87. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/local_engines/__init__.py +0 -0
  88. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/local_engines/aim_resolver.py +0 -0
  89. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/local_engines/backends/__init__.py +0 -0
  90. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/local_engines/backends/docker_backend.py +0 -0
  91. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/local_engines/backends/native_backend.py +0 -0
  92. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/local_engines/base.py +0 -0
  93. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/local_engines/engines/__init__.py +0 -0
  94. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/local_engines/engines/faster_whisper.py +0 -0
  95. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/local_engines/engines/fish_speech.py +0 -0
  96. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/local_engines/engines/sherpa_onnx.py +0 -0
  97. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/local_engines/engines/whisper.py +0 -0
  98. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/local_engines/engines/whisperlivekit.py +0 -0
  99. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/local_engines/manager.py +0 -0
  100. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/local_engines/models.py +0 -0
  101. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/local_engines/progress.py +0 -0
  102. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/local_engines/registry.py +0 -0
  103. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/local_engines/task_store.py +0 -0
  104. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/local_engines/tasks.py +0 -0
  105. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/observe/__init__.py +0 -0
  106. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/observe/base.py +0 -0
  107. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/observe/debug.py +0 -0
  108. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/observe/latency.py +0 -0
  109. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/observe/metrics.py +0 -0
  110. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/observe/tracing.py +0 -0
  111. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/observe/usage.py +0 -0
  112. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/__init__.py +0 -0
  113. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/_template.py +0 -0
  114. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/stt/__init__.py +0 -0
  115. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/stt/alibaba.py +0 -0
  116. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/stt/assemblyai.py +0 -0
  117. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/stt/azure_speech.py +0 -0
  118. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/stt/baidu.py +0 -0
  119. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/stt/deepgram.py +0 -0
  120. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/stt/elevenlabs.py +0 -0
  121. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/stt/faster_whisper.py +0 -0
  122. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/stt/google_cloud.py +0 -0
  123. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/stt/iflytek.py +0 -0
  124. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/stt/macos_speech.py +0 -0
  125. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/stt/openai.py +0 -0
  126. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/stt/sherpa_onnx.py +0 -0
  127. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/stt/tencent.py +0 -0
  128. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/stt/volcengine.py +0 -0
  129. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/stt/whisper.py +0 -0
  130. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/stt/whisperlivekit.py +0 -0
  131. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/stt/windows_speech.py +0 -0
  132. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/tts/__init__.py +0 -0
  133. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/tts/alibaba.py +0 -0
  134. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/tts/azure_speech.py +0 -0
  135. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/tts/baidu.py +0 -0
  136. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/tts/coqui.py +0 -0
  137. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/tts/cosyvoice.py +0 -0
  138. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/tts/deepgram.py +0 -0
  139. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/tts/elevenlabs.py +0 -0
  140. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/tts/fish_speech.py +0 -0
  141. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/tts/google_cloud.py +0 -0
  142. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/tts/iflytek.py +0 -0
  143. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/tts/macos_say.py +0 -0
  144. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/tts/minimax.py +0 -0
  145. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/tts/openai.py +0 -0
  146. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/tts/piper.py +0 -0
  147. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/tts/tencent.py +0 -0
  148. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/tts/volcengine.py +0 -0
  149. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/providers/tts/windows_sapi.py +0 -0
  150. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/server/__init__.py +0 -0
  151. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/server/app.py +0 -0
  152. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/server/auth.py +0 -0
  153. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/server/middleware.py +0 -0
  154. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/server/routes/__init__.py +0 -0
  155. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/server/routes/management.py +0 -0
  156. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/server/routes/stt.py +0 -0
  157. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/server/routes/tts.py +0 -0
  158. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/server/routes/webui.py +0 -0
  159. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/server/webui/app.js +0 -0
  160. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/server/webui/index.html +0 -0
  161. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/server/webui/styles.css +0 -0
  162. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/server/ws/__init__.py +0 -0
  163. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/server/ws/stt_stream.py +0 -0
  164. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/server/ws/tts_stream.py +0 -0
  165. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/telemetry/__init__.py +0 -0
  166. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/telemetry/perf.py +0 -0
  167. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/utils/__init__.py +0 -0
  168. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/utils/audio_converter.py +0 -0
  169. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/utils/audio_playback.py +0 -0
  170. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/openspeechapi/vendor_registry.yaml +0 -0
  171. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/output/output.wav +0 -0
  172. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/output.wav +0 -0
  173. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/providers.example.yaml +0 -0
  174. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/scripts/engines/cloud/install.sh +0 -0
  175. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/scripts/engines/faster-whisper/native/install.sh +0 -0
  176. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/scripts/engines/fish-speech/native/install.sh +0 -0
  177. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/scripts/engines/macos-stt/install.sh +0 -0
  178. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/scripts/engines/macos-stt/macos_stt.swift +0 -0
  179. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/scripts/engines/macos-stt/request_auth.swift +0 -0
  180. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/scripts/engines/sherpa-onnx/native/install.sh +0 -0
  181. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/scripts/engines/sherpa-onnx/native/run_streaming_server.py +0 -0
  182. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/scripts/engines/whisper/native/install.sh +0 -0
  183. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/scripts/engines/whisperlivekit/native/install.sh +0 -0
  184. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/__init__.py +0 -0
  185. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/conftest.py +0 -0
  186. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/e2e/__init__.py +0 -0
  187. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/e2e/conftest.py +0 -0
  188. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/e2e/test_fanout_e2e.py +0 -0
  189. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/e2e/test_faster_whisper_e2e.py +0 -0
  190. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/e2e/test_openai_e2e.py +0 -0
  191. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/e2e/test_webui_e2e.py +0 -0
  192. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/fixtures/hello.wav +0 -0
  193. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/integration/__init__.py +0 -0
  194. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/integration/test_fanout_integration.py +0 -0
  195. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/integration/test_in_process_integration.py +0 -0
  196. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/integration/test_server_client.py +0 -0
  197. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/__init__.py +0 -0
  198. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_aim_resolver.py +0 -0
  199. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_audio_converter.py +0 -0
  200. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_audio_playback.py +0 -0
  201. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_base.py +0 -0
  202. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_cli.py +0 -0
  203. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_cli_engine.py +0 -0
  204. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_client.py +0 -0
  205. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_config.py +0 -0
  206. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_context.py +0 -0
  207. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_debug_observer.py +0 -0
  208. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_dispatcher.py +0 -0
  209. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_docker_backend_progress.py +0 -0
  210. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_engine_registry.py +0 -0
  211. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_enums.py +0 -0
  212. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_executor_base.py +0 -0
  213. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_fanout.py +0 -0
  214. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_filters.py +0 -0
  215. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_hot_reload.py +0 -0
  216. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_in_process.py +0 -0
  217. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_latency_observer.py +0 -0
  218. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_lifecycle.py +0 -0
  219. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_local_engine_task_store.py +0 -0
  220. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_local_engines_manager.py +0 -0
  221. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_metrics_observer.py +0 -0
  222. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_models.py +0 -0
  223. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_native_backend.py +0 -0
  224. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_observer_base.py +0 -0
  225. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_plugin_mechanism.py +0 -0
  226. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_providers/__init__.py +0 -0
  227. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_providers/test_cloud_providers.py +0 -0
  228. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_providers/test_elevenlabs_stt.py +0 -0
  229. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_providers/test_macos_say.py +0 -0
  230. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_providers/test_macos_speech.py +0 -0
  231. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_providers/test_openai_base_url.py +0 -0
  232. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_providers/test_openai_stt.py +0 -0
  233. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_providers/test_openai_tts.py +0 -0
  234. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_providers/test_sherpa_onnx_stt.py +0 -0
  235. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_providers/test_stt_stubs.py +0 -0
  236. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_providers/test_tts_stubs.py +0 -0
  237. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_providers/test_whisperlivekit_stt.py +0 -0
  238. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_registry.py +0 -0
  239. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_remote.py +0 -0
  240. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_server/__init__.py +0 -0
  241. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_server/test_auth.py +0 -0
  242. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_server/test_config_api.py +0 -0
  243. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_server/test_routes.py +0 -0
  244. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_server/test_websocket.py +0 -0
  245. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_subprocess.py +0 -0
  246. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_usage_observer.py +0 -0
  247. {openspeechapi-0.2.4 → openspeechapi-0.2.5}/tests/unit/test_watcher.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: openspeechapi
3
- Version: 0.2.4
3
+ Version: 0.2.5
4
4
  Summary: Unified speech interface for STT/TTS providers
5
5
  Requires-Python: >=3.11
6
6
  Requires-Dist: httpx>=0.27
@@ -1,6 +1,6 @@
1
1
  """OpenSpeechAPI — Unified speech interface for STT/TTS providers."""
2
2
 
3
- __version__ = "0.2.4"
3
+ __version__ = "0.2.5"
4
4
 
5
5
  from openspeechapi.config import load_config
6
6
  from openspeechapi.core.base import SpeechProvider, STTProvider, TTSProvider
@@ -185,10 +185,24 @@ def bind_context(
185
185
  if v is not None:
186
186
  bindings[k] = v
187
187
 
188
+ # NOTE: we drive logger.contextualize manually instead of using its
189
+ # ``with`` form so we can swallow the cleanup-time ValueError that
190
+ # loguru raises when bind_context wraps a ``yield`` in an async
191
+ # generator and that generator is closed from a different asyncio
192
+ # Context (e.g. the consumer task gets cancelled). The token loguru
193
+ # tries to reset was set in the original Context and Python forbids
194
+ # cross-context reset. The bindings are scoped to the closing
195
+ # Context anyway, so dropping the reset is harmless — Python GCs the
196
+ # vanishing Context's vars regardless.
197
+ contextualizer = logger.contextualize(**bindings)
198
+ contextualizer.__enter__()
188
199
  try:
189
- with logger.contextualize(**bindings):
190
- yield bindings
200
+ yield bindings
191
201
  finally:
202
+ try:
203
+ contextualizer.__exit__(None, None, None)
204
+ except ValueError:
205
+ pass
192
206
  for var, token in reversed(resets):
193
207
  try:
194
208
  var.reset(token)
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "openspeechapi"
7
- version = "0.2.4"
7
+ version = "0.2.5"
8
8
  description = "Unified speech interface for STT/TTS providers"
9
9
  requires-python = ">=3.11"
10
10
  dependencies = [
@@ -96,6 +96,38 @@ def test_bind_context_sets_and_resets_request_id() -> None:
96
96
  assert get_request_id() is None
97
97
 
98
98
 
99
+ def test_bind_context_aclose_from_different_asyncio_context_does_not_raise() -> None:
100
+ """When bind_context wraps a yield in an async generator and the generator
101
+ is later closed from a different asyncio Context, loguru's
102
+ contextualize.__exit__ raises
103
+ ``ValueError("<Token ...> was created in a different Context")``.
104
+
105
+ Production trace (2026-05-06): openspeechapi/dispatch/dispatcher.py
106
+ ``_synthesize_stream`` holds bind_context across ``yield chunk``; when
107
+ the consumer's task is cancelled, athrow runs the finally in a new
108
+ Context and the unhandled ValueError pollutes the log.
109
+
110
+ bind_context must swallow that cleanup error.
111
+ """
112
+ import asyncio
113
+
114
+ async def gen():
115
+ with bind_context(request_id="rid", provider="prov"):
116
+ for i in range(3):
117
+ yield i
118
+
119
+ async def driver():
120
+ g = gen()
121
+ first = await g.__anext__()
122
+ assert first == 0
123
+ # Closing from a freshly-created task puts aclose in a different
124
+ # asyncio Context than where bind_context was entered. This is the
125
+ # exact mismatch that production hit.
126
+ await asyncio.create_task(g.aclose())
127
+
128
+ asyncio.run(driver())
129
+
130
+
99
131
  def test_bind_context_decorates_log_records(tmp_path: Path) -> None:
100
132
  configure_logging(level="DEBUG", format="json", log_dir=str(tmp_path))
101
133
  captured: list[dict] = []
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes