openspeechapi 0.2.7__tar.gz → 0.2.8__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.7 → openspeechapi-0.2.8}/PKG-INFO +1 -1
  2. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/__init__.py +1 -1
  3. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/stt/iflytek.py +19 -2
  4. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/pyproject.toml +1 -1
  5. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.dockerignore +0 -0
  6. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.env.example +0 -0
  7. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.github/workflows/ci.yml +0 -0
  8. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.gitignore +0 -0
  9. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.tmp/audio/en.aiff +0 -0
  10. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.tmp/audio/en_16k.wav +0 -0
  11. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.tmp/audio/en_16k_pad6.wav +0 -0
  12. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.tmp/audio/en_long.aiff +0 -0
  13. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.tmp/audio/en_long_16k.wav +0 -0
  14. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.tmp/audio/en_mid.aiff +0 -0
  15. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.tmp/audio/en_mid_16k.wav +0 -0
  16. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.tmp/audio/zh.aiff +0 -0
  17. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.tmp/audio/zh_16k.wav +0 -0
  18. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.tmp/openspeech-8600.log +0 -0
  19. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.tmp/openspeech-serve.log +0 -0
  20. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.tmp/webui-server.log +0 -0
  21. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.tmp/webui-server.pid +0 -0
  22. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.tmp/wlk12101.log +0 -0
  23. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.tmp/wlk12101.pid +0 -0
  24. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.tmp/wlk12102.log +0 -0
  25. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/.tmp/wlk12102.pid +0 -0
  26. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/AGENTS.md +0 -0
  27. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/CLAUDE.md +0 -0
  28. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/Dockerfile +0 -0
  29. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/README.md +0 -0
  30. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/aibox-script/aibox-1.0.0-SNAPSHOT-stdout.log +0 -0
  31. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/aibox-script/aibox.2026-04-02.log +0 -0
  32. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/aibox-script/com.user.restart-jar.plist +0 -0
  33. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/aibox-script/restart-jar.sh +0 -0
  34. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/aibox-script.tar.gz +0 -0
  35. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/docker-compose.yml +0 -0
  36. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/docs/architecture/local-engine-manager.md +0 -0
  37. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/docs/architecture/logging-spec.md +0 -0
  38. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/docs/architecture/stt-engineering-optimization-guide.md +0 -0
  39. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/docs/architecture/stt-streaming-spec.md +0 -0
  40. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/docs/architecture/webui-phase-a.md +0 -0
  41. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/docs/engines/fish-speech-docker.md +0 -0
  42. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/docs/engines/fish-speech-native.md +0 -0
  43. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/docs/engines/stt-native-models.md +0 -0
  44. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/docs/superpowers/plans/2026-04-01-phase1-implementation.md +0 -0
  45. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/docs/superpowers/plans/2026-04-11-macos-native-tts-stt.md +0 -0
  46. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/docs/superpowers/specs/2026-04-01-openspeech-api-design.md +0 -0
  47. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/docs/superpowers/specs/2026-04-03-hot-lazy-loading.md +0 -0
  48. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/docs/superpowers/specs/2026-04-03-phase2-protocol-layer.md +0 -0
  49. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/docs/superpowers/specs/2026-04-03-phase3-production.md +0 -0
  50. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/docs/superpowers/specs/2026-04-11-macos-native-tts-stt-design.md +0 -0
  51. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/docs/superpowers/specs/2026-04-12-cloud-providers-webui-design.md +0 -0
  52. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/docs/superpowers/specs/2026-04-15-streaming-tts-stt-fixes-display-names.md +0 -0
  53. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/docs/superpowers/specs/2026-04-16-provider-management-engines-rename.md +0 -0
  54. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/examples/client_stt.py +0 -0
  55. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/examples/client_tts.py +0 -0
  56. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/examples/stt_simple.py +0 -0
  57. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/examples/tts_simple.py +0 -0
  58. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/__main__.py +0 -0
  59. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/cli.py +0 -0
  60. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/client/__init__.py +0 -0
  61. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/client/client.py +0 -0
  62. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/config.py +0 -0
  63. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/core/__init__.py +0 -0
  64. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/core/base.py +0 -0
  65. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/core/enums.py +0 -0
  66. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/core/models.py +0 -0
  67. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/core/registry.py +0 -0
  68. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/core/settings.py +0 -0
  69. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/demo.py +0 -0
  70. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/dispatch/__init__.py +0 -0
  71. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/dispatch/context.py +0 -0
  72. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/dispatch/dispatcher.py +0 -0
  73. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/dispatch/executors/__init__.py +0 -0
  74. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/dispatch/executors/base.py +0 -0
  75. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/dispatch/executors/in_process.py +0 -0
  76. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/dispatch/executors/remote.py +0 -0
  77. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/dispatch/executors/subprocess_exec.py +0 -0
  78. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/dispatch/fanout.py +0 -0
  79. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/dispatch/filters.py +0 -0
  80. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/dispatch/lifecycle.py +0 -0
  81. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/dispatch/watcher.py +0 -0
  82. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/engine_catalog.py +0 -0
  83. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/engine_registry.yaml +0 -0
  84. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/exceptions.py +0 -0
  85. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/factory.py +0 -0
  86. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/local_engines/__init__.py +0 -0
  87. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/local_engines/aim_resolver.py +0 -0
  88. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/local_engines/backends/__init__.py +0 -0
  89. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/local_engines/backends/docker_backend.py +0 -0
  90. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/local_engines/backends/native_backend.py +0 -0
  91. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/local_engines/base.py +0 -0
  92. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/local_engines/engines/__init__.py +0 -0
  93. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/local_engines/engines/faster_whisper.py +0 -0
  94. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/local_engines/engines/fish_speech.py +0 -0
  95. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/local_engines/engines/sherpa_onnx.py +0 -0
  96. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/local_engines/engines/whisper.py +0 -0
  97. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/local_engines/engines/whisperlivekit.py +0 -0
  98. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/local_engines/manager.py +0 -0
  99. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/local_engines/models.py +0 -0
  100. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/local_engines/progress.py +0 -0
  101. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/local_engines/registry.py +0 -0
  102. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/local_engines/task_store.py +0 -0
  103. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/local_engines/tasks.py +0 -0
  104. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/logging_config.py +0 -0
  105. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/observe/__init__.py +0 -0
  106. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/observe/base.py +0 -0
  107. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/observe/debug.py +0 -0
  108. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/observe/latency.py +0 -0
  109. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/observe/metrics.py +0 -0
  110. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/observe/tracing.py +0 -0
  111. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/observe/usage.py +0 -0
  112. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/__init__.py +0 -0
  113. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/_template.py +0 -0
  114. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/stt/__init__.py +0 -0
  115. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/stt/alibaba.py +0 -0
  116. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/stt/assemblyai.py +0 -0
  117. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/stt/azure_speech.py +0 -0
  118. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/stt/baidu.py +0 -0
  119. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/stt/deepgram.py +0 -0
  120. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/stt/elevenlabs.py +0 -0
  121. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/stt/faster_whisper.py +0 -0
  122. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/stt/google_cloud.py +0 -0
  123. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/stt/macos_speech.py +0 -0
  124. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/stt/openai.py +0 -0
  125. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/stt/sherpa_onnx.py +0 -0
  126. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/stt/tencent.py +0 -0
  127. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/stt/volcengine.py +0 -0
  128. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/stt/whisper.py +0 -0
  129. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/stt/whisperlivekit.py +0 -0
  130. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/stt/windows_speech.py +0 -0
  131. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/tts/__init__.py +0 -0
  132. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/tts/alibaba.py +0 -0
  133. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/tts/azure_speech.py +0 -0
  134. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/tts/baidu.py +0 -0
  135. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/tts/coqui.py +0 -0
  136. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/tts/cosyvoice.py +0 -0
  137. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/tts/deepgram.py +0 -0
  138. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/tts/elevenlabs.py +0 -0
  139. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/tts/fish_speech.py +0 -0
  140. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/tts/google_cloud.py +0 -0
  141. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/tts/iflytek.py +0 -0
  142. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/tts/macos_say.py +0 -0
  143. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/tts/minimax.py +0 -0
  144. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/tts/openai.py +0 -0
  145. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/tts/piper.py +0 -0
  146. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/tts/tencent.py +0 -0
  147. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/tts/volcengine.py +0 -0
  148. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/providers/tts/windows_sapi.py +0 -0
  149. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/server/__init__.py +0 -0
  150. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/server/app.py +0 -0
  151. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/server/auth.py +0 -0
  152. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/server/middleware.py +0 -0
  153. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/server/routes/__init__.py +0 -0
  154. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/server/routes/management.py +0 -0
  155. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/server/routes/stt.py +0 -0
  156. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/server/routes/tts.py +0 -0
  157. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/server/routes/webui.py +0 -0
  158. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/server/webui/app.js +0 -0
  159. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/server/webui/index.html +0 -0
  160. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/server/webui/styles.css +0 -0
  161. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/server/ws/__init__.py +0 -0
  162. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/server/ws/stt_stream.py +0 -0
  163. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/server/ws/tts_stream.py +0 -0
  164. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/telemetry/__init__.py +0 -0
  165. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/telemetry/perf.py +0 -0
  166. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/utils/__init__.py +0 -0
  167. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/utils/audio_converter.py +0 -0
  168. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/utils/audio_playback.py +0 -0
  169. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/openspeechapi/vendor_registry.yaml +0 -0
  170. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/output/output.wav +0 -0
  171. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/output.wav +0 -0
  172. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/providers.example.yaml +0 -0
  173. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/scripts/engines/cloud/install.sh +0 -0
  174. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/scripts/engines/faster-whisper/native/install.sh +0 -0
  175. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/scripts/engines/fish-speech/native/install.sh +0 -0
  176. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/scripts/engines/macos-stt/install.sh +0 -0
  177. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/scripts/engines/macos-stt/macos_stt.swift +0 -0
  178. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/scripts/engines/macos-stt/request_auth.swift +0 -0
  179. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/scripts/engines/sherpa-onnx/native/install.sh +0 -0
  180. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/scripts/engines/sherpa-onnx/native/run_streaming_server.py +0 -0
  181. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/scripts/engines/whisper/native/install.sh +0 -0
  182. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/scripts/engines/whisperlivekit/native/install.sh +0 -0
  183. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/__init__.py +0 -0
  184. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/conftest.py +0 -0
  185. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/e2e/__init__.py +0 -0
  186. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/e2e/conftest.py +0 -0
  187. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/e2e/test_fanout_e2e.py +0 -0
  188. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/e2e/test_faster_whisper_e2e.py +0 -0
  189. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/e2e/test_openai_e2e.py +0 -0
  190. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/e2e/test_webui_e2e.py +0 -0
  191. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/fixtures/hello.wav +0 -0
  192. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/integration/__init__.py +0 -0
  193. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/integration/test_fanout_integration.py +0 -0
  194. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/integration/test_in_process_integration.py +0 -0
  195. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/integration/test_server_client.py +0 -0
  196. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/__init__.py +0 -0
  197. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_aim_resolver.py +0 -0
  198. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_audio_converter.py +0 -0
  199. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_audio_playback.py +0 -0
  200. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_base.py +0 -0
  201. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_cli.py +0 -0
  202. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_cli_engine.py +0 -0
  203. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_client.py +0 -0
  204. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_config.py +0 -0
  205. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_context.py +0 -0
  206. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_debug_observer.py +0 -0
  207. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_dispatcher.py +0 -0
  208. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_docker_backend_progress.py +0 -0
  209. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_engine_registry.py +0 -0
  210. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_enums.py +0 -0
  211. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_executor_base.py +0 -0
  212. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_fanout.py +0 -0
  213. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_filters.py +0 -0
  214. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_hot_reload.py +0 -0
  215. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_in_process.py +0 -0
  216. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_latency_observer.py +0 -0
  217. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_lifecycle.py +0 -0
  218. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_local_engine_task_store.py +0 -0
  219. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_local_engines_manager.py +0 -0
  220. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_logging.py +0 -0
  221. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_metrics_observer.py +0 -0
  222. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_models.py +0 -0
  223. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_native_backend.py +0 -0
  224. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_observer_base.py +0 -0
  225. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_plugin_mechanism.py +0 -0
  226. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_providers/__init__.py +0 -0
  227. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_providers/test_cloud_providers.py +0 -0
  228. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_providers/test_elevenlabs_stt.py +0 -0
  229. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_providers/test_macos_say.py +0 -0
  230. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_providers/test_macos_speech.py +0 -0
  231. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_providers/test_openai_base_url.py +0 -0
  232. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_providers/test_openai_stt.py +0 -0
  233. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_providers/test_openai_tts.py +0 -0
  234. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_providers/test_sherpa_onnx_stt.py +0 -0
  235. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_providers/test_stt_stubs.py +0 -0
  236. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_providers/test_tts_stubs.py +0 -0
  237. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_providers/test_whisperlivekit_stt.py +0 -0
  238. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_registry.py +0 -0
  239. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_remote.py +0 -0
  240. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_server/__init__.py +0 -0
  241. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_server/test_auth.py +0 -0
  242. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_server/test_config_api.py +0 -0
  243. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_server/test_routes.py +0 -0
  244. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_server/test_websocket.py +0 -0
  245. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_subprocess.py +0 -0
  246. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/tests/unit/test_usage_observer.py +0 -0
  247. {openspeechapi-0.2.7 → openspeechapi-0.2.8}/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.7
