@dicta-asr/wetype-asr
v0.1.15
Published
Dicta provider meta package for WeType (WeChat) IME ASR
Downloads
269
Maintainers
Readme
wetype-asr
Pure Rust direct-connect WeType (WeChat IME) ASR provider for dicta-asr.
What It Does
- Connects directly to
wss://wetype.weixin.qq.com/ppp. - Registers a fresh device on first run via ECDH +
/gen_uin_v2. - Persists only reusable identity data under
XDG_CONFIG_HOME/dicta-asr/wetype-credentials.json. - Recreates the session AES key on every run.
- Encodes 16 kHz mono PCM to Opus and uploads encrypted protobuf voice frames.
No local WeType app, MMKV files, native dylib, LLDB capture, or sibling wetype/ directory is required at runtime or build time.
CLI
cargo run -p dicta-provider-wetype-asr --bin dicta-provider-wetype-asr -- \
--input audio.wav \
--jsonForce a fresh registration:
WETYPE_FORCE_REAUTH=1 cargo run -p dicta-provider-wetype-asr --bin dicta-provider-wetype-asr -- \
--input audio.wav \
--jsonEnable protocol debug logs:
WETYPE_DEBUG=1 cargo run -p dicta-provider-wetype-asr --bin dicta-provider-wetype-asr -- \
--input audio.wavCredential Cache
Default path:
$XDG_CONFIG_HOME/dicta-asr/wetype-credentials.json
~/.config/dicta-asr/wetype-credentials.jsonCached fields:
device_codeuingen_uin_tokenlatest_svr_pubkeyclock_skew_ms
The ECDH AES key is never persisted.
Rust API
use dicta_asr::{AsrOptions, AsrProvider};
use dicta_core::AudioInput;
use dicta_provider_wetype_asr::{WetypeAsr, WetypeConfig};
# async fn example() -> dicta_asr::AsrResult<()> {
let provider = WetypeAsr::new(WetypeConfig::default())?;
let transcript = provider
.transcribe(AudioInput::File("audio.wav".into()), AsrOptions::default())
.await?;
println!("{}", transcript.text);
# Ok(())
# }Tests
Offline unit tests:
cargo test -p dicta-provider-wetype-asr --libManual live tests:
cargo test -p dicta-provider-wetype-asr --test integration_test -- --ignored