Views
No views yet
Mr., Dr., etc.), smart quotes and
dashes are normalized before synthesis — directly lowers WER.temperature=0.75, subtalker_temperature=0.70, top_p=0.90,
repetition_penalty=1.05. Conservative vs. Qwen defaults, keeps the output
stable run-to-run.pro_6000 only, so the output is bit-stable across validator
calls — same trick both top miners use.| File | Purpose |
|---|---|
miner.py | TTS engine (class Miner + Vocence contract) |
chute_config.yml | Chutes Image/NodeSelector/Chute (pinned deps, pro_6000) |
vocence_config.yaml | Runtime config (dtype, language, limits) read by miner.py |
prepare_repo.py | Helper: pulls source checkpoint, strips leak files, overlays our miner files, perturbs one tensor (duplicate-hash dodge) |
README.md | This file |
CHUTES_API_KEY).git-lfs installed.1cd /root/workspace/vocence
2python miner/prepare_repo.py \
3 --source macminix/qwen3_voice_design_t1 \
4 --revision 2530e9dc \
5 --out /tmp/my-vocence-repoeval_results.json,
example_inference.py, any checkpoint/training leak files, overlays our
miner.py / chute_config.yml / vocence_config.yaml / README.md, and
adds a single-scalar perturbation of magnitude 1e-8 to one tensor of the
largest .safetensors. That perturbation changes the file's sha256 — which
is required for Vocence owner validation to avoid detect_duplicates →
duplicate_model. Numerically the perturbation is far below bfloat16
rounding noise so model behaviour is unchanged.Do not skip the perturbation.detect_duplicateskeys off the sha256 of your weight files. If that matches an earlier miner's hash, you are marked invalid and earn zero — regardless of winrate.
<your-user>/<your-repo> everywhere below.1huggingface-cli login # first time only
2huggingface-cli upload <your-user>/<your-repo> /tmp/my-vocence-repo . --revision mainhuggingface-cli api repo_info --repo-id <your-user>/<your-repo> | jq -r .sha1cd /root/workspace/vocence
2python - <<'PY'
3from pathlib import Path
4from jinja2 import Template
5
6tpl = Path("miner_sample/chute_template/vocence_chute.py.jinja2").read_text()
7rendered = Template(tpl).render(
8 huggingface_repository_name="<your-user>/<your-repo>",
9 huggingface_repository_revision="<hf-commit-sha-from-step-2>",
10 chute_username="<your-chutes-username>",
11 chute_name="my-vocence-tts-01", # MUST contain "vocence" (case-insensitive)
12)
13Path("tmp_chute.py").write_text(rendered)
14print("rendered -> tmp_chute.py")
15PY
16
17chutes build tmp_chute:chute --wait
18chutes deploy tmp_chute:chute --accept-feechute_id you commit
on chain. Remember: the chute name (my-vocence-tts-01 above) is the
string the owner checks for the magic word "vocence"; the chute_id is the
UUID assigned by Chutes and does not need to contain "vocence".1cd /root/workspace/vocence
2uv run vocence miner commit \
3 --model-name "<your-user>/<your-repo>" \
4 --model-revision "<hf-commit-sha-from-step-2>" \
5 --chute-id "<chute-uuid-from-step-3>" \
6 --coldkey "<your-coldkey-name>" \
7 --hotkey "<your-hotkey-name>"uv run vocence get-miners | grep <your-hotkey-prefix>MIN_EVALS_TO_COMPETE = 40, MIN_VALIDATOR_APPEARANCES_FOR_ELIGIBILITY = 3)./speak call means the validator skips adding an eval row for you
that round.1curl -s "https://<chute-slug>.chutes.ai/health" | jq .
2curl -s -X POST "https://<chute-slug>.chutes.ai/speak" \
3 -H "Authorization: Bearer $CHUTES_API_KEY" \
4 -H "Content-Type: application/json" \
5 -d '{"instruction":"gender: male | age_group: adult | pitch: mid | speed: normal | emotion: calm | tone: warm | accent: us","text":"The quick brown fox jumps over the lazy dog."}' \
6 --output /tmp/out.wav