Sync/async Qdrant clients with Markdown chunking and pluggable embedding pipeline.
Project description
qdrant_vector_storage
Библиотека предоставляет синхронный и асинхронный клиент для Qdrant, а также готовый пайплайн: Markdown → чанки → эмбеддинги → загрузка в Qdrant.
Ключевая идея: библиотека не навязывает конкретную модель эмбеддингов.
Вы передаёте объект embedder (например, fastembed.TextEmbedding), а MarkdownProcessor использует его для расчёта векторов.
Установка
Базовая установка (клиенты + модели данных):
pip install qdrant_vector_storage
Быстрый старт
1) Создайте embedder (пример: fastembed)
from fastembed import TextEmbedding
embedder = TextEmbedding(model_name="jinaai/jina-embeddings-v3")
2) Создайте MarkdownProcessor
from qdrant_vector_storage import MarkdownProcessor
processor = MarkdownProcessor(
embedder=embedder,
expected_dim=1024,
chunk_size=2000,
chunk_overlap=200,
)
3) Асинхронная загрузка Markdown
import asyncio
from qdrant_vector_storage import QdrantAsyncClient, Distance
async def main():
async with QdrantAsyncClient(url="http://localhost:6333") as client:
await client.create_collection(
collection_name="docs",
vector_size=1024,
distance=Distance.COSINE,
)
result = await client.upload_markdown(
collection_name="docs",
md_input="README.md", # путь, строка Markdown или base64(Markdown)
processor=processor,
processor_kwargs={"add_passage_prefix": False},
)
print(result)
asyncio.run(main())
4) Синхронная загрузка Markdown
from qdrant_vector_storage import QdrantSyncClient, Distance
with QdrantSyncClient(url="http://localhost:6333") as client:
client.create_collection(
collection_name="docs",
vector_size=1024,
distance=Distance.COSINE,
)
result = client.upload_markdown(
collection_name="docs",
md_input="README.md",
processor=processor,
processor_kwargs={"add_passage_prefix": False},
)
print(result)
Поддерживаемые форматы входа для MarkdownProcessor
MarkdownProcessor.build_chunks(...) принимает:
- строку Markdown
- строку
base64(Markdown)(авто-распознавание) - путь к файлу
.md
Требования к embedder
MarkdownProcessor ожидает объект, у которого есть методы:
embed(texts: List[str]) -> Iterable[np.ndarray]encode(texts: List[str]) -> Iterable[np.ndarray]
Документация API
Ниже перечислены все публичные классы и методы.
1) MarkdownProcessor
MarkdownProcessor выполняет:
- загрузку Markdown (строка / base64 / путь)
- нормализацию
- разбиение на чанки
- расчёт эмбеддингов через переданный
embedder
Методы MarkdownProcessor
| Метод | Входные параметры | Выход | Назначение |
|---|---|---|---|
MarkdownProcessor(embedder, chunk_size=900, chunk_overlap=120, keep_headings=True, keep_code_blocks=True, passage_prefix="passage: ", batch_size=64, expected_dim=None) |
embedder: объект с .embed(List[str]); параметры чанкинга/батчинга |
MarkdownProcessor |
Создание процессора Markdown |
build_chunks(source, source_name=None, assume_base64_if_looks_like=True, add_passage_prefix=True) |
source: str или PathLike |
List[TextChunk] (вектор заполнен) |
Полный пайплайн: загрузка → чанки → эмбеддинги |
embed_query(query_text, add_query_prefix=True) |
query_text: str |
List[float] |
Эмбеддинг запроса (для E5-подобных моделей можно добавлять префикс query:) |
2) QdrantSyncClient / 3) QdrantAsyncClient
Синхронный и асинхронный клиенты для Qdrant с идентичным набором методов. Различаются только синтаксисом вызова: синхронные методы vs async/await.
| Метод | Входные параметры | Выход | Возможные исключения | Описание |
|---|---|---|---|---|
QdrantSyncClient(url, api_key=None, timeout=60, **kwargs)QdrantAsyncClient(url, api_key=None, timeout=60, **kwargs) |
url: str – адрес Qdrantapi_key: Optional[str] – ключ API (опционально)timeout: int – таймаут запросов (по умолч. 60)**kwargs – доп. параметры клиента |
объект клиента | ConnectionError |
Инициализация подключения к Qdrant |
create_collection(collection_name, vector_size, distance=Distance.COSINE, on_disk_payload=True, **kwargs) |
collection_name: str – имя коллекцииvector_size: int – размерность векторовdistance: Distance – метрика расстояния (по умолч. COSINE)on_disk_payload: bool – хранить payload на диске (по умолч. True)**kwargs – доп. параметры создания |
Dict[str, Any] – информация о созданной коллекции |
CollectionExistsErrorQdrantError |
Создание новой коллекции |
get_collection_info(collection_name) |
collection_name: str – имя коллекции |
Dict[str, Any] – информация о коллекции |
CollectionNotFoundErrorQdrantError |
Получение информации о коллекции |
list_collections() |
– | List[str] – список имен коллекций |
QdrantError |
Получение списка всех коллекций |
delete_collection(collection_name) |
collection_name: str – имя коллекции |
bool – успех операции |
– | Удаление коллекции |
upload_points(collection_name, points, batch_size=100, wait=True) |
collection_name: str – имя коллекцииpoints: List[Point] – точки для загрузкиbatch_size: int – размер батча (по умолч. 100)wait: bool – ждать завершения (по умолч. True) |
List[str] – ID загруженных точек |
CollectionNotFoundErrorQdrantError |
Загрузка точек в коллекцию |
upload_markdown(collection_name, md_input, processor, source_name=None, metadata=None, batch_size=100, wait=True, processor_kwargs=None) |
collection_name: str – имя коллекции`md_input: str |
PathLike – Markdown (текст/base64/путь)<br>processor: MarkdownProcessor – процессор для чанков<br>source_name: Optional[str] – имя источника<br>metadata: Optional[Dict] – метаданные<br>batch_size: int – размер батча (по умолч. 100)<br>wait: bool – ждать завершения (по умолч. True)<br>processor_kwargs: Optional[Dict]` – параметры процессора |
FileUploadResult – результат загрузки |
CollectionNotFoundErrorFileProcessingErrorEmbeddingErrorQdrantError |
delete_points(collection_name, point_ids=None, filter_condition=None, wait=True) |
collection_name: str – имя коллекцииpoint_ids: Optional[List[str]] – ID точекfilter_condition: Optional[Dict] – фильтр для удаленияwait: bool – ждать завершения (по умолч. True) |
int – количество удаленных точек |
CollectionNotFoundErrorQdrantError |
Удаление точек по ID или фильтру |
delete_by_metadata(collection_name, metadata_key, metadata_value, wait=True) |
collection_name: str – имя коллекцииmetadata_key: str – ключ в metadatametadata_value: Any – значениеwait: bool – ждать завершения (по умолч. True) |
int – количество удаленных точек |
CollectionNotFoundErrorQdrantError |
Удаление точек по значению в metadata (упрощенный вариант delete_points) |
search(collection_name, query_vector, limit=10, score_threshold=None, filter_condition=None, with_payload=True, with_vectors=False) |
collection_name: str – имя коллекцииquery_vector: List[float] – вектор запросаlimit: int – лимит результатов (по умолч. 10)score_threshold: Optional[float] – порог схожестиfilter_condition: Optional[Dict] – фильтрwith_payload: bool – загружать payload (по умолч. True)with_vectors: bool – загружать векторы (по умолч. False) |
List[SearchResult] – результаты поиска |
CollectionNotFoundErrorQdrantError |
Поиск похожих векторов |
count_points(collection_name, filter_condition=None, exact=False) |
collection_name: str – имя коллекцииfilter_condition: Optional[Dict] – фильтрexact: bool – точный подсчет (по умолч. False) |
int – количество точек |
CollectionNotFoundErrorQdrantError |
Подсчет точек в коллекции |
healthcheck() |
– | bool – доступен ли Qdrant |
– | Проверка подключения к Qdrant |
close() |
– | None |
– | Закрытие соединения |
3) Утилиты
FilterBuilder
| Метод | Входные параметры | Выход | Назначение |
|---|---|---|---|
FilterBuilder.build_filter(condition) |
condition: Dict[str, Any] |
`models.Filter | None` |
Конвертеры
| Функция | Входные параметры | Выход | Назначение |
|---|---|---|---|
chunks_to_points(chunks, base_metadata=None, id_factory=None) |
List[TextChunk] |
List[Point] |
Преобразование чанков в точки для upsert |
Лицензия
MIT (см. файл LICENSE).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file qdrant_vector_storage-0.1.5.tar.gz.
File metadata
- Download URL: qdrant_vector_storage-0.1.5.tar.gz
- Upload date:
- Size: 25.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bbc6ac80fdbe6c65649eeb0e557bfc91ffda80cb896175548929d2da7cf74178
|
|
| MD5 |
3b83162813e5d76c35606d347a0d2ac7
|
|
| BLAKE2b-256 |
1b2527ac9287c71275a8d8c595316ff43277fc6fc26cdb41e083b22fc4c7ad34
|
Provenance
The following attestation bundles were made for qdrant_vector_storage-0.1.5.tar.gz:
Publisher:
auto-publish.yml on opchik/qdrant_vector_storage
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qdrant_vector_storage-0.1.5.tar.gz -
Subject digest:
bbc6ac80fdbe6c65649eeb0e557bfc91ffda80cb896175548929d2da7cf74178 - Sigstore transparency entry: 991550783
- Sigstore integration time:
-
Permalink:
opchik/qdrant_vector_storage@6f6f5673cb80e7d3f07b62648052cefc2b5f1d04 -
Branch / Tag:
refs/heads/master - Owner: https://github.com/opchik
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
auto-publish.yml@6f6f5673cb80e7d3f07b62648052cefc2b5f1d04 -
Trigger Event:
push
-
Statement type:
File details
Details for the file qdrant_vector_storage-0.1.5-py3-none-any.whl.
File metadata
- Download URL: qdrant_vector_storage-0.1.5-py3-none-any.whl
- Upload date:
- Size: 25.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
56f4771cff72f3ebc0fda451c31a94555153be198a1fa9103e12f42cc5c32fd6
|
|
| MD5 |
ee5f19739ddf4929b0f366990b44f710
|
|
| BLAKE2b-256 |
22203d2d5e4a4b6492df98fdac880ddf0ea2f2cf4d66e8c8634852839e21ceb4
|
Provenance
The following attestation bundles were made for qdrant_vector_storage-0.1.5-py3-none-any.whl:
Publisher:
auto-publish.yml on opchik/qdrant_vector_storage
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
qdrant_vector_storage-0.1.5-py3-none-any.whl -
Subject digest:
56f4771cff72f3ebc0fda451c31a94555153be198a1fa9103e12f42cc5c32fd6 - Sigstore transparency entry: 991550789
- Sigstore integration time:
-
Permalink:
opchik/qdrant_vector_storage@6f6f5673cb80e7d3f07b62648052cefc2b5f1d04 -
Branch / Tag:
refs/heads/master - Owner: https://github.com/opchik
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
auto-publish.yml@6f6f5673cb80e7d3f07b62648052cefc2b5f1d04 -
Trigger Event:
push
-
Statement type: