mikao007 commited on
Commit
88bab0d
·
verified ·
1 Parent(s): 73d91a6

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +39 -12
app.py CHANGED
@@ -16,20 +16,27 @@ from datetime import datetime
16
  # Load environment variables
17
  load_dotenv()
18
 
19
- # Read Gemini API key from environment (.env or platform secrets)
20
- gemini_api_key = os.getenv("GOOGLE_API_KEY", "").strip()
21
- if gemini_api_key:
22
- os.environ["GOOGLE_API_KEY"] = gemini_api_key
23
- else:
24
- print("警告:未找到 GOOGLE_API_KEY,請在環境變數或 .env 設定。")
 
 
 
 
 
 
 
 
 
25
 
26
  class PDFChatBot:
27
  def __init__(self):
28
  self.vector_store = None
29
- self.embeddings = GoogleGenerativeAIEmbeddings(
30
- model="models/text-embedding-004",
31
- google_api_key=gemini_api_key
32
- )
33
  self.processed_files = []
34
  self.chat_history = [] # 儲存聊天歷史
35
 
@@ -82,6 +89,14 @@ class PDFChatBot:
82
  def create_vector_store(self, chunks):
83
  """從文字區塊創建FAISS向量存儲"""
84
  try:
 
 
 
 
 
 
 
 
85
  self.vector_store = FAISS.from_texts(chunks, self.embeddings)
86
  self.vector_store.save_local("faiss_index")
87
  return True
@@ -93,6 +108,14 @@ class PDFChatBot:
93
  """載入已存在的向量存儲"""
94
  try:
95
  if os.path.exists("faiss_index"):
 
 
 
 
 
 
 
 
96
  self.vector_store = FAISS.load_local(
97
  "faiss_index",
98
  embeddings=self.embeddings,
@@ -118,10 +141,14 @@ class PDFChatBot:
118
  回答:
119
  """
120
 
121
- # Using Flash 2.0 model
 
 
 
 
122
  model = ChatGoogleGenerativeAI(
123
  model="gemini-2.0-flash-exp",
124
- google_api_key=gemini_api_key,
125
  temperature=temperature,
126
  max_tokens=max_tokens,
127
  top_p=0.8,
 
16
  # Load environment variables
17
  load_dotenv()
18
 
19
+ # 延後讀取 API 金鑰:提供工具函式,實際需要時才讀取
20
+ def _get_api_key() -> str:
21
+ candidate_keys = [
22
+ "GOOGLE_API_KEY",
23
+ "GEMINI_API_KEY",
24
+ "GOOGLE_GENAI_API_KEY",
25
+ "GENAI_API_KEY",
26
+ ]
27
+ for key_name in candidate_keys:
28
+ value = os.getenv(key_name, "").strip()
29
+ if value:
30
+ # 同步一份到 GOOGLE_API_KEY 以相容底層套件
31
+ os.environ["GOOGLE_API_KEY"] = value
32
+ return value
33
+ return ""
34
 
35
  class PDFChatBot:
36
  def __init__(self):
37
  self.vector_store = None
38
+ # 嵌入模型延後初始化,直到真的需要(處理或載入向量庫)
39
+ self.embeddings = None
 
 
40
  self.processed_files = []
41
  self.chat_history = [] # 儲存聊天歷史
42
 
 
89
  def create_vector_store(self, chunks):
90
  """從文字區塊創建FAISS向量存儲"""
91
  try:
92
+ if self.embeddings is None:
93
+ api_key = _get_api_key()
94
+ if not api_key:
95
+ return False
96
+ self.embeddings = GoogleGenerativeAIEmbeddings(
97
+ model="models/text-embedding-004",
98
+ google_api_key=api_key
99
+ )
100
  self.vector_store = FAISS.from_texts(chunks, self.embeddings)
101
  self.vector_store.save_local("faiss_index")
102
  return True
 
108
  """載入已存在的向量存儲"""
109
  try:
110
  if os.path.exists("faiss_index"):
111
+ if self.embeddings is None:
112
+ api_key = _get_api_key()
113
+ if not api_key:
114
+ return False
115
+ self.embeddings = GoogleGenerativeAIEmbeddings(
116
+ model="models/text-embedding-004",
117
+ google_api_key=api_key
118
+ )
119
  self.vector_store = FAISS.load_local(
120
  "faiss_index",
121
  embeddings=self.embeddings,
 
141
  回答:
142
  """
143
 
144
+ # Using Flash 2.0 model(延後讀取 API Key)
145
+ api_key = _get_api_key()
146
+ if not api_key:
147
+ raise RuntimeError("尚未設定 API 金鑰,請於部署後設定 GOOGLE_API_KEY 再重試。")
148
+
149
  model = ChatGoogleGenerativeAI(
150
  model="gemini-2.0-flash-exp",
151
+ google_api_key=api_key,
152
  temperature=temperature,
153
  max_tokens=max_tokens,
154
  top_p=0.8,