Skip to content

Commit

Permalink
qdrant inline provider
Browse files Browse the repository at this point in the history
Signed-off-by: Daniele Martinoli <[email protected]>
  • Loading branch information
dmartinol committed Feb 27, 2025
1 parent 99b6925 commit e3aeb01
Show file tree
Hide file tree
Showing 11 changed files with 75 additions and 9 deletions.
1 change: 1 addition & 0 deletions distributions/dependencies.json
Original file line number Diff line number Diff line change
Expand Up @@ -443,6 +443,7 @@
"psycopg2-binary",
"pymongo",
"pypdf",
"qdrant-client",
"redis",
"requests",
"scikit-learn",
Expand Down
4 changes: 2 additions & 2 deletions docs/source/providers/vector_io/qdrant.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ orphan: true
---
# Qdrant

[Qdrant](https://qdrant.tech/documentation/) is a remote vector database provider for Llama Stack. It
[Qdrant](https://qdrant.tech/documentation/) is a inline and remote vector database provider for Llama Stack. It
allows you to store and query vectors directly in memory.
That means you'll get fast and efficient vector retrieval.

Expand All @@ -17,7 +17,7 @@ That means you'll get fast and efficient vector retrieval.
To use Qdrant in your Llama Stack project, follow these steps:

1. Install the necessary dependencies.
2. Configure your Llama Stack project to use Faiss.
2. Configure your Llama Stack project to use Qdrant.
3. Start storing and querying vectors.

## Installation
Expand Down
19 changes: 19 additions & 0 deletions llama_stack/providers/inline/vector_io/qdrant/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.

from typing import Dict

from llama_stack.providers.datatypes import Api, ProviderSpec

from .config import QdrantVectorIOConfig


async def get_provider_impl(config: QdrantVectorIOConfig, deps: Dict[Api, ProviderSpec]):
from llama_stack.providers.remote.vector_io.qdrant.qdrant import QdrantVectorIOAdapter

impl = QdrantVectorIOAdapter(config, deps[Api.inference])
await impl.initialize()
return impl
21 changes: 21 additions & 0 deletions llama_stack/providers/inline/vector_io/qdrant/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved.
#
# This source code is licensed under the terms described in the LICENSE file in
# the root directory of this source tree.


from pydantic import BaseModel

from llama_stack.schema_utils import json_schema_type


@json_schema_type
class QdrantVectorIOConfig(BaseModel):
path: str

@classmethod
def sample_run_config(cls, __distro_dir__: str) -> dict[str, any]:
return {
"path": "${env.QDRANT_PATH:~/.llama/" + __distro_dir__ + "}/" + "qdrant.db",
}
8 changes: 8 additions & 0 deletions llama_stack/providers/registry/vector_io.py
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,14 @@ def available_providers() -> List[ProviderSpec]:
),
api_dependencies=[],
),
InlineProviderSpec(
api=Api.vector_io,
provider_type="inline::qdrant",
pip_packages=["qdrant-client"],
module="llama_stack.providers.inline.vector_io.qdrant",
config_class="llama_stack.providers.inline.vector_io.qdrant.QdrantVectorIOConfig",
api_dependencies=[Api.inference],
),
remote_provider_spec(
Api.vector_io,
AdapterSpec(
Expand Down
1 change: 0 additions & 1 deletion llama_stack/providers/remote/vector_io/qdrant/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,3 @@ class QdrantVectorIOConfig(BaseModel):
prefix: Optional[str] = None
timeout: Optional[int] = None
host: Optional[str] = None
path: Optional[str] = None
9 changes: 6 additions & 3 deletions llama_stack/providers/remote/vector_io/qdrant/qdrant.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

import logging
import uuid
from typing import Any, Dict, List, Optional
from typing import Any, Dict, List, Optional, Union

from numpy.typing import NDArray
from qdrant_client import AsyncQdrantClient, models
Expand All @@ -16,12 +16,13 @@
from llama_stack.apis.vector_dbs import VectorDB
from llama_stack.apis.vector_io import Chunk, QueryChunksResponse, VectorIO
from llama_stack.providers.datatypes import Api, VectorDBsProtocolPrivate
from llama_stack.providers.inline.vector_io.qdrant import QdrantVectorIOConfig as InlineQdrantVectorIOConfig
from llama_stack.providers.utils.memory.vector_store import (
EmbeddingIndex,
VectorDBWithIndex,
)

from .config import QdrantVectorIOConfig
from .config import QdrantVectorIOConfig as RemoteQdrantVectorIOConfig

log = logging.getLogger(__name__)
CHUNK_ID_KEY = "_chunk_id"
Expand Down Expand Up @@ -99,7 +100,9 @@ async def delete(self):


class QdrantVectorIOAdapter(VectorIO, VectorDBsProtocolPrivate):
def __init__(self, config: QdrantVectorIOConfig, inference_api: Api.inference) -> None:
def __init__(
self, config: Union[RemoteQdrantVectorIOConfig, InlineQdrantVectorIOConfig], inference_api: Api.inference
) -> None:
self.config = config
self.client = AsyncQdrantClient(**self.config.model_dump(exclude_none=True))
self.cache = {}
Expand Down
1 change: 1 addition & 0 deletions llama_stack/templates/ollama/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ distribution_spec:
- remote::ollama
vector_io:
- inline::sqlite-vec
- inline::qdrant
- remote::chromadb
- remote::pgvector
safety:
Expand Down
12 changes: 9 additions & 3 deletions llama_stack/templates/ollama/ollama.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
ShieldInput,
ToolGroupInput,
)
from llama_stack.providers.inline.vector_io.qdrant.config import QdrantVectorIOConfig
from llama_stack.providers.inline.vector_io.sqlite_vec.config import SQLiteVectorIOConfig
from llama_stack.providers.remote.inference.ollama import OllamaImplConfig
from llama_stack.templates.template import DistributionTemplate, RunConfigSettings
Expand All @@ -21,7 +22,7 @@
def get_distribution_template() -> DistributionTemplate:
providers = {
"inference": ["remote::ollama"],
"vector_io": ["inline::sqlite-vec", "remote::chromadb", "remote::pgvector"],
"vector_io": ["inline::sqlite-vec", "inline::qdrant", "remote::chromadb", "remote::pgvector"],
"safety": ["inline::llama-guard"],
"agents": ["inline::meta-reference"],
"telemetry": ["inline::meta-reference"],
Expand All @@ -47,6 +48,11 @@ def get_distribution_template() -> DistributionTemplate:
provider_type="inline::sqlite-vec",
config=SQLiteVectorIOConfig.sample_run_config(f"distributions/{name}"),
)
vector_io_provider_qdrant = Provider(
provider_id="qdrant",
provider_type="inline::qdrant",
config=QdrantVectorIOConfig.sample_run_config(f"distributions/{name}"),
)

inference_model = ModelInput(
model_id="${env.INFERENCE_MODEL}",
Expand Down Expand Up @@ -92,15 +98,15 @@ def get_distribution_template() -> DistributionTemplate:
"run.yaml": RunConfigSettings(
provider_overrides={
"inference": [inference_provider],
"vector_io": [vector_io_provider_sqlite],
"vector_io": [vector_io_provider_sqlite, vector_io_provider_qdrant],
},
default_models=[inference_model],
default_tool_groups=default_tool_groups,
),
"run-with-safety.yaml": RunConfigSettings(
provider_overrides={
"inference": [inference_provider],
"vector_io": [vector_io_provider_sqlite],
"vector_io": [vector_io_provider_sqlite, vector_io_provider_qdrant],
"safety": [
Provider(
provider_id="llama-guard",
Expand Down
4 changes: 4 additions & 0 deletions llama_stack/templates/ollama/run-with-safety.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ providers:
provider_type: inline::sqlite-vec
config:
db_path: ${env.SQLITE_STORE_DIR:~/.llama/distributions/ollama}/sqlite_vec.db
- provider_id: qdrant
provider_type: inline::qdrant
config:
path: ${env.QDRANT_PATH:~/.llama/distributions/ollama}/qdrant.db
safety:
- provider_id: llama-guard
provider_type: inline::llama-guard
Expand Down
4 changes: 4 additions & 0 deletions llama_stack/templates/ollama/run.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,10 @@ providers:
provider_type: inline::sqlite-vec
config:
db_path: ${env.SQLITE_STORE_DIR:~/.llama/distributions/ollama}/sqlite_vec.db
- provider_id: qdrant
provider_type: inline::qdrant
config:
path: ${env.QDRANT_PATH:~/.llama/distributions/ollama}/qdrant.db
safety:
- provider_id: llama-guard
provider_type: inline::llama-guard
Expand Down

0 comments on commit e3aeb01

Please sign in to comment.