3
+ Version: 0.2.8
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.7"
3
+ __version__ = "0.2.8"
4
4
 
5
5
  from openspeechapi.config import load_config
6
6
  from openspeechapi.core.base import SpeechProvider, STTProvider, TTSProvider
@@ -347,8 +347,16 @@ class IflytekSTT(STTProvider):
347
347
 
348
348
  result_texts: list[str] = []
349
349
 
350
+ # ``ws = await websockets.connect(...)`` returns the connection
351
+ # object directly. Re-using it as ``async with ws:`` worked on
352
+ # older websockets releases that exposed ``__aenter__`` /
353
+ # ``__aexit__`` on ``WebSocketClientProtocol``, but recent
354
+ # versions removed that re-entry alias and the only supported
355
+ # context-manager pattern is ``async with websockets.connect(...)``.
356
+ # Use try/finally with an explicit close so this stays correct
357
+ # across both old and new websockets.
350
358
  ws = await self._connect_with_retry()
351
- async with ws:
359
+ try:
352
360
  # Send audio in chunks with interleaved receive
353
361
  total = len(audio_bytes)
354
362
  offset = 0
@@ -429,6 +437,10 @@ class IflytekSTT(STTProvider):
429
437
 
430
438
  if data.get("status") == 2:
431
439
  break
