Spaces:
Running
Running
import gradio as gr | |
from transformers import AutoModelForCausalLM, AutoTokenizer | |
# モデルとトークナイザーの読み込み | |
model_name = "rinna/japanese-gpt-neox-small" | |
tokenizer = AutoTokenizer.from_pretrained(model_name, use_fast=False) # Slow tokenizerを使用 | |
model = AutoModelForCausalLM.from_pretrained(model_name) | |
# 生成用の関数 | |
def respond(input_text, system_message, max_tokens, temperature, top_p): | |
# システムメッセージとユーザー入力を結合 | |
input_text_combined = f"システム: {system_message}\nユーザー: {input_text}\n" | |
# トークン化 | |
inputs = tokenizer(input_text_combined, return_tensors="pt") | |
# モデルに入力を渡して生成 | |
outputs = model.generate( | |
**inputs, | |
max_length=max_tokens, # 最大トークン数 | |
top_p=top_p, # nucleus sampling のパラメータ | |
do_sample=True, # サンプリングを有効にする | |
temperature=temperature, # 生成の温度 | |
pad_token_id=tokenizer.eos_token_id | |
) | |
# トークンをテキストにデコード | |
response = tokenizer.decode(outputs[0], skip_special_tokens=True) | |
# レスポンスを返す | |
return response | |
# Gradioインターフェースの作成 | |
with gr.Blocks() as demo: | |
gr.Markdown("## rinna/japanese-gpt-neox-small チャットボット") | |
# 追加の入力フィールドをリストで設定 | |
additional_inputs = [ | |
gr.Textbox(value="ユーザーの質問と依頼のみに答えてください。ポジティブに.", label="システムメッセージ"), | |
gr.Slider(minimum=1, maximum=2048, value=512, step=1, label="新規トークン最大"), | |
gr.Slider(minimum=0.1, maximum=4.0, value=0.7, step=0.1, label="温度"), | |
gr.Slider(minimum=0.1, maximum=1.0, value=0.95, step=0.05, label="Top-p (核サンプリング)") | |
] | |
# ユーザーのメイン入力 | |
input_text = gr.Textbox(label="ユーザー入力", placeholder="質問やテキストを入力してください") | |
# 出力エリア("respond"という名前に変更) | |
output_text = gr.Textbox(label="respond") | |
# ボタンとアクション | |
submit_button = gr.Button("送信") | |
submit_button.click(respond, inputs=[input_text] + additional_inputs, outputs=output_text) | |
# インターフェースの起動 | |
demo.launch() |