@@ -64,6 +64,8 @@ APIService::APIService(Master* master,
6464 auto vlm_master = dynamic_cast <VLMMaster*>(master);
6565 mm_chat_service_impl_ =
6666 std::make_unique<MMChatServiceImpl>(vlm_master, model_names);
67+ mm_embedding_service_impl_ =
68+ std::make_unique<MMEmbeddingServiceImpl>(vlm_master, model_names);
6769 } else if (FLAGS_backend == " dit" ) {
6870 image_generation_service_impl_ =
6971 std::make_unique<ImageGenerationServiceImpl>(
@@ -190,10 +192,13 @@ void APIService::Embeddings(::google::protobuf::RpcController* controller,
190192 // TODO with xllm-service
191193}
192194
193- void APIService::EmbeddingsHttp (::google::protobuf::RpcController* controller,
194- const proto::HttpRequest* request,
195- proto::HttpResponse* response,
196- ::google::protobuf::Closure* done) {
195+ namespace {
196+ template <typename EmbeddingCall, typename Service>
197+ void EmbeddingsImpl (std::unique_ptr<Service>& embedding_service_impl_,
198+ ::google::protobuf::RpcController* controller,
199+ const proto::HttpRequest* request,
200+ proto::HttpResponse* response,
201+ ::google::protobuf::Closure* done) {
197202 xllm::ClosureGuard done_guard (
198203 done,
199204 std::bind (request_in_metric, nullptr ),
@@ -202,12 +207,13 @@ void APIService::EmbeddingsHttp(::google::protobuf::RpcController* controller,
202207 LOG (ERROR) << " brpc request | respose | controller is null" ;
203208 return ;
204209 }
205-
206210 auto arena = response->GetArena ();
207211 auto req_pb =
208- google::protobuf::Arena::CreateMessage<proto::EmbeddingRequest>(arena);
212+ google::protobuf::Arena::CreateMessage<typename EmbeddingCall::ReqType>(
213+ arena);
209214 auto resp_pb =
210- google::protobuf::Arena::CreateMessage<proto::EmbeddingResponse>(arena);
215+ google::protobuf::Arena::CreateMessage<typename EmbeddingCall::ResType>(
216+ arena);
211217
212218 auto ctrl = reinterpret_cast <brpc::Controller*>(controller);
213219 std::string error;
@@ -230,6 +236,22 @@ void APIService::EmbeddingsHttp(::google::protobuf::RpcController* controller,
230236 ctrl, done_guard.release (), req_pb, resp_pb);
231237 embedding_service_impl_->process_async (call);
232238}
239+ } // namespace
240+
241+ void APIService::EmbeddingsHttp (::google::protobuf::RpcController* controller,
242+ const proto::HttpRequest* request,
243+ proto::HttpResponse* response,
244+ ::google::protobuf::Closure* done) {
245+ if (FLAGS_backend == " llm" ) {
246+ CHECK (embedding_service_impl_) << " embedding service is invalid." ;
247+ EmbeddingsImpl<EmbeddingCall, EmbeddingServiceImpl>(
248+ embedding_service_impl_, controller, request, response, done);
249+ } else if (FLAGS_backend == " vlm" ) {
250+ CHECK (mm_chat_service_impl_) << " mm embedding service is invalid." ;
251+ EmbeddingsImpl<MMEmbeddingCall, MMEmbeddingServiceImpl>(
252+ mm_embedding_service_impl_, controller, request, response, done);
253+ }
254+ }
233255
234256void APIService::ImageGeneration (::google::protobuf::RpcController* controller,
235257 const proto::ImageGenerationRequest* request,
0 commit comments