diff --git a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/EmbeddingMatchStrategy.java b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/EmbeddingMatchStrategy.java index ee6f8c51a..da06ed831 100644 --- a/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/EmbeddingMatchStrategy.java +++ b/headless/chat/src/main/java/com/tencent/supersonic/headless/chat/mapper/EmbeddingMatchStrategy.java @@ -167,7 +167,9 @@ public class EmbeddingMatchStrategy extends BatchMatchStrategy variable.put("retrievedInfo", JSONObject.toJSONString(results)); Prompt prompt = PromptTemplate.from(LLM_FILTER_PROMPT).apply(variable); - ChatLanguageModel chatLanguageModel = ModelProvider.getChatModel(chatQueryContext.getRequest().getChatAppConfig().get("REWRITE_MULTI_TURN").getChatModelConfig()); + ChatLanguageModel chatLanguageModel = + ModelProvider.getChatModel(chatQueryContext.getRequest().getChatAppConfig() + .get("REWRITE_MULTI_TURN").getChatModelConfig()); String response = chatLanguageModel.generate(prompt.toUserMessage().singleText()); if (StringUtils.isBlank(response)) { diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java index 04b89ee5e..0ced607aa 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/SqlQueryParser.java @@ -48,16 +48,24 @@ public class SqlQueryParser implements QueryParser { List queryFields = SqlSelectHelper.getAllSelectFields(sqlQuery.getSql()); Set queryAliases = SqlSelectHelper.getAliasFields(sqlQuery.getSql()); Set ontologyMetricsDimensions = Collections.synchronizedSet(new HashSet()); - Set ontologyBizNameMetricsDimensions = Collections.synchronizedSet(new HashSet()); + Set ontologyBizNameMetricsDimensions = + Collections.synchronizedSet(new HashSet<>()); queryFields.removeAll(queryAliases); Ontology ontology = queryStatement.getOntology(); OntologyQuery ontologyQuery = buildOntologyQuery(ontology, queryFields); Set queryFieldsSet = new HashSet<>(queryFields); - ontologyQuery.getMetrics().forEach(m -> {ontologyMetricsDimensions.add(m.getName()); ontologyBizNameMetricsDimensions.add(m.getBizName());}); - ontologyQuery.getDimensions().forEach(d -> {ontologyMetricsDimensions.add(d.getName()); ontologyBizNameMetricsDimensions.add(d.getBizName());}); + ontologyQuery.getMetrics().forEach(m -> { + ontologyMetricsDimensions.add(m.getName()); + ontologyBizNameMetricsDimensions.add(m.getBizName()); + }); + ontologyQuery.getDimensions().forEach(d -> { + ontologyMetricsDimensions.add(d.getName()); + ontologyBizNameMetricsDimensions.add(d.getBizName()); + }); // check if there are fields not matched with any metric or dimension - if (!(queryFieldsSet.containsAll(ontologyMetricsDimensions)||queryFieldsSet.containsAll(ontologyBizNameMetricsDimensions))) { + if (!(queryFieldsSet.containsAll(ontologyMetricsDimensions) + || queryFieldsSet.containsAll(ontologyBizNameMetricsDimensions))) { List semanticFields = Lists.newArrayList(); ontologyQuery.getMetrics().forEach(m -> semanticFields.add(m.getName())); ontologyQuery.getDimensions().forEach(d -> semanticFields.add(d.getName())); diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/DataModelNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/DataModelNode.java index f08bb3bf5..ff2d73f36 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/DataModelNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/DataModelNode.java @@ -36,8 +36,10 @@ public class DataModelNode extends SemanticNode { && !dataModel.getModelDetail().getSqlQuery().isEmpty()) { sqlTable = dataModel.getModelDetail().getSqlQuery(); // if model has sqlVariables, parse sqlVariables - if (Objects.nonNull(dataModel.getModelDetail().getSqlVariables()) || (CollectionUtils.isEmpty(dataModel.getModelDetail().getSqlVariables()))) { - sqlTable = SqlVariableParseUtils.parse(sqlTable, dataModel.getModelDetail().getSqlVariables(), Lists.newArrayList()); + if (Objects.nonNull(dataModel.getModelDetail().getSqlVariables()) + || (CollectionUtils.isEmpty(dataModel.getModelDetail().getSqlVariables()))) { + sqlTable = SqlVariableParseUtils.parse(sqlTable, + dataModel.getModelDetail().getSqlVariables(), Lists.newArrayList()); } } else if (dataModel.getModelDetail().getTableQuery() != null && !dataModel.getModelDetail().getTableQuery().isEmpty()) { diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java index af95bf1d2..c07cea75d 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java @@ -711,6 +711,12 @@ public class MetricServiceImpl extends ServiceImpl } if (!modelCluster.isContainsPartitionDimensions()) { queryMetricReq.setDateInfo(null); + } else { + // set date field + DimensionResp partitionDimension = dimensionResps.stream() + .filter(entry -> modelCluster.getModelIds().contains(entry.getModelId())) + .filter(entry -> entry.isPartitionTime()).findFirst().orElse(null); + queryMetricReq.getDateInfo().setDateField(partitionDimension.getName()); } // 4. set groups List dimensionNames = dimensionResps.stream() diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/QueryUtils.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/QueryUtils.java index e98fa3146..75f3ca44f 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/QueryUtils.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/utils/QueryUtils.java @@ -136,9 +136,10 @@ public class QueryUtils { return false; } return type.toLowerCase().endsWith("int") || type.toLowerCase().startsWith("int") - || type.equalsIgnoreCase("float") || type.equalsIgnoreCase("double") + || type.toLowerCase().endsWith("float") || type.toLowerCase().startsWith("float") + || type.toLowerCase().endsWith("double") || type.toLowerCase().startsWith("double") || type.equalsIgnoreCase("real") || type.equalsIgnoreCase("numeric") - || type.toLowerCase().startsWith("decimal") || type.equalsIgnoreCase("decfloat"); + || type.toLowerCase().startsWith("decimal"); } private String getName(String nameEn) {