YO-LOLO commited on
Commit
fd2a8a8
·
verified ·
1 Parent(s): fde8a52

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -26
app.py CHANGED
@@ -22,23 +22,6 @@ from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
22
  from transformers import T5ForConditionalGeneration, T5Tokenizer
23
  from sentence_transformers import SentenceTransformer
24
 
25
- model = SentenceTransformer("all-MiniLM-L6-v2") # 例
26
- print(model.get_sentence_embedding_dimension()) # 768 のはず
27
-
28
- # モデルをロード
29
- model = SentenceTransformer("all-MiniLM-L6-v2") # 768次元の埋め込みを生成
30
- # 既存のインデックスファイルを削除する(手動で削除するか、スクリプトで削除する)
31
- if os.path.exists("faiss_index"):
32
- os.remove("faiss_index")
33
-
34
- # FAISSインデックスを作り直す
35
- embedding_dim = 768 # ここをモデルに合わせる
36
- index = faiss.IndexFlatL2(embedding_dim) # L2距離で検索
37
- # 新しいインデックスを保存
38
- faiss.write_index(index, "faiss_index")
39
-
40
- #model = SentenceTransformer("sentence-transformers/all-mpnet-base-v2") # 1024次元のモデル
41
-
42
  # 条件付きインポート(ローカル環境とHugging Face Spacesの両方に対応)
43
  try:
44
  import fitz # PyMuPDF
@@ -69,6 +52,10 @@ class ManualChatbot:
69
  self.file_hashes = {} # ファイルのハッシュ値を保持する辞書
70
  self.last_update_check = None # 最後に更新をチェックした時間
71
  self.processing_status = "未初期化"
 
 
 
 
72
 
73
  # ディレクトリが存在しなければ作成
74
  os.makedirs(docs_dir, exist_ok=True)
@@ -198,19 +185,35 @@ class ManualChatbot:
198
 
199
  # 埋め込みモデルの初期化
200
  embeddings = HuggingFaceEmbeddings(
201
- model_name="intfloat/multilingual-e5-base", # 軽量化のためbaseモデルを使用
202
- model_kwargs={'device': 'cpu'} # Spacesでは常にCPUを使用
203
  )
204
 
205
- # 既存のベクトルストアが存在する場合は追加、なければ新規作成
206
  if self.vectorstore is None:
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
207
  self.vectorstore = Chroma.from_documents(
208
  documents=chunks,
209
  embedding=embeddings,
210
  persist_directory="./chroma_db"
211
  )
212
- self.vectorstore.persist()
213
- else:
214
  # 既存のベクトルストアに新しいドキュメントを追加
215
  self.vectorstore.add_documents(chunks)
216
 
@@ -423,22 +426,28 @@ class ManualChatbot:
423
  """保存済みのベクトルストアを読み込む"""
424
  if os.path.exists("./chroma_db"):
425
  try:
 
426
  embeddings = HuggingFaceEmbeddings(
427
- model_name="intfloat/multilingual-e5-base",
428
  model_kwargs={'device': 'cpu'}
429
  )
430
-
431
  self.vectorstore = Chroma(
432
  persist_directory="./chroma_db",
433
  embedding_function=embeddings
434
  )
435
-
436
  # QAチェーンを初期化
437
  self._initialize_qa_chain()
438
-
439
  self.processing_status = "準備完了"
440
  return "保存済みの知識ベースを読み込みました"
441
  except Exception as e:
 
 
 
 
 
442
  self.processing_status = "エラー"
443
  return f"知識ベースの読み込みに失敗しました: {str(e)}"
444
  else:
 
22
  from transformers import T5ForConditionalGeneration, T5Tokenizer
23
  from sentence_transformers import SentenceTransformer
24
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  # 条件付きインポート(ローカル環境とHugging Face Spacesの両方に対応)
26
  try:
27
  import fitz # PyMuPDF
 
52
  self.file_hashes = {} # ファイルのハッシュ値を保持する辞書
53
  self.last_update_check = None # 最後に更新をチェックした時間
54
  self.processing_status = "未初期化"
55
+
56
+ # 使用するモデルの次元数を一貫させる
57
+ self.embedding_model_name = "intfloat/multilingual-e5-base"
58
+ self.embedding_dimension = 1024 # このモデルの次元数
59
 
60
  # ディレクトリが存在しなければ作成
61
  os.makedirs(docs_dir, exist_ok=True)
 
185
 
186
  # 埋め込みモデルの初期化
187
  embeddings = HuggingFaceEmbeddings(
188
+ model_name=self.embedding_model_name,
189
+ model_kwargs={'device': 'cpu'}
190
  )
191
 
192
+ # ベクトルストアの初期化/更新
193
  if self.vectorstore is None:
194
+ # 初めての場合は新規作成
195
+ try:
196
+ self.vectorstore = Chroma.from_documents(
197
+ documents=chunks,
198
+ embedding=embeddings,
199
+ persist_directory="./chroma_db"
200
+ )
201
+
202
+ self.vectorstore.persist()
203
+ except Exception as e:
204
+ print(f"ベクトルストア作成中にエラー発生: {str(e)}")
205
+ # 既存のchroma_dbディレクトリを削除して再作成する
206
+ import shutil
207
+ if os.path.exists("./chroma_db"):
208
+ shutil.rmtree("./chroma_db")
209
+ os.makedirs("./chroma_db", exist_ok=True)
210
+ # 再度作成を試みる
211
  self.vectorstore = Chroma.from_documents(
212
  documents=chunks,
213
  embedding=embeddings,
214
  persist_directory="./chroma_db"
215
  )
216
+ self.vectorstore.persist() else:
 
217
  # 既存のベクトルストアに新しいドキュメントを追加
218
  self.vectorstore.add_documents(chunks)
219
 
 
426
  """保存済みのベクトルストアを読み込む"""
427
  if os.path.exists("./chroma_db"):
428
  try:
429
+ # 埋め込みモデルの初期化 - 一貫したモデルを使用
430
  embeddings = HuggingFaceEmbeddings(
431
+ model_name=self.embedding_model_name,
432
  model_kwargs={'device': 'cpu'}
433
  )
434
+
435
  self.vectorstore = Chroma(
436
  persist_directory="./chroma_db",
437
  embedding_function=embeddings
438
  )
439
+
440
  # QAチェーンを初期化
441
  self._initialize_qa_chain()
442
+
443
  self.processing_status = "準備完了"
444
  return "保存済みの知識ベースを読み込みました"
445
  except Exception as e:
446
+ import traceback
447
+ error_details = traceback.format_exc()
448
+ print(f"知識ベース読み込みエラー: {str(e)}\n{error_details}")
449
+
450
+ # エラーの場合、chroma_dbディレクトリを削除して新規作成する選択肢も
451
  self.processing_status = "エラー"
452
  return f"知識ベースの読み込みに失敗しました: {str(e)}"
453
  else: