(improvement)(chat) Rules, large models, and query dimension values support timelessness. (#1522)

This commit is contained in:
lexluo09
2024-08-07 13:29:07 +08:00
committed by GitHub
parent c8fe6d2d04
commit 208686de46
28 changed files with 442 additions and 613 deletions

View File

@@ -188,7 +188,7 @@ public class S2SemanticLayerService implements SemanticLayerService {
return queryResp;
} catch (Exception e) {
log.error("exception in queryByStruct, e: ", e);
log.error("exception in queryByReq:{}, e: ", queryReq, e);
state = TaskStatusEnum.ERROR;
throw e;
} finally {
@@ -205,8 +205,7 @@ public class S2SemanticLayerService implements SemanticLayerService {
List<String> dimensionValues = getDimensionValuesFromDict(dimensionValueReq, dataSetIds);
// if the search results is null,search dimensionValue from database
if (CollectionUtils.isEmpty(dimensionValues)) {
semanticQueryResp = getDimensionValuesFromDb(dimensionValueReq, user);
return semanticQueryResp;
return getDimensionValuesFromDb(dimensionValueReq, user);
}
List<QueryColumn> columns = new ArrayList<>();
QueryColumn queryColumn = new QueryColumn();
@@ -501,20 +500,23 @@ public class S2SemanticLayerService implements SemanticLayerService {
semanticParseInfo.setQueryType(QueryType.DETAIL);
semanticParseInfo.setMetrics(getMetrics(entityInfo));
semanticParseInfo.setDimensions(getDimensions(entityInfo));
DateConf dateInfo = new DateConf();
int unit = 1;
TimeDefaultConfig timeDefaultConfig = dataSetSchema.getTagTypeTimeDefaultConfig();
if (Objects.nonNull(timeDefaultConfig)) {
unit = timeDefaultConfig.getUnit();
String date = LocalDate.now().plusDays(-unit).toString();
dateInfo.setDateMode(DateConf.DateMode.BETWEEN);
dateInfo.setStartDate(date);
dateInfo.setEndDate(date);
} else {
dateInfo.setUnit(unit);
dateInfo.setDateMode(DateConf.DateMode.RECENT);
if (dataSetSchema.containsPartitionDimensions()) {
DateConf dateInfo = new DateConf();
int unit = 1;
TimeDefaultConfig timeDefaultConfig = dataSetSchema.getTagTypeTimeDefaultConfig();
if (Objects.nonNull(timeDefaultConfig)) {
unit = timeDefaultConfig.getUnit();
String date = LocalDate.now().plusDays(-unit).toString();
dateInfo.setDateMode(DateConf.DateMode.BETWEEN);
dateInfo.setStartDate(date);
dateInfo.setEndDate(date);
} else {
dateInfo.setUnit(unit);
dateInfo.setDateMode(DateConf.DateMode.RECENT);
}
semanticParseInfo.setDateInfo(dateInfo);
}
semanticParseInfo.setDateInfo(dateInfo);
//add filter
QueryFilter chatFilter = getQueryFilter(entityInfo);
@@ -524,8 +526,8 @@ public class S2SemanticLayerService implements SemanticLayerService {
SemanticQueryResp queryResultWithColumns = null;
try {
QueryStructReq queryStructReq = QueryReqBuilder.buildStructReq(semanticParseInfo);
queryResultWithColumns = queryByReq(queryStructReq, user);
QuerySqlReq querySqlReq = QueryReqBuilder.buildStructReq(semanticParseInfo).convert();
queryResultWithColumns = queryByReq(querySqlReq, user);
} catch (Exception e) {
log.warn("setMainModel queryByStruct error, e:", e);
}

View File

@@ -116,7 +116,7 @@ public class ParseInfoProcessor implements ResultProcessor {
QueryFilter dimensionFilter = new QueryFilter();
dimensionFilter.setValue(expression.getFieldValue());
SchemaElement schemaElement = fieldNameToElement.get(expression.getFieldName());
if (Objects.isNull(schemaElement)) {
if (Objects.isNull(schemaElement) || schemaElement.containsPartitionTime()) {
continue;
}
dimensionFilter.setName(schemaElement.getName());
@@ -167,7 +167,7 @@ public class ParseInfoProcessor implements ResultProcessor {
}
private boolean containOperators(FieldExpression expression, FilterOperatorEnum firstOperator,
FilterOperatorEnum... operatorEnums) {
FilterOperatorEnum... operatorEnums) {
return (Arrays.asList(operatorEnums).contains(firstOperator) && Objects.nonNull(
expression.getFieldValue()));
}

View File

@@ -13,7 +13,6 @@ import com.tencent.supersonic.headless.chat.mapper.SchemaMapper;
import com.tencent.supersonic.headless.chat.parser.SemanticParser;
import com.tencent.supersonic.headless.chat.query.QueryManager;
import com.tencent.supersonic.headless.chat.query.SemanticQuery;
import com.tencent.supersonic.headless.chat.query.rule.RuleSemanticQuery;
import com.tencent.supersonic.headless.server.facade.service.SemanticLayerService;
import com.tencent.supersonic.headless.server.processor.ResultProcessor;
import lombok.extern.slf4j.Slf4j;
@@ -108,9 +107,6 @@ public class ChatWorkflowEngine {
List<SemanticQuery> candidateQueries = queryCtx.getCandidateQueries();
if (CollectionUtils.isNotEmpty(candidateQueries)) {
for (SemanticQuery semanticQuery : candidateQueries) {
if (semanticQuery instanceof RuleSemanticQuery) {
continue;
}
for (SemanticCorrector corrector : semanticCorrectors) {
corrector.correct(queryCtx, semanticQuery.getParseInfo());
if (!ChatWorkflowState.CORRECTING.equals(queryCtx.getChatWorkflowState())) {

View File

@@ -383,7 +383,6 @@ public class DictUtils {
fillStructDateBetween(queryStructReq, model, config.getDateConf().getUnit() - 1, 0);
return;
}
return;
}
private void fillStructDateBetween(QueryStructReq queryStructReq, ModelResp model,