From d66ef1bd1fbeb33c7fb76a306ec9b6ac81ac6673 Mon Sep 17 00:00:00 2001 From: Joan Fontanals Date: Tue, 27 Jun 2023 16:29:04 +0200 Subject: [PATCH] fix: fix some stuff for deployment (#31) * fix: fix some stuff for deployment * docs: change README show deploy output Signed-off-by: Joan Fontanals Martinez --------- Signed-off-by: Joan Fontanals Martinez --- .github/images/vectordb_deploy_list.png | Bin 0 -> 19409 bytes .github/images/vectordb_deploy_paused.png | Bin 0 -> 18948 bytes .github/images/vectordb_deploy_screenshot.png | Bin 0 -> 32580 bytes Dockerfiles/vectordb.Dockerfile | 2 +- README.md | 24 ++++++++---------- vectordb/__main__.py | 4 ++- vectordb/db/base.py | 4 ++- vectordb/utils/push_to_hubble.py | 21 ++++++++++++++- 8 files changed, 37 insertions(+), 18 deletions(-) create mode 100644 .github/images/vectordb_deploy_list.png create mode 100644 .github/images/vectordb_deploy_paused.png create mode 100644 .github/images/vectordb_deploy_screenshot.png diff --git a/.github/images/vectordb_deploy_list.png b/.github/images/vectordb_deploy_list.png new file mode 100644 index 0000000000000000000000000000000000000000..a13fcb00121cf36f4245617df9b2109444fa18bd GIT binary patch literal 19409 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%0AC3T}(*)~xG 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 literal 0 HcmV?d00001 diff --git a/Dockerfiles/vectordb.Dockerfile b/Dockerfiles/vectordb.Dockerfile index a16544b..6f3a972 100644 --- a/Dockerfiles/vectordb.Dockerfile +++ b/Dockerfiles/vectordb.Dockerfile @@ -8,6 +8,6 @@ COPY . /vectordb/ RUN cd /vectordb && pip install -U pip && pip install . -RUN pip install -U docarray[hnswlib]>=0.33 +RUN pip install -U docarray[hnswlib]>=0.34 ENTRYPOINT ["vectordb"] \ No newline at end of file diff --git a/README.md b/README.md index 24809ab..03a750f 100644 --- a/README.md +++ b/README.md @@ -174,17 +174,7 @@ if __name__ == '__main__':

Show command output - ```text - ╭──────────────┬────────────────────────────────────────────────────────────────────────────────────────────────────────╮ - │ App ID │ │ - ├──────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────┤ - │ Phase │ Serving │ - ├──────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────┤ - │ Endpoint │ grpc://.wolf.jina.ai │ - ├──────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────┤ - │ App logs │ dashboards.wolf.jina.ai │ - ╰──────────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────╯ - ``` +![](./.github/images/vectordb_deploy_screenshot.png)
@@ -194,15 +184,21 @@ Once deployed, you can use `vectordb` Client to access the given endpoint. ```python from vectordb import Client -c = Client(address=' grpc://.wolf.jina.ai') +c = Client(address='grpcs://.wolf.jina.ai') ``` 5. Manage your deployed instances using [jcloud](https://github.com/jina-ai/jcloud): You can then list and delete your deployed DBs with `jc` command: -```jc list <>``` +```jcloud list <>``` -```jc delete <>``` +![](./.github/images/vectordb_deploy_list.png) + +```jcloud pause <>``` or ```jcloud resume <>``` + +![](./.github/images/vectordb_deploy_paused.png) + +```jcloud remove <>``` ## ⚙️ Configure diff --git a/vectordb/__main__.py b/vectordb/__main__.py index 2db74fa..0e8ed11 100644 --- a/vectordb/__main__.py +++ b/vectordb/__main__.py @@ -39,8 +39,10 @@ def vectordb(): ) def deploy(db, protocol, shards): definition_file, _, obj_name = db.partition(":") + if not definition_file.endswith('.py'): + definition_file = f'{definition_file}.py' protocol = protocol.split(',') - VectorDB.deploy(protoocl=protocol, + VectorDB.deploy(protocol=protocol, shards=shards, definition_file=definition_file, obj_name=obj_name) diff --git a/vectordb/db/base.py b/vectordb/db/base.py index c020db6..90fdc9d 100644 --- a/vectordb/db/base.py +++ b/vectordb/db/base.py @@ -126,7 +126,7 @@ class VectorDB(Generic[TSchema]): # here we would need to push the EXECUTOR TO HUBBLE AND CHANGE THE USES assert definition_file is not None, 'Trying to create a Jina Object for Deployment without the file where the vectordb object/class is defined' assert obj_name is not None, 'Trying to create a Jina Object for Deployment without the name of the vectordb object/class to deploy' - uses = f'jinaai+docker://{push_vectordb_to_hubble(vectordb_name=obj_name, definition_file_path=definition_file)}' + uses = f'{push_vectordb_to_hubble(vectordb_name=obj_name, definition_file_path=definition_file)}' use_deployment = False if 'websocket' in protocol_list: # websocket not supported for Deployment @@ -193,6 +193,7 @@ class VectorDB(Generic[TSchema]): executor['jcloud'] = executor_jcloud_config global_jcloud_config = { + 'docarray': '0.34.0', 'labels': { 'app': 'vectordb', }, @@ -213,6 +214,7 @@ class VectorDB(Generic[TSchema]): with tempfile.TemporaryDirectory() as tmpdir: flow_path = os.path.join(tmpdir, 'flow.yml') + print(f' flow_path {flow_path}') with open(flow_path, 'w') as f: yaml.safe_dump(flow_dict, f, sort_keys=False) diff --git a/vectordb/utils/push_to_hubble.py b/vectordb/utils/push_to_hubble.py index 2f3e676..eb415bc 100644 --- a/vectordb/utils/push_to_hubble.py +++ b/vectordb/utils/push_to_hubble.py @@ -40,6 +40,23 @@ class EnvironmentVarCtxtManager: os.unsetenv(key) +def get_uri(id: str, tag: str): + import requests + from hubble import Auth + + r = requests.get( + f"https://apihubble.jina.ai/v2/executor/getMeta?id={id}&tag={tag}", + headers={"Authorization": f"token {Auth.get_auth_token()}"}, + ) + _json = r.json() + if _json is None: + print(f'Could not find image with id {id} and tag {tag}') + return + _image_name = _json['data']['name'] + _user_name = _json['meta']['owner']['name'] + return f'jinaai+docker://{_user_name}/{_image_name}:{tag}' + + def get_random_tag(): return 't-' + uuid.uuid4().hex[:5] @@ -110,4 +127,6 @@ def push_vectordb_to_hubble( with open(os.path.join(tmpdir, 'config.yml'), mode='w', encoding='utf-8') as f: f.write(content) - return _push_to_hubble(tmpdir, image_name, tag, True, False) + executor_id = _push_to_hubble(tmpdir, image_name, tag, True, False) + id, tag = executor_id.split(':') + return get_uri(id, tag)