Теперь проекты для индексации хранятся отдельно
This commit is contained in:
@@ -18,21 +18,48 @@ def should_skip(path: str) -> bool:
|
||||
|
||||
|
||||
class LocalKnowledgeBase:
|
||||
def __init__(self, collection_name="documents", persist_dir="./qdrant_data"):
|
||||
def __init__(self, project_name: str = "default", persist_dir="./qdrant_data"):
|
||||
# Инициализируем клиент Qdrant
|
||||
self.client = QdrantClient(
|
||||
path=persist_dir, prefer_grpc=True # Локальное хранение
|
||||
)
|
||||
|
||||
self.collection_name = collection_name
|
||||
self.persist_dir = persist_dir
|
||||
self.set_project(project_name)
|
||||
|
||||
# Инициализация эмбеддингов
|
||||
self.embeddings = OllamaEmbeddings(
|
||||
model="nomic-embed-text", # Хорошие локальные эмбеддинги
|
||||
)
|
||||
|
||||
# Создаем коллекцию если её нет
|
||||
def set_project(self, project_name: str):
|
||||
"""Переключиться на проект (создать/выбрать коллекцию)"""
|
||||
# Очищаем имя от недопустимых символов
|
||||
safe_name = "".join(c for c in project_name if c.isalnum() or c in "-_")
|
||||
self.collection_name = safe_name
|
||||
self._create_collection()
|
||||
print(f"Переключено на проект: {self.collection_name}")
|
||||
|
||||
def get_current_project(self) -> str:
|
||||
"""Получить имя текущего проекта"""
|
||||
return self.collection_name
|
||||
|
||||
def list_projects(self) -> list:
|
||||
"""Список всех проектов (коллекций)"""
|
||||
try:
|
||||
collections = self.client.get_collections()
|
||||
return [c.name for c in collections.collections]
|
||||
except:
|
||||
return []
|
||||
|
||||
def delete_project(self, project_name: str = None):
|
||||
"""Удалить проект (коллекцию)"""
|
||||
name = project_name or self.collection_name
|
||||
try:
|
||||
self.client.delete_collection(collection_name=name)
|
||||
print(f"Удалена коллекция: {name}")
|
||||
except Exception as e:
|
||||
print(f"Не удалось удалить коллекцию {name}: {e}")
|
||||
|
||||
def _create_collection(self):
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user