3
3
# SPDX-License-Identifier: Apache-2.0
4
4
5
5
set -e
6
- echo " IMAGE_REPO=${IMAGE_REPO} "
6
+ IMAGE_REPO=${IMAGE_REPO:- " opea" }
7
+ IMAGE_TAG=${IMAGE_TAG:- " latest" }
8
+ echo " REGISTRY=IMAGE_REPO=${IMAGE_REPO} "
9
+ echo " TAG=IMAGE_TAG=${IMAGE_TAG} "
10
+ export REGISTRY=${IMAGE_REPO}
11
+ export TAG=${IMAGE_TAG}
7
12
8
13
WORKPATH=$( dirname " $PWD " )
9
14
LOG_PATH=" $WORKPATH /tests"
10
15
ip_address=$( hostname -I | awk ' {print $1}' )
11
16
12
17
function build_docker_images() {
13
- cd $WORKPATH
18
+ cd $WORKPATH /docker
14
19
git clone https://github.com/opea-project/GenAIComps.git
15
- cd GenAIComps
16
-
17
- docker build -t opea/embedding-tei:latest -f comps/embeddings/langchain/docker/Dockerfile .
18
- docker build -t opea/retriever-redis:latest -f comps/retrievers/langchain/redis/docker/Dockerfile .
19
- docker build -t opea/reranking-tei:latest -f comps/reranks/tei/docker/Dockerfile .
20
- docker build -t opea/llm-tgi:latest -f comps/llms/text-generation/tgi/Dockerfile .
21
- docker build -t opea/dataprep-redis:latest -f comps/dataprep/redis/langchain/docker/Dockerfile .
22
- docker build -t opea/guardrails-tgi:latest -f comps/guardrails/llama_guard/docker/Dockerfile .
20
+ git clone https://github.com/huggingface/tei-gaudi
23
21
24
- # cd ..
25
- # git clone https://github.com/huggingface/tei-gaudi
26
- # cd tei-gaudi/
27
- # docker build --no-cache -f Dockerfile-hpu -t opea/tei-gaudi:latest .
22
+ echo " Build all the images with --no-cache, check docker_image_build.log for details..."
23
+ service_list=" chatqna-guardrails chatqna-ui dataprep-redis embedding-tei retriever-redis reranking-tei llm-tgi tei-gaudi guardrails-tgi"
24
+ docker compose -f docker_build_compose.yaml build ${service_list} --no-cache > ${LOG_PATH} /docker_image_build.log
28
25
29
26
docker pull ghcr.io/huggingface/tgi-gaudi:2.0.1
30
27
docker pull ghcr.io/huggingface/text-embeddings-inference:cpu-1.5
31
28
32
- cd $WORKPATH /docker
33
- docker build --no-cache -t opea/chatqna-guardrails:latest -f Dockerfile_guardrails .
34
-
35
- cd $WORKPATH /docker/ui
36
- docker build --no-cache -t opea/chatqna-ui:latest -f docker/Dockerfile .
37
-
38
29
docker images
39
30
}
40
31
41
32
function start_services() {
42
- # build tei-gaudi for each test instead of pull from local registry
43
- cd $WORKPATH
44
- git clone https://github.com/huggingface/tei-gaudi
45
- cd tei-gaudi/
46
- docker build --no-cache -q -f Dockerfile-hpu -t opea/tei-gaudi:latest .
47
-
48
33
cd $WORKPATH /docker/gaudi
49
34
export EMBEDDING_MODEL_ID=" BAAI/bge-base-en-v1.5"
50
35
export RERANK_MODEL_ID=" BAAI/bge-reranker-base"
@@ -69,18 +54,6 @@ function start_services() {
69
54
70
55
sed -i " s/backend_address/$ip_address /g" $WORKPATH /docker/ui/svelte/.env
71
56
72
- if [[ " $IMAGE_REPO " != " " ]]; then
73
- # Replace the container name with a test-specific name
74
- echo " using image repository $IMAGE_REPO and image tag $IMAGE_TAG "
75
- sed -i " s#image: opea/chatqna-guardrails:latest#image: opea/chatqna:${IMAGE_TAG} #g" compose_guardrails.yaml
76
- sed -i " s#image: opea/chatqna-ui:latest#image: opea/chatqna-ui:${IMAGE_TAG} #g" compose_guardrails.yaml
77
- sed -i " s#image: opea/chatqna-conversation-ui:latest#image: opea/chatqna-conversation-ui:${IMAGE_TAG} #g" compose_guardrails.yaml
78
- sed -i " s#image: opea/*#image: ${IMAGE_REPO} opea/#g" compose_guardrails.yaml
79
- sed -i " s#image: ${IMAGE_REPO} opea/tei-gaudi:latest#image: opea/tei-gaudi:latest#g" compose_guardrails.yaml
80
- echo " cat compose_guardrails.yaml"
81
- cat compose_guardrails.yaml
82
- fi
83
-
84
57
# Start Docker Containers
85
58
docker compose -f compose_guardrails.yaml up -d
86
59
n=0
@@ -92,6 +65,17 @@ function start_services() {
92
65
sleep 1s
93
66
n=$(( n+ 1 ))
94
67
done
68
+
69
+ # Make sure tgi guardrails service is ready
70
+ n=0
71
+ until [[ " $n " -ge 400 ]]; do
72
+ docker logs tgi-guardrails-server > tgi_guardrails_service_start.log
73
+ if grep -q Connected tgi_guardrails_service_start.log; then
74
+ break
75
+ fi
76
+ sleep 1s
77
+ n=$(( n+ 1 ))
78
+ done
95
79
}
96
80
97
81
function validate_services() {
@@ -101,24 +85,27 @@ function validate_services() {
101
85
local DOCKER_NAME=" $4 "
102
86
local INPUT_DATA=" $5 "
103
87
104
- local HTTP_STATUS =$( curl -s -o /dev/null -w " %{http_code}" -X POST -d " $INPUT_DATA " -H ' Content-Type: application/json' " $URL " )
105
- if [ " $HTTP_STATUS " -eq 200 ] ; then
106
- echo " [ $SERVICE_NAME ] HTTP status is 200. Checking content... "
88
+ HTTP_RESPONSE =$( curl --silent --write-out " HTTPSTATUS: %{http_code}" -X POST -d " $INPUT_DATA " -H ' Content-Type: application/json' " $URL " )
89
+ HTTP_STATUS= $( echo $HTTP_RESPONSE | tr -d ' \n ' | sed -e ' s/.*HTTPSTATUS:// ' )
90
+ RESPONSE_BODY= $( echo $HTTP_RESPONSE | sed -e ' s/HTTPSTATUS\:.*//g ' )
107
91
108
- local CONTENT= $( curl -s -X POST -d " $INPUT_DATA " -H ' Content-Type: application/json ' " $URL " | tee $ {LOG_PATH} /${SERVICE_NAME} .log)
92
+ docker logs ${DOCKER_NAME} >> $ {LOG_PATH} /${SERVICE_NAME} .log
109
93
110
- if echo " $CONTENT " | grep -q " $EXPECTED_RESULT " ; then
111
- echo " [ $SERVICE_NAME ] Content is as expected."
112
- else
113
- echo " [ $SERVICE_NAME ] Content does not match the expected result: $CONTENT "
114
- docker logs ${DOCKER_NAME} >> ${LOG_PATH} /${SERVICE_NAME} .log
115
- exit 1
116
- fi
117
- else
94
+ # check response status
95
+ if [ " $HTTP_STATUS " -ne " 200" ]; then
118
96
echo " [ $SERVICE_NAME ] HTTP status is not 200. Received status was $HTTP_STATUS "
119
- docker logs ${DOCKER_NAME} >> ${LOG_PATH} /${SERVICE_NAME} .log
120
97
exit 1
98
+ else
99
+ echo " [ $SERVICE_NAME ] HTTP status is 200. Checking content..."
121
100
fi
101
+ # check response body
102
+ if [[ " $RESPONSE_BODY " != * " $EXPECTED_RESULT " * ]]; then
103
+ echo " [ $SERVICE_NAME ] Content does not match the expected result: $RESPONSE_BODY "
104
+ exit 1
105
+ else
106
+ echo " [ $SERVICE_NAME ] Content is as expected."
107
+ fi
108
+
122
109
sleep 1s
123
110
}
124
111
@@ -128,15 +115,15 @@ function validate_microservices() {
128
115
# tei for embedding service
129
116
validate_services \
130
117
" ${ip_address} :8090/embed" \
131
- " \[\ [" \
118
+ " [ [" \
132
119
" tei-embedding" \
133
120
" tei-embedding-gaudi-server" \
134
121
' {"inputs":"What is Deep Learning?"}'
135
122
136
123
# embedding microservice
137
124
validate_services \
138
125
" ${ip_address} :6000/v1/embeddings" \
139
- ' "text":"What is Deep Learning?","embedding":\ [' \
126
+ ' "text":"What is Deep Learning?","embedding":[' \
140
127
" embedding" \
141
128
" embedding-tei-server" \
142
129
' {"text":"What is Deep Learning?"}'
@@ -147,7 +134,7 @@ function validate_microservices() {
147
134
test_embedding=$( python3 -c " import random; embedding = [random.uniform(-1, 1) for _ in range(768)]; print(embedding)" )
148
135
validate_services \
149
136
" ${ip_address} :7000/v1/retrieval" \
150
- " " \
137
+ " retrieved_docs " \
151
138
" retrieval" \
152
139
" retriever-redis-server" \
153
140
" {\" text\" :\" What is the revenue of Nike in 2023?\" ,\" embedding\" :${test_embedding} }"
@@ -186,7 +173,7 @@ function validate_microservices() {
186
173
187
174
# tgi for guardrails service
188
175
validate_services \
189
- " ${ip_address} :8008 /generate" \
176
+ " ${ip_address} :8088 /generate" \
190
177
" generated_text" \
191
178
" tgi-guardrails" \
192
179
" tgi-guardrails-server" \
@@ -217,13 +204,16 @@ function validate_frontend() {
217
204
cd $WORKPATH /docker/ui/svelte
218
205
local conda_env_name=" OPEA_e2e"
219
206
export PATH=${HOME} /miniforge3/bin/:$PATH
220
- # conda remove -n ${conda_env_name} --all -y
221
- # conda create -n ${conda_env_name} python=3.12 -y
207
+ if conda info --envs | grep -q " $conda_env_name " ; then
208
+ echo " $conda_env_name exist!"
209
+ else
210
+ conda create -n ${conda_env_name} python=3.12 -y
211
+ fi
222
212
source activate ${conda_env_name}
223
213
224
214
sed -i " s/localhost/$ip_address /g" playwright.config.ts
225
215
226
- # conda install -c conda-forge nodejs -y
216
+ conda install -c conda-forge nodejs -y
227
217
npm install && npm ci && npx playwright install --with-deps
228
218
node -v && npm -v && pip list
229
219
@@ -246,7 +236,7 @@ function stop_docker() {
246
236
function main() {
247
237
248
238
stop_docker
249
- if [[ " $IMAGE_REPO " == " " ]]; then build_docker_images; fi
239
+ if [[ " $IMAGE_REPO " == " opea " ]]; then build_docker_images; fi
250
240
start_time=$( date +%s)
251
241
start_services
252
242
end_time=$( date +%s)
0 commit comments