Pretty please fix the error and return the full script fixed.

'Error'
Traceback:
Traceback (most recent call last):
  File "/home/meow/Amphion/models/vc/vevo/infer_vevotts.py", line 102, in vevo_tts
    gen_audio = inference_pipeline.inference_ar_and_fm(
  File "/home/meow/Amphion/models/vc/vevo/vevo_utils.py", line 476, in inference_ar_and_fm
    style_ref_input_ids = g2p_(
  File "/home/meow/Amphion/models/vc/vevo/vevo_utils.py", line 30, in g2p_
    return chn_eng_g2p(text)
  File "/home/meow/Amphion/models/tts/maskgct/g2p/g2p_generation.py", line 106, in chn_eng_g2p
    phoneme, token = g2p(seg[0], text, seg[1])
  File "/home/meow/Amphion/models/tts/maskgct/g2p/g2p_generation.py", line 25, in g2p
    return text_tokenizer.tokenize(text=text, sentence=sentence, language=language)
  File "/home/meow/Amphion/models/tts/maskgct/g2p/g2p/__init__.py", line 53, in tokenize
    phonemes = self._clean_text(text, sentence, language, ["cjekfd_cleaners"])
  File "/home/meow/Amphion/models/tts/maskgct/g2p/g2p/__init__.py", line 71, in _clean_text
    text = cleaner(text, sentence, language, self.text_tokenizers)
  File "/home/meow/Amphion/models/tts/maskgct/g2p/g2p/cleaners.py", line 30, in cjekfd_cleaners
    raise Exception("Unknown language: %s" % language)
Exception: Unknown language: 

'Script'
import os
import tempfile
import torch
import shutil
import traceback
import gradio as gr
from huggingface_hub import snapshot_download
from models.vc.vevo.vevo_utils import VevoInferencePipeline, save_audio

# ====== Setup device ======
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")

# ====== Download & prepare model checkpoints ======

def careful_join(*parts):
    # Safe path join AND normalize slashes for WSL / Windows compat
    return os.path.normpath(os.path.join(*parts))

print("[INFO] Downloading content/style tokenizer...")
tokenizer_dir = snapshot_download(
    repo_id="amphion/Vevo",
    repo_type="model",
    cache_dir="./ckpts/Vevo",
    allow_patterns=["tokenizer/vq8192/*"],
)
content_style_tokenizer_ckpt_path = careful_join(tokenizer_dir, "tokenizer/vq8192")

print("[INFO] Downloading autoregressive transformer...")
ar_dir = snapshot_download(
    repo_id="amphion/Vevo",
    repo_type="model",
    cache_dir="./ckpts/Vevo",
    allow_patterns=["contentstyle_modeling/PhoneToVq8192/*"],
)
ar_cfg_path = "./models/vc/vevo/config/PhoneToVq8192.json"
ar_ckpt_path = careful_join(ar_dir, "contentstyle_modeling/PhoneToVq8192")

print("[INFO] Downloading flow matching transformer...")
fmt_dir = snapshot_download(
    repo_id="amphion/Vevo",
    repo_type="model",
    cache_dir="./ckpts/Vevo",
    allow_patterns=["acoustic_modeling/Vq8192ToMels/*"],
)
fmt_cfg_path = "./models/vc/vevo/config/Vq8192ToMels.json"
fmt_ckpt_path = careful_join(fmt_dir, "acoustic_modeling/Vq8192ToMels")

print("[INFO] Downloading vocoder...")
vocoder_dir = snapshot_download(
    repo_id="amphion/Vevo",
    repo_type="model",
    cache_dir="./ckpts/Vevo",
    allow_patterns=["acoustic_modeling/Vocoder/*"],
)
vocoder_cfg_path = "./models/vc/vevo/config/Vocoder.json"
vocoder_ckpt_path = careful_join(vocoder_dir, "acoustic_modeling/Vocoder")

print("[INFO] Initializing VevoInferencePipeline (this may take a while)...")
inference_pipeline = VevoInferencePipeline(
    content_style_tokenizer_ckpt_path=content_style_tokenizer_ckpt_path,
    ar_cfg_path=ar_cfg_path,
    ar_ckpt_path=ar_ckpt_path,
    fmt_cfg_path=fmt_cfg_path,
    fmt_ckpt_path=fmt_ckpt_path,
    vocoder_cfg_path=vocoder_cfg_path,
    vocoder_ckpt_path=vocoder_ckpt_path,
    device=device,
)
print("[INFO] Model ready!")

def vevo_tts(
    src_text: str,
    ref_wav_path: str,
    ref_text: str = None,
    src_language: str = "en",
    ref_language: str = "en",
):
    """
    Run the Vevo TTS model inference.
    Returns the path to the generated wav audio and a status message.
    """

    # Input validation
    if not src_text or src_text.strip() == "":
        return None, "Error: Source text is empty. Please enter text to synthesize."

    if not ref_wav_path or ref_wav_path.strip() == "":
        return None, "Error: Reference wav file is missing. Please upload a style reference wav audio file."

    # Normalize path for WSL if necessary
    ref_wav_path = os.path.normpath(ref_wav_path)

    # For this app, timbre_ref_wav_path same as style_ref_wav_path (no separate control)
    timbre_ref_wav_path = ref_wav_path

    # Generate unique temp filename to avoid overwrites
    fd_out, output_path = tempfile.mkstemp(suffix=".wav", prefix="vevo_tts_out_")
    os.close(fd_out)  # Close the file descriptor, we just want path

    try:
        # Run inference
        gen_audio = inference_pipeline.inference_ar_and_fm(
            src_wav_path=None,
            src_text=src_text,
            style_ref_wav_path=ref_wav_path,
            timbre_ref_wav_path=timbre_ref_wav_path,
            style_ref_wav_text=ref_text,
            src_text_language=src_language,
            style_ref_wav_text_language=ref_language,
        )
        # Save output file
        save_audio(gen_audio, output_path=output_path)
        return output_path, "✅ Inference complete!"
    except Exception as e:
        # Clean up if file created
        if os.path.exists(output_path):
            try:
                os.remove(output_path)
            except:
                pass
        tb = traceback.format_exc()
        err_msg = f"❌ Exception during inference:\n{str(e)}\n\nTraceback:\n{tb}"
        return None, err_msg

# ====== Gradio UI ======

with gr.Blocks() as demo:
    gr.Markdown(
        """
        # Vevo Zero-Shot TTS Demo
        Upload a **style reference wav audio** and enter the **text** you want to synthesize.
        """
    )

    with gr.Row():
        with gr.Column():
            ref_wav_input = gr.Audio(
                label="Style Reference Audio (wav)", type="filepath", interactive=True
            )
            src_text_input = gr.Textbox(
                value="I don't really care what you call me. I've been a silent spectator, watching species evolve, empires rise and fall. But always remember, I am mighty and enduring. Respect me and I'll nurture you; ignore me and you shall face the consequences.",
                lines=6,
                label="Source Text (to synthesize)",
                interactive=True,
            )
            ref_text_input = gr.Textbox(
                value="Flip stood undecided, his ears strained to catch the slightest sound.",
                lines=2,
                label="Reference Text (optional)",
                interactive=True,
            )
            run_button = gr.Button("Run Inference")

        with gr.Column():
            output_audio = gr.Audio(label="Generated Speech", type="filepath")
            status = gr.Textbox(label="Status / Logs", interactive=False)

    def run_inference_wrapper(ref_wav_path, src_text, ref_text):
        return vevo_tts(src_text, ref_wav_path, ref_text)

    run_button.click(
        run_inference_wrapper,
        inputs=[ref_wav_input, src_text_input, ref_text_input],
        outputs=[output_audio, status],
    )

if __name__ == "__main__":
    # Launch Gradio server, listen on all interfaces (good for WSL and remote access)
    demo.launch(server_name="0.0.0.0", server_port=7860)