Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import telebot | |
| from transformers import AutoTokenizer, VitsModel | |
| import torch | |
| import scipy.io.wavfile | |
| import threading | |
| import time | |
| # 1. Настройка модели | |
| model_name = "facebook/mms-tts-che" | |
| model = VitsModel.from_pretrained(model_name) | |
| tokenizer = AutoTokenizer.from_pretrained(model_name) | |
| def tts_logic(text): | |
| inputs = tokenizer(text.lower(), return_tensors="pt") | |
| with torch.no_grad(): | |
| output = model(**inputs).waveform | |
| file_path = "audio.wav" | |
| scipy.io.wavfile.write(file_path, rate=model.config.sampling_rate, data=output.squeeze().numpy()) | |
| return file_path | |
| # 2. Настройка бота (теперь на pyTelegramBotAPI) | |
| TOKEN = "8287698372:AAEwoOWgQWHbeyDmJdN0B-OpKpy7-TARHMg" | |
| bot = telebot.TeleBot(TOKEN) | |
| def echo_all(message): | |
| try: | |
| path = tts_logic(message.text) | |
| with open(path, 'rb') as audio: | |
| bot.send_voice(message.chat.id, audio) | |
| except Exception as e: | |
| print(f"Ошибка: {e}") | |
| # Запуск бота в отдельном потоке | |
| def run_bot(): | |
| while True: | |
| try: | |
| print("🚀 Бот запущен...") | |
| bot.polling(none_stop=True, interval=0) | |
| except Exception as e: | |
| print(f"Перезапуск бота через 5 сек... {e}") | |
| time.sleep(5) | |
| threading.Thread(target=run_bot, daemon=True).start() | |
| # 3. Интерфейс сайта (чтобы HF не выключал сервер) | |
| def web_interface(text): | |
| path = tts_logic(text) | |
| return path | |
| demo = gr.Interface(fn=web_interface, inputs="text", outputs="audio") | |
| demo.launch() |