Spaces:
Sleeping
Sleeping
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() |