(
self,
kb_name: str,
vector_name: str = None,
create: bool = True,
embed_model: str = get_default_embedding(),
)
| 88 | |
| 89 | class KBFaissPool(_FaissPool): |
| 90 | def load_vector_store( |
| 91 | self, |
| 92 | kb_name: str, |
| 93 | vector_name: str = None, |
| 94 | create: bool = True, |
| 95 | embed_model: str = get_default_embedding(), |
| 96 | ) -> ThreadSafeFaiss: |
| 97 | self.atomic.acquire() |
| 98 | locked = True |
| 99 | vector_name = vector_name or embed_model.replace(":", "_") |
| 100 | cache = self.get((kb_name, vector_name)) # 用元组比拼接字符串好一些 |
| 101 | try: |
| 102 | if cache is None: |
| 103 | item = ThreadSafeFaiss((kb_name, vector_name), pool=self) |
| 104 | self.set((kb_name, vector_name), item) |
| 105 | with item.acquire(msg="初始化"): |
| 106 | self.atomic.release() |
| 107 | locked = False |
| 108 | vs_path = get_vs_path(kb_name, vector_name) |
| 109 | logger.info(f"这是vs_path{vs_path}") |
| 110 | |
| 111 | if os.path.isfile(os.path.join(vs_path, "index.faiss")): |
| 112 | embeddings = get_Embeddings(embed_model=embed_model) |
| 113 | vector_store = FAISS.load_local( |
| 114 | vs_path, |
| 115 | embeddings, |
| 116 | normalize_L2=True, |
| 117 | allow_dangerous_deserialization=True, |
| 118 | ) |
| 119 | elif create: |
| 120 | # create an empty vector store |
| 121 | if not os.path.exists(vs_path): |
| 122 | os.makedirs(vs_path) |
| 123 | vector_store = self.new_vector_store( |
| 124 | kb_name=kb_name, embed_model=embed_model |
| 125 | ) |
| 126 | vector_store.save_local(vs_path) |
| 127 | else: |
| 128 | raise RuntimeError(f"knowledge base {kb_name} not exist.") |
| 129 | item.obj = vector_store |
| 130 | item.finish_loading() |
| 131 | else: |
| 132 | self.atomic.release() |
| 133 | locked = False |
| 134 | except Exception as e: |
| 135 | if locked: # we don't know exception raised before or after atomic.release |
| 136 | self.atomic.release() |
| 137 | logger.exception(e) |
| 138 | raise RuntimeError(f"向量库 {kb_name} 加载失败。") |
| 139 | return self.get((kb_name, vector_name)) |
| 140 | |
| 141 | |
| 142 | class MemoFaissPool(_FaissPool): |
nothing calls this directly
no test coverage detected