Spaces:
Sleeping
Sleeping
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:
|