440
+ finally:
441
+ # Idempotent on websockets ≥ 11; safe to call even if the
442
+ # server already closed the socket.
443
+ await ws.close()
432
444
 
433
445
  result = Transcription(text="".join(result_texts))
434
446
  logger.info("{}: completed in {:.0f}ms, result={} chars", self.name, (time.perf_counter() - _t0) * 1000, len(result.text))
@@ -479,8 +491,10 @@ class IflytekSTT(STTProvider):
479
491
  _sender_stop = asyncio.Event()
480
492
 
481
493
  logger.debug("{}: connecting to iFlytek WebSocket...", self.name)
494
+ # See ``transcribe`` for why this is try/finally + ``await
495
+ # ws.close()`` rather than ``async with ws``.
482
496
  ws = await self._connect_with_retry()
483
- async with ws:
497
+ try:
484
498
  _t_connected = time.perf_counter()
485
499
  logger.info("{}: WS connected in {:.0f}ms", self.name,
486
500
  (_t_connected - _t0) * 1000)
@@ -664,3 +678,6 @@ class IflytekSTT(STTProvider):
664
678
  await task
665
679
  except websockets.exceptions.ConnectionClosed:
666
680
  pass
681
+ finally:
682
+ # Idempotent on websockets ≥ 11.
683
+ await ws.close()
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "openspeechapi"
7
- version = "0.2.7"
7
+ version = "0.2.8"
8
8
  description = "Unified speech interface for STT/TTS providers"
9
9
  requires-python = ">=3.11"
10
10
  dependencies = [
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes