Rulga commited on
Commit
c05e788
·
1 Parent(s): 44051d3

Enhance vector store management by adding loading and uploading functionality, and update .gitattributes for new file types

Browse files
Files changed (3) hide show
  1. .gitattributes +7 -0
  2. app.py +16 -2
  3. src/knowledge_base/vector_store.py +18 -8
.gitattributes CHANGED
@@ -63,3 +63,10 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
63
  *.mp4 filter=lfs diff=lfs merge=lfs -text
64
  *.webm filter=lfs diff=lfs merge=lfs -text
65
  >>>>>>> 0d2d42071b65c9b49ea7e471b711fe3cdf9fb532
 
 
 
 
 
 
 
 
63
  *.mp4 filter=lfs diff=lfs merge=lfs -text
64
  *.webm filter=lfs diff=lfs merge=lfs -text
65
  >>>>>>> 0d2d42071b65c9b49ea7e471b711fe3cdf9fb532
66
+
67
+ # Vector store files
68
+ *.faiss filter=lfs diff=lfs merge=lfs -text
69
+ *.pkl filter=lfs diff=lfs merge=lfs -text
70
+
71
+ # Chat history
72
+ chat_history/*.json filter=lfs diff=lfs merge=lfs -text
app.py CHANGED
@@ -88,6 +88,20 @@ def build_kb():
88
  except Exception as e:
89
  return f"Ошибка при создании базы знаний: {str(e)}"
90
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
  # Создаем интерфейс
92
  with gr.Blocks() as demo:
93
  gr.Markdown("# 🤖 Status Law Assistant")
@@ -182,8 +196,8 @@ with gr.Blocks() as demo:
182
 
183
  # Запускаем приложение
184
  if __name__ == "__main__":
185
- # Проверяем наличие базы знаний
186
- if not os.path.exists(os.path.join("data", "vector_store", "index.faiss")):
187
  print("База знаний не найдена. Создайте её через интерфейс.")
188
 
189
  demo.launch()
 
88
  except Exception as e:
89
  return f"Ошибка при создании базы знаний: {str(e)}"
90
 
91
+ def load_vector_store():
92
+ """Загрузка базы знаний из датасета"""
93
+ try:
94
+ from src.knowledge_base.dataset import DatasetManager
95
+ dataset = DatasetManager()
96
+ success, store = dataset.download_vector_store()
97
+ if success:
98
+ return store
99
+ print(f"Ошибка загрузки базы знаний: {store}")
100
+ return None
101
+ except Exception as e:
102
+ print(f"Ошибка при загрузке базы знаний: {str(e)}")
103
+ return None
104
+
105
  # Создаем интерфейс
106
  with gr.Blocks() as demo:
107
  gr.Markdown("# 🤖 Status Law Assistant")
 
196
 
197
  # Запускаем приложение
198
  if __name__ == "__main__":
199
+ # Проверяем доступность базы знаний в датасете
200
+ if not load_vector_store():
201
  print("База знаний не найдена. Создайте её через интерфейс.")
202
 
203
  demo.launch()
src/knowledge_base/vector_store.py CHANGED
@@ -1,4 +1,5 @@
1
  import os
 
2
  from langchain_text_splitters import RecursiveCharacterTextSplitter
3
  from langchain_community.vectorstores import FAISS
4
  from langchain_huggingface import HuggingFaceEmbeddings
@@ -14,7 +15,7 @@ def get_embeddings():
14
  )
15
 
16
  def create_vector_store():
17
- """Создание или обновление векторного хранилища"""
18
  # Загрузка документов
19
  documents = load_documents()
20
 
@@ -31,12 +32,21 @@ def create_vector_store():
31
  # Инициализация эмбеддингов
32
  embeddings = get_embeddings()
33
 
34
- # Создание векторного хранилища
35
- vector_store = FAISS.from_documents(chunks, embeddings)
36
-
37
- # Сохранение
38
- os.makedirs(VECTOR_STORE_PATH, exist_ok=True)
39
- vector_store.save_local(folder_path=VECTOR_STORE_PATH)
 
 
 
 
 
 
 
 
 
40
 
41
  return True, f"База знаний создана успешно! Загружено {len(documents)} документов, создано {len(chunks)} чанков."
42
 
@@ -56,4 +66,4 @@ def load_vector_store():
56
  return vector_store
57
  except Exception as e:
58
  print(f"Ошибка загрузки векторного хранилища: {str(e)}")
59
- return None
 
1
  import os
2
+ import tempfile
3
  from langchain_text_splitters import RecursiveCharacterTextSplitter
4
  from langchain_community.vectorstores import FAISS
5
  from langchain_huggingface import HuggingFaceEmbeddings
 
15
  )
16
 
17
  def create_vector_store():
18
+ """Создание векторного хранилища и загрузка в датасет"""
19
  # Загрузка документов
20
  documents = load_documents()
21
 
 
32
  # Инициализация эмбеддингов
33
  embeddings = get_embeddings()
34
 
35
+ # Создание векторного хранилища во временной директории
36
+ with tempfile.TemporaryDirectory() as temp_dir:
37
+ vector_store = FAISS.from_documents(chunks, embeddings)
38
+ vector_store.save_local(folder_path=temp_dir)
39
+
40
+ # Загрузка в датасет
41
+ from src.knowledge_base.dataset import DatasetManager
42
+ dataset = DatasetManager()
43
+ success, message = dataset.upload_vector_store(
44
+ index_path=os.path.join(temp_dir, "index.faiss"),
45
+ config_path=os.path.join(temp_dir, "index.pkl")
46
+ )
47
+
48
+ if not success:
49
+ return False, f"Ошибка загрузки в датасет: {message}"
50
 
51
  return True, f"База знаний создана успешно! Загружено {len(documents)} документов, создано {len(chunks)} чанков."
52
 
 
66
  return vector_store
67
  except Exception as e:
68
  print(f"Ошибка загрузки векторного хранилища: {str(e)}")
69
+ return None