openspeechapi 0.2.3__tar.gz → 0.2.4__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.3 → openspeechapi-0.2.4}/PKG-INFO +1 -1
  2. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/__init__.py +1 -1
  3. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/core/models.py +10 -0
  4. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/dispatch/dispatcher.py +23 -4
  5. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/stt/iflytek.py +17 -3
  6. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/pyproject.toml +1 -1
  7. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.dockerignore +0 -0
  8. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.env.example +0 -0
  9. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.github/workflows/ci.yml +0 -0
  10. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.gitignore +0 -0
  11. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.tmp/audio/en.aiff +0 -0
  12. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.tmp/audio/en_16k.wav +0 -0
  13. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.tmp/audio/en_16k_pad6.wav +0 -0
  14. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.tmp/audio/en_long.aiff +0 -0
  15. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.tmp/audio/en_long_16k.wav +0 -0
  16. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.tmp/audio/en_mid.aiff +0 -0
  17. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.tmp/audio/en_mid_16k.wav +0 -0
  18. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.tmp/audio/zh.aiff +0 -0
  19. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.tmp/audio/zh_16k.wav +0 -0
  20. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.tmp/openspeech-8600.log +0 -0
  21. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.tmp/openspeech-serve.log +0 -0
  22. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.tmp/webui-server.log +0 -0
  23. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.tmp/webui-server.pid +0 -0
  24. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.tmp/wlk12101.log +0 -0
  25. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.tmp/wlk12101.pid +0 -0
  26. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.tmp/wlk12102.log +0 -0
  27. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/.tmp/wlk12102.pid +0 -0
  28. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/AGENTS.md +0 -0
  29. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/CLAUDE.md +0 -0
  30. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/Dockerfile +0 -0
  31. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/README.md +0 -0
  32. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/aibox-script/aibox-1.0.0-SNAPSHOT-stdout.log +0 -0
  33. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/aibox-script/aibox.2026-04-02.log +0 -0
  34. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/aibox-script/com.user.restart-jar.plist +0 -0
  35. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/aibox-script/restart-jar.sh +0 -0
  36. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/aibox-script.tar.gz +0 -0
  37. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/docker-compose.yml +0 -0
  38. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/docs/architecture/local-engine-manager.md +0 -0
  39. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/docs/architecture/logging-spec.md +0 -0
  40. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/docs/architecture/stt-engineering-optimization-guide.md +0 -0
  41. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/docs/architecture/stt-streaming-spec.md +0 -0
  42. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/docs/architecture/webui-phase-a.md +0 -0
  43. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/docs/engines/fish-speech-docker.md +0 -0
  44. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/docs/engines/fish-speech-native.md +0 -0
  45. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/docs/engines/stt-native-models.md +0 -0
  46. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/docs/superpowers/plans/2026-04-01-phase1-implementation.md +0 -0
  47. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/docs/superpowers/plans/2026-04-11-macos-native-tts-stt.md +0 -0
  48. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/docs/superpowers/specs/2026-04-01-openspeech-api-design.md +0 -0
  49. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/docs/superpowers/specs/2026-04-03-hot-lazy-loading.md +0 -0
  50. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/docs/superpowers/specs/2026-04-03-phase2-protocol-layer.md +0 -0
  51. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/docs/superpowers/specs/2026-04-03-phase3-production.md +0 -0
  52. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/docs/superpowers/specs/2026-04-11-macos-native-tts-stt-design.md +0 -0
  53. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/docs/superpowers/specs/2026-04-12-cloud-providers-webui-design.md +0 -0
  54. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/docs/superpowers/specs/2026-04-15-streaming-tts-stt-fixes-display-names.md +0 -0
  55. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/docs/superpowers/specs/2026-04-16-provider-management-engines-rename.md +0 -0
  56. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/examples/client_stt.py +0 -0
  57. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/examples/client_tts.py +0 -0
  58. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/examples/stt_simple.py +0 -0
  59. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/examples/tts_simple.py +0 -0
  60. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/__main__.py +0 -0
  61. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/cli.py +0 -0
  62. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/client/__init__.py +0 -0
  63. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/client/client.py +0 -0
  64. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/config.py +0 -0
  65. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/core/__init__.py +0 -0
  66. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/core/base.py +0 -0
  67. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/core/enums.py +0 -0
  68. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/core/registry.py +0 -0
  69. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/core/settings.py +0 -0
  70. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/demo.py +0 -0
  71. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/dispatch/__init__.py +0 -0
  72. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/dispatch/context.py +0 -0
  73. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/dispatch/executors/__init__.py +0 -0
  74. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/dispatch/executors/base.py +0 -0
  75. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/dispatch/executors/in_process.py +0 -0
  76. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/dispatch/executors/remote.py +0 -0
  77. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/dispatch/executors/subprocess_exec.py +0 -0
  78. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/dispatch/fanout.py +0 -0
  79. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/dispatch/filters.py +0 -0
  80. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/dispatch/lifecycle.py +0 -0
  81. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/dispatch/watcher.py +0 -0
  82. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/engine_catalog.py +0 -0
  83. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/engine_registry.yaml +0 -0
  84. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/exceptions.py +0 -0
  85. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/factory.py +0 -0
  86. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/local_engines/__init__.py +0 -0
  87. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/local_engines/aim_resolver.py +0 -0
  88. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/local_engines/backends/__init__.py +0 -0
  89. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/local_engines/backends/docker_backend.py +0 -0
  90. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/local_engines/backends/native_backend.py +0 -0
  91. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/local_engines/base.py +0 -0
  92. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/local_engines/engines/__init__.py +0 -0
  93. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/local_engines/engines/faster_whisper.py +0 -0
  94. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/local_engines/engines/fish_speech.py +0 -0
  95. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/local_engines/engines/sherpa_onnx.py +0 -0
  96. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/local_engines/engines/whisper.py +0 -0
  97. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/local_engines/engines/whisperlivekit.py +0 -0
  98. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/local_engines/manager.py +0 -0
  99. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/local_engines/models.py +0 -0
  100. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/local_engines/progress.py +0 -0
  101. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/local_engines/registry.py +0 -0
  102. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/local_engines/task_store.py +0 -0
  103. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/local_engines/tasks.py +0 -0
  104. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/logging_config.py +0 -0
  105. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/observe/__init__.py +0 -0
  106. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/observe/base.py +0 -0
  107. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/observe/debug.py +0 -0
  108. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/observe/latency.py +0 -0
  109. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/observe/metrics.py +0 -0
  110. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/observe/tracing.py +0 -0
  111. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/observe/usage.py +0 -0
  112. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/__init__.py +0 -0
  113. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/_template.py +0 -0
  114. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/stt/__init__.py +0 -0
  115. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/stt/alibaba.py +0 -0
  116. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/stt/assemblyai.py +0 -0
  117. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/stt/azure_speech.py +0 -0
  118. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/stt/baidu.py +0 -0
  119. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/stt/deepgram.py +0 -0
  120. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/stt/elevenlabs.py +0 -0
  121. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/stt/faster_whisper.py +0 -0
  122. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/stt/google_cloud.py +0 -0
  123. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/stt/macos_speech.py +0 -0
  124. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/stt/openai.py +0 -0
  125. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/stt/sherpa_onnx.py +0 -0
  126. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/stt/tencent.py +0 -0
  127. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/stt/volcengine.py +0 -0
  128. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/stt/whisper.py +0 -0
  129. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/stt/whisperlivekit.py +0 -0
  130. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/stt/windows_speech.py +0 -0
  131. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/tts/__init__.py +0 -0
  132. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/tts/alibaba.py +0 -0
  133. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/tts/azure_speech.py +0 -0
  134. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/tts/baidu.py +0 -0
  135. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/tts/coqui.py +0 -0
  136. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/tts/cosyvoice.py +0 -0
  137. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/tts/deepgram.py +0 -0
  138. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/tts/elevenlabs.py +0 -0
  139. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/tts/fish_speech.py +0 -0
  140. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/tts/google_cloud.py +0 -0
  141. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/tts/iflytek.py +0 -0
  142. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/tts/macos_say.py +0 -0
  143. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/tts/minimax.py +0 -0
  144. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/tts/openai.py +0 -0
  145. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/tts/piper.py +0 -0
  146. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/tts/tencent.py +0 -0
  147. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/tts/volcengine.py +0 -0
  148. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/providers/tts/windows_sapi.py +0 -0
  149. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/server/__init__.py +0 -0
  150. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/server/app.py +0 -0
  151. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/server/auth.py +0 -0
  152. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/server/middleware.py +0 -0
  153. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/server/routes/__init__.py +0 -0
  154. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/server/routes/management.py +0 -0
  155. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/server/routes/stt.py +0 -0
  156. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/server/routes/tts.py +0 -0
  157. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/server/routes/webui.py +0 -0
  158. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/server/webui/app.js +0 -0
  159. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/server/webui/index.html +0 -0
  160. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/server/webui/styles.css +0 -0
  161. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/server/ws/__init__.py +0 -0
  162. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/server/ws/stt_stream.py +0 -0
  163. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/server/ws/tts_stream.py +0 -0
  164. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/telemetry/__init__.py +0 -0
  165. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/telemetry/perf.py +0 -0
  166. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/utils/__init__.py +0 -0
  167. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/utils/audio_converter.py +0 -0
  168. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/utils/audio_playback.py +0 -0
  169. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/openspeechapi/vendor_registry.yaml +0 -0
  170. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/output/output.wav +0 -0
  171. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/output.wav +0 -0
  172. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/providers.example.yaml +0 -0
  173. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/scripts/engines/cloud/install.sh +0 -0
  174. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/scripts/engines/faster-whisper/native/install.sh +0 -0
  175. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/scripts/engines/fish-speech/native/install.sh +0 -0
  176. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/scripts/engines/macos-stt/install.sh +0 -0
  177. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/scripts/engines/macos-stt/macos_stt.swift +0 -0
  178. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/scripts/engines/macos-stt/request_auth.swift +0 -0
  179. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/scripts/engines/sherpa-onnx/native/install.sh +0 -0
  180. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/scripts/engines/sherpa-onnx/native/run_streaming_server.py +0 -0
  181. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/scripts/engines/whisper/native/install.sh +0 -0
  182. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/scripts/engines/whisperlivekit/native/install.sh +0 -0
  183. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/__init__.py +0 -0
  184. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/conftest.py +0 -0
  185. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/e2e/__init__.py +0 -0
  186. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/e2e/conftest.py +0 -0
  187. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/e2e/test_fanout_e2e.py +0 -0
  188. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/e2e/test_faster_whisper_e2e.py +0 -0
  189. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/e2e/test_openai_e2e.py +0 -0
  190. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/e2e/test_webui_e2e.py +0 -0
  191. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/fixtures/hello.wav +0 -0
  192. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/integration/__init__.py +0 -0
  193. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/integration/test_fanout_integration.py +0 -0
  194. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/integration/test_in_process_integration.py +0 -0
  195. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/integration/test_server_client.py +0 -0
  196. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/__init__.py +0 -0
  197. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_aim_resolver.py +0 -0
  198. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_audio_converter.py +0 -0
  199. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_audio_playback.py +0 -0
  200. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_base.py +0 -0
  201. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_cli.py +0 -0
  202. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_cli_engine.py +0 -0
  203. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_client.py +0 -0
  204. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_config.py +0 -0
  205. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_context.py +0 -0
  206. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_debug_observer.py +0 -0
  207. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_dispatcher.py +0 -0
  208. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_docker_backend_progress.py +0 -0
  209. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_engine_registry.py +0 -0
  210. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_enums.py +0 -0
  211. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_executor_base.py +0 -0
  212. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_fanout.py +0 -0
  213. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_filters.py +0 -0
  214. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_hot_reload.py +0 -0
  215. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_in_process.py +0 -0
  216. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_latency_observer.py +0 -0
  217. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_lifecycle.py +0 -0
  218. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_local_engine_task_store.py +0 -0
  219. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_local_engines_manager.py +0 -0
  220. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_logging.py +0 -0
  221. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_metrics_observer.py +0 -0
  222. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_models.py +0 -0
  223. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_native_backend.py +0 -0
  224. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_observer_base.py +0 -0
  225. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_plugin_mechanism.py +0 -0
  226. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_providers/__init__.py +0 -0
  227. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_providers/test_cloud_providers.py +0 -0
  228. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_providers/test_elevenlabs_stt.py +0 -0
  229. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_providers/test_macos_say.py +0 -0
  230. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_providers/test_macos_speech.py +0 -0
  231. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_providers/test_openai_base_url.py +0 -0
  232. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_providers/test_openai_stt.py +0 -0
  233. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_providers/test_openai_tts.py +0 -0
  234. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_providers/test_sherpa_onnx_stt.py +0 -0
  235. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_providers/test_stt_stubs.py +0 -0
  236. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_providers/test_tts_stubs.py +0 -0
  237. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_providers/test_whisperlivekit_stt.py +0 -0
  238. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_registry.py +0 -0
  239. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_remote.py +0 -0
  240. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_server/__init__.py +0 -0
  241. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_server/test_auth.py +0 -0
  242. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_server/test_config_api.py +0 -0
  243. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_server/test_routes.py +0 -0
  244. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_server/test_websocket.py +0 -0
  245. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_subprocess.py +0 -0
  246. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/tests/unit/test_usage_observer.py +0 -0
  247. {openspeechapi-0.2.3 → openspeechapi-0.2.4}/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.3
3
+ Version: 0.2.4
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.3"
3
+ __version__ = "0.2.4"
4
4
 
5
5
  from openspeechapi.config import load_config
6
6
  from openspeechapi.core.base import SpeechProvider, STTProvider, TTSProvider
@@ -50,6 +50,16 @@ class STTOptions:
50
50
  beam_size: int | None = None
51
51
  compute_type: str | None = None
52
52
  fp16: bool | None = None
53
+ # Per-call override for the trailing-silence threshold (ms) before
54
+ # the provider treats utterance as ended. ``None`` means "use the
55
+ # provider's configured default" (e.g. iflytek's ``settings.vad_eos``
56
+ # populated from speech_providers.yaml). Wallex passes the
57
+ # panel-supplied ``parameter.iat.eos`` here when the panel needs a
58
+ # different value than the deployment default — for instance a
59
+ # kiosk that wants more responsive cut-off than a slow-paced
60
+ # voice assistant. Providers that don't support VAD finalization
61
+ # (Whisper, Faster-Whisper) silently ignore this field.
62
+ vad_eos: int | None = None
53
63
 
54
64
 
55
65
  @dataclass
@@ -114,9 +114,17 @@ class _STTNamespace:
114
114
  self,
115
115
  provider: str,
116
116
  stream: "AsyncIterator[bytes]",
