# --- Core app --- # Keep gradio pinned to the README `sdk_version` so the Space runtime and pip agree. # Must be >5.0.0 (fish-speech 2.0 requires it) but <5.28.0: the `mcp` extra that HF's # builder auto-appends from 5.28 onward pulls pydantic>=2.11, which clashes with # fish-speech's hard pin pydantic==2.9.2. 5.27.0 has no mcp extra, so the clash is avoided. gradio==5.27.0 spaces>=0.30.0 # --- Phase 1: research / content generation --- langgraph>=0.2.0 langchain-core>=0.3.0 huggingface_hub>=0.25.0 ddgs>=6.0.0 # --- Phase 2: Fish Audio (OpenAudio S1-mini) TTS --- # fish-speech provides the inference engine + model code (no stable PyPI release). # Pinned to the OpenAudio-S1 commit (781bf1c, 2025-10-20) whose FishTokenizer loads the # model's tiktoken vocab directly. Do NOT bump to the S2-beta line (2026-03-10+): that # refactor switched FishTokenizer to transformers AutoTokenizer, which can't read # fishaudio/openaudio-s1-mini (it ships tokenizer.tiktoken + special_tokens.json, no # tokenizer.json, with model_type=dual_ar) — yielding a None tokenizer and empty audio. # This commit still exposes the dac decoder + TTSInferenceEngine + ServeTTSRequest API # used in tts/engine.py, and keeps the same pydantic==2.9.2 pin (so gradio<5.28 holds). fish-speech @ git+https://github.com/fishaudio/fish-speech.git@781bf1cd7afef831fc58928a6444a2161449dae5 # Pin to 2.8.0 (matches fish-speech's torch<2.9.0). torchaudio 2.9 removed # torchaudio.list_audio_backends() and migrated audio I/O to TorchCodec, which this # S1-era fish-speech doesn't use — it calls list_audio_backends() in ReferenceLoader and # torchaudio.load/save elsewhere. 2.8.0 is the version that loaded the models and reached # generation on this ZeroGPU Space. torch and torchaudio versions must match exactly. torch==2.8.0 torchaudio==2.8.0 numpy>=1.26.0 soundfile>=0.12.1