openspeechapi 0.2.0__tar.gz → 0.2.1__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.
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/PKG-INFO +1 -1
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/tts/iflytek.py +67 -16
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/pyproject.toml +1 -1
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.dockerignore +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.env.example +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.github/workflows/ci.yml +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.gitignore +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.tmp/audio/en.aiff +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.tmp/audio/en_16k.wav +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.tmp/audio/en_16k_pad6.wav +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.tmp/audio/en_long.aiff +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.tmp/audio/en_long_16k.wav +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.tmp/audio/en_mid.aiff +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.tmp/audio/en_mid_16k.wav +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.tmp/audio/zh.aiff +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.tmp/audio/zh_16k.wav +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.tmp/openspeech-8600.log +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.tmp/openspeech-serve.log +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.tmp/webui-server.log +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.tmp/webui-server.pid +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.tmp/wlk12101.log +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.tmp/wlk12101.pid +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.tmp/wlk12102.log +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/.tmp/wlk12102.pid +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/AGENTS.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/CLAUDE.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/Dockerfile +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/README.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/aibox-script/aibox-1.0.0-SNAPSHOT-stdout.log +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/aibox-script/aibox.2026-04-02.log +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/aibox-script/com.user.restart-jar.plist +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/aibox-script/restart-jar.sh +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/aibox-script.tar.gz +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/docker-compose.yml +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/architecture/local-engine-manager.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/architecture/logging-spec.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/architecture/stt-engineering-optimization-guide.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/architecture/stt-streaming-spec.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/architecture/webui-phase-a.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/engines/fish-speech-docker.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/engines/fish-speech-native.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/engines/stt-native-models.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/superpowers/plans/2026-04-01-phase1-implementation.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/superpowers/plans/2026-04-11-macos-native-tts-stt.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/superpowers/specs/2026-04-01-openspeech-api-design.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/superpowers/specs/2026-04-03-hot-lazy-loading.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/superpowers/specs/2026-04-03-phase2-protocol-layer.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/superpowers/specs/2026-04-03-phase3-production.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/superpowers/specs/2026-04-11-macos-native-tts-stt-design.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/superpowers/specs/2026-04-12-cloud-providers-webui-design.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/superpowers/specs/2026-04-15-streaming-tts-stt-fixes-display-names.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/superpowers/specs/2026-04-16-provider-management-engines-rename.md +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/examples/client_stt.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/examples/client_tts.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/examples/stt_simple.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/examples/tts_simple.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/__main__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/cli.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/client/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/client/client.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/config.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/core/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/core/base.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/core/enums.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/core/models.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/core/registry.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/core/settings.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/demo.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/dispatch/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/dispatch/context.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/dispatch/dispatcher.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/dispatch/executors/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/dispatch/executors/base.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/dispatch/executors/in_process.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/dispatch/executors/remote.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/dispatch/executors/subprocess_exec.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/dispatch/fanout.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/dispatch/filters.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/dispatch/lifecycle.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/dispatch/watcher.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/engine_catalog.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/engine_registry.yaml +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/exceptions.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/factory.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/aim_resolver.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/backends/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/backends/docker_backend.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/backends/native_backend.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/base.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/engines/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/engines/faster_whisper.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/engines/fish_speech.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/engines/sherpa_onnx.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/engines/whisper.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/engines/whisperlivekit.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/manager.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/models.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/progress.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/registry.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/task_store.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/tasks.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/logging_config.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/observe/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/observe/base.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/observe/debug.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/observe/latency.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/observe/metrics.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/observe/tracing.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/observe/usage.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/_template.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/stt/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/stt/alibaba.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/stt/assemblyai.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/stt/azure_speech.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/stt/baidu.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/stt/deepgram.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/stt/elevenlabs.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/stt/faster_whisper.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/stt/google_cloud.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/stt/iflytek.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/stt/macos_speech.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/stt/openai.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/stt/sherpa_onnx.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/stt/tencent.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/stt/volcengine.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/stt/whisper.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/stt/whisperlivekit.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/stt/windows_speech.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/tts/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/tts/alibaba.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/tts/azure_speech.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/tts/baidu.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/tts/coqui.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/tts/cosyvoice.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/tts/deepgram.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/tts/elevenlabs.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/tts/fish_speech.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/tts/google_cloud.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/tts/macos_say.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/tts/minimax.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/tts/openai.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/tts/piper.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/tts/tencent.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/tts/volcengine.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/providers/tts/windows_sapi.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/server/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/server/app.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/server/auth.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/server/middleware.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/server/routes/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/server/routes/management.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/server/routes/stt.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/server/routes/tts.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/server/routes/webui.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/server/webui/app.js +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/server/webui/index.html +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/server/webui/styles.css +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/server/ws/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/server/ws/stt_stream.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/server/ws/tts_stream.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/telemetry/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/telemetry/perf.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/utils/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/utils/audio_converter.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/utils/audio_playback.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/vendor_registry.yaml +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/output/output.wav +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/output.wav +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/providers.example.yaml +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/scripts/engines/cloud/install.sh +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/scripts/engines/faster-whisper/native/install.sh +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/scripts/engines/fish-speech/native/install.sh +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/scripts/engines/macos-stt/install.sh +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/scripts/engines/macos-stt/macos_stt.swift +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/scripts/engines/macos-stt/request_auth.swift +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/scripts/engines/sherpa-onnx/native/install.sh +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/scripts/engines/sherpa-onnx/native/run_streaming_server.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/scripts/engines/whisper/native/install.sh +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/scripts/engines/whisperlivekit/native/install.sh +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/conftest.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/e2e/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/e2e/conftest.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/e2e/test_fanout_e2e.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/e2e/test_faster_whisper_e2e.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/e2e/test_openai_e2e.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/e2e/test_webui_e2e.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/fixtures/hello.wav +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/integration/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/integration/test_fanout_integration.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/integration/test_in_process_integration.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/integration/test_server_client.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_aim_resolver.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_audio_converter.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_audio_playback.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_base.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_cli.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_cli_engine.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_client.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_config.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_context.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_debug_observer.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_dispatcher.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_docker_backend_progress.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_engine_registry.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_enums.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_executor_base.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_fanout.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_filters.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_hot_reload.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_in_process.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_latency_observer.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_lifecycle.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_local_engine_task_store.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_local_engines_manager.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_logging.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_metrics_observer.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_models.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_native_backend.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_observer_base.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_plugin_mechanism.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_providers/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_providers/test_cloud_providers.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_providers/test_elevenlabs_stt.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_providers/test_macos_say.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_providers/test_macos_speech.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_providers/test_openai_base_url.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_providers/test_openai_stt.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_providers/test_openai_tts.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_providers/test_sherpa_onnx_stt.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_providers/test_stt_stubs.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_providers/test_tts_stubs.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_providers/test_whisperlivekit_stt.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_registry.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_remote.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_server/__init__.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_server/test_auth.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_server/test_config_api.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_server/test_routes.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_server/test_websocket.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_subprocess.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_usage_observer.py +0 -0
- {openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_watcher.py +0 -0
|
@@ -28,6 +28,28 @@ class IflytekTTSSettings(BaseSettings):
|
|
|
28
28
|
api_secret: str = ""
|
|
29
29
|
voice: str = "xiaoyan"
|
|
30
30
|
speed: int = 50
|
|
31
|
+
# Audio output encoding requested from iFlytek.
|
|
32
|
+
# - "lame": MP3 frames (default; smaller, but caller must decode)
|
|
33
|
+
# - "raw": 16-bit PCM @ 16 kHz mono, big-endian L16 (drop-in
|
|
34
|
+
# playable as raw PCM; required by callers that wrap the
|
|
35
|
+
# bytes in a fixed-format wire envelope and assume PCM,
|
|
36
|
+
# e.g. wallex's RESP_VOICE which advertises
|
|
37
|
+
# encoding=raw/bitDepth=16/sampleRate=16000 to the
|
|
38
|
+
# panel — feeding MP3 bytes through that envelope plays
|
|
39
|
+
# back as pure noise on the speaker).
|
|
40
|
+
# Default stays "lame" for backward-compat; deployments that need
|
|
41
|
+
# PCM (wallex / direct hardware playback) override via yaml.
|
|
42
|
+
aue: str = "lame"
|
|
43
|
+
# Output sample rate for raw PCM mode (only meaningful when
|
|
44
|
+
# aue="raw"). 16000 matches what the panel and the iFlytek
|
|
45
|
+
# default both expect; left configurable so an 8 kHz device or
|
|
46
|
+
# a 24 kHz studio path doesn't have to fork the provider.
|
|
47
|
+
auf_rate: int = 16000
|
|
48
|
+
# Volume (0-100). iFlytek default is 50; making it explicit so
|
|
49
|
+
# the parameter parity with Java's TtsConfig is complete.
|
|
50
|
+
volume: int = 50
|
|
51
|
+
# Pitch (0-100). Same rationale as volume.
|
|
52
|
+
pitch: int = 50
|
|
31
53
|
|
|
32
54
|
class IflytekTTS(TTSProvider):
|
|
33
55
|
name = "iflytek-tts"
|
|
@@ -35,12 +57,17 @@ class IflytekTTS(TTSProvider):
|
|
|
35
57
|
execution_mode = ExecMode.IN_PROCESS
|
|
36
58
|
settings_cls = IflytekTTSSettings
|
|
37
59
|
capabilities = {Capability.BATCH, Capability.STREAMING, Capability.MULTILINGUAL}
|
|
38
|
-
field_options = {
|
|
39
|
-
"
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
60
|
+
field_options = {
|
|
61
|
+
"voice": [
|
|
62
|
+
"xiaoyan", "aisjiuxu", "aisxping", "aisjinger", "aisbabyxu",
|
|
63
|
+
"x4_lingxiaolu_em", "x4_lingfeizhe_em", "xiaoyu", "xiaoqi",
|
|
64
|
+
"xiaofeng", "xiaomei", "xiaolin", "xiaorong", "xiaoqian",
|
|
65
|
+
"catherine", "john", "laura", "yuka", "xiaoqiukor",
|
|
66
|
+
# English assistant-style voices used by wallex deployments.
|
|
67
|
+
"x4_enuk_ashleigh_assist",
|
|
68
|
+
],
|
|
69
|
+
"aue": ["lame", "raw"],
|
|
70
|
+
}
|
|
44
71
|
|
|
45
72
|
_WS_HOST = "tts-api.xfyun.cn"
|
|
46
73
|
_WS_PATH = "/v2/tts"
|
|
@@ -107,12 +134,21 @@ class IflytekTTS(TTSProvider):
|
|
|
107
134
|
async for chunk in self.synthesize_stream(text, opts):
|
|
108
135
|
parts.append(chunk.data)
|
|
109
136
|
audio_bytes = b"".join(parts)
|
|
110
|
-
|
|
137
|
+
# Format / sample_rate must reflect what iFlytek actually returned —
|
|
138
|
+
# callers downstream may set wire-protocol encoding metadata from
|
|
139
|
+
# this field, and a wrong tag on the bytes plays back as noise on
|
|
140
|
+
# raw-PCM consumers.
|
|
141
|
+
fmt = "pcm_s16le" if self.settings.aue == "raw" else "mp3"
|
|
142
|
+
sr = self.settings.auf_rate if self.settings.aue == "raw" else 16000
|
|
143
|
+
logger.info(
|
|
144
|
+
"iFlytek TTS: {} chunks, {} bytes total, format={}, sample_rate={}",
|
|
145
|
+
len(parts), len(audio_bytes), fmt, sr,
|
|
146
|
+
)
|
|
111
147
|
return AudioData(
|
|
112
148
|
data=audio_bytes,
|
|
113
|
-
sample_rate=
|
|
149
|
+
sample_rate=sr,
|
|
114
150
|
channels=1,
|
|
115
|
-
format=
|
|
151
|
+
format=fmt,
|
|
116
152
|
)
|
|
117
153
|
|
|
118
154
|
# iFlytek voice catalog — vcn → (display name, language, group)
|
|
@@ -147,15 +183,30 @@ class IflytekTTS(TTSProvider):
|
|
|
147
183
|
vcn = voice or self.settings.voice
|
|
148
184
|
spd = int(speed * 50) if speed and speed != 1.0 else self.settings.speed
|
|
149
185
|
text_b64 = base64.b64encode(text.encode("utf-8")).decode("utf-8")
|
|
186
|
+
business: dict[str, Any] = {
|
|
187
|
+
"aue": self.settings.aue,
|
|
188
|
+
"vcn": vcn,
|
|
189
|
+
"speed": spd,
|
|
190
|
+
"volume": self.settings.volume,
|
|
191
|
+
"pitch": self.settings.pitch,
|
|
192
|
+
"tte": "UTF8",
|
|
193
|
+
}
|
|
194
|
+
if self.settings.aue == "lame":
|
|
195
|
+
# ``sfl=1`` (stream-frame-length) is an MP3-only knob that
|
|
196
|
+
# tells iFlytek to emit per-frame audio rather than waiting
|
|
197
|
+
# for the whole file. It has no meaning for raw PCM (raw is
|
|
198
|
+
# always streamed as 40 ms slices) and iFlytek rejects the
|
|
199
|
+
# combo with a code 10005 "invalid parameter" — so we only
|
|
200
|
+
# send it on the lame path.
|
|
201
|
+
business["sfl"] = 1
|
|
202
|
+
else:
|
|
203
|
+
# Raw / L16 mode requires ``auf`` to declare the PCM
|
|
204
|
+
# sample-rate iFlytek should produce. Java wallex sends
|
|
205
|
+
# ``audio/L16;rate=16000`` here; we mirror that exactly.
|
|
206
|
+
business["auf"] = f"audio/L16;rate={self.settings.auf_rate}"
|
|
150
207
|
return {
|
|
151
208
|
"common": {"app_id": self.settings.app_id},
|
|
152
|
-
"business":
|
|
153
|
-
"aue": "lame",
|
|
154
|
-
"sfl": 1,
|
|
155
|
-
"vcn": vcn,
|
|
156
|
-
"speed": spd,
|
|
157
|
-
"tte": "UTF8",
|
|
158
|
-
},
|
|
209
|
+
"business": business,
|
|
159
210
|
"data": {
|
|
160
211
|
"status": 2,
|
|
161
212
|
"text": text_b64,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/architecture/stt-engineering-optimization-guide.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/superpowers/specs/2026-04-03-hot-lazy-loading.md
RENAMED
|
File without changes
|
|
File without changes
|
{openspeechapi-0.2.0 → openspeechapi-0.2.1}/docs/superpowers/specs/2026-04-03-phase3-production.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/dispatch/executors/subprocess_exec.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/backends/__init__.py
RENAMED
|
File without changes
|
{openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/backends/docker_backend.py
RENAMED
|
File without changes
|
{openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/backends/native_backend.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/engines/faster_whisper.py
RENAMED
|
File without changes
|
{openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/engines/fish_speech.py
RENAMED
|
File without changes
|
{openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/engines/sherpa_onnx.py
RENAMED
|
File without changes
|
|
File without changes
|
{openspeechapi-0.2.0 → openspeechapi-0.2.1}/openspeechapi/local_engines/engines/whisperlivekit.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openspeechapi-0.2.0 → openspeechapi-0.2.1}/scripts/engines/faster-whisper/native/install.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openspeechapi-0.2.0 → openspeechapi-0.2.1}/scripts/engines/whisperlivekit/native/install.sh
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/integration/test_in_process_integration.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_providers/test_cloud_providers.py
RENAMED
|
File without changes
|
{openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_providers/test_elevenlabs_stt.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_providers/test_openai_base_url.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_providers/test_sherpa_onnx_stt.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{openspeechapi-0.2.0 → openspeechapi-0.2.1}/tests/unit/test_providers/test_whisperlivekit_stt.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|