117
+ opts: "STTOptions | None" = None,
117
118
  ) -> "AsyncIterator[Transcription]":
118
- """Stream audio chunks to the named provider and yield transcriptions."""
119
- async for item in self._dispatcher._transcribe_stream(provider, stream):
119
+ """Stream audio chunks to the named provider and yield transcriptions.
120
+
121
+ ``opts`` is optional and forwarded to the provider's
122
+ ``transcribe_stream`` if it declares the parameter (current users:
123
+ iFlytek STT honors ``opts.vad_eos`` for per-call silence-threshold
124
+ override). Providers that don't declare ``opts`` raise TypeError;
125
+ callers that don't need the override should leave it ``None``.
126
+ """
127
+ async for item in self._dispatcher._transcribe_stream(provider, stream, opts):
120
128
  yield item
121
129
 
122
130
  async def fanout(
@@ -479,8 +487,14 @@ class ServiceDispatcher:
479
487
  self,
480
488
  provider: str,
481
489
  stream: AsyncIterator[bytes],
490
+ opts: STTOptions | None = None,
482
491
  ) -> AsyncIterator[Transcription]:
483
- """Stream audio chunks to the provider and yield Transcription results."""
492
+ """Stream audio chunks to the provider and yield Transcription results.
493
+
494
+ ``opts`` is forwarded to the provider only when non-None — keeps
495
+ the call site backward-compatible with providers whose
496
+ ``transcribe_stream`` predates the ``opts`` parameter.
497
+ """
484
498
  handle = self._get_handle(provider)
