From e569cf5baf86803531daf9dd745b78d7cb8025de Mon Sep 17 00:00:00 2001 From: Markov Andrey Date: Tue, 30 Jun 2026 08:30:11 +0000 Subject: [PATCH] Add new file --- core/create_qdrant_collection.py | 88 ++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 core/create_qdrant_collection.py diff --git a/core/create_qdrant_collection.py b/core/create_qdrant_collection.py new file mode 100644 index 0000000..3cb472a --- /dev/null +++ b/core/create_qdrant_collection.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Скрипт для создания коллекции в Qdrant на основе конфигурации профиля бота. +Использует BotConfig для чтения параметров подключения к Qdrant. +""" + +import sys +import argparse +from pathlib import Path + +# Добавляем путь к core (чтобы импортировать BotConfig) +sys.path.insert(0, str(Path(__file__).parent.parent)) + +from core.utils.config_loader import BotConfig +from qdrant_client import QdrantClient +from qdrant_client.http import models + + +def main(): + parser = argparse.ArgumentParser( + description="Создать коллекцию в Qdrant для профиля бота" + ) + parser.add_argument( + "collection_name", + nargs="?", + help="Имя коллекции (переопределяет значение из конфига)" + ) + parser.add_argument( + "--profile-dir", + required=True, + help="Путь к директории профиля (содержит bot.conf)" + ) + parser.add_argument( + "--force", + action="store_true", + help="Удалить существующую коллекцию, если она есть, и создать заново" + ) + args = parser.parse_args() + + # Загружаем конфигурацию профиля + try: + config = BotConfig(args.profile_dir) + except Exception as e: + print(f"Ошибка загрузки конфигурации: {e}") + sys.exit(1) + + # Определяем имя коллекции + collection = args.collection_name or config.qdrant_collection + if not collection: + print("Ошибка: не указано имя коллекции и нет qdrant_collection в конфиге") + sys.exit(1) + + # Параметры подключения к Qdrant + host = config.qdrant_host + port = config.qdrant_port + vector_size = config.qdrant_vector_size + distance = config.qdrant_distance + + print(f"Подключение к Qdrant: {host}:{port}") + client = QdrantClient(host=host, port=port) + + # Проверяем существование коллекции + if client.collection_exists(collection): + if args.force: + print(f"Коллекция '{collection}' существует. Удаляем...") + client.delete_collection(collection) + else: + print(f"Коллекция '{collection}' уже существует. Используйте --force для пересоздания.") + sys.exit(0) + + # Создаём коллекцию + try: + client.create_collection( + collection_name=collection, + vectors_config=models.VectorParams( + size=vector_size, + distance=models.Distance[distance.upper()] + ) + ) + print(f"Коллекция '{collection}' успешно создана (size={vector_size}, distance={distance})") + except Exception as e: + print(f"Ошибка создания коллекции: {e}") + sys.exit(1) + + +if __name__ == "__main__": + main() \ No newline at end of file