Refactor reranking (#1113)
Signed-off-by: WenjiaoYue <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> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: ZePan110 <ze.pan@intel.com>
This commit is contained in:
2
.github/CODEOWNERS
vendored
2
.github/CODEOWNERS
vendored
@@ -21,7 +21,7 @@
|
|||||||
/comps/lvms/ sihan.chen@intel.com liang1.lv@intel.com
|
/comps/lvms/ sihan.chen@intel.com liang1.lv@intel.com
|
||||||
/comps/prompt_registry/ hoong.tee.yeoh@intel.com xinyao.wang@intel.com
|
/comps/prompt_registry/ hoong.tee.yeoh@intel.com xinyao.wang@intel.com
|
||||||
/comps/ragas/ kaokao.lv@intel.com liang1.lv@intel.com
|
/comps/ragas/ kaokao.lv@intel.com liang1.lv@intel.com
|
||||||
/comps/reranks/ kaokao.lv@intel.com liang1.lv@intel.com
|
/comps/rerankings/ kaokao.lv@intel.com liang1.lv@intel.com
|
||||||
/comps/retrievers/ kaokao.lv@intel.com liang1.lv@intel.com
|
/comps/retrievers/ kaokao.lv@intel.com liang1.lv@intel.com
|
||||||
/comps/text2image/ xinyu.ye@intel.com liang1.lv@intel.com
|
/comps/text2image/ xinyu.ye@intel.com liang1.lv@intel.com
|
||||||
/comps/text2sql/ yogesh.pandey@intel.com qing.yao@intel.com
|
/comps/text2sql/ yogesh.pandey@intel.com qing.yao@intel.com
|
||||||
|
|||||||
@@ -5,5 +5,5 @@
|
|||||||
services:
|
services:
|
||||||
reranking:
|
reranking:
|
||||||
build:
|
build:
|
||||||
dockerfile: comps/reranks/src/Dockerfile
|
dockerfile: comps/rerankings/src/Dockerfile
|
||||||
image: ${REGISTRY:-opea}/reranking:${TAG:-latest}
|
image: ${REGISTRY:-opea}/reranking:${TAG:-latest}
|
||||||
2
.github/workflows/manual-comps-test.yml
vendored
2
.github/workflows/manual-comps-test.yml
vendored
@@ -7,7 +7,7 @@ on:
|
|||||||
inputs:
|
inputs:
|
||||||
services:
|
services:
|
||||||
default: "asr"
|
default: "asr"
|
||||||
description: "List of services to test [agent,asr,chathistory,dataprep,embeddings,feedback_management,finetuning,guardrails,intent_detection,knowledgegraphs,llms,lvms,nginx,prompt_registry,ragas,reranks,retrievers,tts,vectorstores,web_retrievers]"
|
description: "List of services to test [agent,asr,chathistory,dataprep,embeddings,feedback_management,finetuning,guardrails,intent_detection,knowledgegraphs,llms,lvms,nginx,prompt_registry,ragas,rerankings,retrievers,tts,vectorstores,web_retrievers]"
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
build:
|
build:
|
||||||
|
|||||||
2
.github/workflows/manual-docker-publish.yml
vendored
2
.github/workflows/manual-docker-publish.yml
vendored
@@ -7,7 +7,7 @@ on:
|
|||||||
inputs:
|
inputs:
|
||||||
services:
|
services:
|
||||||
default: ""
|
default: ""
|
||||||
description: "List of services to test [agent,asr,chathistory,dataprep,embeddings,feedback_management,finetuning,guardrails,intent_detection,knowledgegraphs,llms,lvms,nginx,prompt_registry,ragas,reranks,retrievers,tts,vectorstores,web_retrievers]"
|
description: "List of services to test [agent,asr,chathistory,dataprep,embeddings,feedback_management,finetuning,guardrails,intent_detection,knowledgegraphs,llms,lvms,nginx,prompt_registry,ragas,rerankings,retrievers,tts,vectorstores,web_retrievers]"
|
||||||
required: false
|
required: false
|
||||||
type: string
|
type: string
|
||||||
images:
|
images:
|
||||||
|
|||||||
2
.github/workflows/manual-docker-scan.yml
vendored
2
.github/workflows/manual-docker-scan.yml
vendored
@@ -7,7 +7,7 @@ on:
|
|||||||
inputs:
|
inputs:
|
||||||
services:
|
services:
|
||||||
default: "asr"
|
default: "asr"
|
||||||
description: "List of services to test [agent_langchain,asr,chathistory_mongo,dataprep_milvus...]" #,embeddings,guardrails,llms,lvms,prompt_registry,ragas,reranks,retrievers,tts,vectorstores,web_retrievers]"
|
description: "List of services to test [agent_langchain,asr,chathistory_mongo,dataprep_milvus...]" #,embeddings,guardrails,llms,lvms,prompt_registry,ragas,rerankings,retrievers,tts,vectorstores,web_retrievers]"
|
||||||
required: false
|
required: false
|
||||||
type: string
|
type: string
|
||||||
images:
|
images:
|
||||||
|
|||||||
@@ -41,8 +41,8 @@ The initially supported `Microservices` are described in the below table. More `
|
|||||||
| [Embedding](./comps/embeddings/src/README.md) | [LangChain](https://www.langchain.com)/[LlamaIndex](https://www.llamaindex.ai) | [BAAI/bge-base-en-v1.5](https://huggingface.co/BAAI/bge-base-en-v1.5) | [TEI-Gaudi](https://github.com/huggingface/tei-gaudi) | Gaudi2 | Embedding on Gaudi2 |
|
| [Embedding](./comps/embeddings/src/README.md) | [LangChain](https://www.langchain.com)/[LlamaIndex](https://www.llamaindex.ai) | [BAAI/bge-base-en-v1.5](https://huggingface.co/BAAI/bge-base-en-v1.5) | [TEI-Gaudi](https://github.com/huggingface/tei-gaudi) | Gaudi2 | Embedding on Gaudi2 |
|
||||||
| [Embedding](./comps/embeddings/src/README.md) | [LangChain](https://www.langchain.com)/[LlamaIndex](https://www.llamaindex.ai) | [BAAI/bge-base-en-v1.5](https://huggingface.co/BAAI/bge-base-en-v1.5) | [TEI](https://github.com/huggingface/text-embeddings-inference) | Xeon | Embedding on Xeon CPU |
|
| [Embedding](./comps/embeddings/src/README.md) | [LangChain](https://www.langchain.com)/[LlamaIndex](https://www.llamaindex.ai) | [BAAI/bge-base-en-v1.5](https://huggingface.co/BAAI/bge-base-en-v1.5) | [TEI](https://github.com/huggingface/text-embeddings-inference) | Xeon | Embedding on Xeon CPU |
|
||||||
| [Retriever](./comps/retrievers/src/README.md) | [LangChain](https://www.langchain.com)/[LlamaIndex](https://www.llamaindex.ai) | [BAAI/bge-base-en-v1.5](https://huggingface.co/BAAI/bge-base-en-v1.5) | [TEI](https://github.com/huggingface/text-embeddings-inference) | Xeon | Retriever on Xeon CPU |
|
| [Retriever](./comps/retrievers/src/README.md) | [LangChain](https://www.langchain.com)/[LlamaIndex](https://www.llamaindex.ai) | [BAAI/bge-base-en-v1.5](https://huggingface.co/BAAI/bge-base-en-v1.5) | [TEI](https://github.com/huggingface/text-embeddings-inference) | Xeon | Retriever on Xeon CPU |
|
||||||
| [Reranking](./comps/reranks/src/README.md) | [LangChain](https://www.langchain.com)/[LlamaIndex](https://www.llamaindex.ai) | [BAAI/bge-reranker-base](https://huggingface.co/BAAI/bge-reranker-base) | [TEI-Gaudi](https://github.com/huggingface/tei-gaudi) | Gaudi2 | Reranking on Gaudi2 |
|
| [Reranking](./comps/rerankings/src/README.md) | [LangChain](https://www.langchain.com)/[LlamaIndex](https://www.llamaindex.ai) | [BAAI/bge-reranker-base](https://huggingface.co/BAAI/bge-reranker-base) | [TEI-Gaudi](https://github.com/huggingface/tei-gaudi) | Gaudi2 | Reranking on Gaudi2 |
|
||||||
| [Reranking](./comps/reranks/src/README.md) | [LangChain](https://www.langchain.com)/[LlamaIndex](https://www.llamaindex.ai) | [BBAAI/bge-reranker-base](https://huggingface.co/BAAI/bge-reranker-base) | [TEI](https://github.com/huggingface/text-embeddings-inference) | Xeon | Reranking on Xeon CPU |
|
| [Reranking](./comps/rerankings/src/README.md) | [LangChain](https://www.langchain.com)/[LlamaIndex](https://www.llamaindex.ai) | [BBAAI/bge-reranker-base](https://huggingface.co/BAAI/bge-reranker-base) | [TEI](https://github.com/huggingface/text-embeddings-inference) | Xeon | Reranking on Xeon CPU |
|
||||||
| [ASR](./comps/asr/src/README.md) | NA | [openai/whisper-small](https://huggingface.co/openai/whisper-small) | NA | Gaudi2 | Audio-Speech-Recognition on Gaudi2 |
|
| [ASR](./comps/asr/src/README.md) | NA | [openai/whisper-small](https://huggingface.co/openai/whisper-small) | NA | Gaudi2 | Audio-Speech-Recognition on Gaudi2 |
|
||||||
| [ASR](./comps/asr/src/README.md) | NA | [openai/whisper-small](https://huggingface.co/openai/whisper-small) | NA | Xeon | Audio-Speech-RecognitionS on Xeon CPU |
|
| [ASR](./comps/asr/src/README.md) | NA | [openai/whisper-small](https://huggingface.co/openai/whisper-small) | NA | Xeon | Audio-Speech-RecognitionS on Xeon CPU |
|
||||||
| [TTS](./comps/tts/src/README.md) | NA | [microsoft/speecht5_tts](https://huggingface.co/microsoft/speecht5_tts) | NA | Gaudi2 | Text-To-Speech on Gaudi2 |
|
| [TTS](./comps/tts/src/README.md) | NA | [microsoft/speecht5_tts](https://huggingface.co/microsoft/speecht5_tts) | NA | Gaudi2 | Text-To-Speech on Gaudi2 |
|
||||||
|
|||||||
@@ -244,7 +244,7 @@ curl http://${your_ip}:8015/v1/finetune/list_checkpoints -X POST -H "Content-Typ
|
|||||||
|
|
||||||
### 3.4 Leverage fine-tuned model
|
### 3.4 Leverage fine-tuned model
|
||||||
|
|
||||||
After fine-tuning job is done, fine-tuned model can be chosen from listed checkpoints, then the fine-tuned model can be used in other microservices. For example, fine-tuned reranking model can be used in [reranks](../reranks/src/README.md) microservice by assign its path to the environment variable `RERANK_MODEL_ID`, fine-tuned embedding model can be used in [embeddings](../embeddings/src/README.md) microservice by assign its path to the environment variable `model`, LLMs after instruction tuning can be used in [llms](../llms/src/text-generation/README.md) microservice by assign its path to the environment variable `your_hf_llm_model`.
|
After fine-tuning job is done, fine-tuned model can be chosen from listed checkpoints, then the fine-tuned model can be used in other microservices. For example, fine-tuned reranking model can be used in [rerankings](../rerankings/src/README.md) microservice by assign its path to the environment variable `RERANK_MODEL_ID`, fine-tuned embedding model can be used in [embeddings](../embeddings/src/README.md) microservice by assign its path to the environment variable `model`, LLMs after instruction tuning can be used in [llms](../llms/src/text-generation/README.md) microservice by assign its path to the environment variable `your_hf_llm_model`.
|
||||||
|
|
||||||
## 🚀4. Descriptions for Finetuning parameters
|
## 🚀4. Descriptions for Finetuning parameters
|
||||||
|
|
||||||
|
|||||||
@@ -4238,7 +4238,7 @@ def _ranking_fast(
|
|||||||
alpha: float,
|
alpha: float,
|
||||||
beam_width: int,
|
beam_width: int,
|
||||||
) -> torch.FloatTensor:
|
) -> torch.FloatTensor:
|
||||||
"""Reranks the top_k candidates based on a degeneration penalty (cosine similarity with previous tokens), as described
|
"""Rerankings the top_k candidates based on a degeneration penalty (cosine similarity with previous tokens), as described
|
||||||
in the paper "A Contrastive Framework for Neural Text Generation".
|
in the paper "A Contrastive Framework for Neural Text Generation".
|
||||||
|
|
||||||
Returns the index of the best candidate for each
|
Returns the index of the best candidate for each
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ services:
|
|||||||
http_proxy: ${http_proxy}
|
http_proxy: ${http_proxy}
|
||||||
https_proxy: ${https_proxy}
|
https_proxy: ${https_proxy}
|
||||||
TEI_RERANKING_ENDPOINT: ${TEI_RERANKING_ENDPOINT}
|
TEI_RERANKING_ENDPOINT: ${TEI_RERANKING_ENDPOINT}
|
||||||
|
RERANK_COMPONENT_NAME: "OPEA_TEI_RERANKING"
|
||||||
HF_TOKEN: ${HF_TOKEN}
|
HF_TOKEN: ${HF_TOKEN}
|
||||||
depends_on:
|
depends_on:
|
||||||
tei_reranking_service:
|
tei_reranking_service:
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
# Copyright (C) 2024 Intel Corporation
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
services:
|
||||||
|
reranking:
|
||||||
|
image: opea/reranking:latest
|
||||||
|
container_name: reranking-videoqna-server
|
||||||
|
ports:
|
||||||
|
- "8000:8000"
|
||||||
|
ipc: host
|
||||||
|
environment:
|
||||||
|
no_proxy: ${no_proxy}
|
||||||
|
http_proxy: ${http_proxy}
|
||||||
|
https_proxy: ${https_proxy}
|
||||||
|
CHUNK_DURATION: ${CHUNK_DURATION}
|
||||||
|
FILE_SERVER_ENDPOINT: ${FILE_SERVER_ENDPOINT}
|
||||||
|
RERANK_COMPONENT_NAME: "OPEA_VIDEO_RERANKING"
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
networks:
|
||||||
|
default:
|
||||||
|
driver: bridge
|
||||||
46
comps/rerankings/src/Dockerfile
Normal file
46
comps/rerankings/src/Dockerfile
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
# Copyright (C) 2024 Intel Corporation
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
FROM python:3.11-slim
|
||||||
|
|
||||||
|
ENV LANG=C.UTF-8
|
||||||
|
|
||||||
|
ARG ARCH="cpu"
|
||||||
|
ARG SERVICE="all"
|
||||||
|
|
||||||
|
RUN apt-get update -y && apt-get install -y --no-install-recommends --fix-missing \
|
||||||
|
git \
|
||||||
|
libgl1-mesa-glx \
|
||||||
|
libjemalloc-dev
|
||||||
|
|
||||||
|
RUN useradd -m -s /bin/bash user && \
|
||||||
|
mkdir -p /home/user && \
|
||||||
|
chown -R user /home/user/
|
||||||
|
|
||||||
|
USER user
|
||||||
|
|
||||||
|
COPY comps /home/user/comps
|
||||||
|
|
||||||
|
RUN if [ ${ARCH} = "cpu" ]; then \
|
||||||
|
pip install --no-cache-dir torch --index-url https://download.pytorch.org/whl/cpu; \
|
||||||
|
fi && \
|
||||||
|
if [ ${SERVICE} = "videoqna" ]; then \
|
||||||
|
pip install --no-cache-dir --upgrade pip setuptools && \
|
||||||
|
pip install --no-cache-dir -r /home/user/comps/rerankings/src/requirements_videoqna.txt; \
|
||||||
|
elif [ ${SERVICE} = "all" ]; then \
|
||||||
|
git clone https://github.com/IntelLabs/fastRAG.git /home/user/fastRAG && \
|
||||||
|
cd /home/user/fastRAG && \
|
||||||
|
pip install --no-cache-dir --upgrade pip && \
|
||||||
|
pip install --no-cache-dir . && \
|
||||||
|
pip install --no-cache-dir .[intel] && \
|
||||||
|
pip install --no-cache-dir -r /home/user/comps/rerankings/src/requirements_videoqna.txt; \
|
||||||
|
fi && \
|
||||||
|
pip install --no-cache-dir --upgrade pip setuptools && \
|
||||||
|
pip install --no-cache-dir -r /home/user/comps/rerankings/src/requirements.txt;
|
||||||
|
|
||||||
|
|
||||||
|
ENV PYTHONPATH=$PYTHONPATH:/home/user
|
||||||
|
|
||||||
|
WORKDIR /home/user/comps/rerankings/src
|
||||||
|
|
||||||
|
ENTRYPOINT ["python", "opea_reranking_microservice.py"]
|
||||||
|
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 106 KiB |
@@ -18,7 +18,7 @@ from comps.cores.proto.api_protocol import (
|
|||||||
RerankingResponseData,
|
RerankingResponseData,
|
||||||
)
|
)
|
||||||
|
|
||||||
logger = CustomLogger("reranking_tei")
|
logger = CustomLogger("tei_reranking")
|
||||||
logflag = os.getenv("LOGFLAG", False)
|
logflag = os.getenv("LOGFLAG", False)
|
||||||
|
|
||||||
# Environment variables
|
# Environment variables
|
||||||
@@ -27,8 +27,8 @@ CLIENTID = os.getenv("CLIENTID")
|
|||||||
CLIENT_SECRET = os.getenv("CLIENT_SECRET")
|
CLIENT_SECRET = os.getenv("CLIENT_SECRET")
|
||||||
|
|
||||||
|
|
||||||
@OpeaComponentRegistry.register("OPEA_RERANK_TEI")
|
@OpeaComponentRegistry.register("OPEA_TEI_RERANKING")
|
||||||
class OPEATEIReranking(OpeaComponent):
|
class OpeaTEIReranking(OpeaComponent):
|
||||||
"""A specialized reranking component derived from OpeaComponent for TEI reranking services.
|
"""A specialized reranking component derived from OpeaComponent for TEI reranking services.
|
||||||
|
|
||||||
Attributes:
|
Attributes:
|
||||||
121
comps/rerankings/src/integrations/videoqna.py
Normal file
121
comps/rerankings/src/integrations/videoqna.py
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
# Copyright (C) 2024 Intel Corporation
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
import logging
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
|
||||||
|
from fastapi import HTTPException
|
||||||
|
|
||||||
|
from comps import CustomLogger, LVMVideoDoc, OpeaComponentRegistry, SearchedMultimodalDoc, ServiceType
|
||||||
|
from comps.cores.common.component import OpeaComponent
|
||||||
|
|
||||||
|
logger = CustomLogger("video_reranking")
|
||||||
|
logflag = os.getenv("LOGFLAG", False)
|
||||||
|
|
||||||
|
chunk_duration = os.getenv("CHUNK_DURATION", "10") or "10"
|
||||||
|
chunk_duration = float(chunk_duration) if chunk_duration.isdigit() else 10.0
|
||||||
|
|
||||||
|
file_server_endpoint = os.getenv("FILE_SERVER_ENDPOINT") or "http://0.0.0.0:6005"
|
||||||
|
|
||||||
|
logging.basicConfig(
|
||||||
|
level=logging.INFO, format="%(levelname)s: [%(asctime)s] %(message)s", datefmt="%d/%m/%Y %I:%M:%S"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def get_top_doc(top_n, videos) -> list:
|
||||||
|
hit_score = {}
|
||||||
|
if videos is None:
|
||||||
|
return None
|
||||||
|
for video_name in videos:
|
||||||
|
try:
|
||||||
|
if video_name not in hit_score.keys():
|
||||||
|
hit_score[video_name] = 0
|
||||||
|
hit_score[video_name] += 1
|
||||||
|
except KeyError as r:
|
||||||
|
logging.info(f"no video name {r}")
|
||||||
|
|
||||||
|
x = dict(sorted(hit_score.items(), key=lambda item: -item[1])) # sorted dict of video name and score
|
||||||
|
top_n_names = list(x.keys())[:top_n]
|
||||||
|
logging.info(f"top docs = {x}")
|
||||||
|
logging.info(f"top n docs names = {top_n_names}")
|
||||||
|
|
||||||
|
return top_n_names
|
||||||
|
|
||||||
|
|
||||||
|
def find_timestamp_from_video(metadata_list, video):
|
||||||
|
return next(
|
||||||
|
(metadata["timestamp"] for metadata in metadata_list if metadata["video"] == video),
|
||||||
|
None,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def format_video_name(video_name):
|
||||||
|
# Check for an existing file extension
|
||||||
|
match = re.search(r"\.(\w+)$", video_name)
|
||||||
|
|
||||||
|
if match:
|
||||||
|
extension = match.group(1)
|
||||||
|
# If the extension is not 'mp4', raise an error
|
||||||
|
if extension != "mp4":
|
||||||
|
raise ValueError(f"Invalid file extension: .{extension}. Only '.mp4' is allowed.")
|
||||||
|
|
||||||
|
# Use regex to remove any suffix after the base name (e.g., '_interval_0', etc.)
|
||||||
|
base_name = re.sub(r"(_interval_\d+)?(\.mp4)?$", "", video_name)
|
||||||
|
|
||||||
|
# Add the '.mp4' extension
|
||||||
|
formatted_name = f"{base_name}.mp4"
|
||||||
|
|
||||||
|
return formatted_name
|
||||||
|
|
||||||
|
|
||||||
|
@OpeaComponentRegistry.register("OPEA_VIDEO_RERANKING")
|
||||||
|
class OpeaVideoReranking(OpeaComponent):
|
||||||
|
"""A specialized reranking component derived from OpeaComponent for OPEA Video native reranking services."""
|
||||||
|
|
||||||
|
def __init__(self, name: str, description: str, config: dict = None):
|
||||||
|
super().__init__(name, ServiceType.RERANK.name.lower(), description, config)
|
||||||
|
|
||||||
|
async def invoke(self, input: SearchedMultimodalDoc) -> LVMVideoDoc:
|
||||||
|
"""Invokes the reranking service to generate reranking for the provided input.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
input (SearchedMultimodalDoc): The input in OpenAI reranking format.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
LVMVideoDoc: The response in OpenAI reranking format.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
# get top video name from metadata
|
||||||
|
video_names = [meta["video"] for meta in input.metadata]
|
||||||
|
top_video_names = get_top_doc(input.top_n, video_names)
|
||||||
|
|
||||||
|
# only use the first top video
|
||||||
|
timestamp = find_timestamp_from_video(input.metadata, top_video_names[0])
|
||||||
|
formatted_video_name = format_video_name(top_video_names[0])
|
||||||
|
video_url = f"{file_server_endpoint.rstrip('/')}/{formatted_video_name}"
|
||||||
|
|
||||||
|
result = LVMVideoDoc(
|
||||||
|
video_url=video_url,
|
||||||
|
prompt=input.initial_query,
|
||||||
|
chunk_start=timestamp,
|
||||||
|
chunk_duration=float(chunk_duration),
|
||||||
|
max_new_tokens=512,
|
||||||
|
)
|
||||||
|
except ValueError as e:
|
||||||
|
raise HTTPException(status_code=400, detail=str(e))
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"Unexpected error in reranking: {str(e)}")
|
||||||
|
# Handle any other exceptions with a generic server error response
|
||||||
|
raise HTTPException(status_code=500, detail="An unexpected error occurred.")
|
||||||
|
|
||||||
|
return result
|
||||||
|
|
||||||
|
def check_health(self) -> bool:
|
||||||
|
"""Checks the health of the reranking service.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
bool: True if the service is reachable and healthy, False otherwise.
|
||||||
|
"""
|
||||||
|
|
||||||
|
return True
|
||||||
@@ -5,7 +5,8 @@ import os
|
|||||||
import time
|
import time
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
from integrations.opea_tei import OPEATEIReranking
|
from integrations.tei import OpeaTEIReranking
|
||||||
|
from integrations.videoqna import OpeaVideoReranking
|
||||||
|
|
||||||
from comps import (
|
from comps import (
|
||||||
CustomLogger,
|
CustomLogger,
|
||||||
@@ -22,7 +23,7 @@ from comps.cores.proto.docarray import LLMParamsDoc, LVMVideoDoc, RerankedDoc, S
|
|||||||
logger = CustomLogger("opea_reranking_microservice")
|
logger = CustomLogger("opea_reranking_microservice")
|
||||||
logflag = os.getenv("LOGFLAG", False)
|
logflag = os.getenv("LOGFLAG", False)
|
||||||
|
|
||||||
rerank_component_name = os.getenv("RERANK_COMPONENT_NAME", "OPEA_RERANK_TEI")
|
rerank_component_name = os.getenv("RERANK_COMPONENT_NAME", "OPEA_TEI_RERANKING")
|
||||||
# Initialize OpeaComponentLoader
|
# Initialize OpeaComponentLoader
|
||||||
loader = OpeaComponentLoader(rerank_component_name, description=f"OPEA RERANK Component: {rerank_component_name}")
|
loader = OpeaComponentLoader(rerank_component_name, description=f"OPEA RERANK Component: {rerank_component_name}")
|
||||||
|
|
||||||
7
comps/rerankings/src/requirements_videoqna.txt
Normal file
7
comps/rerankings/src/requirements_videoqna.txt
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
datasets
|
||||||
|
haystack-ai
|
||||||
|
langchain --extra-index-url https://download.pytorch.org/whl/cpu
|
||||||
|
langchain_community --extra-index-url https://download.pytorch.org/whl/cpu
|
||||||
|
openai
|
||||||
|
Pillow
|
||||||
|
pydub
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
# Copyright (C) 2024 Intel Corporation
|
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
FROM python:3.11-slim
|
|
||||||
|
|
||||||
ENV LANG=C.UTF-8
|
|
||||||
|
|
||||||
ARG ARCH="cpu"
|
|
||||||
|
|
||||||
RUN apt-get update -y && apt-get install -y --no-install-recommends --fix-missing \
|
|
||||||
libgl1-mesa-glx \
|
|
||||||
libjemalloc-dev
|
|
||||||
|
|
||||||
RUN useradd -m -s /bin/bash user && \
|
|
||||||
mkdir -p /home/user && \
|
|
||||||
chown -R user /home/user/
|
|
||||||
|
|
||||||
USER user
|
|
||||||
|
|
||||||
COPY comps /home/user/comps
|
|
||||||
|
|
||||||
RUN pip install --no-cache-dir --upgrade pip setuptools && \
|
|
||||||
if [ ${ARCH} = "cpu" ]; then pip install --no-cache-dir torch --index-url https://download.pytorch.org/whl/cpu; fi && \
|
|
||||||
pip install --no-cache-dir -r /home/user/comps/reranks/src/requirements.txt
|
|
||||||
|
|
||||||
ENV PYTHONPATH=$PYTHONPATH:/home/user
|
|
||||||
|
|
||||||
WORKDIR /home/user/comps/reranks/src
|
|
||||||
|
|
||||||
ENTRYPOINT ["python", "opea_reranking_microservice.py"]
|
|
||||||
@@ -9,7 +9,12 @@ ip_address=$(hostname -I | awk '{print $1}')
|
|||||||
|
|
||||||
function build_docker_images() {
|
function build_docker_images() {
|
||||||
cd $WORKPATH
|
cd $WORKPATH
|
||||||
docker build --no-cache -t opea/reranking:comps --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f comps/reranks/src/Dockerfile .
|
docker build --no-cache \
|
||||||
|
-t opea/reranking:comps \
|
||||||
|
--build-arg https_proxy=$https_proxy \
|
||||||
|
--build-arg http_proxy=$http_proxy \
|
||||||
|
--build-arg SERVICE=tei \
|
||||||
|
-f comps/rerankings/src/Dockerfile .
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
echo "opea/reranking built fail"
|
echo "opea/reranking built fail"
|
||||||
exit 1
|
exit 1
|
||||||
@@ -30,7 +35,7 @@ function start_service() {
|
|||||||
export TEI_RERANKING_ENDPOINT="http://${ip_address}:${tei_endpoint}"
|
export TEI_RERANKING_ENDPOINT="http://${ip_address}:${tei_endpoint}"
|
||||||
tei_service_port=5007
|
tei_service_port=5007
|
||||||
unset http_proxy
|
unset http_proxy
|
||||||
docker run -d --name="test-comps-reranking-server" -e LOGFLAG=True -p ${tei_service_port}:8000 --ipc=host -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e TEI_RERANKING_ENDPOINT=$TEI_RERANKING_ENDPOINT -e HF_TOKEN=$HF_TOKEN -e RERANK_TYPE="tei" opea/reranking:comps
|
docker run -d --name="test-comps-reranking-server" -e LOGFLAG=True -p ${tei_service_port}:8000 --ipc=host -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e TEI_RERANKING_ENDPOINT=$TEI_RERANKING_ENDPOINT -e HF_TOKEN=$HF_TOKEN -e RERANK_COMPONENT_NAME="OPEA_TEI_RERANKING" opea/reranking:comps
|
||||||
sleep 15
|
sleep 15
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -52,7 +57,7 @@ function validate_microservice() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function stop_docker() {
|
function stop_docker() {
|
||||||
cid=$(docker ps -aq --filter "name=test-comps-rerank*")
|
cid=$(docker ps -aq --filter "name=test-comps-reranking*")
|
||||||
if [[ ! -z "$cid" ]]; then docker stop $cid && docker rm $cid && sleep 1s; fi
|
if [[ ! -z "$cid" ]]; then docker stop $cid && docker rm $cid && sleep 1s; fi
|
||||||
}
|
}
|
||||||
|
|
||||||
16
tests/reranks/test_reranks_videoqna.sh → tests/rerankings/test_rerankings_videoqna.sh
Executable file → Normal file
16
tests/reranks/test_reranks_videoqna.sh → tests/rerankings/test_rerankings_videoqna.sh
Executable file → Normal file
@@ -9,7 +9,18 @@ ip_address=$(hostname -I | awk '{print $1}')
|
|||||||
|
|
||||||
function build_docker_images() {
|
function build_docker_images() {
|
||||||
cd $WORKPATH
|
cd $WORKPATH
|
||||||
docker build --no-cache -t opea/reranking:comps --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -f comps/reranks/videoqna/Dockerfile .
|
docker build --no-cache \
|
||||||
|
-t opea/reranking:comps \
|
||||||
|
--build-arg https_proxy=$https_proxy \
|
||||||
|
--build-arg http_proxy=$http_proxy \
|
||||||
|
--build-arg SERVICE=videoqna \
|
||||||
|
-f comps/rerankings/src/Dockerfile .
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "opea/reranking built fail"
|
||||||
|
exit 1
|
||||||
|
else
|
||||||
|
echo "opea/reranking built successful"
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function start_service() {
|
function start_service() {
|
||||||
@@ -20,6 +31,7 @@ function start_service() {
|
|||||||
-e http_proxy=${http_proxy} \
|
-e http_proxy=${http_proxy} \
|
||||||
-e https_proxy=${https_proxy} \
|
-e https_proxy=${https_proxy} \
|
||||||
-e CHUNK_DURATION=${CHUNK_DURATION} \
|
-e CHUNK_DURATION=${CHUNK_DURATION} \
|
||||||
|
-e RERANK_COMPONENT_NAME="OPEA_VIDEO_RERANKING" \
|
||||||
-e FILE_SERVER_ENDPOINT=${FILE_SERVER_ENDPOINT} \
|
-e FILE_SERVER_ENDPOINT=${FILE_SERVER_ENDPOINT} \
|
||||||
opea/reranking:comps
|
opea/reranking:comps
|
||||||
|
|
||||||
@@ -96,4 +108,4 @@ function main() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# main
|
main
|
||||||
@@ -1,62 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Copyright (C) 2024 Intel Corporation
|
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
set -x
|
|
||||||
|
|
||||||
WORKPATH=$(dirname "$PWD")
|
|
||||||
ip_address=$(hostname -I | awk '{print $1}')
|
|
||||||
function build_docker_images() {
|
|
||||||
cd $WORKPATH
|
|
||||||
docker build --no-cache --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -t opea/reranking:comps -f comps/reranks/fastrag/Dockerfile .
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "opea/reranking built fail"
|
|
||||||
exit 1
|
|
||||||
else
|
|
||||||
echo "opea/reranking built successful"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function start_service() {
|
|
||||||
export EMBED_MODEL="Intel/bge-small-en-v1.5-rag-int8-static"
|
|
||||||
fastrag_service_port=5020
|
|
||||||
unset http_proxy
|
|
||||||
docker run -d --name="test-comps-reranking-server" -p ${fastrag_service_port}:8000 --ipc=host -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e EMBED_MODEL=$EMBED_MODEL opea/reranking:comps
|
|
||||||
sleep 3m
|
|
||||||
}
|
|
||||||
|
|
||||||
function validate_microservice() {
|
|
||||||
fastrag_service_port=5020
|
|
||||||
result=$(http_proxy="" curl http://${ip_address}:${fastrag_service_port}/v1/reranking\
|
|
||||||
-X POST \
|
|
||||||
-d '{"initial_query":"What is Deep Learning?", "retrieved_docs": [{"text":"Deep Learning is not..."}, {"text":"Deep learning is..."}]}' \
|
|
||||||
-H 'Content-Type: application/json')
|
|
||||||
if [[ $result == *"reranked_docs"* ]]; then
|
|
||||||
echo "Result correct."
|
|
||||||
else
|
|
||||||
echo "Result wrong. Received was $result"
|
|
||||||
docker logs test-comps-reranking-server
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function stop_docker() {
|
|
||||||
cid=$(docker ps -aq --filter "name=test-comps-rerank*")
|
|
||||||
if [[ ! -z "$cid" ]]; then docker stop $cid && docker rm $cid && sleep 1s; fi
|
|
||||||
}
|
|
||||||
|
|
||||||
function main() {
|
|
||||||
|
|
||||||
stop_docker
|
|
||||||
|
|
||||||
build_docker_images
|
|
||||||
start_service
|
|
||||||
|
|
||||||
validate_microservice
|
|
||||||
|
|
||||||
stop_docker
|
|
||||||
echo y | docker system prune
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
# main
|
|
||||||
Reference in New Issue
Block a user