drosshopper commited on
Commit
0c5ea15
·
verified ·
1 Parent(s): 49509d2

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +91 -78
app.py CHANGED
@@ -1,78 +1,91 @@
1
- from transformers import AutoTokenizer, AutoModelForCausalLM
2
- import torch
3
-
4
- # モデルロード
5
- tokenizer = AutoTokenizer.from_pretrained("rinna/japanese-gpt-neox-3.6b")
6
- model = AutoModelForCausalLM.from_pretrained("rinna/japanese-gpt-neox-3.6b")
7
-
8
- # 🔤 各プロンプト定義
9
- cases = [
10
- {
11
- "user_input": """1歳時馬体重:430kg
12
- 体高:155.0cm
13
- 胸囲:180.0cm
14
- 管囲:20.8cm
15
- 生年月日:2023-03-15
16
- 測尺日:2024-06-10""",
17
- "result_summary": """予測馬体重:480kg、ベストな馬体重
18
- 標準管囲との乖離:太い
19
- 過去の名馬:トーホウジャッカル 菊花賞G1芝3000m、オーソリティ アルゼンチン共和国杯G2芝2500m"""
20
- },
21
- {
22
- "user_input": """1歳時馬体重:500kg
23
- 体高:152.0cm
24
- 胸囲:175.0cm
25
- 管囲:18.0cm
26
- 生年月日:2023-02-20
27
- 測尺日:2024-06-20""",
28
- "result_summary": """予測馬体重:540kg、やや重め
29
- 標準管囲との乖離:細い
30
- 過去の名馬:サクセスブロッケン フェブラリーS G1ダ1600m、スマートファルコン 東京大賞典G1ダ2000m"""
31
- },
32
- {
33
- "user_input": """1歳時馬体重:380kg
34
- 体高:158.0cm
35
- 胸囲:172.0cm
36
- 管囲:20.2cm
37
- 生年月日:2023-04-10
38
- 測尺日:2024-06-01""",
39
- "result_summary": """予測馬体重:455kg、成長余地あり
40
- 標準管囲との乖離:標準
41
- 過去の名馬:ダノンザキッド ホープフルS G1芝2000m、ジャスタウェイ 安田記念G1芝1600m"""
42
- },
43
- {
44
- "user_input": """1歳時馬体重:470kg
45
- 体高:164.5cm
46
- 胸囲:179.0cm
47
- 管囲:21.5cm
48
- 生年月日:2023-03-05
49
- 測尺日:2024-07-01""",
50
- "result_summary": """予測馬体重:510kg、完成度高め
51
- 標準管囲との乖離:非常に太い
52
- 過去の名馬:キズナ 東京優駿G1芝2400m、ハーツクライ 有馬記念G1芝2500m"""
53
- }
54
- ]
55
-
56
- # 🌟 生成関数
57
- def generate_comment(prompt):
58
- full_prompt = f"""以下は、一口馬主の募集馬についてのAI総括コメントです。
59
-
60
- ユーザーが入力した項目:
61
- {prompt["user_input"]}
62
-
63
- 予測した結果:
64
- {prompt["result_summary"]}
65
-
66
- この馬について得られた結果を総括したうえで、ポジティブな言葉で締めくくってください。
67
- コメント:"""
68
-
69
- input_ids = tokenizer.encode(full_prompt, return_tensors="pt")
70
- output = model.generate(input_ids, max_new_tokens=120, do_sample=True, temperature=0.7)
71
- decoded = tokenizer.decode(output[0], skip_special_tokens=True)
72
- return decoded.split("コメント:")[-1].strip()
73
-
74
- # 🔁 一括生成と表示
75
- for i, case in enumerate(cases, 1):
76
- print(f"\n=== 🐴 Case {i} ===")
77
- comment = generate_comment(case)
78
- print(comment)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from transformers import AutoTokenizer, AutoModelForCausalLM
3
+ import torch
4
+
5
+ # 🧠 モデルロード(初回キャッシュで高速化)
6
+ @st.cache_resource
7
+ def load_model():
8
+ tokenizer = AutoTokenizer.from_pretrained("rinna/japanese-gpt-neox-3.6b")
9
+ model = AutoModelForCausalLM.from_pretrained("rinna/japanese-gpt-neox-3.6b")
10
+ return tokenizer, model
11
+
12
+ tokenizer, model = load_model()
13
+
14
+ # 📝 入力データ(4ケース)
15
+ cases = [
16
+ {
17
+ "user_input": """1歳時馬体重:430kg
18
+ 体高:155.0cm
19
+ 胸囲:180.0cm
20
+ 管囲:20.8cm
21
+ 生年月日:2023-03-15
22
+ 測尺日:2024-06-10""",
23
+ "result_summary": """予測馬体重:480kg、ベストな馬体重
24
+ 標準管囲との乖離:太い
25
+ 過去の名馬:トーホウジャッカル 菊花賞G1芝3000m、オーソリティ アルゼンチン共和国杯G2芝2500m"""
26
+ },
27
+ {
28
+ "user_input": """1歳時馬体重:500kg
29
+ 体高:152.0cm
30
+ 胸囲:175.0cm
31
+ 管囲:18.0cm
32
+ 生年月日:2023-02-20
33
+ 測尺日:2024-06-20""",
34
+ "result_summary": """予測馬体重:540kg、やや重め
35
+ 標準管囲との乖離:細い
36
+ 過去の名馬:サクセスブロッケン フェブラリーS G1ダ1600m、スマートファルコン 東京大賞典G1ダ2000m"""
37
+ },
38
+ {
39
+ "user_input": """1歳時馬体重:380kg
40
+ 体高:158.0cm
41
+ 胸囲:172.0cm
42
+ 管囲:20.2cm
43
+ 生年月日:2023-04-10
44
+ 測尺日:2024-06-01""",
45
+ "result_summary": """予測馬体重:455kg、成長余地あり
46
+ 標準管囲との乖離:標準
47
+ 過去の名馬:ダノンザキッド ホープフルS G1芝2000m、ジャスタウェイ 安田記念G1芝1600m"""
48
+ },
49
+ {
50
+ "user_input": """1歳時馬体重:470kg
51
+ 体高:164.5cm
52
+ 胸囲:179.0cm
53
+ 管囲:21.5cm
54
+ 生年月日:2023-03-05
55
+ 測尺日:2024-07-01""",
56
+ "result_summary": """予測馬体重:510kg、完成度高め
57
+ 標準管囲との乖離:非常に太い
58
+ 過去の名馬:キズナ 東京優駿G1芝2400m、ハーツクライ 有馬記念G1芝2500m"""
59
+ }
60
+ ]
61
+
62
+ # ✨ コメント生成関数
63
+ def generate_comment(prompt):
64
+ full_prompt = f"""以下は、一���馬主の募集馬についてのAI総括コメントです。
65
+
66
+ ユーザーが入力した項目:
67
+ {prompt["user_input"]}
68
+
69
+ 予測した結果:
70
+ {prompt["result_summary"]}
71
+
72
+ この馬について得られた結果を総括したうえで、ポジティブな言葉で締めくくってください。
73
+ コメント:"""
74
+
75
+ input_ids = tokenizer.encode(full_prompt, return_tensors="pt")
76
+ output = model.generate(input_ids, max_new_tokens=120, do_sample=True, temperature=0.7)
77
+ decoded = tokenizer.decode(output[0], skip_special_tokens=True)
78
+ return decoded.split("コメント:")[-1].strip()
79
+
80
+ # 🌐 Streamlit UI
81
+ st.title("🐴 募集馬AIコメント生成(デモ)")
82
+
83
+ if st.button("🎯 コメントを一括生成"):
84
+ for i, case in enumerate(cases, 1):
85
+ with st.spinner(f"Case {i} を生成中..."):
86
+ comment = generate_comment(case)
87
+ st.markdown(f"### 🐴 Case {i}")
88
+ st.markdown(f"**📥 入力**\n```\n{case['user_input']}\n```\n")
89
+ st.markdown(f"**📊 予測結果**\n```\n{case['result_summary']}\n```\n")
90
+ st.markdown(f"**📝 コメント**\n> {comment}")
91
+ st.markdown("---")