Merge branch 'tencentmusic:master' into master_fixdatasetchoose

This commit is contained in:
QJ_wonder
2025-05-27 10:10:44 +08:00
committed by GitHub
14 changed files with 60 additions and 24 deletions

View File

@@ -46,7 +46,8 @@ public class DataInterpretProcessor implements ExecuteResultProcessor {
public boolean accept(ExecuteContext executeContext) { public boolean accept(ExecuteContext executeContext) {
Agent agent = executeContext.getAgent(); Agent agent = executeContext.getAgent();
ChatApp chatApp = agent.getChatAppConfig().get(APP_KEY); ChatApp chatApp = agent.getChatAppConfig().get(APP_KEY);
return Objects.nonNull(chatApp) && chatApp.isEnable(); return Objects.nonNull(chatApp) && chatApp.isEnable()&&
StringUtils.isNotBlank(executeContext.getResponse().getTextResult()); // 如果都没结果,则无法处理,直接跳过
} }
@Override @Override

View File

@@ -13,7 +13,8 @@ public enum EngineType {
STARROCKS(10, "STARROCKS"), STARROCKS(10, "STARROCKS"),
KYUUBI(11, "KYUUBI"), KYUUBI(11, "KYUUBI"),
PRESTO(12, "PRESTO"), PRESTO(12, "PRESTO"),
TRINO(13, "TRINO"),; TRINO(13, "TRINO"),
ORACLE(14, "ORACLE");
private Integer code; private Integer code;

View File

@@ -318,7 +318,7 @@ public class DateModeUtils {
} }
public String getDateWhereStr(DateConf dateInfo, ItemDateResp dateDate) { public String getDateWhereStr(DateConf dateInfo, ItemDateResp dateDate) {
if (Objects.isNull(dateInfo)) { if (Objects.isNull(dateInfo) || Objects.isNull(dateInfo.getDateField())) {
return ""; return "";
} }
String dateStr = ""; String dateStr = "";

View File

@@ -179,13 +179,15 @@ public class NatureHelper {
} }
public static Long parseIdFromNature(String nature, int index) { public static Long parseIdFromNature(String nature, int index) {
try { if(nature.startsWith("_")){ // 框架的字典都是以_开头的
String[] split = nature.split(DictWordType.NATURE_SPILT); try {
if (split.length > index) { String[] split = nature.split(DictWordType.NATURE_SPILT);
return Long.valueOf(split[index]); if (split.length > index) {
return Long.valueOf(split[index]);
}
} catch (NumberFormatException e) {
log.error("Error parsing long from nature: {}", nature, e);
} }
} catch (NumberFormatException e) {
log.error("Error parsing long from nature: {}", nature, e);
} }
return null; return null;
} }

View File

@@ -167,7 +167,9 @@ public class EmbeddingMatchStrategy extends BatchMatchStrategy<EmbeddingResult>
variable.put("retrievedInfo", JSONObject.toJSONString(results)); variable.put("retrievedInfo", JSONObject.toJSONString(results));
Prompt prompt = PromptTemplate.from(LLM_FILTER_PROMPT).apply(variable); 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()); String response = chatLanguageModel.generate(prompt.toUserMessage().singleText());
if (StringUtils.isBlank(response)) { if (StringUtils.isBlank(response)) {

View File

@@ -22,6 +22,7 @@ public class DbAdaptorFactory {
dbAdaptorMap.put(EngineType.KYUUBI.getName(), new KyuubiAdaptor()); dbAdaptorMap.put(EngineType.KYUUBI.getName(), new KyuubiAdaptor());
dbAdaptorMap.put(EngineType.PRESTO.getName(), new PrestoAdaptor()); dbAdaptorMap.put(EngineType.PRESTO.getName(), new PrestoAdaptor());
dbAdaptorMap.put(EngineType.TRINO.getName(), new TrinoAdaptor()); dbAdaptorMap.put(EngineType.TRINO.getName(), new TrinoAdaptor());
dbAdaptorMap.put(EngineType.ORACLE.getName(), new OracleAdaptor());
} }
public static DbAdaptor getEngineAdaptor(String engineType) { public static DbAdaptor getEngineAdaptor(String engineType) {

View File

@@ -0,0 +1,5 @@
package com.tencent.supersonic.headless.core.adaptor.db;
public class OracleAdaptor extends DefaultDbAdaptor {
}

View File

@@ -48,16 +48,23 @@ public class SqlQueryParser implements QueryParser {
List<String> queryFields = SqlSelectHelper.getAllSelectFields(sqlQuery.getSql()); List<String> queryFields = SqlSelectHelper.getAllSelectFields(sqlQuery.getSql());
Set<String> queryAliases = SqlSelectHelper.getAliasFields(sqlQuery.getSql()); Set<String> queryAliases = SqlSelectHelper.getAliasFields(sqlQuery.getSql());
Set<String> ontologyMetricsDimensions = Collections.synchronizedSet(new HashSet<String>()); Set<String> ontologyMetricsDimensions = Collections.synchronizedSet(new HashSet<String>());
Set<String> ontologyBizNameMetricsDimensions = Collections.synchronizedSet(new HashSet<String>()); Set<String> ontologyBizNameMetricsDimensions = Collections.synchronizedSet(new HashSet<>());
queryFields.removeAll(queryAliases); queryFields.removeAll(queryAliases);
Ontology ontology = queryStatement.getOntology(); Ontology ontology = queryStatement.getOntology();
OntologyQuery ontologyQuery = buildOntologyQuery(ontology, queryFields); OntologyQuery ontologyQuery = buildOntologyQuery(ontology, queryFields);
Set<String> queryFieldsSet = new HashSet<>(queryFields); Set<String> queryFieldsSet = new HashSet<>(queryFields);
ontologyQuery.getMetrics().forEach(m -> {ontologyMetricsDimensions.add(m.getName()); ontologyBizNameMetricsDimensions.add(m.getBizName());}); ontologyQuery.getMetrics().forEach(m -> {
ontologyQuery.getDimensions().forEach(d -> {ontologyMetricsDimensions.add(d.getName()); ontologyBizNameMetricsDimensions.add(d.getBizName());}); 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 // 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<String> semanticFields = Lists.newArrayList(); List<String> semanticFields = Lists.newArrayList();
ontologyQuery.getMetrics().forEach(m -> semanticFields.add(m.getName())); ontologyQuery.getMetrics().forEach(m -> semanticFields.add(m.getName()));
ontologyQuery.getDimensions().forEach(d -> semanticFields.add(d.getName())); ontologyQuery.getDimensions().forEach(d -> semanticFields.add(d.getName()));

View File

@@ -36,8 +36,10 @@ public class DataModelNode extends SemanticNode {
&& !dataModel.getModelDetail().getSqlQuery().isEmpty()) { && !dataModel.getModelDetail().getSqlQuery().isEmpty()) {
sqlTable = dataModel.getModelDetail().getSqlQuery(); sqlTable = dataModel.getModelDetail().getSqlQuery();
// if model has sqlVariables, parse sqlVariables // if model has sqlVariables, parse sqlVariables
if (Objects.nonNull(dataModel.getModelDetail().getSqlVariables()) || (CollectionUtils.isEmpty(dataModel.getModelDetail().getSqlVariables()))) { if (Objects.nonNull(dataModel.getModelDetail().getSqlVariables())
sqlTable = SqlVariableParseUtils.parse(sqlTable, dataModel.getModelDetail().getSqlVariables(), Lists.newArrayList()); || (CollectionUtils.isEmpty(dataModel.getModelDetail().getSqlVariables()))) {
sqlTable = SqlVariableParseUtils.parse(sqlTable,
dataModel.getModelDetail().getSqlVariables(), Lists.newArrayList());
} }
} else if (dataModel.getModelDetail().getTableQuery() != null } else if (dataModel.getModelDetail().getTableQuery() != null
&& !dataModel.getModelDetail().getTableQuery().isEmpty()) { && !dataModel.getModelDetail().getTableQuery().isEmpty()) {

View File

@@ -711,6 +711,15 @@ public class MetricServiceImpl extends ServiceImpl<MetricDOMapper, MetricDO>
} }
if (!modelCluster.isContainsPartitionDimensions()) { if (!modelCluster.isContainsPartitionDimensions()) {
queryMetricReq.setDateInfo(null); queryMetricReq.setDateInfo(null);
} else {
// set date field
DimensionResp partitionDimension = dimensionResps.stream()
.filter(entry -> modelCluster.getModelIds().contains(entry.getModelId()))
.filter(entry -> entry.getStatus().equals(StatusEnum.ONLINE.getCode()))
.filter(entry -> entry.isPartitionTime()).findFirst().orElse(null);
if (partitionDimension != null) {
queryMetricReq.getDateInfo().setDateField(partitionDimension.getName());
}
} }
// 4. set groups // 4. set groups
List<String> dimensionNames = dimensionResps.stream() List<String> dimensionNames = dimensionResps.stream()

View File

@@ -136,9 +136,10 @@ public class QueryUtils {
return false; return false;
} }
return type.toLowerCase().endsWith("int") || type.toLowerCase().startsWith("int") 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.equalsIgnoreCase("real") || type.equalsIgnoreCase("numeric")
|| type.toLowerCase().startsWith("decimal") || type.equalsIgnoreCase("decfloat"); || type.toLowerCase().startsWith("decimal");
} }
private String getName(String nameEn) { private String getName(String nameEn) {

View File

@@ -102,7 +102,6 @@ const ChatItem: React.FC<Props> = ({
{} {}
); );
const [isParserError, setIsParseError] = useState<boolean>(false); const [isParserError, setIsParseError] = useState<boolean>(false);
const resetState = () => { const resetState = () => {
setParseLoading(false); setParseLoading(false);
setParseTimeCost(undefined); setParseTimeCost(undefined);
@@ -441,6 +440,8 @@ const ChatItem: React.FC<Props> = ({
const { register, call } = useMethodRegister(() => message.error('该条消息暂不支持该操作')); const { register, call } = useMethodRegister(() => message.error('该条消息暂不支持该操作'));
let actualQueryText=parseInfo?.properties.CONTEXT.queryText // lance修改 结果显示多轮对话转义的内容
actualQueryText=actualQueryText==null?msg:actualQueryText
return ( return (
<ChartItemContext.Provider value={{ register, call }}> <ChartItemContext.Provider value={{ register, call }}>
<div className={prefixCls}> <div className={prefixCls}>
@@ -509,7 +510,7 @@ const ChatItem: React.FC<Props> = ({
<SqlItem <SqlItem
agentId={agentId} agentId={agentId}
queryId={parseInfo.queryId} queryId={parseInfo.queryId}
question={msg} question={actualQueryText}
llmReq={llmReq} llmReq={llmReq}
llmResp={llmResp} llmResp={llmResp}
integrateSystem={integrateSystem} integrateSystem={integrateSystem}
@@ -522,7 +523,7 @@ const ChatItem: React.FC<Props> = ({
<ExecuteItem <ExecuteItem
isSimpleMode={isSimpleMode} isSimpleMode={isSimpleMode}
queryId={parseInfo?.queryId} queryId={parseInfo?.queryId}
question={msg} question={actualQueryText}
queryMode={parseInfo?.queryMode} queryMode={parseInfo?.queryMode}
executeLoading={executeLoading} executeLoading={executeLoading}
executeTip={executeTip} executeTip={executeTip}

View File

@@ -82,7 +82,11 @@
background-color: #fafafa !important; background-color: #fafafa !important;
} }
.ant-table-cell { .ant-table-cell { // 更新修改,解决表格内容太长导致显示的问题
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 250px;
text-align: center !important; text-align: center !important;
} }

View File

@@ -293,7 +293,7 @@ const ChatMsg: React.FC<Props> = ({
dateInfo: { dateInfo: {
...chatContext.dateInfo, ...chatContext.dateInfo,
dateMode: dateModeValue, dateMode: dateModeValue,
unit: currentDateOption || chatContext.dateInfo.unit, unit: currentDateOption || chatContext.dateInfo?.unit,
}, },
dimensions: [ dimensions: [
...(chatContext.dimensions || []), ...(chatContext.dimensions || []),
@@ -310,7 +310,7 @@ const ChatMsg: React.FC<Props> = ({
dateInfo: { dateInfo: {
...chatContext.dateInfo, ...chatContext.dateInfo,
dateMode: dateModeValue, dateMode: dateModeValue,
unit: currentDateOption || chatContext.dateInfo.unit, unit: currentDateOption || chatContext.dateInfo?.unit,
}, },
dimensions: drillDownDimension dimensions: drillDownDimension
? [...(chatContext.dimensions || []), drillDownDimension] ? [...(chatContext.dimensions || []), drillDownDimension]