* feat(asr): support more Bailian speech models * test(asr): cover final 8k downsample phase * fix(asr): address review findings on Bailian model routing (#866) - route paraformer-8k-realtime / sensevoice-8k-realtime to classic WebSocket, matching the 8k downsample naming space in bailian.rs - downsample 16k->8k with pairwise averaging (first-order low-pass) instead of pure decimation to reduce aliasing; drop the lone tail sample on flush - cap async provider validation at 120s (60s poll) instead of 660s so the validate button cannot block for nearly 11 minutes - join async transcript segments with a space so latin-script words do not get glued together * fix(asr): drop qwen3-asr-flash-filetrans and harden async polling (#866) - qwen3-asr-flash-filetrans only accepts public URLs per DashScope docs; it is incompatible with the local-recording temporary OSS + oss:// path, so reject it in protocol_for_model / routing / picker / docs instead of shipping a model that would silently fail on real recordings - simplify async_transcription_body / extract_async_result_url to the single fun-asr results shape - add bounded retry (exponential backoff, deadline-capped) to async task polling and result download so one transient network blip does not discard an entire recording * docs(asr): list qwen-audio-3.0-asr-flash as a synchronous model (#866) Merge with beta #876 brought qwen-audio-3.0-asr-flash into the model picker and protocol routing; keep the model reference doc in sync and note that -streaming variants are not supported. --------- Co-authored-by: LauraGPT <lauragpt@users.noreply.github.com> Co-authored-by: Chris233 <h-chris233@outlook.com>
2.5 KiB
Alibaba Bailian ASR models
OpenLess uses one Alibaba Bailian provider and selects the DashScope protocol from the model name. Configure the API key, region or workspace endpoint, and model in Settings > Providers.
| Mode | Model examples | Behavior |
|---|---|---|
| Realtime WebSocket | fun-asr-realtime, fun-asr-flash-8k-realtime, paraformer-realtime-v2, sensevoice-realtime-v1 |
Streams text while recording. OpenLess downsamples 16 kHz recorder audio for 8 kHz models. |
| Qwen realtime | qwen3-asr-flash-realtime, versioned snapshots |
Streams text through the Qwen Realtime WebSocket API. |
| Synchronous recording | fun-asr-flash-*, qwen3-asr-flash, qwen-audio-3.0-asr-flash |
Sends the recording after capture and waits for one synchronous response. These models are intended for short recordings (qwen-audio-*-streaming variants are not supported). |
| Asynchronous file transcription | fun-asr, fun-asr-mtl, versioned snapshots, paraformer-v2 |
Uploads the recording, starts an asynchronous task, polls it, then downloads the transcript. |
Future dated snapshots that retain one of these model prefixes are routed to the same protocol, so they can be entered manually before they are added to the model picker.
Endpoints
The default endpoint is dashscope.aliyuncs.com. A workspace or regional host may also be entered, for example https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com. OpenLess preserves the host and derives the protocol-specific path and scheme automatically.
API keys are region-specific. The endpoint and API key must belong to the same region.
Temporary uploads
Asynchronous models require a URL. OpenLess obtains a temporary upload policy from DashScope, uploads the local WAV to the returned OSS host, and submits the resulting oss:// URL with X-DashScope-OssResourceResolve: enable.
Alibaba documents this temporary storage as a development and low-concurrency facility. It is rate limited, and uploaded URLs expire after 48 hours. OpenLess uploads one file per completed recording; it does not retain or reuse the temporary URL.
For deployment or high-concurrency use, use stable Alibaba Cloud OSS storage and the official DashScope API directly.