forked from opea-project/GenAIExamples
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add new test cases for VisualQnA (opea-project#712)
* Add new test cases for VisualQnA Signed-off-by: lvliang-intel <liang1.lv@intel.com>
- Loading branch information
1 parent
9cf1d88
commit 995a62c
Showing
7 changed files
with
376 additions
and
75 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
# Copyright (C) 2024 Intel Corporation | ||
# SPDX-License-Identifier: Apache-2.0 | ||
|
||
services: | ||
visualqna: | ||
build: | ||
args: | ||
http_proxy: ${http_proxy} | ||
https_proxy: ${https_proxy} | ||
no_proxy: ${no_proxy} | ||
dockerfile: ./Dockerfile | ||
image: ${REGISTRY:-opea}/visualqna:${TAG:-latest} | ||
visualqna-ui: | ||
build: | ||
context: ui | ||
dockerfile: ./docker/Dockerfile | ||
extends: visualqna | ||
image: ${REGISTRY:-opea}/visualqna-ui:${TAG:-latest} | ||
llm-visualqna-tgi: | ||
build: | ||
context: GenAIComps | ||
dockerfile: comps/lvms/Dockerfile_tgi | ||
extends: visualqna | ||
image: ${REGISTRY:-opea}/lvm-tgi:${TAG:-latest} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,174 @@ | ||
#!/bin/bash | ||
# Copyright (C) 2024 Intel Corporation | ||
# SPDX-License-Identifier: Apache-2.0 | ||
|
||
set -x | ||
IMAGE_REPO=${IMAGE_REPO:-"opea"} | ||
IMAGE_TAG=${IMAGE_TAG:-"latest"} | ||
echo "REGISTRY=IMAGE_REPO=${IMAGE_REPO}" | ||
echo "TAG=IMAGE_TAG=${IMAGE_TAG}" | ||
export REGISTRY=${IMAGE_REPO} | ||
export TAG=${IMAGE_TAG} | ||
|
||
WORKPATH=$(dirname "$PWD") | ||
LOG_PATH="$WORKPATH/tests" | ||
ip_address=$(hostname -I | awk '{print $1}') | ||
|
||
function build_docker_images() { | ||
cd $WORKPATH/docker | ||
git clone https://github.com/opea-project/GenAIComps.git | ||
|
||
echo "Build all the images with --no-cache, check docker_image_build.log for details..." | ||
service_list="visualqna visualqna-ui llm-visualqna-tgi" | ||
docker compose -f docker_build_compose.yaml build ${service_list} --no-cache > ${LOG_PATH}/docker_image_build.log | ||
|
||
docker pull ghcr.io/huggingface/tgi-gaudi:2.0.4 | ||
docker images && sleep 1s | ||
} | ||
|
||
function start_services() { | ||
cd $WORKPATH/docker/gaudi | ||
|
||
export LVM_MODEL_ID="llava-hf/llava-v1.6-mistral-7b-hf" | ||
export LVM_ENDPOINT="http://${ip_address}:8399" | ||
export HUGGINGFACEHUB_API_TOKEN=${HUGGINGFACEHUB_API_TOKEN} | ||
export LVM_SERVICE_PORT=9399 | ||
export MEGA_SERVICE_HOST_IP=${ip_address} | ||
export LVM_SERVICE_HOST_IP=${ip_address} | ||
export BACKEND_SERVICE_ENDPOINT="http://${ip_address}:8888/v1/visualqna" | ||
|
||
sed -i "s/backend_address/$ip_address/g" $WORKPATH/docker/ui/svelte/.env | ||
|
||
# Start Docker Containers | ||
docker compose up -d > ${LOG_PATH}/start_services_with_compose.log | ||
|
||
n=0 | ||
until [[ "$n" -ge 100 ]]; do | ||
docker logs lvm-tgi-gaudi-server > ${LOG_PATH}/lvm_tgi_service_start.log | ||
if grep -q Connected ${LOG_PATH}/lvm_tgi_service_start.log; then | ||
break | ||
fi | ||
sleep 5s | ||
n=$((n+1)) | ||
done | ||
} | ||
|
||
function validate_services() { | ||
local URL="$1" | ||
local EXPECTED_RESULT="$2" | ||
local SERVICE_NAME="$3" | ||
local DOCKER_NAME="$4" | ||
local INPUT_DATA="$5" | ||
|
||
local HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" -X POST -d "$INPUT_DATA" -H 'Content-Type: application/json' "$URL") | ||
if [ "$HTTP_STATUS" -eq 200 ]; then | ||
echo "[ $SERVICE_NAME ] HTTP status is 200. Checking content..." | ||
|
||
local CONTENT=$(curl -s -X POST -d "$INPUT_DATA" -H 'Content-Type: application/json' "$URL" | tee ${LOG_PATH}/${SERVICE_NAME}.log) | ||
|
||
if echo "$CONTENT" | grep -q "$EXPECTED_RESULT"; then | ||
echo "[ $SERVICE_NAME ] Content is as expected." | ||
else | ||
echo "[ $SERVICE_NAME ] Content does not match the expected result: $CONTENT" | ||
docker logs ${DOCKER_NAME} >> ${LOG_PATH}/${SERVICE_NAME}.log | ||
exit 1 | ||
fi | ||
else | ||
echo "[ $SERVICE_NAME ] HTTP status is not 200. Received status was $HTTP_STATUS" | ||
docker logs ${DOCKER_NAME} >> ${LOG_PATH}/${SERVICE_NAME}.log | ||
exit 1 | ||
fi | ||
sleep 1s | ||
} | ||
|
||
function validate_microservices() { | ||
# Check if the microservices are running correctly. | ||
|
||
# lvm microservice | ||
validate_services \ | ||
"${ip_address}:9399/v1/lvm" \ | ||
"The image" \ | ||
"lvm-tgi" \ | ||
"lvm-tgi-gaudi-server" \ | ||
'{"image": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAFUlEQVR42mP8/5+hnoEIwDiqkL4KAcT9GO0U4BxoAAAAAElFTkSuQmCC", "prompt":"What is this?"}' | ||
} | ||
|
||
function validate_megaservice() { | ||
# Curl the Mega Service | ||
validate_services \ | ||
"${ip_address}:8888/v1/visualqna" \ | ||
"The image" \ | ||
"visualqna-gaudi-backend-server" \ | ||
"visualqna-gaudi-backend-server" \ | ||
'{ | ||
"messages": [ | ||
{ | ||
"role": "user", | ||
"content": [ | ||
{ | ||
"type": "text", | ||
"text": "What'\''s in this image?" | ||
}, | ||
{ | ||
"type": "image_url", | ||
"image_url": { | ||
"url": "https://www.ilankelman.org/stopsigns/australia.jpg" | ||
} | ||
} | ||
] | ||
} | ||
], | ||
"max_tokens": 300 | ||
}' | ||
} | ||
|
||
function validate_frontend() { | ||
cd $WORKPATH/docker/ui/svelte | ||
local conda_env_name="OPEA_e2e" | ||
export PATH=${HOME}/miniforge3/bin/:$PATH | ||
if conda info --envs | grep -q "$conda_env_name"; then | ||
echo "$conda_env_name exist!" | ||
else | ||
conda create -n ${conda_env_name} python=3.12 -y | ||
fi | ||
source activate ${conda_env_name} | ||
|
||
sed -i "s/localhost/$ip_address/g" playwright.config.ts | ||
|
||
conda install -c conda-forge nodejs -y | ||
npm install && npm ci && npx playwright install --with-deps | ||
node -v && npm -v && pip list | ||
|
||
exit_status=0 | ||
npx playwright test || exit_status=$? | ||
|
||
if [ $exit_status -ne 0 ]; then | ||
echo "[TEST INFO]: ---------frontend test failed---------" | ||
exit $exit_status | ||
else | ||
echo "[TEST INFO]: ---------frontend test passed---------" | ||
fi | ||
} | ||
|
||
function stop_docker() { | ||
cd $WORKPATH/docker/gaudi | ||
docker compose stop && docker compose rm -f | ||
} | ||
|
||
function main() { | ||
|
||
stop_docker | ||
|
||
if [[ "$IMAGE_REPO" == "opea" ]]; then build_docker_images; fi | ||
start_services | ||
|
||
validate_microservices | ||
validate_megaservice | ||
#validate_frontend | ||
|
||
stop_docker | ||
echo y | docker system prune | ||
|
||
} | ||
|
||
main |
Oops, something went wrong.