diff --git a/CHANGELOG.md b/CHANGELOG.md index c0c081c..715d3c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## 1.5.3 + +- Add `phrase` to wake word model info +- Add tests to CI + +## 1.5.2 + +- Fix missing VERSION file + ## 1.5.1 - Add `version` to info artifacts diff --git a/wyoming/http/asr_server.py b/wyoming/http/asr_server.py index e2b369a..0fe9a7f 100644 --- a/wyoming/http/asr_server.py +++ b/wyoming/http/asr_server.py @@ -1,4 +1,5 @@ """HTTP server for automated speech recognition (ASR).""" + import argparse import io import wave @@ -10,6 +11,7 @@ from wyoming.asr import Transcribe, Transcript from wyoming.audio import wav_to_chunks from wyoming.client import AsyncClient +from wyoming.error import Error from wyoming.info import Describe, Info _DIR = Path(__file__).parent @@ -66,6 +68,12 @@ async def api_stt() -> Response: transcript = Transcript.from_event(event) return jsonify(transcript.to_dict()) + if Error.is_type(event.type): + error = Error.from_event(event) + raise RuntimeError( + f"Unexpected error from client: code={error.code}, text={error.text}" + ) + @app.route("/api/info", methods=["GET"]) async def api_info(): uri = request.args.get("uri", args.uri) diff --git a/wyoming/http/tts_server.py b/wyoming/http/tts_server.py index 7664391..5941e9c 100644 --- a/wyoming/http/tts_server.py +++ b/wyoming/http/tts_server.py @@ -10,6 +10,7 @@ from wyoming.audio import AudioChunk, AudioStart, AudioStop from wyoming.client import AsyncClient +from wyoming.error import Error from wyoming.info import Describe, Info from wyoming.tts import Synthesize, SynthesizeVoice @@ -77,6 +78,11 @@ async def api_stt() -> Response: return Response( wav_io.getvalue(), headers={"Content-Type": "audio/wav"} ) + elif Error.is_type(event.type): + error = Error.from_event(event) + raise RuntimeError( + f"Unexpected error from client: code={error.code}, text={error.text}" + ) @app.route("/api/info", methods=["GET"]) async def api_info(): @@ -96,6 +102,11 @@ async def api_info(): info = Info.from_event(event) return jsonify(info.to_dict()) + @app.errorhandler(Exception) + async def handle_error(err): + """Return error as text.""" + return (f"{err.__class__.__name__}: {err}", 500) + flask_api_doc(app, config_path=str(CONF_PATH), url_prefix="/api", title="API doc") app.run(args.host, args.port)