Describe the bug
The OpenAI-compatible text-to-speech endpoint /v3/audio/speech ignores response_format. For wav, pcm, mp3 and flac it returns the same body: a WAV file with 32-bit IEEE float samples (format tag 3). The response is also sent with Content-Type: application/json; charset=utf-8.
The OpenAI API specifies 16-bit PCM for wav and headerless 16-bit little-endian PCM for pcm, so clients written against it cannot play the output. For example, wyoming_openai (the Wyoming bridge used by Home Assistant) cannot parse the float WAV header and plays static: roryeckel/wyoming_openai#72
To Reproduce
- Models repository:
OpenVINO/Kokoro-82M-int8-ov pulled from Hugging Face into /models/OpenVINO/Kokoro-82M-int8-ov, graph generated with ovms --configure --model_path /models/OpenVINO/Kokoro-82M-int8-ov --target_device CPU:
input_stream: "HTTP_REQUEST_PAYLOAD:input"
output_stream: "HTTP_RESPONSE_PAYLOAD:output"
node {
name: "T2sExecutor"
calculator: "T2sCalculator"
input_side_packet: "TTS_NODE_RESOURCES:t2s_servable"
input_stream: "HTTP_REQUEST_PAYLOAD:input"
output_stream: "HTTP_RESPONSE_PAYLOAD:output"
node_options: {
[type.googleapis.com / mediapipe.T2sCalculatorOptions]: {
models_path: "/models/OpenVINO/Kokoro-82M-int8-ov"
target_device: "CPU"
plugin_config: '{"NUM_STREAMS":"1"}'
}
}
}
- OVMS launch command (container
openvino/model_server:latest-gpu):
--rest_port 8080 --config_path /config/config.json --cache_dir /cache --log_level INFO
- Client command:
for rf in wav pcm mp3 flac; do
curl -s http://localhost:8080/v3/audio/speech -H 'Content-Type: application/json' \
-d "{\"model\":\"OpenVINO/Kokoro-82M-int8-ov\",\"input\":\"Hello there.\",\"voice\":\"am_adam\",\"response_format\":\"$rf\"}" \
-o "out.$rf"
file -b "out.$rf"
done
- Every file is identical (146444 bytes):
RIFF (little-endian) data, WAVE audio, IEEE Float, mono 24000 Hz
Response headers:
HTTP/1.1 200 OK
content-length: 146444
content-type: application/json; charset=utf-8
Expected behavior
wav (the default) returns a 16-bit PCM WAV, as OpenAI does.
pcm returns headerless 16-bit little-endian PCM.
- Formats OVMS cannot produce (e.g.
mp3, flac) are rejected with a 400 error instead of silently returning a WAV.
- The
Content-Type matches the audio format (e.g. audio/wav).
Logs
Nothing is logged for these requests at --log_level INFO; I have not captured DEBUG logs.
Configuration
- OVMS version:
OpenVINO Model Server 2026.4.0.869b2186a, OpenVINO backend 2026.4.0-22959-99c81491cc3-releases/2026/4, OpenVINO GenAI backend 2026.4.0.0-3407-7ea2546852a
- config.json:
{
"model_config_list": [
{ "config": { "name": "OpenVINO/Kokoro-82M-int8-ov", "base_path": "/models/Kokoro-82M-int8-ov-cpu" } }
]
}
- Intel Core Ultra 5 125H (Meteor Lake), target device CPU
- Model repository:
/models/Kokoro-82M-int8-ov-cpu/graph.pbtxt
/models/OpenVINO/Kokoro-82M-int8-ov/{config.json, openvino_config.json, openvino_model.xml, openvino_model.bin, voices/, ...}
- Model: https://huggingface.co/OpenVINO/Kokoro-82M-int8-ov
Describe the bug
The OpenAI-compatible text-to-speech endpoint
/v3/audio/speechignoresresponse_format. Forwav,pcm,mp3andflacit returns the same body: a WAV file with 32-bit IEEE float samples (format tag 3). The response is also sent withContent-Type: application/json; charset=utf-8.The OpenAI API specifies 16-bit PCM for
wavand headerless 16-bit little-endian PCM forpcm, so clients written against it cannot play the output. For example, wyoming_openai (the Wyoming bridge used by Home Assistant) cannot parse the float WAV header and plays static: roryeckel/wyoming_openai#72To Reproduce
OpenVINO/Kokoro-82M-int8-ovpulled from Hugging Face into/models/OpenVINO/Kokoro-82M-int8-ov, graph generated withovms --configure --model_path /models/OpenVINO/Kokoro-82M-int8-ov --target_device CPU:openvino/model_server:latest-gpu):Expected behavior
wav(the default) returns a 16-bit PCM WAV, as OpenAI does.pcmreturns headerless 16-bit little-endian PCM.mp3,flac) are rejected with a 400 error instead of silently returning a WAV.Content-Typematches the audio format (e.g.audio/wav).Logs
Nothing is logged for these requests at
--log_level INFO; I have not captured DEBUG logs.Configuration
OpenVINO Model Server 2026.4.0.869b2186a, OpenVINO backend2026.4.0-22959-99c81491cc3-releases/2026/4, OpenVINO GenAI backend2026.4.0.0-3407-7ea2546852a{ "model_config_list": [ { "config": { "name": "OpenVINO/Kokoro-82M-int8-ov", "base_path": "/models/Kokoro-82M-int8-ov-cpu" } } ] }