(improvement)(Headless) Add a query interface that allows the parser and execute to run simultaneously. (#893)

This commit is contained in:
lexluo09
2024-04-07 22:26:59 +08:00
committed by GitHub
parent 07b5eb47b6
commit 80168cbb92

View File

@@ -1,13 +1,19 @@
package com.tencent.supersonic.chat.server.rest; package com.tencent.supersonic.chat.server.rest;
import com.tencent.supersonic.auth.api.authentication.pojo.User;
import com.tencent.supersonic.auth.api.authentication.utils.UserHolder; import com.tencent.supersonic.auth.api.authentication.utils.UserHolder;
import com.tencent.supersonic.chat.api.pojo.request.ChatExecuteReq; import com.tencent.supersonic.chat.api.pojo.request.ChatExecuteReq;
import com.tencent.supersonic.chat.api.pojo.request.ChatParseReq; import com.tencent.supersonic.chat.api.pojo.request.ChatParseReq;
import com.tencent.supersonic.chat.api.pojo.request.ChatQueryDataReq; import com.tencent.supersonic.chat.api.pojo.request.ChatQueryDataReq;
import com.tencent.supersonic.chat.server.service.ChatService; import com.tencent.supersonic.chat.server.service.ChatService;
import com.tencent.supersonic.common.pojo.exception.InvalidArgumentException;
import com.tencent.supersonic.headless.api.pojo.SemanticParseInfo;
import com.tencent.supersonic.headless.api.pojo.request.DimensionValueReq; import com.tencent.supersonic.headless.api.pojo.request.DimensionValueReq;
import com.tencent.supersonic.headless.api.pojo.request.QueryReq; import com.tencent.supersonic.headless.api.pojo.request.QueryReq;
import com.tencent.supersonic.headless.api.pojo.response.ParseResp;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
@@ -57,6 +63,25 @@ public class ChatQueryController {
return chatService.performExecution(chatExecuteReq); return chatService.performExecution(chatExecuteReq);
} }
@PostMapping("/")
public Object query(@RequestBody ChatParseReq chatParseReq,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
User user = UserHolder.findUser(request, response);
chatParseReq.setUser(user);
ParseResp parseResp = chatService.performParsing(chatParseReq);
if (CollectionUtils.isEmpty(parseResp.getSelectedParses())) {
throw new InvalidArgumentException("parser error,no selectedParses");
}
SemanticParseInfo semanticParseInfo = parseResp.getSelectedParses().get(0);
ChatExecuteReq chatExecuteReq = ChatExecuteReq.builder().build();
BeanUtils.copyProperties(chatParseReq, chatExecuteReq);
chatExecuteReq.setQueryId(parseResp.getQueryId());
chatExecuteReq.setParseId(semanticParseInfo.getId());
return chatService.performExecution(chatExecuteReq);
}
@PostMapping("queryContext") @PostMapping("queryContext")
public Object queryContext(@RequestBody QueryReq queryCtx, public Object queryContext(@RequestBody QueryReq queryCtx,
HttpServletRequest request, HttpServletResponse response) { HttpServletRequest request, HttpServletResponse response) {