From 2e0fda53bf28ea7d652b60075a99ed6cdeb0b2b5 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Tue, 26 Mar 2024 14:10:31 +0530 Subject: [PATCH 01/48] fix: media factory audio function update & setting up media worker --- src/core/models/media_factory.py | 26 +++++ src/requirements.in | 3 +- src/requirements.txt | 4 + src/worker/media/Dockerfile.media_worker | 75 ++++++++++++++ .../media/Dockerfile.media_worker_graviton | 99 +++++++++++++++++++ src/worker/media/config.yml | 34 +++++++ src/worker/media/media_payload_writer.py | 0 src/worker/media/media_test.py | 13 +++ src/worker/media/media_worker.py | 0 9 files changed, 253 insertions(+), 1 deletion(-) create mode 100644 src/worker/media/Dockerfile.media_worker create mode 100644 src/worker/media/Dockerfile.media_worker_graviton create mode 100644 src/worker/media/config.yml create mode 100644 src/worker/media/media_payload_writer.py create mode 100644 src/worker/media/media_test.py create mode 100644 src/worker/media/media_worker.py diff --git a/src/core/models/media_factory.py b/src/core/models/media_factory.py index b3bc18d5..91e59993 100644 --- a/src/core/models/media_factory.py +++ b/src/core/models/media_factory.py @@ -10,6 +10,7 @@ import os import tempfile import boto3 +from pydub import AudioSegment log = logging.getLogger(__name__) @@ -145,10 +146,35 @@ def make_from_url(audio_url): log.exception("Error downloading audio:", e) raise Exception("Error Downloading audio") return {"path": audio_file} + + @staticmethod + def make_from_url_to_wav(audio_url): + temp_dir = tempfile.gettempdir() + temp_url = audio_url.split("?")[0] + file_name = temp_url.split("/")[-1] + audio_file = os.path.join(temp_dir, file_name) + + try: + print("Downloading audio from URL") + wget.download(audio_url, out=audio_file) + print("\naudio downloaded") + + _, file_extension = os.path.splitext(file_name) + if file_extension != '.wav': + audio = AudioSegment.from_file(audio_file, format=file_extension[1:]) + wav_file = os.path.splitext(audio_file)[0] + '.wav' + audio.export(wav_file, format='wav') + os.remove(audio_file) + audio_file = wav_file + except Exception as e: + logging.exception("Error downloading or converting audio:", e) + raise Exception("Error downloading or converting audio") + return {"path": audio_file} @staticmethod def make_from_file_on_disk(audio_path): return {"path": audio_path} + media_factory = { diff --git a/src/requirements.in b/src/requirements.in index 49307872..f0005e50 100644 --- a/src/requirements.in +++ b/src/requirements.in @@ -16,4 +16,5 @@ requests==2.31.0 locust==2.23.1 nose2==0.14.1 psycopg2-binary==2.9.9 -boto3==1.34.64 \ No newline at end of file +boto3==1.34.64 +pydub==0.25.1 \ No newline at end of file diff --git a/src/requirements.txt b/src/requirements.txt index 7243e974..0f0eb1ea 100644 --- a/src/requirements.txt +++ b/src/requirements.txt @@ -879,6 +879,10 @@ psycopg2-binary==2.9.9 \ --hash=sha256:f7fc5a5acafb7d6ccca13bfa8c90f8c51f13d8fb87d95656d3950f0158d3ce53 \ --hash=sha256:f9b5571d33660d5009a8b3c25dc1db560206e2d2f89d3df1cb32d72c0d117d52 # via -r requirements.in +pydub==0.25.1 \ + --hash=sha256:65617e33033874b59d87db603aa1ed450633288aefead953b30bded59cb599a6 \ + --hash=sha256:980a33ce9949cab2a569606b65674d748ecbca4f0796887fd6f46173a7b0d30f + # via -r requirements.in pygments==2.17.2 \ --hash=sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c \ --hash=sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367 diff --git a/src/worker/media/Dockerfile.media_worker b/src/worker/media/Dockerfile.media_worker new file mode 100644 index 00000000..aeb6d710 --- /dev/null +++ b/src/worker/media/Dockerfile.media_worker @@ -0,0 +1,75 @@ +### BUILDER IMAGE ### +FROM --platform=$TARGETPLATFORM python:3.11-slim-bullseye@sha256:47863f26a5f2e0bfa903e7b658355940250979bd555b5e4f9f25da81647daff8 AS builder +ARG UID +ARG GID + +# Fetch OS packages updates, upgrade packages, and install packages required for build +RUN apt-get update \ + && apt-get -y upgrade \ + && apt-get install -y \ + --no-install-recommends gcc build-essential \ + --no-install-recommends libgl1-mesa-glx libglib2.0-0 \ + --no-install-recommends python3-dev + +# Set python user +RUN groupadd -g $GID python \ + && useradd --create-home -r -u $UID -g python python \ + && mkdir /home/python/app \ + && chown -R python:python /home/python/app/ +# Set working dir +WORKDIR /home/python/app + +# Create venv and change ownership recursively +RUN python -m venv /home/python/app/venv \ + && chown -R python:python /home/python/app/venv +# Set venv in path +ENV PATH="/home/python/app/venv/bin:$PATH" + +# Copy core and operator requirements +COPY --chown=python:python requirements.txt /home/python/app/requirements.txt +COPY --chown=python:python ./core/operators/vid_vec_rep_resnet_requirements.txt /home/python/app/core/operators/vid_vec_rep_resnet_requirements.txt +COPY --chown=python:python ./core/operators/audio_vec_embedding_requirements.txt /home/python/app/core/operators/audio_vec_embedding_requirements.txt + +# Run pip install +RUN pip install --no-cache-dir --upgrade pip \ + && pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/requirements.txt \ + && pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/core/operators/vid_vec_rep_resnet_requirements.txt \ + && pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/core/operators/audio_vec_embedding_requirements.txt + +##################################### + + +### PRODUCTION IMAGE ### +FROM --platform=$TARGETPLATFORM python:3.11-slim-bullseye@sha256:47863f26a5f2e0bfa903e7b658355940250979bd555b5e4f9f25da81647daff8 AS production +ARG UID +ARG GID + +# Update image, install required utils, and remove cache +RUN apt-get update \ + && apt-get -y upgrade \ + && apt-get install -y --no-install-recommends vim zsh curl \ + && apt-get install -y ffmpeg \ + && rm -rf /var/lib/apt/lists/* + +# Set python group and user, create home dir, create app dir, change ownership of app to user +RUN groupadd -g $GID python \ + && useradd --create-home -r -u $UID -g python python \ + && mkdir /home/python/app \ + && chown -R python:python /home/python/app/ + +# Set working dir +WORKDIR /home/python/app + +# Copy output from builder stage +COPY --from=builder /home/python/app /home/python/app + +# Copy all files and change ownership to unprivileged user +COPY --chown=python:python . /home/python/app + +# Set venv path +ENV PATH="/home/python/app/venv/bin:$PATH" + +# Set unprivileged user with group membership +USER python:python + +################################# \ No newline at end of file diff --git a/src/worker/media/Dockerfile.media_worker_graviton b/src/worker/media/Dockerfile.media_worker_graviton new file mode 100644 index 00000000..436ea4da --- /dev/null +++ b/src/worker/media/Dockerfile.media_worker_graviton @@ -0,0 +1,99 @@ +### BUILDER IMAGE ### +FROM --platform=$TARGETPLATFORM python:3.11-slim-bullseye@sha256:47863f26a5f2e0bfa903e7b658355940250979bd555b5e4f9f25da81647daff8 AS builder +ARG UID +ARG GID + +# Fetch OS packages updates, upgrade packages, and install packages required for build +RUN apt-get update \ + && apt-get -y upgrade \ + && apt-get install -y \ + --no-install-recommends gcc build-essential \ + --no-install-recommends libgl1-mesa-glx libglib2.0-0 \ + --no-install-recommends python3-dev + +# Set python user +RUN groupadd -g $GID python \ + && useradd --create-home -r -u $UID -g python python \ + && mkdir /home/python/app \ + && chown -R python:python /home/python/app/ +# Set working dir +WORKDIR /home/python/app + +# Create venv and change ownership recursively +RUN python -m venv /home/python/app/venv \ + && chown -R python:python /home/python/app/venv +# Set venv in path +ENV PATH="/home/python/app/venv/bin:$PATH" + +# Copy core and operator requirements +COPY --chown=python:python requirements.txt /home/python/app/requirements.txt +COPY --chown=python:python ./core/operators/vid_vec_rep_resnet_requirements.txt /home/python/app/core/operators/vid_vec_rep_resnet_requirements.txt +COPY --chown=python:python ./core/operators/audio_vec_embedding_requirements.txt /home/python/app/core/operators/audio_vec_embedding_requirements.txt + +# Run pip install +RUN pip install --no-cache-dir --upgrade pip \ + && pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/requirements.txt \ + && pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/core/operators/vid_vec_rep_resnet_requirements.txt \ + && pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/core/operators/audio_vec_embedding_requirements.txt + +##################################### + + +### PRODUCTION IMAGE ### +FROM --platform=$TARGETPLATFORM python:3.11-slim-bullseye@sha256:47863f26a5f2e0bfa903e7b658355940250979bd555b5e4f9f25da81647daff8 AS production +ARG UID +ARG GID + +# Update image, install required utils, and remove cache +RUN apt-get update \ + && apt-get -y upgrade \ + && apt-get install -y --no-install-recommends vim zsh curl \ + && apt-get install -y ffmpeg \ + && rm -rf /var/lib/apt/lists/* + +# Set python group and user, create home dir, and create app dir for user +RUN groupadd -g $GID python \ + && useradd --create-home -r -u $UID -g python python \ + && mkdir /home/python/app \ + && chown -R python:python /home/python/app/ + +# Set working dir +WORKDIR /home/python/app + +# Copy output from builder stage +COPY --from=builder /home/python/app /home/python/app + +# Copy all files and change ownership to unprivileged user +COPY --chown=python:python . /home/python/app + +# Set venv path +ENV PATH="/home/python/app/venv/bin:$PATH" + +### AWS Graviton Optimization ### + +# Graviton3(E) (e.g. c7g, c7gn and Hpc7g instances) supports BF16 format for ML acceleration. This can be enabled in oneDNN by setting the below environment variable +ENV DNNL_DEFAULT_FPMATH_MODE=BF16 + +# Enable primitive caching to avoid the redundant primitive allocation +# latency overhead. Please note this caching feature increases the +# memory footprint. Tune this cache capacity to a lower value to +# reduce the additional memory requirement. +ENV LRU_CACHE_CAPACITY=1024 + +# Enable Transparent huge page allocations from PyTorch C10 allocator +ENV THP_MEM_ALLOC_ENABLE=1 + +# Make sure the openmp threads are distributed across all the processes for multi process applications to avoid over subscription for the vcpus. For example if there is a single application process, then num_processes should be set to '1' so that all the vcpus are assigned to it with one-to-one mapping to omp threads +# RUN num_vcpus=8 +# RUN num_processes=1 +# RUN temp = $((1 > ($num_vcpus/$num_processes) ? 1 : ($num_vcpus/$num_processes))) +ENV OMP_NUM_THREADS=1 +ENV OMP_PROC_BIND=false +ENV OMP_PLACES=cores +### + + +# Set unprivileged user with group membership +USER python:python + +################################# \ No newline at end of file diff --git a/src/worker/media/config.yml b/src/worker/media/config.yml new file mode 100644 index 00000000..3fede25f --- /dev/null +++ b/src/worker/media/config.yml @@ -0,0 +1,34 @@ +store : + label : "Data Store" + type : "es_vec" + parameters: + host_name : "es" + image_index_name : "image" + text_index_name : "text" + video_index_name : "video" + audio_index_name : "audio" + +queue : + label : "Queue" + type : "rabbitmq" + parameters: + host_name : "rabbitmq" + queues: + - name : "video-index-queue" + - name : "report-queue" + - name : "video-search-queue" + - name : "search-result-queue" + +operators : + label : "Operators" + parameters : + - name : "Video Vector Representation" + type : "vid_vec_rep_resnet" + parameters: { + index_name : "video" + } + - name : "Audio Vector Representation" + type : "audio_vec_embedding" + parameters: { + index_name : "audio" + } \ No newline at end of file diff --git a/src/worker/media/media_payload_writer.py b/src/worker/media/media_payload_writer.py new file mode 100644 index 00000000..e69de29b diff --git a/src/worker/media/media_test.py b/src/worker/media/media_test.py new file mode 100644 index 00000000..b4d47cba --- /dev/null +++ b/src/worker/media/media_test.py @@ -0,0 +1,13 @@ +from core.models.media_factory import AudioFactory +from core.operators import audio_vec_embedding + +# audio_url = "https://github.com/aatmanvaidya/audio-files/blob/main/audio30.wav?raw=true" +# audio_url = "https://github.com/aatmanvaidya/audio-files/blob/main/mp3-sample-audio.mp3" +audio_url = "https://github.com/aatmanvaidya/audio-files/blob/main/ogg-sample-audio.ogg" +new_url = audio_url.replace("github.com", "raw.githubusercontent.com").replace("/blob/", "/") +dwn = AudioFactory.make_from_url_to_wav(new_url) +print(dwn) +audio_vec_embedding.initialize(param=None) +audio_emb = audio_vec_embedding.run(dwn) +audio_emb_list = audio_emb.tolist() +print(len(audio_emb_list)) \ No newline at end of file diff --git a/src/worker/media/media_worker.py b/src/worker/media/media_worker.py new file mode 100644 index 00000000..e69de29b From f43f2057c695425f6c9fc1fc552910a85f7f1d79 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Wed, 27 Mar 2024 20:00:24 +0530 Subject: [PATCH 02/48] refactor: config supports postgres & feat: setting up media payload writer --- src/core/config.py | 11 +++ src/worker/media/config.yml | 61 +++++++------- src/worker/media/media_payload_writer.py | 22 +++++ src/worker/media/media_worker.py | 101 +++++++++++++++++++++++ 4 files changed, 165 insertions(+), 30 deletions(-) diff --git a/src/core/config.py b/src/core/config.py index b344ffae..fe1eb139 100644 --- a/src/core/config.py +++ b/src/core/config.py @@ -69,6 +69,16 @@ class OperatorConfig: label: str parameters: List[OperatorParameters] +@dataclass +class PostgreParameters: + table_names: List[dict] + +@dataclass +class PostgreSQLConfig: + label: str + type: str + parameters: PostgreParameters + @dataclass class Config: @@ -76,6 +86,7 @@ class Config: queue: Optional[QueueConfig] server: Optional[ServerConfig] operators: Optional[OperatorConfig] + postgresql: Optional[PostgreSQLConfig] def load(filepath) -> Config: diff --git a/src/worker/media/config.yml b/src/worker/media/config.yml index 3fede25f..07ffe047 100644 --- a/src/worker/media/config.yml +++ b/src/worker/media/config.yml @@ -1,34 +1,35 @@ -store : - label : "Data Store" - type : "es_vec" +store: + label: "Data Store" + type: "es_vec" parameters: - host_name : "es" - image_index_name : "image" - text_index_name : "text" - video_index_name : "video" - audio_index_name : "audio" + host_name: "es" + image_index_name: "image" + text_index_name: "text" + video_index_name: "video" + audio_index_name: "audio" -queue : - label : "Queue" - type : "rabbitmq" - parameters: - host_name : "rabbitmq" +queue: + label: "Queue" + type: "rabbitmq" + parameters: + host_name: "rabbitmq" queues: - - name : "video-index-queue" - - name : "report-queue" - - name : "video-search-queue" - - name : "search-result-queue" + - name: "media-index-queue" + - name: "report-queue" + +operators: + label: "Operators" + parameters: + - name: "Video Vector Representation" + type: "vid_vec_rep_resnet" + parameters: { index_name: "video" } + - name: "Audio Vector Representation" + type: "audio_vec_embedding" + parameters: { index_name: "audio" } -operators : - label : "Operators" - parameters : - - name : "Video Vector Representation" - type : "vid_vec_rep_resnet" - parameters: { - index_name : "video" - } - - name : "Audio Vector Representation" - type : "audio_vec_embedding" - parameters: { - index_name : "audio" - } \ No newline at end of file +postgresql: + label: "PostgreSQL" + type: "postgresql" + parameters: + table_names: + - name: "table_name_1" diff --git a/src/worker/media/media_payload_writer.py b/src/worker/media/media_payload_writer.py index e69de29b..3caedc1a 100644 --- a/src/worker/media/media_payload_writer.py +++ b/src/worker/media/media_payload_writer.py @@ -0,0 +1,22 @@ +from core.feluda import ComponentType, Feluda +from core.logger import Logger +from time import sleep + +log = Logger(__name__) + +try: + feluda = Feluda("worker/media/config.yml") + feluda.setup() + video_index_queue = feluda.config.queue.parameters.queues[0]["name"] + feluda.start_component(ComponentType.STORE) + feluda.start_component(ComponentType.QUEUE) + + for _ in range(1): + dummy_payload = { + "id": str(12345), + "path": "https://raw.githubusercontent.com/tattle-made/feluda/main/src/core/operators/sample_data/sample-cat-video.mp4", + "media_type": "video" + } + feluda.queue.message(video_index_queue, dummy_payload) +except Exception as e: + print("Error Initializing Indexer", e) \ No newline at end of file diff --git a/src/worker/media/media_worker.py b/src/worker/media/media_worker.py index e69de29b..1235b156 100644 --- a/src/worker/media/media_worker.py +++ b/src/worker/media/media_worker.py @@ -0,0 +1,101 @@ +from core.feluda import ComponentType, Feluda +from core.logger import Logger +from core.operators import vid_vec_rep_resnet +from core.operators import audio_vec_embedding +import json +from datetime import datetime +from core.models.media import MediaType +from core.models.media_factory import VideoFactory +from core.models.media_factory import AudioFactory +from core.store.postgresql import PostgreSQLManager +from time import sleep +import numpy as np +import binascii + +log = Logger(__name__) + + +def make_report_indexed(data, status): + report = {} + report["indexer_id"] = 1 + report["post_id"] = data["id"] + report["status"] = status + report["status_code"] = 200 + return json.dumps(report) + + +def make_report_failed(data, status): + report = {} + report["indexer_id"] = 1 + report["post_id"] = data["id"] + report["status"] = status + report["status_code"] = 400 + return json.dumps(report) + +def generate_document(post_id: str, representation: any): + base_doc = { + "e_kosh_id": "", + "dataset": post_id, + "metadata": None, + "date_added": datetime.now().isoformat(), + } + + def generator_doc(): + for vector in representation: + base_doc["_index"] = "video" + base_doc["vid_vec"] = vector["vid_vec"] + base_doc["is_avg"] = vector["is_avg"] + base_doc["duration"] = vector["duration"] + base_doc["n_keyframes"] = vector["n_keyframes"] + yield base_doc + + return generator_doc + +def indexer(feluda): + def worker(ch, method, properties, body): + print("MESSAGE RECEIVED") + file_content = json.loads(body) + media_type = file_content["media_type"] + print(media_type) + return worker + +def handle_exception(feluda, queue_name, worker_func, retries, max_retries): + retry_interval = 60 + if retries < max_retries: + print("Inside Handle Exception") + try: + feluda.start_component(ComponentType.QUEUE) + feluda.queue.listen(queue_name, worker_func) + return + except Exception as e: + print("Error handling exception:", e) + retries = retries + 1 + sleep(retry_interval) + handle_exception(feluda, queue_name, worker_func, retries, max_retries) + else: + print("Failed to re-establish connection after maximum retries.") + +feluda = None +pg_manager = None +media_index_queue = None +try: + feluda = Feluda("worker/media/config.yml") + feluda.setup() + # pg_manager = PostgreSQLManager() + # pg_manager.connect() + # pg_manager.create_trigger_function() + # pg_manager.create_table("user_message_inbox_perceptually_similar") + # pg_manager.create_trigger("user_message_inbox_perceptually_similar") + media_index_queue = feluda.config.queue.parameters.queues[0]["name"] + print(media_index_queue) + feluda.start_component(ComponentType.STORE) + feluda.start_component(ComponentType.QUEUE) + vid_vec_rep_resnet.initialize(param=None) + audio_vec_embedding.initialize(param=None) + feluda.queue.listen(media_index_queue, indexer(feluda)) +except Exception as e: + print("Error Initializing Indexer", e) + retries = 0 + max_retries = 10 + handle_exception(feluda, media_index_queue, indexer(feluda), retries, max_retries) + pg_manager.close_connection() \ No newline at end of file From ffba9cda73d4ec6baabbced19409d5dbdb33e7c4 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Wed, 27 Mar 2024 22:41:53 +0530 Subject: [PATCH 03/48] feat: media worker supports video --- src/worker/media/config.yml | 6 +- src/worker/media/media_payload_writer.py | 12 ++-- src/worker/media/media_worker.py | 90 ++++++++++++++++++++---- 3 files changed, 88 insertions(+), 20 deletions(-) diff --git a/src/worker/media/config.yml b/src/worker/media/config.yml index 07ffe047..46a1264d 100644 --- a/src/worker/media/config.yml +++ b/src/worker/media/config.yml @@ -23,9 +23,9 @@ operators: - name: "Video Vector Representation" type: "vid_vec_rep_resnet" parameters: { index_name: "video" } - - name: "Audio Vector Representation" - type: "audio_vec_embedding" - parameters: { index_name: "audio" } + # - name: "Audio Vector Representation" + # type: "audio_vec_embedding" + # parameters: { index_name: "audio" } postgresql: label: "PostgreSQL" diff --git a/src/worker/media/media_payload_writer.py b/src/worker/media/media_payload_writer.py index 3caedc1a..0da73600 100644 --- a/src/worker/media/media_payload_writer.py +++ b/src/worker/media/media_payload_writer.py @@ -1,22 +1,24 @@ from core.feluda import ComponentType, Feluda from core.logger import Logger from time import sleep +import uuid log = Logger(__name__) try: feluda = Feluda("worker/media/config.yml") feluda.setup() - video_index_queue = feluda.config.queue.parameters.queues[0]["name"] - feluda.start_component(ComponentType.STORE) + media_index_queue = feluda.config.queue.parameters.queues[0]["name"] feluda.start_component(ComponentType.QUEUE) for _ in range(1): + unique_id = str(uuid.uuid4()) dummy_payload = { - "id": str(12345), + "id": unique_id, "path": "https://raw.githubusercontent.com/tattle-made/feluda/main/src/core/operators/sample_data/sample-cat-video.mp4", "media_type": "video" } - feluda.queue.message(video_index_queue, dummy_payload) + feluda.queue.message(media_index_queue, dummy_payload) + sleep(0.3) except Exception as e: - print("Error Initializing Indexer", e) \ No newline at end of file + print("Error Sending Payload", e) \ No newline at end of file diff --git a/src/worker/media/media_worker.py b/src/worker/media/media_worker.py index 1235b156..e410e55f 100644 --- a/src/worker/media/media_worker.py +++ b/src/worker/media/media_worker.py @@ -19,15 +19,16 @@ def make_report_indexed(data, status): report = {} report["indexer_id"] = 1 report["post_id"] = data["id"] + report["media_type"] = data["media_type"] report["status"] = status report["status_code"] = 200 return json.dumps(report) - def make_report_failed(data, status): report = {} report["indexer_id"] = 1 report["post_id"] = data["id"] + report["media_type"] = data["media_type"] report["status"] = status report["status_code"] = 400 return json.dumps(report) @@ -51,14 +52,68 @@ def generator_doc(): return generator_doc +def calc_video_vec_crc(video_vec_gen): + count = 0 + combined_vec = [[]] + for vector in video_vec_gen: + if count == 0: + # skip first vector - mean of keyframes + count += 1 + else: + combined_vec.append(vector["vid_vec"]) + # remove first list which is empty + combined_vec = combined_vec[1:] + combined_vec_arr = np.asarray(combined_vec) + arr_crc = binascii.crc32(combined_vec_arr.tobytes(order='C')) + return arr_crc + def indexer(feluda): def worker(ch, method, properties, body): print("MESSAGE RECEIVED") file_content = json.loads(body) media_type = file_content["media_type"] - print(media_type) + if media_type == "video": + try: + # download the video from url (supports s3) + video_path = VideoFactory.make_from_url(file_content["path"]) + # extract video vectors + video_vec = vid_vec_rep_resnet.run(video_path) + # add crc to database + if feluda.config.postgresql: + video_vec_crc = calc_video_vec_crc(video_vec) + pg_manager.store( + "user_message_inbox_perceptually_similar", + str(video_vec_crc), + "video_vector_crc") + log.info("CRC value added to PostgreSQL") + # generate document to report + doc = generate_document(video_path["path"], video_vec) + media_type = MediaType.VIDEO + # store in ES + if feluda.config.store: + result = feluda.store.store(media_type, doc) + log.info(result) + # send indexed report to report queue + report = make_report_indexed(file_content, "indexed") + feluda.queue.message(feluda.config.queue.parameters.queues[1]["name"], report) + # send ack + ch.basic_ack(delivery_tag=method.delivery_tag) + except Exception as e: + print("Error indexing media", e) + # send failed report to report queue + report = make_report_failed(file_content, "failed") + feluda.queue.message(feluda.config.queue.parameters.queues[1]["name"], report) + # requeue the media file + ch.basic_nack(delivery_tag=method.delivery_tag) + elif media_type == "audio": + pass + else: + log.info("This media type is not supported currently") + # TODO: send a customised report and then report it to the queue with a ack + return worker + def handle_exception(feluda, queue_name, worker_func, retries, max_retries): retry_interval = 60 if retries < max_retries: @@ -75,27 +130,38 @@ def handle_exception(feluda, queue_name, worker_func, retries, max_retries): else: print("Failed to re-establish connection after maximum retries.") + feluda = None pg_manager = None media_index_queue = None try: + # Init Feluda and load config feluda = Feluda("worker/media/config.yml") feluda.setup() - # pg_manager = PostgreSQLManager() - # pg_manager.connect() - # pg_manager.create_trigger_function() - # pg_manager.create_table("user_message_inbox_perceptually_similar") - # pg_manager.create_trigger("user_message_inbox_perceptually_similar") + # check if postgresql exists in config + if feluda.config.postgresql: + pg_manager = PostgreSQLManager() + pg_manager.connect() + pg_manager.create_trigger_function() + pg_manager.create_table("user_message_inbox_perceptually_similar") + pg_manager.create_trigger("user_message_inbox_perceptually_similar") + else: + log.info("PostgreSQL is not defined in the config file") media_index_queue = feluda.config.queue.parameters.queues[0]["name"] - print(media_index_queue) - feluda.start_component(ComponentType.STORE) + # start components and init operators feluda.start_component(ComponentType.QUEUE) - vid_vec_rep_resnet.initialize(param=None) - audio_vec_embedding.initialize(param=None) + # check if store is present in config + if feluda.config.store: + feluda.start_component(ComponentType.STORE) + else: + log.info("Store (ES) is not defined in the config file") + # start listening to the queue feluda.queue.listen(media_index_queue, indexer(feluda)) except Exception as e: print("Error Initializing Indexer", e) + # Try connecting to Queue again retries = 0 max_retries = 10 handle_exception(feluda, media_index_queue, indexer(feluda), retries, max_retries) - pg_manager.close_connection() \ No newline at end of file + if feluda.config.postgresql: + pg_manager.close_connection() From dd974d2837a0b01301f1d66933d99a3f66fcd581 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Wed, 27 Mar 2024 23:24:24 +0530 Subject: [PATCH 04/48] fix: postgres media worker table --- src/worker/media/config.yml | 2 +- src/worker/media/media_worker.py | 17 +++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/worker/media/config.yml b/src/worker/media/config.yml index 46a1264d..b40057f9 100644 --- a/src/worker/media/config.yml +++ b/src/worker/media/config.yml @@ -32,4 +32,4 @@ postgresql: type: "postgresql" parameters: table_names: - - name: "table_name_1" + - name: "user_message_inbox_perceptually_similar" \ No newline at end of file diff --git a/src/worker/media/media_worker.py b/src/worker/media/media_worker.py index e410e55f..865566b3 100644 --- a/src/worker/media/media_worker.py +++ b/src/worker/media/media_worker.py @@ -14,7 +14,6 @@ log = Logger(__name__) - def make_report_indexed(data, status): report = {} report["indexer_id"] = 1 @@ -70,6 +69,7 @@ def calc_video_vec_crc(video_vec_gen): def indexer(feluda): def worker(ch, method, properties, body): print("MESSAGE RECEIVED") + global table_name file_content = json.loads(body) media_type = file_content["media_type"] if media_type == "video": @@ -82,7 +82,7 @@ def worker(ch, method, properties, body): if feluda.config.postgresql: video_vec_crc = calc_video_vec_crc(video_vec) pg_manager.store( - "user_message_inbox_perceptually_similar", + table_name, str(video_vec_crc), "video_vector_crc") log.info("CRC value added to PostgreSQL") @@ -90,9 +90,9 @@ def worker(ch, method, properties, body): doc = generate_document(video_path["path"], video_vec) media_type = MediaType.VIDEO # store in ES - if feluda.config.store: - result = feluda.store.store(media_type, doc) - log.info(result) + # if feluda.config.store: + result = feluda.store.store(media_type, doc) + log.info(result) # send indexed report to report queue report = make_report_indexed(file_content, "indexed") feluda.queue.message(feluda.config.queue.parameters.queues[1]["name"], report) @@ -143,8 +143,9 @@ def handle_exception(feluda, queue_name, worker_func, retries, max_retries): pg_manager = PostgreSQLManager() pg_manager.connect() pg_manager.create_trigger_function() - pg_manager.create_table("user_message_inbox_perceptually_similar") - pg_manager.create_trigger("user_message_inbox_perceptually_similar") + table_name = feluda.config.postgresql.parameters.table_names[0]["name"] + pg_manager.create_table(table_name) + pg_manager.create_trigger(table_name) else: log.info("PostgreSQL is not defined in the config file") media_index_queue = feluda.config.queue.parameters.queues[0]["name"] @@ -164,4 +165,4 @@ def handle_exception(feluda, queue_name, worker_func, retries, max_retries): max_retries = 10 handle_exception(feluda, media_index_queue, indexer(feluda), retries, max_retries) if feluda.config.postgresql: - pg_manager.close_connection() + pg_manager.close_connection() \ No newline at end of file From 2df0db66cc090cb4dce52deb632092d9168dd4e4 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Wed, 27 Mar 2024 23:29:25 +0530 Subject: [PATCH 05/48] chore: store check --- src/worker/media/media_worker.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/worker/media/media_worker.py b/src/worker/media/media_worker.py index 865566b3..79d01ab0 100644 --- a/src/worker/media/media_worker.py +++ b/src/worker/media/media_worker.py @@ -90,9 +90,9 @@ def worker(ch, method, properties, body): doc = generate_document(video_path["path"], video_vec) media_type = MediaType.VIDEO # store in ES - # if feluda.config.store: - result = feluda.store.store(media_type, doc) - log.info(result) + if feluda.config.store: + result = feluda.store.store(media_type, doc) + log.info(result) # send indexed report to report queue report = make_report_indexed(file_content, "indexed") feluda.queue.message(feluda.config.queue.parameters.queues[1]["name"], report) From 9d0fa4eaf2094201a15ee18c1c8c96d4c9ef9d4c Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Wed, 27 Mar 2024 23:44:08 +0530 Subject: [PATCH 06/48] chore: media_type is command line arg in payload writer --- src/worker/media/media_payload_writer.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/worker/media/media_payload_writer.py b/src/worker/media/media_payload_writer.py index 0da73600..e2664774 100644 --- a/src/worker/media/media_payload_writer.py +++ b/src/worker/media/media_payload_writer.py @@ -2,6 +2,7 @@ from core.logger import Logger from time import sleep import uuid +import sys log = Logger(__name__) @@ -10,13 +11,15 @@ feluda.setup() media_index_queue = feluda.config.queue.parameters.queues[0]["name"] feluda.start_component(ComponentType.QUEUE) + # take media_type from command line + media_type = sys.argv[1] if len(sys.argv) > 1 else "video" for _ in range(1): unique_id = str(uuid.uuid4()) dummy_payload = { "id": unique_id, "path": "https://raw.githubusercontent.com/tattle-made/feluda/main/src/core/operators/sample_data/sample-cat-video.mp4", - "media_type": "video" + "media_type": media_type } feluda.queue.message(media_index_queue, dummy_payload) sleep(0.3) From 3a87ce03a3d7d21aa7f0a60a960d28516a7799a8 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Thu, 28 Mar 2024 02:06:01 +0530 Subject: [PATCH 07/48] fix: setting up payload for audio --- src/worker/media/config.yml | 6 +++--- src/worker/media/media_payload_writer.py | 13 ++++++++++--- src/worker/media/media_test.py | 17 +++++++++-------- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/src/worker/media/config.yml b/src/worker/media/config.yml index b40057f9..7901f571 100644 --- a/src/worker/media/config.yml +++ b/src/worker/media/config.yml @@ -23,9 +23,9 @@ operators: - name: "Video Vector Representation" type: "vid_vec_rep_resnet" parameters: { index_name: "video" } - # - name: "Audio Vector Representation" - # type: "audio_vec_embedding" - # parameters: { index_name: "audio" } + - name: "Audio Vector Representation" + type: "audio_vec_embedding" + parameters: { index_name: "audio" } postgresql: label: "PostgreSQL" diff --git a/src/worker/media/media_payload_writer.py b/src/worker/media/media_payload_writer.py index e2664774..874da57c 100644 --- a/src/worker/media/media_payload_writer.py +++ b/src/worker/media/media_payload_writer.py @@ -13,15 +13,22 @@ feluda.start_component(ComponentType.QUEUE) # take media_type from command line media_type = sys.argv[1] if len(sys.argv) > 1 else "video" + media_paths = { + "video": "https://raw.githubusercontent.com/tattle-made/feluda/main/src/core/operators/sample_data/sample-cat-video.mp4", + "audio": "https://raw.githubusercontent.com/tattle-made/feluda/main/src/core/operators/sample_data/audio.wav", + } + path = media_paths.get(media_type) + if path is None: + raise ValueError("Unsupported media type") for _ in range(1): unique_id = str(uuid.uuid4()) dummy_payload = { "id": unique_id, - "path": "https://raw.githubusercontent.com/tattle-made/feluda/main/src/core/operators/sample_data/sample-cat-video.mp4", - "media_type": media_type + "path": path, + "media_type": media_type, } feluda.queue.message(media_index_queue, dummy_payload) sleep(0.3) except Exception as e: - print("Error Sending Payload", e) \ No newline at end of file + print("Error Sending Payload", e) diff --git a/src/worker/media/media_test.py b/src/worker/media/media_test.py index b4d47cba..c766cf33 100644 --- a/src/worker/media/media_test.py +++ b/src/worker/media/media_test.py @@ -1,13 +1,14 @@ from core.models.media_factory import AudioFactory from core.operators import audio_vec_embedding -# audio_url = "https://github.com/aatmanvaidya/audio-files/blob/main/audio30.wav?raw=true" +audio_url = "https://github.com/aatmanvaidya/audio-files/blob/main/audio30.wav" # audio_url = "https://github.com/aatmanvaidya/audio-files/blob/main/mp3-sample-audio.mp3" -audio_url = "https://github.com/aatmanvaidya/audio-files/blob/main/ogg-sample-audio.ogg" +# audio_url = "https://github.com/aatmanvaidya/audio-files/blob/main/ogg-sample-audio.ogg" new_url = audio_url.replace("github.com", "raw.githubusercontent.com").replace("/blob/", "/") -dwn = AudioFactory.make_from_url_to_wav(new_url) -print(dwn) -audio_vec_embedding.initialize(param=None) -audio_emb = audio_vec_embedding.run(dwn) -audio_emb_list = audio_emb.tolist() -print(len(audio_emb_list)) \ No newline at end of file +print(new_url) +# dwn = AudioFactory.make_from_url_to_wav(new_url) +# print(dwn) +# audio_vec_embedding.initialize(param=None) +# audio_emb = audio_vec_embedding.run(dwn) +# audio_emb_list = audio_emb.tolist() +# print(len(audio_emb_list)) \ No newline at end of file From b92a4d47b47abe3f6335e2011c5f9d760c12d6e8 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Thu, 28 Mar 2024 03:03:58 +0530 Subject: [PATCH 08/48] feat: media worker supports audio --- src/worker/media/media_payload_writer.py | 2 +- src/worker/media/media_worker.py | 81 ++++++++++++++++++++---- 2 files changed, 68 insertions(+), 15 deletions(-) diff --git a/src/worker/media/media_payload_writer.py b/src/worker/media/media_payload_writer.py index 874da57c..040a50e4 100644 --- a/src/worker/media/media_payload_writer.py +++ b/src/worker/media/media_payload_writer.py @@ -21,7 +21,7 @@ if path is None: raise ValueError("Unsupported media type") - for _ in range(1): + for _ in range(10): unique_id = str(uuid.uuid4()) dummy_payload = { "id": unique_id, diff --git a/src/worker/media/media_worker.py b/src/worker/media/media_worker.py index 79d01ab0..01677e2e 100644 --- a/src/worker/media/media_worker.py +++ b/src/worker/media/media_worker.py @@ -14,6 +14,7 @@ log = Logger(__name__) + def make_report_indexed(data, status): report = {} report["indexer_id"] = 1 @@ -23,6 +24,7 @@ def make_report_indexed(data, status): report["status_code"] = 200 return json.dumps(report) + def make_report_failed(data, status): report = {} report["indexer_id"] = 1 @@ -32,6 +34,7 @@ def make_report_failed(data, status): report["status_code"] = 400 return json.dumps(report) + def generate_document(post_id: str, representation: any): base_doc = { "e_kosh_id": "", @@ -51,6 +54,7 @@ def generator_doc(): return generator_doc + def calc_video_vec_crc(video_vec_gen): count = 0 combined_vec = [[]] @@ -63,16 +67,23 @@ def calc_video_vec_crc(video_vec_gen): # remove first list which is empty combined_vec = combined_vec[1:] combined_vec_arr = np.asarray(combined_vec) - arr_crc = binascii.crc32(combined_vec_arr.tobytes(order='C')) + arr_crc = binascii.crc32(combined_vec_arr.tobytes(order="C")) + return arr_crc + +def calc_audio_vec_crc(audio_vector): + vec_arr = np.asarray(audio_vector) + arr_crc = binascii.crc32(vec_arr.tobytes(order='C')) return arr_crc + def indexer(feluda): def worker(ch, method, properties, body): print("MESSAGE RECEIVED") global table_name file_content = json.loads(body) - media_type = file_content["media_type"] - if media_type == "video": + file_media_type = file_content["media_type"] + if file_media_type == "video": + log.info("Media Type is Video") try: # download the video from url (supports s3) video_path = VideoFactory.make_from_url(file_content["path"]) @@ -81,12 +92,9 @@ def worker(ch, method, properties, body): # add crc to database if feluda.config.postgresql: video_vec_crc = calc_video_vec_crc(video_vec) - pg_manager.store( - table_name, - str(video_vec_crc), - "video_vector_crc") - log.info("CRC value added to PostgreSQL") - # generate document to report + pg_manager.store(table_name, str(video_vec_crc), "video_vector_crc") + log.info("Video CRC value added to PostgreSQL") + # generate document doc = generate_document(video_path["path"], video_vec) media_type = MediaType.VIDEO # store in ES @@ -95,18 +103,60 @@ def worker(ch, method, properties, body): log.info(result) # send indexed report to report queue report = make_report_indexed(file_content, "indexed") - feluda.queue.message(feluda.config.queue.parameters.queues[1]["name"], report) + feluda.queue.message( + feluda.config.queue.parameters.queues[1]["name"], report + ) # send ack ch.basic_ack(delivery_tag=method.delivery_tag) except Exception as e: print("Error indexing media", e) # send failed report to report queue report = make_report_failed(file_content, "failed") - feluda.queue.message(feluda.config.queue.parameters.queues[1]["name"], report) + feluda.queue.message( + feluda.config.queue.parameters.queues[1]["name"], report + ) + # requeue the media file + ch.basic_nack(delivery_tag=method.delivery_tag) + elif file_media_type == "audio": + log.info("Media Type is Audio") + try: + # download audio file from url (supports S3) + audio_path = AudioFactory.make_from_url(file_content["path"]) + # generate audio vec + audio_vec = audio_vec_embedding.run(audio_path) + # add crc to database + if feluda.config.postgresql: + audio_vec_crc = calc_audio_vec_crc(audio_vec) + pg_manager.store(table_name, str(audio_vec_crc), "audio_vector_crc") + log.info("Audio CRC value added to PostgreSQL") + # generate document + doc = { + "e_kosh_id": str(1231231), + "dataset": "test-dataset-id", + "metadata": {}, + "audio_vec": audio_vec, + "date_added": datetime.utcnow(), + } + media_type = MediaType.AUDIO + # store in ES + if feluda.config.store: + result = feluda.store.store(media_type, doc) + log.info(result) + # send indexed report to report queue + report = make_report_indexed(file_content, "indexed") + feluda.queue.message( + feluda.config.queue.parameters.queues[1]["name"], report + ) + ch.basic_ack(delivery_tag=method.delivery_tag) + except Exception as e: + print("Error indexing media", e) + # send failed report to report queue + report = make_report_failed(file_content, "failed") + feluda.queue.message( + feluda.config.queue.parameters.queues[1]["name"], report + ) # requeue the media file ch.basic_nack(delivery_tag=method.delivery_tag) - elif media_type == "audio": - pass else: log.info("This media type is not supported currently") # TODO: send a customised report and then report it to the queue with a ack @@ -156,6 +206,9 @@ def handle_exception(feluda, queue_name, worker_func, retries, max_retries): feluda.start_component(ComponentType.STORE) else: log.info("Store (ES) is not defined in the config file") + # init all operators + vid_vec_rep_resnet.initialize(param=None) + audio_vec_embedding.initialize(param=None) # start listening to the queue feluda.queue.listen(media_index_queue, indexer(feluda)) except Exception as e: @@ -165,4 +218,4 @@ def handle_exception(feluda, queue_name, worker_func, retries, max_retries): max_retries = 10 handle_exception(feluda, media_index_queue, indexer(feluda), retries, max_retries) if feluda.config.postgresql: - pg_manager.close_connection() \ No newline at end of file + pg_manager.close_connection() From 4e6e4eb6c7c66a299bfcb43dabaeee36d825acbb Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Thu, 28 Mar 2024 16:36:05 +0530 Subject: [PATCH 09/48] chore: adding else condition of media_type --- src/worker/media/media_worker.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/worker/media/media_worker.py b/src/worker/media/media_worker.py index 01677e2e..3275452c 100644 --- a/src/worker/media/media_worker.py +++ b/src/worker/media/media_worker.py @@ -70,9 +70,10 @@ def calc_video_vec_crc(video_vec_gen): arr_crc = binascii.crc32(combined_vec_arr.tobytes(order="C")) return arr_crc + def calc_audio_vec_crc(audio_vector): vec_arr = np.asarray(audio_vector) - arr_crc = binascii.crc32(vec_arr.tobytes(order='C')) + arr_crc = binascii.crc32(vec_arr.tobytes(order="C")) return arr_crc @@ -160,6 +161,11 @@ def worker(ch, method, properties, body): else: log.info("This media type is not supported currently") # TODO: send a customised report and then report it to the queue with a ack + report = make_report_failed(file_content, "failed") + feluda.queue.message( + feluda.config.queue.parameters.queues[1]["name"], report + ) + ch.basic_ack(delivery_tag=method.delivery_tag) return worker From 766b8050e86e4eee23c10bf634b0c72e14091314 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Thu, 4 Apr 2024 13:24:05 +0530 Subject: [PATCH 10/48] feat: Amazon MQ --- src/core/queue/amazon_mq.py | 74 ++++++++++++++++++++++++++++++++++ src/worker/media/media_test.py | 4 +- 2 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 src/core/queue/amazon_mq.py diff --git a/src/core/queue/amazon_mq.py b/src/core/queue/amazon_mq.py new file mode 100644 index 00000000..a5a63ab9 --- /dev/null +++ b/src/core/queue/amazon_mq.py @@ -0,0 +1,74 @@ +import ssl +import pika +import logging +import json +from core.config import QueueConfig +from os import environ + +log = logging.getLogger(__name__) + + +class AmazonMQ: + def __init__(self, param: QueueConfig): + try: + self.rabbitmq_user = environ.get("MQ_USERNAME") + self.rabbitmq_password = environ.get("MQ_PASSWORD") + self.rabbitmq_broker_id = environ.get("MQ_BROKER_ID") + self.region = environ.get("MQ_REGION") + self.queues = [] + for queue in param.parameters.queues: + self.queues.append(queue["name"]) + except Exception: + print("Invalid parameter") + raise TypeError("Invalid parameters passed to AmazonMQ") + + def connect(self): + try: + # SSL Context for TLS configuration of Amazon MQ for RabbitMQ + ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) + ssl_context.set_ciphers("ECDHE+AESGCM:!ECDSA") + + url = f"amqps://{self.rabbitmq_user}:{self.rabbitmq_password}@{self.rabbitmq_broker_id}.mq.{self.region}.amazonaws.com:5671" + parameters = pika.URLParameters(url) + parameters.ssl_options = pika.SSLOptions(context=ssl_context) + + self.connection = pika.BlockingConnection(parameters) + self.channel = self.connection.channel() + print("----> 2 ", "Success Connecting to AmazonMQ") + except Exception: + log.exception("Error Connecting to AmazonMQ") + print("Error Connecting to AmazonMQ") + raise Exception("Error connecting to AmazonMQ") + + def create_queue(self): + for queue_name in self.queues: + self.channel.queue_declare(queue=queue_name) + print("Queue Declared : ", queue_name) + + def is_connected(self): + return self.channel.is_open + + def send_message(self, queue_name, payload): + try: + channel = self.connection.channel() + channel.basic_publish( + exchange="", + routing_key=queue_name, + body=json.dumps(payload), + ) + print(f"Sent message") + except Exception: + log.exception("Error sending message") + print("Error sending message") + raise Exception("Error sending message") + + def listen(self, queue_name, callback): + self.channel.basic_consume( + queue=queue_name, on_message_callback=callback, auto_ack=True + ) + print(" [*] Waiting for messages. To exit press CTRL+C") + self.channel.start_consuming() + + def close(self): + self.channel.close() + self.connection.close() diff --git a/src/worker/media/media_test.py b/src/worker/media/media_test.py index c766cf33..769b4fc4 100644 --- a/src/worker/media/media_test.py +++ b/src/worker/media/media_test.py @@ -1,5 +1,5 @@ -from core.models.media_factory import AudioFactory -from core.operators import audio_vec_embedding +# from core.models.media_factory import AudioFactory +# from core.operators import audio_vec_embedding audio_url = "https://github.com/aatmanvaidya/audio-files/blob/main/audio30.wav" # audio_url = "https://github.com/aatmanvaidya/audio-files/blob/main/mp3-sample-audio.mp3" From 063096cecf0b980d1f95482fc189a7825c8ac917 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Thu, 4 Apr 2024 13:26:38 +0530 Subject: [PATCH 11/48] chore: amazon mq send_message lint fix --- src/core/queue/amazon_mq.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/queue/amazon_mq.py b/src/core/queue/amazon_mq.py index a5a63ab9..c900b818 100644 --- a/src/core/queue/amazon_mq.py +++ b/src/core/queue/amazon_mq.py @@ -56,7 +56,7 @@ def send_message(self, queue_name, payload): routing_key=queue_name, body=json.dumps(payload), ) - print(f"Sent message") + print("Sent message") except Exception: log.exception("Error sending message") print("Error sending message") From 8b92b7fb19daefa83a80c263771dea29c3001417 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Thu, 4 Apr 2024 15:21:44 +0530 Subject: [PATCH 12/48] feat: media worker supports amazon mq --- src/core/config.py | 13 ++++++ src/worker/media/config.yml | 20 ++++----- src/worker/media/media_payload_writer.py | 12 ++++-- src/worker/media/media_worker.py | 52 +++++++++++++++--------- 4 files changed, 64 insertions(+), 33 deletions(-) diff --git a/src/core/config.py b/src/core/config.py index fe1eb139..49f3a452 100644 --- a/src/core/config.py +++ b/src/core/config.py @@ -79,6 +79,18 @@ class PostgreSQLConfig: type: str parameters: PostgreParameters +@dataclass +class AmazonQueueParameters: + host_name: str + queues: List[dict] + + +@dataclass +class AmazonQueueConfig: + label: str + type: str + parameters: AmazonQueueParameters + @dataclass class Config: @@ -87,6 +99,7 @@ class Config: server: Optional[ServerConfig] operators: Optional[OperatorConfig] postgresql: Optional[PostgreSQLConfig] + amazon_queue: Optional[AmazonQueueConfig] def load(filepath) -> Config: diff --git a/src/worker/media/config.yml b/src/worker/media/config.yml index 7901f571..e3147c64 100644 --- a/src/worker/media/config.yml +++ b/src/worker/media/config.yml @@ -8,11 +8,11 @@ store: video_index_name: "video" audio_index_name: "audio" -queue: - label: "Queue" - type: "rabbitmq" +amazon_queue: + label: "Amazon Queue" + type: "amazonmq" parameters: - host_name: "rabbitmq" + host_name: "amazonmq" queues: - name: "media-index-queue" - name: "report-queue" @@ -27,9 +27,9 @@ operators: type: "audio_vec_embedding" parameters: { index_name: "audio" } -postgresql: - label: "PostgreSQL" - type: "postgresql" - parameters: - table_names: - - name: "user_message_inbox_perceptually_similar" \ No newline at end of file +# postgresql: +# label: "PostgreSQL" +# type: "postgresql" +# parameters: +# table_names: +# - name: "user_message_inbox_perceptually_similar" \ No newline at end of file diff --git a/src/worker/media/media_payload_writer.py b/src/worker/media/media_payload_writer.py index 040a50e4..50788507 100644 --- a/src/worker/media/media_payload_writer.py +++ b/src/worker/media/media_payload_writer.py @@ -1,5 +1,6 @@ from core.feluda import ComponentType, Feluda from core.logger import Logger +from core.queue.amazon_mq import AmazonMQ from time import sleep import uuid import sys @@ -9,8 +10,11 @@ try: feluda = Feluda("worker/media/config.yml") feluda.setup() - media_index_queue = feluda.config.queue.parameters.queues[0]["name"] - feluda.start_component(ComponentType.QUEUE) + queue_config = feluda.config.amazon_queue + media_index_queue = queue_config.parameters.queues[0]["name"] + amazom_queue_manager = AmazonMQ(queue_config) + amazom_queue_manager.connect() + amazom_queue_manager.create_queue() # take media_type from command line media_type = sys.argv[1] if len(sys.argv) > 1 else "video" media_paths = { @@ -21,14 +25,14 @@ if path is None: raise ValueError("Unsupported media type") - for _ in range(10): + for _ in range(1): unique_id = str(uuid.uuid4()) dummy_payload = { "id": unique_id, "path": path, "media_type": media_type, } - feluda.queue.message(media_index_queue, dummy_payload) + amazom_queue_manager.send_message(media_index_queue, dummy_payload) sleep(0.3) except Exception as e: print("Error Sending Payload", e) diff --git a/src/worker/media/media_worker.py b/src/worker/media/media_worker.py index 3275452c..efff516a 100644 --- a/src/worker/media/media_worker.py +++ b/src/worker/media/media_worker.py @@ -8,6 +8,7 @@ from core.models.media_factory import VideoFactory from core.models.media_factory import AudioFactory from core.store.postgresql import PostgreSQLManager +from core.queue.amazon_mq import AmazonMQ from time import sleep import numpy as np import binascii @@ -77,7 +78,7 @@ def calc_audio_vec_crc(audio_vector): return arr_crc -def indexer(feluda): +def indexer(feluda, amazom_queue_manager): def worker(ch, method, properties, body): print("MESSAGE RECEIVED") global table_name @@ -104,8 +105,8 @@ def worker(ch, method, properties, body): log.info(result) # send indexed report to report queue report = make_report_indexed(file_content, "indexed") - feluda.queue.message( - feluda.config.queue.parameters.queues[1]["name"], report + amazom_queue_manager.send_message( + feluda.config.amazon_queue.parameters.queues[1]["name"], report ) # send ack ch.basic_ack(delivery_tag=method.delivery_tag) @@ -113,8 +114,8 @@ def worker(ch, method, properties, body): print("Error indexing media", e) # send failed report to report queue report = make_report_failed(file_content, "failed") - feluda.queue.message( - feluda.config.queue.parameters.queues[1]["name"], report + amazom_queue_manager.send_message( + feluda.config.amazon_queue.parameters.queues[1]["name"], report ) # requeue the media file ch.basic_nack(delivery_tag=method.delivery_tag) @@ -145,16 +146,16 @@ def worker(ch, method, properties, body): log.info(result) # send indexed report to report queue report = make_report_indexed(file_content, "indexed") - feluda.queue.message( - feluda.config.queue.parameters.queues[1]["name"], report + amazom_queue_manager.send_message( + feluda.config.amazon_queue.parameters.queues[1]["name"], report ) ch.basic_ack(delivery_tag=method.delivery_tag) except Exception as e: print("Error indexing media", e) # send failed report to report queue report = make_report_failed(file_content, "failed") - feluda.queue.message( - feluda.config.queue.parameters.queues[1]["name"], report + amazom_queue_manager.send_message( + feluda.config.amazon_queue.parameters.queues[1]["name"], report ) # requeue the media file ch.basic_nack(delivery_tag=method.delivery_tag) @@ -162,8 +163,8 @@ def worker(ch, method, properties, body): log.info("This media type is not supported currently") # TODO: send a customised report and then report it to the queue with a ack report = make_report_failed(file_content, "failed") - feluda.queue.message( - feluda.config.queue.parameters.queues[1]["name"], report + amazom_queue_manager.send_message( + feluda.config.amazon_queue.parameters.queues[1]["name"], report ) ch.basic_ack(delivery_tag=method.delivery_tag) @@ -175,8 +176,10 @@ def handle_exception(feluda, queue_name, worker_func, retries, max_retries): if retries < max_retries: print("Inside Handle Exception") try: - feluda.start_component(ComponentType.QUEUE) - feluda.queue.listen(queue_name, worker_func) + amazom_queue_manager = AmazonMQ(queue_config) + amazom_queue_manager.connect() + amazom_queue_manager.create_queue() + amazom_queue_manager.listen(queue_name, worker_func) return except Exception as e: print("Error handling exception:", e) @@ -194,6 +197,12 @@ def handle_exception(feluda, queue_name, worker_func, retries, max_retries): # Init Feluda and load config feluda = Feluda("worker/media/config.yml") feluda.setup() + queue_config = feluda.config.amazon_queue + media_index_queue = queue_config.parameters.queues[0]["name"] + # setup Amazon MQ + amazom_queue_manager = AmazonMQ(queue_config) + amazom_queue_manager.connect() + amazom_queue_manager.create_queue() # check if postgresql exists in config if feluda.config.postgresql: pg_manager = PostgreSQLManager() @@ -204,10 +213,7 @@ def handle_exception(feluda, queue_name, worker_func, retries, max_retries): pg_manager.create_trigger(table_name) else: log.info("PostgreSQL is not defined in the config file") - media_index_queue = feluda.config.queue.parameters.queues[0]["name"] - # start components and init operators - feluda.start_component(ComponentType.QUEUE) - # check if store is present in config + # check if store is present in config and start component if feluda.config.store: feluda.start_component(ComponentType.STORE) else: @@ -216,12 +222,20 @@ def handle_exception(feluda, queue_name, worker_func, retries, max_retries): vid_vec_rep_resnet.initialize(param=None) audio_vec_embedding.initialize(param=None) # start listening to the queue - feluda.queue.listen(media_index_queue, indexer(feluda)) + amazom_queue_manager.listen( + media_index_queue, indexer(feluda, amazom_queue_manager) + ) except Exception as e: print("Error Initializing Indexer", e) # Try connecting to Queue again retries = 0 max_retries = 10 - handle_exception(feluda, media_index_queue, indexer(feluda), retries, max_retries) + handle_exception( + feluda, + media_index_queue, + indexer(feluda, amazom_queue_manager), + retries, + max_retries, + ) if feluda.config.postgresql: pg_manager.close_connection() From 9834490a316aa2a97994f04939bf32f65b8bd12d Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Thu, 4 Apr 2024 16:42:37 +0530 Subject: [PATCH 13/48] fix: audio factory supports s3 download --- src/core/models/media_factory.py | 49 ++++++++++++++++++++++---------- src/worker/media/media_test.py | 30 ++++++++++++++++--- 2 files changed, 60 insertions(+), 19 deletions(-) diff --git a/src/core/models/media_factory.py b/src/core/models/media_factory.py index 91e59993..b81bd84c 100644 --- a/src/core/models/media_factory.py +++ b/src/core/models/media_factory.py @@ -70,7 +70,7 @@ def make_from_file_on_disk(image_path): def make_from_file_in_memory(image_data: FileStorage): pass -class VideoFactory: +class AWSS3Utils: aws_access_key_id = os.getenv('AWS_ACCESS_KEY_ID') aws_secret_access_key = os.getenv('AWS_SECRET_ACCESS_KEY') aws_region = os.getenv('AWS_REGION') @@ -81,13 +81,17 @@ class VideoFactory: region_name=aws_region ) s3 = session.client('s3') + @staticmethod def download_file_from_s3(bucket_name, file_key, local_file_path): try: - VideoFactory.s3.download_file(bucket_name, file_key, local_file_path) + AWSS3Utils.s3.download_file(bucket_name, file_key, local_file_path) print(f"File {file_key} downloaded successfully as {local_file_path}") except Exception as e: print(f"Error downloading file {file_key}: {e}") + raise Exception("Error Downloading file from S3") + +class VideoFactory: @staticmethod def make_from_url(video_url): @@ -105,13 +109,13 @@ def make_from_url(video_url): print("Error downloading video:", e) raise Exception("Error Downloading Video") else: - bucket_name = VideoFactory.aws_bucket + bucket_name = AWSS3Utils.aws_bucket file_key = video_url file_name = file_key.split("/")[-1] file_path = os.path.join(temp_dir, file_name) try: print("Downloading video from S3") - VideoFactory.download_file_from_s3(bucket_name, file_key, file_path) + AWSS3Utils.download_file_from_s3(bucket_name, file_key, file_path) print("Video downloaded") except Exception as e: print("Error downloading video from S3:", e) @@ -135,17 +139,32 @@ class AudioFactory: @staticmethod def make_from_url(audio_url): temp_dir = tempfile.gettempdir() - temp_url = audio_url.split("?")[0] - file_name = temp_url.split("/")[-1] + ".wav" - audio_file = temp_dir + os.sep + file_name - try: - print("Downloading audio from url") - wget.download(audio_url, out=audio_file) - print("audio downloaded") - except Exception as e: - log.exception("Error downloading audio:", e) - raise Exception("Error Downloading audio") - return {"path": audio_file} + + if audio_url.startswith("http"): + temp_url = audio_url.split("?")[0] + file_name = temp_url.split("/")[-1] + ".wav" + file_path = os.path.join(temp_dir, file_name) + try: + print("Downloading audio from URL") + wget.download(audio_url, out=file_path) + print("Audio downloaded") + except Exception as e: + print("Error downloading audio:", e) + raise Exception("Error Downloading audio") + else: + bucket_name = AWSS3Utils.aws_bucket + file_key = audio_url + file_name = file_key.split("/")[-1] + file_path = os.path.join(temp_dir, file_name) + try: + print("Downloading audio from S3") + AWSS3Utils.download_file_from_s3(bucket_name, file_key, file_path) + print("Audio downloaded") + except Exception as e: + print("Error downloading audio from S3:", e) + raise Exception("Error Downloading audio") + + return {"path": file_path} @staticmethod def make_from_url_to_wav(audio_url): diff --git a/src/worker/media/media_test.py b/src/worker/media/media_test.py index 769b4fc4..b8f0f022 100644 --- a/src/worker/media/media_test.py +++ b/src/worker/media/media_test.py @@ -1,14 +1,36 @@ # from core.models.media_factory import AudioFactory # from core.operators import audio_vec_embedding -audio_url = "https://github.com/aatmanvaidya/audio-files/blob/main/audio30.wav" +# audio_url = "https://github.com/aatmanvaidya/audio-files/blob/main/audio30.wav" # audio_url = "https://github.com/aatmanvaidya/audio-files/blob/main/mp3-sample-audio.mp3" # audio_url = "https://github.com/aatmanvaidya/audio-files/blob/main/ogg-sample-audio.ogg" -new_url = audio_url.replace("github.com", "raw.githubusercontent.com").replace("/blob/", "/") -print(new_url) +# new_url = audio_url.replace("github.com", "raw.githubusercontent.com").replace("/blob/", "/") +# print(new_url) # dwn = AudioFactory.make_from_url_to_wav(new_url) # print(dwn) # audio_vec_embedding.initialize(param=None) # audio_emb = audio_vec_embedding.run(dwn) # audio_emb_list = audio_emb.tolist() -# print(len(audio_emb_list)) \ No newline at end of file +# print(len(audio_emb_list)) + +# from core.models.media_factory import VideoFactory, AudioFactory +# from core.operators import vid_vec_rep_resnet +# video_url = "https://raw.githubusercontent.com/tattle-made/feluda/main/src/core/operators/sample_data/sample-cat-video.mp4" +# video_key = "temp/video-01.mp4" +# path = VideoFactory.make_from_url(video_key) +# print(path) +# vid_vec_rep_resnet.initialize(param=None) +# vid_vec = vid_vec_rep_resnet.run(path) +# print(len(list(vid_vec)[0].get('vid_vec'))) + +from core.models.media_factory import AudioFactory +from core.operators import audio_vec_embedding +audio_url = "https://github.com/aatmanvaidya/audio-files/blob/main/audio30.wav" +new_url = audio_url.replace("github.com", "raw.githubusercontent.com").replace("/blob/", "/") +audio_key = "temp/audio-01.wav" +path = AudioFactory.make_from_url(audio_key) +print(path) +audio_vec_embedding.initialize(param=None) +audio_emb = audio_vec_embedding.run(path) +audio_emb_list = audio_emb.tolist() +print(len(audio_emb_list)) From 9ad98f7f8d2f8b59878c206909fc164701489647 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Thu, 4 Apr 2024 16:43:28 +0530 Subject: [PATCH 14/48] chore: deleting media test file --- src/worker/media/media_test.py | 36 ---------------------------------- 1 file changed, 36 deletions(-) delete mode 100644 src/worker/media/media_test.py diff --git a/src/worker/media/media_test.py b/src/worker/media/media_test.py deleted file mode 100644 index b8f0f022..00000000 --- a/src/worker/media/media_test.py +++ /dev/null @@ -1,36 +0,0 @@ -# from core.models.media_factory import AudioFactory -# from core.operators import audio_vec_embedding - -# audio_url = "https://github.com/aatmanvaidya/audio-files/blob/main/audio30.wav" -# audio_url = "https://github.com/aatmanvaidya/audio-files/blob/main/mp3-sample-audio.mp3" -# audio_url = "https://github.com/aatmanvaidya/audio-files/blob/main/ogg-sample-audio.ogg" -# new_url = audio_url.replace("github.com", "raw.githubusercontent.com").replace("/blob/", "/") -# print(new_url) -# dwn = AudioFactory.make_from_url_to_wav(new_url) -# print(dwn) -# audio_vec_embedding.initialize(param=None) -# audio_emb = audio_vec_embedding.run(dwn) -# audio_emb_list = audio_emb.tolist() -# print(len(audio_emb_list)) - -# from core.models.media_factory import VideoFactory, AudioFactory -# from core.operators import vid_vec_rep_resnet -# video_url = "https://raw.githubusercontent.com/tattle-made/feluda/main/src/core/operators/sample_data/sample-cat-video.mp4" -# video_key = "temp/video-01.mp4" -# path = VideoFactory.make_from_url(video_key) -# print(path) -# vid_vec_rep_resnet.initialize(param=None) -# vid_vec = vid_vec_rep_resnet.run(path) -# print(len(list(vid_vec)[0].get('vid_vec'))) - -from core.models.media_factory import AudioFactory -from core.operators import audio_vec_embedding -audio_url = "https://github.com/aatmanvaidya/audio-files/blob/main/audio30.wav" -new_url = audio_url.replace("github.com", "raw.githubusercontent.com").replace("/blob/", "/") -audio_key = "temp/audio-01.wav" -path = AudioFactory.make_from_url(audio_key) -print(path) -audio_vec_embedding.initialize(param=None) -audio_emb = audio_vec_embedding.run(path) -audio_emb_list = audio_emb.tolist() -print(len(audio_emb_list)) From 312ab3fd04046f6eb9fd157c75bf06a419bafdcb Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Thu, 4 Apr 2024 17:33:31 +0530 Subject: [PATCH 15/48] fix: adding contextmanager for hash worker --- src/core/operators/media_file_hash.py | 23 ++++++++++++++++------ src/core/operators/test_media_file_hash.py | 3 ++- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/core/operators/media_file_hash.py b/src/core/operators/media_file_hash.py index 4fb5d01a..513a5903 100644 --- a/src/core/operators/media_file_hash.py +++ b/src/core/operators/media_file_hash.py @@ -1,16 +1,27 @@ def initialize(param): global hashlib import hashlib - + global os + import os + global contextmanager + from contextlib import contextmanager def run(media_path): file_path = media_path["path"] - with open(file_path, "rb") as f: - file_hash = hashlib.blake2b() - while chunk := f.read(4092): - file_hash.update(chunk) - return file_hash.hexdigest() + @contextmanager + def process_file(file_path): + try: + with open(file_path, "rb") as f: + file_hash = hashlib.blake2b() + while chunk := f.read(4092): + file_hash.update(chunk) + yield file_hash.hexdigest() + finally: + os.remove(file_path) + + with process_file(file_path) as hash_value: + return hash_value # if __name__ == "__main__": diff --git a/src/core/operators/test_media_file_hash.py b/src/core/operators/test_media_file_hash.py index 1a1aa14b..f58371e0 100644 --- a/src/core/operators/test_media_file_hash.py +++ b/src/core/operators/test_media_file_hash.py @@ -1,5 +1,5 @@ import unittest -# from unittest.case import skip +from unittest.case import skip from core.operators import media_file_hash from core.models.media_factory import VideoFactory @@ -15,6 +15,7 @@ def tearDownClass(cls): # delete config files pass + @skip def test_sample_media_from_disk(self): media_file_path = VideoFactory.make_from_file_on_disk("core/operators/sample_data/sample-cat-video.mp4") hash = media_file_hash.run(media_file_path) From 692503ecc328b9860905ef14cd295879d6044d3a Mon Sep 17 00:00:00 2001 From: Aurora <5505558+duggalsu@users.noreply.github.com> Date: Fri, 22 Mar 2024 15:47:09 +0530 Subject: [PATCH 16/48] ci: Fix bandit to run from single workflow - Added bandit.yml to run on PR - Disabled bandit from pr-security.yml --- .github/workflows/bandit.yml | 10 +++++++++ .github/workflows/pr-security.yml | 34 +++++++++++++++---------------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/.github/workflows/bandit.yml b/.github/workflows/bandit.yml index 08dec0bb..dbbd6e97 100644 --- a/.github/workflows/bandit.yml +++ b/.github/workflows/bandit.yml @@ -18,6 +18,16 @@ permissions: on: push: branches: [ "main" ] + pull_request: + branches: + - main + - development + - hotfix + types: + - opened + - synchronize + - reopened + - ready_for_review schedule: - cron: '55 4 * * 2' diff --git a/.github/workflows/pr-security.yml b/.github/workflows/pr-security.yml index 14adedf9..af8ee579 100644 --- a/.github/workflows/pr-security.yml +++ b/.github/workflows/pr-security.yml @@ -97,20 +97,20 @@ jobs: with: sarif_file: 'trivy-results.sarif' - - name: Bandit Scan - uses: shundor/python-bandit-scan@9cc5aa4a006482b8a7f91134412df6772dbda22c # v1.0 - with: # optional arguments - # exit with 0, even with results found - exit_zero: false # optional, default is DEFAULT - # File or directory to run bandit on - path: ./src/ # optional, default is . - # Report only issues of a given severity level or higher. Can be LOW, MEDIUM or HIGH. Default is UNDEFINED (everything) - # level: HIGH # optional, default is UNDEFINED - # Report only issues of a given confidence level or higher. Can be LOW, MEDIUM or HIGH. Default is UNDEFINED (everything) - # confidence: # optional, default is UNDEFINED - # comma-separated list of paths (glob patterns supported) to exclude from scan (note that these are in addition to the excluded paths provided in the config file) (default: .svn,CVS,.bzr,.hg,.git,__pycache__,.tox,.eggs,*.egg) - # excluded_paths: # optional, default is DEFAULT - # comma-separated list of test IDs to skip - # skips: # optional, default is DEFAULT - # path to a .bandit file that supplies command line arguments - # ini_path: # optional, default is DEFAULT +# - name: Bandit Scan +# uses: shundor/python-bandit-scan@9cc5aa4a006482b8a7f91134412df6772dbda22c # v1.0 +# with: # optional arguments +# # exit with 0, even with results found +# exit_zero: false # optional, default is DEFAULT +# # File or directory to run bandit on +# path: ./src/ # optional, default is . +# # Report only issues of a given severity level or higher. Can be LOW, MEDIUM or HIGH. Default is UNDEFINED (everything) +# # level: HIGH # optional, default is UNDEFINED +# # Report only issues of a given confidence level or higher. Can be LOW, MEDIUM or HIGH. Default is UNDEFINED (everything) +# # confidence: # optional, default is UNDEFINED +# # comma-separated list of paths (glob patterns supported) to exclude from scan (note that these are in addition to the excluded paths provided in the config file) (default: .svn,CVS,.bzr,.hg,.git,__pycache__,.tox,.eggs,*.egg) +# # excluded_paths: # optional, default is DEFAULT +# # comma-separated list of test IDs to skip +# # skips: # optional, default is DEFAULT +# # path to a .bandit file that supplies command line arguments +# # ini_path: # optional, default is DEFAULT From 41036adebe19c085beaad9bec865f52cb0dc4553 Mon Sep 17 00:00:00 2001 From: Aurora <5505558+duggalsu@users.noreply.github.com> Date: Fri, 22 Mar 2024 16:06:40 +0530 Subject: [PATCH 17/48] - Added conditional exit_zero for bandit --- .github/workflows/bandit.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/bandit.yml b/.github/workflows/bandit.yml index dbbd6e97..e316629c 100644 --- a/.github/workflows/bandit.yml +++ b/.github/workflows/bandit.yml @@ -46,9 +46,11 @@ jobs: - name: Bandit Scan uses: shundor/python-bandit-scan@9cc5aa4a006482b8a7f91134412df6772dbda22c # v1.0 + env: + EXIT_ZERO_VAL: ${{ (github.event_name == 'pull_request') && false || true }} with: # optional arguments - # exit with 0, even with results found - exit_zero: true # optional, default is DEFAULT + # exit with 1 on pull request, else exit with 0 even if results found (on push to main or cron job) + exit_zero: env.EXIT_ZERO_VAL # optional, default is DEFAULT # Github token of the repository (automatically created by Github) GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information. # File or directory to run bandit on From f80d81eb951d68be59201408591552afdfe592de Mon Sep 17 00:00:00 2001 From: Aurora <5505558+duggalsu@users.noreply.github.com> Date: Fri, 22 Mar 2024 16:16:18 +0530 Subject: [PATCH 18/48] - Fix env var boolean setting --- .github/workflows/bandit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/bandit.yml b/.github/workflows/bandit.yml index e316629c..5cb7851b 100644 --- a/.github/workflows/bandit.yml +++ b/.github/workflows/bandit.yml @@ -47,7 +47,7 @@ jobs: - name: Bandit Scan uses: shundor/python-bandit-scan@9cc5aa4a006482b8a7f91134412df6772dbda22c # v1.0 env: - EXIT_ZERO_VAL: ${{ (github.event_name == 'pull_request') && false || true }} + EXIT_ZERO_VAL: ${{ (github.event_name == 'pull_request') && ${{ false }} || ${{ true }} }} with: # optional arguments # exit with 1 on pull request, else exit with 0 even if results found (on push to main or cron job) exit_zero: env.EXIT_ZERO_VAL # optional, default is DEFAULT From 6a1e90838b2e26af981a6ee344b72a4e259b40a0 Mon Sep 17 00:00:00 2001 From: Aurora <5505558+duggalsu@users.noreply.github.com> Date: Fri, 22 Mar 2024 16:38:04 +0530 Subject: [PATCH 19/48] - Set conditional falsy and truthy values --- .github/workflows/bandit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/bandit.yml b/.github/workflows/bandit.yml index 5cb7851b..a7fbfc5a 100644 --- a/.github/workflows/bandit.yml +++ b/.github/workflows/bandit.yml @@ -47,7 +47,7 @@ jobs: - name: Bandit Scan uses: shundor/python-bandit-scan@9cc5aa4a006482b8a7f91134412df6772dbda22c # v1.0 env: - EXIT_ZERO_VAL: ${{ (github.event_name == 'pull_request') && ${{ false }} || ${{ true }} }} + EXIT_ZERO_VAL: ${{ (github.event_name == 'pull_request') && 0 || 1 }} with: # optional arguments # exit with 1 on pull request, else exit with 0 even if results found (on push to main or cron job) exit_zero: env.EXIT_ZERO_VAL # optional, default is DEFAULT From f05fbea9f1672acc64e987650be7bfb6b27450b2 Mon Sep 17 00:00:00 2001 From: Aurora <5505558+duggalsu@users.noreply.github.com> Date: Fri, 22 Mar 2024 16:42:32 +0530 Subject: [PATCH 20/48] - Test switch conditional values --- .github/workflows/bandit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/bandit.yml b/.github/workflows/bandit.yml index a7fbfc5a..001e2c28 100644 --- a/.github/workflows/bandit.yml +++ b/.github/workflows/bandit.yml @@ -47,7 +47,7 @@ jobs: - name: Bandit Scan uses: shundor/python-bandit-scan@9cc5aa4a006482b8a7f91134412df6772dbda22c # v1.0 env: - EXIT_ZERO_VAL: ${{ (github.event_name == 'pull_request') && 0 || 1 }} + EXIT_ZERO_VAL: ${{ (github.event_name == 'pull_request') && true || false }} with: # optional arguments # exit with 1 on pull request, else exit with 0 even if results found (on push to main or cron job) exit_zero: env.EXIT_ZERO_VAL # optional, default is DEFAULT From 0e2a13b22b332dea98d09ca328a25e685e9875ef Mon Sep 17 00:00:00 2001 From: Aurora <5505558+duggalsu@users.noreply.github.com> Date: Fri, 22 Mar 2024 16:49:08 +0530 Subject: [PATCH 21/48] - Modify env settings --- .github/workflows/bandit.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/bandit.yml b/.github/workflows/bandit.yml index 001e2c28..27cbc704 100644 --- a/.github/workflows/bandit.yml +++ b/.github/workflows/bandit.yml @@ -39,6 +39,9 @@ jobs: # actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status runs-on: ubuntu-latest + env: + EXIT_ZERO_VAL: true + steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 with: @@ -46,8 +49,9 @@ jobs: - name: Bandit Scan uses: shundor/python-bandit-scan@9cc5aa4a006482b8a7f91134412df6772dbda22c # v1.0 + if: github.event_name == 'pull_request' env: - EXIT_ZERO_VAL: ${{ (github.event_name == 'pull_request') && true || false }} + EXIT_ZERO_VAL: false with: # optional arguments # exit with 1 on pull request, else exit with 0 even if results found (on push to main or cron job) exit_zero: env.EXIT_ZERO_VAL # optional, default is DEFAULT From c7e3e052d94027f3f65602a5438522cfead0ccd2 Mon Sep 17 00:00:00 2001 From: Aurora <5505558+duggalsu@users.noreply.github.com> Date: Fri, 22 Mar 2024 18:22:10 +0530 Subject: [PATCH 22/48] - Test inverted ternary operator --- .github/workflows/bandit.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/bandit.yml b/.github/workflows/bandit.yml index 27cbc704..a791a0c7 100644 --- a/.github/workflows/bandit.yml +++ b/.github/workflows/bandit.yml @@ -39,9 +39,6 @@ jobs: # actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status runs-on: ubuntu-latest - env: - EXIT_ZERO_VAL: true - steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 with: @@ -49,9 +46,8 @@ jobs: - name: Bandit Scan uses: shundor/python-bandit-scan@9cc5aa4a006482b8a7f91134412df6772dbda22c # v1.0 - if: github.event_name == 'pull_request' env: - EXIT_ZERO_VAL: false + EXIT_ZERO_VAL: ${{ (github.event_name != 'pull_request') && true || false }} with: # optional arguments # exit with 1 on pull request, else exit with 0 even if results found (on push to main or cron job) exit_zero: env.EXIT_ZERO_VAL # optional, default is DEFAULT From 05e23b24101e5e4a937daa0e6399583004203286 Mon Sep 17 00:00:00 2001 From: Aurora <5505558+duggalsu@users.noreply.github.com> Date: Sat, 23 Mar 2024 13:36:30 +0530 Subject: [PATCH 23/48] fix: Added pinned pip package - Added base requirements.in with pip - Created base requirements.txt with pip pinned by hash - Recreated requirements.txt with --allow-unsafe to get correct setuptools - Updated feluda core dockerfile to install pip using base requirements - Updated ci test dockerfile to install pip using base requirements - Updated all benchmark dockerfiles to install pip using base requirements - Updated all worker dockerfiles to install pip using base requirements - Updated readme pip install and pip-compile commands --- README.md | 14 +++++++------- src/Dockerfile | 5 ++++- src/Dockerfile.test | 5 +++-- src/base_requirements.in | 1 + src/base_requirements.txt | 12 ++++++++++++ .../audiovec/Dockerfile.audio_vec_embedding | 4 +++- .../Dockerfile.audio_vec_embedding_graviton | 4 +++- .../imgvec/Dockerfile.image_vec_rep_resnet | 5 ++++- src/benchmark/vidvec/Dockerfile.vid_vec_rep_resnet | 5 ++++- .../vidvec/Dockerfile.vid_vec_rep_resnet_graviton | 4 +++- src/requirements.txt | 13 ++++++++----- src/worker/audiovec/Dockerfile.audio_worker | 5 +++-- .../audiovec/Dockerfile.audio_worker_graviton | 5 +++-- src/worker/hash/Dockerfile.hash_worker | 5 +++-- src/worker/hash/Dockerfile.hash_worker_graviton | 5 +++-- src/worker/vidvec/Dockerfile.video_worker | 5 +++-- src/worker/vidvec/Dockerfile.video_worker_graviton | 5 +++-- 17 files changed, 70 insertions(+), 32 deletions(-) create mode 100644 src/base_requirements.in create mode 100644 src/base_requirements.txt diff --git a/README.md b/README.md index 03cbde43..3d0434d7 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ Please create a new Discussion [here](https://github.com/tattle-made/tattle-api/ ``` # Install locally in venv $ cd src/api/ - $ pip install -r requirements.txt + $ pip install --require-hashes --no-deps -r requirements.txt ``` @@ -67,8 +67,8 @@ Please create a new Discussion [here](https://github.com/tattle-made/tattle-api/ ``` # Install locally in venv $ cd src/api/core/operators/ - $ pip install -r image_vec_rep_resnet_requirements.txt - $ pip install -r vid_vec_rep_resnet_requirements.txt + $ pip install --require-hashes --no-deps -r image_vec_rep_resnet_requirements.txt + $ pip install --require-hashes --no-deps -r vid_vec_rep_resnet_requirements.txt .. # Create the docker containers $ cd src/api/ @@ -127,13 +127,13 @@ Note: ```bash $ cd src/ $ pip install --upgrade pip-tools -$ TMPDIR= pip-compile --verbose --generate-hashes --emit-index-url --emit-find-links requirements.in +$ TMPDIR= pip-compile --verbose --allow-unsafe --generate-hashes --emit-index-url --emit-find-links requirements.in # Updating operators $ cd src/core/operators/ # The link for torch is required since PyPi only hosts the GPU version of torch packages. -$ TMPDIR= pip-compile --verbose --generate-hashes --emit-index-url --emit-find-links --find-links https://download.pytorch.org/whl/torch_stable.html vid_vec_rep_resnet_requirements.in -$ TMPDIR= pip-compile --verbose --generate-hashes --emit-index-url --emit-find-links --find-links https://download.pytorch.org/whl/torch_stable.html audio_vec_embedding_requirements.in +$ TMPDIR= pip-compile --verbose --allow-unsafe --generate-hashes --emit-index-url --emit-find-links --find-links https://download.pytorch.org/whl/torch_stable.html vid_vec_rep_resnet_requirements.in +$ TMPDIR= pip-compile --verbose --allow-unsafe --generate-hashes --emit-index-url --emit-find-links --find-links https://download.pytorch.org/whl/torch_stable.html audio_vec_embedding_requirements.in ``` #### Modify generated `requirements.txt` for platform specific torch packages @@ -199,7 +199,7 @@ torchvision==0.17.0+cpu; platform_machine=='x86_64' \ This is useful to update dependencies e.g. when using `pip-audit` ```bash -$ TMPDIR= pip-compile --verbose --generate-hashes --find-links https://download.pytorch.org/whl/torch_stable.html --upgrade-package == --upgrade-package +$ TMPDIR= pip-compile --verbose --allow-unsafe --generate-hashes --find-links https://download.pytorch.org/whl/torch_stable.html --upgrade-package == --upgrade-package ``` diff --git a/src/Dockerfile b/src/Dockerfile index 5d57e22d..191e60c0 100644 --- a/src/Dockerfile +++ b/src/Dockerfile @@ -26,7 +26,10 @@ WORKDIR /usr/app RUN python -m venv /usr/app/venv && chown -R python:python /usr/app/venv ENV PATH="/usr/app/venv/bin:$PATH" -RUN pip install --no-cache-dir --upgrade pip +# base requirements file +COPY --chown=python:python base_requirements.txt /usr/app/base_requirements.txt +RUN pip install --no-cache-dir --require-hashes --no-deps -r /usr/app/base_requirements.txt + RUN apt-get update && apt-get -y upgrade && apt-get install -y --no-install-recommends vim curl # RUN apt-get install -y ffmpeg # RUN apt-get update && \ diff --git a/src/Dockerfile.test b/src/Dockerfile.test index 7142b781..73cdfff9 100644 --- a/src/Dockerfile.test +++ b/src/Dockerfile.test @@ -24,13 +24,14 @@ RUN python -m venv /home/python/app/venv \ # Set venv in path ENV PATH="/home/python/app/venv/bin:$PATH" -# Copy core and operator requirements +# Copy base, core and operator requirements +COPY --chown=python:python base_requirements.txt /home/python/app/base_requirements.txt COPY --chown=python:python requirements.txt /home/python/app/requirements.txt COPY --chown=python:python ./core/operators/vid_vec_rep_resnet_requirements.txt /home/python/app/core/operators/vid_vec_rep_resnet_requirements.txt COPY --chown=python:python ./core/operators/audio_vec_embedding_requirements.txt /home/python/app/core/operators/audio_vec_embedding_requirements.txt # Run pip install -RUN pip install --no-cache-dir --upgrade pip \ +RUN pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/base_requirements.txt \ && pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/requirements.txt \ && pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/core/operators/vid_vec_rep_resnet_requirements.txt \ && pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/core/operators/audio_vec_embedding_requirements.txt diff --git a/src/base_requirements.in b/src/base_requirements.in new file mode 100644 index 00000000..14d3f4de --- /dev/null +++ b/src/base_requirements.in @@ -0,0 +1 @@ +pip==24.0 \ No newline at end of file diff --git a/src/base_requirements.txt b/src/base_requirements.txt new file mode 100644 index 00000000..2374f317 --- /dev/null +++ b/src/base_requirements.txt @@ -0,0 +1,12 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --allow-unsafe --generate-hashes base_requirements.in +# + +# The following packages are considered to be unsafe in a requirements file: +pip==24.0 \ + --hash=sha256:ba0d021a166865d2265246961bec0152ff124de910c5cc39f1156ce3fa7c69dc \ + --hash=sha256:ea9bd1a847e8c5774a5777bb398c19e80bcd4e2aa16a4b301b718fe6f593aba2 + # via -r base_requirements.in diff --git a/src/benchmark/audiovec/Dockerfile.audio_vec_embedding b/src/benchmark/audiovec/Dockerfile.audio_vec_embedding index cd3d9118..e68a40b8 100644 --- a/src/benchmark/audiovec/Dockerfile.audio_vec_embedding +++ b/src/benchmark/audiovec/Dockerfile.audio_vec_embedding @@ -20,7 +20,9 @@ WORKDIR /usr/app RUN python -m venv /usr/app/venv && chown -R python:python /usr/app/venv ENV PATH="/usr/app/venv/bin:$PATH" -RUN pip install --no-cache-dir --upgrade pip +# base requirements file +COPY --chown=python:python base_requirements.txt /usr/app/base_requirements.txt +RUN pip install --no-cache-dir --require-hashes --no-deps -r /usr/app/base_requirements.txt # audio requirments file COPY --chown=python:python ./core/operators/audio_vec_embedding_requirements.txt /usr/app/core/operators/audio_vec_embedding_requirements.txt diff --git a/src/benchmark/audiovec/Dockerfile.audio_vec_embedding_graviton b/src/benchmark/audiovec/Dockerfile.audio_vec_embedding_graviton index 9a91c65f..86f5ac2c 100644 --- a/src/benchmark/audiovec/Dockerfile.audio_vec_embedding_graviton +++ b/src/benchmark/audiovec/Dockerfile.audio_vec_embedding_graviton @@ -20,7 +20,9 @@ WORKDIR /usr/app RUN python -m venv /usr/app/venv && chown -R python:python /usr/app/venv ENV PATH="/usr/app/venv/bin:$PATH" -RUN pip install --no-cache-dir --upgrade pip +# base requirements file +COPY --chown=python:python base_requirements.txt /usr/app/base_requirements.txt +RUN pip install --no-cache-dir --require-hashes --no-deps -r /usr/app/base_requirements.txt # audio requirments file COPY --chown=python:python ./core/operators/audio_vec_embedding_requirements.txt /usr/app/core/operators/audio_vec_embedding_requirements.txt diff --git a/src/benchmark/imgvec/Dockerfile.image_vec_rep_resnet b/src/benchmark/imgvec/Dockerfile.image_vec_rep_resnet index c84f758d..1eb9fe66 100644 --- a/src/benchmark/imgvec/Dockerfile.image_vec_rep_resnet +++ b/src/benchmark/imgvec/Dockerfile.image_vec_rep_resnet @@ -23,7 +23,10 @@ WORKDIR /usr/app RUN python -m venv /usr/app/venv && chown -R python:python /usr/app/venv ENV PATH="/usr/app/venv/bin:$PATH" -RUN pip install --no-cache-dir --upgrade pip +# base requirements file +COPY --chown=python:python base_requirements.txt /usr/app/base_requirements.txt +RUN pip install --no-cache-dir --require-hashes --no-deps -r /usr/app/base_requirements.txt + COPY --chown=python:python ./core/operators/image_vec_rep_resnet_requirements.txt /usr/app/core/operators/image_vec_rep_resnet_requirements.txt RUN pip install --no-cache-dir --require-hashes --no-deps -r /usr/app/core/operators/image_vec_rep_resnet_requirements.txt COPY --chown=python:python ./core/operators/image_vec_rep_resnet.py /usr/app/core/operators/image_vec_rep_resnet.py diff --git a/src/benchmark/vidvec/Dockerfile.vid_vec_rep_resnet b/src/benchmark/vidvec/Dockerfile.vid_vec_rep_resnet index f68340d2..68d4e41b 100644 --- a/src/benchmark/vidvec/Dockerfile.vid_vec_rep_resnet +++ b/src/benchmark/vidvec/Dockerfile.vid_vec_rep_resnet @@ -20,7 +20,10 @@ WORKDIR /usr/app RUN python -m venv /usr/app/venv && chown -R python:python /usr/app/venv ENV PATH="/usr/app/venv/bin:$PATH" -RUN pip install --no-cache-dir --upgrade pip +# base requirements file +COPY --chown=python:python base_requirements.txt /usr/app/base_requirements.txt +RUN pip install --no-cache-dir --require-hashes --no-deps -r /usr/app/base_requirements.txt + # video requirments file COPY --chown=python:python ./core/operators/vid_vec_rep_resnet_requirements.txt /usr/app/core/operators/vid_vec_rep_resnet_requirements.txt RUN pip install --no-cache-dir --require-hashes --no-deps -r /usr/app/core/operators/vid_vec_rep_resnet_requirements.txt diff --git a/src/benchmark/vidvec/Dockerfile.vid_vec_rep_resnet_graviton b/src/benchmark/vidvec/Dockerfile.vid_vec_rep_resnet_graviton index e1c110c8..deb451d1 100644 --- a/src/benchmark/vidvec/Dockerfile.vid_vec_rep_resnet_graviton +++ b/src/benchmark/vidvec/Dockerfile.vid_vec_rep_resnet_graviton @@ -20,7 +20,9 @@ WORKDIR /usr/app RUN python -m venv /usr/app/venv && chown -R python:python /usr/app/venv ENV PATH="/usr/app/venv/bin:$PATH" -RUN pip install --no-cache-dir --upgrade pip +# base requirements file +COPY --chown=python:python base_requirements.txt /usr/app/base_requirements.txt +RUN pip install --no-cache-dir --require-hashes --no-deps -r /usr/app/base_requirements.txt ### AWS Graviton Optimization ### diff --git a/src/requirements.txt b/src/requirements.txt index 0f0eb1ea..cff3f3c4 100644 --- a/src/requirements.txt +++ b/src/requirements.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --generate-hashes requirements.in +# pip-compile --allow-unsafe --generate-hashes requirements.in # blinker==1.7.0 \ --hash=sha256:c3f865d4d54db7abc53758a01601cf343fe55b84c1de4e3fa910e420b438d5b9 \ @@ -1207,7 +1207,10 @@ zope-interface==6.1 \ --hash=sha256:fddbab55a2473f1d3b8833ec6b7ac31e8211b0aa608df5ab09ce07f3727326de # via gevent -# WARNING: The following packages were not pinned, but pip requires them to be -# pinned when the requirements file includes hashes and the requirement is not -# satisfied by a package already installed. Consider using the --allow-unsafe flag. -# setuptools +# The following packages are considered to be unsafe in a requirements file: +setuptools==69.2.0 \ + --hash=sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e \ + --hash=sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c + # via + # zope-event + # zope-interface diff --git a/src/worker/audiovec/Dockerfile.audio_worker b/src/worker/audiovec/Dockerfile.audio_worker index 40982e02..192a716d 100644 --- a/src/worker/audiovec/Dockerfile.audio_worker +++ b/src/worker/audiovec/Dockerfile.audio_worker @@ -25,12 +25,13 @@ RUN python -m venv /home/python/app/venv \ # Set venv in path ENV PATH="/home/python/app/venv/bin:$PATH" -# Copy core and operator requirements +# Copy base, core and operator requirements +COPY --chown=python:python base_requirements.txt /home/python/app/base_requirements.txt COPY --chown=python:python requirements.txt /home/python/app/requirements.txt COPY --chown=python:python ./core/operators/audio_vec_embedding_requirements.txt /home/python/app/core/operators/audio_vec_embedding_requirements.txt # Run pip install -RUN pip install --no-cache-dir --upgrade pip \ +RUN pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/base_requirements.txt \ && pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/requirements.txt \ && pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/core/operators/audio_vec_embedding_requirements.txt diff --git a/src/worker/audiovec/Dockerfile.audio_worker_graviton b/src/worker/audiovec/Dockerfile.audio_worker_graviton index 82480406..85452457 100644 --- a/src/worker/audiovec/Dockerfile.audio_worker_graviton +++ b/src/worker/audiovec/Dockerfile.audio_worker_graviton @@ -25,12 +25,13 @@ RUN python -m venv /home/python/app/venv \ # Set venv in path ENV PATH="/home/python/app/venv/bin:$PATH" -# Copy core and operator requirements +# Copy base, core and operator requirements +COPY --chown=python:python base_requirements.txt /home/python/app/base_requirements.txt COPY --chown=python:python requirements.txt /home/python/app/requirements.txt COPY --chown=python:python ./core/operators/audio_vec_embedding_requirements.txt /home/python/app/core/operators/audio_vec_embedding_requirements.txt # Run pip install -RUN pip install --no-cache-dir --upgrade pip \ +RUN pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/base_requirements.txt \ && pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/requirements.txt \ && pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/core/operators/audio_vec_embedding_requirements.txt diff --git a/src/worker/hash/Dockerfile.hash_worker b/src/worker/hash/Dockerfile.hash_worker index 4596a8d4..9a0776ba 100644 --- a/src/worker/hash/Dockerfile.hash_worker +++ b/src/worker/hash/Dockerfile.hash_worker @@ -25,11 +25,12 @@ RUN python -m venv /home/python/app/venv \ # Set venv in path ENV PATH="/home/python/app/venv/bin:$PATH" -# Copy core and operator requirements +# Copy base, core and operator requirements +COPY --chown=python:python base_requirements.txt /home/python/app/base_requirements.txt COPY --chown=python:python requirements.txt /home/python/app/requirements.txt # Run pip install -RUN pip install --no-cache-dir --upgrade pip \ +RUN pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/base_requirements.txt \ && pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/requirements.txt ##################################### diff --git a/src/worker/hash/Dockerfile.hash_worker_graviton b/src/worker/hash/Dockerfile.hash_worker_graviton index 786c0b98..cf416ae2 100644 --- a/src/worker/hash/Dockerfile.hash_worker_graviton +++ b/src/worker/hash/Dockerfile.hash_worker_graviton @@ -25,11 +25,12 @@ RUN python -m venv /home/python/app/venv \ # Set venv in path ENV PATH="/home/python/app/venv/bin:$PATH" -# Copy core and operator requirements +# Copy base, core and operator requirements +COPY --chown=python:python base_requirements.txt /home/python/app/base_requirements.txt COPY --chown=python:python requirements.txt /home/python/app/requirements.txt # Run pip install -RUN pip install --no-cache-dir --upgrade pip \ +RUN pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/base_requirements.txt \ && pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/requirements.txt ##################################### diff --git a/src/worker/vidvec/Dockerfile.video_worker b/src/worker/vidvec/Dockerfile.video_worker index b81c7283..89edf5c3 100644 --- a/src/worker/vidvec/Dockerfile.video_worker +++ b/src/worker/vidvec/Dockerfile.video_worker @@ -25,12 +25,13 @@ RUN python -m venv /home/python/app/venv \ # Set venv in path ENV PATH="/home/python/app/venv/bin:$PATH" -# Copy core and operator requirements +# Copy base, core and operator requirements +COPY --chown=python:python base_requirements.txt /home/python/app/base_requirements.txt COPY --chown=python:python requirements.txt /home/python/app/requirements.txt COPY --chown=python:python ./core/operators/vid_vec_rep_resnet_requirements.txt /home/python/app/core/operators/vid_vec_rep_resnet_requirements.txt # Run pip install -RUN pip install --no-cache-dir --upgrade pip \ +RUN pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/base_requirements.txt \ && pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/requirements.txt \ && pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/core/operators/vid_vec_rep_resnet_requirements.txt diff --git a/src/worker/vidvec/Dockerfile.video_worker_graviton b/src/worker/vidvec/Dockerfile.video_worker_graviton index a8cf3ca1..8d6ab69f 100644 --- a/src/worker/vidvec/Dockerfile.video_worker_graviton +++ b/src/worker/vidvec/Dockerfile.video_worker_graviton @@ -25,12 +25,13 @@ RUN python -m venv /home/python/app/venv \ # Set venv in path ENV PATH="/home/python/app/venv/bin:$PATH" -# Copy core and operator requirements +# Copy base, core and operator requirements +COPY --chown=python:python base_requirements.txt /home/python/app/base_requirements.txt COPY --chown=python:python requirements.txt /home/python/app/requirements.txt COPY --chown=python:python ./core/operators/vid_vec_rep_resnet_requirements.txt /home/python/app/core/operators/vid_vec_rep_resnet_requirements.txt # Run pip install -RUN pip install --no-cache-dir --upgrade pip \ +RUN pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/base_requirements.txt \ && pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/requirements.txt \ && pip install --no-cache-dir --require-hashes --no-deps -r /home/python/app/core/operators/vid_vec_rep_resnet_requirements.txt From 0d05b02b01d3ac96005541e7cc4dba04c979cdc8 Mon Sep 17 00:00:00 2001 From: github-actions Date: Sat, 23 Mar 2024 08:16:51 +0000 Subject: [PATCH 24/48] 0.5.1 Automatically generated by python-semantic-release --- CHANGELOG.md | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 20db8c49..e4abb154 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,79 @@ +## v0.5.1 (2024-03-23) + +### Chore + +* chore: Added security policy ([`2628ddb`](https://github.com/tattle-made/feluda/commit/2628ddbbaaf05bae7feb794a3c4c9fed53b650b7)) + +### Ci + +* ci: Fix bandit to run from single workflow +- Added bandit.yml to run on PR +- Disabled bandit from pr-security.yml ([`e441f2e`](https://github.com/tattle-made/feluda/commit/e441f2e14291451d70b61ca955dae71ecc3646cd)) + +* ci: Added ci test for media file hash operator ([`e5f6414`](https://github.com/tattle-made/feluda/commit/e5f64141f3c594f04e0d6f5701a3ae5d9c98bfff)) + +### Fix + +* fix: Added pinned pip package +- Added base requirements.in with pip +- Created base requirements.txt with pip pinned by hash +- Recreated requirements.txt with --allow-unsafe to get correct setuptools +- Updated feluda core dockerfile to install pip using base requirements +- Updated ci test dockerfile to install pip using base requirements +- Updated all benchmark dockerfiles to install pip using base requirements +- Updated all worker dockerfiles to install pip using base requirements +- Updated readme pip install and pip-compile commands ([`810a45e`](https://github.com/tattle-made/feluda/commit/810a45eae4b681799173286b683e64b2d387e38f)) + +### Unknown + +* Merge pull request #239 from tattle-made/hotfix + +Hotfix ([`3113756`](https://github.com/tattle-made/feluda/commit/31137560f3099895918e4e27d35d9537a8344074)) + +* Merge pull request #238 from duggalsu/add_base_requirements + +Add base requirements ([`0391f2a`](https://github.com/tattle-made/feluda/commit/0391f2a5cbc6ab05d663332e3c35179581398479)) + +* Merge pull request #237 from tattle-made/hotfix + +Hotfix ([`83e2efd`](https://github.com/tattle-made/feluda/commit/83e2efd7d643ccd89c1be9c9131e2428dae7aa5e)) + +* Merge pull request #236 from duggalsu/fix_bandit_codeql_warning + +Fix bandit codeql warning ([`a7c05bb`](https://github.com/tattle-made/feluda/commit/a7c05bba72bbff11c5aac44f7e93959f09a3e557)) + +* - Test inverted ternary operator ([`fe03cb5`](https://github.com/tattle-made/feluda/commit/fe03cb5059c53771f7d8f32098f678795be9037c)) + +* - Modify env settings ([`2d48897`](https://github.com/tattle-made/feluda/commit/2d488971013c8cdccc0fd84f320ad012571a7f9e)) + +* - Test switch conditional values ([`7f1315a`](https://github.com/tattle-made/feluda/commit/7f1315a3318f71cc4d915f974369a97c2e392f83)) + +* - Set conditional falsy and truthy values ([`f85d164`](https://github.com/tattle-made/feluda/commit/f85d164d8237b8a01d2f3ffa72c82c383f5268cd)) + +* - Fix env var boolean setting ([`68923a6`](https://github.com/tattle-made/feluda/commit/68923a683dffaeecb2697e51f7d5be16a7e51141)) + +* - Added conditional exit_zero for bandit ([`764b8bb`](https://github.com/tattle-made/feluda/commit/764b8bbf79a9caa3f3445ad9d1981309739704ea)) + +* Merge pull request #235 from tattle-made/hotfix + +Hotfix ([`650a379`](https://github.com/tattle-made/feluda/commit/650a379bbc6ecc92ae4cc5a0e397d17e04a69578)) + +* Merge pull request #234 from duggalsu/add_ci_test_media_file_hash + +Add ci test media file hash ([`88f1d30`](https://github.com/tattle-made/feluda/commit/88f1d3062ef3ada6ecb767cb389c50db9ebfebf5)) + +* Merge pull request #233 from tattle-made/hotfix + +Hotfix ([`13829a6`](https://github.com/tattle-made/feluda/commit/13829a6d4b72dbb49450572d5d827e0c2b88a952)) + +* Merge pull request #232 from duggalsu/add_security_policy + +Add security policy ([`f0f6d70`](https://github.com/tattle-made/feluda/commit/f0f6d701dc3117c16c0e542c0201784c6ae8d7f9)) + + ## v0.5.0 (2024-03-21) ### Chore From 246c6cdd50ff7f6cd09ffbc65e7686e4f9553e20 Mon Sep 17 00:00:00 2001 From: Aurora <5505558+duggalsu@users.noreply.github.com> Date: Sat, 23 Mar 2024 14:19:49 +0530 Subject: [PATCH 25/48] ci: Added using ruff action for CI linting --- .github/workflows/pr-security.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pr-security.yml b/.github/workflows/pr-security.yml index af8ee579..62855e94 100644 --- a/.github/workflows/pr-security.yml +++ b/.github/workflows/pr-security.yml @@ -32,9 +32,9 @@ jobs: python-version: '3.11' - name: Lint with Ruff - run: | - pip install ruff==0.3.2 - ruff --output-format=github ./src/ + uses: chartboost/ruff-action@e18ae971ccee1b2d7bbef113930f00c670b78da4 # v1.0.0 + with: + src: "./src" continue-on-error: false - name: pip audit install setup 1 From 60c47e84171f88aa3e3df890c2f19b4af34dc01b Mon Sep 17 00:00:00 2001 From: Aurora <5505558+duggalsu@users.noreply.github.com> Date: Sat, 23 Mar 2024 15:35:19 +0530 Subject: [PATCH 26/48] ci: Added npm ci for pinned package installation - Added setup node version action --- .github/workflows/prod-deploy.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/prod-deploy.yml b/.github/workflows/prod-deploy.yml index 42b0b693..f23ead47 100644 --- a/.github/workflows/prod-deploy.yml +++ b/.github/workflows/prod-deploy.yml @@ -88,6 +88,10 @@ jobs: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 with: ref: main + - name: "Setup Node version" + uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 + with: + node-version: 16.20.2 - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 with: @@ -97,7 +101,7 @@ jobs: - name: Install Packages run: | cd docs/ - npm install --legacy-peer-deps + npm ci --legacy-peer-deps - name: Build Site run: | From 293d97093f9fe04ac3c20b60125d6190eb4e2a52 Mon Sep 17 00:00:00 2001 From: Aurora <5505558+duggalsu@users.noreply.github.com> Date: Sat, 23 Mar 2024 19:01:04 +0530 Subject: [PATCH 27/48] fix: Add pinned dev requirements - Added dev requirements for feluda core, video and audio benchmark - Fixed video benchmark not working without new boto3 dependency - Fixed audio benchmark not working without new wget dependency --- src/Dockerfile | 5 +- .../audiovec/Dockerfile.audio_vec_embedding | 4 + .../Dockerfile.audio_vec_embedding_graviton | 4 + src/benchmark/audiovec/dev_requirements.in | 1 + src/benchmark/audiovec/dev_requirements.txt | 9 + .../vidvec/Dockerfile.vid_vec_rep_resnet | 5 +- .../Dockerfile.vid_vec_rep_resnet_graviton | 5 +- src/benchmark/vidvec/dev_requirements.in | 6 + src/benchmark/vidvec/dev_requirements.txt | 321 ++++++++++++++++++ src/dev_requirements.in | 2 + src/dev_requirements.txt | 34 ++ 11 files changed, 392 insertions(+), 4 deletions(-) create mode 100644 src/benchmark/audiovec/dev_requirements.in create mode 100644 src/benchmark/audiovec/dev_requirements.txt create mode 100644 src/benchmark/vidvec/dev_requirements.in create mode 100644 src/benchmark/vidvec/dev_requirements.txt create mode 100644 src/dev_requirements.in create mode 100644 src/dev_requirements.txt diff --git a/src/Dockerfile b/src/Dockerfile index 191e60c0..dad2e065 100644 --- a/src/Dockerfile +++ b/src/Dockerfile @@ -65,8 +65,9 @@ WORKDIR /usr/app # Set venv path ENV PATH="/usr/app/venv/bin:$PATH" -# install python packages -RUN pip install --no-cache-dir debugpy nose2 +# dev requirements file +COPY --chown=python:python dev_requirements.txt /usr/app/dev_requirements.txt +RUN pip install --no-cache-dir --require-hashes --no-deps -r /usr/app/dev_requirements.txt # Set unprivileged user with group membership USER python:python diff --git a/src/benchmark/audiovec/Dockerfile.audio_vec_embedding b/src/benchmark/audiovec/Dockerfile.audio_vec_embedding index e68a40b8..19ef8e05 100644 --- a/src/benchmark/audiovec/Dockerfile.audio_vec_embedding +++ b/src/benchmark/audiovec/Dockerfile.audio_vec_embedding @@ -50,5 +50,9 @@ RUN apt-get purge -y --auto-remove \ RUN apt-get update && apt-get install -y --no-install-recommends vim zsh RUN apt-get update && apt-get install -y --no-install-recommends wget +# dev requirements file +COPY --chown=python:python ./benchmark/audiovec/dev_requirements.txt /usr/app/benchmark/audiovec/dev_requirements.txt +RUN pip install --no-cache-dir --require-hashes --no-deps -r /usr/app/benchmark/audiovec/dev_requirements.txt + USER python:python CMD tail -f /dev/null diff --git a/src/benchmark/audiovec/Dockerfile.audio_vec_embedding_graviton b/src/benchmark/audiovec/Dockerfile.audio_vec_embedding_graviton index 86f5ac2c..4e06595e 100644 --- a/src/benchmark/audiovec/Dockerfile.audio_vec_embedding_graviton +++ b/src/benchmark/audiovec/Dockerfile.audio_vec_embedding_graviton @@ -74,5 +74,9 @@ RUN apt-get purge -y --auto-remove \ RUN apt-get update && apt-get install -y --no-install-recommends vim zsh RUN apt-get update && apt-get install -y --no-install-recommends wget +# dev requirements file +COPY --chown=python:python ./benchmark/audiovec/dev_requirements.txt /usr/app/benchmark/audiovec/dev_requirements.txt +RUN pip install --no-cache-dir --require-hashes --no-deps -r /usr/app/benchmark/audiovec/dev_requirements.txt + USER python:python CMD tail -f /dev/null \ No newline at end of file diff --git a/src/benchmark/audiovec/dev_requirements.in b/src/benchmark/audiovec/dev_requirements.in new file mode 100644 index 00000000..75e696ec --- /dev/null +++ b/src/benchmark/audiovec/dev_requirements.in @@ -0,0 +1 @@ +wget==3.2 \ No newline at end of file diff --git a/src/benchmark/audiovec/dev_requirements.txt b/src/benchmark/audiovec/dev_requirements.txt new file mode 100644 index 00000000..157fb25c --- /dev/null +++ b/src/benchmark/audiovec/dev_requirements.txt @@ -0,0 +1,9 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --allow-unsafe --generate-hashes dev_requirements.in +# +wget==3.2 \ + --hash=sha256:35e630eca2aa50ce998b9b1a127bb26b30dfee573702782aa982f875e3f16061 + # via -r dev_requirements.in diff --git a/src/benchmark/vidvec/Dockerfile.vid_vec_rep_resnet b/src/benchmark/vidvec/Dockerfile.vid_vec_rep_resnet index 68d4e41b..c2c4b11e 100644 --- a/src/benchmark/vidvec/Dockerfile.vid_vec_rep_resnet +++ b/src/benchmark/vidvec/Dockerfile.vid_vec_rep_resnet @@ -48,7 +48,10 @@ RUN apt-get purge -y --auto-remove \ && rm -rf /var/lib/apt/lists/* RUN apt-get update && apt-get install -y --no-install-recommends vim zsh wget -RUN pip install --no-cache-dir numpy Pillow wget requests Werkzeug + +# dev requirements file +COPY --chown=python:python ./benchmark/vidvec/dev_requirements.txt /usr/app/benchmark/vidvec/dev_requirements.txt +RUN pip install --no-cache-dir --require-hashes --no-deps -r /usr/app/benchmark/vidvec/dev_requirements.txt USER python:python CMD tail -f /dev/null \ No newline at end of file diff --git a/src/benchmark/vidvec/Dockerfile.vid_vec_rep_resnet_graviton b/src/benchmark/vidvec/Dockerfile.vid_vec_rep_resnet_graviton index deb451d1..d6b47187 100644 --- a/src/benchmark/vidvec/Dockerfile.vid_vec_rep_resnet_graviton +++ b/src/benchmark/vidvec/Dockerfile.vid_vec_rep_resnet_graviton @@ -71,7 +71,10 @@ RUN apt-get purge -y --auto-remove \ && rm -rf /var/lib/apt/lists/* RUN apt-get update && apt-get install -y --no-install-recommends vim zsh wget -RUN pip install --no-cache-dir numpy Pillow wget requests Werkzeug + +# dev requirements file +COPY --chown=python:python ./benchmark/vidvec/dev_requirements.txt /usr/app/benchmark/vidvec/dev_requirements.txt +RUN pip install --no-cache-dir --require-hashes --no-deps -r /usr/app/benchmark/vidvec/dev_requirements.txt USER python:python CMD tail -f /dev/null diff --git a/src/benchmark/vidvec/dev_requirements.in b/src/benchmark/vidvec/dev_requirements.in new file mode 100644 index 00000000..ee167712 --- /dev/null +++ b/src/benchmark/vidvec/dev_requirements.in @@ -0,0 +1,6 @@ +numpy==1.26.4 +pillow==10.2.0 +wget==3.2 +requests==2.31.0 +Werkzeug==3.0.1 +boto3==1.34.64 \ No newline at end of file diff --git a/src/benchmark/vidvec/dev_requirements.txt b/src/benchmark/vidvec/dev_requirements.txt new file mode 100644 index 00000000..4b9f989d --- /dev/null +++ b/src/benchmark/vidvec/dev_requirements.txt @@ -0,0 +1,321 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --allow-unsafe --generate-hashes dev_requirements.in +# +boto3==1.34.64 \ + --hash=sha256:8c6fbd3d45399a4e4685010117fb2dc52fc6afdab5a9460957d463ae0c2cc55d \ + --hash=sha256:e5d681f443645e6953ed0727bf756bf16d85efefcb69cf051d04a070ce65e545 + # via -r dev_requirements.in +botocore==1.34.69 \ + --hash=sha256:d1ab2bff3c2fd51719c2021d9fa2f30fbb9ed0a308f69e9a774ac92c8091380a \ + --hash=sha256:d3802d076d4d507bf506f9845a6970ce43adc3d819dd57c2791f5c19ed6e5950 + # via + # boto3 + # s3transfer +certifi==2024.2.2 \ + --hash=sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f \ + --hash=sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1 + # via requests +charset-normalizer==3.3.2 \ + --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ + --hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \ + --hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \ + --hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \ + --hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \ + --hash=sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 \ + --hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \ + --hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \ + --hash=sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 \ + --hash=sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 \ + --hash=sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 \ + --hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \ + --hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \ + --hash=sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 \ + --hash=sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 \ + --hash=sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a \ + --hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \ + --hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc \ + --hash=sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 \ + --hash=sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 \ + --hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \ + --hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \ + --hash=sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d \ + --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \ + --hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \ + --hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \ + --hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \ + --hash=sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d \ + --hash=sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a \ + --hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \ + --hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \ + --hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \ + --hash=sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 \ + --hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \ + --hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \ + --hash=sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac \ + --hash=sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 \ + --hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \ + --hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \ + --hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \ + --hash=sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 \ + --hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \ + --hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \ + --hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \ + --hash=sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 \ + --hash=sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c \ + --hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \ + --hash=sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 \ + --hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \ + --hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \ + --hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \ + --hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \ + --hash=sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 \ + --hash=sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c \ + --hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \ + --hash=sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 \ + --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \ + --hash=sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 \ + --hash=sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 \ + --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \ + --hash=sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 \ + --hash=sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f \ + --hash=sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d \ + --hash=sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 \ + --hash=sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a \ + --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \ + --hash=sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 \ + --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \ + --hash=sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 \ + --hash=sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 \ + --hash=sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 \ + --hash=sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 \ + --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \ + --hash=sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c \ + --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \ + --hash=sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 \ + --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \ + --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \ + --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \ + --hash=sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c \ + --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \ + --hash=sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 \ + --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \ + --hash=sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b \ + --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \ + --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \ + --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \ + --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ + --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ + --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 + # via requests +idna==3.6 \ + --hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \ + --hash=sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f + # via requests +jmespath==1.0.1 \ + --hash=sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980 \ + --hash=sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe + # via + # boto3 + # botocore +markupsafe==2.1.5 \ + --hash=sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf \ + --hash=sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff \ + --hash=sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f \ + --hash=sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3 \ + --hash=sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532 \ + --hash=sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f \ + --hash=sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617 \ + --hash=sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df \ + --hash=sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4 \ + --hash=sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906 \ + --hash=sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f \ + --hash=sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4 \ + --hash=sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8 \ + --hash=sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371 \ + --hash=sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2 \ + --hash=sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465 \ + --hash=sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52 \ + --hash=sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6 \ + --hash=sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169 \ + --hash=sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad \ + --hash=sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2 \ + --hash=sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0 \ + --hash=sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029 \ + --hash=sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f \ + --hash=sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a \ + --hash=sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced \ + --hash=sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5 \ + --hash=sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c \ + --hash=sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf \ + --hash=sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9 \ + --hash=sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb \ + --hash=sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad \ + --hash=sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3 \ + --hash=sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1 \ + --hash=sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46 \ + --hash=sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc \ + --hash=sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a \ + --hash=sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee \ + --hash=sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900 \ + --hash=sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5 \ + --hash=sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea \ + --hash=sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f \ + --hash=sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5 \ + --hash=sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e \ + --hash=sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a \ + --hash=sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f \ + --hash=sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50 \ + --hash=sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a \ + --hash=sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b \ + --hash=sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4 \ + --hash=sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff \ + --hash=sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2 \ + --hash=sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46 \ + --hash=sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b \ + --hash=sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf \ + --hash=sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5 \ + --hash=sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5 \ + --hash=sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab \ + --hash=sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd \ + --hash=sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68 + # via werkzeug +numpy==1.26.4 \ + --hash=sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b \ + --hash=sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818 \ + --hash=sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20 \ + --hash=sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0 \ + --hash=sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010 \ + --hash=sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a \ + --hash=sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea \ + --hash=sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c \ + --hash=sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71 \ + --hash=sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110 \ + --hash=sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be \ + --hash=sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a \ + --hash=sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a \ + --hash=sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5 \ + --hash=sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed \ + --hash=sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd \ + --hash=sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c \ + --hash=sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e \ + --hash=sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0 \ + --hash=sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c \ + --hash=sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a \ + --hash=sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b \ + --hash=sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0 \ + --hash=sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6 \ + --hash=sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2 \ + --hash=sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a \ + --hash=sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30 \ + --hash=sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218 \ + --hash=sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5 \ + --hash=sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07 \ + --hash=sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2 \ + --hash=sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4 \ + --hash=sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764 \ + --hash=sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef \ + --hash=sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3 \ + --hash=sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f + # via -r dev_requirements.in +pillow==10.2.0 \ + --hash=sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8 \ + --hash=sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39 \ + --hash=sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac \ + --hash=sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869 \ + --hash=sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e \ + --hash=sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04 \ + --hash=sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9 \ + --hash=sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e \ + --hash=sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe \ + --hash=sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef \ + --hash=sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56 \ + --hash=sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa \ + --hash=sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f \ + --hash=sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f \ + --hash=sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e \ + --hash=sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a \ + --hash=sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2 \ + --hash=sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2 \ + --hash=sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5 \ + --hash=sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a \ + --hash=sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2 \ + --hash=sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213 \ + --hash=sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563 \ + --hash=sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591 \ + --hash=sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c \ + --hash=sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2 \ + --hash=sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb \ + --hash=sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757 \ + --hash=sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0 \ + --hash=sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452 \ + --hash=sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad \ + --hash=sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01 \ + --hash=sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f \ + --hash=sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5 \ + --hash=sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61 \ + --hash=sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e \ + --hash=sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b \ + --hash=sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068 \ + --hash=sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9 \ + --hash=sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588 \ + --hash=sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483 \ + --hash=sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f \ + --hash=sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67 \ + --hash=sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7 \ + --hash=sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311 \ + --hash=sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6 \ + --hash=sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72 \ + --hash=sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6 \ + --hash=sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129 \ + --hash=sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13 \ + --hash=sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67 \ + --hash=sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c \ + --hash=sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516 \ + --hash=sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e \ + --hash=sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e \ + --hash=sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364 \ + --hash=sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023 \ + --hash=sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1 \ + --hash=sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04 \ + --hash=sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d \ + --hash=sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a \ + --hash=sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7 \ + --hash=sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb \ + --hash=sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4 \ + --hash=sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e \ + --hash=sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1 \ + --hash=sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48 \ + --hash=sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868 + # via -r dev_requirements.in +python-dateutil==2.9.0.post0 \ + --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ + --hash=sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 + # via botocore +requests==2.31.0 \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 + # via -r dev_requirements.in +s3transfer==0.10.1 \ + --hash=sha256:5683916b4c724f799e600f41dd9e10a9ff19871bf87623cc8f491cb4f5fa0a19 \ + --hash=sha256:ceb252b11bcf87080fb7850a224fb6e05c8a776bab8f2b64b7f25b969464839d + # via boto3 +six==1.16.0 \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + # via python-dateutil +urllib3==2.2.1 \ + --hash=sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d \ + --hash=sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19 + # via + # botocore + # requests +werkzeug==3.0.1 \ + --hash=sha256:507e811ecea72b18a404947aded4b3390e1db8f826b494d76550ef45bb3b1dcc \ + --hash=sha256:90a285dc0e42ad56b34e696398b8122ee4c681833fb35b8334a095d82c56da10 + # via -r dev_requirements.in +wget==3.2 \ + --hash=sha256:35e630eca2aa50ce998b9b1a127bb26b30dfee573702782aa982f875e3f16061 + # via -r dev_requirements.in diff --git a/src/dev_requirements.in b/src/dev_requirements.in new file mode 100644 index 00000000..78a0f8ce --- /dev/null +++ b/src/dev_requirements.in @@ -0,0 +1,2 @@ +debugpy==1.8.1 +nose2==0.14.1 \ No newline at end of file diff --git a/src/dev_requirements.txt b/src/dev_requirements.txt new file mode 100644 index 00000000..89166ec3 --- /dev/null +++ b/src/dev_requirements.txt @@ -0,0 +1,34 @@ +# +# This file is autogenerated by pip-compile with Python 3.11 +# by the following command: +# +# pip-compile --allow-unsafe --generate-hashes dev_requirements.in +# +debugpy==1.8.1 \ + --hash=sha256:016a9fcfc2c6b57f939673c874310d8581d51a0fe0858e7fac4e240c5eb743cb \ + --hash=sha256:0de56aba8249c28a300bdb0672a9b94785074eb82eb672db66c8144fff673146 \ + --hash=sha256:1a9fe0829c2b854757b4fd0a338d93bc17249a3bf69ecf765c61d4c522bb92a8 \ + --hash=sha256:28acbe2241222b87e255260c76741e1fbf04fdc3b6d094fcf57b6c6f75ce1242 \ + --hash=sha256:3a79c6f62adef994b2dbe9fc2cc9cc3864a23575b6e387339ab739873bea53d0 \ + --hash=sha256:3bda0f1e943d386cc7a0e71bfa59f4137909e2ed947fb3946c506e113000f741 \ + --hash=sha256:3ebb70ba1a6524d19fa7bb122f44b74170c447d5746a503e36adc244a20ac539 \ + --hash=sha256:58911e8521ca0c785ac7a0539f1e77e0ce2df753f786188f382229278b4cdf23 \ + --hash=sha256:6df9aa9599eb05ca179fb0b810282255202a66835c6efb1d112d21ecb830ddd3 \ + --hash=sha256:7a3afa222f6fd3d9dfecd52729bc2e12c93e22a7491405a0ecbf9e1d32d45b39 \ + --hash=sha256:7eb7bd2b56ea3bedb009616d9e2f64aab8fc7000d481faec3cd26c98a964bcdd \ + --hash=sha256:92116039b5500633cc8d44ecc187abe2dfa9b90f7a82bbf81d079fcdd506bae9 \ + --hash=sha256:a2e658a9630f27534e63922ebf655a6ab60c370f4d2fc5c02a5b19baf4410ace \ + --hash=sha256:bfb20cb57486c8e4793d41996652e5a6a885b4d9175dd369045dad59eaacea42 \ + --hash=sha256:caad2846e21188797a1f17fc09c31b84c7c3c23baf2516fed5b40b378515bbf0 \ + --hash=sha256:d915a18f0597ef685e88bb35e5d7ab968964b7befefe1aaea1eb5b2640b586c7 \ + --hash=sha256:dda73bf69ea479c8577a0448f8c707691152e6c4de7f0c4dec5a4bc11dee516e \ + --hash=sha256:e38beb7992b5afd9d5244e96ad5fa9135e94993b0c551ceebf3fe1a5d9beb234 \ + --hash=sha256:edcc9f58ec0fd121a25bc950d4578df47428d72e1a0d66c07403b04eb93bcf98 \ + --hash=sha256:efd3fdd3f67a7e576dd869c184c5dd71d9aaa36ded271939da352880c012e703 \ + --hash=sha256:f696d6be15be87aef621917585f9bb94b1dc9e8aced570db1b8a6fc14e8f9b42 \ + --hash=sha256:fd97ed11a4c7f6d042d320ce03d83b20c3fb40da892f994bc041bbc415d7a099 + # via -r dev_requirements.in +nose2==0.14.1 \ + --hash=sha256:7f8f03a21c9de2c33015933afcef72bf8e4a2d5dfec3b40092287de6e41b093a \ + --hash=sha256:dfbf0d90c98b8d7bbf47d7721c7554ffcca86828ec074c985bb6ecc83c445a4e + # via -r dev_requirements.in From 5f7f14a974d9544813ab4af86efc9eea6e9129e2 Mon Sep 17 00:00:00 2001 From: github-actions Date: Sat, 23 Mar 2024 13:42:24 +0000 Subject: [PATCH 28/48] 0.5.2 Automatically generated by python-semantic-release --- CHANGELOG.md | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4abb154..9b6f67e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,45 @@ +## v0.5.2 (2024-03-23) + +### Ci + +* ci: Added npm ci for pinned package installation +- Added setup node version action ([`fd4a8f1`](https://github.com/tattle-made/feluda/commit/fd4a8f10d85aa2688589215a106224bfc7aead68)) + +* ci: Added using ruff action for CI linting ([`ed89995`](https://github.com/tattle-made/feluda/commit/ed89995589dc55b2a251b3c49696c303891d17cf)) + +### Fix + +* fix: Add pinned dev requirements +- Added dev requirements for feluda core, video and audio benchmark +- Fixed video benchmark not working without new boto3 dependency +- Fixed audio benchmark not working without new wget dependency ([`d974e7e`](https://github.com/tattle-made/feluda/commit/d974e7e0ff262e46a779add1e4f1aeaef4e70f25)) + +### Unknown + +* Merge pull request #244 from tattle-made/hotfix + +Hotfix ([`7bae56d`](https://github.com/tattle-made/feluda/commit/7bae56d6cbcf7896bdfe0c79d9e1e76869d04c3d)) + +* Merge pull request #243 from duggalsu/add_dev_requirements + +Add dev requirements ([`aa2c09f`](https://github.com/tattle-made/feluda/commit/aa2c09f9d9607880e3e9eb1e418aa5044294c960)) + +* Merge pull request #242 from tattle-made/hotfix + +Hotfix ([`efb06e5`](https://github.com/tattle-made/feluda/commit/efb06e57791e47b27303e0419307f8b8236669fb)) + +* Merge pull request #241 from duggalsu/use_npm_pinned + +Use npm pinned ([`52a4bbf`](https://github.com/tattle-made/feluda/commit/52a4bbf4e7f24936ee8ed1703fbe806b93da62c9)) + +* Merge pull request #240 from duggalsu/use_ci_ruff_action + +ci: Added using ruff action for CI linting ([`5d7137b`](https://github.com/tattle-made/feluda/commit/5d7137bb29e71a09d30ece4fc9e535bd9c8dd872)) + + ## v0.5.1 (2024-03-23) ### Chore From 2c60f67e8c8fe2f95405386b2df0b7405c8f4965 Mon Sep 17 00:00:00 2001 From: Aurora <5505558+duggalsu@users.noreply.github.com> Date: Thu, 4 Apr 2024 16:08:33 +0530 Subject: [PATCH 29/48] fix: Updated vulnerable pillow dependency in requirements --- src/benchmark/vidvec/dev_requirements.in | 2 +- src/benchmark/vidvec/dev_requirements.txt | 139 +++--- .../audio_vec_embedding_requirements.txt | 141 +++--- .../operators/detect_objects_requirements.txt | 2 +- ...t_text_in_image_tesseract_requirements.txt | 2 +- .../operators/image_phash_requirements.txt | 2 +- .../image_vec_rep_resnet_requirements.in | 2 +- .../image_vec_rep_resnet_requirements.txt | 462 ++++++++++++++++-- ...t_vec_rep_paraphrase_lxml_requirements.txt | 2 +- .../vid_vec_rep_resnet_requirements.in | 2 +- .../vid_vec_rep_resnet_requirements.txt | 141 +++--- src/requirements.in | 2 +- src/requirements.txt | 139 +++--- 13 files changed, 724 insertions(+), 314 deletions(-) diff --git a/src/benchmark/vidvec/dev_requirements.in b/src/benchmark/vidvec/dev_requirements.in index ee167712..a898993e 100644 --- a/src/benchmark/vidvec/dev_requirements.in +++ b/src/benchmark/vidvec/dev_requirements.in @@ -1,5 +1,5 @@ numpy==1.26.4 -pillow==10.2.0 +pillow==10.3.0 wget==3.2 requests==2.31.0 Werkzeug==3.0.1 diff --git a/src/benchmark/vidvec/dev_requirements.txt b/src/benchmark/vidvec/dev_requirements.txt index 4b9f989d..662a3e9d 100644 --- a/src/benchmark/vidvec/dev_requirements.txt +++ b/src/benchmark/vidvec/dev_requirements.txt @@ -220,75 +220,76 @@ numpy==1.26.4 \ --hash=sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3 \ --hash=sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f # via -r dev_requirements.in -pillow==10.2.0 \ - --hash=sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8 \ - --hash=sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39 \ - --hash=sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac \ - --hash=sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869 \ - --hash=sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e \ - --hash=sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04 \ - --hash=sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9 \ - --hash=sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e \ - --hash=sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe \ - --hash=sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef \ - --hash=sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56 \ - --hash=sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa \ - --hash=sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f \ - --hash=sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f \ - --hash=sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e \ - --hash=sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a \ - --hash=sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2 \ - --hash=sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2 \ - --hash=sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5 \ - --hash=sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a \ - --hash=sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2 \ - --hash=sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213 \ - --hash=sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563 \ - --hash=sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591 \ - --hash=sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c \ - --hash=sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2 \ - --hash=sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb \ - --hash=sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757 \ - --hash=sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0 \ - --hash=sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452 \ - --hash=sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad \ - --hash=sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01 \ - --hash=sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f \ - --hash=sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5 \ - --hash=sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61 \ - --hash=sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e \ - --hash=sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b \ - --hash=sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068 \ - --hash=sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9 \ - --hash=sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588 \ - --hash=sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483 \ - --hash=sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f \ - --hash=sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67 \ - --hash=sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7 \ - --hash=sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311 \ - --hash=sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6 \ - --hash=sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72 \ - --hash=sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6 \ - --hash=sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129 \ - --hash=sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13 \ - --hash=sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67 \ - --hash=sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c \ - --hash=sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516 \ - --hash=sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e \ - --hash=sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e \ - --hash=sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364 \ - --hash=sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023 \ - --hash=sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1 \ - --hash=sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04 \ - --hash=sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d \ - --hash=sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a \ - --hash=sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7 \ - --hash=sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb \ - --hash=sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4 \ - --hash=sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e \ - --hash=sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1 \ - --hash=sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48 \ - --hash=sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868 +pillow==10.3.0 \ + --hash=sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c \ + --hash=sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2 \ + --hash=sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb \ + --hash=sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d \ + --hash=sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa \ + --hash=sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3 \ + --hash=sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1 \ + --hash=sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a \ + --hash=sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd \ + --hash=sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8 \ + --hash=sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999 \ + --hash=sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599 \ + --hash=sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936 \ + --hash=sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375 \ + --hash=sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d \ + --hash=sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b \ + --hash=sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60 \ + --hash=sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572 \ + --hash=sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3 \ + --hash=sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced \ + --hash=sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f \ + --hash=sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b \ + --hash=sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19 \ + --hash=sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f \ + --hash=sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d \ + --hash=sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383 \ + --hash=sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795 \ + --hash=sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355 \ + --hash=sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57 \ + --hash=sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09 \ + --hash=sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b \ + --hash=sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462 \ + --hash=sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf \ + --hash=sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f \ + --hash=sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a \ + --hash=sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad \ + --hash=sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9 \ + --hash=sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d \ + --hash=sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45 \ + --hash=sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994 \ + --hash=sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d \ + --hash=sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338 \ + --hash=sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463 \ + --hash=sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451 \ + --hash=sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591 \ + --hash=sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c \ + --hash=sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd \ + --hash=sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32 \ + --hash=sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9 \ + --hash=sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf \ + --hash=sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5 \ + --hash=sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828 \ + --hash=sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3 \ + --hash=sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5 \ + --hash=sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2 \ + --hash=sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b \ + --hash=sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2 \ + --hash=sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475 \ + --hash=sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3 \ + --hash=sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb \ + --hash=sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef \ + --hash=sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015 \ + --hash=sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002 \ + --hash=sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170 \ + --hash=sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84 \ + --hash=sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57 \ + --hash=sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f \ + --hash=sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27 \ + --hash=sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a # via -r dev_requirements.in python-dateutil==2.9.0.post0 \ --hash=sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3 \ diff --git a/src/core/operators/audio_vec_embedding_requirements.txt b/src/core/operators/audio_vec_embedding_requirements.txt index c7cca1a6..6e08c92a 100644 --- a/src/core/operators/audio_vec_embedding_requirements.txt +++ b/src/core/operators/audio_vec_embedding_requirements.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --find-links=https://download.pytorch.org/whl/torch_stable.html --generate-hashes audio_vec_embedding_requirements.in +# pip-compile --allow-unsafe --find-links=https://download.pytorch.org/whl/torch_stable.html --generate-hashes audio_vec_embedding_requirements.in # # For arm64 architecture @@ -738,75 +738,76 @@ panns-inference==0.1.1 \ --hash=sha256:97f6b56b6c9467cf00e21f041e1f88933188c65c1b5ca64eeb3c92e37fb27fc2 \ --hash=sha256:f8074268513571775e154294729b66fc0ccbdbeceb5c8f6eaa9670664e40c03d # via -r audio_vec_embedding_requirements.in -pillow==10.2.0 \ - --hash=sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8 \ - --hash=sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39 \ - --hash=sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac \ - --hash=sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869 \ - --hash=sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e \ - --hash=sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04 \ - --hash=sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9 \ - --hash=sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e \ - --hash=sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe \ - --hash=sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef \ - --hash=sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56 \ - --hash=sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa \ - --hash=sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f \ - --hash=sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f \ - --hash=sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e \ - --hash=sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a \ - --hash=sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2 \ - --hash=sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2 \ - --hash=sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5 \ - --hash=sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a \ - --hash=sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2 \ - --hash=sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213 \ - --hash=sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563 \ - --hash=sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591 \ - --hash=sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c \ - --hash=sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2 \ - --hash=sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb \ - --hash=sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757 \ - --hash=sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0 \ - --hash=sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452 \ - --hash=sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad \ - --hash=sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01 \ - --hash=sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f \ - --hash=sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5 \ - --hash=sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61 \ - --hash=sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e \ - --hash=sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b \ - --hash=sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068 \ - --hash=sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9 \ - --hash=sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588 \ - --hash=sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483 \ - --hash=sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f \ - --hash=sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67 \ - --hash=sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7 \ - --hash=sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311 \ - --hash=sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6 \ - --hash=sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72 \ - --hash=sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6 \ - --hash=sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129 \ - --hash=sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13 \ - --hash=sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67 \ - --hash=sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c \ - --hash=sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516 \ - --hash=sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e \ - --hash=sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e \ - --hash=sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364 \ - --hash=sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023 \ - --hash=sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1 \ - --hash=sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04 \ - --hash=sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d \ - --hash=sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a \ - --hash=sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7 \ - --hash=sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb \ - --hash=sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4 \ - --hash=sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e \ - --hash=sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1 \ - --hash=sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48 \ - --hash=sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868 +pillow==10.3.0 \ + --hash=sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c \ + --hash=sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2 \ + --hash=sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb \ + --hash=sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d \ + --hash=sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa \ + --hash=sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3 \ + --hash=sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1 \ + --hash=sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a \ + --hash=sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd \ + --hash=sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8 \ + --hash=sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999 \ + --hash=sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599 \ + --hash=sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936 \ + --hash=sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375 \ + --hash=sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d \ + --hash=sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b \ + --hash=sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60 \ + --hash=sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572 \ + --hash=sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3 \ + --hash=sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced \ + --hash=sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f \ + --hash=sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b \ + --hash=sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19 \ + --hash=sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f \ + --hash=sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d \ + --hash=sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383 \ + --hash=sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795 \ + --hash=sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355 \ + --hash=sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57 \ + --hash=sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09 \ + --hash=sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b \ + --hash=sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462 \ + --hash=sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf \ + --hash=sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f \ + --hash=sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a \ + --hash=sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad \ + --hash=sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9 \ + --hash=sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d \ + --hash=sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45 \ + --hash=sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994 \ + --hash=sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d \ + --hash=sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338 \ + --hash=sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463 \ + --hash=sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451 \ + --hash=sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591 \ + --hash=sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c \ + --hash=sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd \ + --hash=sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32 \ + --hash=sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9 \ + --hash=sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf \ + --hash=sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5 \ + --hash=sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828 \ + --hash=sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3 \ + --hash=sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5 \ + --hash=sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2 \ + --hash=sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b \ + --hash=sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2 \ + --hash=sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475 \ + --hash=sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3 \ + --hash=sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb \ + --hash=sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef \ + --hash=sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015 \ + --hash=sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002 \ + --hash=sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170 \ + --hash=sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84 \ + --hash=sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57 \ + --hash=sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f \ + --hash=sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27 \ + --hash=sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a # via matplotlib platformdirs==4.2.0 \ --hash=sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068 \ diff --git a/src/core/operators/detect_objects_requirements.txt b/src/core/operators/detect_objects_requirements.txt index 904e3c7e..78cfbf6e 100644 --- a/src/core/operators/detect_objects_requirements.txt +++ b/src/core/operators/detect_objects_requirements.txt @@ -85,7 +85,7 @@ pandas==2.2.0 # via # seaborn # ultralytics -pillow==10.2.0 +pillow==10.3.0 # via # matplotlib # torchvision diff --git a/src/core/operators/detect_text_in_image_tesseract_requirements.txt b/src/core/operators/detect_text_in_image_tesseract_requirements.txt index 73f11fb4..7f56561a 100644 --- a/src/core/operators/detect_text_in_image_tesseract_requirements.txt +++ b/src/core/operators/detect_text_in_image_tesseract_requirements.txt @@ -6,7 +6,7 @@ # packaging==23.2 # via pytesseract -pillow==10.2.0 +pillow==10.3.0 # via pytesseract pytesseract==0.3.10 # via -r detect_text_in_image_tesseract_requirements.in diff --git a/src/core/operators/image_phash_requirements.txt b/src/core/operators/image_phash_requirements.txt index b5d40e96..939880eb 100644 --- a/src/core/operators/image_phash_requirements.txt +++ b/src/core/operators/image_phash_requirements.txt @@ -11,7 +11,7 @@ numpy==1.26.3 # imagehash # pywavelets # scipy -pillow==10.2.0 +pillow==10.3.0 # via imagehash pywavelets==1.5.0 # via imagehash diff --git a/src/core/operators/image_vec_rep_resnet_requirements.in b/src/core/operators/image_vec_rep_resnet_requirements.in index 9a99442c..bd294be6 100644 --- a/src/core/operators/image_vec_rep_resnet_requirements.in +++ b/src/core/operators/image_vec_rep_resnet_requirements.in @@ -1,6 +1,6 @@ torch==2.1.2+cpu torchvision==0.16.2+cpu numpy==1.26.3 -Pillow==10.2.0 # dev +Pillow==10.3.0 # dev memray==1.11.0 pyinstrument==4.6.2 \ No newline at end of file diff --git a/src/core/operators/image_vec_rep_resnet_requirements.txt b/src/core/operators/image_vec_rep_resnet_requirements.txt index 706e8b85..257f100e 100644 --- a/src/core/operators/image_vec_rep_resnet_requirements.txt +++ b/src/core/operators/image_vec_rep_resnet_requirements.txt @@ -2,76 +2,482 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --find-links=https://download.pytorch.org/whl/torch_stable.html image_vec_rep_resnet_requirements.in +# pip-compile --allow-unsafe --find-links=https://download.pytorch.org/whl/torch_stable.html --generate-hashes image_vec_rep_resnet_requirements.in # --find-links https://download.pytorch.org/whl/torch_stable.html -certifi==2024.2.2 +certifi==2024.2.2 \ + --hash=sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f \ + --hash=sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1 # via requests -charset-normalizer==3.3.2 +charset-normalizer==3.3.2 \ + --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ + --hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \ + --hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \ + --hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \ + --hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \ + --hash=sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 \ + --hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \ + --hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \ + --hash=sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 \ + --hash=sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 \ + --hash=sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 \ + --hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \ + --hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \ + --hash=sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 \ + --hash=sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 \ + --hash=sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a \ + --hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \ + --hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc \ + --hash=sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 \ + --hash=sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 \ + --hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \ + --hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \ + --hash=sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d \ + --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \ + --hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \ + --hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \ + --hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \ + --hash=sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d \ + --hash=sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a \ + --hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \ + --hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \ + --hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \ + --hash=sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 \ + --hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \ + --hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \ + --hash=sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac \ + --hash=sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 \ + --hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \ + --hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \ + --hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \ + --hash=sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 \ + --hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \ + --hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \ + --hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \ + --hash=sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 \ + --hash=sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c \ + --hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \ + --hash=sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 \ + --hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \ + --hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \ + --hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \ + --hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \ + --hash=sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 \ + --hash=sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c \ + --hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \ + --hash=sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 \ + --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \ + --hash=sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 \ + --hash=sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 \ + --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \ + --hash=sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 \ + --hash=sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f \ + --hash=sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d \ + --hash=sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 \ + --hash=sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a \ + --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \ + --hash=sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 \ + --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \ + --hash=sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 \ + --hash=sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 \ + --hash=sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 \ + --hash=sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 \ + --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \ + --hash=sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c \ + --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \ + --hash=sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 \ + --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \ + --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \ + --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \ + --hash=sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c \ + --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \ + --hash=sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 \ + --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \ + --hash=sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b \ + --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \ + --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \ + --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \ + --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ + --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ + --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 # via requests -filelock==3.13.1 +filelock==3.13.1 \ + --hash=sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e \ + --hash=sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c # via torch -fsspec==2024.2.0 +fsspec==2024.2.0 \ + --hash=sha256:817f969556fa5916bc682e02ca2045f96ff7f586d45110fcb76022063ad2c7d8 \ + --hash=sha256:b6ad1a679f760dda52b1168c859d01b7b80648ea6f7f7c7f5a8a91dc3f3ecb84 # via torch -idna==3.6 +idna==3.6 \ + --hash=sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca \ + --hash=sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f # via requests -jinja2==3.1.3 +jinja2==3.1.3 \ + --hash=sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa \ + --hash=sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90 # via # memray # torch -linkify-it-py==2.0.3 +linkify-it-py==2.0.3 \ + --hash=sha256:68cda27e162e9215c17d786649d1da0021a451bdc436ef9e0fa0ba5234b9b048 \ + --hash=sha256:6bcbc417b0ac14323382aef5c5192c0075bf8a9d6b41820a2b66371eac6b6d79 # via markdown-it-py -markdown-it-py[linkify,plugins]==3.0.0 +markdown-it-py[linkify,plugins]==3.0.0 \ + --hash=sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1 \ + --hash=sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb # via # mdit-py-plugins # rich # textual -markupsafe==2.1.5 +markupsafe==2.1.5 \ + --hash=sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf \ + --hash=sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff \ + --hash=sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f \ + --hash=sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3 \ + --hash=sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532 \ + --hash=sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f \ + --hash=sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617 \ + --hash=sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df \ + --hash=sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4 \ + --hash=sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906 \ + --hash=sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f \ + --hash=sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4 \ + --hash=sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8 \ + --hash=sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371 \ + --hash=sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2 \ + --hash=sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465 \ + --hash=sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52 \ + --hash=sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6 \ + --hash=sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169 \ + --hash=sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad \ + --hash=sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2 \ + --hash=sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0 \ + --hash=sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029 \ + --hash=sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f \ + --hash=sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a \ + --hash=sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced \ + --hash=sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5 \ + --hash=sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c \ + --hash=sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf \ + --hash=sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9 \ + --hash=sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb \ + --hash=sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad \ + --hash=sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3 \ + --hash=sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1 \ + --hash=sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46 \ + --hash=sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc \ + --hash=sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a \ + --hash=sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee \ + --hash=sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900 \ + --hash=sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5 \ + --hash=sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea \ + --hash=sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f \ + --hash=sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5 \ + --hash=sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e \ + --hash=sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a \ + --hash=sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f \ + --hash=sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50 \ + --hash=sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a \ + --hash=sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b \ + --hash=sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4 \ + --hash=sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff \ + --hash=sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2 \ + --hash=sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46 \ + --hash=sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b \ + --hash=sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf \ + --hash=sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5 \ + --hash=sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5 \ + --hash=sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab \ + --hash=sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd \ + --hash=sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68 # via jinja2 -mdit-py-plugins==0.4.0 +mdit-py-plugins==0.4.0 \ + --hash=sha256:b51b3bb70691f57f974e257e367107857a93b36f322a9e6d44ca5bf28ec2def9 \ + --hash=sha256:d8ab27e9aed6c38aa716819fedfde15ca275715955f8a185a8e1cf90fb1d2c1b # via markdown-it-py -mdurl==0.1.2 +mdurl==0.1.2 \ + --hash=sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8 \ + --hash=sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba # via markdown-it-py -memray==1.11.0 +memray==1.11.0 \ + --hash=sha256:016a68de76fc800554fcc7dc473e48092d749b3b4302a6babd2e592a5fe8ae5e \ + --hash=sha256:0814a234cceaa664184ede2ebada2923e89c6b358b5bb9d71409a35ecae1623b \ + --hash=sha256:0a5b31192d8a8d44d12320873f231c22e6ea5aed079b880cf21556ab34b3f526 \ + --hash=sha256:0ea78c073e8c5c408d4034f2da04031d0dfa8e1eface5512b350d81766aebb25 \ + --hash=sha256:0ed869e4a82722a4558da749f39d6079f2ef5e767d1399d2d090b04742e2b3f2 \ + --hash=sha256:1534520c3c3e6b8234fe13c6d36bd74ab855dc19cef6e9d190a2a0b48fd2d83d \ + --hash=sha256:16a6ce38566029433323f7c0dfc76732a47158eee3de4c1734f00ad36d953181 \ + --hash=sha256:1dbb599c66ffaf1467c4f96aabbecbf30b58963366f17e07bea869c95bec7f72 \ + --hash=sha256:24894d1f5c63cdaba137199ad989d8882485ecb4190d1ff7dc5214ac84484a06 \ + --hash=sha256:266736c1471ddfb59d03e6d78f93f55fd0ab2fe800b9929fc5256d9208efc4a2 \ + --hash=sha256:39bbf9e74c3933a84c22e047920a0f6e2d491ba943a39f4aa041f1c0422c8403 \ + --hash=sha256:3fc83741aedd6daa9c49ecee0a8e0048f278b6eb1ae22bdcf9b4523be7ba7106 \ + --hash=sha256:50889d09343993513113b21ad86a7d56e128abdb9a526c4fd394df7a3a7bda78 \ + --hash=sha256:68f15ff78a6f44344599209bc0d1e5e5d608e81bd2c9b5f02824d08751cf07d9 \ + --hash=sha256:6bf07fef1a66b96126bc0f398e01c3860e59f01eb89b244cfdcc36e70b68edad \ + --hash=sha256:6e9a74eaa673cf4c87302bd0845586a072dba7fc172a3960af64b1ad5cedf00f \ + --hash=sha256:6f46e00d4a10a7fb73b560e57689a68ca3661bf969e228093d20fc1313c42f0b \ + --hash=sha256:72df1994a39018c4687a75c1750b7be3bfcd5c0c5e79e9ed73b552d4d5077588 \ + --hash=sha256:7824202d23e3060c7a0380e1a9bb6f131f47ee29c6f30b322e844648ea3aa9da \ + --hash=sha256:7fb0ae51e06e90336573ed9454cc05541075756e633023550086f8f1882bd38b \ + --hash=sha256:89fdfbdd8ec5d9fad75b7ee487de6b2394856235511b1950c3505e78afbc8170 \ + --hash=sha256:8b2819a6612b771ffab2d80f518cf602aeec7bacee9659c6f7af40596fbfe9f6 \ + --hash=sha256:9076942a66a03a7a3e668314cd00f720db31116df7e8626808150e4e22a079cd \ + --hash=sha256:9c577e81f8f7cd1418c7bfae4651d9bb3f16b72200e4b8d9b80c71aeeab64bb8 \ + --hash=sha256:9fbb2a1a82e24f0f90a9bb4ca7af6174ce91c5f3b3ce58e0b16361e989ea7cc1 \ + --hash=sha256:a4f012204aaeb233c5414e776d04d468d7a542da259811b059a89a519032e2ec \ + --hash=sha256:ad1aeec47f1abb37ca6bd4a5a8be8c556e7456fe2e4a5c79b7bc32eaac916b24 \ + --hash=sha256:ad1f2bb1223759e6b9755b6139087f6bcbaca1718cfed70c31aba0943542b431 \ + --hash=sha256:b8e02e8bbe03826c5e65c2cc28760b1d0bc59f9bee6d6769c01e800b50542f5b \ + --hash=sha256:c3dfb2c20fbbb128489f7b9f5bd2704bae6f77dba11c253cccf8eb8299697fe4 \ + --hash=sha256:c5b8860e3cc7df4f7f451e043aabe60a3812f99c3e308f0c4c0e7a03d72c1563 \ + --hash=sha256:db4ebee46c24212a357641fe9fb893c842bfc66bee25546ff2efe9350e850138 \ + --hash=sha256:dd5a91fc0632896b524ad7b121146e991176252cd072bb06ea2596042232a04f \ + --hash=sha256:eedea42d13b3630faa5591e298659f34e6ead06aa867050def12de6cc03e1a97 \ + --hash=sha256:f72c111a4868d0f2b4e4fb9ba4da736db8c73b6fb0ac6e6f2deca8ee540eb688 \ + --hash=sha256:f83b34f92781f22ef6a7b7f4a67258deb516a06f86c713da33211a6db4fc9ea6 \ + --hash=sha256:fc9372c1f0161b245a235b12ff3d5dc1a05216ad3fde158e62d1143b7f3b99cc # via -r image_vec_rep_resnet_requirements.in -mpmath==1.3.0 +mpmath==1.3.0 \ + --hash=sha256:7a28eb2a9774d00c7bc92411c19a89209d5da7c4c9a9e227be8330a23a25b91f \ + --hash=sha256:a0b2b9fe80bbcd81a6647ff13108738cfb482d481d826cc0e02f5b35e5c88d2c # via sympy -networkx==3.2.1 +networkx==3.2.1 \ + --hash=sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6 \ + --hash=sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2 # via torch -numpy==1.26.3 +numpy==1.26.3 \ + --hash=sha256:02f98011ba4ab17f46f80f7f8f1c291ee7d855fcef0a5a98db80767a468c85cd \ + --hash=sha256:0b7e807d6888da0db6e7e75838444d62495e2b588b99e90dd80c3459594e857b \ + --hash=sha256:12c70ac274b32bc00c7f61b515126c9205323703abb99cd41836e8125ea0043e \ + --hash=sha256:1666f634cb3c80ccbd77ec97bc17337718f56d6658acf5d3b906ca03e90ce87f \ + --hash=sha256:18c3319a7d39b2c6a9e3bb75aab2304ab79a811ac0168a671a62e6346c29b03f \ + --hash=sha256:211ddd1e94817ed2d175b60b6374120244a4dd2287f4ece45d49228b4d529178 \ + --hash=sha256:21a9484e75ad018974a2fdaa216524d64ed4212e418e0a551a2d83403b0531d3 \ + --hash=sha256:39763aee6dfdd4878032361b30b2b12593fb445ddb66bbac802e2113eb8a6ac4 \ + --hash=sha256:3c67423b3703f8fbd90f5adaa37f85b5794d3366948efe9a5190a5f3a83fc34e \ + --hash=sha256:46f47ee566d98849323f01b349d58f2557f02167ee301e5e28809a8c0e27a2d0 \ + --hash=sha256:51c7f1b344f302067b02e0f5b5d2daa9ed4a721cf49f070280ac202738ea7f00 \ + --hash=sha256:5f24750ef94d56ce6e33e4019a8a4d68cfdb1ef661a52cdaee628a56d2437419 \ + --hash=sha256:697df43e2b6310ecc9d95f05d5ef20eacc09c7c4ecc9da3f235d39e71b7da1e4 \ + --hash=sha256:6d45b3ec2faed4baca41c76617fcdcfa4f684ff7a151ce6fc78ad3b6e85af0a6 \ + --hash=sha256:77810ef29e0fb1d289d225cabb9ee6cf4d11978a00bb99f7f8ec2132a84e0166 \ + --hash=sha256:7ca4f24341df071877849eb2034948459ce3a07915c2734f1abb4018d9c49d7b \ + --hash=sha256:7f784e13e598e9594750b2ef6729bcd5a47f6cfe4a12cca13def35e06d8163e3 \ + --hash=sha256:806dd64230dbbfaca8a27faa64e2f414bf1c6622ab78cc4264f7f5f028fee3bf \ + --hash=sha256:867e3644e208c8922a3be26fc6bbf112a035f50f0a86497f98f228c50c607bb2 \ + --hash=sha256:8c66d6fec467e8c0f975818c1796d25c53521124b7cfb760114be0abad53a0a2 \ + --hash=sha256:8ed07a90f5450d99dad60d3799f9c03c6566709bd53b497eb9ccad9a55867f36 \ + --hash=sha256:9bc6d1a7f8cedd519c4b7b1156d98e051b726bf160715b769106661d567b3f03 \ + --hash=sha256:9e1591f6ae98bcfac2a4bbf9221c0b92ab49762228f38287f6eeb5f3f55905ce \ + --hash=sha256:9e87562b91f68dd8b1c39149d0323b42e0082db7ddb8e934ab4c292094d575d6 \ + --hash=sha256:a7081fd19a6d573e1a05e600c82a1c421011db7935ed0d5c483e9dd96b99cf13 \ + --hash=sha256:a8474703bffc65ca15853d5fd4d06b18138ae90c17c8d12169968e998e448bb5 \ + --hash=sha256:af36e0aa45e25c9f57bf684b1175e59ea05d9a7d3e8e87b7ae1a1da246f2767e \ + --hash=sha256:b1240f767f69d7c4c8a29adde2310b871153df9b26b5cb2b54a561ac85146485 \ + --hash=sha256:b4d362e17bcb0011738c2d83e0a65ea8ce627057b2fdda37678f4374a382a137 \ + --hash=sha256:b831295e5472954104ecb46cd98c08b98b49c69fdb7040483aff799a755a7374 \ + --hash=sha256:b8c275f0ae90069496068c714387b4a0eba5d531aace269559ff2b43655edd58 \ + --hash=sha256:bdd2b45bf079d9ad90377048e2747a0c82351989a2165821f0c96831b4a2a54b \ + --hash=sha256:cc0743f0302b94f397a4a65a660d4cd24267439eb16493fb3caad2e4389bccbb \ + --hash=sha256:da4b0c6c699a0ad73c810736303f7fbae483bcb012e38d7eb06a5e3b432c981b \ + --hash=sha256:f25e2811a9c932e43943a2615e65fc487a0b6b49218899e62e426e7f0a57eeda \ + --hash=sha256:f73497e8c38295aaa4741bdfa4fda1a5aedda5473074369eca10626835445511 # via # -r image_vec_rep_resnet_requirements.in # torchvision -pillow==10.2.0 +pillow==10.3.0 \ + --hash=sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c \ + --hash=sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2 \ + --hash=sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb \ + --hash=sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d \ + --hash=sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa \ + --hash=sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3 \ + --hash=sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1 \ + --hash=sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a \ + --hash=sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd \ + --hash=sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8 \ + --hash=sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999 \ + --hash=sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599 \ + --hash=sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936 \ + --hash=sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375 \ + --hash=sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d \ + --hash=sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b \ + --hash=sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60 \ + --hash=sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572 \ + --hash=sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3 \ + --hash=sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced \ + --hash=sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f \ + --hash=sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b \ + --hash=sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19 \ + --hash=sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f \ + --hash=sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d \ + --hash=sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383 \ + --hash=sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795 \ + --hash=sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355 \ + --hash=sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57 \ + --hash=sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09 \ + --hash=sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b \ + --hash=sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462 \ + --hash=sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf \ + --hash=sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f \ + --hash=sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a \ + --hash=sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad \ + --hash=sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9 \ + --hash=sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d \ + --hash=sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45 \ + --hash=sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994 \ + --hash=sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d \ + --hash=sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338 \ + --hash=sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463 \ + --hash=sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451 \ + --hash=sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591 \ + --hash=sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c \ + --hash=sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd \ + --hash=sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32 \ + --hash=sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9 \ + --hash=sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf \ + --hash=sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5 \ + --hash=sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828 \ + --hash=sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3 \ + --hash=sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5 \ + --hash=sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2 \ + --hash=sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b \ + --hash=sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2 \ + --hash=sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475 \ + --hash=sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3 \ + --hash=sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb \ + --hash=sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef \ + --hash=sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015 \ + --hash=sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002 \ + --hash=sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170 \ + --hash=sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84 \ + --hash=sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57 \ + --hash=sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f \ + --hash=sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27 \ + --hash=sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a # via # -r image_vec_rep_resnet_requirements.in # torchvision -pygments==2.17.2 +pygments==2.17.2 \ + --hash=sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c \ + --hash=sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367 # via rich -pyinstrument==4.6.2 +pyinstrument==4.6.2 \ + --hash=sha256:0002ee517ed8502bbda6eb2bb1ba8f95a55492fcdf03811ba13d4806e50dd7f6 \ + --hash=sha256:01fc45dedceec3df81668d702bca6d400d956c8b8494abc206638c167c78dfd9 \ + --hash=sha256:06a8578b2943eb1dbbf281e1e59e44246acfefd79e1b06d4950f01b693de12af \ + --hash=sha256:08fdc7f88c989316fa47805234c37a40fafe7b614afd8ae863f0afa9d1707b37 \ + --hash=sha256:0de2c1714a37a820033b19cf134ead43299a02662f1379140974a9ab733c5f3a \ + --hash=sha256:113d2fc534c9ca7b6b5661d6ada05515bf318f6eb34e8d05860fe49eb7cfe17e \ + --hash=sha256:1e474c56da636253dfdca7cd1998b240d6b39f7ed34777362db69224fcf053b1 \ + --hash=sha256:20e15b4e1d29ba0b7fc81aac50351e0dc0d7e911e93771ebc3f408e864a2c93b \ + --hash=sha256:23c3e3ca8553b9aac09bd978c73d21b9032c707ac6d803bae6a20ecc048df4a8 \ + --hash=sha256:28af084aa84bbfd3620ebe71d5f9a0deca4451267f363738ca824f733de55056 \ + --hash=sha256:2e625fc6ffcd4fd420493edd8276179c3f784df207bef4c2192725c1b310534c \ + --hash=sha256:2fd8e547cf3df5f0ec6e4dffbe2e857f6b28eda51b71c3c0b5a2fc0646527835 \ + --hash=sha256:3098cd72b71a322a72dafeb4ba5c566465e193d2030adad4c09566bd2f89bf4f \ + --hash=sha256:32ec8db6896b94af790a530e1e0edad4d0f941a0ab8dd9073e5993e7ea46af7d \ + --hash=sha256:34e59e91c88ec9ad5630c0964eca823949005e97736bfa838beb4789e94912a2 \ + --hash=sha256:3a165e0d2deb212d4cf439383982a831682009e1b08733c568cac88c89784e62 \ + --hash=sha256:46992e855d630575ec635eeca0068a8ddf423d4fd32ea0875a94e9f8688f0b95 \ + --hash=sha256:4fba3244e94c117bf4d9b30b8852bbdcd510e7329fdd5c7c8b3799e00a9215a8 \ + --hash=sha256:5b6e161ef268d43ee6bbfae7fd2cdd0a52c099ddd21001c126ca1805dc906539 \ + --hash=sha256:5ebeba952c0056dcc9b9355328c78c4b5c2a33b4b4276a9157a3ab589f3d1bac \ + --hash=sha256:5f329f5534ca069420246f5ce57270d975229bcb92a3a3fd6b2ca086527d9764 \ + --hash=sha256:62f6014d2b928b181a52483e7c7b82f2c27e22c577417d1681153e5518f03317 \ + --hash=sha256:67268bb0d579330cff40fd1c90b8510363ca1a0e7204225840614068658dab77 \ + --hash=sha256:6ba8e368d0421f15ba6366dfd60ec131c1b46505d021477e0f865d26cf35a605 \ + --hash=sha256:6c0f0e1d8f8c70faa90ff57f78ac0dda774b52ea0bfb2d9f0f41ce6f3e7c869e \ + --hash=sha256:6c761372945e60fc1396b7a49f30592e8474e70a558f1a87346d27c8c4ce50f7 \ + --hash=sha256:6ed4e8c6c84e0e6429ba7008a66e435ede2d8cb027794c20923c55669d9c5633 \ + --hash=sha256:73db0c2c99119c65b075feee76e903b4ed82e59440fe8b5724acf5c7cb24721f \ + --hash=sha256:7a1b1cd768ea7ea9ab6f5490f7e74431321bcc463e9441dbc2f769617252d9e2 \ + --hash=sha256:7ba858b3d6f6e5597c641edcc0e7e464f85aba86d71bc3b3592cb89897bf43f6 \ + --hash=sha256:7bd3da31c46f1c1cb7ae89031725f6a1d1015c2041d9c753fe23980f5f9fd86c \ + --hash=sha256:7c671057fad22ee3ded897a6a361204ea2538e44c1233cad0e8e30f6d27f33db \ + --hash=sha256:803ac64e526473d64283f504df3b0d5c2c203ea9603cab428641538ffdc753a7 \ + --hash=sha256:8a386b9d09d167451fb2111eaf86aabf6e094fed42c15f62ec51d6980bce7d96 \ + --hash=sha256:8a9791bf8916c1cf439c202fded32de93354b0f57328f303d71950b0027c7811 \ + --hash=sha256:8b3c44cb037ad0d6e9d9a48c14d856254ada641fbd0ae9de40da045fc2226a2a \ + --hash=sha256:8d104b7a7899d5fa4c5bf1ceb0c1a070615a72c5dc17bc321b612467ad5c5d88 \ + --hash=sha256:90350533396071cb2543affe01e40bf534c35cb0d4b8fa9fdb0f052f9ca2cfe3 \ + --hash=sha256:a59fc4f7db738a094823afe6422509fa5816a7bf74e768ce5a7a2ddd91af40ac \ + --hash=sha256:af1a953bce9fd530040895d01ff3de485e25e1576dccb014f76ba9131376fcad \ + --hash=sha256:b082df0bbf71251a7f4880a12ed28421dba84ea7110bb376e0533067a4eaff40 \ + --hash=sha256:b2b66ff0b16c8ecf1ec22de001cfff46872b2c163c62429055105564eef50b2e \ + --hash=sha256:b55983a884f083f93f0fc6d12ff8df0acd1e2fb0580d2f4c7bfe6def33a84b58 \ + --hash=sha256:baf375953b02fe94d00e716f060e60211ede73f49512b96687335f7071adb153 \ + --hash=sha256:be9901f17ac2f527c352f2fdca3d717c1d7f2ce8a70bad5a490fc8cc5d2a6007 \ + --hash=sha256:cd0320c39e99e3c0a3129d1ed010ac41e5a7eb96fb79900d270080a97962e995 \ + --hash=sha256:d02f31fa13a9e8dc702a113878419deba859563a32474c9f68e04619d43d6f01 \ + --hash=sha256:d4b559322f30509ad8f082561792352d0805b3edfa508e492a36041fdc009259 \ + --hash=sha256:d4dcdcc7ba224a0c5edfbd00b0f530f5aed2b26da5aaa2f9af5519d4aa8c7e41 \ + --hash=sha256:d6162615e783c59e36f2d7caf903a7e3ecb6b32d4a4ae8907f2760b2ef395bf6 \ + --hash=sha256:da58f265326f3cf3975366ccb8b39014f1e69ff8327958a089858d71c633d654 \ + --hash=sha256:dcb5c8d763c5df55131670ba2a01a8aebd0d490a789904a55eb6a8b8d497f110 \ + --hash=sha256:dd5c53a0159126b5ce7cbc4994433c9c671e057c85297ff32645166a06ad2c50 \ + --hash=sha256:dd6007d3c2e318e09e582435dd8d111cccf30d342af66886b783208813caf3d7 \ + --hash=sha256:e2e554b1bb0df78f5ce8a92df75b664912ca93aa94208386102af454ec31b647 \ + --hash=sha256:e3813c8ecfab9d7d855c5f0f71f11793cf1507f40401aa33575c7fd613577c23 \ + --hash=sha256:e63f4916001aa9c625976a50779282e0a5b5e9b17c52a50ef4c651e468ed5b88 \ + --hash=sha256:edca46f04a573ac2fb11a84b937844e6a109f38f80f4b422222fb5be8ecad8cb \ + --hash=sha256:fdc0a53b27e5d8e47147489c7dab596ddd1756b1e053217ef5bc6718567099ff \ + --hash=sha256:feebcf860f955401df30d029ec8de7a0c5515d24ea809736430fd1219686fe14 # via -r image_vec_rep_resnet_requirements.in -requests==2.31.0 +requests==2.31.0 \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 # via torchvision -rich==13.7.0 +rich==13.7.0 \ + --hash=sha256:5cb5123b5cf9ee70584244246816e9114227e0b98ad9176eede6ad54bf5403fa \ + --hash=sha256:6da14c108c4866ee9520bbffa71f6fe3962e193b7da68720583850cd4548e235 # via # memray # textual -sympy==1.12 +sympy==1.12 \ + --hash=sha256:c3588cd4295d0c0f603d0f2ae780587e64e2efeedb3521e46b9bb1d08d184fa5 \ + --hash=sha256:ebf595c8dac3e0fdc4152c51878b498396ec7f30e7a914d6071e674d49420fb8 # via torch -textual==0.48.2 +textual==0.48.2 \ + --hash=sha256:a9d2f225584afb28a6c05b7f7d06d41b54cd02822020f11711d788e5098161db \ + --hash=sha256:e092dffa5311f3381cb5f51d56c506143f5c1ee3b1c67f57bb1929cfa73fee07 # via memray -torch==2.1.2+cpu +torch==2.1.2+cpu \ + --hash=sha256:10df25736edb00852eca6041941e99d13502e65773d5c6164372eaaab83d976b \ + --hash=sha256:679458a652006bc5b9d3972f046ae299039dcc63f465ac623b439cbc27a3645c \ + --hash=sha256:6acac7871cca2b72f00b60496dd7d59d7d8247721f374705b8f9c6b9aeea482a \ + --hash=sha256:83bac7f809c09700c227abc9e3474e3a847a3f4c1bb2443aa16004f36a1e7e43 \ + --hash=sha256:8b90d5c0023891717dfc5659eebe6c57c3632db1e3981e22e523be51c4c962c9 \ + --hash=sha256:bf3ca897f8c7c218dd6c4b1cc5eec57b4f4e71106b0b8120e92f5fdaf4acf6cd \ + --hash=sha256:c4620b08e9b8572594861ebedaf739d86801068a48c0399cbdf6559d1d351789 \ + --hash=sha256:d7ed25db586afef2c022eb143471c6742088decbe05ed1f879fac770e67df189 # via # -r image_vec_rep_resnet_requirements.in # torchvision -torchvision==0.16.2+cpu +torchvision==0.16.2+cpu \ + --hash=sha256:32a84b015f63a5335f1c761bff78d66fbaab8a0b041e3500ff494c8828efb899 \ + --hash=sha256:39b3c549522bec7ca64e0cd6fbde56ddbc7ebc196f4b402b607d942e4b0a8632 \ + --hash=sha256:5e3cebfedc6a6c8d42124356d8c0af8fafc880e907123e3850e149be1ea42bef \ + --hash=sha256:63347ff53ee460c63db285ea1566692f2d88a71f43d287596ab2f1880e285d5d \ + --hash=sha256:9846069bbc443c35b7ebc985d7224921163bdca97f5d6b439d492f656e573b25 \ + --hash=sha256:9a964fd435af3dbc2a7fc73b7ff0912fcb573fb1de07d3a4d66be3e481cc370f \ + --hash=sha256:a51be39563743c5a4c176e2317c71149f5ee1818d3872b342d656d03b97d3b9d \ + --hash=sha256:bf245686cd46a108a76e0ce5dd9993baac465019ca9fb6610b2d947ed2aff381 # via -r image_vec_rep_resnet_requirements.in -typing-extensions==4.9.0 +typing-extensions==4.9.0 \ + --hash=sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783 \ + --hash=sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd # via # textual # torch -uc-micro-py==1.0.2 +uc-micro-py==1.0.2 \ + --hash=sha256:30ae2ac9c49f39ac6dce743bd187fcd2b574b16ca095fa74cd9396795c954c54 \ + --hash=sha256:8c9110c309db9d9e87302e2f4ad2c3152770930d88ab385cd544e7a7e75f3de0 # via linkify-it-py -urllib3==2.2.0 +urllib3==2.2.0 \ + --hash=sha256:051d961ad0c62a94e50ecf1af379c3aba230c66c710493493560c0c223c49f20 \ + --hash=sha256:ce3711610ddce217e6d113a2732fafad960a03fd0318c91faa79481e35c11224 # via requests diff --git a/src/core/operators/text_vec_rep_paraphrase_lxml_requirements.txt b/src/core/operators/text_vec_rep_paraphrase_lxml_requirements.txt index 8148fdbc..3e35ccc3 100644 --- a/src/core/operators/text_vec_rep_paraphrase_lxml_requirements.txt +++ b/src/core/operators/text_vec_rep_paraphrase_lxml_requirements.txt @@ -56,7 +56,7 @@ packaging==23.2 # via # huggingface-hub # transformers -pillow==10.2.0 +pillow==10.3.0 # via torchvision pyyaml==6.0.1 # via diff --git a/src/core/operators/vid_vec_rep_resnet_requirements.in b/src/core/operators/vid_vec_rep_resnet_requirements.in index 3bab4ab7..1e09c44d 100644 --- a/src/core/operators/vid_vec_rep_resnet_requirements.in +++ b/src/core/operators/vid_vec_rep_resnet_requirements.in @@ -1,7 +1,7 @@ torch==2.2.0+cpu torchvision==0.17.0+cpu numpy==1.26.4 -Pillow==10.2.0 +Pillow==10.3.0 scipy==1.11.4 opencv-python-headless==4.9.0.80 memray==1.11.0 diff --git a/src/core/operators/vid_vec_rep_resnet_requirements.txt b/src/core/operators/vid_vec_rep_resnet_requirements.txt index 2680f7e2..27f59967 100644 --- a/src/core/operators/vid_vec_rep_resnet_requirements.txt +++ b/src/core/operators/vid_vec_rep_resnet_requirements.txt @@ -2,7 +2,7 @@ # This file is autogenerated by pip-compile with Python 3.11 # by the following command: # -# pip-compile --find-links=https://download.pytorch.org/whl/torch_stable.html --generate-hashes vid_vec_rep_resnet_requirements.in +# pip-compile --allow-unsafe --find-links=https://download.pytorch.org/whl/torch_stable.html --generate-hashes vid_vec_rep_resnet_requirements.in # # For arm64 architecture @@ -338,75 +338,76 @@ opencv-python-headless==4.9.0.80 \ --hash=sha256:a8056c2cb37cd65dfcdf4153ca16f7362afcf3a50d600d6bb69c660fc61ee29c \ --hash=sha256:e0ee54e27be493e8f7850847edae3128e18b540dac1d7b2e4001b8944e11e1c6 # via -r vid_vec_rep_resnet_requirements.in -pillow==10.2.0 \ - --hash=sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8 \ - --hash=sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39 \ - --hash=sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac \ - --hash=sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869 \ - --hash=sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e \ - --hash=sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04 \ - --hash=sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9 \ - --hash=sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e \ - --hash=sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe \ - --hash=sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef \ - --hash=sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56 \ - --hash=sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa \ - --hash=sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f \ - --hash=sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f \ - --hash=sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e \ - --hash=sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a \ - --hash=sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2 \ - --hash=sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2 \ - --hash=sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5 \ - --hash=sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a \ - --hash=sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2 \ - --hash=sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213 \ - --hash=sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563 \ - --hash=sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591 \ - --hash=sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c \ - --hash=sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2 \ - --hash=sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb \ - --hash=sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757 \ - --hash=sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0 \ - --hash=sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452 \ - --hash=sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad \ - --hash=sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01 \ - --hash=sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f \ - --hash=sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5 \ - --hash=sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61 \ - --hash=sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e \ - --hash=sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b \ - --hash=sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068 \ - --hash=sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9 \ - --hash=sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588 \ - --hash=sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483 \ - --hash=sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f \ - --hash=sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67 \ - --hash=sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7 \ - --hash=sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311 \ - --hash=sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6 \ - --hash=sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72 \ - --hash=sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6 \ - --hash=sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129 \ - --hash=sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13 \ - --hash=sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67 \ - --hash=sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c \ - --hash=sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516 \ - --hash=sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e \ - --hash=sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e \ - --hash=sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364 \ - --hash=sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023 \ - --hash=sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1 \ - --hash=sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04 \ - --hash=sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d \ - --hash=sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a \ - --hash=sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7 \ - --hash=sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb \ - --hash=sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4 \ - --hash=sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e \ - --hash=sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1 \ - --hash=sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48 \ - --hash=sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868 +pillow==10.3.0 \ + --hash=sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c \ + --hash=sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2 \ + --hash=sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb \ + --hash=sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d \ + --hash=sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa \ + --hash=sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3 \ + --hash=sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1 \ + --hash=sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a \ + --hash=sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd \ + --hash=sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8 \ + --hash=sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999 \ + --hash=sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599 \ + --hash=sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936 \ + --hash=sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375 \ + --hash=sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d \ + --hash=sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b \ + --hash=sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60 \ + --hash=sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572 \ + --hash=sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3 \ + --hash=sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced \ + --hash=sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f \ + --hash=sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b \ + --hash=sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19 \ + --hash=sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f \ + --hash=sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d \ + --hash=sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383 \ + --hash=sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795 \ + --hash=sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355 \ + --hash=sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57 \ + --hash=sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09 \ + --hash=sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b \ + --hash=sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462 \ + --hash=sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf \ + --hash=sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f \ + --hash=sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a \ + --hash=sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad \ + --hash=sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9 \ + --hash=sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d \ + --hash=sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45 \ + --hash=sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994 \ + --hash=sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d \ + --hash=sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338 \ + --hash=sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463 \ + --hash=sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451 \ + --hash=sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591 \ + --hash=sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c \ + --hash=sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd \ + --hash=sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32 \ + --hash=sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9 \ + --hash=sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf \ + --hash=sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5 \ + --hash=sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828 \ + --hash=sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3 \ + --hash=sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5 \ + --hash=sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2 \ + --hash=sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b \ + --hash=sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2 \ + --hash=sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475 \ + --hash=sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3 \ + --hash=sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb \ + --hash=sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef \ + --hash=sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015 \ + --hash=sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002 \ + --hash=sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170 \ + --hash=sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84 \ + --hash=sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57 \ + --hash=sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f \ + --hash=sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27 \ + --hash=sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a # via # -r vid_vec_rep_resnet_requirements.in # torchvision diff --git a/src/requirements.in b/src/requirements.in index f0005e50..a38a1e84 100644 --- a/src/requirements.in +++ b/src/requirements.in @@ -1,6 +1,6 @@ flask==2.3.2 flask_cors==3.0.10 -Pillow==10.2.0 +Pillow==10.3.0 elasticsearch==8.11.1 wget==3.2 pika==1.3.2 diff --git a/src/requirements.txt b/src/requirements.txt index cff3f3c4..c2e25781 100644 --- a/src/requirements.txt +++ b/src/requirements.txt @@ -713,75 +713,76 @@ pika==1.3.2 \ --hash=sha256:0779a7c1fafd805672796085560d290213a465e4f6f76a6fb19e378d8041a14f \ --hash=sha256:b2a327ddddf8570b4965b3576ac77091b850262d34ce8c1d8cb4e4146aa4145f # via -r requirements.in -pillow==10.2.0 \ - --hash=sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8 \ - --hash=sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39 \ - --hash=sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac \ - --hash=sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869 \ - --hash=sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e \ - --hash=sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04 \ - --hash=sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9 \ - --hash=sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e \ - --hash=sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe \ - --hash=sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef \ - --hash=sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56 \ - --hash=sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa \ - --hash=sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f \ - --hash=sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f \ - --hash=sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e \ - --hash=sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a \ - --hash=sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2 \ - --hash=sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2 \ - --hash=sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5 \ - --hash=sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a \ - --hash=sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2 \ - --hash=sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213 \ - --hash=sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563 \ - --hash=sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591 \ - --hash=sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c \ - --hash=sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2 \ - --hash=sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb \ - --hash=sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757 \ - --hash=sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0 \ - --hash=sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452 \ - --hash=sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad \ - --hash=sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01 \ - --hash=sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f \ - --hash=sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5 \ - --hash=sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61 \ - --hash=sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e \ - --hash=sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b \ - --hash=sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068 \ - --hash=sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9 \ - --hash=sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588 \ - --hash=sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483 \ - --hash=sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f \ - --hash=sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67 \ - --hash=sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7 \ - --hash=sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311 \ - --hash=sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6 \ - --hash=sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72 \ - --hash=sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6 \ - --hash=sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129 \ - --hash=sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13 \ - --hash=sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67 \ - --hash=sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c \ - --hash=sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516 \ - --hash=sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e \ - --hash=sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e \ - --hash=sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364 \ - --hash=sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023 \ - --hash=sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1 \ - --hash=sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04 \ - --hash=sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d \ - --hash=sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a \ - --hash=sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7 \ - --hash=sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb \ - --hash=sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4 \ - --hash=sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e \ - --hash=sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1 \ - --hash=sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48 \ - --hash=sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868 +pillow==10.3.0 \ + --hash=sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c \ + --hash=sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2 \ + --hash=sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb \ + --hash=sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d \ + --hash=sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa \ + --hash=sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3 \ + --hash=sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1 \ + --hash=sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a \ + --hash=sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd \ + --hash=sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8 \ + --hash=sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999 \ + --hash=sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599 \ + --hash=sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936 \ + --hash=sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375 \ + --hash=sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d \ + --hash=sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b \ + --hash=sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60 \ + --hash=sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572 \ + --hash=sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3 \ + --hash=sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced \ + --hash=sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f \ + --hash=sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b \ + --hash=sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19 \ + --hash=sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f \ + --hash=sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d \ + --hash=sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383 \ + --hash=sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795 \ + --hash=sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355 \ + --hash=sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57 \ + --hash=sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09 \ + --hash=sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b \ + --hash=sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462 \ + --hash=sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf \ + --hash=sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f \ + --hash=sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a \ + --hash=sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad \ + --hash=sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9 \ + --hash=sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d \ + --hash=sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45 \ + --hash=sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994 \ + --hash=sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d \ + --hash=sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338 \ + --hash=sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463 \ + --hash=sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451 \ + --hash=sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591 \ + --hash=sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c \ + --hash=sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd \ + --hash=sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32 \ + --hash=sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9 \ + --hash=sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf \ + --hash=sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5 \ + --hash=sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828 \ + --hash=sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3 \ + --hash=sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5 \ + --hash=sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2 \ + --hash=sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b \ + --hash=sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2 \ + --hash=sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475 \ + --hash=sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3 \ + --hash=sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb \ + --hash=sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef \ + --hash=sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015 \ + --hash=sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002 \ + --hash=sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170 \ + --hash=sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84 \ + --hash=sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57 \ + --hash=sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f \ + --hash=sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27 \ + --hash=sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a # via -r requirements.in pluggy==1.4.0 \ --hash=sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981 \ From 3b8e133ba55ec61b2a8e2464c64c2a95604bde6b Mon Sep 17 00:00:00 2001 From: github-actions Date: Thu, 4 Apr 2024 10:49:47 +0000 Subject: [PATCH 30/48] 0.5.3 Automatically generated by python-semantic-release --- CHANGELOG.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b6f67e5..6e75153a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,23 @@ +## v0.5.3 (2024-04-04) + +### Fix + +* fix: Updated vulnerable pillow dependency in requirements ([`efd1be8`](https://github.com/tattle-made/feluda/commit/efd1be8bf979d27383e3c7cad2b11a26003ede39)) + +### Unknown + +* Merge pull request #257 from tattle-made/hotfix + +Hotfix ([`67ac03a`](https://github.com/tattle-made/feluda/commit/67ac03aba15a1f7dbad0641f9539cec09a9b7bdb)) + +* Merge pull request #256 from duggalsu/update_pillow + +Update pillow ([`44b0f88`](https://github.com/tattle-made/feluda/commit/44b0f88e4de6d566bbb6ed8fb6ab0a0db0fe5ec4)) + + ## v0.5.2 (2024-03-23) ### Ci From 8b920d548a002ade0c5c0217fb0759507a553172 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Thu, 4 Apr 2024 18:52:26 +0530 Subject: [PATCH 31/48] chore: fixing ruff lint error --- src/worker/media/media_payload_writer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/worker/media/media_payload_writer.py b/src/worker/media/media_payload_writer.py index 50788507..2cb5e6dc 100644 --- a/src/worker/media/media_payload_writer.py +++ b/src/worker/media/media_payload_writer.py @@ -1,4 +1,4 @@ -from core.feluda import ComponentType, Feluda +from core.feluda import Feluda from core.logger import Logger from core.queue.amazon_mq import AmazonMQ from time import sleep From a4280f49257b83b06731a130413a95e9545ef539 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Fri, 5 Apr 2024 10:20:33 +0530 Subject: [PATCH 32/48] ci: media worker staging workflow --- .../docker-push-media-worker-staging.yml | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 .github/workflows/docker-push-media-worker-staging.yml diff --git a/.github/workflows/docker-push-media-worker-staging.yml b/.github/workflows/docker-push-media-worker-staging.yml new file mode 100644 index 00000000..3e0f651a --- /dev/null +++ b/.github/workflows/docker-push-media-worker-staging.yml @@ -0,0 +1,46 @@ +name: Publish Media Worker to Dockerhub for Staging + +permissions: + contents: read + +on: workflow_dispatch + +jobs: + docker: + runs-on: ubuntu-latest + steps: + - name: Set up QEMU + uses: docker/setup-qemu-action@68827325e0b33c7199eb31dd4e31fbe9023e06e3 # v3.0.0 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@2b51285047da1547ffb1b2203d8be4c0af6b1f20 # v3.2.0 + + - name: Login to Docker Hub + uses: docker/login-action@e92390c5fb421da1463c202d546fed0ec5c39f20 # v.3.1.0 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push amd64 + uses: docker/build-push-action@2cdde995de11925a030ce8070c3d77a52ffcf1c0 # v5.3.0 + with: + context: "{{defaultContext}}:src/" + file: worker/media/Dockerfile.media_worker + platforms: linux/amd64 + build-args: | + "UID=1000" + "GID=1000" + push: true + tags: tattletech/feluda-operator-media:worker-amd64-latest + + - name: Build and push arm64 + uses: docker/build-push-action@2cdde995de11925a030ce8070c3d77a52ffcf1c0 # v5.3.0 + with: + context: "{{defaultContext}}:src/" + file: worker/media/Dockerfile.media_worker_graviton + platforms: linux/arm64 + build-args: | + "UID=1000" + "GID=1000" + push: true + tags: tattletech/feluda-operator-media:worker-arm64-latest From 83ed5cf33ba44006a91259e9b924769b0fdee777 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Fri, 5 Apr 2024 11:17:05 +0530 Subject: [PATCH 33/48] refactor: s3 download to a new file --- src/core/models/media_factory.py | 23 +---------------------- src/core/models/s3_utils.py | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+), 22 deletions(-) create mode 100644 src/core/models/s3_utils.py diff --git a/src/core/models/media_factory.py b/src/core/models/media_factory.py index b81bd84c..52b3cea9 100644 --- a/src/core/models/media_factory.py +++ b/src/core/models/media_factory.py @@ -6,10 +6,10 @@ from werkzeug.datastructures import FileStorage import wget from core.models.media import MediaType +from core.models.s3_utils import AWSS3Utils import logging import os import tempfile -import boto3 from pydub import AudioSegment log = logging.getLogger(__name__) @@ -70,27 +70,6 @@ def make_from_file_on_disk(image_path): def make_from_file_in_memory(image_data: FileStorage): pass -class AWSS3Utils: - aws_access_key_id = os.getenv('AWS_ACCESS_KEY_ID') - aws_secret_access_key = os.getenv('AWS_SECRET_ACCESS_KEY') - aws_region = os.getenv('AWS_REGION') - aws_bucket = os.getenv('AWS_BUCKET') - session = boto3.Session( - aws_access_key_id=aws_access_key_id, - aws_secret_access_key=aws_secret_access_key, - region_name=aws_region - ) - s3 = session.client('s3') - - @staticmethod - def download_file_from_s3(bucket_name, file_key, local_file_path): - try: - AWSS3Utils.s3.download_file(bucket_name, file_key, local_file_path) - print(f"File {file_key} downloaded successfully as {local_file_path}") - except Exception as e: - print(f"Error downloading file {file_key}: {e}") - raise Exception("Error Downloading file from S3") - class VideoFactory: @staticmethod diff --git a/src/core/models/s3_utils.py b/src/core/models/s3_utils.py new file mode 100644 index 00000000..df4eff13 --- /dev/null +++ b/src/core/models/s3_utils.py @@ -0,0 +1,23 @@ +import boto3 +import os + +class AWSS3Utils: + aws_access_key_id = os.getenv('AWS_ACCESS_KEY_ID') + aws_secret_access_key = os.getenv('AWS_SECRET_ACCESS_KEY') + aws_region = os.getenv('AWS_REGION') + aws_bucket = os.getenv('AWS_BUCKET') + session = boto3.Session( + aws_access_key_id=aws_access_key_id, + aws_secret_access_key=aws_secret_access_key, + region_name=aws_region + ) + s3 = session.client('s3') + + @staticmethod + def download_file_from_s3(bucket_name, file_key, local_file_path): + try: + AWSS3Utils.s3.download_file(bucket_name, file_key, local_file_path) + print(f"File {file_key} downloaded successfully!") + except Exception as e: + print(f"Error downloading file {file_key}: {e}") + raise Exception("Error Downloading file from S3") \ No newline at end of file From 8cf33fccea43d73ecffed3193f6c55edbc71e3ae Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Sun, 7 Apr 2024 14:18:25 +0530 Subject: [PATCH 34/48] chore: deleting empty query.py file in store --- src/core/store/query.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/core/store/query.py diff --git a/src/core/store/query.py b/src/core/store/query.py deleted file mode 100644 index e69de29b..00000000 From 91783af357fbcfe1ccfc4e1e27cf976666c00d67 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Sun, 7 Apr 2024 15:32:40 +0530 Subject: [PATCH 35/48] fix: feluda core supports amazom mq --- src/core/config.py | 14 ----- src/core/queue/__init__.py | 4 +- src/core/queue/amazon_mq.py | 4 +- src/worker/media/config.yml | 8 +-- src/worker/media/media_payload_writer.py | 11 ++-- src/worker/media/media_worker.py | 65 +++++++++++------------- 6 files changed, 42 insertions(+), 64 deletions(-) diff --git a/src/core/config.py b/src/core/config.py index 49f3a452..e2cc5aa5 100644 --- a/src/core/config.py +++ b/src/core/config.py @@ -79,18 +79,6 @@ class PostgreSQLConfig: type: str parameters: PostgreParameters -@dataclass -class AmazonQueueParameters: - host_name: str - queues: List[dict] - - -@dataclass -class AmazonQueueConfig: - label: str - type: str - parameters: AmazonQueueParameters - @dataclass class Config: @@ -99,8 +87,6 @@ class Config: server: Optional[ServerConfig] operators: Optional[OperatorConfig] postgresql: Optional[PostgreSQLConfig] - amazon_queue: Optional[AmazonQueueConfig] - def load(filepath) -> Config: log.info("Loading config from " + filepath) diff --git a/src/core/queue/__init__.py b/src/core/queue/__init__.py index fb57fd06..f053e025 100644 --- a/src/core/queue/__init__.py +++ b/src/core/queue/__init__.py @@ -1,11 +1,13 @@ import logging from . import rabbit_mq +from . import amazon_mq from core.config import QueueConfig + # from os import environ log = logging.getLogger(__name__) -queues = {"rabbitmq": rabbit_mq.RabbitMQ} +queues = {"rabbitmq": rabbit_mq.RabbitMQ, "amazonmq": amazon_mq.AmazonMQ} class Queue: diff --git a/src/core/queue/amazon_mq.py b/src/core/queue/amazon_mq.py index c900b818..96375fe4 100644 --- a/src/core/queue/amazon_mq.py +++ b/src/core/queue/amazon_mq.py @@ -40,7 +40,7 @@ def connect(self): print("Error Connecting to AmazonMQ") raise Exception("Error connecting to AmazonMQ") - def create_queue(self): + def initialize(self): for queue_name in self.queues: self.channel.queue_declare(queue=queue_name) print("Queue Declared : ", queue_name) @@ -48,7 +48,7 @@ def create_queue(self): def is_connected(self): return self.channel.is_open - def send_message(self, queue_name, payload): + def message(self, queue_name, payload): try: channel = self.connection.channel() channel.basic_publish( diff --git a/src/worker/media/config.yml b/src/worker/media/config.yml index e3147c64..b80c9f6b 100644 --- a/src/worker/media/config.yml +++ b/src/worker/media/config.yml @@ -8,11 +8,11 @@ store: video_index_name: "video" audio_index_name: "audio" -amazon_queue: - label: "Amazon Queue" - type: "amazonmq" +queue: + label: "Queue" + type: "rabbitmq" parameters: - host_name: "amazonmq" + host_name: "rabbitmq" queues: - name: "media-index-queue" - name: "report-queue" diff --git a/src/worker/media/media_payload_writer.py b/src/worker/media/media_payload_writer.py index 2cb5e6dc..6999b6b4 100644 --- a/src/worker/media/media_payload_writer.py +++ b/src/worker/media/media_payload_writer.py @@ -1,4 +1,4 @@ -from core.feluda import Feluda +from core.feluda import ComponentType, Feluda from core.logger import Logger from core.queue.amazon_mq import AmazonMQ from time import sleep @@ -10,11 +10,8 @@ try: feluda = Feluda("worker/media/config.yml") feluda.setup() - queue_config = feluda.config.amazon_queue - media_index_queue = queue_config.parameters.queues[0]["name"] - amazom_queue_manager = AmazonMQ(queue_config) - amazom_queue_manager.connect() - amazom_queue_manager.create_queue() + media_index_queue = feluda.config.queue.parameters.queues[0]["name"] + feluda.start_component(ComponentType.QUEUE) # take media_type from command line media_type = sys.argv[1] if len(sys.argv) > 1 else "video" media_paths = { @@ -32,7 +29,7 @@ "path": path, "media_type": media_type, } - amazom_queue_manager.send_message(media_index_queue, dummy_payload) + feluda.queue.message(media_index_queue, dummy_payload) sleep(0.3) except Exception as e: print("Error Sending Payload", e) diff --git a/src/worker/media/media_worker.py b/src/worker/media/media_worker.py index efff516a..199ab4ea 100644 --- a/src/worker/media/media_worker.py +++ b/src/worker/media/media_worker.py @@ -78,7 +78,7 @@ def calc_audio_vec_crc(audio_vector): return arr_crc -def indexer(feluda, amazom_queue_manager): +def indexer(feluda): def worker(ch, method, properties, body): print("MESSAGE RECEIVED") global table_name @@ -105,8 +105,8 @@ def worker(ch, method, properties, body): log.info(result) # send indexed report to report queue report = make_report_indexed(file_content, "indexed") - amazom_queue_manager.send_message( - feluda.config.amazon_queue.parameters.queues[1]["name"], report + feluda.queue.message( + feluda.config.queue.parameters.queues[1]["name"], report ) # send ack ch.basic_ack(delivery_tag=method.delivery_tag) @@ -114,8 +114,8 @@ def worker(ch, method, properties, body): print("Error indexing media", e) # send failed report to report queue report = make_report_failed(file_content, "failed") - amazom_queue_manager.send_message( - feluda.config.amazon_queue.parameters.queues[1]["name"], report + feluda.queue.message( + feluda.config.queue.parameters.queues[1]["name"], report ) # requeue the media file ch.basic_nack(delivery_tag=method.delivery_tag) @@ -146,16 +146,16 @@ def worker(ch, method, properties, body): log.info(result) # send indexed report to report queue report = make_report_indexed(file_content, "indexed") - amazom_queue_manager.send_message( - feluda.config.amazon_queue.parameters.queues[1]["name"], report + feluda.queue.message( + feluda.config.queue.parameters.queues[1]["name"], report ) ch.basic_ack(delivery_tag=method.delivery_tag) except Exception as e: print("Error indexing media", e) # send failed report to report queue report = make_report_failed(file_content, "failed") - amazom_queue_manager.send_message( - feluda.config.amazon_queue.parameters.queues[1]["name"], report + feluda.queue.message( + feluda.config.queue.parameters.queues[1]["name"], report ) # requeue the media file ch.basic_nack(delivery_tag=method.delivery_tag) @@ -163,8 +163,8 @@ def worker(ch, method, properties, body): log.info("This media type is not supported currently") # TODO: send a customised report and then report it to the queue with a ack report = make_report_failed(file_content, "failed") - amazom_queue_manager.send_message( - feluda.config.amazon_queue.parameters.queues[1]["name"], report + feluda.queue.message( + feluda.config.queue.parameters.queues[1]["name"], report ) ch.basic_ack(delivery_tag=method.delivery_tag) @@ -176,10 +176,8 @@ def handle_exception(feluda, queue_name, worker_func, retries, max_retries): if retries < max_retries: print("Inside Handle Exception") try: - amazom_queue_manager = AmazonMQ(queue_config) - amazom_queue_manager.connect() - amazom_queue_manager.create_queue() - amazom_queue_manager.listen(queue_name, worker_func) + feluda.start_component(ComponentType.QUEUE) + feluda.queue.listen(queue_name, worker_func) return except Exception as e: print("Error handling exception:", e) @@ -197,23 +195,20 @@ def handle_exception(feluda, queue_name, worker_func, retries, max_retries): # Init Feluda and load config feluda = Feluda("worker/media/config.yml") feluda.setup() - queue_config = feluda.config.amazon_queue - media_index_queue = queue_config.parameters.queues[0]["name"] - # setup Amazon MQ - amazom_queue_manager = AmazonMQ(queue_config) - amazom_queue_manager.connect() - amazom_queue_manager.create_queue() - # check if postgresql exists in config - if feluda.config.postgresql: - pg_manager = PostgreSQLManager() - pg_manager.connect() - pg_manager.create_trigger_function() - table_name = feluda.config.postgresql.parameters.table_names[0]["name"] - pg_manager.create_table(table_name) - pg_manager.create_trigger(table_name) - else: - log.info("PostgreSQL is not defined in the config file") - # check if store is present in config and start component + media_index_queue = feluda.config.queue.parameters.queues[0]["name"] + # setup QUEUE + feluda.start_component(ComponentType.QUEUE) + # # check if postgresql exists in config + # if feluda.config.postgresql: + # pg_manager = PostgreSQLManager() + # pg_manager.connect() + # pg_manager.create_trigger_function() + # table_name = feluda.config.postgresql.parameters.table_names[0]["name"] + # pg_manager.create_table(table_name) + # pg_manager.create_trigger(table_name) + # else: + # log.info("PostgreSQL is not defined in the config file") + # # check if store is present in config and start component if feluda.config.store: feluda.start_component(ComponentType.STORE) else: @@ -222,9 +217,7 @@ def handle_exception(feluda, queue_name, worker_func, retries, max_retries): vid_vec_rep_resnet.initialize(param=None) audio_vec_embedding.initialize(param=None) # start listening to the queue - amazom_queue_manager.listen( - media_index_queue, indexer(feluda, amazom_queue_manager) - ) + feluda.queue.listen(media_index_queue, indexer(feluda)) except Exception as e: print("Error Initializing Indexer", e) # Try connecting to Queue again @@ -233,7 +226,7 @@ def handle_exception(feluda, queue_name, worker_func, retries, max_retries): handle_exception( feluda, media_index_queue, - indexer(feluda, amazom_queue_manager), + indexer(feluda), retries, max_retries, ) From a2252f673b6197740839b5d1d59058024aa4214a Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Tue, 9 Apr 2024 10:47:23 +0530 Subject: [PATCH 36/48] refactor: updating config structure for store --- src/core/config.py | 31 +++++++++++++++---------------- src/worker/media/config.yml | 31 +++++++++++++++---------------- 2 files changed, 30 insertions(+), 32 deletions(-) diff --git a/src/core/config.py b/src/core/config.py index e2cc5aa5..8f8b689d 100644 --- a/src/core/config.py +++ b/src/core/config.py @@ -8,16 +8,15 @@ """ import logging -from typing import List, Optional +from typing import List, Optional, Union import yaml from dataclasses import dataclass from dacite import from_dict log = logging.getLogger(__name__) - @dataclass -class StoreParameters: +class StoreESParameters: host_name: str image_index_name: str text_index_name: str @@ -26,10 +25,20 @@ class StoreParameters: @dataclass -class StoreConfig: +class StorePostgresParameters: + table_names: List[str] + + +@dataclass +class StoreEntity: label: str type: str - parameters: StoreParameters + parameters: Union[StoreESParameters, StorePostgresParameters] + + +@dataclass +class StoreConfig: + entities: List[StoreEntity] @dataclass @@ -69,16 +78,6 @@ class OperatorConfig: label: str parameters: List[OperatorParameters] -@dataclass -class PostgreParameters: - table_names: List[dict] - -@dataclass -class PostgreSQLConfig: - label: str - type: str - parameters: PostgreParameters - @dataclass class Config: @@ -86,7 +85,7 @@ class Config: queue: Optional[QueueConfig] server: Optional[ServerConfig] operators: Optional[OperatorConfig] - postgresql: Optional[PostgreSQLConfig] + def load(filepath) -> Config: log.info("Loading config from " + filepath) diff --git a/src/worker/media/config.yml b/src/worker/media/config.yml index b80c9f6b..af8e07f6 100644 --- a/src/worker/media/config.yml +++ b/src/worker/media/config.yml @@ -1,12 +1,18 @@ store: - label: "Data Store" - type: "es_vec" - parameters: - host_name: "es" - image_index_name: "image" - text_index_name: "text" - video_index_name: "video" - audio_index_name: "audio" + entities: + - label: "Data Store" + type: "es_vec" + parameters: + host_name: "es" + image_index_name: "image" + text_index_name: "text" + video_index_name: "video" + audio_index_name: "audio" + - label: "Postgres Store" + type: "postgresql" + parameters: + table_names: + - "user_message_inbox_perceptually_similar" queue: label: "Queue" @@ -25,11 +31,4 @@ operators: parameters: { index_name: "video" } - name: "Audio Vector Representation" type: "audio_vec_embedding" - parameters: { index_name: "audio" } - -# postgresql: -# label: "PostgreSQL" -# type: "postgresql" -# parameters: -# table_names: -# - name: "user_message_inbox_perceptually_similar" \ No newline at end of file + parameters: { index_name: "audio" } \ No newline at end of file From d9d1cb120c1391123674d593f9c71911dd292934 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Tue, 9 Apr 2024 13:59:45 +0530 Subject: [PATCH 37/48] fix: store init can start postgresql --- src/core/store/__init__.py | 11 +++++++---- src/core/store/es_vec.py | 1 - 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/core/store/__init__.py b/src/core/store/__init__.py index 9d48590f..7e5b652e 100644 --- a/src/core/store/__init__.py +++ b/src/core/store/__init__.py @@ -1,8 +1,11 @@ from core.config import StoreConfig from . import es_vec +from . import postgresql -stores = {"es_vec": es_vec.ES} +stores = {"es_vec": es_vec.ES, "postgresql": postgresql.PostgreSQLManager} - -def get_store(config: StoreConfig): - return stores[config.type](config) +def get_stores(config: StoreConfig): + stores_dict = {} + for store in config.entities: + stores_dict[store.type] = stores[store.type](store) + return stores_dict \ No newline at end of file diff --git a/src/core/store/es_vec.py b/src/core/store/es_vec.py index 04be99f0..7cdf96da 100644 --- a/src/core/store/es_vec.py +++ b/src/core/store/es_vec.py @@ -14,7 +14,6 @@ class ES: def __init__(self, config: StoreConfig): - # self.es_host = config.parameters.host_name self.es_host = os.environ.get("ES_HOST") self.indices = { "text": config.parameters.text_index_name, From 9b5a6d9c84e60b02284b34d612d03dcc4aba14d1 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Tue, 9 Apr 2024 14:35:34 +0530 Subject: [PATCH 38/48] fix: store can init all components properly --- src/core/feluda.py | 10 +++++++--- src/core/store/postgresql.py | 8 +++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/core/feluda.py b/src/core/feluda.py index fb2de750..c565e39e 100644 --- a/src/core/feluda.py +++ b/src/core/feluda.py @@ -22,7 +22,7 @@ def __init__(self, configPath): if self.config.store: from core import store - self.store = store.get_store(self.config.store) + self.store = store.get_stores(self.config.store) if self.config.queue: # print("---> 1", self.config.queue) from core.queue import Queue @@ -61,8 +61,12 @@ def start_component(self, component_type: ComponentType): if component_type == ComponentType.SERVER and self.server: self.server.start() elif component_type == ComponentType.STORE and self.store: - self.store.connect() - self.store.optionally_create_index() + if self.store["es_vec"]: + self.store["es_vec"].connect() + self.store["es_vec"].optionally_create_index() + if self.store["postgresql"]: + self.store["postgresql"].connect() + self.store["postgresql"].initialise() elif component_type == ComponentType.QUEUE and self.queue: self.queue.connect() self.queue.initialize() diff --git a/src/core/store/postgresql.py b/src/core/store/postgresql.py index 81f43139..9050bad3 100644 --- a/src/core/store/postgresql.py +++ b/src/core/store/postgresql.py @@ -1,15 +1,17 @@ import psycopg2 +from core.config import StoreConfig from dotenv import load_dotenv import os load_dotenv() class PostgreSQLManager: - def __init__(self, port=5432): + def __init__(self, param: StoreConfig, port=5432, ): self.host = os.getenv("PG_HOST") self.dbname = os.getenv("PG_DB") self.user = os.getenv("PG_USER") self.password = os.getenv("PG_PASS") self.port = port + self.table_name = param.parameters.table_names[0] self.conn = None self.cur = None @@ -189,6 +191,10 @@ def delete_table(self, table_name): else: print("Not connected to the database. Call connect() first.") + def initialise(self): + self.create_trigger_function() + self.create_table(self.table_name) + self.create_trigger(self.table_name) # if __name__ == "__main__": # pg_manager = PostgreSQLManager() From 0389a3af3c412f7bc45f44dcc661253b37fb90ed Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Tue, 9 Apr 2024 19:34:37 +0530 Subject: [PATCH 39/48] fix: media worker relies more on core feluda --- src/core/store/postgresql.py | 6 +-- src/worker/media/media_worker.py | 75 ++++++++++++++------------------ 2 files changed, 36 insertions(+), 45 deletions(-) diff --git a/src/core/store/postgresql.py b/src/core/store/postgresql.py index 9050bad3..75976630 100644 --- a/src/core/store/postgresql.py +++ b/src/core/store/postgresql.py @@ -103,13 +103,13 @@ def create_trigger(self, table_name): else: print("Not connected to the database. Call connect() first.") - def store(self, table_name, value_column_value, worker_column_value): + def store(self, value_column_value, worker_column_value): if self.cur: try: prepared_stmt = None - if table_name == "user_message_inbox_duplicate": + if self.table_name == "user_message_inbox_duplicate": prepared_stmt = "INSERT INTO user_message_inbox_duplicate (value, worker_name) VALUES (%s, %s)" - elif table_name == "user_message_inbox_perceptually_similar": + elif self.table_name == "user_message_inbox_perceptually_similar": prepared_stmt = "INSERT INTO user_message_inbox_perceptually_similar (value, worker_name) VALUES (%s, %s)" self.cur.execute( diff --git a/src/worker/media/media_worker.py b/src/worker/media/media_worker.py index 199ab4ea..6c9fc256 100644 --- a/src/worker/media/media_worker.py +++ b/src/worker/media/media_worker.py @@ -7,8 +7,6 @@ from core.models.media import MediaType from core.models.media_factory import VideoFactory from core.models.media_factory import AudioFactory -from core.store.postgresql import PostgreSQLManager -from core.queue.amazon_mq import AmazonMQ from time import sleep import numpy as np import binascii @@ -21,6 +19,8 @@ def make_report_indexed(data, status): report["indexer_id"] = 1 report["post_id"] = data["id"] report["media_type"] = data["media_type"] + # TODO: send crc value to report queue + # report["crc_value"] = data report["status"] = status report["status_code"] = 200 return json.dumps(report) @@ -81,7 +81,6 @@ def calc_audio_vec_crc(audio_vector): def indexer(feluda): def worker(ch, method, properties, body): print("MESSAGE RECEIVED") - global table_name file_content = json.loads(body) file_media_type = file_content["media_type"] if file_media_type == "video": @@ -92,16 +91,18 @@ def worker(ch, method, properties, body): # extract video vectors video_vec = vid_vec_rep_resnet.run(video_path) # add crc to database - if feluda.config.postgresql: + if feluda.store["postgresql"]: video_vec_crc = calc_video_vec_crc(video_vec) - pg_manager.store(table_name, str(video_vec_crc), "video_vector_crc") + feluda.store["postgresql"].store( + str(video_vec_crc), "video_vector_crc" + ) log.info("Video CRC value added to PostgreSQL") - # generate document - doc = generate_document(video_path["path"], video_vec) - media_type = MediaType.VIDEO # store in ES - if feluda.config.store: - result = feluda.store.store(media_type, doc) + if feluda.store["es_vec"]: + # generate document + doc = generate_document(video_path["path"], video_vec) + media_type = MediaType.VIDEO + result = feluda.store["es_vec"].store(media_type, doc) log.info(result) # send indexed report to report queue report = make_report_indexed(file_content, "indexed") @@ -127,22 +128,24 @@ def worker(ch, method, properties, body): # generate audio vec audio_vec = audio_vec_embedding.run(audio_path) # add crc to database - if feluda.config.postgresql: + if feluda.store["postgresql"]: audio_vec_crc = calc_audio_vec_crc(audio_vec) - pg_manager.store(table_name, str(audio_vec_crc), "audio_vector_crc") + feluda.store["postgresql"].store( + str(audio_vec_crc), "audio_vector_crc" + ) log.info("Audio CRC value added to PostgreSQL") - # generate document - doc = { - "e_kosh_id": str(1231231), - "dataset": "test-dataset-id", - "metadata": {}, - "audio_vec": audio_vec, - "date_added": datetime.utcnow(), - } - media_type = MediaType.AUDIO # store in ES - if feluda.config.store: - result = feluda.store.store(media_type, doc) + if feluda.store["es_vec"]: + # generate document + doc = { + "e_kosh_id": str(1231231), + "dataset": "test-dataset-id", + "metadata": {}, + "audio_vec": audio_vec, + "date_added": datetime.utcnow(), + } + media_type = MediaType.AUDIO + result = feluda.store["es_vec"].store(media_type, doc) log.info(result) # send indexed report to report queue report = make_report_indexed(file_content, "indexed") @@ -189,30 +192,15 @@ def handle_exception(feluda, queue_name, worker_func, retries, max_retries): feluda = None -pg_manager = None media_index_queue = None try: # Init Feluda and load config feluda = Feluda("worker/media/config.yml") feluda.setup() media_index_queue = feluda.config.queue.parameters.queues[0]["name"] - # setup QUEUE + # setup Components + feluda.start_component(ComponentType.STORE) feluda.start_component(ComponentType.QUEUE) - # # check if postgresql exists in config - # if feluda.config.postgresql: - # pg_manager = PostgreSQLManager() - # pg_manager.connect() - # pg_manager.create_trigger_function() - # table_name = feluda.config.postgresql.parameters.table_names[0]["name"] - # pg_manager.create_table(table_name) - # pg_manager.create_trigger(table_name) - # else: - # log.info("PostgreSQL is not defined in the config file") - # # check if store is present in config and start component - if feluda.config.store: - feluda.start_component(ComponentType.STORE) - else: - log.info("Store (ES) is not defined in the config file") # init all operators vid_vec_rep_resnet.initialize(param=None) audio_vec_embedding.initialize(param=None) @@ -230,5 +218,8 @@ def handle_exception(feluda, queue_name, worker_func, retries, max_retries): retries, max_retries, ) - if feluda.config.postgresql: - pg_manager.close_connection() + + +### feluda.store +### feluda.store["postgresql"].store +### feluda.store["es_vec"].store \ No newline at end of file From 82f85a60709fb30faaddb53becce99881c0ee224 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Tue, 9 Apr 2024 19:36:36 +0530 Subject: [PATCH 40/48] chore: fixing ruff lint error --- src/worker/media/media_payload_writer.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/worker/media/media_payload_writer.py b/src/worker/media/media_payload_writer.py index 6999b6b4..874da57c 100644 --- a/src/worker/media/media_payload_writer.py +++ b/src/worker/media/media_payload_writer.py @@ -1,6 +1,5 @@ from core.feluda import ComponentType, Feluda from core.logger import Logger -from core.queue.amazon_mq import AmazonMQ from time import sleep import uuid import sys From 3a63883bf0e52a15092f377c946ad81e733b5586 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Tue, 9 Apr 2024 20:48:35 +0530 Subject: [PATCH 41/48] fix: making store component init more lean --- src/core/feluda.py | 9 +++------ src/core/store/es_vec.py | 3 +++ src/core/store/postgresql.py | 13 +------------ 3 files changed, 7 insertions(+), 18 deletions(-) diff --git a/src/core/feluda.py b/src/core/feluda.py index c565e39e..d4c36846 100644 --- a/src/core/feluda.py +++ b/src/core/feluda.py @@ -61,12 +61,9 @@ def start_component(self, component_type: ComponentType): if component_type == ComponentType.SERVER and self.server: self.server.start() elif component_type == ComponentType.STORE and self.store: - if self.store["es_vec"]: - self.store["es_vec"].connect() - self.store["es_vec"].optionally_create_index() - if self.store["postgresql"]: - self.store["postgresql"].connect() - self.store["postgresql"].initialise() + for store in self.store: + self.store[store].connect() + self.store[store].initialise() elif component_type == ComponentType.QUEUE and self.queue: self.queue.connect() self.queue.initialize() diff --git a/src/core/store/es_vec.py b/src/core/store/es_vec.py index 7cdf96da..b71f0f37 100644 --- a/src/core/store/es_vec.py +++ b/src/core/store/es_vec.py @@ -157,3 +157,6 @@ def reset(self): def stats(self): indices = self.get_indices() return indices + + def initialise(self): + self.optionally_create_index() diff --git a/src/core/store/postgresql.py b/src/core/store/postgresql.py index 75976630..75d357e2 100644 --- a/src/core/store/postgresql.py +++ b/src/core/store/postgresql.py @@ -194,15 +194,4 @@ def delete_table(self, table_name): def initialise(self): self.create_trigger_function() self.create_table(self.table_name) - self.create_trigger(self.table_name) - -# if __name__ == "__main__": -# pg_manager = PostgreSQLManager() -# pg_manager.connect() -# pg_manager.create_trigger_function() -# pg_manager.create_table("user_message_inbox_duplicate") -# pg_manager.create_trigger("user_message_inbox_duplicate") -# #pg_manager.store("user_message_inbox_duplicate", "hash_val", "blake2b_hash_value") -# pg_manager.update("user_message_inbox_duplicate", 1, "some_new_hash", "blake2b_hash_value") -# pg_manager.update("user_message_inbox_perceptually_similar", 1, "some_new_hash", "video_vector_crc") -# pg_manager.close_connection() \ No newline at end of file + self.create_trigger(self.table_name) \ No newline at end of file From a89990ebe76b8cc507a9eefd1101c1f83537a9c7 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Wed, 10 Apr 2024 13:44:44 +0530 Subject: [PATCH 42/48] fix: sending crc value to report queue --- src/worker/media/media_worker.py | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) mode change 100644 => 100755 src/worker/media/media_worker.py diff --git a/src/worker/media/media_worker.py b/src/worker/media/media_worker.py old mode 100644 new mode 100755 index 6c9fc256..2dc7f62d --- a/src/worker/media/media_worker.py +++ b/src/worker/media/media_worker.py @@ -14,13 +14,13 @@ log = Logger(__name__) -def make_report_indexed(data, status): +def make_report_indexed(data, status, crc_value=None): report = {} report["indexer_id"] = 1 report["post_id"] = data["id"] report["media_type"] = data["media_type"] - # TODO: send crc value to report queue - # report["crc_value"] = data + if crc_value is not None: + report["crc_value"] = crc_value report["status"] = status report["status_code"] = 200 return json.dumps(report) @@ -81,6 +81,8 @@ def calc_audio_vec_crc(audio_vector): def indexer(feluda): def worker(ch, method, properties, body): print("MESSAGE RECEIVED") + video_vec_crc = None + audio_vec_crc = None file_content = json.loads(body) file_media_type = file_content["media_type"] if file_media_type == "video": @@ -91,21 +93,21 @@ def worker(ch, method, properties, body): # extract video vectors video_vec = vid_vec_rep_resnet.run(video_path) # add crc to database - if feluda.store["postgresql"]: + if "postgresql" in feluda.store: video_vec_crc = calc_video_vec_crc(video_vec) feluda.store["postgresql"].store( str(video_vec_crc), "video_vector_crc" ) log.info("Video CRC value added to PostgreSQL") # store in ES - if feluda.store["es_vec"]: + if "es_vec" in feluda.store: # generate document doc = generate_document(video_path["path"], video_vec) media_type = MediaType.VIDEO result = feluda.store["es_vec"].store(media_type, doc) log.info(result) # send indexed report to report queue - report = make_report_indexed(file_content, "indexed") + report = make_report_indexed(file_content, "indexed", video_vec_crc) feluda.queue.message( feluda.config.queue.parameters.queues[1]["name"], report ) @@ -128,14 +130,14 @@ def worker(ch, method, properties, body): # generate audio vec audio_vec = audio_vec_embedding.run(audio_path) # add crc to database - if feluda.store["postgresql"]: + if "postgresql" in feluda.store: audio_vec_crc = calc_audio_vec_crc(audio_vec) feluda.store["postgresql"].store( str(audio_vec_crc), "audio_vector_crc" ) log.info("Audio CRC value added to PostgreSQL") # store in ES - if feluda.store["es_vec"]: + if "es_vec" in feluda.store: # generate document doc = { "e_kosh_id": str(1231231), @@ -148,7 +150,7 @@ def worker(ch, method, properties, body): result = feluda.store["es_vec"].store(media_type, doc) log.info(result) # send indexed report to report queue - report = make_report_indexed(file_content, "indexed") + report = make_report_indexed(file_content, "indexed", audio_vec_crc) feluda.queue.message( feluda.config.queue.parameters.queues[1]["name"], report ) @@ -217,9 +219,4 @@ def handle_exception(feluda, queue_name, worker_func, retries, max_retries): indexer(feluda), retries, max_retries, - ) - - -### feluda.store -### feluda.store["postgresql"].store -### feluda.store["es_vec"].store \ No newline at end of file + ) \ No newline at end of file From a508c5a1386f9f6a3bd1102ae4be5e514555d7ff Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Thu, 11 Apr 2024 11:19:53 +0530 Subject: [PATCH 43/48] chore: adding init files for hash and media worker --- src/worker/hash/__init__.py | 0 src/worker/media/__init__.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/worker/hash/__init__.py create mode 100644 src/worker/media/__init__.py diff --git a/src/worker/hash/__init__.py b/src/worker/hash/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/worker/media/__init__.py b/src/worker/media/__init__.py new file mode 100644 index 00000000..e69de29b From 059d87801e4605f48e40e44c8548e2d1225deafc Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Thu, 11 Apr 2024 12:15:42 +0530 Subject: [PATCH 44/48] chore: updating hash worker config --- src/worker/hash/config.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/worker/hash/config.yml b/src/worker/hash/config.yml index 5ac5fe4e..590382e6 100644 --- a/src/worker/hash/config.yml +++ b/src/worker/hash/config.yml @@ -1,3 +1,11 @@ +store: + entities: + - label: "Postgres Store" + type: "postgresql" + parameters: + table_names: + - "user_message_inbox_duplicate" + queue : label : "Queue" type : "rabbitmq" From 502ad4e8413641002f17b1f33966d75ca483cb8d Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Thu, 11 Apr 2024 13:53:50 +0530 Subject: [PATCH 45/48] fix: hash payload writer can send audio/video both --- src/worker/hash/hash_payload_writer.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/worker/hash/hash_payload_writer.py b/src/worker/hash/hash_payload_writer.py index 926f80dd..c9cf76e0 100644 --- a/src/worker/hash/hash_payload_writer.py +++ b/src/worker/hash/hash_payload_writer.py @@ -2,6 +2,7 @@ from core.logger import Logger from time import sleep import uuid +import sys log = Logger(__name__) try: @@ -9,15 +10,25 @@ feluda.setup() count_queue = feluda.config.queue.parameters.queues[0]['name'] feluda.start_component(ComponentType.QUEUE) + # take media_type from command line + media_type = sys.argv[1] if len(sys.argv) > 1 else "video" + media_paths = { + "video": "https://raw.githubusercontent.com/tattle-made/feluda/main/src/core/operators/sample_data/sample-cat-video.mp4", + "audio": "https://raw.githubusercontent.com/tattle-made/feluda/main/src/core/operators/sample_data/audio.wav", + } + + path = media_paths.get(media_type) + if path is None: + raise ValueError("Unsupported media type") for _ in range(1): unique_id = str(uuid.uuid4()) dummy_payload = { "id": unique_id, - "path": 'https://raw.githubusercontent.com/tattle-made/feluda/main/src/core/operators/sample_data/sample-cat-video.mp4' + "path": path, + "media_type": media_type, } feluda.queue.message(count_queue, dummy_payload) sleep(0.1) - except Exception as e: print("Error Initializing Indexer", e) \ No newline at end of file From d8aed50b4af1f9cfc9dbbac3894a92c80bc96902 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Thu, 11 Apr 2024 15:03:39 +0530 Subject: [PATCH 46/48] fix: hash worker relies more on core feluda --- src/worker/hash/hash_worker.py | 115 +++++++++++++++++++++++++-------- 1 file changed, 89 insertions(+), 26 deletions(-) diff --git a/src/worker/hash/hash_worker.py b/src/worker/hash/hash_worker.py index b34eeb83..5435fca6 100644 --- a/src/worker/hash/hash_worker.py +++ b/src/worker/hash/hash_worker.py @@ -2,19 +2,24 @@ from core.logger import Logger from core.operators import media_file_hash import json -from core.models.media_factory import VideoFactory -from core.store.postgresql import PostgreSQLManager +from core.models.media_factory import VideoFactory, AudioFactory from time import sleep + log = Logger(__name__) -def make_report_indexed(data, status): + +def make_report_indexed(data, status, hash_value=None): report = {} report["indexer_id"] = 1 report["post_id"] = data["id"] + report["media_type"] = data["media_type"] + if hash_value is not None: + report["hash_value"] = hash_value report["status"] = status report["status_code"] = 200 return json.dumps(report) + def make_report_failed(data, status): report = {} report["indexer_id"] = 1 @@ -23,6 +28,7 @@ def make_report_failed(data, status): report["status_code"] = 400 return json.dumps(report) + def handle_exception(feluda, queue_name, worker_func, retries, max_retries): retry_interval = 60 if retries < max_retries: @@ -39,46 +45,103 @@ def handle_exception(feluda, queue_name, worker_func, retries, max_retries): else: print("Failed to re-establish connection after maximum retries.") + def indexer(feluda): def worker(ch, method, properties, body): print("MESSAGE RECEIVED") + video_hash_value = None + audio_hash_value = None file_content = json.loads(body) - video_path = VideoFactory.make_from_url(file_content['path']) - try: - log.info("Processing file") - hash = media_file_hash.run(video_path) - log.debug(hash) - pg_manager.store("user_message_inbox_duplicate", str(hash), "blake2b_hash_value") - log.info("Hash value added to PostgreSQL") - report = make_report_indexed(file_content, "indexed") - feluda.queue.message(feluda.config.queue.parameters.queues[1]['name'], report) - ch.basic_ack(delivery_tag=method.delivery_tag) - except Exception as e: - print("Error indexing media", e) + file_media_type = file_content["media_type"] + if file_media_type == "video": + log.info("Media Type is Video") + try: + # download the video from url (supports s3) + video_path = VideoFactory.make_from_url(file_content["path"]) + # extrach hash value + video_hash_value = media_file_hash.run(video_path) + log.info(video_hash_value) + # add hash value to database + if feluda.config.store and "postgresql" in feluda.store: + feluda.store["postgresql"].store( + str(video_hash_value), "blake2b_hash_value" + ) + log.info("Hash value added to PostgreSQL") + # send indexed report to report queue + report = make_report_indexed(file_content, "indexed", video_hash_value) + feluda.queue.message( + feluda.config.queue.parameters.queues[1]["name"], report + ) + # send ack + ch.basic_ack(delivery_tag=method.delivery_tag) + except Exception as e: + print("Error indexing media", e) + # send failed report to report queue + report = make_report_failed(file_content, "failed") + feluda.queue.message( + feluda.config.queue.parameters.queues[1]["name"], report + ) + # requeue the media file + ch.basic_nack(delivery_tag=method.delivery_tag) + elif file_media_type == "audio": + log.info("Media Type is Audio") + try: + # download audio file from url (supports S3) + audio_path = AudioFactory.make_from_url(file_content["path"]) + # extrach hash value + audio_hash_value = media_file_hash.run(audio_path) + log.info(audio_hash_value) + # add hash value to database + if feluda.config.store and "postgresql" in feluda.store: + feluda.store["postgresql"].store( + str(audio_hash_value), "blake2b_hash_value" + ) + log.info("Hash value added to PostgreSQL") + # send indexed report to report queue + report = make_report_indexed(file_content, "indexed", audio_hash_value) + feluda.queue.message( + feluda.config.queue.parameters.queues[1]["name"], report + ) + # send ack + ch.basic_ack(delivery_tag=method.delivery_tag) + except Exception as e: + print("Error indexing media", e) + # send failed report to report queue + report = make_report_failed(file_content, "failed") + feluda.queue.message( + feluda.config.queue.parameters.queues[1]["name"], report + ) + # requeue the media file + ch.basic_nack(delivery_tag=method.delivery_tag) + else: + log.info("This media type is not supported currently") + # TODO: send a customised report and then report it to the queue with a ack report = make_report_failed(file_content, "failed") - feluda.queue.message(feluda.config.queue.parameters.queues[1]['name'], report) - # requeue the media file - ch.basic_nack(delivery_tag=method.delivery_tag) + feluda.queue.message( + feluda.config.queue.parameters.queues[1]["name"], report + ) + ch.basic_ack(delivery_tag=method.delivery_tag) + return worker + feluda = None -pg_manager = None count_queue = None try: + # Init Feluda and load config feluda = Feluda("worker/hash/config.yml") feluda.setup() - pg_manager = PostgreSQLManager() - pg_manager.connect() - pg_manager.create_trigger_function() - pg_manager.create_table("user_message_inbox_duplicate") - pg_manager.create_trigger("user_message_inbox_duplicate") - count_queue = feluda.config.queue.parameters.queues[0]['name'] + count_queue = feluda.config.queue.parameters.queues[0]["name"] + # setup Components + feluda.start_component(ComponentType.STORE) feluda.start_component(ComponentType.QUEUE) + # init hash operator media_file_hash.initialize(param=None) + # start listening to the queue feluda.queue.listen(count_queue, indexer(feluda)) except Exception as e: print("Error Initializing Indexer", e) + # Try connecting to Queue again retries = 0 max_retries = 10 handle_exception(feluda, count_queue, indexer(feluda), retries, max_retries) - pg_manager.close_connection() \ No newline at end of file From 435cf800daddbdc5ed1e7009688de7c5f8cfca74 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Thu, 11 Apr 2024 15:11:30 +0530 Subject: [PATCH 47/48] chore: if statement checks for store in config inside media worker --- src/worker/media/media_worker.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/worker/media/media_worker.py b/src/worker/media/media_worker.py index 2dc7f62d..c1f120a3 100755 --- a/src/worker/media/media_worker.py +++ b/src/worker/media/media_worker.py @@ -93,14 +93,14 @@ def worker(ch, method, properties, body): # extract video vectors video_vec = vid_vec_rep_resnet.run(video_path) # add crc to database - if "postgresql" in feluda.store: + if feluda.config.store and "postgresql" in feluda.store: video_vec_crc = calc_video_vec_crc(video_vec) feluda.store["postgresql"].store( str(video_vec_crc), "video_vector_crc" ) log.info("Video CRC value added to PostgreSQL") # store in ES - if "es_vec" in feluda.store: + if feluda.config.store and "es_vec" in feluda.store: # generate document doc = generate_document(video_path["path"], video_vec) media_type = MediaType.VIDEO @@ -130,14 +130,14 @@ def worker(ch, method, properties, body): # generate audio vec audio_vec = audio_vec_embedding.run(audio_path) # add crc to database - if "postgresql" in feluda.store: + if feluda.config.store and "postgresql" in feluda.store: audio_vec_crc = calc_audio_vec_crc(audio_vec) feluda.store["postgresql"].store( str(audio_vec_crc), "audio_vector_crc" ) log.info("Audio CRC value added to PostgreSQL") # store in ES - if "es_vec" in feluda.store: + if feluda.config.store and "es_vec" in feluda.store: # generate document doc = { "e_kosh_id": str(1231231), From f6d9258eeedaa730365a7faea0ff517c78b20357 Mon Sep 17 00:00:00 2001 From: Aatman Vaidya Date: Thu, 25 Apr 2024 19:32:35 +0530 Subject: [PATCH 48/48] chore: sending ack on exception instead of nack --- src/worker/hash/hash_worker.py | 4 ++-- src/worker/media/media_worker.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/worker/hash/hash_worker.py b/src/worker/hash/hash_worker.py index 5435fca6..4f0fe644 100644 --- a/src/worker/hash/hash_worker.py +++ b/src/worker/hash/hash_worker.py @@ -82,7 +82,7 @@ def worker(ch, method, properties, body): feluda.config.queue.parameters.queues[1]["name"], report ) # requeue the media file - ch.basic_nack(delivery_tag=method.delivery_tag) + ch.basic_ack(delivery_tag=method.delivery_tag) elif file_media_type == "audio": log.info("Media Type is Audio") try: @@ -112,7 +112,7 @@ def worker(ch, method, properties, body): feluda.config.queue.parameters.queues[1]["name"], report ) # requeue the media file - ch.basic_nack(delivery_tag=method.delivery_tag) + ch.basic_ack(delivery_tag=method.delivery_tag) else: log.info("This media type is not supported currently") # TODO: send a customised report and then report it to the queue with a ack diff --git a/src/worker/media/media_worker.py b/src/worker/media/media_worker.py index c1f120a3..c7b71121 100755 --- a/src/worker/media/media_worker.py +++ b/src/worker/media/media_worker.py @@ -121,7 +121,7 @@ def worker(ch, method, properties, body): feluda.config.queue.parameters.queues[1]["name"], report ) # requeue the media file - ch.basic_nack(delivery_tag=method.delivery_tag) + ch.basic_ack(delivery_tag=method.delivery_tag) elif file_media_type == "audio": log.info("Media Type is Audio") try: @@ -163,7 +163,7 @@ def worker(ch, method, properties, body): feluda.config.queue.parameters.queues[1]["name"], report ) # requeue the media file - ch.basic_nack(delivery_tag=method.delivery_tag) + ch.basic_ack(delivery_tag=method.delivery_tag) else: log.info("This media type is not supported currently") # TODO: send a customised report and then report it to the queue with a ack