Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
8a22139
Add files via upload
miyakawa1123 Apr 30, 2025
381c2ad
Update app.py
miyakawa1123 Apr 30, 2025
b73a680
Colab を使用して作成されました
miyakawa1123 Apr 30, 2025
9cae78b
Colab を使用して作成されました
miyakawa1123 Apr 30, 2025
356c06c
Colab を使用して作成されました
miyakawa1123 Apr 30, 2025
eb864e8
Merge branch 'master' of https://github.com/matsuolab/lecture-ai-engi…
miyakawa1123 May 19, 2025
031a2d5
Add test for model accuracy
miyakawa1123 May 19, 2025
d7cd8b5
Update test.yml
miyakawa1123 May 19, 2025
165cee7
Add 演習2 model test to GitHub Actions
miyakawa1123 May 19, 2025
94a9034
Fix: remove duplicate 演習2 test step
miyakawa1123 May 19, 2025
4b23ef2
Fix: enable push trigger for GitHub Actions
miyakawa1123 May 19, 2025
5e40a40
Fix YAML syntax error in on: section
miyakawa1123 May 19, 2025
196fa2b
Fix indentation error in on: section
miyakawa1123 May 19, 2025
59397a5
Add temporary model file for CI
miyakawa1123 May 19, 2025
33dbd57
Temporarily load model_temp.pkl for CI
miyakawa1123 May 19, 2025
f563be9
Add model_final.pkl to fix CI
miyakawa1123 May 19, 2025
eeed4e7
Update test to use model_final.pkl
miyakawa1123 May 19, 2025
5d1e662
Add model_for_ci.pkl to fix CI error
miyakawa1123 May 19, 2025
33929eb
Update test to use model_for_ci.pkl
miyakawa1123 May 19, 2025
6b626e6
Fix model path for CI environment
miyakawa1123 May 19, 2025
095f84f
Add Titanic_for_ci.csv to fix CI FileNotFoundError
miyakawa1123 May 19, 2025
683549d
Fix: use Titanic_for_ci.csv for CI compatibility
miyakawa1123 May 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
name: ML Pipeline CI

on:
# push:
# branches: [ main, master ]
push:
branches: [ feature/add-tests ]
pull_request:
branches: [ main, master ]
branches: [ main ]

jobs:
test:
Expand Down Expand Up @@ -39,3 +39,8 @@ jobs:
- name: Run model tests
run: |
pytest day5/演習3/tests/test_model.py -v

- name: Run 演習2 model tests
run: |
pytest day5/演習2/test_model.py -v

113 changes: 34 additions & 79 deletions day1/02_streamlit_app/app.py
Original file line number Diff line number Diff line change
@@ -1,81 +1,36 @@
# app.py
import streamlit as st
import ui # UIモジュール
import llm # LLMモジュール
import database # データベースモジュール
import metrics # 評価指標モジュール
import data # データモジュール
import torch
from transformers import pipeline
from config import MODEL_NAME
from huggingface_hub import HfFolder

# --- アプリケーション設定 ---
st.set_page_config(page_title="Gemma Chatbot", layout="wide")

# --- 初期化処理 ---
# NLTKデータのダウンロード(初回起動時など)
metrics.initialize_nltk()

# データベースの初期化(テーブルが存在しない場合、作成)
database.init_db()

# データベースが空ならサンプルデータを投入
data.ensure_initial_data()

# LLMモデルのロード(キャッシュを利用)
# モデルをキャッシュして再利用
@st.cache_resource
def load_model():
"""LLMモデルをロードする"""
try:
device = "cuda" if torch.cuda.is_available() else "cpu"
st.info(f"Using device: {device}") # 使用デバイスを表示
pipe = pipeline(
"text-generation",
model=MODEL_NAME,
model_kwargs={"torch_dtype": torch.bfloat16},
device=device
)
st.success(f"モデル '{MODEL_NAME}' の読み込みに成功しました。")
return pipe
except Exception as e:
st.error(f"モデル '{MODEL_NAME}' の読み込みに失敗しました: {e}")
st.error("GPUメモリ不足の可能性があります。不要なプロセスを終了するか、より小さいモデルの使用を検討してください。")
return None
pipe = llm.load_model()

# --- Streamlit アプリケーション ---
st.title("🤖 Gemma 2 Chatbot with Feedback")
st.write("Gemmaモデルを使用したチャットボットです。回答に対してフィードバックを行えます。")
st.markdown("---")

# --- サイドバー ---
st.sidebar.title("ナビゲーション")
# セッション状態を使用して選択ページを保持
if 'page' not in st.session_state:
st.session_state.page = "チャット" # デフォルトページ

page = st.sidebar.radio(
"ページ選択",
["チャット", "履歴閲覧", "サンプルデータ管理"],
key="page_selector",
index=["チャット", "履歴閲覧", "サンプルデータ管理"].index(st.session_state.page), # 現在のページを選択状態にする
on_change=lambda: setattr(st.session_state, 'page', st.session_state.page_selector) # 選択変更時に状態を更新
)


# --- メインコンテンツ ---
if st.session_state.page == "チャット":
if pipe:
ui.display_chat_page(pipe)
else:
st.error("チャット機能を利用できません。モデルの読み込みに失敗しました。")
elif st.session_state.page == "履歴閲覧":
ui.display_history_page()
elif st.session_state.page == "サンプルデータ管理":
ui.display_data_page()

# --- フッターなど(任意) ---
st.sidebar.markdown("---")
st.sidebar.info("開発者: [Your Name]")
def display_chat_page(pipe):
st.header("📝 バッチ推論チャット")
st.write("改行区切りで複数のテキストを一括入力して、まとめて推論します。")

# テキストエリアで複数入力
batch_input = st.text_area("テキストを改行で区切って入力してください", height=300)

# ボタン押したら推論
if st.button("まとめて推論する"):
if batch_input.strip():
# 改行でリストに分割
text_list = [line.strip() for line in batch_input.strip().splitlines() if line.strip()]

if not text_list:
st.warning("空白行だけです。ちゃんとテキストを入力してください!")
return

st.success(f"📝 入力テキスト数:{len(text_list)}件")

with st.spinner("推論中..."):
try:
# バッチ推論
results = pipe(text_list, max_length=100)
except Exception as e:
st.error(f"推論中にエラーが発生しました: {e}")
return

# 出力を一覧表示
for idx, (inp, outp) in enumerate(zip(text_list, results)):
with st.expander(f"【{idx+1}件目】入力内容を見る", expanded=False):
st.markdown(f"**入力:** {inp}")
st.markdown(f"**出力:** {outp['generated_text']}")
else:
st.warning("最低1件は入力してください。")
69 changes: 57 additions & 12 deletions day1/day1_practice.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,27 @@
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "AIXMavdDEP8U"
},
"outputs": [],
"execution_count": 1,
"metadata": {
"id": "AIXMavdDEP8U",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "d1a38a2b-7f9a-4b89-d6ca-826a1c316e07"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Cloning into 'lecture-ai-engineering'...\n",
"remote: Enumerating objects: 52, done.\u001b[K\n",
"remote: Total 52 (delta 0), reused 0 (delta 0), pack-reused 52 (from 1)\u001b[K\n",
"Receiving objects: 100% (52/52), 83.21 KiB | 6.40 MiB/s, done.\n",
"Resolving deltas: 100% (9/9), done.\n"
]
}
],
"source": [
"!git clone https://github.com/matsuolab/lecture-ai-engineering.git"
]
Expand Down Expand Up @@ -115,11 +131,38 @@
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "bvEowFfg5lrq"
},
"outputs": [],
"execution_count": 2,
"metadata": {
"id": "bvEowFfg5lrq",
"colab": {
"base_uri": "https://localhost:8080/"
},
"outputId": "0da19f51-85b0-4a63-fa8d-312b2580e1df"
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Collecting python-dotenv\n",
" Downloading python_dotenv-1.1.0-py3-none-any.whl.metadata (24 kB)\n",
"Downloading python_dotenv-1.1.0-py3-none-any.whl (20 kB)\n",
"Installing collected packages: python-dotenv\n",
"Successfully installed python-dotenv-1.1.0\n",
"/content/lecture-ai-engineering/day1\n"
]
},
{
"output_type": "execute_result",
"data": {
"text/plain": [
"True"
]
},
"metadata": {},
"execution_count": 2
}
],
"source": [
"!pip install python-dotenv\n",
"from dotenv import load_dotenv, find_dotenv\n",
Expand Down Expand Up @@ -391,7 +434,9 @@
},
{
"cell_type": "markdown",
"metadata": {},
"metadata": {
"id": "YqGfD4ex5kjH"
},
"source": [
"アプリケーションの機能としては、チャット機能や履歴閲覧があります。\n",
"\n",
Expand Down Expand Up @@ -567,4 +612,4 @@
},
"nbformat": 4,
"nbformat_minor": 0
}
}
Binary file added day5/model_final.pkl
Binary file not shown.
Binary file added day5/model_temp.pkl
Binary file not shown.
Loading