{"id":66,"library":"qdrant-client","title":"Qdrant Python Client","description":"Official Python client for the Qdrant vector search engine. Supports both remote server (gRPC or REST) and local in-memory/on-disk mode without a running server. All data operations use query_points() as the unified interface as of 1.10+. Prior search/recommend/discover methods removed in 1.14.0. Bundles FastEmbed for optional local embedding generation. Async support via AsyncQdrantClient.","status":"active","version":"1.17.0","language":"python","source_language":"en","source_url":"https://qdrant.tech/documentation/","tags":["qdrant","vector-database","similarity-search","rag","embeddings","grpc","in-memory","local-mode"],"install":[{"cmd":"pip install qdrant-client","lang":"bash","label":"Base (REST + gRPC + local mode)"},{"cmd":"pip install 'qdrant-client[fastembed]'","lang":"bash","label":"With FastEmbed for local embeddings"}],"dependencies":[{"reason":"Required. Used for gRPC transport to remote Qdrant server. Also required for local mode.","package":"grpcio","optional":false},{"reason":"Required. REST transport.","package":"httpx","optional":false},{"reason":"Required.","package":"numpy","optional":false},{"reason":"Optional. Only with fastembed extra. Adds ONNX-based local embedding generation (~200MB+ model downloads on first use).","package":"fastembed","optional":true}],"imports":[{"note":"client.search(), client.recommend(), client.discover(), client.search_batch(), client.recommend_batch(), client.discovery_batch() all removed in 1.14.0. Raises AttributeError. Replace all with client.query_points() — the unified interface introduced in 1.10.","wrong":"results = client.search(collection_name='my_col', query_vector=[0.1, 0.2], limit=5)","symbol":"query_points (unified search API)","correct":"from qdrant_client import QdrantClient\nfrom qdrant_client.models import Distance, VectorParams, PointStruct, QueryRequest\nclient = QdrantClient(':memory:')\nresults = client.query_points(collection_name='my_col', query=[0.1, 0.2], limit=5)"},{"note":"upload_records() removed in 1.14.0. Replace with upload_points() using PointStruct objects.","wrong":"client.upload_records(collection_name='my_col', records=[...])","symbol":"upload_points (replaces upload_records)","correct":"client.upload_points(collection_name='my_col', points=[PointStruct(id=1, vector=[0.1, 0.2], payload={'text': 'hello'})])"}],"quickstart":{"code":"from qdrant_client import QdrantClient\nfrom qdrant_client.models import Distance, VectorParams, PointStruct\n\n# In-memory (no server needed)\nclient = QdrantClient(':memory:')\n\n# Persistent local mode\n# client = QdrantClient(path='/path/to/db')\n\n# Remote server\n# client = QdrantClient(url='http://localhost:6333')\n\nclient.create_collection(\n    collection_name='my_docs',\n    vectors_config=VectorParams(size=4, distance=Distance.COSINE),\n)\n\nclient.upload_points(\n    collection_name='my_docs',\n    points=[\n        PointStruct(id=1, vector=[0.1, 0.2, 0.3, 0.4], payload={'text': 'hello'}),\n        PointStruct(id=2, vector=[0.5, 0.6, 0.7, 0.8], payload={'text': 'world'}),\n    ],\n)\n\nresults = client.query_points(\n    collection_name='my_docs',\n    query=[0.1, 0.2, 0.3, 0.4],\n    limit=2,\n)\nprint(results.points)","lang":"python","description":"query_points() is the unified search interface in 1.10+. upload_points() replaces the removed upload_records()."},"warnings":[{"fix":"Replace all with client.query_points(). For batch: client.query_batch_points(). Migration guide: qdrant.tech/documentation/concepts/search/","message":"client.search(), client.recommend(), client.discover(), client.search_batch(), client.recommend_batch(), client.discovery_batch() all removed in 1.14.0. Massive amount of tutorials, LangChain/LlamaIndex integrations, and LLM-generated code uses client.search(). Raises AttributeError on 1.14+.","severity":"breaking","affected_versions":">= 1.14.0"},{"fix":"Replace with client.upload_points() using PointStruct(id=..., vector=..., payload=...) objects.","message":"client.upload_records() removed in 1.14.0. Raises AttributeError.","severity":"breaking","affected_versions":">= 1.14.0"},{"fix":"Use client.update_collection_aliases() or migrate data manually if you were using init_from for collection cloning.","message":"init_from parameter in create_collection() removed in 1.14.0.","severity":"breaking","affected_versions":">= 1.14.0"},{"fix":"Pin pydantic to either >=1.10,<2.0 or >=2.2.1. Avoid 2.0.0–2.2.0.","message":"Pydantic <2.2.1 is not supported. Supported versions are v1.10.x and >=2.2.1. Intermediate Pydantic 2.0–2.2.0 raises validation errors.","severity":"breaking","affected_versions":"all recent"},{"fix":"For production or multi-process access, run a Qdrant server (Docker or binary) and connect via QdrantClient(url='http://localhost:6333').","message":"Local in-memory mode (QdrantClient(':memory:')) does not persist. Data is lost when the process exits. QdrantClient(path='...') persists to disk but does not support concurrent multi-process access.","severity":"gotcha","affected_versions":"all"},{"fix":"Apply offset only at the top-level query_points() call, not in nested prefetch structures.","message":"collection.query_points() offset parameter is no longer propagated into prefetches for nested queries. Pre-1.13 behavior silently passed offset into sub-queries; current behavior does not.","severity":"gotcha","affected_versions":">= 1.13.0"},{"fix":"Use AsyncQdrantClient for async gRPC operations. Do not attempt to access .grpc_* methods from the synchronous QdrantClient.","message":"AsyncQdrantClient raw gRPC methods are not accessible from the sync QdrantClient as of 1.11. Mixing sync client with raw async gRPC calls raises AttributeError.","severity":"gotcha","affected_versions":">= 1.11.0"}],"env_vars":null,"last_verified":"2026-05-12T06:31:08.099Z","next_check":"2026-05-28T00:00:00.000Z","problems":[{"fix":"Use the unified `client.query_points()` method instead, specifying `query_vector` and optional `query_params` (from `qdrant_client.models`).","cause":"The `search`, `recommend`, and `discover` methods were deprecated in `qdrant-client` 1.10 and completely removed in 1.14.0.","error":"AttributeError: 'QdrantClient' object has no attribute 'search'"},{"fix":"Verify that the Qdrant server is running and accessible from your client, ensuring the `url` (e.g., `http://localhost:6333`) and any API keys are correctly configured in `QdrantClient`.","cause":"The Qdrant client could not establish a connection with the Qdrant server, typically due to the server not running, incorrect host/port, or network/firewall issues.","error":"grpc._channel._MultiThreadedRendezvous: <_MultiThreadedRendezvous of RPC that terminated with status #14 and gRPC code 'UNAVAILABLE'"},{"fix":"Update the import statement to `from qdrant_client.models import PointStruct` (or the respective model class).","cause":"Model classes like `PointStruct`, `VectorParams`, and `CollectionConfig` are now directly available from `qdrant_client.models`, not from the internal `qdrant_client.http.models` path.","error":"ImportError: cannot import name 'PointStruct' from 'qdrant_client.http.models'"},{"fix":"Ensure each point is a dictionary like `{'id': 1, 'vector': [0.1, 0.2, ...]}` or a `PointStruct` object, e.g., `PointStruct(id=1, vector=[0.1, 0.2, ...])`.","cause":"When upserting points, each point must be a dictionary containing at least an 'id' and a 'vector' key, or be a `PointStruct` object; this error occurs if the 'vector' key is missing.","error":"KeyError: 'vector'"}],"ecosystem":"pypi","meta_description":null,"install_score":95,"install_tag":"verified","quickstart_score":80,"quickstart_tag":"verified","pypi_latest":null,"install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"fastembed","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.24,"mem_mb":31.2,"disk_size":"139.0M"},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":4.51,"mem_mb":41.9,"disk_size":"131.7M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"fastembed","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":5.92,"mem_mb":52.6,"disk_size":"305M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.88,"mem_mb":35,"disk_size":"124M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"fastembed","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":3.15,"mem_mb":33,"disk_size":"148.8M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":5.65,"mem_mb":43.2,"disk_size":"141.9M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"fastembed","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":6.03,"mem_mb":56.1,"disk_size":"265M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":3.92,"mem_mb":36.5,"disk_size":"134M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"fastembed","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":3.08,"mem_mb":34.5,"disk_size":"146.5M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":4.6,"mem_mb":42.6,"disk_size":"129.7M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"fastembed","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":6.16,"mem_mb":55.3,"disk_size":"251M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":3.79,"mem_mb":36,"disk_size":"122M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"fastembed","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":3.38,"mem_mb":38.5,"disk_size":"146.8M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":4.32,"mem_mb":43.2,"disk_size":"129.2M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"fastembed","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":6.03,"mem_mb":56.7,"disk_size":"251M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":3.76,"mem_mb":36.4,"disk_size":"121M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"fastembed","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.14,"mem_mb":31.4,"disk_size":"146.4M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":3.9,"mem_mb":41.3,"disk_size":"138.9M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"fastembed","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":4.65,"mem_mb":51.2,"disk_size":"298M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":3.01,"mem_mb":34.7,"disk_size":"134M"}]},"quickstart_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"quickstart runs on critical runtimes, recently tested","results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]}}