@@ -16,6 +16,7 @@ LOG_PATH="$WORKPATH/tests"
16
16
export host_ip=$( hostname -I | awk ' {print $1}' )
17
17
service_name=" retriever-milvus etcd minio standalone"
18
18
retriever_service_name=" retriever-milvus"
19
+ service_name_mm=" retriever-milvus-multimodal etcd minio standalone"
19
20
20
21
function build_docker_images() {
21
22
cd $WORKPATH
@@ -46,6 +47,23 @@ function start_service() {
46
47
sleep 1m
47
48
}
48
49
50
+ function start_multimodal_service() {
51
+ export MINIO_PORT1=11611
52
+ export MINIO_PORT2=11612
53
+ export MILVUS_STANDALONE_PORT=11613
54
+ export TEI_EMBEDDER_PORT=11614
55
+ export HF_TOKEN=${HF_TOKEN}
56
+ export COLLECTION_NAME=" LangChainCollection"
57
+ export LOGFLAG=True
58
+ export BRIDGE_TOWER_EMBEDDING=true
59
+ export RETRIEVER_TYPE=" milvus"
60
+
61
+ cd $WORKPATH /comps/retrievers/deployment/docker_compose
62
+ docker compose -f compose.yaml up ${service_name_mm} -d > ${LOG_PATH} /start_services_with_compose_multimodal.log
63
+
64
+ sleep 2m
65
+ }
66
+
49
67
function validate_microservice() {
50
68
local test_embedding=" $1 "
51
69
@@ -72,12 +90,57 @@ function validate_microservice() {
72
90
fi
73
91
}
74
92
93
+ function validate_mm_microservice() {
94
+ local test_embedding=" $1 "
95
+ local container_name=" $2 "
96
+
97
+ export PATH=" ${HOME} /miniforge3/bin:$PATH "
98
+ source activate
99
+ URL=" http://${host_ip} :$RETRIEVER_PORT /v1/retrieval"
100
+
101
+ # Test the retriever with a b64 image that should be passed through
102
+ HTTP_STATUS=$( curl -s -o /dev/null -w " %{http_code}" -X POST -d " {\" text\" :\" test\" ,\" embedding\" :${test_embedding} ,\" base64_image\" :\" iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAFUlEQVR42mP8/5+hnoEIwDiqkL4KAcT9GO0U4BxoAAAAAElFTkSuQmCC\" }" -H ' Content-Type: application/json' " $URL " )
103
+ if [ " $HTTP_STATUS " -eq 200 ]; then
104
+ echo " [ retriever ] HTTP status is 200. Checking content..."
105
+ local CONTENT=$( curl -s -X POST -d " {\" text\" :\" test\" ,\" embedding\" :${test_embedding} }" -H ' Content-Type: application/json' " $URL " | tee ${LOG_PATH} /retriever.log)
106
+
107
+ if echo " $CONTENT " | grep -q " retrieved_docs" ; then
108
+ echo " [ retriever ] Content has retrieved_docs as expected."
109
+ empty_search_results=$( echo " $CONTENT " | grep " \" retrieved_docs\" :\[\]" )
110
+ if [ -z " $empty_search_results " ]; then
111
+ # If search results are not empty, check for b64 image string
112
+ if echo " $CONTENT " | grep -q " b64_img_str" ; then
113
+ echo " [ retriever ] Content has b64_img_str as expected."
114
+ else
115
+ echo " [ retriever ] Content does not include the b64_img_str: $CONTENT "
116
+ docker logs ${container_name} >> ${LOG_PATH} /retriever.log
117
+ exit 1
118
+ fi
119
+ fi
120
+ else
121
+ echo " [ retriever ] Content does not match the expected result: $CONTENT "
122
+ docker logs ${container_name} >> ${LOG_PATH} /retriever.log
123
+ exit 1
124
+ fi
125
+ else
126
+ echo " [ retriever ] HTTP status is not 200. Received status was $HTTP_STATUS "
127
+ docker logs ${container_name} >> ${LOG_PATH} /retriever.log
128
+ exit 1
129
+ fi
130
+ }
131
+
75
132
function stop_docker() {
76
133
cd $WORKPATH /comps/third_parties/milvus/deployment/docker_compose/
77
134
docker compose -f compose.yaml down --remove-orphans
78
135
136
+ docker stop milvus-etcd
137
+ docker rm milvus-etcd
138
+
79
139
cd $WORKPATH /comps/retrievers/deployment/docker_compose
80
- docker compose -f compose.yaml down --remove-orphans
140
+
141
+ docker compose -f compose.yaml down ${service_name} --remove-orphans
142
+ docker compose -f compose.yaml down ${service_name_mm} --remove-orphans
143
+
81
144
cid=$( docker ps -aq --filter " name=tei-embedding-serving" )
82
145
if [[ ! -z " $cid " ]]; then docker stop $cid && docker rm $cid && sleep 1s; fi
83
146
}
@@ -92,6 +155,14 @@ function main() {
92
155
validate_microservice " $test_embedding "
93
156
94
157
stop_docker
158
+
159
+ start_multimodal_service
160
+ test_embedding_multi=$( python -c " import random; embedding = [random.uniform(-1, 1) for _ in range(512)]; print(embedding)" )
161
+ validate_microservice " $test_embedding_multi " " $service_name_mm "
162
+ validate_mm_microservice " $test_embedding_multi " " $service_name_mm "
163
+
164
+ stop_docker
165
+
95
166
echo y | docker system prune
96
167
97
168
}
0 commit comments