Помоги мне исправить код , при запуске в реплит все хорошо, одна при запуске файла в bash на хостинге возникает такая оишбка: Error in audio generation: 403 Forbidden
Вот мой код(Токены я убрал) напиши его полностью и исправленным:
import os
from telegram import Update, InlineKeyboardButton, InlineKeyboardMarkup
from telegram.ext import Application, CommandHandler, MessageHandler, filters, CallbackQueryHandler, ContextTypes
from groq import Groq
import tempfile
import base64
from together import Together
import io
from gradio_client import Client

# Замените на свои реальные токены
TELEGRAM_TOKEN = "token"
GROQ_API_KEY = "token"
TOGETHER_API_KEY = "9tokem"
HUGGINGFACE_API_KEY = "afa"

# Инициализация клиентов
groq_client = Groq(api_key=GROQ_API_KEY)
together_client = Together(api_key=TOGETHER_API_KEY)

# Словарь для хранения ID сообщений пользователей
user_messages = {}

def get_clear_chat_keyboard():
    keyboard = [[InlineKeyboardButton("Очистить чат / Очистити чат / Clear chat", callback_data='clear_chat')]]
    return InlineKeyboardMarkup(keyboard)

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    user_id = update.effective_user.id
    user_language = update.effective_user.language_code

    if user_language == 'ru':
        message = 'Привет! Я бот с ИИ. Отправь мне текстовое, голосовое сообщение или изображение с вопросом на русском или украинском, и я отвечу. Также ты можешь попросить меня создать изображение, написав "Создай изображение" и описание, или создать звук, написав "Создай звук" и описание.'
    elif user_language == 'uk':
        message = 'Привіт! Я бот з ШІ. Надішліть мені текстове, голосове повідомлення або зображення з питанням українською чи російською, і я відповім. Також ви можете попросити мене створити зображення, написавши "Створи зображення" та опис, або створити звук, написавши "Створи звук" та опис.'
    else:
        message = 'Hello! I\'m an AI bot. Send me a text message, voice message, or image with a question in Ukrainian or Russian, and I\'ll respond. You can also ask me to create an image by typing "Create image" followed by a description, or create a sound by typing "Create sound" followed by a description.'

    sent_message = await update.message.reply_text(message, reply_markup=get_clear_chat_keyboard())
    user_messages[user_id] = [sent_message.message_id]

async def clear_chat(update: Update, context: ContextTypes.DEFAULT_TYPE):
    query = update.callback_query
    await query.answer()

    user_id = update.effective_user.id
    user_language = update.effective_user.language_code

    if user_id in user_messages:
        for message_id in user_messages[user_id]:
            try:
                await context.bot.delete_message(chat_id=update.effective_chat.id, message_id=message_id)
            except Exception:
                pass  # Игнорируем ошибки при удалении сообщений
        user_messages[user_id] = []

    if user_language == 'ru':
        message = 'Чат очищен. Начинаем сначала!'
    elif user_language == 'uk':
        message = 'Чат очищено. Починаємо спочатку!'
    else:
        message = 'Chat cleared. Starting over!'

    sent_message = await query.message.reply_text(message, reply_markup=get_clear_chat_keyboard())
    user_messages[user_id] = [sent_message.message_id]

async def handle_voice(update: Update, context: ContextTypes.DEFAULT_TYPE):
    user_id = update.effective_user.id
    voice = await update.message.voice.get_file()
    with tempfile.NamedTemporaryFile(suffix=".ogg") as voice_file:
        await voice.download_to_drive(voice_file.name)

        try:
            with open(voice_file.name, "rb") as file:
                transcription = groq_client.audio.transcriptions.create(
                    file=(voice_file.name, file.read()),
                    model="whisper-large-v3",
                    response_format="verbose_json",
                )

            sent_message = await update.message.reply_text(transcription.text)
            if user_id not in user_messages:
                user_messages[user_id] = []
            user_messages[user_id].append(sent_message.message_id)
        except Exception as e:
            sent_message = await update.message.reply_text(f"Помилка обробки голосового повідомлення / Ошибка обработки голосового сообщения: {str(e)}")
            if user_id not in user_messages:
                user_messages[user_id] = []
            user_messages[user_id].append(sent_message.message_id)

