Joesun commited on
Commit
8a8f673
·
verified ·
1 Parent(s): 41ebaec

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +98 -0
app.py ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import pkg_resources
3
+ import gradio as gr
4
+
5
+ # ============ 工具函式 ============
6
+ def detect_sdk():
7
+ """偵測目前環境中與 Google 相關套件的版本與 SDK 狀態"""
8
+ pkgs = []
9
+ has_new = has_old = False
10
+ for dist in pkg_resources.working_set:
11
+ name = dist.project_name
12
+ lower = name.lower()
13
+ if "google" in lower:
14
+ pkgs.append(f"{name} {dist.version}")
15
+ if lower == "google-genai":
16
+ has_new = True
17
+ if lower == "google-generativeai":
18
+ has_old = True
19
+
20
+ if has_new and not has_old:
21
+ sdk = "google-genai(新 SDK, v1)"
22
+ sdk_tag = "new"
23
+ elif has_old and not has_new:
24
+ sdk = "google-generativeai(舊 SDK, v1beta)"
25
+ sdk_tag = "old"
26
+ elif has_new and has_old:
27
+ sdk = "同時裝了新舊 SDK(建議只留一個以免衝突)"
28
+ sdk_tag = "both"
29
+ else:
30
+ sdk = "無法判定(可能沒安裝任何 Google GenAI SDK)"
31
+ sdk_tag = "none"
32
+
33
+ return sdk, sdk_tag, "\n".join(sorted(pkgs))
34
+
35
+ def list_models_if_possible():
36
+ """若有新 SDK + API Key,嘗試列出可用模型;否則回傳提示訊息"""
37
+ api_key = os.getenv("GEMINI_API_KEY")
38
+ if not api_key:
39
+ return "⚠️ 未設定 GEMINI_API_KEY(無法列出模型)。"
40
+
41
+ # 盡量用新 SDK;若不存在就回訊息
42
+ try:
43
+ from google import genai
44
+ except Exception as e:
45
+ return f"⚠️ 未安裝新 SDK(google-genai)。無法 list models。\n{e}"
46
+
47
+ try:
48
+ client = genai.Client(api_key=api_key)
49
+ names = [m.name for m in client.models.list()]
50
+ if not names:
51
+ return "(沒有列到任何模型)"
52
+ return "可用模型:\n" + "\n".join(names)
53
+ except Exception as e:
54
+ return f"⚠️ 列模型失敗:{e}"
55
+
56
+ def quick_health_check():
57
+ """快速健康檢查:API Key 是否存在、推薦模型名是否設定"""
58
+ api_key_ok = bool(os.getenv("GEMINI_API_KEY"))
59
+ model = os.getenv("GEMINI_MODEL", "(未設定,預設建議 gemini-2.5-flash)")
60
+ lines = []
61
+ lines.append(f"API Key 設定:{'✅ 已設定' if api_key_ok else '❌ 未設定'}(環境變數 GEMINI_API_KEY)")
62
+ lines.append(f"模型名稱:{model}")
63
+ lines.append("建議:gemini-2.5-flash 或 gemini-2.5-pro")
64
+ return "\n".join(lines)
65
+
66
+ # ============ Gradio 介面邏輯 ============
67
+ def refresh_status():
68
+ sdk, tag, pkgs = detect_sdk()
69
+ health = quick_health_check()
70
+ return sdk, pkgs, health
71
+
72
+ def do_list_models():
73
+ return list_models_if_possible()
74
+
75
+ with gr.Blocks(title="Gemini SDK 偵測面板 (HF Space)") as demo:
76
+ gr.Markdown("## 🔎 Gemini SDK 偵測面板(Hugging Face Space)\n"
77
+ "啟動後自動檢查你目前是跑 **新 SDK** 還是 **舊 SDK**,以及常見設定。")
78
+
79
+ with gr.Row():
80
+ with gr.Column():
81
+ sdk_label = gr.Textbox(label="目前偵測到的 SDK", interactive=False)
82
+ pkgs_box = gr.Textbox(label="與 Google 相關的已安裝套件(含版本)", lines=10, interactive=False)
83
+ health_box = gr.Textbox(label="快速健康檢查", lines=4, interactive=False)
84
+
85
+ btn_refresh = gr.Button("🔄 重新偵測")
86
+ btn_refresh.click(fn=refresh_status, outputs=[sdk_label, pkgs_box, health_box])
87
+
88
+ with gr.Column():
89
+ gr.Markdown("### 📜 列出可用模型(需要新 SDK + API Key)")
90
+ models_box = gr.Textbox(label="可用模型清單", lines=12, interactive=False)
91
+ btn_models = gr.Button("📋 List Models")
92
+ btn_models.click(fn=do_list_models, outputs=models_box)
93
+
94
+ # 啟動時自動偵測一次
95
+ demo.load(fn=refresh_status, outputs=[sdk_label, pkgs_box, health_box])
96
+
97
+ if __name__ == "__main__":
98
+ demo.launch(server_name="0.0.0.0")