Spaces:
Running
Running
| # ui/tab_database.py | |
| """ | |
| Tab4๏ผๆฐๆฎๅบๆต่ง | |
| - ๆฅ็ๅทฒๅๆๆจกๅๅ่กจ | |
| - ๆฅ็ๆๆจกๅ็้ๅฑๅๅงๆฐๆฎ | |
| - ๆฐๆฎๅบ็ป่ฎกไฟกๆฏ | |
| """ | |
| import gradio as gr | |
| import pandas as pd | |
| from db.schema import init_db, get_db_stats | |
| from db.reader import ( | |
| get_analyzed_models, | |
| get_model_summary, | |
| get_layer_metrics, | |
| get_resume_status, | |
| ) | |
| def load_db_stats() -> str: | |
| """่ทๅๆฐๆฎๅบ็ป่ฎกไฟกๆฏ""" | |
| conn = init_db() | |
| stats = get_db_stats(conn) | |
| return ( | |
| f"๐ ๆฐๆฎๅบ็ป่ฎก\n" | |
| f"{'โ'*40}\n" | |
| f" ๆจกๅๆฐ๏ผ {stats.get('models', 0)}\n" | |
| f" ็ปไปถๆฐ๏ผ {stats.get('components', 0)}\n" | |
| f" ๅฑๅคด่ฎฐๅฝๆฐ๏ผ {stats.get('layer_head_metrics', 0)}\n" | |
| f" ๆฑๆป่กๆฐ๏ผ {stats.get('model_summary', 0)}\n" | |
| f" ๆฐๆฎๅบๅคงๅฐ๏ผ {stats.get('db_size_mb', 0)} MB\n" | |
| ) | |
| def load_model_list() -> pd.DataFrame: | |
| """ๅ ่ฝฝๅทฒๅๆๆจกๅๅ่กจ""" | |
| conn = init_db() | |
| df = get_analyzed_models(conn) | |
| if df.empty: | |
| return pd.DataFrame( | |
| columns=["model_id", "model_type", "analyzed_at", | |
| "analyze_sec", "n_components", "total_layers"] | |
| ) | |
| return df | |
| def load_model_detail(model_id: str) -> tuple[pd.DataFrame, pd.DataFrame, str]: | |
| """ | |
| ๅ ่ฝฝๆจกๅ่ฏฆๆ | |
| ่ฟๅ (summary_df, ๆญ็น็ปญไผ ็ถๆๆๆฌ) | |
| """ | |
| if not model_id.strip(): | |
| return pd.DataFrame(), pd.DataFrame(), "่ฏท่พๅ ฅๆจกๅ ID" | |
| conn = init_db() | |
| # ๆฑๆป็ป่ฎก | |
| summary_df = get_model_summary(conn, model_id.strip()) | |
| # ๆญ็น็ปญไผ ็ถๆ๏ผๆๅ็ผ๏ผ | |
| status_lines = [f"๐ ๆญ็น็ปญไผ ็ถๆ๏ผ{model_id}\n{'โ'*50}\n"] | |
| if not summary_df.empty: | |
| for pfx in summary_df["prefix"].unique(): | |
| rs = get_resume_status(conn, model_id.strip(), pfx) | |
| status_lines.append( | |
| f" [{pfx}]\n" | |
| f" ๅทฒๅฎๆๅฑๆฐ๏ผ{rs['total_done']}\n" | |
| f" ๅฑๅท๏ผ{sorted(rs['done_layers'])}\n" | |
| ) | |
| else: | |
| status_lines.append(" ๆๆ ๆฐๆฎ\n") | |
| return summary_df, "".join(status_lines) | |
| def load_layer_data( | |
| model_id: str, | |
| prefix: str, | |
| layer_type: str, | |
| start_layer: int, | |
| end_layer: int, | |
| ) -> tuple[pd.DataFrame, str]: | |
| """ๅ ่ฝฝ้ๅคดๅๅงๆฐๆฎ""" | |
| if not model_id.strip(): | |
| return pd.DataFrame(), "่ฏท่พๅ ฅๆจกๅ ID" | |
| conn = init_db() | |
| lt = layer_type if layer_type != "all" else None | |
| pfx = prefix.strip() or None | |
| df = get_layer_metrics( | |
| conn, | |
| model_id = model_id.strip(), | |
| prefix = pfx, | |
| layer_type = lt, | |
| start_layer = int(start_layer), | |
| end_layer = int(end_layer), | |
| ) | |
| if df.empty: | |
| return pd.DataFrame(), f"โ ๏ธ ๆ ๆฐๆฎ๏ผmodel={model_id} prefix={pfx} layer_type={lt}" | |
| status = ( | |
| f"โ {len(df)} ๆก่ฎฐๅฝ " | |
| f"| ๅฑ {df['layer'].min()}~{df['layer'].max()} " | |
| f"| prefix={pfx or 'ๅ จ้จ'}" | |
| ) | |
| return df, status | |
| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| # Tab4 UI | |
| # โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| def build_tab_database(): | |
| with gr.Tab("๐๏ธ ๆฐๆฎๅบ"): | |
| gr.Markdown("## ๆฐๆฎๅบๆต่ง \nๆฅ็ๅทฒๅๆๆจกๅ็ๅๅงๆฐๆฎๅๆฑๆป็ป่ฎกใ") | |
| # โโ ๆฐๆฎๅบ็ป่ฎก โโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| with gr.Row(): | |
| stats_text = gr.Textbox( | |
| label="ๆฐๆฎๅบ็ป่ฎก", | |
| value="็นๅปๅทๆฐ", | |
| lines=7, | |
| interactive=False, | |
| scale=2, | |
| ) | |
| refresh_stats_btn = gr.Button( | |
| "๐ ๅทๆฐ็ป่ฎก", scale=1, variant="secondary" | |
| ) | |
| refresh_stats_btn.click( | |
| fn=load_db_stats, | |
| outputs=stats_text, | |
| ) | |
| gr.Markdown("---") | |
| # โโ ๅทฒๅๆๆจกๅๅ่กจ โโโโโโโโโโโโโโโโโโโโโโ | |
| gr.Markdown("### ๅทฒๅๆๆจกๅ") | |
| with gr.Row(): | |
| refresh_models_btn = gr.Button( | |
| "๐ ๅทๆฐๆจกๅๅ่กจ", variant="secondary" | |
| ) | |
| models_table = gr.Dataframe( | |
| label="ๅทฒๅๆๆจกๅ", | |
| interactive=False, | |
| ) | |
| refresh_models_btn.click( | |
| fn=load_model_list, | |
| outputs=models_table, | |
| ) | |
| gr.Markdown("---") | |
| # โโ ๆจกๅ่ฏฆๆ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ | |
| gr.Markdown("### ๆจกๅ่ฏฆๆ & ๆญ็น็ปญไผ ็ถๆ") | |
| with gr.Row(): | |
| detail_model_id = gr.Textbox( | |
| label="ๆจกๅ ID", | |
| placeholder="google/gemma-4-e2b", | |
| scale=3, | |
| ) | |
| load_detail_btn = gr.Button( | |
| "๐ ๆฅ็่ฏฆๆ ", variant="secondary", scale=1 | |
| ) | |
| resume_status_text = gr.Textbox( | |
| label="ๆญ็น็ปญไผ ็ถๆ", | |
| lines=8, | |
| interactive=False, | |
| ) | |
| summary_table = gr.Dataframe( | |
| label="ๆจกๅๆฑๆป็ป่ฎก๏ผall/standard/global ไธ่ก๏ผ", | |
| interactive=False, | |
| ) | |
| load_detail_btn.click( | |
| fn=load_model_detail, | |
| inputs=[detail_model_id], | |
| outputs=[summary_table, resume_status_text], | |
| ) | |
| gr.Markdown("---") | |
| # โโ ้ๅคดๅๅงๆฐๆฎ โโโโโโโโโโโโโโโโโโโโโโโโ | |
| gr.Markdown("### ้ๅคดๅๅงๆฐๆฎๆฅ่ฏข") | |
| with gr.Row(): | |
| raw_model_id = gr.Textbox( | |
| label="ๆจกๅ ID", | |
| placeholder="google/gemma-4-e2b", | |
| scale=2, | |
| ) | |
| raw_prefix = gr.Textbox( | |
| label="็ปไปถๅ็ผ๏ผ็็ฉบ=ๅ จ้จ๏ผ", | |
| placeholder="model.language_model.", | |
| scale=2, | |
| ) | |
| raw_layer_type = gr.Dropdown( | |
| label="ๅฑ็ฑปๅ", | |
| choices=["all", "standard", "global"], | |
| value="all", | |
| scale=1, | |
| ) | |
| with gr.Row(): | |
| raw_start = gr.Number( | |
| label="่ตทๅงๅฑๅท", value=0, precision=0, scale=1 | |
| ) | |
| raw_end = gr.Number( | |
| label="็ปๆๅฑๅท", value=10, precision=0, scale=1 | |
| ) | |
| load_raw_btn = gr.Button( | |
| "๐ ๆฅ่ฏขๆฐๆฎ", variant="secondary", scale=1 | |
| ) | |
| raw_status = gr.Textbox( | |
| label="ๆฅ่ฏข็ถๆ", lines=1, interactive=False | |
| ) | |
| raw_table = gr.Dataframe( | |
| label="้ๅคดๅๅงๆฐๆฎ", | |
| interactive=False, | |
| wrap=False, | |
| ) | |
| load_raw_btn.click( | |
| fn=load_layer_data, | |
| inputs=[raw_model_id, raw_prefix, raw_layer_type, | |
| raw_start, raw_end], | |
| outputs=[raw_table, raw_status], | |
| ) |