import gradio as gr from transformers import AutoModelForCausalLM, AutoTokenizer import torch from gtts import gTTS # Qwenモデルの読み込み tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct") model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen2.5-0.5B-Instruct") # モデルがテキストを生成する関数 def generate_text(prompt, max_length, temperature, top_p): inputs = tokenizer(prompt, return_tensors="pt") outputs = model.generate( **inputs, max_length=max_length, temperature=temperature, top_p=top_p, do_sample=True ) generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True) return generated_text # テキストを音声に変換する関数 def text_to_speech(text): tts = gTTS(text=text, lang='ja') file_path = "output.mp3" tts.save(file_path) return file_path # モデルの出力と音声変換を組み合わせた関数 def generate_and_speak(prompt, max_length, temperature, top_p): generated_text = generate_text(prompt, max_length, temperature, top_p) speech_file = text_to_speech(generated_text) return generated_text, speech_file # Gradioインターフェースの作成 with gr.Blocks() as demo: # 入力欄(プロンプト、長さ、温度、Top-p) prompt = gr.Textbox(label="プロンプトを入力してください") max_length = gr.Slider(10, 1000, value=400, step=10, label="最大長") temperature = gr.Slider(0.1, 1.0, value=0.7, step=0.1, label="生成温度") top_p = gr.Slider(0.0, 1.0, value=0.95, step=0.05, label="Top-p") # 出力欄(生成されたテキストと音声ファイル) generated_text_output = gr.Textbox(label="生成されたテキスト") audio_output = gr.Audio(label="生成された音声") # ボタン(生成ボタンとクリアボタン) generate_button = gr.Button("生成") clear_button = gr.Button("クリア") # ボタンが押されたときのアクション generate_button.click(generate_and_speak, inputs=[prompt, max_length, temperature, top_p], outputs=[generated_text_output, audio_output]) # クリアボタンの機能 clear_button.click(lambda: ("", None), None, [prompt, generated_text_output, audio_output]) # インターフェースの起動 demo.launch()