mirror of
https://github.com/qdrant/qdrant-client.git
synced 2026-09-21 13:37:55 -05:00
* new: add QdrantServerless client prototype Serverless exposes the same point-level API as a regular cluster (minus read consistency, shard selection, write ordering and filtered updates), but a simplified tenant-facing collection management API. - qdrant_client/serverless: dedicated module, nothing added to the top-level package - gRPC stubs generated from qdrant-cloud-public-api's serverless/collections.proto (renamed to serverless_collections.proto to avoid a descriptor-pool filename clash with the regular client's collections.proto), kept internal - hand-written pydantic models for the serverless collection config, reusing the existing Distance/TokenizerType enums - point operations delegate to an internal QdrantRemote(prefer_grpc=True) with trimmed signatures; collection operations talk to the serverless CollectionsService on the same channel Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R25zh9xS78xMHgPcoFaUdw * fix: exclude generated serverless grpc code from mypy Same treatment as qdrant_client/grpc: generated stubs have untyped defs, and the ListCollectionsResponse.collections field shadows the collections module in the .pyi. Also import PointStruct from qdrant_client.http.models in the example, matching the rest of the codebase. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R25zh9xS78xMHgPcoFaUdw * fix: remove lookup_from from serverless query_points, not supported Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R25zh9xS78xMHgPcoFaUdw * docs: full docstrings for QdrantServerless public methods Match the Args/Returns docstring style of the regular client; each method notes where the serverless API diverges from it. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R25zh9xS78xMHgPcoFaUdw * new: generate AsyncQdrantServerless from the sync serverless client Same approach as the regular client: the sync client is the source of truth and tools/async_client_generator produces the async version. The serverless generator delegates to AsyncQdrantRemote, awaits the CollectionsService stub RPCs (awaitable on the aio channel the async remote already builds), and drops the sync context manager. The file is covered by the async-client-consistency-check like the other generated clients. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R25zh9xS78xMHgPcoFaUdw * fix: resolve raw-vector queries in serverless query_points query_points delegated straight to QdrantRemote, which expects a resolved Query model, so a plain list like [0.1, 0.2] failed with "invalid Query model". Apply the same QdrantFastembedMixin._resolve_query type normalization the regular client applies - type resolution only, no client-side embedding inference: Document/Image inputs go to the server as-is, serverless inference is server-side only. Verified live against a serverless dev space: create/list/get/upsert/ query/delete all pass, sync and async. Along the way: create_collection docstring now documents that an existing collection raises gRPC ALREADY_EXISTS (the service errors instead of returning the "already exists" result string the proto comment mentions), and the example deletes a leftover collection first so it can be rerun. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R25zh9xS78xMHgPcoFaUdw * new: expose serverless models under qdrant_client.models.serverless Thin alias module re-exporting qdrant_client.serverless.models, matching the qdrant_client.models convention of the regular client; the old import path keeps working. Examples and tests use the new path. Also replace an API key that slipped into the committed example with the placeholder, and exclude examples/ from mypy so examples can use the dynamic qdrant_client.models namespace. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R25zh9xS78xMHgPcoFaUdw * refactor: import serverless models from qdrant_client.serverless.models Drop the qdrant_client.models.serverless alias module and the model re-exports in qdrant_client.serverless: both were manually maintained re-export lists. qdrant_client.serverless.models is the single public import path; the serverless package itself exports only the clients. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R25zh9xS78xMHgPcoFaUdw * new: batch/group queries and remaining update ops in serverless client query_batch_points and query_points_groups (both implemented by the service, verified live) with the usual serverless trims: no consistency, no shard selection, no cross-collection lookups. Add the update operations the service implements that were still missing: update_vectors, delete_vectors, overwrite_payload, clear_payload, batch_update_points (ids-only selectors; the service rejects filters). Update methods default to wait=False: serverless reads are eventually consistent with writes, so waiting does not provide read-your-write. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R25zh9xS78xMHgPcoFaUdw * refactor: future-proof selector arguments in serverless update methods All id-selecting update methods take a uniform `points` parameter, typed narrowly as Sequence[PointId] to match what the service accepts today. When serverless adds filtered updates, the type widens to PointsSelector without breaking callers: same name, same position, strictly wider input. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01R25zh9xS78xMHgPcoFaUdw * docs: mark QdrantServerless as in development Warn that the serverless client is experimental and should not be used yet. * refactor: explicitly deconstruct serverless conversion fields Bind every model field via structural pattern matching so new fields force an update instead of being silently ignored. * feat(serverless): sync collections API pagination and text options Align with the latest public-api collections.proto: paginated ListCollections (limit/offset_token/next_offset_token) plus keyword prefix and text analysis fields (stopwords, stemmer, ascii_folding). * fix: remove enter/exit, add conversion tests --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: qdrant-cloud-bot <111755117+qdrant-cloud-bot@users.noreply.github.com> Co-authored-by: George Panchuk <george.panchuk@qdrant.tech>