Spaces:
Sleeping
Sleeping
import streamlit as st | |
from transformers import AutoTokenizer, AutoModelForCausalLM | |
import torch | |
# 🔃 モデル・トークナイザーの読み込み(slow tokenizer指定) | |
def load_model(): | |
tokenizer = AutoTokenizer.from_pretrained( | |
"rinna/japanese-gpt-neox-3.6b", use_fast=False | |
) | |
model = AutoModelForCausalLM.from_pretrained("rinna/japanese-gpt-neox-3.6b") | |
return tokenizer, model | |
tokenizer, model = load_model() | |
# 📋 サンプルデータ(4頭分) | |
cases = [ | |
{ | |
"user_input": """1歳時馬体重:430kg | |
体高:155.0cm | |
胸囲:180.0cm | |
管囲:20.8cm | |
生年月日:2023-03-15 | |
測尺日:2024-06-10""", | |
"result_summary": """予測馬体重:480kg、ベストな馬体重 | |
標準管囲との乖離:太い | |
過去の名馬:トーホウジャッカル 菊花賞G1芝3000m、オーソリティ アルゼンチン共和国杯G2芝2500m""" | |
}, | |
{ | |
"user_input": """1歳時馬体重:500kg | |
体高:152.0cm | |
胸囲:175.0cm | |
管囲:18.0cm | |
生年月日:2023-02-20 | |
測尺日:2024-06-20""", | |
"result_summary": """予測馬体重:540kg、やや重め | |
標準管囲との乖離:細い | |
過去の名馬:サクセスブロッケン フェブラリーS G1ダ1600m、スマートファルコン 東京大賞典G1ダ2000m""" | |
}, | |
{ | |
"user_input": """1歳時馬体重:380kg | |
体高:158.0cm | |
胸囲:172.0cm | |
管囲:20.2cm | |
生年月日:2023-04-10 | |
測尺日:2024-06-01""", | |
"result_summary": """予測馬体重:455kg、成長余地あり | |
標準管囲との乖離:標準 | |
過去の名馬:ダノンザキッド ホープフルS G1芝2000m、ジャスタウェイ 安田記念G1芝1600m""" | |
}, | |
{ | |
"user_input": """1歳時馬体重:470kg | |
体高:164.5cm | |
胸囲:179.0cm | |
管囲:21.5cm | |
生年月日:2023-03-05 | |
測尺日:2024-07-01""", | |
"result_summary": """予測馬体重:510kg、完成度高め | |
標準管囲との乖離:非常に太い | |
過去の名馬:キズナ 東京優駿G1芝2400m、ハーツクライ 有馬記念G1芝2500m""" | |
} | |
] | |
# ✨ コメント生成関数 | |
def generate_comment(case): | |
prompt = f"""以下は、一口馬主の募集馬についてのAI総括コメントです。 | |
ユーザーが入力した項目: | |
{case["user_input"]} | |
予測した結果: | |
{case["result_summary"]} | |
この馬について得られた結果を総括したうえで、ポジティブな言葉で締めくくってください。 | |
コメント:""" | |
input_ids = tokenizer.encode(prompt, return_tensors="pt") | |
output = model.generate(input_ids, max_new_tokens=120, do_sample=True, temperature=0.7) | |
decoded = tokenizer.decode(output[0], skip_special_tokens=True) | |
return decoded.split("コメント:")[-1].strip() | |
# 🖼️ UI部分 | |
st.title("🐴 AIによる募集馬コメント生成デモ") | |
if st.button("🎯 コメントを一括生成"): | |
for i, case in enumerate(cases, 1): | |
with st.spinner(f"Case {i} を生成中..."): | |
comment = generate_comment(case) | |
st.markdown(f"### 🐎 Case {i}") | |
st.markdown(f"**📥 入力**\n```\n{case['user_input']}\n```\n") | |
st.markdown(f"**📊 予測結果**\n```\n{case['result_summary']}\n```\n") | |
st.markdown(f"**📝 コメント**\n> {comment}") | |
st.markdown("---") | |