Spaces:
Sleeping
Sleeping
Update document loader and add platform-specific model configuration
Browse files
app.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
import os
|
2 |
import gradio as gr
|
3 |
|
4 |
-
from langchain_community.document_loaders import
|
5 |
from langchain_text_splitters import RecursiveCharacterTextSplitter, Language
|
6 |
|
7 |
from langchain.embeddings import CacheBackedEmbeddings
|
@@ -26,6 +26,7 @@ from langchain_core.runnables import RunnablePassthrough
|
|
26 |
from langchain_groq import ChatGroq
|
27 |
from langchain_community.llms import HuggingFaceHub
|
28 |
from langchain_google_genai import GoogleGenerativeAI
|
|
|
29 |
|
30 |
|
31 |
directories = ["./docs/obsidian-help", "./docs/obsidian-developer"]
|
@@ -34,20 +35,11 @@ directories = ["./docs/obsidian-help", "./docs/obsidian-developer"]
|
|
34 |
# 1. 문서 로더를 사용하여 모든 .md 파일을 로드합니다.
|
35 |
md_documents = []
|
36 |
for directory in directories:
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
if (file.endswith(".md")) and "*venv/" not in dirpath:
|
43 |
-
try:
|
44 |
-
# TextLoader를 사용하여 파일의 전체 경로를 지정하고 문서를 로드합니다.
|
45 |
-
loader = TextLoader(os.path.join(dirpath, file), encoding="utf-8")
|
46 |
-
# 로드한 문서를 분할하여 documents 리스트에 추가합니다.
|
47 |
-
md_documents.extend(loader.load())
|
48 |
-
except Exception:
|
49 |
-
# 파일 로드 중 오류가 발생하면 이를 무시하고 계속 진행합니다.
|
50 |
-
pass
|
51 |
|
52 |
|
53 |
# 2. 청크 분할기를 생성합니다.
|
@@ -62,8 +54,11 @@ md_docs = md_splitter.split_documents(md_documents)
|
|
62 |
|
63 |
# 3. 임베딩 모델을 사용하여 문서의 임베딩을 계산합니다.
|
64 |
# 허깅페이스 임베딩 모델 인스턴스를 생성합니다. 모델명으로 "BAAI/bge-m3 "을 사용합니다.
|
|
|
|
|
|
|
|
|
65 |
model_name = "BAAI/bge-m3"
|
66 |
-
model_kwargs = {"device": "mps"}
|
67 |
encode_kwargs = {"normalize_embeddings": False}
|
68 |
embeddings = HuggingFaceEmbeddings(
|
69 |
model_name=model_name,
|
@@ -112,7 +107,7 @@ ensemble_retriever = EnsembleRetriever(
|
|
112 |
)
|
113 |
|
114 |
# 6. CohereRerank 모델을 사용하여 재정렬을 수행합니다.
|
115 |
-
compressor = CohereRerank(model="rerank-multilingual-v3.0")
|
116 |
compression_retriever = ContextualCompressionRetriever(
|
117 |
base_compressor=compressor,
|
118 |
base_retriever=ensemble_retriever,
|
|
|
1 |
import os
|
2 |
import gradio as gr
|
3 |
|
4 |
+
from langchain_community.document_loaders import ObsidianLoader
|
5 |
from langchain_text_splitters import RecursiveCharacterTextSplitter, Language
|
6 |
|
7 |
from langchain.embeddings import CacheBackedEmbeddings
|
|
|
26 |
from langchain_groq import ChatGroq
|
27 |
from langchain_community.llms import HuggingFaceHub
|
28 |
from langchain_google_genai import GoogleGenerativeAI
|
29 |
+
import platform
|
30 |
|
31 |
|
32 |
directories = ["./docs/obsidian-help", "./docs/obsidian-developer"]
|
|
|
35 |
# 1. 문서 로더를 사용하여 모든 .md 파일을 로드합니다.
|
36 |
md_documents = []
|
37 |
for directory in directories:
|
38 |
+
try:
|
39 |
+
loader = ObsidianLoader(directory, encoding="utf-8")
|
40 |
+
md_documents.extend(loader.load())
|
41 |
+
except Exception:
|
42 |
+
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
43 |
|
44 |
|
45 |
# 2. 청크 분할기를 생성합니다.
|
|
|
54 |
|
55 |
# 3. 임베딩 모델을 사용하여 문서의 임베딩을 계산합니다.
|
56 |
# 허깅페이스 임베딩 모델 인스턴스를 생성합니다. 모델명으로 "BAAI/bge-m3 "을 사용합니다.
|
57 |
+
if platform.system() == "Darwin":
|
58 |
+
model_kwargs = {"device": "mps"}
|
59 |
+
else:
|
60 |
+
model_kwargs = {"device": "cpu"}
|
61 |
model_name = "BAAI/bge-m3"
|
|
|
62 |
encode_kwargs = {"normalize_embeddings": False}
|
63 |
embeddings = HuggingFaceEmbeddings(
|
64 |
model_name=model_name,
|
|
|
107 |
)
|
108 |
|
109 |
# 6. CohereRerank 모델을 사용하여 재정렬을 수행합니다.
|
110 |
+
compressor = CohereRerank(model="rerank-multilingual-v3.0", top_n=5)
|
111 |
compression_retriever = ContextualCompressionRetriever(
|
112 |
base_compressor=compressor,
|
113 |
base_retriever=ensemble_retriever,
|