fix: address selector contract, promo pricing, idempotency, and registry metadata review

- Require 'model' in the input schema and accept 'model_id' as a
  selector-compatible alias (tts_selector exposes model_id); add a
  selector-routing regression test
- Document s2.1-pro-free as promotional (free through end of July 2026,
  Fair Use, no SLA, possible request retention, commercial-use
  restrictions) in PROVIDERS.md and the Layer 3 skill; estimate_cost()
  falls back to the paid s2.1-pro rate after the promo window
- Normalize voice_id/reference_id and model_id/model aliases before
  computing the idempotency key, and include all output-affecting inputs
  (bitrate, sample_rate, temperature, top_p, repetition_penalty, latency,
  prosody, normalize, chunk_length) with API defaults applied
- Declare env:FISH_AUDIO_API_KEY in dependencies so registry metadata
  reports the requirement
- Add fish_audio to the TTS provider set in the phase3 registry contract
  test
This commit is contained in:
Tomofumi Yagi
2026-07-22 19:00:46 +09:00
parent b29e238e8e
commit 990d7f9a2c
5 changed files with 242 additions and 17 deletions

View File

@@ -272,15 +272,17 @@ No subscription — pure pay-as-you-go, no minimum spend.
| Model | Best for |
|-------|----------|
| `s2.1-pro` | Latest flagship — inline emotion tags, 80+ languages, hero narration |
| `s2.1-pro-free` | Free tier of s2.1-pro — drafts, samples, validation runs at $0 |
| `s2.1-pro-free` | Promotional free access to s2.1-pro — drafts, samples, validation runs (see caveats below) |
| `s2-pro` | First S2 generation — stable high quality with emotion-tag support |
| `s1` | Previous flagship, kept for compatibility (no emotion tags) |
**`s2.1-pro-free` caveats — promotional, not a durable free tier.** Per the [fish.audio announcement](https://fish.audio/ar/blog/s2-1-pro-free-api/?articleLocale=en), free API access runs **through the end of July 2026** and is subject to Fair Use limits, carries **no SLA or latency guarantee**, requests **may be retained** by fish.audio, and **commercial use is restricted**. Don't route client work or production narration through it, and don't plan long-term costs at $0 — `fish_audio_tts.estimate_cost()` falls back to the paid `s2.1-pro` rate after the promotional window ends.
The legacy `speech-1.x` tier and `s1-mini` have been removed from the fish.audio API and are not supported.
#### Pricing
Billing is **per UTF-8 byte of input text** (not per character) — CJK text and emoji cost 3-4x an ASCII character of the same visible length. Approximate: `s1` / `s2-pro` / `s2.1-pro` ≈ $15 per 1M bytes; `s2.1-pro-free` is $0. Verify current pricing at [fish.audio](https://fish.audio) before large batches.
Billing is **per UTF-8 byte of input text** (not per character) — CJK text and emoji cost 3-4x an ASCII character of the same visible length. Approximate: `s1` / `s2-pro` / `s2.1-pro` ≈ $15 per 1M bytes; `s2.1-pro-free` is $0 only during the promotional window (through end of July 2026 — see caveats above). Verify current pricing at [fish.audio](https://fish.audio) before large batches.
---