485
499
  await self._lifecycle.ensure_ready(provider)
486
500
  ctx = InvokeContext(
@@ -488,6 +502,11 @@ class ServiceDispatcher:
488
502
  method="transcribe_stream",
489
503
  exec_mode=handle.exec_mode,
490
504
  )
505
+ # Build kwargs conditionally so providers without ``opts`` in
506
+ # their signature don't get a surprise unexpected-keyword error.
507
+ invoke_kwargs: dict[str, Any] = {"stream": stream}
508
+ if opts is not None:
509
+ invoke_kwargs["opts"] = opts
491
510
  with bind_context(
492
511
  provider=provider, engine=provider, request_id=ctx.request_id
493
512
  ):
@@ -500,7 +519,7 @@ class ServiceDispatcher:
500
519
  count = 0
501
520
  try:
502
521
  async for item in handle.executor.invoke_stream(
503
- "transcribe_stream", stream=stream
522
+ "transcribe_stream", **invoke_kwargs
504
523
  ):
505
524
  count += 1
506
525
  yield item
@@ -216,10 +216,18 @@ class IflytekSTT(STTProvider):
216
216
  # confuses anyone reading the request body, so
217
217
  # gate it on the canonical language.
218
218
  canon = _canonical_language(self.settings.language)
219
+ # Per-call override (``opts.vad_eos``) trumps the
220
+ # provider default. Wallex routes the panel's
221
+ # ``parameter.iat.eos`` through here so a kiosk
222
+ # can ship a tighter or looser silence threshold
223
+ # than the deployment yaml.
224
+ eos = (opts.vad_eos
225
+ if opts is not None and opts.vad_eos is not None
226
+ else self.settings.vad_eos)
219
227
  business = {
220
228
  "language": canon,
221
229
  "domain": "iat",
222
- "vad_eos": self.settings.vad_eos,
230
+ "vad_eos": eos,
223
231
  }
