Add new file
This commit is contained in:
88
core/create_qdrant_collection.py
Normal file
88
core/create_qdrant_collection.py
Normal file
@@ -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()
|
||||||
Reference in New Issue
Block a user