Package: qdrant-txtai
qdrant-txtaitxtaisimplifies building AI-powered semantic
search applications using Transformers. It leverages the neural embeddings and
their properties to encode high-dimensional data in a lower-dimensional space
and allows to find similar objects based on their embeddings' proximity.Implementing such application in real-world use cases requires storing the
embeddings in an efficient way though, namely in a vector database likeQdrant. It offers not only a powerful engine for neural
search, but also allows setting up a whole cluster if your data does not fit
a single machine anymore. It is production grade and can be launched easily
with Docker.Combining the easiness of txtai with Qdrant's performance enables you to build
production-ready semantic search applications way faster than before.InstallationThe library might be installed with pip as following:pipinstallqdrant-txtaiUsageRunning the txtai application with Qdrant as a vector storage requires launching
a Qdrant instance. That might be done easily with Docker:dockerrun-p6333:6333-p:6334:6334qdrant/qdrant:v1.0.1Running the txtai application might be done either programmatically or by
providing configuration in a YAML file.Programmaticallyfromtxtai.embeddingsimportEmbeddingsembeddings=Embeddings({"path":"sentence-transformers/all-MiniLM-L6-v2","backend":"qdrant_txtai.ann.qdrant.Qdrant",})embeddings.index([(0,"Correct",None),(1,"Not what we hoped",None)])result=embeddings.search("positive",1)print(result)Via YAML configuration# app.ymlembeddings:path:sentence-transformers/all-MiniLM-L6-v2backend:qdrant_txtai.ann.qdrant.QdrantCONFIG=app.ymluvicorn"txtai.api:app"curl-XGET"http://localhost:8000/search?query=positive"Configuration propertiesqdrant-txtaiallows you to configure both the connection details, and some
internal properties of the vector collection which may impact both speed and
accuracy. Please refer toQdrant docsif you are interested in the meaning of each property.The example below presents all the available options, if we connect to Qdrant server:embeddings:path:sentence-transformers/all-MiniLM-L6-v2backend:qdrant_txtai.ann.qdrant.Qdrantmetric:l2# allowed values: l2 / cosine / ipqdrant:url:qdrant.hostport:6333grpc_port:6334prefer_grpc:truecollection:CustomCollectionNamehttps:true# for Qdrant Cloudapi_key:XYZ# for Qdrant Cloudhnsw:m:8ef_construct:256full_scan_threshold:ef_search:512Local in-memory/disk-persisted modeQdrant Python client, from version 1.1.1, supports local in-memory/disk-persisted mode.
That's a good choice for any test scenarios and quick experiments in which you do not
plan to store lots of vectors. In such a case spinning a Docker container might be even
not required.In-memory storageIn case you want to have a transient storage, for example in case of automated tests
launched during your CI/CD pipeline, using Qdrant Local mode with in-memory storage
might be a preferred option.embeddings:path:sentence-transformers/all-MiniLM-L6-v2backend:qdrant_txtai.ann.qdrant.Qdrantmetric:l2# allowed values: l2 / cosine / ipqdrant:location:':memory:'prefer_grpc:trueOn disk storageHowever, if you prefer to keep the vectors between different runs of your application,
it might be better to use on disk storage and pass the path that should be used to
persist the data.embeddings:path:sentence-transformers/all-MiniLM-L6-v2backend:qdrant_txtai.ann.qdrant.Qdrantmetric:l2# allowed values: l2 / cosine / ipqdrant:path:'/home/qdrant/storage_local'prefer_grpc:true