rcdemo1 / app.py
eyepyon's picture
新バージョン
276f335
Raw
History Blame Contribute Delete
8.27 kB
import gradio as gr
from transformers import pipeline
import time
# 利用可能なモデルのリスト(公開されていて比較的小さいモデル)
AVAILABLE_MODELS = {
"新 独自学習Qwen2-1.5B": "eyepyon/rc3qwen2-1.5b-finetuned",
"新 独自学習Llama-3.2-1B": "eyepyon/rc3llama-3.2-1b-finetuned",
"新 独自学習Gemma-2-2B": "eyepyon/rc3gemma-2-2b-finetuned",
"新 独自学習Phi4-mini-reasoning": "eyepyon/rc3phi-4-mini-reasoning-finetuned",
"新 独自学習DeepSeek-R1-1.5B": "eyepyon/rc3deepseek-r1-1.5b-finetuned",
"旧 独自学習Qwen2-1.5B": "eyepyon/rcqwen2-merged-final",
"旧 独自学習Llama-3.2-1B": "eyepyon/rclama32-merged-final",
"旧 独自学習Gemma-2-9B": "eyepyon/rcgemma2-merged-final",
"旧 独自学習Phi4-mini-reasoning": "eyepyon/rcrcPhi4miniR-merged-final",
"GPT2-Small": "gpt2",
"DistilGPT2": "distilgpt2",
}
# "独自学習phi2": "eyepyon/rcphi2",
# "BERT-Base": "bert-base-uncased", # マスク補完用
# "FLAN-T5-Small": "google/flan-t5-small", # テキスト生成
# "OPT-125M": "facebook/opt-125m",
# グローバル変数
current_model = None
current_model_name = None
generator = None
# モデルをロードする関数
def load_model(model_key):
global generator, current_model, current_model_name
if model_key not in AVAILABLE_MODELS:
return f"エラー: モデル '{model_key}' は利用できません。"
model_path = AVAILABLE_MODELS[model_key]
try:
# ロード開始時刻
start_time = time.time()
print(f"モデル {model_key} ({model_path}) をロード中...")
# モデルタイプに基づいてパイプラインを選択
if "t5" in model_path.lower():
# T5モデルはtext2textタスク
generator = pipeline("text2text-generation", model=model_path)
elif "bert" in model_path.lower():
# BERTモデルはfill-maskタスク
generator = pipeline("fill-mask", model=model_path)
else:
# デフォルトはtext-generation
generator = pipeline("text-generation", model=model_path)
# 現在のモデル名を保存
current_model = model_path
current_model_name = model_key
# ロード時間
load_time = time.time() - start_time
success_msg = f"✅ {model_key} モデルのロードが完了しました!({load_time:.1f}秒)"
print(success_msg)
return success_msg
except Exception as e:
error_msg = f"❌ モデルのロード中にエラーが発生しました: {str(e)}"
print(error_msg)
return error_msg
# テキスト生成/処理関数
def process_text(prompt, model_key):
global generator, current_model, current_model_name
# 入力チェック
if not prompt.strip():
return "テキストを入力してください。"
# モデルがロードされていない場合
if generator is None:
return "モデルがまだロードされていません。まずモデルを選択してロードしてください。"
# 選択されたモデルと現在ロードされているモデルが異なる場合
if current_model_name != model_key:
return f"現在ロードされているのは '{current_model_name}' モデルです。'{model_key}' モデルを使用するには、まずロードしてください。"
try:
# モデルに応じた処理
if "bert" in current_model.lower():
# BERTのマスク補完
# プロンプトに[MASK]がない場合は追加
if "[MASK]" not in prompt:
prompt += " [MASK]"
result = generator(prompt)
if isinstance(result, list):
# トップ3の候補を表示
output = f"入力: {prompt}\n\n候補:\n"
for i, res in enumerate(result[:3]):
output += f"{i+1}. {res['sequence']} (確率: {res['score']:.2f})\n"
return output
else:
return f"結果: {result['sequence']}"
elif "t5" in current_model.lower():
# T5形式のテキスト生成
result = generator(prompt, max_length=100)
return f"入力: {prompt}\n\n生成結果: {result[0]['generated_text']}"
else:
# 通常のテキスト生成
result = generator(prompt, max_length=100, do_sample=True, temperature=0.7)
return f"入力: {prompt}\n\n生成結果: {result[0]['generated_text']}"
except Exception as e:
return f"処理中にエラーが発生しました: {str(e)}"
# サンプルテキストをセットする関数
def set_gpt_sample1():
return "こんにちは、私の名前は"
def set_gpt_sample2():
return "人工知能の将来について"
def set_bert_sample1():
return "私は[MASK]が好きです。"
def set_bert_sample2():
return "今日の[MASK]はとても良いです。"
def set_t5_sample1():
return "translate English to German: Hello"
def set_t5_sample2():
return "summarize: AI models process text patterns"
# 単純化したGradioインターフェース
with gr.Blocks(title="モデルテスター") as demo:
gr.Markdown("# モデルテスター")
gr.Markdown("複数のモデルをロードしてテストできます。まずモデルを選択してロードし、テキスト処理を行ってください。")
# モデル選択と処理部分
with gr.Row():
# 左側のカラム - モデル選択
with gr.Column():
model_dropdown = gr.Dropdown(
choices=list(AVAILABLE_MODELS.keys()),
label="テストするモデル",
value="DistilGPT2"
)
load_button = gr.Button("モデルをロード")
model_info = gr.Textbox(label="モデル情報", value="モデルが選択されていません")
# モデルタイプごとのヒント
# gr.Markdown("### モデル別ヒント")
# gr.Markdown("**GPT2・DistilGPT2**: テキスト生成モデル")
# gr.Markdown("**BERT**: [MASK]部分を補完するモデル")
# gr.Markdown("**T5**: 翻訳・要約などのタスク向けモデル")
# 右側のカラム - テキスト入力と処理
with gr.Column():
input_text = gr.Textbox(
label="入力テキスト",
placeholder="テキストを入力してください...",
lines=3
)
# サンプルテキストボタン
# gr.Markdown("### サンプルテキスト")
# with gr.Row():
# gpt_btn1 = gr.Button("GPT用例1")
# gpt_btn2 = gr.Button("GPT用例2")
#
# with gr.Row():
# bert_btn1 = gr.Button("BERT用例1")
# bert_btn2 = gr.Button("BERT用例2")
#
# with gr.Row():
# t5_btn1 = gr.Button("T5用例1")
# t5_btn2 = gr.Button("T5用例2")
process_button = gr.Button("実行")
output_text = gr.Textbox(label="出力結果", lines=10)
# モデルロードイベント
load_button.click(
fn=load_model,
inputs=[model_dropdown],
outputs=[model_info]
)
# テキスト処理イベント
process_button.click(
fn=process_text,
inputs=[input_text, model_dropdown],
outputs=[output_text]
)
# サンプルボタンイベント - GPT系
# gpt_btn1.click(fn=set_gpt_sample1, inputs=None, outputs=input_text)
# gpt_btn2.click(fn=set_gpt_sample2, inputs=None, outputs=input_text)
# サンプルボタンイベント - BERT
# bert_btn1.click(fn=set_bert_sample1, inputs=None, outputs=input_text)
# bert_btn2.click(fn=set_bert_sample2, inputs=None, outputs=input_text)
# サンプルボタンイベント - T5
# t5_btn1.click(fn=set_t5_sample1, inputs=None, outputs=input_text)
# t5_btn2.click(fn=set_t5_sample2, inputs=None, outputs=input_text)
# アプリケーション起動
if __name__ == "__main__":
demo.launch()