224
232
  if canon == "zh_cn":
225
233
  business["accent"] = "mandarin"
@@ -288,7 +296,7 @@ class IflytekSTT(STTProvider):
288
296
  return "".join(parts)
289
297
 
290
298
  async def transcribe_stream(
291
- self, stream: AsyncIterator[bytes]
299
+ self, stream: AsyncIterator[bytes], opts: STTOptions | None = None,
292
300
  ) -> AsyncIterator[Transcription]:
293
301
  """Stream audio chunks to iFlytek via WebSocket and yield transcriptions.
294
302
 
@@ -345,11 +353,17 @@ class IflytekSTT(STTProvider):
345
353
  # See transcribe() for rationale on
346
354
  # canonicalizing language and gating accent.
347
355
  canon = _canonical_language(self.settings.language)
356
+ # Per-call ``opts.vad_eos`` (e.g. wallex
357
+ # forwarding the panel's ``parameter.iat.eos``)
358
+ # trumps the provider's configured default.
359
+ eos = (opts.vad_eos
360
+ if opts is not None and opts.vad_eos is not None
361
+ else self.settings.vad_eos)
348
362
  business = {
349
363
  "language": canon,
350
364
  "domain": "iat",
351
365
  "dwa": "wpgs",
352
- "vad_eos": self.settings.vad_eos,
366
+ "vad_eos": eos,
353
367
  }
354
368
  if canon == "zh_cn":
355
369
  business["accent"] = "mandarin"
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "openspeechapi"
7
- version = "0.2.3"
7
+ version = "0.2.4"
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