Spaces:
Running
Running
Update app.py
Browse files
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=
|
202 |
-
model_kwargs={'device': '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=
|
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:
|