async def handle_image(update: Update, context: ContextTypes.DEFAULT_TYPE):
    user_id = update.effective_user.id
    if not update.message.caption:
        sent_message = await update.message.reply_text("Будь ласка, додайте питання до зображення. / Пожалуйста, добавьте вопрос к изображению.")
        if user_id not in user_messages:
            user_messages[user_id] = []
        user_messages[user_id].append(sent_message.message_id)
        return

    image = await update.message.photo[-1].get_file()
    with tempfile.NamedTemporaryFile(suffix=".jpg") as img_file:
        await image.download_to_drive(img_file.name)

        try:
            with open(img_file.name, "rb") as file:
                completion = groq_client.chat.completions.create(
                    model="llama-3.2-11b-vision-preview",
                    messages=[
                        {
                            "role": "user",
                            "content": [
                                {"type": "text", "text": update.message.caption},
                                {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{base64.b64encode(file.read()).decode('utf-8')}"}}
                            ]
                        }
                    ],
                    temperature=0.7,
                    max_tokens=1024,
                    top_p=1,
                    stream=False,
                    stop=None,
                )

            response = completion.choices[0].message.content
            sent_message = await update.message.reply_text(response, reply_markup=get_clear_chat_keyboard())
            if user_id not in user_messages:
                user_messages[user_id] = []
            user_messages[user_id].append(sent_message.message_id)
        except Exception as e:
            sent_message = await update.message.reply_text(f"Помилка обробки зображення / Ошибка обработки изображения: {str(e)}")
            if user_id not in user_messages:
                user_messages[user_id] = []
            user_messages[user_id].append(sent_message.message_id)

async def translate_to_english(text):
    try:
        completion = groq_client.chat.completions.create(
            model="llama-3.2-90b-text-preview",
            messages=[
                {
                    "role": "system",
                    "content": "You are a translator. Translate the following text to English. Provide only the translation without any additional comments."
                },
                {
                    "role": "user",
                    "content": text
                }
            ],
            temperature=0.3,
            max_tokens=1024,
            top_p=1,
            stream=False,
            stop=None,
        )
        return completion.choices[0].message.content.strip()
    except Exception as e:
        print(f"Error in translation: {str(e)}")
        return text  # Return original text if translation fails

async def generate_image(prompt):
    response = together_client.images.generate(
        prompt=prompt,
        model="black-forest-labs/FLUX.1-schnell-Free",
        width=1024,
        height=768,
        steps=4,
        n=1,
        response_format="b64_json"
    )
    image_data = base64.b64decode(response.data[0].b64_json)
    return io.BytesIO(image_data)

async def generate_audio(prompt):
    try:
        audio_client = Client("OpenSound/EzAudio")
        result = audio_client.predict(
            text=prompt,
            length=10,
            guidance_scale=5,
            guidance_rescale=0.75,
            ddim_steps=50,
            eta=1,
            random_seed=0,
            randomize_seed=True,
            api_name="/generate_audio"
        )
        return result
    except Exception as e:
        print(f"Error in audio generation: {str(e)}")
        return None

async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
    user_id = update.effective_user.id
    user_message = update.message.text.lower()
    user_language = update.effective_user.language_code

    if user_id not in user_messages:
        user_messages[user_id] = []

    if user_message.startswith(("создай изображение", "створи зображення", "create image")):
        prompt = user_message.split(" ", 2)[-1]

        if user_language == 'ru':
            creating_message = "Создаю изображение..."
        elif user_language == 'uk':
            creating_message = "Створюю зображення..."
        else:
            creating_message = "Creating image..."

        sent_message = await update.message.reply_text(creating_message)
        user_messages[user_id].append(sent_message.message_id)

        try:
            english_prompt = await translate_to_english(prompt)
            image_buffer = await generate_image(english_prompt)
            sent_message = await update.message.reply_photo(photo=image_buffer)
            user_messages[user_id].append(sent_message.message_id)
        except Exception as e:
            if user_language == 'ru':
                error_message = f"Ошибка при создании изображения: {str(e)}"
            elif user_language == 'uk':
                error_message = f"Помилка при створенні зображення: {str(e)}"
            else:
                error_message = f"Error creating image: {str(e)}"
            sent_message = await update.message.reply_text(error_message)
            user_messages[user_id].append(sent_message.message_id)
        return

    elif user_message.startswith(("создай звук", "створи звук", "create sound")):
        prompt = user_message.split(" ", 2)[-1]

        if user_language == 'ru':
            creating_message = "Создаю звук..."
        elif user_language == 'uk':
            creating_message = "Створюю звук..."
        else:
            creating_message = "Creating sound..."

        sent_message = await update.message.reply_text(creating_message)
        user_messages[user_id].append(sent_message.message_id)

        try:
            english_prompt = await translate_to_english(prompt)
            audio_file = await generate_audio(english_prompt)
            if audio_file:
                sent_message = await update.message.reply_audio(audio=audio_file)
                user_messages[user_id].append(sent_message.message_id)
            else:
                raise Exception("Failed to generate audio")
        except Exception as e:
            if user_language == 'ru':
                error_message = f"Ошибка при создании звука: {str(e)}"
            elif user_language == 'uk':
                error_message = f"Помилка при створенні звуку: {str(e)}"
            else:
                error_message = f"Error creating sound: {str(e)}"
            sent_message = await update.message.reply_text(error_message)
            user_messages[user_id].append(sent_message.message_id)
        return

    try:
        completion = groq_client.chat.completions.create(
            model="llama-3.2-90b-text-preview",
            messages=[
                {
                    "role": "system",
                    "content": """Ви - корисний двомовний асистент, який вільно володіє українською та російською мовами. Визначте мову запиту користувача та відповідайте тією ж мовою. Ваші відповіді мають бути точними, повними та культурно доречними. Зберігайте логічну послідовність у відповідях.

Вы - полезный двуязычный ассистент, свободно владеющий украинским и русским языками. Определите язык запроса пользователя и отвечайте на том же языке. Ваши ответы должны быть точными, полными и культурно уместными. Сохраняйте логическую последовательность в ответах."""
                },
                {
                    "role": "user",
                    "content": user_message
                }
            ],
            temperature=0.7,
            max_tokens=1024,
            top_p=1,
            stream=False,
            stop=None,
        )

        ai_response = completion.choices[0].message.content
        sent_message = await update.message.reply_text(ai_response, reply_markup=get_clear_chat_keyboard())
        user_messages[user_id].append(sent_message.message_id)

    except Exception as e:
        if user_language == 'ru':
            error_message = f"Произошла ошибка: {str(e)}"
        elif user_language == 'uk':
            error_message = f"Сталася помилка: {str(e)}"
        else:
            error_message = f"An error occurred: {str(e)}"
        sent_message = await update.message.reply_text(error_message, reply_markup=get_clear_chat_keyboard())
        user_messages[user_id].append(sent_message.message_id)

def main():
    application = Application.builder().token(TELEGRAM_TOKEN).build()

    application.add_handler(CommandHandler("start", start))
    application.add_handler(CallbackQueryHandler(clear_chat, pattern='^clear_chat$'))
    application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
    application.add_handler(MessageHandler(filters.VOICE, handle_voice))
    application.add_handler(MessageHandler(filters.PHOTO, handle_image))

    application.run_polling()

if __name__ == '__main__':
    main()