anpigon commited on
Commit
84af0cb
1 Parent(s): f46dfb5

Update document loader and add platform-specific model configuration

Browse files
Files changed (1) hide show
  1. app.py +12 -17
app.py CHANGED
@@ -1,7 +1,7 @@
1
  import os
2
  import gradio as gr
3
 
4
- from langchain_community.document_loaders import TextLoader
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
- # os.walk를 사용하여 root_dir부터 시작하는 모든 디렉토리를 순회합니다.
38
- for dirpath, dirnames, filenames in os.walk(directory):
39
- # 각 디렉토리에서 파일 목록을 확인합니다.
40
- for file in filenames:
41
- # 파일 확장자가 .md인지 확인하고, 경로 내 '*venv/' 문자열이 포함되지 않는지도 체크합니다.
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,