Files
talk/.superpowers/sdd/plan/task-3-brief.md
T

2.1 KiB

Task 3: Provider-Kette mit Cloud-Anbietern

Blockiert durch: 02. Liefert: Vier-Stufen-Fallback mit Keys + Fake-barkeit.

  • Provider-Implementierungen (je internal/provider/<name>):
    • elevenlabs: POST <endpoint>/v1/text-to-speech/<voiceID>, Header xi-api-key, Body {text, model_id: "eleven_multilingual_v2", voice_settings:{stability:0.5,similarity_boost:0.75}}, Antwort = Audio-Bytes (mp3). Key: TALK_ELEVENLABS_KEY; Default-Voice-ID KXxZd16DiBqt82nbarJx. Endpunkt konfigurierbar (Default https://api.elevenlabs.io).
    • openai: POST <endpoint>/v1/audio/speech, Bearer-Key TALK_OPENAI_KEY, Body {model:"gpt-4o-mini-tts"|"tts-1", voice, input, response_format:"mp3"} — Entscheidungsnotiz: Modell-String konfigurierbar, Default tts-1. Endpunkt Default https://api.openai.com.
    • edge: Microsoft Edge-TTS-Endpunkt (kostenlos, kein Key) — WebSocket/REST nach aktuellem bekannten Protokoll (edge-tts-kompatibel, Stimmen z. B. de-DE-KatjaNeural/en-US-AriaNeural); Endpunkt konfigurierbar; bei Protokoll-Änderung: klarer Fehler.
    • osbuiltin: existiert (Task 02).
  • Kette internal/provider/chain.go: Resolver liefert geordnete Kette laut Config (Default-Reihenfolge oben); --provider-Flag und provider = "…"-Config pinnen; Available() prüft Key/Endpunkt; Synthesize fällt bei Fehler (HTTP != 2xx, Timeout, Netz) auf den nächsten durch; letzter Fehler wird geloggt/gemeldet, nie still.
  • Voice-Mapping: voice.<provider>.<lang> aus config.toml; Defaults je Provider+Sprache hinterlegt (neutral, dokumentiert).
  • Tests: jeder Cloud-Provider gegen httptest-Fake (200 mit Bytes; 500 → Fehler; 401 → Fehler) außer edge (WebSocket-Protokoll — edge wird über Interface + Fehlerpfad-Mock und eine als testing.Short überspringbare Integration-Testmarkierung behandelt; Dokumentationspflicht im Report, welche Teile fake-bar getestet sind); Kettentests: erster 500 → zweiter getroffen → Bytes.
  • Abnahme: talk "Test" --provider=elevenlabs mit echtem Key funktioniert am Dev-Host ( einmalig manuell, im Report dokumentiert); ohne jeden Key wählt die Kette edge bzw. osbuiltin; go test ./... grün.