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=1024,
chunk_overlap=300,
)
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: объект с .embed(List[str], **kwargs) или .encode(List[str], **kwargs);chunk_size: int = 900;chunk_overlap: int = 120;keep_headings: bool = True;keep_code_blocks: bool = True;batch_size: int = 64;expected_dim: Optional[int] = None |
MarkdownProcessor |
Создание процессора Markdown |
build_chunks() |
source: Union[str, PathLike];source_name: Optional[str] = None;assume_base64_if_looks_like: bool = True;**kwargs |
List[TextChunk] (вектор заполнен) |
Полный пайплайн: загрузка → чанки → эмбеддинги |
embed_query() |
query_text: str;**kwargs |
List[float] |
Эмбеддинг запроса |
2) QdrantSyncClient / QdrantAsyncClient
Синхронный и асинхронный клиенты для Qdrant с идентичным набором методов. Различаются только синтаксисом вызова: синхронные методы vs async/await.
Конструктор
| Метод | Входные параметры | Выход | Исключения | Описание |
|---|---|---|---|---|
QdrantSyncClient()QdrantAsyncClient() |
url: str;api_key: Optional[str];timeout: int = 60;**kwargs |
объект клиента | ConnectionError |
Инициализация подключения к Qdrant |
Управление коллекциями
| Метод | Входные параметры | Выход | Исключения | Описание |
|---|---|---|---|---|
create_collection() |
collection_name: str;vector_size: int;distance: Distance = Distance.COSINE;on_disk_payload: bool = True;**kwargs |
Dict[str, Any] |
CollectionExistsErrorQdrantError |
Создание новой коллекции |
get_collection_info() |
collection_name: str |
Dict[str, Any] – информация о коллекции |
CollectionNotFoundErrorQdrantError |
Получение информации о коллекции |
list_collections() |
– | List[str] |
QdrantError |
Получение списка всех коллекций |
delete_collection() |
collection_name: str |
bool – успех операции |
– | Удаление коллекции |
Загрузка данных
| Метод | Входные параметры | Выход | Исключения | Описание |
|---|---|---|---|---|
upload_points() |
collection_name: str;points: List[Point];batch_size: int = 100;wait: bool = True |
List[str] |
CollectionNotFoundErrorQdrantError |
Загрузка точек в коллекцию |
upload_markdown() |
collection_name: str;md_input: Union[str, PathLike] – Markdown (текст/base64/путь);processor: MarkdownProcessor;source_name: Optional[str];metadata: Optional[Dict];batch_size: int = 100;wait: bool = True;processor_kwargs: Optional[Dict] = None |
FileUploadResult – результат загрузки |
CollectionNotFoundErrorFileProcessingErrorEmbeddingErrorQdrantError |
Загрузка Markdown с автоматической векторизацией |
Удаление данных
| Метод | Входные параметры | Выход | Исключения | Описание |
|---|---|---|---|---|
delete_points() |
collection_name: str;point_ids: Optional[List[str]];filter_condition: Optional[Dict];wait: bool = True |
int – количество удаленных точек |
CollectionNotFoundErrorQdrantError |
Удаление точек по ID или фильтру |
Поиск (универсальный метод)
| Метод | Входные параметры | Выход | Исключения | Описание |
|---|---|---|---|---|
search() |
collection_name: str;query_vector: Optional[List[float]];query_point_id: Optional[Union[str, int]];filter_condition: Optional[Dict];limit: int = 10;score_threshold: Optional[float] = None;with_payload: bool = True;search_mode: Literal["vector", "id", "filter", "hybrid"] |
List[SearchResult] – результаты поиска |
CollectionNotFoundErrorQdrantErrorValueError |
Универсальный поиск – векторный, по ID, по фильтру или гибридный |
Вспомогательные методы
| Метод | Входные параметры | Выход | Исключения | Описание |
|---|---|---|---|---|
count_points() |
collection_name: str;filter_condition: Optional[Dict];exact: bool = False |
int – количество точек |
CollectionNotFoundErrorQdrantError |
Подсчет точек в коллекции |
healthcheck() |
– | bool – доступен ли Qdrant |
– | Проверка подключения к Qdrant |
close() |
– | None |
– | Закрытие соединения |
3) Режимы поиска в методе search()
| Режим | Обязательные параметры | Дополнительные параметры | Описание |
|---|---|---|---|
'vector' |
query_vector |
filter_condition |
Классический поиск по вектору с опциональной фильтрацией |
'id' |
query_point_id |
filter_condition |
Поиск точек, похожих на точку с указанным ID |
'filter' |
filter_condition |
– | Поиск только по фильтру без вектора |
'hybrid' |
query_vector |
filter_condition |
Гибридный поиск с RRF (вектор + фильтр) |
4) Утилиты
FilterBuilder
| Метод | Входные параметры | Выход | Назначение |
|---|---|---|---|
FilterBuilder.build_filter() |
condition: Dict[str, Any] |
`models.Filter | None` |
Конвертеры
| Функция | Входные параметры | Выход | Назначение |
|---|---|---|---|
chunks_to_points() |
chunks: List[TextChunk];base_metadata: Optional[Dict[str, Any]] = None;id_factory: Optional[callable] = None |
List[Point] |
Преобразование чанков в точки для upsert |
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.2.2.tar.gz.
File metadata
- Download URL: qdrant_vector_storage-0.2.2.tar.gz
- Upload date:
- Size: 25.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
62c64d45ebd8c864872cfd4f96f11c14f01d12e4d0528b516c93ce026ebcc3ba
|
|
| MD5 |
54fea95bf28bc8d61b85af919149c48f
|
|
| BLAKE2b-256 |
c92115354c22f0c9dc0ccc90472d4862565d3320700457d16def81fa95fe7f50
|
Provenance
The following attestation bundles were made for qdrant_vector_storage-0.2.2.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.2.2.tar.gz -
Subject digest:
62c64d45ebd8c864872cfd4f96f11c14f01d12e4d0528b516c93ce026ebcc3ba - Sigstore transparency entry: 1050358612
- Sigstore integration time:
-
Permalink:
opchik/qdrant_vector_storage@a1e674d0118430f02daeea087a3c1253c8850ead -
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@a1e674d0118430f02daeea087a3c1253c8850ead -
Trigger Event:
push
-
Statement type:
File details
Details for the file qdrant_vector_storage-0.2.2-py3-none-any.whl.
File metadata
- Download URL: qdrant_vector_storage-0.2.2-py3-none-any.whl
- Upload date:
- Size: 25.6 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 |
4a7ec5d843312260ea07390b720c1f23231e7a287abac1690a50260ebc33bc76
|
|
| MD5 |
e825029e6cce4a3f6ee4f504c7f4dbd3
|
|
| BLAKE2b-256 |
04a068502b7c54bf80506c15f403082f990978258ed43e127507e17bce4cb52c
|
Provenance
The following attestation bundles were made for qdrant_vector_storage-0.2.2-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.2.2-py3-none-any.whl -
Subject digest:
4a7ec5d843312260ea07390b720c1f23231e7a287abac1690a50260ebc33bc76 - Sigstore transparency entry: 1050358619
- Sigstore integration time:
-
Permalink:
opchik/qdrant_vector_storage@a1e674d0118430f02daeea087a3c1253c8850ead -
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@a1e674d0118430f02daeea087a3c1253c8850ead -
Trigger Event:
push
-
Statement type: