Skip to content

Commit 4fd27ef

Browse files
authored
Add S3vectors cli support (#600)
* Add s3vectors cli support * Last commit. Co-authored-by: Enrique enrique.molina@urv.cat Co-authored-by: Octavio octaviohoracio.iacoponelli@urv.cat * Fix linting with ruff --fix and black. Co-authored-by: Enrique enrique.molina@urv.cat Co-authored-by: Octavio octaviohoracio.iacoponelli@urv.cat
1 parent 631831b commit 4fd27ef

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
from typing import Annotated, TypedDict, Unpack
2+
3+
import click
4+
from pydantic import SecretStr
5+
6+
from ....cli.cli import (
7+
CommonTypedDict,
8+
cli,
9+
click_parameter_decorators_from_typed_dict,
10+
get_custom_case_config,
11+
run,
12+
)
13+
from .. import DB
14+
from ..api import MetricType
15+
from .config import S3VectorsIndexConfig
16+
17+
18+
class S3VectorsTypedDict(TypedDict):
19+
region_name: Annotated[
20+
str, click.option("--region", type=str, help="AWS region for S3 bucket (eg. us-east-1)", default="us-east-1")
21+
]
22+
access_key_id: Annotated[str, click.option("--access_key_id", type=str, help="AWS access key ID", required=True)]
23+
secret_access_key: Annotated[
24+
str, click.option("--secret_access_key", type=str, help="AWS secret access key", required=True)
25+
]
26+
27+
bucket: Annotated[str, click.option("--bucket", type=str, help="S3 bucket name", required=True)]
28+
index: Annotated[str, click.option("--index", type=str, help="Unique vector index name", default="vdbbench-index")]
29+
30+
metric: Annotated[
31+
str,
32+
click.option(
33+
"--metric",
34+
type=str,
35+
help="Distance metric for vector similarity (e.g., 'cosine', 'euclidean').",
36+
default=None,
37+
),
38+
]
39+
40+
41+
class S3VectorsIndexTypedDict(CommonTypedDict, S3VectorsTypedDict): ...
42+
43+
44+
@cli.command()
45+
@click_parameter_decorators_from_typed_dict(S3VectorsIndexTypedDict)
46+
def S3Vectors(**parameters: Unpack[S3VectorsIndexTypedDict]):
47+
from .config import S3VectorsConfig
48+
49+
parameters["custom_case"] = get_custom_case_config(parameters)
50+
run(
51+
db=DB.S3Vectors,
52+
db_config=S3VectorsConfig(
53+
region_name=parameters["region"],
54+
access_key_id=SecretStr(parameters["access_key_id"]),
55+
secret_access_key=SecretStr(parameters["secret_access_key"]),
56+
bucket_name=parameters["bucket"],
57+
index_name=parameters["index"] if parameters["index"] else "vdbbench-index",
58+
),
59+
db_case_config=S3VectorsIndexConfig(
60+
metric_type=(
61+
MetricType.COSINE
62+
if parameters["metric"] == "cosine"
63+
else MetricType.L2 if parameters["metric"] == "l2" else None
64+
)
65+
),
66+
**parameters,
67+
)

vectordb_bench/cli/vectordbbench.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from ..backend.clients.qdrant_cloud.cli import QdrantCloud
1616
from ..backend.clients.qdrant_local.cli import QdrantLocal
1717
from ..backend.clients.redis.cli import Redis
18+
from ..backend.clients.s3_vectors.cli import S3Vectors
1819
from ..backend.clients.test.cli import Test
1920
from ..backend.clients.tidb.cli import TiDB
2021
from ..backend.clients.vespa.cli import Vespa
@@ -48,6 +49,7 @@
4849
cli.add_command(QdrantCloud)
4950
cli.add_command(QdrantLocal)
5051
cli.add_command(BatchCli)
52+
cli.add_command(S3Vectors)
5153

5254

5355
if __name__ == "__main__":

0 commit comments

Comments
 (0)