diff --git a/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/QueryContext.java b/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/QueryContext.java deleted file mode 100644 index 3a6c30991..000000000 --- a/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/QueryContext.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.tencent.supersonic.chat.api.pojo; - -import com.tencent.supersonic.chat.api.component.SemanticQuery; -import com.tencent.supersonic.chat.api.pojo.request.QueryReq; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.util.ArrayList; -import java.util.List; - -@Data -@NoArgsConstructor -public class QueryContext { - - private QueryReq request; - private List candidateQueries = new ArrayList<>(); - private SchemaMapInfo mapInfo = new SchemaMapInfo(); - private SchemaModelClusterMapInfo modelClusterMapInfo = new SchemaModelClusterMapInfo(); - - public QueryContext(QueryReq request) { - this.request = request; - } -} diff --git a/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/SemanticParseInfo.java b/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/SemanticParseInfo.java index 932229726..e272fe590 100644 --- a/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/SemanticParseInfo.java +++ b/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/SemanticParseInfo.java @@ -1,9 +1,9 @@ package com.tencent.supersonic.chat.api.pojo; +import com.tencent.supersonic.chat.api.pojo.response.SqlInfo; import com.tencent.supersonic.chat.api.pojo.request.QueryFilter; import com.tencent.supersonic.chat.api.pojo.response.EntityInfo; -import com.tencent.supersonic.chat.api.pojo.response.SqlInfo; import com.tencent.supersonic.common.pojo.DateConf; import com.tencent.supersonic.common.pojo.ModelCluster; import com.tencent.supersonic.common.pojo.Order; diff --git a/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/response/ChatDefaultRichConfigResp.java b/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/response/ChatDefaultRichConfigResp.java index 6ef966681..5aa2b2d32 100644 --- a/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/response/ChatDefaultRichConfigResp.java +++ b/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/response/ChatDefaultRichConfigResp.java @@ -2,7 +2,7 @@ package com.tencent.supersonic.chat.api.pojo.response; import com.tencent.supersonic.chat.api.pojo.SchemaElement; -import com.tencent.supersonic.chat.api.pojo.request.ChatDefaultConfigReq; +import com.tencent.supersonic.chat.api.pojo.request.ChatDefaultConfigReq.TimeMode; import com.tencent.supersonic.common.pojo.Constants; import lombok.Data; @@ -26,6 +26,6 @@ public class ChatDefaultRichConfigResp { */ private String period = Constants.DAY; - private ChatDefaultConfigReq.TimeMode timeMode; + private TimeMode timeMode; } \ No newline at end of file diff --git a/chat/core/pom.xml b/chat/core/pom.xml index 221cae0bb..924b242f7 100644 --- a/chat/core/pom.xml +++ b/chat/core/pom.xml @@ -22,6 +22,69 @@ spring-context + + com.hankcs + hanlp + ${hanlp.version} + + + + org.apache.hadoop + hadoop-client + ${hadoop.version} + + + org.apache.zookeeper + zookeeper + + + javax.servlet + servlet-api + + + + + org.apache.hadoop + hadoop-hdfs + ${hadoop.version} + + + org.apache.zookeeper + zookeeper + + + javax.servlet + servlet-api + + + + + org.apache.hadoop + hadoop-common + ${hadoop.version} + + + org.slf4j + slf4j-log4j12 + + + log4j + log4j + + + org.apache.zookeeper + zookeeper + + + org.apache.curator + * + + + javax.servlet + servlet-api + + + org.testng testng @@ -70,11 +133,6 @@ h2 ${h2.version} - - com.tencent.supersonic - chat-knowledge - ${project.version} - com.tencent.supersonic headless-api @@ -104,6 +162,12 @@ ${mockito-inline.version} test + + com.tencent.supersonic + headless-server + ${project.version} + compile + diff --git a/chat/knowledge/src/main/java/com/hankcs/hanlp/collection/trie/bintrie/BaseNode.java b/chat/core/src/main/java/com/hankcs/hanlp/collection/trie/bintrie/BaseNode.java similarity index 99% rename from chat/knowledge/src/main/java/com/hankcs/hanlp/collection/trie/bintrie/BaseNode.java rename to chat/core/src/main/java/com/hankcs/hanlp/collection/trie/bintrie/BaseNode.java index f4c3dd507..e744ecc4b 100644 --- a/chat/knowledge/src/main/java/com/hankcs/hanlp/collection/trie/bintrie/BaseNode.java +++ b/chat/core/src/main/java/com/hankcs/hanlp/collection/trie/bintrie/BaseNode.java @@ -1,8 +1,8 @@ package com.hankcs.hanlp.collection.trie.bintrie; import com.hankcs.hanlp.corpus.io.ByteArray; +import com.tencent.supersonic.chat.core.knowledge.LoadRemoveService; import com.tencent.supersonic.common.util.ContextUtils; -import com.tencent.supersonic.knowledge.service.LoadRemoveService; import java.io.DataOutputStream; import java.io.IOException; import java.io.ObjectInput; diff --git a/chat/knowledge/src/main/java/com/hankcs/hanlp/dictionary/CoreDictionary.java b/chat/core/src/main/java/com/hankcs/hanlp/dictionary/CoreDictionary.java similarity index 100% rename from chat/knowledge/src/main/java/com/hankcs/hanlp/dictionary/CoreDictionary.java rename to chat/core/src/main/java/com/hankcs/hanlp/dictionary/CoreDictionary.java diff --git a/chat/knowledge/src/main/java/com/hankcs/hanlp/seg/WordBasedSegment.java b/chat/core/src/main/java/com/hankcs/hanlp/seg/WordBasedSegment.java similarity index 100% rename from chat/knowledge/src/main/java/com/hankcs/hanlp/seg/WordBasedSegment.java rename to chat/core/src/main/java/com/hankcs/hanlp/seg/WordBasedSegment.java diff --git a/chat/knowledge/src/main/java/com/hankcs/hanlp/seg/common/Term.java b/chat/core/src/main/java/com/hankcs/hanlp/seg/common/Term.java similarity index 96% rename from chat/knowledge/src/main/java/com/hankcs/hanlp/seg/common/Term.java rename to chat/core/src/main/java/com/hankcs/hanlp/seg/common/Term.java index fa52780f6..5cf122ebb 100644 --- a/chat/knowledge/src/main/java/com/hankcs/hanlp/seg/common/Term.java +++ b/chat/core/src/main/java/com/hankcs/hanlp/seg/common/Term.java @@ -3,7 +3,7 @@ package com.hankcs.hanlp.seg.common; import com.hankcs.hanlp.corpus.tag.Nature; import com.hankcs.hanlp.dictionary.CoreDictionary; import com.hankcs.hanlp.dictionary.CustomDictionary; -import com.tencent.supersonic.knowledge.utils.HanlpHelper; +import com.tencent.supersonic.chat.core.utils.HanlpHelper; import lombok.Data; import lombok.ToString; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/agent/Agent.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/Agent.java similarity index 55% rename from chat/core/src/main/java/com/tencent/supersonic/chat/agent/Agent.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/Agent.java index 0db60b10c..e9746c396 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/agent/Agent.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/Agent.java @@ -1,15 +1,18 @@ -package com.tencent.supersonic.chat.agent; +package com.tencent.supersonic.chat.core.agent; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Lists; import com.tencent.supersonic.common.pojo.RecordInfo; -import java.util.Objects; -import lombok.Data; -import org.springframework.util.CollectionUtils; +import java.util.Collection; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.Set; import java.util.stream.Collectors; +import lombok.Data; +import org.springframework.util.CollectionUtils; @Data public class Agent extends RecordInfo { @@ -23,6 +26,7 @@ public class Agent extends RecordInfo { private Integer status; private List examples; private String agentConfig; + public List getTools(AgentToolType type) { Map map = JSONObject.parseObject(agentConfig, Map.class); if (CollectionUtils.isEmpty(map) || map.get("tools") == null) { @@ -45,4 +49,27 @@ public class Agent extends RecordInfo { return enableSearch != null && enableSearch == 1; } + public boolean containsAllModel(Set detectModelIds) { + return !CollectionUtils.isEmpty(detectModelIds) && detectModelIds.contains(-1L); + } + + public List getParserTools(AgentToolType agentToolType) { + List tools = this.getTools(agentToolType); + if (CollectionUtils.isEmpty(tools)) { + return Lists.newArrayList(); + } + return tools.stream().map(tool -> JSONObject.parseObject(tool, NL2SQLTool.class)) + .collect(Collectors.toList()); + } + + public Set getModelIds(AgentToolType agentToolType) { + List commonAgentTools = getParserTools(agentToolType); + if (CollectionUtils.isEmpty(commonAgentTools)) { + return new HashSet<>(); + } + return commonAgentTools.stream().map(NL2SQLTool::getModelIds) + .filter(modelIds -> !CollectionUtils.isEmpty(modelIds)) + .flatMap(Collection::stream) + .collect(Collectors.toSet()); + } } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/agent/AgentConfig.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/AgentConfig.java similarity index 85% rename from chat/core/src/main/java/com/tencent/supersonic/chat/agent/AgentConfig.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/AgentConfig.java index 233f62e14..b736888dc 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/agent/AgentConfig.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/AgentConfig.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.agent; +package com.tencent.supersonic.chat.core.agent; import com.google.common.collect.Lists; import lombok.AllArgsConstructor; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/agent/AgentTool.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/AgentTool.java similarity index 83% rename from chat/core/src/main/java/com/tencent/supersonic/chat/agent/AgentTool.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/AgentTool.java index 102362bc3..e1918a6e3 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/agent/AgentTool.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/AgentTool.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.agent; +package com.tencent.supersonic.chat.core.agent; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/agent/AgentToolType.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/AgentToolType.java similarity index 65% rename from chat/core/src/main/java/com/tencent/supersonic/chat/agent/AgentToolType.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/AgentToolType.java index 0fd1a95c4..fc20abf89 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/agent/AgentToolType.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/AgentToolType.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.agent; +package com.tencent.supersonic.chat.core.agent; public enum AgentToolType { NL2SQL_RULE, diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/agent/DataAnalyticsTool.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/DataAnalyticsTool.java similarity index 69% rename from chat/core/src/main/java/com/tencent/supersonic/chat/agent/DataAnalyticsTool.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/DataAnalyticsTool.java index 0edacb857..559dd719a 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/agent/DataAnalyticsTool.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/DataAnalyticsTool.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.agent; +package com.tencent.supersonic.chat.core.agent; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/agent/LLMParserTool.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/LLMParserTool.java similarity index 75% rename from chat/core/src/main/java/com/tencent/supersonic/chat/agent/LLMParserTool.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/LLMParserTool.java index 7d498f3ff..686c5a0cc 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/agent/LLMParserTool.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/LLMParserTool.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.agent; +package com.tencent.supersonic.chat.core.agent; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/agent/NL2SQLTool.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/NL2SQLTool.java similarity index 83% rename from chat/core/src/main/java/com/tencent/supersonic/chat/agent/NL2SQLTool.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/NL2SQLTool.java index 598b1a0e4..bff9c120d 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/agent/NL2SQLTool.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/NL2SQLTool.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.agent; +package com.tencent.supersonic.chat.core.agent; import java.util.List; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/agent/PluginTool.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/PluginTool.java similarity index 73% rename from chat/core/src/main/java/com/tencent/supersonic/chat/agent/PluginTool.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/PluginTool.java index fc9cf0a76..6dfd73a44 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/agent/PluginTool.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/PluginTool.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.agent; +package com.tencent.supersonic.chat.core.agent; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/agent/RuleParserTool.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/RuleParserTool.java similarity index 88% rename from chat/core/src/main/java/com/tencent/supersonic/chat/agent/RuleParserTool.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/RuleParserTool.java index 53eced6ed..bb8374e51 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/agent/RuleParserTool.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/agent/RuleParserTool.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.agent; +package com.tencent.supersonic.chat.core.agent; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/config/AggregatorConfig.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/config/AggregatorConfig.java similarity index 85% rename from chat/core/src/main/java/com/tencent/supersonic/chat/config/AggregatorConfig.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/config/AggregatorConfig.java index 30733e6cc..919b10370 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/config/AggregatorConfig.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/config/AggregatorConfig.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.config; +package com.tencent.supersonic.chat.core.config; import lombok.Data; import org.springframework.beans.factory.annotation.Value; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/config/DefaultMetric.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/config/DefaultMetric.java similarity index 94% rename from chat/core/src/main/java/com/tencent/supersonic/chat/config/DefaultMetric.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/config/DefaultMetric.java index e00e36fe5..e5acb8354 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/config/DefaultMetric.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/config/DefaultMetric.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.config; +package com.tencent.supersonic.chat.core.config; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/config/DefaultMetricInfo.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/config/DefaultMetricInfo.java similarity index 90% rename from chat/core/src/main/java/com/tencent/supersonic/chat/config/DefaultMetricInfo.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/config/DefaultMetricInfo.java index df5d71b84..deecf4db4 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/config/DefaultMetricInfo.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/config/DefaultMetricInfo.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.config; +package com.tencent.supersonic.chat.core.config; import com.tencent.supersonic.common.pojo.Constants; import lombok.Data; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/DefaultSemanticConfig.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/config/DefaultSemanticConfig.java similarity index 96% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/DefaultSemanticConfig.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/config/DefaultSemanticConfig.java index 2152da0b7..caf665e6e 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/DefaultSemanticConfig.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/config/DefaultSemanticConfig.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.semantic; +package com.tencent.supersonic.chat.core.config; import lombok.Data; import org.springframework.beans.factory.annotation.Value; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/config/Dim4Dict.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/config/Dim4Dict.java similarity index 88% rename from chat/core/src/main/java/com/tencent/supersonic/chat/config/Dim4Dict.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/config/Dim4Dict.java index 48f364070..bfe7d7d36 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/config/Dim4Dict.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/config/Dim4Dict.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.config; +package com.tencent.supersonic.chat.core.config; import java.util.List; import lombok.AllArgsConstructor; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/config/EntityDetailData.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/config/EntityDetailData.java similarity index 82% rename from chat/core/src/main/java/com/tencent/supersonic/chat/config/EntityDetailData.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/config/EntityDetailData.java index f76cfcb97..9669f914b 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/config/EntityDetailData.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/config/EntityDetailData.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.config; +package com.tencent.supersonic.chat.core.config; import java.util.List; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/config/EntityInternalDetail.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/config/EntityInternalDetail.java similarity index 86% rename from chat/core/src/main/java/com/tencent/supersonic/chat/config/EntityInternalDetail.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/config/EntityInternalDetail.java index 93acef915..d662e152e 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/config/EntityInternalDetail.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/config/EntityInternalDetail.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.config; +package com.tencent.supersonic.chat.core.config; import com.tencent.supersonic.headless.api.response.DimSchemaResp; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/config/LLMParserConfig.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/config/LLMParserConfig.java similarity index 90% rename from chat/core/src/main/java/com/tencent/supersonic/chat/config/LLMParserConfig.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/config/LLMParserConfig.java index 6032b798c..b05bc0502 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/config/LLMParserConfig.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/config/LLMParserConfig.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.config; +package com.tencent.supersonic.chat.core.config; import lombok.Data; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/LocalFileConfig.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/config/LocalFileConfig.java similarity index 89% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/LocalFileConfig.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/config/LocalFileConfig.java index 80aec2a1c..b039c3924 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/LocalFileConfig.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/config/LocalFileConfig.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.knowledge.dictionary; +package com.tencent.supersonic.chat.core.config; -import com.tencent.supersonic.knowledge.utils.HanlpHelper; +import com.tencent.supersonic.chat.core.utils.HanlpHelper; import java.io.FileNotFoundException; import lombok.Data; import lombok.extern.slf4j.Slf4j; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/config/OptimizationConfig.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/config/OptimizationConfig.java similarity index 97% rename from chat/core/src/main/java/com/tencent/supersonic/chat/config/OptimizationConfig.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/config/OptimizationConfig.java index c6583a15d..180e2f0d6 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/config/OptimizationConfig.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/config/OptimizationConfig.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.chat.config; +package com.tencent.supersonic.chat.core.config; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq.SqlGenerationMode; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq.SqlGenerationMode; import com.tencent.supersonic.common.service.SysParameterService; import lombok.Data; import lombok.extern.slf4j.Slf4j; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/corrector/BaseSemanticCorrector.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/BaseSemanticCorrector.java similarity index 84% rename from chat/core/src/main/java/com/tencent/supersonic/chat/corrector/BaseSemanticCorrector.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/BaseSemanticCorrector.java index 0aa56e467..8566b0851 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/corrector/BaseSemanticCorrector.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/BaseSemanticCorrector.java @@ -1,22 +1,14 @@ -package com.tencent.supersonic.chat.corrector; +package com.tencent.supersonic.chat.core.corrector; -import com.tencent.supersonic.chat.api.component.SemanticCorrector; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; import com.tencent.supersonic.chat.api.pojo.SemanticSchema; -import com.tencent.supersonic.chat.api.pojo.request.QueryReq; import com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; -import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.jsqlparser.SqlParserAddHelper; import com.tencent.supersonic.common.util.jsqlparser.SqlParserSelectFunctionHelper; import com.tencent.supersonic.common.util.jsqlparser.SqlParserSelectHelper; -import com.tencent.supersonic.knowledge.service.SchemaService; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.tuple.Pair; -import org.springframework.util.CollectionUtils; - import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -24,6 +16,10 @@ import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.Pair; +import org.springframework.util.CollectionUtils; /** * basic semantic correction functionality, offering common methods and an @@ -32,23 +28,23 @@ import java.util.stream.Collectors; @Slf4j public abstract class BaseSemanticCorrector implements SemanticCorrector { - public void correct(QueryReq queryReq, SemanticParseInfo semanticParseInfo) { + public void correct(QueryContext queryContext, SemanticParseInfo semanticParseInfo) { try { if (StringUtils.isBlank(semanticParseInfo.getSqlInfo().getCorrectS2SQL())) { return; } - doCorrect(queryReq, semanticParseInfo); + doCorrect(queryContext, semanticParseInfo); log.info("sqlCorrection:{} sql:{}", this.getClass().getSimpleName(), semanticParseInfo.getSqlInfo()); } catch (Exception e) { log.error(String.format("correct error,sqlInfo:%s", semanticParseInfo.getSqlInfo()), e); } } - public abstract void doCorrect(QueryReq queryReq, SemanticParseInfo semanticParseInfo); + public abstract void doCorrect(QueryContext queryContext, SemanticParseInfo semanticParseInfo); - protected Map getFieldNameMap(Set modelIds) { + protected Map getFieldNameMap(QueryContext queryContext, Set modelIds) { - SemanticSchema semanticSchema = ContextUtils.getBean(SchemaService.class).getSemanticSchema(); + SemanticSchema semanticSchema = queryContext.getSemanticSchema(); List dbAllFields = new ArrayList<>(); dbAllFields.addAll(semanticSchema.getMetrics()); @@ -101,12 +97,12 @@ public abstract class BaseSemanticCorrector implements SemanticCorrector { semanticParseInfo.getSqlInfo().setCorrectS2SQL(replaceFields); } - protected void addAggregateToMetric(SemanticParseInfo semanticParseInfo) { + protected void addAggregateToMetric(QueryContext queryContext, SemanticParseInfo semanticParseInfo) { //add aggregate to all metric String correctS2SQL = semanticParseInfo.getSqlInfo().getCorrectS2SQL(); Set modelIds = semanticParseInfo.getModel().getModelIds(); - List metrics = getMetricElements(modelIds); + List metrics = getMetricElements(queryContext, modelIds); Map metricToAggregate = metrics.stream() .map(schemaElement -> { @@ -131,8 +127,8 @@ public abstract class BaseSemanticCorrector implements SemanticCorrector { semanticParseInfo.getSqlInfo().setCorrectS2SQL(aggregateSql); } - protected List getMetricElements(Set modelIds) { - SemanticSchema semanticSchema = ContextUtils.getBean(SchemaService.class).getSemanticSchema(); + protected List getMetricElements(QueryContext queryContext, Set modelIds) { + SemanticSchema semanticSchema = queryContext.getSemanticSchema(); return semanticSchema.getMetrics(modelIds); } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/corrector/FromCorrector.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/FromCorrector.java similarity index 75% rename from chat/core/src/main/java/com/tencent/supersonic/chat/corrector/FromCorrector.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/FromCorrector.java index 77c14fe56..bc71e09ab 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/corrector/FromCorrector.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/FromCorrector.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.chat.corrector; +package com.tencent.supersonic.chat.core.corrector; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; -import com.tencent.supersonic.chat.api.pojo.request.QueryReq; import com.tencent.supersonic.common.util.jsqlparser.SqlParserReplaceHelper; import lombok.extern.slf4j.Slf4j; /** @@ -11,7 +11,7 @@ import lombok.extern.slf4j.Slf4j; public class FromCorrector extends BaseSemanticCorrector { @Override - public void doCorrect(QueryReq queryReq, SemanticParseInfo semanticParseInfo) { + public void doCorrect(QueryContext queryContext, SemanticParseInfo semanticParseInfo) { String modelName = semanticParseInfo.getModel().getName(); String correctSql = SqlParserReplaceHelper .replaceTable(semanticParseInfo.getSqlInfo().getCorrectS2SQL(), modelName); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/corrector/GroupByCorrector.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/GroupByCorrector.java similarity index 81% rename from chat/core/src/main/java/com/tencent/supersonic/chat/corrector/GroupByCorrector.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/GroupByCorrector.java index 34380dde4..f232d1838 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/corrector/GroupByCorrector.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/GroupByCorrector.java @@ -1,21 +1,18 @@ -package com.tencent.supersonic.chat.corrector; +package com.tencent.supersonic.chat.core.corrector; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; import com.tencent.supersonic.chat.api.pojo.SemanticSchema; -import com.tencent.supersonic.chat.api.pojo.request.QueryReq; import com.tencent.supersonic.chat.api.pojo.response.SqlInfo; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; -import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.jsqlparser.SqlParserAddHelper; import com.tencent.supersonic.common.util.jsqlparser.SqlParserSelectHelper; -import com.tencent.supersonic.knowledge.service.SchemaService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.util.CollectionUtils; - import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.CollectionUtils; /** * Perform SQL corrections on the "Group by" section in S2SQL. @@ -24,19 +21,19 @@ import java.util.stream.Collectors; public class GroupByCorrector extends BaseSemanticCorrector { @Override - public void doCorrect(QueryReq queryReq, SemanticParseInfo semanticParseInfo) { + public void doCorrect(QueryContext queryContext, SemanticParseInfo semanticParseInfo) { - addGroupByFields(semanticParseInfo); + addGroupByFields(queryContext, semanticParseInfo); } - private void addGroupByFields(SemanticParseInfo semanticParseInfo) { + private void addGroupByFields(QueryContext queryContext, SemanticParseInfo semanticParseInfo) { Set modelIds = semanticParseInfo.getModel().getModelIds(); //add dimension group by SqlInfo sqlInfo = semanticParseInfo.getSqlInfo(); String correctS2SQL = sqlInfo.getCorrectS2SQL(); - SemanticSchema semanticSchema = ContextUtils.getBean(SchemaService.class).getSemanticSchema(); + SemanticSchema semanticSchema = queryContext.getSemanticSchema(); //add alias field name Set dimensions = semanticSchema.getDimensions(modelIds).stream() .flatMap( @@ -77,15 +74,15 @@ public class GroupByCorrector extends BaseSemanticCorrector { .collect(Collectors.toSet()); semanticParseInfo.getSqlInfo().setCorrectS2SQL(SqlParserAddHelper.addGroupBy(correctS2SQL, groupByFields)); - addAggregate(semanticParseInfo); + addAggregate(queryContext, semanticParseInfo); } - private void addAggregate(SemanticParseInfo semanticParseInfo) { + private void addAggregate(QueryContext queryContext, SemanticParseInfo semanticParseInfo) { List sqlGroupByFields = SqlParserSelectHelper.getGroupByFields( semanticParseInfo.getSqlInfo().getCorrectS2SQL()); if (CollectionUtils.isEmpty(sqlGroupByFields)) { return; } - addAggregateToMetric(semanticParseInfo); + addAggregateToMetric(queryContext, semanticParseInfo); } } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/corrector/HavingCorrector.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/HavingCorrector.java similarity index 79% rename from chat/core/src/main/java/com/tencent/supersonic/chat/corrector/HavingCorrector.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/HavingCorrector.java index 7b0812db8..22a8250d6 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/corrector/HavingCorrector.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/HavingCorrector.java @@ -1,18 +1,14 @@ -package com.tencent.supersonic.chat.corrector; +package com.tencent.supersonic.chat.core.corrector; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; import com.tencent.supersonic.chat.api.pojo.SemanticSchema; -import com.tencent.supersonic.chat.api.pojo.request.QueryReq; -import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.jsqlparser.SqlParserAddHelper; import com.tencent.supersonic.common.util.jsqlparser.SqlParserSelectFunctionHelper; import com.tencent.supersonic.common.util.jsqlparser.SqlParserSelectHelper; -import com.tencent.supersonic.knowledge.service.SchemaService; - -import java.util.Set; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; - import lombok.extern.slf4j.Slf4j; import net.sf.jsqlparser.expression.Expression; import org.springframework.util.CollectionUtils; @@ -24,20 +20,20 @@ import org.springframework.util.CollectionUtils; public class HavingCorrector extends BaseSemanticCorrector { @Override - public void doCorrect(QueryReq queryReq, SemanticParseInfo semanticParseInfo) { + public void doCorrect(QueryContext queryContext, SemanticParseInfo semanticParseInfo) { //add aggregate to all metric - addHaving(semanticParseInfo); + addHaving(queryContext, semanticParseInfo); //add having expression filed to select addHavingToSelect(semanticParseInfo); } - private void addHaving(SemanticParseInfo semanticParseInfo) { + private void addHaving(QueryContext queryContext, SemanticParseInfo semanticParseInfo) { Set modelIds = semanticParseInfo.getModel().getModelIds(); - SemanticSchema semanticSchema = ContextUtils.getBean(SchemaService.class).getSemanticSchema(); + SemanticSchema semanticSchema = queryContext.getSemanticSchema(); Set metrics = semanticSchema.getMetrics(modelIds).stream() .map(schemaElement -> schemaElement.getName()).collect(Collectors.toSet()); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/corrector/SchemaCorrector.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/SchemaCorrector.java similarity index 86% rename from chat/core/src/main/java/com/tencent/supersonic/chat/corrector/SchemaCorrector.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/SchemaCorrector.java index d3f96e72f..04fc8d3f1 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/corrector/SchemaCorrector.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/SchemaCorrector.java @@ -1,10 +1,10 @@ -package com.tencent.supersonic.chat.corrector; +package com.tencent.supersonic.chat.core.corrector; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; -import com.tencent.supersonic.chat.api.pojo.request.QueryReq; import com.tencent.supersonic.chat.api.pojo.response.SqlInfo; -import com.tencent.supersonic.chat.parser.sql.llm.ParseResult; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq.ElementValue; +import com.tencent.supersonic.chat.core.parser.sql.llm.ParseResult; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq.ElementValue; import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.common.util.jsqlparser.AggregateEnum; @@ -24,7 +24,7 @@ import org.springframework.util.CollectionUtils; public class SchemaCorrector extends BaseSemanticCorrector { @Override - public void doCorrect(QueryReq queryReq, SemanticParseInfo semanticParseInfo) { + public void doCorrect(QueryContext queryContext, SemanticParseInfo semanticParseInfo) { correctAggFunction(semanticParseInfo); @@ -34,7 +34,7 @@ public class SchemaCorrector extends BaseSemanticCorrector { updateFieldValueByLinkingValue(semanticParseInfo); - correctFieldName(semanticParseInfo); + correctFieldName(queryContext, semanticParseInfo); } private void correctAggFunction(SemanticParseInfo semanticParseInfo) { @@ -50,8 +50,8 @@ public class SchemaCorrector extends BaseSemanticCorrector { sqlInfo.setCorrectS2SQL(replaceAlias); } - private void correctFieldName(SemanticParseInfo semanticParseInfo) { - Map fieldNameMap = getFieldNameMap(semanticParseInfo.getModel().getModelIds()); + private void correctFieldName(QueryContext queryContext, SemanticParseInfo semanticParseInfo) { + Map fieldNameMap = getFieldNameMap(queryContext, semanticParseInfo.getModel().getModelIds()); SqlInfo sqlInfo = semanticParseInfo.getSqlInfo(); String sql = SqlParserReplaceHelper.replaceFields(sqlInfo.getCorrectS2SQL(), fieldNameMap); sqlInfo.setCorrectS2SQL(sql); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/corrector/SelectCorrector.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/SelectCorrector.java similarity index 83% rename from chat/core/src/main/java/com/tencent/supersonic/chat/corrector/SelectCorrector.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/SelectCorrector.java index ee8dfa5e0..56fbcf2af 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/corrector/SelectCorrector.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/SelectCorrector.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.chat.corrector; +package com.tencent.supersonic.chat.core.corrector; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; -import com.tencent.supersonic.chat.api.pojo.request.QueryReq; import com.tencent.supersonic.common.util.jsqlparser.SqlParserSelectHelper; import java.util.List; import lombok.extern.slf4j.Slf4j; @@ -14,7 +14,7 @@ import org.springframework.util.CollectionUtils; public class SelectCorrector extends BaseSemanticCorrector { @Override - public void doCorrect(QueryReq queryReq, SemanticParseInfo semanticParseInfo) { + public void doCorrect(QueryContext queryContext, SemanticParseInfo semanticParseInfo) { String correctS2SQL = semanticParseInfo.getSqlInfo().getCorrectS2SQL(); List aggregateFields = SqlParserSelectHelper.getAggregateFields(correctS2SQL); List selectFields = SqlParserSelectHelper.getSelectFields(correctS2SQL); diff --git a/chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticCorrector.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/SemanticCorrector.java similarity index 55% rename from chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticCorrector.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/SemanticCorrector.java index 1a4441286..1a53484e0 100644 --- a/chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticCorrector.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/SemanticCorrector.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.chat.api.component; +package com.tencent.supersonic.chat.core.corrector; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; -import com.tencent.supersonic.chat.api.pojo.request.QueryReq; /** * A semantic corrector checks validity of extracted semantic information and @@ -9,5 +9,5 @@ import com.tencent.supersonic.chat.api.pojo.request.QueryReq; */ public interface SemanticCorrector { - void correct(QueryReq queryReq, SemanticParseInfo semanticParseInfo); + void correct(QueryContext queryContext, SemanticParseInfo semanticParseInfo); } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/corrector/WhereCorrector.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/WhereCorrector.java similarity index 85% rename from chat/core/src/main/java/com/tencent/supersonic/chat/corrector/WhereCorrector.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/WhereCorrector.java index bf04def30..3206e7d27 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/corrector/WhereCorrector.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/corrector/WhereCorrector.java @@ -1,20 +1,24 @@ -package com.tencent.supersonic.chat.corrector; +package com.tencent.supersonic.chat.core.corrector; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaValueMap; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; import com.tencent.supersonic.chat.api.pojo.SemanticSchema; import com.tencent.supersonic.chat.api.pojo.request.QueryFilters; -import com.tencent.supersonic.chat.api.pojo.request.QueryReq; -import com.tencent.supersonic.chat.parser.sql.llm.S2SqlDateHelper; +import com.tencent.supersonic.chat.core.parser.sql.llm.S2SqlDateHelper; import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; -import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.StringUtil; import com.tencent.supersonic.common.util.jsqlparser.SqlParserAddHelper; import com.tencent.supersonic.common.util.jsqlparser.SqlParserReplaceHelper; import com.tencent.supersonic.common.util.jsqlparser.SqlParserSelectHelper; -import com.tencent.supersonic.knowledge.service.SchemaService; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import net.sf.jsqlparser.JSQLParserException; import net.sf.jsqlparser.expression.Expression; @@ -23,13 +27,6 @@ import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.util.Strings; import org.springframework.util.CollectionUtils; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.stream.Collectors; - /** * Perform SQL corrections on the "Where" section in S2SQL. */ @@ -37,19 +34,19 @@ import java.util.stream.Collectors; public class WhereCorrector extends BaseSemanticCorrector { @Override - public void doCorrect(QueryReq queryReq, SemanticParseInfo semanticParseInfo) { + public void doCorrect(QueryContext queryContext, SemanticParseInfo semanticParseInfo) { - addDateIfNotExist(semanticParseInfo); + addDateIfNotExist(queryContext, semanticParseInfo); parserDateDiffFunction(semanticParseInfo); - addQueryFilter(queryReq, semanticParseInfo); + addQueryFilter(queryContext, semanticParseInfo); - updateFieldValueByTechName(semanticParseInfo); + updateFieldValueByTechName(queryContext, semanticParseInfo); } - private void addQueryFilter(QueryReq queryReq, SemanticParseInfo semanticParseInfo) { - String queryFilter = getQueryFilter(queryReq.getQueryFilters()); + private void addQueryFilter(QueryContext queryContext, SemanticParseInfo semanticParseInfo) { + String queryFilter = getQueryFilter(queryContext.getQueryFilters()); String correctS2SQL = semanticParseInfo.getSqlInfo().getCorrectS2SQL(); @@ -72,11 +69,11 @@ public class WhereCorrector extends BaseSemanticCorrector { semanticParseInfo.getSqlInfo().setCorrectS2SQL(correctS2SQL); } - private void addDateIfNotExist(SemanticParseInfo semanticParseInfo) { + private void addDateIfNotExist(QueryContext queryContext, SemanticParseInfo semanticParseInfo) { String correctS2SQL = semanticParseInfo.getSqlInfo().getCorrectS2SQL(); List whereFields = SqlParserSelectHelper.getWhereFields(correctS2SQL); if (CollectionUtils.isEmpty(whereFields) || !TimeDimensionEnum.containsZhTimeDimension(whereFields)) { - String currentDate = S2SqlDateHelper.getReferenceDate(semanticParseInfo.getModelId()); + String currentDate = S2SqlDateHelper.getReferenceDate(queryContext, semanticParseInfo.getModelId()); if (StringUtils.isNotBlank(currentDate)) { correctS2SQL = SqlParserAddHelper.addParenthesisToWhere(correctS2SQL); correctS2SQL = SqlParserAddHelper.addWhere( @@ -100,8 +97,8 @@ public class WhereCorrector extends BaseSemanticCorrector { .collect(Collectors.joining(Constants.AND_UPPER)); } - private void updateFieldValueByTechName(SemanticParseInfo semanticParseInfo) { - SemanticSchema semanticSchema = ContextUtils.getBean(SchemaService.class).getSemanticSchema(); + private void updateFieldValueByTechName(QueryContext queryContext, SemanticParseInfo semanticParseInfo) { + SemanticSchema semanticSchema = queryContext.getSemanticSchema(); Set modelIds = semanticParseInfo.getModel().getModelIds(); List dimensions = semanticSchema.getDimensions(modelIds); diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DatabaseMapResult.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DatabaseMapResult.java similarity index 93% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DatabaseMapResult.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DatabaseMapResult.java index 968f87aa1..b58c36fd0 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DatabaseMapResult.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DatabaseMapResult.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.dictionary; +package com.tencent.supersonic.chat.core.knowledge; import com.google.common.base.Objects; import com.tencent.supersonic.chat.api.pojo.SchemaElement; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DictConfig.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DictConfig.java similarity index 74% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DictConfig.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DictConfig.java index 768962f26..5f1f8cd47 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DictConfig.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DictConfig.java @@ -1,7 +1,6 @@ -package com.tencent.supersonic.knowledge.dictionary; +package com.tencent.supersonic.chat.core.knowledge; import java.util.List; - import lombok.Data; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DictUpdateMode.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DictUpdateMode.java similarity index 92% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DictUpdateMode.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DictUpdateMode.java index 186fdd3c2..eba4b6727 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DictUpdateMode.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DictUpdateMode.java @@ -1,4 +1,5 @@ -package com.tencent.supersonic.knowledge.dictionary; + +package com.tencent.supersonic.chat.core.knowledge; public enum DictUpdateMode { diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DictWord.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DictWord.java similarity index 92% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DictWord.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DictWord.java index 955864006..9241991eb 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DictWord.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DictWord.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.dictionary; +package com.tencent.supersonic.chat.core.knowledge; import java.util.Objects; import lombok.Data; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DictionaryAttributeUtil.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DictionaryAttributeUtil.java similarity index 96% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DictionaryAttributeUtil.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DictionaryAttributeUtil.java index 6743a2cd0..d3d4f0900 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DictionaryAttributeUtil.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DictionaryAttributeUtil.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.dictionary; +package com.tencent.supersonic.chat.core.knowledge.dictionary; import com.hankcs.hanlp.corpus.tag.Nature; import com.hankcs.hanlp.dictionary.CoreDictionary; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DimValue2DictCommand.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DimValue2DictCommand.java similarity index 84% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DimValue2DictCommand.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DimValue2DictCommand.java index 734b24a04..f9a865692 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DimValue2DictCommand.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DimValue2DictCommand.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.dictionary; +package com.tencent.supersonic.chat.core.knowledge; import java.util.HashMap; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DimValueDictInfo.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DimValueDictInfo.java similarity index 89% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DimValueDictInfo.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DimValueDictInfo.java index a93dd07fb..f5c374afb 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DimValueDictInfo.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DimValueDictInfo.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.dictionary; +package com.tencent.supersonic.chat.core.knowledge; import com.tencent.supersonic.common.pojo.enums.TaskStatusEnum; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DimValueInfo.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DimValueInfo.java similarity index 91% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DimValueInfo.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DimValueInfo.java index 0a4f35c65..83cf7acbb 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/DimValueInfo.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/DimValueInfo.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.dictionary; +package com.tencent.supersonic.chat.core.knowledge; import com.tencent.supersonic.common.pojo.enums.TypeEnums; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/EmbeddingResult.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/EmbeddingResult.java similarity index 92% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/EmbeddingResult.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/EmbeddingResult.java index 66040cdc6..c664b5a31 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/EmbeddingResult.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/EmbeddingResult.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.dictionary; +package com.tencent.supersonic.chat.core.knowledge; import com.google.common.base.Objects; import java.util.Map; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/FileHandler.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/FileHandler.java similarity index 94% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/FileHandler.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/FileHandler.java index b02df286e..e2482268b 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/FileHandler.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/FileHandler.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.dictionary; +package com.tencent.supersonic.chat.core.knowledge; import java.util.List; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/HadoopFileIOAdapter.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/HadoopFileIOAdapter.java similarity index 94% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/HadoopFileIOAdapter.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/HadoopFileIOAdapter.java index f948c2817..b4b7f3ba8 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/HadoopFileIOAdapter.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/HadoopFileIOAdapter.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.dictionary; +package com.tencent.supersonic.chat.core.knowledge; import com.hankcs.hanlp.corpus.io.IIOAdapter; import java.io.IOException; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/HanlpMapResult.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/HanlpMapResult.java similarity index 94% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/HanlpMapResult.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/HanlpMapResult.java index 0bab62d24..8a363c06a 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/HanlpMapResult.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/HanlpMapResult.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.dictionary; +package com.tencent.supersonic.chat.core.knowledge; import com.google.common.base.Objects; import java.util.List; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/LoadRemoveService.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/LoadRemoveService.java similarity index 93% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/LoadRemoveService.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/LoadRemoveService.java index c4b7e9588..effd8a42e 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/LoadRemoveService.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/LoadRemoveService.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.knowledge.service; +package com.tencent.supersonic.chat.core.knowledge; -import com.tencent.supersonic.knowledge.utils.NatureHelper; +import com.tencent.supersonic.chat.core.utils.NatureHelper; import java.util.ArrayList; import java.util.List; import java.util.Objects; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/LocalFileHandler.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/LocalFileHandler.java similarity index 97% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/LocalFileHandler.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/LocalFileHandler.java index f5695b792..6a6c07ed4 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/LocalFileHandler.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/LocalFileHandler.java @@ -1,6 +1,7 @@ -package com.tencent.supersonic.knowledge.dictionary; +package com.tencent.supersonic.chat.core.knowledge; +import com.tencent.supersonic.chat.core.config.LocalFileConfig; import java.io.BufferedWriter; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -10,7 +11,6 @@ import java.nio.file.Paths; import java.nio.file.StandardCopyOption; import java.nio.file.StandardOpenOption; import java.util.List; - import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/MapResult.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/MapResult.java similarity index 79% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/MapResult.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/MapResult.java index 6eb248fc3..2287933e8 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/MapResult.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/MapResult.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.dictionary; +package com.tencent.supersonic.chat.core.knowledge; import java.io.Serializable; import lombok.Data; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/ModelInfoStat.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/ModelInfoStat.java similarity index 86% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/ModelInfoStat.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/ModelInfoStat.java index 1886e4856..57feeaf51 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/ModelInfoStat.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/ModelInfoStat.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.dictionary; +package com.tencent.supersonic.chat.core.knowledge; import java.io.Serializable; import lombok.Builder; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/MultiCustomDictionary.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/MultiCustomDictionary.java similarity index 98% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/MultiCustomDictionary.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/MultiCustomDictionary.java index 8ddfd1a84..1240e7299 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/MultiCustomDictionary.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/MultiCustomDictionary.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.dictionary; +package com.tencent.supersonic.chat.core.knowledge; import static com.hankcs.hanlp.utility.Predefine.logger; @@ -15,8 +15,8 @@ import com.hankcs.hanlp.seg.common.Term; import com.hankcs.hanlp.utility.LexiconUtility; import com.hankcs.hanlp.utility.Predefine; import com.hankcs.hanlp.utility.TextUtility; -import com.tencent.supersonic.knowledge.service.SearchService; -import com.tencent.supersonic.knowledge.utils.HanlpHelper; +import com.tencent.supersonic.chat.core.knowledge.dictionary.DictionaryAttributeUtil; +import com.tencent.supersonic.chat.core.utils.HanlpHelper; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.DataOutputStream; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/SearchService.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/SearchService.java similarity index 87% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/SearchService.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/SearchService.java index 0367fca11..d118d5f5a 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/SearchService.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/SearchService.java @@ -1,17 +1,19 @@ -package com.tencent.supersonic.knowledge.service; +package com.tencent.supersonic.chat.core.knowledge; import com.hankcs.hanlp.collection.trie.bintrie.BaseNode; import com.hankcs.hanlp.collection.trie.bintrie.BinTrie; import com.hankcs.hanlp.corpus.tag.Nature; import com.hankcs.hanlp.dictionary.CoreDictionary; -import com.tencent.supersonic.knowledge.dictionary.DictWord; +import com.hankcs.hanlp.seg.common.Term; +import com.tencent.supersonic.chat.api.pojo.request.DimensionValueReq; +import com.tencent.supersonic.chat.core.knowledge.dictionary.DictionaryAttributeUtil; import com.tencent.supersonic.common.pojo.enums.DictWordType; -import com.tencent.supersonic.knowledge.dictionary.DictionaryAttributeUtil; -import com.tencent.supersonic.knowledge.dictionary.HanlpMapResult; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.PriorityQueue; import java.util.Set; import java.util.TreeMap; import java.util.TreeSet; @@ -156,5 +158,15 @@ public class SearchService { suffixTrie.remove(dictWord.getWord()); } } + + public static List getDimensionValue(DimensionValueReq dimensionValueReq) { + String nature = DictWordType.NATURE_SPILT + dimensionValueReq.getModelId() + DictWordType.NATURE_SPILT + + dimensionValueReq.getElementID(); + PriorityQueue terms = MultiCustomDictionary.NATURE_TO_VALUES.get(nature); + if (org.apache.commons.collections.CollectionUtils.isEmpty(terms)) { + return new ArrayList<>(); + } + return terms.stream().map(term -> term.getWord()).collect(Collectors.toList()); + } } diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/BaseWordBuilder.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/BaseWordBuilder.java similarity index 89% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/BaseWordBuilder.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/BaseWordBuilder.java index 768f02ada..590c04b9c 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/BaseWordBuilder.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/BaseWordBuilder.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.knowledge.dictionary.builder; +package com.tencent.supersonic.chat.core.knowledge.builder; import com.tencent.supersonic.chat.api.pojo.SchemaElement; -import com.tencent.supersonic.knowledge.dictionary.DictWord; +import com.tencent.supersonic.chat.core.knowledge.DictWord; import java.util.ArrayList; import java.util.List; import lombok.extern.slf4j.Slf4j; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/DimensionWordBuilder.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/DimensionWordBuilder.java similarity index 95% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/DimensionWordBuilder.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/DimensionWordBuilder.java index 3046181ac..9d1bd08bf 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/DimensionWordBuilder.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/DimensionWordBuilder.java @@ -1,13 +1,11 @@ -package com.tencent.supersonic.knowledge.dictionary.builder; +package com.tencent.supersonic.chat.core.knowledge.builder; import com.google.common.collect.Lists; - +import com.tencent.supersonic.chat.api.pojo.SchemaElement; +import com.tencent.supersonic.chat.core.knowledge.DictWord; +import com.tencent.supersonic.common.pojo.enums.DictWordType; import java.util.ArrayList; import java.util.List; - -import com.tencent.supersonic.chat.api.pojo.SchemaElement; -import com.tencent.supersonic.knowledge.dictionary.DictWord; -import com.tencent.supersonic.common.pojo.enums.DictWordType; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/EntityWordBuilder.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/EntityWordBuilder.java similarity index 91% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/EntityWordBuilder.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/EntityWordBuilder.java index f7f2e5ad1..0d5c14e12 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/EntityWordBuilder.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/EntityWordBuilder.java @@ -1,13 +1,12 @@ -package com.tencent.supersonic.knowledge.dictionary.builder; +package com.tencent.supersonic.chat.core.knowledge.builder; + import com.google.common.collect.Lists; - +import com.tencent.supersonic.chat.api.pojo.SchemaElement; +import com.tencent.supersonic.chat.core.knowledge.DictWord; +import com.tencent.supersonic.common.pojo.enums.DictWordType; import java.util.List; import java.util.Objects; - -import com.tencent.supersonic.chat.api.pojo.SchemaElement; -import com.tencent.supersonic.knowledge.dictionary.DictWord; -import com.tencent.supersonic.common.pojo.enums.DictWordType; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/MetricWordBuilder.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/MetricWordBuilder.java similarity index 94% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/MetricWordBuilder.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/MetricWordBuilder.java index d4e1827d5..591e20a52 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/MetricWordBuilder.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/MetricWordBuilder.java @@ -1,13 +1,11 @@ -package com.tencent.supersonic.knowledge.dictionary.builder; +package com.tencent.supersonic.chat.core.knowledge.builder; import com.google.common.collect.Lists; - +import com.tencent.supersonic.chat.api.pojo.SchemaElement; +import com.tencent.supersonic.chat.core.knowledge.DictWord; +import com.tencent.supersonic.common.pojo.enums.DictWordType; import java.util.ArrayList; import java.util.List; - -import com.tencent.supersonic.chat.api.pojo.SchemaElement; -import com.tencent.supersonic.knowledge.dictionary.DictWord; -import com.tencent.supersonic.common.pojo.enums.DictWordType; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/ModelWordBuilder.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/ModelWordBuilder.java similarity index 91% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/ModelWordBuilder.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/ModelWordBuilder.java index ad7da7371..1df55d78e 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/ModelWordBuilder.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/ModelWordBuilder.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.knowledge.dictionary.builder; +package com.tencent.supersonic.chat.core.knowledge.builder; import com.google.common.collect.Lists; import com.tencent.supersonic.chat.api.pojo.SchemaElement; +import com.tencent.supersonic.chat.core.knowledge.DictWord; import com.tencent.supersonic.common.pojo.enums.DictWordType; -import com.tencent.supersonic.knowledge.dictionary.DictWord; import java.util.List; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/ValueWordBuilder.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/ValueWordBuilder.java similarity index 91% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/ValueWordBuilder.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/ValueWordBuilder.java index 109b72b93..82ba3a0a2 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/ValueWordBuilder.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/ValueWordBuilder.java @@ -1,13 +1,12 @@ -package com.tencent.supersonic.knowledge.dictionary.builder; +package com.tencent.supersonic.chat.core.knowledge.builder; + import com.google.common.collect.Lists; - +import com.tencent.supersonic.chat.api.pojo.SchemaElement; +import com.tencent.supersonic.chat.core.knowledge.DictWord; +import com.tencent.supersonic.common.pojo.enums.DictWordType; import java.util.List; import java.util.Objects; - -import com.tencent.supersonic.chat.api.pojo.SchemaElement; -import com.tencent.supersonic.knowledge.dictionary.DictWord; -import com.tencent.supersonic.common.pojo.enums.DictWordType; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/WordBuilderFactory.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/WordBuilderFactory.java similarity index 92% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/WordBuilderFactory.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/WordBuilderFactory.java index eb8c12354..273b5f29c 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/dictionary/builder/WordBuilderFactory.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/builder/WordBuilderFactory.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.dictionary.builder; +package com.tencent.supersonic.chat.core.knowledge.builder; import com.tencent.supersonic.common.pojo.enums.DictWordType; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/BaseSemanticInterpreter.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/BaseSemanticInterpreter.java similarity index 95% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/BaseSemanticInterpreter.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/BaseSemanticInterpreter.java index 432b00a26..8b42787cf 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/BaseSemanticInterpreter.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/BaseSemanticInterpreter.java @@ -1,8 +1,7 @@ -package com.tencent.supersonic.knowledge.semantic; +package com.tencent.supersonic.chat.core.knowledge.semantic; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; -import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.ModelSchema; import com.tencent.supersonic.headless.api.response.ModelSchemaResp; import java.util.ArrayList; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/LocalSemanticInterpreter.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/LocalSemanticInterpreter.java similarity index 98% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/LocalSemanticInterpreter.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/LocalSemanticInterpreter.java index 4d8fa671c..bedc1f9ea 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/LocalSemanticInterpreter.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/LocalSemanticInterpreter.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.semantic; +package com.tencent.supersonic.chat.core.knowledge.semantic; import com.github.pagehelper.PageInfo; import com.tencent.supersonic.auth.api.authentication.pojo.User; @@ -24,13 +24,12 @@ import com.tencent.supersonic.headless.server.service.DimensionService; import com.tencent.supersonic.headless.server.service.MetricService; import com.tencent.supersonic.headless.server.service.QueryService; import com.tencent.supersonic.headless.server.service.SchemaService; +import java.util.HashMap; +import java.util.List; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import java.util.HashMap; -import java.util.List; - @Slf4j public class LocalSemanticInterpreter extends BaseSemanticInterpreter { diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/ModelSchemaBuilder.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/ModelSchemaBuilder.java similarity index 99% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/ModelSchemaBuilder.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/ModelSchemaBuilder.java index 51372183b..84dacec24 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/ModelSchemaBuilder.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/ModelSchemaBuilder.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.semantic; +package com.tencent.supersonic.chat.core.knowledge.semantic; import com.google.common.collect.Lists; import com.tencent.supersonic.chat.api.pojo.ModelSchema; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/RemoteSemanticInterpreter.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/RemoteSemanticInterpreter.java similarity index 99% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/RemoteSemanticInterpreter.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/RemoteSemanticInterpreter.java index f89f09e83..b408aece8 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/semantic/RemoteSemanticInterpreter.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/RemoteSemanticInterpreter.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.semantic; +package com.tencent.supersonic.chat.core.knowledge.semantic; import static com.tencent.supersonic.common.pojo.Constants.LIST_LOWER; import static com.tencent.supersonic.common.pojo.Constants.PAGESIZE_LOWER; @@ -11,6 +11,7 @@ import com.google.gson.Gson; import com.tencent.supersonic.auth.api.authentication.config.AuthenticationConfig; import com.tencent.supersonic.auth.api.authentication.constant.UserConstants; import com.tencent.supersonic.auth.api.authentication.pojo.User; +import com.tencent.supersonic.chat.core.config.DefaultSemanticConfig; import com.tencent.supersonic.common.pojo.ResultData; import com.tencent.supersonic.common.pojo.enums.AuthType; import com.tencent.supersonic.common.pojo.enums.ReturnCode; diff --git a/chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticInterpreter.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/SemanticInterpreter.java similarity index 97% rename from chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticInterpreter.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/SemanticInterpreter.java index bdc398271..c9bd7a244 100644 --- a/chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticInterpreter.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/knowledge/semantic/SemanticInterpreter.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.api.component; +package com.tencent.supersonic.chat.core.knowledge.semantic; import com.github.pagehelper.PageInfo; import com.tencent.supersonic.auth.api.authentication.pojo.User; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/BaseMapper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/BaseMapper.java similarity index 88% rename from chat/core/src/main/java/com/tencent/supersonic/chat/mapper/BaseMapper.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/BaseMapper.java index fe6fe3393..bac2c235f 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/BaseMapper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/BaseMapper.java @@ -1,14 +1,12 @@ -package com.tencent.supersonic.chat.mapper; +package com.tencent.supersonic.chat.core.mapper; -import com.tencent.supersonic.chat.api.component.SchemaMapper; import com.tencent.supersonic.chat.api.pojo.ModelSchema; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; import com.tencent.supersonic.chat.api.pojo.SchemaMapInfo; -import com.tencent.supersonic.chat.service.SemanticService; -import com.tencent.supersonic.common.util.ContextUtils; +import com.tencent.supersonic.chat.api.pojo.SemanticSchema; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -68,10 +66,10 @@ public abstract class BaseMapper implements SchemaMapper { } } - public SchemaElement getSchemaElement(Long modelId, SchemaElementType elementType, Long elementID) { + public SchemaElement getSchemaElement(Long modelId, SchemaElementType elementType, Long elementID, + SemanticSchema semanticSchema) { SchemaElement element = new SchemaElement(); - SemanticService schemaService = ContextUtils.getBean(SemanticService.class); - ModelSchema modelSchema = schemaService.getModelSchema(modelId); + ModelSchema modelSchema = semanticSchema.getModelSchemaMap().get(modelId); if (Objects.isNull(modelSchema)) { return null; } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/BaseMatchStrategy.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/BaseMatchStrategy.java similarity index 96% rename from chat/core/src/main/java/com/tencent/supersonic/chat/mapper/BaseMatchStrategy.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/BaseMatchStrategy.java index 7d0873738..d2c6e0ca6 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/BaseMatchStrategy.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/BaseMatchStrategy.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.chat.mapper; +package com.tencent.supersonic.chat.core.mapper; import com.hankcs.hanlp.seg.common.Term; -import com.tencent.supersonic.chat.api.pojo.QueryContext; -import com.tencent.supersonic.knowledge.utils.NatureHelper; +import com.tencent.supersonic.chat.core.pojo.QueryContext; +import com.tencent.supersonic.chat.core.utils.NatureHelper; import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; @@ -102,7 +102,7 @@ public abstract class BaseMatchStrategy implements MatchStrategy { } public List getMatches(QueryContext queryContext, List terms) { - Set detectModelIds = mapperHelper.getModelIds(queryContext.getRequest()); + Set detectModelIds = mapperHelper.getModelIds(queryContext.getRequest(), queryContext.getAgent()); terms = filterByModelIds(terms, detectModelIds); Map> matchResult = match(queryContext, terms, detectModelIds); List matches = new ArrayList<>(); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/DatabaseMatchStrategy.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/DatabaseMatchStrategy.java similarity index 88% rename from chat/core/src/main/java/com/tencent/supersonic/chat/mapper/DatabaseMatchStrategy.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/DatabaseMatchStrategy.java index fa30547cc..7d35b1a81 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/DatabaseMatchStrategy.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/DatabaseMatchStrategy.java @@ -1,13 +1,12 @@ -package com.tencent.supersonic.chat.mapper; +package com.tencent.supersonic.chat.core.mapper; import com.hankcs.hanlp.seg.common.Term; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; -import com.tencent.supersonic.chat.config.OptimizationConfig; +import com.tencent.supersonic.chat.core.config.OptimizationConfig; +import com.tencent.supersonic.chat.core.knowledge.DatabaseMapResult; import com.tencent.supersonic.common.pojo.Constants; -import com.tencent.supersonic.knowledge.dictionary.DatabaseMapResult; -import com.tencent.supersonic.knowledge.service.SchemaService; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -33,14 +32,12 @@ public class DatabaseMatchStrategy extends BaseMatchStrategy private OptimizationConfig optimizationConfig; @Autowired private MapperHelper mapperHelper; - @Autowired - private SchemaService schemaService; private List allElements; @Override public Map> match(QueryContext queryContext, List terms, Set detectModelIds) { - this.allElements = getSchemaElements(); + this.allElements = getSchemaElements(queryContext); return super.match(queryContext, terms, detectModelIds); } @@ -62,7 +59,7 @@ public class DatabaseMatchStrategy extends BaseMatchStrategy if (StringUtils.isBlank(detectSegment)) { return; } - Set modelIds = mapperHelper.getModelIds(queryContext.getRequest()); + Set modelIds = mapperHelper.getModelIds(queryContext.getRequest(), queryContext.getAgent()); Double metricDimensionThresholdConfig = getThreshold(queryContext); @@ -90,10 +87,10 @@ public class DatabaseMatchStrategy extends BaseMatchStrategy } } - private List getSchemaElements() { + private List getSchemaElements(QueryContext queryContext) { List allElements = new ArrayList<>(); - allElements.addAll(schemaService.getSemanticSchema().getDimensions()); - allElements.addAll(schemaService.getSemanticSchema().getMetrics()); + allElements.addAll(queryContext.getSemanticSchema().getDimensions()); + allElements.addAll(queryContext.getSemanticSchema().getMetrics()); return allElements; } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/EmbeddingMapper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/EmbeddingMapper.java similarity index 85% rename from chat/core/src/main/java/com/tencent/supersonic/chat/mapper/EmbeddingMapper.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/EmbeddingMapper.java index 06da3f81f..20ad96afb 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/EmbeddingMapper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/EmbeddingMapper.java @@ -1,15 +1,15 @@ -package com.tencent.supersonic.chat.mapper; +package com.tencent.supersonic.chat.core.mapper; import com.alibaba.fastjson.JSONObject; import com.hankcs.hanlp.seg.common.Term; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; +import com.tencent.supersonic.chat.core.knowledge.EmbeddingResult; +import com.tencent.supersonic.chat.core.knowledge.builder.BaseWordBuilder; +import com.tencent.supersonic.chat.core.utils.HanlpHelper; import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.embedding.Retrieval; -import com.tencent.supersonic.knowledge.dictionary.EmbeddingResult; -import com.tencent.supersonic.knowledge.dictionary.builder.BaseWordBuilder; -import com.tencent.supersonic.knowledge.utils.HanlpHelper; import java.util.List; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -43,7 +43,8 @@ public class EmbeddingMapper extends BaseMapper { continue; } long modelId = Long.parseLong(modelIdStr); - schemaElement = getSchemaElement(modelId, schemaElement.getType(), elementId); + schemaElement = getSchemaElement(modelId, schemaElement.getType(), elementId, + queryContext.getSemanticSchema()); if (schemaElement == null) { continue; } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/EmbeddingMatchStrategy.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/EmbeddingMatchStrategy.java similarity index 93% rename from chat/core/src/main/java/com/tencent/supersonic/chat/mapper/EmbeddingMatchStrategy.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/EmbeddingMatchStrategy.java index c4f9f9af8..1c0b13979 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/EmbeddingMatchStrategy.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/EmbeddingMatchStrategy.java @@ -1,28 +1,28 @@ -package com.tencent.supersonic.chat.mapper; +package com.tencent.supersonic.chat.core.mapper; import com.google.common.collect.Lists; -import com.tencent.supersonic.chat.api.pojo.QueryContext; -import com.tencent.supersonic.chat.config.OptimizationConfig; +import com.tencent.supersonic.chat.core.config.OptimizationConfig; +import com.tencent.supersonic.chat.core.knowledge.EmbeddingResult; +import com.tencent.supersonic.chat.core.pojo.QueryContext; +import com.tencent.supersonic.common.config.EmbeddingConfig; import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.util.ComponentFactory; import com.tencent.supersonic.common.util.embedding.Retrieval; import com.tencent.supersonic.common.util.embedding.RetrieveQuery; import com.tencent.supersonic.common.util.embedding.RetrieveQueryResult; import com.tencent.supersonic.common.util.embedding.S2EmbeddingStore; -import com.tencent.supersonic.headless.server.listener.MetaEmbeddingListener; -import com.tencent.supersonic.knowledge.dictionary.EmbeddingResult; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; /** * EmbeddingMatchStrategy uses vector database to perform @@ -35,6 +35,9 @@ public class EmbeddingMatchStrategy extends BaseMatchStrategy { @Autowired private OptimizationConfig optimizationConfig; + @Autowired + private EmbeddingConfig embeddingConfig; + private S2EmbeddingStore s2EmbeddingStore = ComponentFactory.getS2EmbeddingStore(); @Override @@ -86,7 +89,7 @@ public class EmbeddingMatchStrategy extends BaseMatchStrategy { .build(); // step2. retrieveQuery by detectSegment List retrieveQueryResults = s2EmbeddingStore.retrieveQuery( - MetaEmbeddingListener.COLLECTION_NAME, retrieveQuery, embeddingNumber); + embeddingConfig.getMetaCollectionName(), retrieveQuery, embeddingNumber); if (CollectionUtils.isEmpty(retrieveQueryResults)) { return; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/EntityMapper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/EntityMapper.java similarity index 86% rename from chat/core/src/main/java/com/tencent/supersonic/chat/mapper/EntityMapper.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/EntityMapper.java index 22f7f07d5..bb3e1ed75 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/EntityMapper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/EntityMapper.java @@ -1,21 +1,19 @@ -package com.tencent.supersonic.chat.mapper; +package com.tencent.supersonic.chat.core.mapper; import com.tencent.supersonic.chat.api.pojo.ModelSchema; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; import com.tencent.supersonic.chat.api.pojo.SchemaMapInfo; -import com.tencent.supersonic.chat.service.SemanticService; -import com.tencent.supersonic.common.util.ContextUtils; +import com.tencent.supersonic.chat.api.pojo.SemanticSchema; +import java.util.List; +import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.util.CollectionUtils; -import java.util.List; -import java.util.stream.Collectors; - /** * A mapper capable of converting the VALUE of entity dimension values into ID types. */ @@ -30,7 +28,7 @@ public class EntityMapper extends BaseMapper { if (CollectionUtils.isEmpty(schemaElementMatchList)) { continue; } - SchemaElement entity = getEntity(modelId); + SchemaElement entity = getEntity(modelId, queryContext); if (entity == null || entity.getId() == null) { continue; } @@ -66,9 +64,9 @@ public class EntityMapper extends BaseMapper { return false; } - private SchemaElement getEntity(Long modelId) { - SemanticService semanticService = ContextUtils.getBean(SemanticService.class); - ModelSchema modelSchema = semanticService.getModelSchema(modelId); + private SchemaElement getEntity(Long modelId, QueryContext queryContext) { + SemanticSchema semanticSchema = queryContext.getSemanticSchema(); + ModelSchema modelSchema = semanticSchema.getModelSchemaMap().get(modelId); if (modelSchema != null && modelSchema.getEntity() != null) { return modelSchema.getEntity(); } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/HanlpDictMatchStrategy.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/HanlpDictMatchStrategy.java similarity index 92% rename from chat/core/src/main/java/com/tencent/supersonic/chat/mapper/HanlpDictMatchStrategy.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/HanlpDictMatchStrategy.java index 8c36490a5..17873aed6 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/HanlpDictMatchStrategy.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/HanlpDictMatchStrategy.java @@ -1,12 +1,12 @@ -package com.tencent.supersonic.chat.mapper; +package com.tencent.supersonic.chat.core.mapper; import com.hankcs.hanlp.seg.common.Term; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; -import com.tencent.supersonic.chat.config.OptimizationConfig; +import com.tencent.supersonic.chat.core.config.OptimizationConfig; +import com.tencent.supersonic.chat.core.knowledge.HanlpMapResult; +import com.tencent.supersonic.chat.core.knowledge.SearchService; import com.tencent.supersonic.common.pojo.Constants; -import com.tencent.supersonic.knowledge.dictionary.HanlpMapResult; -import com.tencent.supersonic.knowledge.service.SearchService; import java.util.HashMap; import java.util.LinkedHashSet; import java.util.List; @@ -69,8 +69,7 @@ public class HanlpDictMatchStrategy extends BaseMatchStrategy { // step1. pre search Integer oneDetectionMaxSize = optimizationConfig.getOneDetectionMaxSize(); LinkedHashSet hanlpMapResults = SearchService.prefixSearch(detectSegment, oneDetectionMaxSize, - agentId, - detectModelIds).stream().collect(Collectors.toCollection(LinkedHashSet::new)); + agentId, detectModelIds).stream().collect(Collectors.toCollection(LinkedHashSet::new)); // step2. suffix search LinkedHashSet suffixHanlpMapResults = SearchService.suffixSearch(detectSegment, oneDetectionMaxSize, agentId, detectModelIds).stream() diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/KeywordMapper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/KeywordMapper.java similarity index 89% rename from chat/core/src/main/java/com/tencent/supersonic/chat/mapper/KeywordMapper.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/KeywordMapper.java index 7c0a384dd..3b03d32a6 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/KeywordMapper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/KeywordMapper.java @@ -1,16 +1,16 @@ -package com.tencent.supersonic.chat.mapper; +package com.tencent.supersonic.chat.core.mapper; import com.hankcs.hanlp.seg.common.Term; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; import com.tencent.supersonic.chat.api.pojo.SchemaMapInfo; +import com.tencent.supersonic.chat.core.knowledge.DatabaseMapResult; +import com.tencent.supersonic.chat.core.knowledge.HanlpMapResult; +import com.tencent.supersonic.chat.core.utils.HanlpHelper; +import com.tencent.supersonic.chat.core.utils.NatureHelper; import com.tencent.supersonic.common.util.ContextUtils; -import com.tencent.supersonic.knowledge.dictionary.DatabaseMapResult; -import com.tencent.supersonic.knowledge.dictionary.HanlpMapResult; -import com.tencent.supersonic.knowledge.utils.HanlpHelper; -import com.tencent.supersonic.knowledge.utils.NatureHelper; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -35,7 +35,7 @@ public class KeywordMapper extends BaseMapper { HanlpDictMatchStrategy hanlpMatchStrategy = ContextUtils.getBean(HanlpDictMatchStrategy.class); List hanlpMapResults = hanlpMatchStrategy.getMatches(queryContext, terms); - convertHanlpMapResultToMapInfo(hanlpMapResults, queryContext.getMapInfo(), terms); + convertHanlpMapResultToMapInfo(hanlpMapResults, queryContext, terms); //2.database Match DatabaseMatchStrategy databaseMatchStrategy = ContextUtils.getBean(DatabaseMatchStrategy.class); @@ -44,7 +44,7 @@ public class KeywordMapper extends BaseMapper { convertDatabaseMapResultToMapInfo(queryContext, databaseResults); } - private void convertHanlpMapResultToMapInfo(List mapResults, SchemaMapInfo schemaMap, + private void convertHanlpMapResultToMapInfo(List mapResults, QueryContext queryContext, List terms) { if (CollectionUtils.isEmpty(mapResults)) { return; @@ -65,7 +65,8 @@ public class KeywordMapper extends BaseMapper { continue; } Long elementID = NatureHelper.getElementID(nature); - SchemaElement element = getSchemaElement(modelId, elementType, elementID); + SchemaElement element = getSchemaElement(modelId, elementType, elementID, + queryContext.getSemanticSchema()); if (element == null) { continue; } @@ -81,7 +82,7 @@ public class KeywordMapper extends BaseMapper { .detectWord(hanlpMapResult.getDetectWord()) .build(); - addToSchemaMap(schemaMap, modelId, schemaElementMatch); + addToSchemaMap(queryContext.getMapInfo(), modelId, schemaElementMatch); } } } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/MapperHelper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/MapperHelper.java similarity index 85% rename from chat/core/src/main/java/com/tencent/supersonic/chat/mapper/MapperHelper.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/MapperHelper.java index ad7773386..d297f22d7 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/MapperHelper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/MapperHelper.java @@ -1,12 +1,11 @@ -package com.tencent.supersonic.chat.mapper; +package com.tencent.supersonic.chat.core.mapper; import com.hankcs.hanlp.algorithm.EditDistance; import com.hankcs.hanlp.seg.common.Term; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; -import com.tencent.supersonic.chat.config.OptimizationConfig; -import com.tencent.supersonic.chat.service.AgentService; -import com.tencent.supersonic.common.util.ContextUtils; -import com.tencent.supersonic.knowledge.utils.NatureHelper; +import com.tencent.supersonic.chat.core.agent.Agent; +import com.tencent.supersonic.chat.core.config.OptimizationConfig; +import com.tencent.supersonic.chat.core.utils.NatureHelper; import java.util.Comparator; import java.util.HashSet; import java.util.List; @@ -83,15 +82,12 @@ public class MapperHelper { detectSegment.length()); } - public Set getModelIds(QueryReq request) { + public Set getModelIds(QueryReq request, Agent agent) { Long modelId = request.getModelId(); - - AgentService agentService = ContextUtils.getBean(AgentService.class); - - Set detectModelIds = agentService.getModelIds(request.getAgentId(), null); + Set detectModelIds = agent.getModelIds(null); //contains all - if (agentService.containsAllModel(detectModelIds)) { + if (agent.containsAllModel(detectModelIds)) { if (Objects.nonNull(modelId) && modelId > 0) { Set result = new HashSet<>(); result.add(modelId); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/MatchStrategy.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/MatchStrategy.java similarity index 77% rename from chat/core/src/main/java/com/tencent/supersonic/chat/mapper/MatchStrategy.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/MatchStrategy.java index bada43a64..ff1374b75 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/MatchStrategy.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/MatchStrategy.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.chat.mapper; +package com.tencent.supersonic.chat.core.mapper; import com.hankcs.hanlp.seg.common.Term; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import java.util.List; import java.util.Map; import java.util.Set; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/MatchText.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/MatchText.java similarity index 93% rename from chat/core/src/main/java/com/tencent/supersonic/chat/mapper/MatchText.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/MatchText.java index fe5d8bdca..93487b682 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/MatchText.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/MatchText.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.mapper; +package com.tencent.supersonic.chat.core.mapper; import java.util.Objects; import lombok.Builder; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/ModelClusterMapper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/ModelClusterMapper.java similarity index 78% rename from chat/core/src/main/java/com/tencent/supersonic/chat/mapper/ModelClusterMapper.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/ModelClusterMapper.java index f00abbb21..a67a4f0f0 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/ModelClusterMapper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/ModelClusterMapper.java @@ -1,16 +1,12 @@ -package com.tencent.supersonic.chat.mapper; +package com.tencent.supersonic.chat.core.mapper; -import com.tencent.supersonic.chat.api.component.SchemaMapper; -import com.tencent.supersonic.chat.api.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; import com.tencent.supersonic.chat.api.pojo.SchemaMapInfo; import com.tencent.supersonic.chat.api.pojo.SchemaModelClusterMapInfo; import com.tencent.supersonic.chat.api.pojo.SemanticSchema; -import com.tencent.supersonic.chat.utils.ModelClusterBuilder; +import com.tencent.supersonic.chat.core.pojo.QueryContext; +import com.tencent.supersonic.chat.core.utils.ModelClusterBuilder; import com.tencent.supersonic.common.pojo.ModelCluster; -import com.tencent.supersonic.common.util.ContextUtils; -import com.tencent.supersonic.knowledge.service.SchemaService; - import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -27,8 +23,7 @@ public class ModelClusterMapper implements SchemaMapper { @Override public void map(QueryContext queryContext) { - SchemaService schemaService = ContextUtils.getBean(SchemaService.class); - SemanticSchema semanticSchema = schemaService.getSemanticSchema(); + SemanticSchema semanticSchema = queryContext.getSemanticSchema(); SchemaMapInfo schemaMapInfo = queryContext.getMapInfo(); List modelClusters = buildModelClusterMatched(schemaMapInfo, semanticSchema); Map> modelClusterElementMatches = new HashMap<>(); @@ -46,7 +41,7 @@ public class ModelClusterMapper implements SchemaMapper { } private List buildModelClusterMatched(SchemaMapInfo schemaMapInfo, - SemanticSchema semanticSchema) { + SemanticSchema semanticSchema) { Set matchedModels = schemaMapInfo.getMatchedModels(); List modelClusters = ModelClusterBuilder.buildModelClusters(semanticSchema); return modelClusters.stream().map(ModelCluster::getModelIds).peek(modelCluster -> { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/ModelWithSemanticType.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/ModelWithSemanticType.java similarity index 90% rename from chat/core/src/main/java/com/tencent/supersonic/chat/mapper/ModelWithSemanticType.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/ModelWithSemanticType.java index 5499fe2e9..102d48e4b 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/ModelWithSemanticType.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/ModelWithSemanticType.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.mapper; +package com.tencent.supersonic.chat.core.mapper; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; import java.io.Serializable; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/QueryFilterMapper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/QueryFilterMapper.java similarity index 94% rename from chat/core/src/main/java/com/tencent/supersonic/chat/mapper/QueryFilterMapper.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/QueryFilterMapper.java index 114a23a72..7c91c39b0 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/QueryFilterMapper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/QueryFilterMapper.java @@ -1,22 +1,21 @@ -package com.tencent.supersonic.chat.mapper; +package com.tencent.supersonic.chat.core.mapper; import com.google.common.collect.Lists; -import com.tencent.supersonic.chat.api.component.SchemaMapper; -import com.tencent.supersonic.chat.api.pojo.QueryContext; -import com.tencent.supersonic.chat.api.pojo.SchemaMapInfo; -import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElement; +import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; +import com.tencent.supersonic.chat.api.pojo.SchemaMapInfo; import com.tencent.supersonic.chat.api.pojo.request.QueryFilter; import com.tencent.supersonic.chat.api.pojo.request.QueryFilters; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; +import com.tencent.supersonic.chat.core.knowledge.builder.BaseWordBuilder; import com.tencent.supersonic.common.pojo.Constants; -import com.tencent.supersonic.knowledge.dictionary.builder.BaseWordBuilder; -import lombok.extern.slf4j.Slf4j; -import org.springframework.util.CollectionUtils; import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.CollectionUtils; @Slf4j public class QueryFilterMapper implements SchemaMapper { diff --git a/chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SchemaMapper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/SchemaMapper.java similarity index 70% rename from chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SchemaMapper.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/SchemaMapper.java index 63b47b01c..e31300496 100644 --- a/chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SchemaMapper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/SchemaMapper.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.chat.api.component; +package com.tencent.supersonic.chat.core.mapper; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; /** * A schema mapper identifies references to schema elements(metrics/dimensions/entities/values) diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/SearchMatchStrategy.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/SearchMatchStrategy.java similarity index 94% rename from chat/core/src/main/java/com/tencent/supersonic/chat/mapper/SearchMatchStrategy.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/SearchMatchStrategy.java index 9cef830c5..f5937e35d 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/mapper/SearchMatchStrategy.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/mapper/SearchMatchStrategy.java @@ -1,12 +1,12 @@ -package com.tencent.supersonic.chat.mapper; +package com.tencent.supersonic.chat.core.mapper; import com.google.common.collect.Lists; import com.hankcs.hanlp.seg.common.Term; -import com.tencent.supersonic.chat.api.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; +import com.tencent.supersonic.chat.core.knowledge.HanlpMapResult; +import com.tencent.supersonic.chat.core.knowledge.SearchService; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.common.pojo.enums.DictWordType; -import com.tencent.supersonic.knowledge.dictionary.HanlpMapResult; -import com.tencent.supersonic.knowledge.service.SearchService; import java.util.List; import java.util.Map; import java.util.Objects; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/JavaLLMProxy.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/JavaLLMProxy.java similarity index 72% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/JavaLLMProxy.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/JavaLLMProxy.java index 10d093f10..8019fa741 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/JavaLLMProxy.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/JavaLLMProxy.java @@ -1,15 +1,15 @@ -package com.tencent.supersonic.chat.parser; +package com.tencent.supersonic.chat.core.parser; -import com.tencent.supersonic.chat.api.pojo.QueryContext; -import com.tencent.supersonic.chat.parser.plugin.function.FunctionPromptGenerator; -import com.tencent.supersonic.chat.parser.plugin.function.FunctionReq; -import com.tencent.supersonic.chat.parser.plugin.function.FunctionResp; -import com.tencent.supersonic.chat.parser.sql.llm.OutputFormat; -import com.tencent.supersonic.chat.parser.sql.llm.SqlGeneration; -import com.tencent.supersonic.chat.parser.sql.llm.SqlGenerationFactory; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq.SqlGenerationMode; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMResp; +import com.tencent.supersonic.chat.core.pojo.QueryContext; +import com.tencent.supersonic.chat.core.parser.plugin.function.FunctionPromptGenerator; +import com.tencent.supersonic.chat.core.parser.sql.llm.OutputFormat; +import com.tencent.supersonic.chat.core.parser.sql.llm.SqlGeneration; +import com.tencent.supersonic.chat.core.parser.sql.llm.SqlGenerationFactory; +import com.tencent.supersonic.chat.core.parser.plugin.function.FunctionReq; +import com.tencent.supersonic.chat.core.parser.plugin.function.FunctionResp; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq.SqlGenerationMode; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMResp; import com.tencent.supersonic.common.util.ContextUtils; import dev.langchain4j.model.chat.ChatLanguageModel; import java.util.Objects; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/LLMProxy.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/LLMProxy.java new file mode 100644 index 000000000..5f8049200 --- /dev/null +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/LLMProxy.java @@ -0,0 +1,22 @@ +package com.tencent.supersonic.chat.core.parser; + +import com.tencent.supersonic.chat.core.pojo.QueryContext; +import com.tencent.supersonic.chat.core.parser.plugin.function.FunctionReq; +import com.tencent.supersonic.chat.core.parser.plugin.function.FunctionResp; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMResp; + +/** + * LLMProxy encapsulates functions performed by LLMs so that multiple + * orchestration frameworks (e.g. LangChain in python, LangChain4j in java) + * could be used. + */ +public interface LLMProxy { + + boolean isSkip(QueryContext queryContext); + + LLMResp query2sql(LLMReq llmReq, String modelClusterKey); + + FunctionResp requestFunction(FunctionReq functionReq); + +} diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/PythonLLMProxy.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/PythonLLMProxy.java similarity index 87% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/PythonLLMProxy.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/PythonLLMProxy.java index cc75215c6..a420f8bc5 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/PythonLLMProxy.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/PythonLLMProxy.java @@ -1,14 +1,14 @@ -package com.tencent.supersonic.chat.parser; +package com.tencent.supersonic.chat.core.parser; import com.alibaba.fastjson.JSON; -import com.tencent.supersonic.chat.api.pojo.QueryContext; -import com.tencent.supersonic.chat.config.LLMParserConfig; -import com.tencent.supersonic.chat.parser.plugin.function.FunctionCallConfig; -import com.tencent.supersonic.chat.parser.plugin.function.FunctionReq; -import com.tencent.supersonic.chat.parser.plugin.function.FunctionResp; -import com.tencent.supersonic.chat.parser.sql.llm.OutputFormat; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMResp; +import com.tencent.supersonic.chat.core.pojo.QueryContext; +import com.tencent.supersonic.chat.core.config.LLMParserConfig; +import com.tencent.supersonic.chat.core.parser.sql.llm.OutputFormat; +import com.tencent.supersonic.chat.core.parser.plugin.function.FunctionCallConfig; +import com.tencent.supersonic.chat.core.parser.plugin.function.FunctionReq; +import com.tencent.supersonic.chat.core.parser.plugin.function.FunctionResp; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMResp; import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.JsonUtil; import java.net.URI; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/QueryTypeParser.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/QueryTypeParser.java similarity index 76% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/QueryTypeParser.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/QueryTypeParser.java index 95ba30cf3..fc55514fd 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/QueryTypeParser.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/QueryTypeParser.java @@ -1,30 +1,25 @@ -package com.tencent.supersonic.chat.parser; +package com.tencent.supersonic.chat.core.parser; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.api.component.SemanticParser; -import com.tencent.supersonic.chat.api.component.SemanticQuery; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; import com.tencent.supersonic.chat.api.pojo.SemanticSchema; import com.tencent.supersonic.chat.api.pojo.response.SqlInfo; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMSqlQuery; -import com.tencent.supersonic.chat.query.rule.RuleSemanticQuery; -import com.tencent.supersonic.chat.service.SemanticService; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; +import com.tencent.supersonic.chat.core.query.SemanticQuery; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMSqlQuery; +import com.tencent.supersonic.chat.core.query.rule.RuleSemanticQuery; import com.tencent.supersonic.common.pojo.enums.QueryType; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; -import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.jsqlparser.SqlParserSelectHelper; -import com.tencent.supersonic.knowledge.service.SchemaService; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; - import java.util.List; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; /** * QueryTypeParser resolves query type as either METRIC or TAG, or ID. @@ -40,14 +35,14 @@ public class QueryTypeParser implements SemanticParser { for (SemanticQuery semanticQuery : candidateQueries) { // 1.init S2SQL - semanticQuery.initS2Sql(user); + semanticQuery.initS2Sql(queryContext.getSemanticSchema(), user); // 2.set queryType - QueryType queryType = getQueryType(semanticQuery); + QueryType queryType = getQueryType(queryContext, semanticQuery); semanticQuery.getParseInfo().setQueryType(queryType); } } - private QueryType getQueryType(SemanticQuery semanticQuery) { + private QueryType getQueryType(QueryContext queryContext, SemanticQuery semanticQuery) { SemanticParseInfo parseInfo = semanticQuery.getParseInfo(); SqlInfo sqlInfo = parseInfo.getSqlInfo(); if (Objects.isNull(sqlInfo) || StringUtils.isBlank(sqlInfo.getS2SQL())) { @@ -55,13 +50,13 @@ public class QueryTypeParser implements SemanticParser { } //1. entity queryType Set modelIds = parseInfo.getModel().getModelIds(); + SemanticSchema semanticSchema = queryContext.getSemanticSchema(); if (semanticQuery instanceof RuleSemanticQuery || semanticQuery instanceof LLMSqlQuery) { //If all the fields in the SELECT statement are of tag type. List whereFields = SqlParserSelectHelper.getWhereFields(sqlInfo.getS2SQL()) .stream().filter(field -> !TimeDimensionEnum.containsTimeDimension(field)) .collect(Collectors.toList()); - SemanticService semanticService = ContextUtils.getBean(SemanticService.class); - SemanticSchema semanticSchema = semanticService.getSemanticSchema(); + if (CollectionUtils.isNotEmpty(whereFields)) { Set ids = semanticSchema.getEntities(modelIds).stream().map(SchemaElement::getName) .collect(Collectors.toSet()); @@ -77,7 +72,6 @@ public class QueryTypeParser implements SemanticParser { } //2. metric queryType List selectFields = SqlParserSelectHelper.getSelectFields(sqlInfo.getS2SQL()); - SemanticSchema semanticSchema = ContextUtils.getBean(SchemaService.class).getSemanticSchema(); List metrics = semanticSchema.getMetrics(modelIds); if (CollectionUtils.isNotEmpty(metrics)) { Set metricNameSet = metrics.stream().map(SchemaElement::getName).collect(Collectors.toSet()); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/SatisfactionChecker.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/SatisfactionChecker.java similarity index 84% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/SatisfactionChecker.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/SatisfactionChecker.java index 49cfdf145..c42ee6291 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/SatisfactionChecker.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/SatisfactionChecker.java @@ -1,11 +1,11 @@ -package com.tencent.supersonic.chat.parser; +package com.tencent.supersonic.chat.core.parser; -import com.tencent.supersonic.chat.api.component.SemanticQuery; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.query.SemanticQuery; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; -import com.tencent.supersonic.chat.config.OptimizationConfig; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMSqlQuery; +import com.tencent.supersonic.chat.core.config.OptimizationConfig; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMSqlQuery; import com.tencent.supersonic.common.util.ContextUtils; import lombok.extern.slf4j.Slf4j; diff --git a/chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticParser.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/SemanticParser.java similarity index 66% rename from chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticParser.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/SemanticParser.java index c928c41a2..bdb309bc1 100644 --- a/chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticParser.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/SemanticParser.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.chat.api.component; +package com.tencent.supersonic.chat.core.parser; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; +import com.tencent.supersonic.chat.core.pojo.ChatContext; /** * A semantic parser understands user queries and extracts semantic information. diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/ParseMode.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/ParseMode.java similarity index 55% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/ParseMode.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/ParseMode.java index e8c51b47f..e5b339cc4 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/ParseMode.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/ParseMode.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.parser.plugin; +package com.tencent.supersonic.chat.core.parser.plugin; public enum ParseMode { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/PluginParser.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/PluginParser.java similarity index 88% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/PluginParser.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/PluginParser.java index 51d0109e5..4215a9eec 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/PluginParser.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/PluginParser.java @@ -1,22 +1,22 @@ -package com.tencent.supersonic.chat.parser.plugin; +package com.tencent.supersonic.chat.core.parser.plugin; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import com.tencent.supersonic.chat.api.component.SemanticParser; -import com.tencent.supersonic.chat.api.component.SemanticQuery; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.parser.SemanticParser; +import com.tencent.supersonic.chat.core.query.SemanticQuery; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; import com.tencent.supersonic.chat.api.pojo.request.QueryFilter; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; -import com.tencent.supersonic.chat.plugin.Plugin; -import com.tencent.supersonic.chat.plugin.PluginManager; -import com.tencent.supersonic.chat.plugin.PluginParseResult; -import com.tencent.supersonic.chat.plugin.PluginRecallResult; -import com.tencent.supersonic.chat.query.QueryManager; -import com.tencent.supersonic.chat.query.plugin.PluginSemanticQuery; +import com.tencent.supersonic.chat.core.plugin.Plugin; +import com.tencent.supersonic.chat.core.plugin.PluginManager; +import com.tencent.supersonic.chat.core.plugin.PluginParseResult; +import com.tencent.supersonic.chat.core.plugin.PluginRecallResult; +import com.tencent.supersonic.chat.core.query.plugin.PluginSemanticQuery; +import com.tencent.supersonic.chat.core.query.QueryManager; import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.pojo.ModelCluster; import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum; @@ -75,7 +75,7 @@ public abstract class PluginParser implements SemanticParser { } protected List getPluginList(QueryContext queryContext) { - return PluginManager.getPluginAgentCanSupport(queryContext.getRequest().getAgentId()); + return PluginManager.getPluginAgentCanSupport(queryContext); } protected SemanticParseInfo buildSemanticParseInfo(Long modelId, Plugin plugin, QueryReq queryReq, diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/embedding/EmbeddingRecallParser.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/embedding/EmbeddingRecallParser.java similarity index 86% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/embedding/EmbeddingRecallParser.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/embedding/EmbeddingRecallParser.java index c5fd712c7..743ab2d7e 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/embedding/EmbeddingRecallParser.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/embedding/EmbeddingRecallParser.java @@ -1,14 +1,14 @@ -package com.tencent.supersonic.chat.parser.plugin.embedding; +package com.tencent.supersonic.chat.core.parser.plugin.embedding; import com.google.common.collect.Lists; -import com.tencent.supersonic.chat.api.pojo.QueryContext; -import com.tencent.supersonic.chat.parser.PythonLLMProxy; -import com.tencent.supersonic.chat.parser.plugin.ParseMode; -import com.tencent.supersonic.chat.parser.plugin.PluginParser; -import com.tencent.supersonic.chat.plugin.Plugin; -import com.tencent.supersonic.chat.plugin.PluginManager; -import com.tencent.supersonic.chat.plugin.PluginRecallResult; -import com.tencent.supersonic.chat.utils.ComponentFactory; +import com.tencent.supersonic.chat.core.pojo.QueryContext; +import com.tencent.supersonic.chat.core.plugin.Plugin; +import com.tencent.supersonic.chat.core.plugin.PluginManager; +import com.tencent.supersonic.chat.core.plugin.PluginRecallResult; +import com.tencent.supersonic.chat.core.utils.ComponentFactory; +import com.tencent.supersonic.chat.core.parser.PythonLLMProxy; +import com.tencent.supersonic.chat.core.parser.plugin.ParseMode; +import com.tencent.supersonic.chat.core.parser.plugin.PluginParser; import com.tencent.supersonic.common.config.EmbeddingConfig; import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.embedding.Retrieval; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/embedding/RecallRetrieval.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/embedding/RecallRetrieval.java similarity index 75% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/embedding/RecallRetrieval.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/embedding/RecallRetrieval.java index 3a61970e9..aaf57972b 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/embedding/RecallRetrieval.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/embedding/RecallRetrieval.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.parser.plugin.embedding; +package com.tencent.supersonic.chat.core.parser.plugin.embedding; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/embedding/RecallRetrievalResp.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/embedding/RecallRetrievalResp.java similarity index 71% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/embedding/RecallRetrievalResp.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/embedding/RecallRetrievalResp.java index 2556be086..1cf812f8f 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/embedding/RecallRetrievalResp.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/embedding/RecallRetrievalResp.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.parser.plugin.embedding; +package com.tencent.supersonic.chat.core.parser.plugin.embedding; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionCallConfig.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/FunctionCallConfig.java similarity index 84% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionCallConfig.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/FunctionCallConfig.java index 3e6645133..1358d8604 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionCallConfig.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/FunctionCallConfig.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.parser.plugin.function; +package com.tencent.supersonic.chat.core.parser.plugin.function; import lombok.Data; import org.springframework.beans.factory.annotation.Value; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionCallParser.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/FunctionCallParser.java similarity index 83% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionCallParser.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/FunctionCallParser.java index f0a45a32d..671717093 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionCallParser.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/FunctionCallParser.java @@ -1,29 +1,26 @@ -package com.tencent.supersonic.chat.parser.plugin.function; +package com.tencent.supersonic.chat.core.parser.plugin.function; -import com.tencent.supersonic.chat.api.pojo.QueryContext; -import com.tencent.supersonic.chat.parser.PythonLLMProxy; -import com.tencent.supersonic.chat.parser.plugin.ParseMode; -import com.tencent.supersonic.chat.parser.plugin.PluginParser; -import com.tencent.supersonic.chat.plugin.Plugin; -import com.tencent.supersonic.chat.plugin.PluginManager; -import com.tencent.supersonic.chat.plugin.PluginParseConfig; -import com.tencent.supersonic.chat.plugin.PluginRecallResult; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMSqlQuery; -import com.tencent.supersonic.chat.service.PluginService; -import com.tencent.supersonic.chat.utils.ComponentFactory; +import com.tencent.supersonic.chat.core.parser.PythonLLMProxy; +import com.tencent.supersonic.chat.core.parser.plugin.ParseMode; +import com.tencent.supersonic.chat.core.parser.plugin.PluginParser; +import com.tencent.supersonic.chat.core.plugin.Plugin; +import com.tencent.supersonic.chat.core.plugin.PluginManager; +import com.tencent.supersonic.chat.core.plugin.PluginParseConfig; +import com.tencent.supersonic.chat.core.plugin.PluginRecallResult; +import com.tencent.supersonic.chat.core.pojo.QueryContext; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMSqlQuery; +import com.tencent.supersonic.chat.core.utils.ComponentFactory; import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.JsonUtil; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.Pair; import org.springframework.util.CollectionUtils; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; -import java.util.stream.Collectors; - /** * FunctionCallParser is an implementation of a recall plugin based on FunctionCall */ @@ -45,19 +42,17 @@ public class FunctionCallParser extends PluginParser { @Override public PluginRecallResult recallPlugin(QueryContext queryContext) { - PluginService pluginService = ContextUtils.getBean(PluginService.class); FunctionResp functionResp = functionCall(queryContext); if (skipFunction(functionResp)) { return null; } log.info("requestFunction result:{}", functionResp.getToolSelection()); String toolSelection = functionResp.getToolSelection(); - Optional pluginOptional = pluginService.getPluginByName(toolSelection); - if (!pluginOptional.isPresent()) { + Plugin plugin = queryContext.getNameToPlugin().get(toolSelection); + if (Objects.isNull(plugin)) { log.info("pluginOptional is not exist:{}, skip the parse", toolSelection); return null; } - Plugin plugin = pluginOptional.get(); plugin.setParseMode(ParseMode.FUNCTION_CALL); Pair> pluginResolveResult = PluginManager.resolve(plugin, queryContext); if (pluginResolveResult.getLeft()) { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionFiled.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/FunctionFiled.java similarity index 64% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionFiled.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/FunctionFiled.java index e1ba0c4f6..08c0c88d6 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionFiled.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/FunctionFiled.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.parser.plugin.function; +package com.tencent.supersonic.chat.core.parser.plugin.function; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionPromptGenerator.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/FunctionPromptGenerator.java similarity index 90% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionPromptGenerator.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/FunctionPromptGenerator.java index c1f9f5ed6..32d16a104 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionPromptGenerator.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/FunctionPromptGenerator.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.chat.parser.plugin.function; +package com.tencent.supersonic.chat.core.parser.plugin.function; -import com.tencent.supersonic.chat.parser.sql.llm.InputFormat; -import com.tencent.supersonic.chat.plugin.PluginParseConfig; +import com.tencent.supersonic.chat.core.parser.sql.llm.InputFormat; +import com.tencent.supersonic.chat.core.plugin.PluginParseConfig; import java.util.List; import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionReq.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/FunctionReq.java similarity index 60% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionReq.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/FunctionReq.java index a3d92813c..292ac3e9e 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionReq.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/FunctionReq.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.chat.parser.plugin.function; +package com.tencent.supersonic.chat.core.parser.plugin.function; +import com.tencent.supersonic.chat.core.plugin.PluginParseConfig; import java.util.List; -import com.tencent.supersonic.chat.plugin.PluginParseConfig; import lombok.Builder; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionResp.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/FunctionResp.java similarity index 59% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionResp.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/FunctionResp.java index 0501b6100..156abbfa1 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/FunctionResp.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/FunctionResp.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.parser.plugin.function; +package com.tencent.supersonic.chat.core.parser.plugin.function; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/Parameters.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/Parameters.java similarity index 79% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/Parameters.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/Parameters.java index 3d6d34f0a..e20a19870 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/plugin/function/Parameters.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/plugin/function/Parameters.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.parser.plugin.function; +package com.tencent.supersonic.chat.core.parser.plugin.function; import lombok.Data; import java.util.List; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/HeuristicModelResolver.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/HeuristicModelResolver.java similarity index 96% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/HeuristicModelResolver.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/HeuristicModelResolver.java index 07184d0cb..e83cb6a74 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/HeuristicModelResolver.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/HeuristicModelResolver.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.chat.parser.sql.llm; +package com.tencent.supersonic.chat.core.parser.sql.llm; -import com.tencent.supersonic.chat.api.component.SemanticQuery; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.query.SemanticQuery; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; import com.tencent.supersonic.chat.api.pojo.SchemaModelClusterMapInfo; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/InputFormat.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/InputFormat.java similarity index 95% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/InputFormat.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/InputFormat.java index 014186078..43d6a2eef 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/InputFormat.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/InputFormat.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.parser.sql.llm; +package com.tencent.supersonic.chat.core.parser.sql.llm; import java.util.ArrayList; import java.util.HashMap; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/LLMRequestService.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/LLMRequestService.java similarity index 82% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/LLMRequestService.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/LLMRequestService.java index e0d64ecb2..4d7cba0cc 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/LLMRequestService.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/LLMRequestService.java @@ -1,28 +1,26 @@ -package com.tencent.supersonic.chat.parser.sql.llm; +package com.tencent.supersonic.chat.core.parser.sql.llm; -import com.tencent.supersonic.chat.agent.AgentToolType; -import com.tencent.supersonic.chat.agent.NL2SQLTool; -import com.tencent.supersonic.chat.api.component.SemanticInterpreter; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; import com.tencent.supersonic.chat.api.pojo.SemanticSchema; -import com.tencent.supersonic.chat.api.pojo.request.QueryReq; -import com.tencent.supersonic.chat.config.LLMParserConfig; -import com.tencent.supersonic.chat.config.OptimizationConfig; -import com.tencent.supersonic.chat.parser.SatisfactionChecker; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq.ElementValue; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMResp; -import com.tencent.supersonic.chat.service.AgentService; -import com.tencent.supersonic.chat.utils.ComponentFactory; +import com.tencent.supersonic.chat.core.agent.Agent; +import com.tencent.supersonic.chat.core.agent.AgentToolType; +import com.tencent.supersonic.chat.core.agent.NL2SQLTool; +import com.tencent.supersonic.chat.core.config.LLMParserConfig; +import com.tencent.supersonic.chat.core.config.OptimizationConfig; +import com.tencent.supersonic.chat.core.knowledge.semantic.SemanticInterpreter; +import com.tencent.supersonic.chat.core.parser.SatisfactionChecker; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq.ElementValue; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMResp; +import com.tencent.supersonic.chat.core.utils.ComponentFactory; import com.tencent.supersonic.common.pojo.ModelCluster; import com.tencent.supersonic.common.pojo.enums.DataFormatTypeEnum; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; import com.tencent.supersonic.common.util.DateUtils; -import com.tencent.supersonic.knowledge.service.SchemaService; import com.tencent.supersonic.headless.api.pojo.SchemaItem; import com.tencent.supersonic.headless.api.response.ModelSchemaResp; import java.util.ArrayList; @@ -49,10 +47,6 @@ public class LLMRequestService { @Autowired private LLMParserConfig llmParserConfig; @Autowired - private AgentService agentService; - @Autowired - private SchemaService schemaService; - @Autowired private OptimizationConfig optimizationConfig; public boolean isSkip(QueryContext queryCtx) { @@ -66,9 +60,9 @@ public class LLMRequestService { return false; } - public ModelCluster getModelCluster(QueryContext queryCtx, ChatContext chatCtx, Integer agentId) { - Set distinctModelIds = agentService.getModelIds(agentId, AgentToolType.NL2SQL_LLM); - if (agentService.containsAllModel(distinctModelIds)) { + public ModelCluster getModelCluster(QueryContext queryCtx, ChatContext chatCtx) { + Set distinctModelIds = queryCtx.getAgent().getModelIds(AgentToolType.NL2SQL_LLM); + if (queryCtx.getAgent().containsAllModel(distinctModelIds)) { distinctModelIds = new HashSet<>(); } ModelResolver modelResolver = ComponentFactory.getModelResolver(); @@ -77,13 +71,13 @@ public class LLMRequestService { return ModelCluster.build(modelCluster); } - public NL2SQLTool getParserTool(QueryReq request, Set modelIdSet) { - List commonAgentTools = agentService.getParserTools(request.getAgentId(), - AgentToolType.NL2SQL_LLM); + public NL2SQLTool getParserTool(QueryContext queryCtx, Set modelIdSet) { + Agent agent = queryCtx.getAgent(); + List commonAgentTools = agent.getParserTools(AgentToolType.NL2SQL_LLM); Optional llmParserTool = commonAgentTools.stream() .filter(tool -> { List modelIds = tool.getModelIds(); - if (agentService.containsAllModel(new HashSet<>(modelIds))) { + if (agent.containsAllModel(new HashSet<>(modelIds))) { return true; } for (Long modelId : modelIdSet) { @@ -127,7 +121,7 @@ public class LLMRequestService { } llmReq.setLinking(linking); - String currentDate = S2SqlDateHelper.getReferenceDate(firstModelId); + String currentDate = S2SqlDateHelper.getReferenceDate(queryCtx, firstModelId); if (StringUtils.isEmpty(currentDate)) { currentDate = DateUtils.getBeforeDate(0); } @@ -143,7 +137,7 @@ public class LLMRequestService { protected List getFieldNameList(QueryContext queryCtx, ModelCluster modelCluster, LLMParserConfig llmParserConfig) { - Set results = getTopNFieldNames(modelCluster, llmParserConfig); + Set results = getTopNFieldNames(queryCtx, modelCluster, llmParserConfig); Set fieldNameList = getMatchedFieldNames(queryCtx, modelCluster); @@ -187,7 +181,7 @@ public class LLMRequestService { } protected List getValueList(QueryContext queryCtx, ModelCluster modelCluster) { - Map itemIdToName = getItemIdToName(modelCluster); + Map itemIdToName = getItemIdToName(queryCtx, modelCluster); List matchedElements = queryCtx.getModelClusterMapInfo() .getMatchedElements(modelCluster.getKey()); @@ -210,14 +204,15 @@ public class LLMRequestService { return new ArrayList<>(valueMatches); } - protected Map getItemIdToName(ModelCluster modelCluster) { - SemanticSchema semanticSchema = schemaService.getSemanticSchema(); + protected Map getItemIdToName(QueryContext queryCtx, ModelCluster modelCluster) { + SemanticSchema semanticSchema = queryCtx.getSemanticSchema(); return semanticSchema.getDimensions(modelCluster.getModelIds()).stream() .collect(Collectors.toMap(SchemaElement::getId, SchemaElement::getName, (value1, value2) -> value2)); } - private Set getTopNFieldNames(ModelCluster modelCluster, LLMParserConfig llmParserConfig) { - SemanticSchema semanticSchema = schemaService.getSemanticSchema(); + private Set getTopNFieldNames(QueryContext queryCtx, ModelCluster modelCluster, + LLMParserConfig llmParserConfig) { + SemanticSchema semanticSchema = queryCtx.getSemanticSchema(); Set results = semanticSchema.getDimensions(modelCluster.getModelIds()).stream() .sorted(Comparator.comparing(SchemaElement::getUseCnt).reversed()) .limit(llmParserConfig.getDimensionTopN()) @@ -235,7 +230,7 @@ public class LLMRequestService { } protected Set getMatchedFieldNames(QueryContext queryCtx, ModelCluster modelCluster) { - Map itemIdToName = getItemIdToName(modelCluster); + Map itemIdToName = getItemIdToName(queryCtx, modelCluster); List matchedElements = queryCtx.getModelClusterMapInfo() .getMatchedElements(modelCluster.getKey()); if (CollectionUtils.isEmpty(matchedElements)) { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/LLMResponseService.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/LLMResponseService.java similarity index 82% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/LLMResponseService.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/LLMResponseService.java index 5385cf461..bd8c73e8f 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/LLMResponseService.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/LLMResponseService.java @@ -1,13 +1,13 @@ -package com.tencent.supersonic.chat.parser.sql.llm; +package com.tencent.supersonic.chat.core.parser.sql.llm; -import com.tencent.supersonic.chat.agent.NL2SQLTool; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.agent.NL2SQLTool; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; -import com.tencent.supersonic.chat.query.QueryManager; -import com.tencent.supersonic.chat.query.llm.LLMSemanticQuery; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMResp; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMSqlQuery; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMSqlResp; +import com.tencent.supersonic.chat.core.query.QueryManager; +import com.tencent.supersonic.chat.core.query.llm.LLMSemanticQuery; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMResp; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMSqlQuery; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMSqlResp; import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.util.jsqlparser.SqlParserEqualHelper; import lombok.extern.slf4j.Slf4j; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/LLMSqlParser.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/LLMSqlParser.java similarity index 77% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/LLMSqlParser.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/LLMSqlParser.java index e6c711219..3614897f1 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/LLMSqlParser.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/LLMSqlParser.java @@ -1,25 +1,23 @@ -package com.tencent.supersonic.chat.parser.sql.llm; +package com.tencent.supersonic.chat.core.parser.sql.llm; -import com.tencent.supersonic.chat.agent.NL2SQLTool; -import com.tencent.supersonic.chat.api.component.SemanticParser; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SemanticSchema; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq.ElementValue; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMResp; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMSqlResp; -import com.tencent.supersonic.chat.service.SemanticService; +import com.tencent.supersonic.chat.core.agent.NL2SQLTool; +import com.tencent.supersonic.chat.core.parser.SemanticParser; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq.ElementValue; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMResp; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMSqlResp; import com.tencent.supersonic.common.pojo.ModelCluster; import com.tencent.supersonic.common.util.ContextUtils; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.MapUtils; -import org.apache.commons.lang3.StringUtils; - import java.util.List; import java.util.Map; import java.util.Objects; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; @Slf4j public class LLMSqlParser implements SemanticParser { @@ -28,26 +26,25 @@ public class LLMSqlParser implements SemanticParser { public void parse(QueryContext queryCtx, ChatContext chatCtx) { QueryReq request = queryCtx.getRequest(); LLMRequestService requestService = ContextUtils.getBean(LLMRequestService.class); - SemanticService semanticService = ContextUtils.getBean(SemanticService.class); //1.determine whether to skip this parser. if (requestService.isSkip(queryCtx)) { return; } try { //2.get modelId from queryCtx and chatCtx. - ModelCluster modelCluster = requestService.getModelCluster(queryCtx, chatCtx, request.getAgentId()); + ModelCluster modelCluster = requestService.getModelCluster(queryCtx, chatCtx); if (StringUtils.isBlank(modelCluster.getKey())) { return; } //3.get agent tool and determine whether to skip this parser. - NL2SQLTool commonAgentTool = requestService.getParserTool(request, modelCluster.getModelIds()); + NL2SQLTool commonAgentTool = requestService.getParserTool(queryCtx, modelCluster.getModelIds()); if (Objects.isNull(commonAgentTool)) { log.info("no tool in this agent, skip {}", LLMSqlParser.class); return; } //4.construct a request, call the API for the large model, and retrieve the results. List linkingValues = requestService.getValueList(queryCtx, modelCluster); - SemanticSchema semanticSchema = semanticService.getSemanticSchema(); + SemanticSchema semanticSchema = queryCtx.getSemanticSchema(); LLMReq llmReq = requestService.getLlmReq(queryCtx, semanticSchema, modelCluster, linkingValues); LLMResp llmResp = requestService.requestLLM(llmReq, modelCluster.getKey()); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/ModelMatchResult.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/ModelMatchResult.java similarity index 69% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/ModelMatchResult.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/ModelMatchResult.java index 9da966920..70eb3d68c 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/ModelMatchResult.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/ModelMatchResult.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.parser.sql.llm; +package com.tencent.supersonic.chat.core.parser.sql.llm; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/ModelResolver.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/ModelResolver.java new file mode 100644 index 000000000..840e7475d --- /dev/null +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/ModelResolver.java @@ -0,0 +1,12 @@ +package com.tencent.supersonic.chat.core.parser.sql.llm; + + +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; +import java.util.Set; + +public interface ModelResolver { + + String resolve(QueryContext queryContext, ChatContext chatCtx, Set restrictiveModels); + +} diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/OnePassSCSqlGeneration.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/OnePassSCSqlGeneration.java similarity index 92% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/OnePassSCSqlGeneration.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/OnePassSCSqlGeneration.java index 5a96d4c5b..e70d5a2ab 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/OnePassSCSqlGeneration.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/OnePassSCSqlGeneration.java @@ -1,10 +1,10 @@ -package com.tencent.supersonic.chat.parser.sql.llm; +package com.tencent.supersonic.chat.core.parser.sql.llm; -import com.tencent.supersonic.chat.config.OptimizationConfig; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq.SqlGenerationMode; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMResp; +import com.tencent.supersonic.chat.core.config.OptimizationConfig; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq.SqlGenerationMode; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMResp; import com.tencent.supersonic.common.util.JsonUtil; import dev.langchain4j.data.message.AiMessage; import dev.langchain4j.model.chat.ChatLanguageModel; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/OnePassSqlGeneration.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/OnePassSqlGeneration.java similarity index 87% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/OnePassSqlGeneration.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/OnePassSqlGeneration.java index 6127ef1a4..e9f2a6822 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/OnePassSqlGeneration.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/OnePassSqlGeneration.java @@ -1,11 +1,11 @@ -package com.tencent.supersonic.chat.parser.sql.llm; +package com.tencent.supersonic.chat.core.parser.sql.llm; -import com.tencent.supersonic.chat.config.OptimizationConfig; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq.SqlGenerationMode; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMResp; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMSqlResp; +import com.tencent.supersonic.chat.core.config.OptimizationConfig; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMSqlResp; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq.SqlGenerationMode; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMResp; import com.tencent.supersonic.common.util.JsonUtil; import dev.langchain4j.data.message.AiMessage; import dev.langchain4j.model.chat.ChatLanguageModel; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/OutputFormat.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/OutputFormat.java similarity index 95% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/OutputFormat.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/OutputFormat.java index a60dedd9a..66bf86ca6 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/OutputFormat.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/OutputFormat.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.chat.parser.sql.llm; +package com.tencent.supersonic.chat.core.parser.sql.llm; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.tencent.supersonic.chat.parser.plugin.function.FunctionResp; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMSqlResp; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMSqlResp; +import com.tencent.supersonic.chat.core.parser.plugin.function.FunctionResp; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/ParseResult.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/ParseResult.java similarity index 63% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/ParseResult.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/ParseResult.java index b40f544b1..c058d0e24 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/ParseResult.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/ParseResult.java @@ -1,10 +1,10 @@ -package com.tencent.supersonic.chat.parser.sql.llm; +package com.tencent.supersonic.chat.core.parser.sql.llm; -import com.tencent.supersonic.chat.agent.NL2SQLTool; +import com.tencent.supersonic.chat.core.agent.NL2SQLTool; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq.ElementValue; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMResp; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq.ElementValue; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMResp; import com.tencent.supersonic.common.pojo.ModelCluster; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/S2SqlDateHelper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/S2SqlDateHelper.java similarity index 58% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/S2SqlDateHelper.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/S2SqlDateHelper.java index 1f32823ee..61a51f49d 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/S2SqlDateHelper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/S2SqlDateHelper.java @@ -1,37 +1,34 @@ -package com.tencent.supersonic.chat.parser.sql.llm; +package com.tencent.supersonic.chat.core.parser.sql.llm; import com.tencent.supersonic.chat.api.pojo.request.ChatConfigFilter; -import com.tencent.supersonic.chat.api.pojo.request.ChatDefaultConfigReq; -import com.tencent.supersonic.chat.api.pojo.response.ChatConfigResp; -import com.tencent.supersonic.chat.service.ConfigService; -import com.tencent.supersonic.common.util.ContextUtils; +import com.tencent.supersonic.chat.api.pojo.response.ChatConfigRichResp; +import com.tencent.supersonic.chat.api.pojo.response.ChatDefaultRichConfigResp; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.common.util.DatePeriodEnum; import com.tencent.supersonic.common.util.DateUtils; -import java.util.List; import java.util.Objects; -import org.apache.commons.collections.CollectionUtils; public class S2SqlDateHelper { - public static String getReferenceDate(Long modelId) { + public static String getReferenceDate(QueryContext queryContext, Long modelId) { String defaultDate = DateUtils.getBeforeDate(0); if (Objects.isNull(modelId)) { return defaultDate; } ChatConfigFilter filter = new ChatConfigFilter(); filter.setModelId(modelId); + ChatConfigRichResp chatConfigRichResp = queryContext.getModelIdToChatRichConfig().get(modelId); - List configResps = ContextUtils.getBean(ConfigService.class).search(filter, null); - if (CollectionUtils.isEmpty(configResps)) { + if (Objects.isNull(chatConfigRichResp)) { return defaultDate; } - ChatConfigResp chatConfigResp = configResps.get(0); - if (Objects.isNull(chatConfigResp.getChatDetailConfig()) || Objects.isNull( - chatConfigResp.getChatDetailConfig().getChatDefaultConfig())) { + if (Objects.isNull(chatConfigRichResp.getChatDetailRichConfig()) || Objects.isNull( + chatConfigRichResp.getChatDetailRichConfig().getChatDefaultConfig())) { return defaultDate; } - ChatDefaultConfigReq chatDefaultConfig = chatConfigResp.getChatDetailConfig().getChatDefaultConfig(); + ChatDefaultRichConfigResp chatDefaultConfig = chatConfigRichResp.getChatDetailRichConfig() + .getChatDefaultConfig(); Integer unit = chatDefaultConfig.getUnit(); String period = chatDefaultConfig.getPeriod(); if (Objects.nonNull(unit)) { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/SqlExample.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/SqlExample.java similarity index 82% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/SqlExample.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/SqlExample.java index 04101d74f..9837c0e90 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/SqlExample.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/SqlExample.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.parser.sql.llm; +package com.tencent.supersonic.chat.core.parser.sql.llm; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/SqlExampleLoader.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/SqlExampleLoader.java similarity index 98% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/SqlExampleLoader.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/SqlExampleLoader.java index e834fcc94..7b8237c42 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/SqlExampleLoader.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/SqlExampleLoader.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.parser.sql.llm; +package com.tencent.supersonic.chat.core.parser.sql.llm; import com.fasterxml.jackson.core.type.TypeReference; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/SqlGeneration.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/SqlGeneration.java similarity index 64% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/SqlGeneration.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/SqlGeneration.java index 7372101b6..638d99e57 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/SqlGeneration.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/SqlGeneration.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.chat.parser.sql.llm; +package com.tencent.supersonic.chat.core.parser.sql.llm; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMResp; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMResp; /** * Sql Generation interface, generating SQL using a large model. diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/SqlGenerationFactory.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/SqlGenerationFactory.java similarity index 78% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/SqlGenerationFactory.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/SqlGenerationFactory.java index 6aa0586bc..72ea6795f 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/SqlGenerationFactory.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/SqlGenerationFactory.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.chat.parser.sql.llm; +package com.tencent.supersonic.chat.core.parser.sql.llm; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq.SqlGenerationMode; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq.SqlGenerationMode; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/SqlPromptGenerator.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/SqlPromptGenerator.java similarity index 97% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/SqlPromptGenerator.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/SqlPromptGenerator.java index db45044ba..0781cb098 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/SqlPromptGenerator.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/SqlPromptGenerator.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.chat.parser.sql.llm; +package com.tencent.supersonic.chat.core.parser.sql.llm; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq.ElementValue; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq.ElementValue; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/TwoPassSCSqlGeneration.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/TwoPassSCSqlGeneration.java similarity index 92% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/TwoPassSCSqlGeneration.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/TwoPassSCSqlGeneration.java index 5c42d3f8f..b1665c1bf 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/TwoPassSCSqlGeneration.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/TwoPassSCSqlGeneration.java @@ -1,10 +1,10 @@ -package com.tencent.supersonic.chat.parser.sql.llm; +package com.tencent.supersonic.chat.core.parser.sql.llm; -import com.tencent.supersonic.chat.config.OptimizationConfig; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq.SqlGenerationMode; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMResp; +import com.tencent.supersonic.chat.core.config.OptimizationConfig; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq.SqlGenerationMode; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMResp; import com.tencent.supersonic.common.util.JsonUtil; import dev.langchain4j.data.message.AiMessage; import dev.langchain4j.model.chat.ChatLanguageModel; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/TwoPassSqlGeneration.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/TwoPassSqlGeneration.java similarity index 90% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/TwoPassSqlGeneration.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/TwoPassSqlGeneration.java index 59eb5400f..9895a10ee 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/TwoPassSqlGeneration.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/llm/TwoPassSqlGeneration.java @@ -1,10 +1,10 @@ -package com.tencent.supersonic.chat.parser.sql.llm; +package com.tencent.supersonic.chat.core.parser.sql.llm; -import com.tencent.supersonic.chat.config.OptimizationConfig; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq.SqlGenerationMode; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMResp; +import com.tencent.supersonic.chat.core.config.OptimizationConfig; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMReq.SqlGenerationMode; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMResp; import com.tencent.supersonic.common.util.JsonUtil; import dev.langchain4j.data.message.AiMessage; import dev.langchain4j.model.chat.ChatLanguageModel; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/rule/AgentCheckParser.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/rule/AgentCheckParser.java similarity index 69% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/rule/AgentCheckParser.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/rule/AgentCheckParser.java index ce32256a6..d078a6e3e 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/rule/AgentCheckParser.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/rule/AgentCheckParser.java @@ -1,24 +1,21 @@ -package com.tencent.supersonic.chat.parser.sql.rule; +package com.tencent.supersonic.chat.core.parser.sql.rule; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Lists; -import com.tencent.supersonic.chat.agent.Agent; -import com.tencent.supersonic.chat.agent.AgentToolType; -import com.tencent.supersonic.chat.agent.RuleParserTool; -import com.tencent.supersonic.chat.api.component.SemanticParser; -import com.tencent.supersonic.chat.api.component.SemanticQuery; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; -import com.tencent.supersonic.chat.query.QueryManager; -import com.tencent.supersonic.chat.service.AgentService; +import com.tencent.supersonic.chat.core.agent.Agent; +import com.tencent.supersonic.chat.core.agent.AgentToolType; +import com.tencent.supersonic.chat.core.agent.RuleParserTool; +import com.tencent.supersonic.chat.core.parser.SemanticParser; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; +import com.tencent.supersonic.chat.core.query.QueryManager; +import com.tencent.supersonic.chat.core.query.SemanticQuery; import com.tencent.supersonic.common.pojo.enums.QueryType; -import com.tencent.supersonic.common.util.ContextUtils; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; - import java.util.HashSet; import java.util.List; import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; @Slf4j public class AgentCheckParser implements SemanticParser { @@ -26,16 +23,15 @@ public class AgentCheckParser implements SemanticParser { @Override public void parse(QueryContext queryContext, ChatContext chatContext) { List queries = queryContext.getCandidateQueries(); - agentCanSupport(queryContext.getRequest().getAgentId(), queries); + agentCanSupport(queryContext, queries); } - private void agentCanSupport(Integer agentId, List queries) { - AgentService agentService = ContextUtils.getBean(AgentService.class); - Agent agent = agentService.getAgent(agentId); + private void agentCanSupport(QueryContext queryContext, List queries) { + Agent agent = queryContext.getAgent(); if (agent == null) { return; } - List queryTools = getRuleTools(agentId); + List queryTools = getRuleTools(agent); if (CollectionUtils.isEmpty(queryTools)) { queries.clear(); return; @@ -73,9 +69,7 @@ public class AgentCheckParser implements SemanticParser { queries.stream().map(SemanticQuery::getQueryMode).collect(Collectors.toList())); } - private static List getRuleTools(Integer agentId) { - AgentService agentService = ContextUtils.getBean(AgentService.class); - Agent agent = agentService.getAgent(agentId); + private static List getRuleTools(Agent agent) { if (agent == null) { return Lists.newArrayList(); } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/rule/AggregateTypeParser.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/rule/AggregateTypeParser.java similarity index 93% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/rule/AggregateTypeParser.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/rule/AggregateTypeParser.java index 68c05813b..5c226b2ec 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/rule/AggregateTypeParser.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/rule/AggregateTypeParser.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.parser.sql.rule; +package com.tencent.supersonic.chat.core.parser.sql.rule; import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.AVG; import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.COUNT; @@ -9,10 +9,10 @@ import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.NONE; import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.SUM; import static com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum.TOPN; -import com.tencent.supersonic.chat.api.component.SemanticParser; -import com.tencent.supersonic.chat.api.component.SemanticQuery; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.parser.SemanticParser; +import com.tencent.supersonic.chat.core.query.SemanticQuery; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum; import java.util.AbstractMap; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/rule/ContextInheritParser.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/rule/ContextInheritParser.java similarity index 70% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/rule/ContextInheritParser.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/rule/ContextInheritParser.java index 21024f416..8bdc8239c 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/rule/ContextInheritParser.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/rule/ContextInheritParser.java @@ -1,24 +1,19 @@ -package com.tencent.supersonic.chat.parser.sql.rule; +package com.tencent.supersonic.chat.core.parser.sql.rule; -import com.tencent.supersonic.chat.api.component.SemanticParser; -import com.tencent.supersonic.chat.api.component.SemanticQuery; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; import com.tencent.supersonic.chat.api.pojo.SemanticSchema; -import com.tencent.supersonic.chat.query.QueryManager; -import com.tencent.supersonic.chat.query.rule.RuleSemanticQuery; -import com.tencent.supersonic.chat.query.rule.metric.MetricModelQuery; -import com.tencent.supersonic.chat.query.rule.metric.MetricSemanticQuery; -import com.tencent.supersonic.chat.query.rule.metric.MetricTagQuery; -import com.tencent.supersonic.chat.service.SemanticService; -import com.tencent.supersonic.chat.utils.ModelClusterBuilder; +import com.tencent.supersonic.chat.core.parser.SemanticParser; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; +import com.tencent.supersonic.chat.core.query.QueryManager; +import com.tencent.supersonic.chat.core.query.SemanticQuery; +import com.tencent.supersonic.chat.core.query.rule.RuleSemanticQuery; +import com.tencent.supersonic.chat.core.query.rule.metric.MetricModelQuery; +import com.tencent.supersonic.chat.core.query.rule.metric.MetricSemanticQuery; +import com.tencent.supersonic.chat.core.query.rule.metric.MetricTagQuery; +import com.tencent.supersonic.chat.core.utils.ModelClusterBuilder; import com.tencent.supersonic.common.pojo.ModelCluster; -import com.tencent.supersonic.common.util.ContextUtils; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; - import java.util.AbstractMap; import java.util.ArrayList; import java.util.Arrays; @@ -28,14 +23,8 @@ import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; - -import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.DIMENSION; -import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.ENTITY; -import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.ID; -import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.METRIC; -import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.MODEL; -import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.TAG; -import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.VALUE; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; /** * ContextInheritParser tries to inherit certain schema elements from context @@ -46,13 +35,15 @@ import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.VALUE; public class ContextInheritParser implements SemanticParser { private static final Map> MUTUAL_EXCLUSIVE_MAP = Stream.of( - new AbstractMap.SimpleEntry<>(METRIC, Arrays.asList(METRIC)), - new AbstractMap.SimpleEntry<>(DIMENSION, Arrays.asList(DIMENSION, VALUE)), - new AbstractMap.SimpleEntry<>(VALUE, Arrays.asList(VALUE, DIMENSION)), - new AbstractMap.SimpleEntry<>(ENTITY, Arrays.asList(ENTITY)), - new AbstractMap.SimpleEntry<>(TAG, Arrays.asList(TAG)), - new AbstractMap.SimpleEntry<>(MODEL, Arrays.asList(MODEL)), - new AbstractMap.SimpleEntry<>(ID, Arrays.asList(ID)) + new AbstractMap.SimpleEntry<>(SchemaElementType.METRIC, Arrays.asList(SchemaElementType.METRIC)), + new AbstractMap.SimpleEntry<>( + SchemaElementType.DIMENSION, Arrays.asList(SchemaElementType.DIMENSION, SchemaElementType.VALUE)), + new AbstractMap.SimpleEntry<>( + SchemaElementType.VALUE, Arrays.asList(SchemaElementType.VALUE, SchemaElementType.DIMENSION)), + new AbstractMap.SimpleEntry<>(SchemaElementType.ENTITY, Arrays.asList(SchemaElementType.ENTITY)), + new AbstractMap.SimpleEntry<>(SchemaElementType.TAG, Arrays.asList(SchemaElementType.TAG)), + new AbstractMap.SimpleEntry<>(SchemaElementType.MODEL, Arrays.asList(SchemaElementType.MODEL)), + new AbstractMap.SimpleEntry<>(SchemaElementType.ID, Arrays.asList(SchemaElementType.ID)) ).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); @Override @@ -80,7 +71,7 @@ public class ContextInheritParser implements SemanticParser { List queries = RuleSemanticQuery.resolve(elementMatches, queryContext); for (RuleSemanticQuery query : queries) { - query.fillParseInfo(chatContext); + query.fillParseInfo(queryContext, chatContext); if (existSameQuery(query.getParseInfo().getModelClusterKey(), query.getQueryMode(), queryContext)) { continue; } @@ -125,8 +116,7 @@ public class ContextInheritParser implements SemanticParser { if (StringUtils.isBlank(contextModelClusterKey)) { return null; } - SemanticService semanticService = ContextUtils.getBean(SemanticService.class); - SemanticSchema semanticSchema = semanticService.getSemanticSchema(); + SemanticSchema semanticSchema = queryContext.getSemanticSchema(); List allModelClusters = ModelClusterBuilder.buildModelClusters(semanticSchema); Set queryModelClusters = queryContext.getModelClusterMapInfo().getMatchedModelClusters(); ModelCluster contextModelCluster = ModelCluster.build(contextModelClusterKey); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/rule/RuleSqlParser.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/rule/RuleSqlParser.java similarity index 79% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/rule/RuleSqlParser.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/rule/RuleSqlParser.java index 55c7e1a8f..291189b7f 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/rule/RuleSqlParser.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/rule/RuleSqlParser.java @@ -1,11 +1,11 @@ -package com.tencent.supersonic.chat.parser.sql.rule; +package com.tencent.supersonic.chat.core.parser.sql.rule; -import com.tencent.supersonic.chat.api.component.SemanticParser; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.parser.SemanticParser; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; import com.tencent.supersonic.chat.api.pojo.SchemaModelClusterMapInfo; -import com.tencent.supersonic.chat.query.rule.RuleSemanticQuery; +import com.tencent.supersonic.chat.core.query.rule.RuleSemanticQuery; import lombok.extern.slf4j.Slf4j; import java.util.Arrays; @@ -33,7 +33,7 @@ public class RuleSqlParser implements SemanticParser { List elementMatches = modelClusterMapInfo.getMatchedElements(modelClusterKey); List queries = RuleSemanticQuery.resolve(elementMatches, queryContext); for (RuleSemanticQuery query : queries) { - query.fillParseInfo(chatContext); + query.fillParseInfo(queryContext, chatContext); queryContext.getCandidateQueries().add(query); } } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/rule/TimeRangeParser.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/rule/TimeRangeParser.java similarity index 94% rename from chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/rule/TimeRangeParser.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/rule/TimeRangeParser.java index bc38c89ee..7745c7a5f 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/rule/TimeRangeParser.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/parser/sql/rule/TimeRangeParser.java @@ -1,11 +1,11 @@ -package com.tencent.supersonic.chat.parser.sql.rule; +package com.tencent.supersonic.chat.core.parser.sql.rule; -import com.tencent.supersonic.chat.api.component.SemanticParser; -import com.tencent.supersonic.chat.api.component.SemanticQuery; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; -import com.tencent.supersonic.chat.query.rule.RuleSemanticQuery; -import com.tencent.supersonic.chat.query.QueryManager; +import com.tencent.supersonic.chat.core.parser.SemanticParser; +import com.tencent.supersonic.chat.core.query.SemanticQuery; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; +import com.tencent.supersonic.chat.core.query.rule.RuleSemanticQuery; +import com.tencent.supersonic.chat.core.query.QueryManager; import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.pojo.DateConf; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/plugin/Plugin.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/Plugin.java similarity index 92% rename from chat/core/src/main/java/com/tencent/supersonic/chat/plugin/Plugin.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/Plugin.java index 5b5a18c60..11ffb1406 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/plugin/Plugin.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/Plugin.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.chat.plugin; +package com.tencent.supersonic.chat.core.plugin; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Lists; -import com.tencent.supersonic.chat.parser.plugin.ParseMode; +import com.tencent.supersonic.chat.core.parser.plugin.ParseMode; import com.tencent.supersonic.common.pojo.RecordInfo; import lombok.Data; import org.apache.commons.collections.CollectionUtils; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/plugin/PluginManager.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/PluginManager.java similarity index 88% rename from chat/core/src/main/java/com/tencent/supersonic/chat/plugin/PluginManager.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/PluginManager.java index c7aa2ad3e..37b5becc8 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/plugin/PluginManager.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/PluginManager.java @@ -1,26 +1,23 @@ -package com.tencent.supersonic.chat.plugin; +package com.tencent.supersonic.chat.core.plugin; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import com.tencent.supersonic.chat.agent.Agent; -import com.tencent.supersonic.chat.agent.AgentToolType; -import com.tencent.supersonic.chat.agent.PluginTool; -import com.tencent.supersonic.chat.api.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; import com.tencent.supersonic.chat.api.pojo.SchemaMapInfo; -import com.tencent.supersonic.chat.plugin.event.PluginAddEvent; -import com.tencent.supersonic.chat.plugin.event.PluginDelEvent; -import com.tencent.supersonic.chat.plugin.event.PluginUpdateEvent; -import com.tencent.supersonic.chat.query.plugin.ParamOption; -import com.tencent.supersonic.chat.query.plugin.WebBase; -import com.tencent.supersonic.chat.service.AgentService; -import com.tencent.supersonic.chat.service.PluginService; +import com.tencent.supersonic.chat.core.agent.Agent; +import com.tencent.supersonic.chat.core.agent.AgentToolType; +import com.tencent.supersonic.chat.core.agent.PluginTool; +import com.tencent.supersonic.chat.core.plugin.event.PluginAddEvent; +import com.tencent.supersonic.chat.core.plugin.event.PluginDelEvent; +import com.tencent.supersonic.chat.core.plugin.event.PluginUpdateEvent; +import com.tencent.supersonic.chat.core.pojo.QueryContext; +import com.tencent.supersonic.chat.core.query.plugin.ParamOption; +import com.tencent.supersonic.chat.core.query.plugin.WebBase; import com.tencent.supersonic.common.config.EmbeddingConfig; import com.tencent.supersonic.common.util.ComponentFactory; -import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.embedding.EmbeddingQuery; import com.tencent.supersonic.common.util.embedding.Retrieval; import com.tencent.supersonic.common.util.embedding.RetrieveQuery; @@ -53,17 +50,16 @@ public class PluginManager { this.embeddingConfig = embeddingConfig; } - public static List getPluginAgentCanSupport(Integer agentId) { - PluginService pluginService = ContextUtils.getBean(PluginService.class); - List plugins = pluginService.getPluginList(); - if (agentId == null) { + public static List getPluginAgentCanSupport(QueryContext queryContext) { + List plugins = new ArrayList<>(); + if (Objects.isNull(queryContext.getAgent())) { return plugins; } - Agent agent = ContextUtils.getBean(AgentService.class).getAgent(agentId); + Agent agent = queryContext.getAgent(); if (agent == null) { return plugins; } - List pluginIds = getPluginTools(agentId).stream().map(PluginTool::getPlugins) + List pluginIds = getPluginTools(agent).stream().map(PluginTool::getPlugins) .flatMap(Collection::stream).collect(Collectors.toList()); if (CollectionUtils.isEmpty(pluginIds)) { return Lists.newArrayList(); @@ -75,9 +71,7 @@ public class PluginManager { return plugins; } - private static List getPluginTools(Integer agentId) { - AgentService agentService = ContextUtils.getBean(AgentService.class); - Agent agent = agentService.getAgent(agentId); + private static List getPluginTools(Agent agent) { if (agent == null) { return Lists.newArrayList(); } @@ -146,7 +140,6 @@ public class PluginManager { public RetrieveQueryResult recognize(String embeddingText) { - RetrieveQuery retrieveQuery = RetrieveQuery.builder() .queryTextsList(Collections.singletonList(embeddingText)) .build(); @@ -154,7 +147,6 @@ public class PluginManager { List resultList = s2EmbeddingStore.retrieveQuery(embeddingConfig.getPresetCollection(), retrieveQuery, embeddingConfig.getNResult()); - if (CollectionUtils.isNotEmpty(resultList)) { for (RetrieveQueryResult embeddingResp : resultList) { List embeddingRetrievals = embeddingResp.getRetrieval(); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/plugin/PluginParseConfig.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/PluginParseConfig.java similarity index 78% rename from chat/core/src/main/java/com/tencent/supersonic/chat/plugin/PluginParseConfig.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/PluginParseConfig.java index 5fabd1ce9..c02a6dde6 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/plugin/PluginParseConfig.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/PluginParseConfig.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.chat.plugin; +package com.tencent.supersonic.chat.core.plugin; -import com.tencent.supersonic.chat.parser.plugin.function.Parameters; +import com.tencent.supersonic.chat.core.parser.plugin.function.Parameters; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/plugin/PluginParseResult.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/PluginParseResult.java similarity index 81% rename from chat/core/src/main/java/com/tencent/supersonic/chat/plugin/PluginParseResult.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/PluginParseResult.java index ab93d2908..792ee0d39 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/plugin/PluginParseResult.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/PluginParseResult.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.plugin; +package com.tencent.supersonic.chat.core.plugin; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/plugin/PluginRecallResult.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/PluginRecallResult.java similarity index 87% rename from chat/core/src/main/java/com/tencent/supersonic/chat/plugin/PluginRecallResult.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/PluginRecallResult.java index f347afb2d..d4dd185ee 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/plugin/PluginRecallResult.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/PluginRecallResult.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.plugin; +package com.tencent.supersonic.chat.core.plugin; import lombok.AllArgsConstructor; import lombok.Builder; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/plugin/event/PluginAddEvent.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/event/PluginAddEvent.java similarity index 74% rename from chat/core/src/main/java/com/tencent/supersonic/chat/plugin/event/PluginAddEvent.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/event/PluginAddEvent.java index 4aafc787a..7c7b808cb 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/plugin/event/PluginAddEvent.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/event/PluginAddEvent.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.chat.plugin.event; +package com.tencent.supersonic.chat.core.plugin.event; -import com.tencent.supersonic.chat.plugin.Plugin; +import com.tencent.supersonic.chat.core.plugin.Plugin; import org.springframework.context.ApplicationEvent; public class PluginAddEvent extends ApplicationEvent { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/plugin/event/PluginDelEvent.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/event/PluginDelEvent.java similarity index 74% rename from chat/core/src/main/java/com/tencent/supersonic/chat/plugin/event/PluginDelEvent.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/event/PluginDelEvent.java index 0dd0d4520..849a06a71 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/plugin/event/PluginDelEvent.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/event/PluginDelEvent.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.chat.plugin.event; +package com.tencent.supersonic.chat.core.plugin.event; -import com.tencent.supersonic.chat.plugin.Plugin; +import com.tencent.supersonic.chat.core.plugin.Plugin; import org.springframework.context.ApplicationEvent; public class PluginDelEvent extends ApplicationEvent { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/plugin/event/PluginUpdateEvent.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/event/PluginUpdateEvent.java similarity index 81% rename from chat/core/src/main/java/com/tencent/supersonic/chat/plugin/event/PluginUpdateEvent.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/event/PluginUpdateEvent.java index 2d2086f87..cfde78975 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/plugin/event/PluginUpdateEvent.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/plugin/event/PluginUpdateEvent.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.chat.plugin.event; +package com.tencent.supersonic.chat.core.plugin.event; -import com.tencent.supersonic.chat.plugin.Plugin; +import com.tencent.supersonic.chat.core.plugin.Plugin; import org.springframework.context.ApplicationEvent; public class PluginUpdateEvent extends ApplicationEvent { diff --git a/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/ChatContext.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/pojo/ChatContext.java similarity index 68% rename from chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/ChatContext.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/pojo/ChatContext.java index aa0cdf088..122dceb62 100644 --- a/chat/api/src/main/java/com/tencent/supersonic/chat/api/pojo/ChatContext.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/pojo/ChatContext.java @@ -1,5 +1,6 @@ -package com.tencent.supersonic.chat.api.pojo; +package com.tencent.supersonic.chat.core.pojo; +import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; import lombok.Data; @Data diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/core/pojo/QueryContext.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/pojo/QueryContext.java new file mode 100644 index 000000000..cec1b2c6c --- /dev/null +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/pojo/QueryContext.java @@ -0,0 +1,35 @@ +package com.tencent.supersonic.chat.core.pojo; + +import com.tencent.supersonic.chat.api.pojo.SchemaMapInfo; +import com.tencent.supersonic.chat.api.pojo.SchemaModelClusterMapInfo; +import com.tencent.supersonic.chat.api.pojo.SemanticSchema; +import com.tencent.supersonic.chat.api.pojo.request.QueryFilters; +import com.tencent.supersonic.chat.api.pojo.request.QueryReq; +import com.tencent.supersonic.chat.api.pojo.response.ChatConfigRichResp; +import com.tencent.supersonic.chat.core.agent.Agent; +import com.tencent.supersonic.chat.core.plugin.Plugin; +import com.tencent.supersonic.chat.core.query.SemanticQuery; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class QueryContext { + + private QueryReq request; + private QueryFilters queryFilters; + private List candidateQueries = new ArrayList<>(); + private SchemaMapInfo mapInfo = new SchemaMapInfo(); + private SchemaModelClusterMapInfo modelClusterMapInfo = new SchemaModelClusterMapInfo(); + private SemanticSchema semanticSchema; + private Agent agent; + private Map modelIdToChatRichConfig; + private Map nameToPlugin; +} diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/BaseSemanticQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/BaseSemanticQuery.java similarity index 85% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/BaseSemanticQuery.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/BaseSemanticQuery.java index 9f3e08008..0e2e9865b 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/BaseSemanticQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/BaseSemanticQuery.java @@ -1,35 +1,33 @@ -package com.tencent.supersonic.chat.query; +package com.tencent.supersonic.chat.core.query; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.api.component.SemanticInterpreter; -import com.tencent.supersonic.chat.api.component.SemanticQuery; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; +import com.tencent.supersonic.chat.api.pojo.SemanticSchema; import com.tencent.supersonic.chat.api.pojo.response.SqlInfo; -import com.tencent.supersonic.chat.config.OptimizationConfig; -import com.tencent.supersonic.chat.utils.ComponentFactory; -import com.tencent.supersonic.chat.utils.QueryReqBuilder; +import com.tencent.supersonic.chat.core.config.OptimizationConfig; +import com.tencent.supersonic.chat.core.knowledge.semantic.SemanticInterpreter; +import com.tencent.supersonic.chat.core.utils.ComponentFactory; +import com.tencent.supersonic.chat.core.utils.QueryReqBuilder; import com.tencent.supersonic.common.pojo.Aggregator; import com.tencent.supersonic.common.pojo.Filter; import com.tencent.supersonic.common.pojo.Order; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; import com.tencent.supersonic.common.util.ContextUtils; -import com.tencent.supersonic.knowledge.service.SchemaService; import com.tencent.supersonic.headless.api.enums.QueryType; -import com.tencent.supersonic.headless.api.response.ExplainResp; import com.tencent.supersonic.headless.api.request.ExplainSqlReq; import com.tencent.supersonic.headless.api.request.QueryS2SQLReq; import com.tencent.supersonic.headless.api.request.QueryStructReq; -import lombok.ToString; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections4.CollectionUtils; -import org.apache.commons.lang3.StringUtils; - +import com.tencent.supersonic.headless.api.response.ExplainResp; import java.io.Serializable; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; +import lombok.ToString; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; @Slf4j @ToString @@ -84,10 +82,8 @@ public abstract class BaseSemanticQuery implements SemanticQuery, Serializable { return QueryReqBuilder.buildStructReq(parseInfo); } - protected void convertBizNameToName(QueryStructReq queryStructReq) { - SchemaService schemaService = ContextUtils.getBean(SchemaService.class); - Map bizNameToName = schemaService.getSemanticSchema() - .getBizNameToName(queryStructReq.getModelIdSet()); + protected void convertBizNameToName(SemanticSchema semanticSchema, QueryStructReq queryStructReq) { + Map bizNameToName = semanticSchema.getBizNameToName(queryStructReq.getModelIdSet()); bizNameToName.putAll(TimeDimensionEnum.getNameToNameMap()); List orders = queryStructReq.getOrders(); @@ -118,13 +114,13 @@ public abstract class BaseSemanticQuery implements SemanticQuery, Serializable { queryStructReq.setModelName(parseInfo.getModelName()); } - protected void initS2SqlByStruct() { + protected void initS2SqlByStruct(SemanticSchema semanticSchema) { OptimizationConfig optimizationConfig = ContextUtils.getBean(OptimizationConfig.class); if (!optimizationConfig.isUseS2SqlSwitch()) { return; } QueryStructReq queryStructReq = convertQueryStruct(); - convertBizNameToName(queryStructReq); + convertBizNameToName(semanticSchema, queryStructReq); QueryS2SQLReq queryS2SQLReq = queryStructReq.convert(queryStructReq); parseInfo.getSqlInfo().setS2SQL(queryS2SQLReq.getSql()); parseInfo.getSqlInfo().setCorrectS2SQL(queryS2SQLReq.getSql()); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/QueryManager.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/QueryManager.java similarity index 89% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/QueryManager.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/QueryManager.java index 45be646b4..231f3bbf9 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/QueryManager.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/QueryManager.java @@ -1,11 +1,10 @@ -package com.tencent.supersonic.chat.query; +package com.tencent.supersonic.chat.core.query; -import com.tencent.supersonic.chat.api.component.SemanticQuery; -import com.tencent.supersonic.chat.query.llm.LLMSemanticQuery; -import com.tencent.supersonic.chat.query.plugin.PluginSemanticQuery; -import com.tencent.supersonic.chat.query.rule.RuleSemanticQuery; -import com.tencent.supersonic.chat.query.rule.tag.TagSemanticQuery; -import com.tencent.supersonic.chat.query.rule.metric.MetricSemanticQuery; +import com.tencent.supersonic.chat.core.query.llm.LLMSemanticQuery; +import com.tencent.supersonic.chat.core.query.plugin.PluginSemanticQuery; +import com.tencent.supersonic.chat.core.query.rule.RuleSemanticQuery; +import com.tencent.supersonic.chat.core.query.rule.metric.MetricSemanticQuery; +import com.tencent.supersonic.chat.core.query.rule.tag.TagSemanticQuery; import java.util.ArrayList; import java.util.List; import java.util.Map; diff --git a/chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/SemanticQuery.java similarity index 78% rename from chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticQuery.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/SemanticQuery.java index 6a35ae7bd..fcd4aeed3 100644 --- a/chat/api/src/main/java/com/tencent/supersonic/chat/api/component/SemanticQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/SemanticQuery.java @@ -1,7 +1,8 @@ -package com.tencent.supersonic.chat.api.component; +package com.tencent.supersonic.chat.core.query; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; +import com.tencent.supersonic.chat.api.pojo.SemanticSchema; import com.tencent.supersonic.chat.api.pojo.response.QueryResult; import org.apache.calcite.sql.parser.SqlParseException; @@ -14,7 +15,7 @@ public interface SemanticQuery { QueryResult execute(User user) throws SqlParseException; - void initS2Sql(User user); + void initS2Sql(SemanticSchema semanticSchema, User user); String explain(User user); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/LLMSemanticQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/LLMSemanticQuery.java new file mode 100644 index 000000000..490d96c58 --- /dev/null +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/LLMSemanticQuery.java @@ -0,0 +1,8 @@ +package com.tencent.supersonic.chat.core.query.llm; + +import com.tencent.supersonic.chat.core.query.BaseSemanticQuery; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public abstract class LLMSemanticQuery extends BaseSemanticQuery { +} diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/analytics/LLMAnswerReq.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/analytics/LLMAnswerReq.java similarity index 66% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/analytics/LLMAnswerReq.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/analytics/LLMAnswerReq.java index 27723d3c5..71efa5e66 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/analytics/LLMAnswerReq.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/analytics/LLMAnswerReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.query.llm.analytics; +package com.tencent.supersonic.chat.core.query.llm.analytics; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/analytics/LLMAnswerResp.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/analytics/LLMAnswerResp.java similarity index 61% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/analytics/LLMAnswerResp.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/analytics/LLMAnswerResp.java index bce185a30..b8037c9e8 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/analytics/LLMAnswerResp.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/analytics/LLMAnswerResp.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.query.llm.analytics; +package com.tencent.supersonic.chat.core.query.llm.analytics; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/analytics/MetricAnalyzeQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/analytics/MetricAnalyzeQuery.java similarity index 90% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/analytics/MetricAnalyzeQuery.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/analytics/MetricAnalyzeQuery.java index c7e9e2712..667ea3fc3 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/analytics/MetricAnalyzeQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/analytics/MetricAnalyzeQuery.java @@ -1,25 +1,26 @@ -package com.tencent.supersonic.chat.query.llm.analytics; +package com.tencent.supersonic.chat.core.query.llm.analytics; import com.google.common.collect.Lists; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; +import com.tencent.supersonic.chat.api.pojo.SemanticSchema; import com.tencent.supersonic.chat.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryState; -import com.tencent.supersonic.chat.config.OptimizationConfig; -import com.tencent.supersonic.chat.query.QueryManager; -import com.tencent.supersonic.chat.query.llm.LLMSemanticQuery; -import com.tencent.supersonic.chat.utils.ComponentFactory; -import com.tencent.supersonic.chat.utils.QueryReqBuilder; +import com.tencent.supersonic.chat.core.config.OptimizationConfig; +import com.tencent.supersonic.chat.core.knowledge.semantic.SemanticInterpreter; +import com.tencent.supersonic.chat.core.query.QueryManager; +import com.tencent.supersonic.chat.core.query.llm.LLMSemanticQuery; +import com.tencent.supersonic.chat.core.utils.ComponentFactory; +import com.tencent.supersonic.chat.core.utils.QueryReqBuilder; import com.tencent.supersonic.common.pojo.Aggregator; import com.tencent.supersonic.common.pojo.QueryColumn; -import com.tencent.supersonic.common.pojo.enums.QueryType; import com.tencent.supersonic.common.pojo.enums.AggOperatorEnum; +import com.tencent.supersonic.common.pojo.enums.QueryType; import com.tencent.supersonic.common.util.ContextUtils; -import com.tencent.supersonic.headless.api.response.QueryResultWithSchemaResp; import com.tencent.supersonic.headless.api.request.QueryStructReq; +import com.tencent.supersonic.headless.api.response.QueryResultWithSchemaResp; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -79,8 +80,8 @@ public class MetricAnalyzeQuery extends LLMSemanticQuery { } @Override - public void initS2Sql(User user) { - initS2SqlByStruct(); + public void initS2Sql(SemanticSchema semanticSchema, User user) { + initS2SqlByStruct(semanticSchema); } protected QueryStructReq convertQueryStruct() { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/s2sql/LLMReq.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/s2sql/LLMReq.java similarity index 96% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/s2sql/LLMReq.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/s2sql/LLMReq.java index 30d7fbf3f..effaf9d39 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/s2sql/LLMReq.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/s2sql/LLMReq.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.query.llm.s2sql; +package com.tencent.supersonic.chat.core.query.llm.s2sql; import com.fasterxml.jackson.annotation.JsonValue; import java.util.List; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/s2sql/LLMResp.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/s2sql/LLMResp.java similarity index 87% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/s2sql/LLMResp.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/s2sql/LLMResp.java index a29ae537d..6488cb8a4 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/s2sql/LLMResp.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/s2sql/LLMResp.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.query.llm.s2sql; +package com.tencent.supersonic.chat.core.query.llm.s2sql; import java.util.List; import java.util.Map; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/s2sql/LLMSqlQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/s2sql/LLMSqlQuery.java similarity index 82% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/s2sql/LLMSqlQuery.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/s2sql/LLMSqlQuery.java index 11795a761..5ca48dbb4 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/s2sql/LLMSqlQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/s2sql/LLMSqlQuery.java @@ -1,14 +1,15 @@ -package com.tencent.supersonic.chat.query.llm.s2sql; +package com.tencent.supersonic.chat.core.query.llm.s2sql; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.api.component.SemanticInterpreter; +import com.tencent.supersonic.chat.api.pojo.SemanticSchema; +import com.tencent.supersonic.chat.core.knowledge.semantic.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryState; import com.tencent.supersonic.chat.api.pojo.response.SqlInfo; -import com.tencent.supersonic.chat.query.QueryManager; -import com.tencent.supersonic.chat.query.llm.LLMSemanticQuery; -import com.tencent.supersonic.chat.utils.ComponentFactory; -import com.tencent.supersonic.chat.utils.QueryReqBuilder; +import com.tencent.supersonic.chat.core.utils.ComponentFactory; +import com.tencent.supersonic.chat.core.utils.QueryReqBuilder; +import com.tencent.supersonic.chat.core.query.QueryManager; +import com.tencent.supersonic.chat.core.query.llm.LLMSemanticQuery; import com.tencent.supersonic.common.pojo.QueryColumn; import com.tencent.supersonic.headless.api.response.QueryResultWithSchemaResp; import com.tencent.supersonic.headless.api.request.QueryS2SQLReq; @@ -64,7 +65,7 @@ public class LLMSqlQuery extends LLMSemanticQuery { } @Override - public void initS2Sql(User user) { + public void initS2Sql(SemanticSchema semanticSchema, User user) { SqlInfo sqlInfo = parseInfo.getSqlInfo(); sqlInfo.setCorrectS2SQL(sqlInfo.getS2SQL()); } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/s2sql/LLMSqlResp.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/s2sql/LLMSqlResp.java similarity index 78% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/s2sql/LLMSqlResp.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/s2sql/LLMSqlResp.java index 38c36c66e..530cce791 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/s2sql/LLMSqlResp.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/llm/s2sql/LLMSqlResp.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.query.llm.s2sql; +package com.tencent.supersonic.chat.core.query.llm.s2sql; import java.util.List; import java.util.Map; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/ParamOption.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/ParamOption.java similarity index 91% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/ParamOption.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/ParamOption.java index 7bee4471a..ea1b7f386 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/ParamOption.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/ParamOption.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.query.plugin; +package com.tencent.supersonic.chat.core.query.plugin; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/PluginSemanticQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/PluginSemanticQuery.java similarity index 88% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/PluginSemanticQuery.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/PluginSemanticQuery.java index 39a827f56..6ca9e0790 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/PluginSemanticQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/PluginSemanticQuery.java @@ -1,14 +1,15 @@ -package com.tencent.supersonic.chat.query.plugin; +package com.tencent.supersonic.chat.core.query.plugin; import com.google.common.collect.Lists; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; +import com.tencent.supersonic.chat.api.pojo.SemanticSchema; import com.tencent.supersonic.chat.api.pojo.request.QueryFilter; import com.tencent.supersonic.chat.api.pojo.request.QueryFilters; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; -import com.tencent.supersonic.chat.plugin.PluginParseResult; -import com.tencent.supersonic.chat.query.BaseSemanticQuery; +import com.tencent.supersonic.chat.core.plugin.PluginParseResult; +import com.tencent.supersonic.chat.core.query.BaseSemanticQuery; import lombok.extern.slf4j.Slf4j; import org.springframework.util.CollectionUtils; import java.util.HashMap; @@ -24,7 +25,7 @@ public abstract class PluginSemanticQuery extends BaseSemanticQuery { } @Override - public void initS2Sql(User user) { + public void initS2Sql(SemanticSchema semanticSchema, User user) { } @@ -51,8 +52,8 @@ public abstract class PluginSemanticQuery extends BaseSemanticQuery { List schemaElementMatchList = parseInfo.getElementMatches(); if (!CollectionUtils.isEmpty(schemaElementMatchList)) { schemaElementMatchList.stream().filter(schemaElementMatch -> - SchemaElementType.VALUE.equals(schemaElementMatch.getElement().getType()) - || SchemaElementType.ID.equals(schemaElementMatch.getElement().getType())) + SchemaElementType.VALUE.equals(schemaElementMatch.getElement().getType()) + || SchemaElementType.ID.equals(schemaElementMatch.getElement().getType())) .filter(schemaElementMatch -> schemaElementMatch.getSimilarity() == 1.0) .forEach(schemaElementMatch -> { Object queryFilterValue = filterValueMap.get(schemaElementMatch.getElement().getId()); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/WebBase.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/WebBase.java similarity index 84% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/WebBase.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/WebBase.java index 82e6932ec..98cec1529 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/WebBase.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/WebBase.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.query.plugin; +package com.tencent.supersonic.chat.core.query.plugin; import com.google.common.collect.Lists; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/webpage/WebPageQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/webpage/WebPageQuery.java similarity index 83% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/webpage/WebPageQuery.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/webpage/WebPageQuery.java index a8df818a6..b5f1d0d65 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/webpage/WebPageQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/webpage/WebPageQuery.java @@ -1,13 +1,13 @@ -package com.tencent.supersonic.chat.query.plugin.webpage; +package com.tencent.supersonic.chat.core.query.plugin.webpage; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.chat.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryState; -import com.tencent.supersonic.chat.plugin.Plugin; -import com.tencent.supersonic.chat.plugin.PluginParseResult; -import com.tencent.supersonic.chat.query.QueryManager; -import com.tencent.supersonic.chat.query.plugin.PluginSemanticQuery; -import com.tencent.supersonic.chat.query.plugin.WebBase; +import com.tencent.supersonic.chat.core.plugin.Plugin; +import com.tencent.supersonic.chat.core.plugin.PluginParseResult; +import com.tencent.supersonic.chat.core.query.QueryManager; +import com.tencent.supersonic.chat.core.query.plugin.PluginSemanticQuery; +import com.tencent.supersonic.chat.core.query.plugin.WebBase; import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.util.JsonUtil; import lombok.extern.slf4j.Slf4j; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/webpage/WebPageResp.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/webpage/WebPageResp.java similarity index 68% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/webpage/WebPageResp.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/webpage/WebPageResp.java index 1071731f8..5084c536c 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/webpage/WebPageResp.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/webpage/WebPageResp.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.chat.query.plugin.webpage; +package com.tencent.supersonic.chat.core.query.plugin.webpage; -import com.tencent.supersonic.chat.query.plugin.WebBase; +import com.tencent.supersonic.chat.core.query.plugin.WebBase; import lombok.Data; import java.util.List; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/webservice/WebServiceQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/webservice/WebServiceQuery.java similarity index 90% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/webservice/WebServiceQuery.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/webservice/WebServiceQuery.java index ca5be8ffc..7ebde63e9 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/webservice/WebServiceQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/webservice/WebServiceQuery.java @@ -1,15 +1,15 @@ -package com.tencent.supersonic.chat.query.plugin.webservice; +package com.tencent.supersonic.chat.core.query.plugin.webservice; import com.alibaba.fastjson.JSON; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.chat.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryState; -import com.tencent.supersonic.chat.plugin.Plugin; -import com.tencent.supersonic.chat.plugin.PluginParseResult; -import com.tencent.supersonic.chat.query.QueryManager; -import com.tencent.supersonic.chat.query.plugin.ParamOption; -import com.tencent.supersonic.chat.query.plugin.PluginSemanticQuery; -import com.tencent.supersonic.chat.query.plugin.WebBase; +import com.tencent.supersonic.chat.core.plugin.Plugin; +import com.tencent.supersonic.chat.core.plugin.PluginParseResult; +import com.tencent.supersonic.chat.core.query.QueryManager; +import com.tencent.supersonic.chat.core.query.plugin.ParamOption; +import com.tencent.supersonic.chat.core.query.plugin.PluginSemanticQuery; +import com.tencent.supersonic.chat.core.query.plugin.WebBase; import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.pojo.QueryColumn; import com.tencent.supersonic.common.util.ContextUtils; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/webservice/WebServiceResp.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/webservice/WebServiceResp.java new file mode 100644 index 000000000..0fbab079e --- /dev/null +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/plugin/webservice/WebServiceResp.java @@ -0,0 +1,14 @@ +package com.tencent.supersonic.chat.core.query.plugin.webservice; + +import com.tencent.supersonic.chat.core.query.plugin.WebBase; +import lombok.Data; + + +@Data +public class WebServiceResp { + + private WebBase webBase; + + private Object result; + +} diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/QueryMatchOption.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/QueryMatchOption.java similarity index 96% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/QueryMatchOption.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/QueryMatchOption.java index 3f611c27a..080868b51 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/QueryMatchOption.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/QueryMatchOption.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.query.rule; +package com.tencent.supersonic.chat.core.query.rule; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/QueryMatcher.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/QueryMatcher.java similarity index 98% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/QueryMatcher.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/QueryMatcher.java index e28dc3040..352f4cc2f 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/QueryMatcher.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/QueryMatcher.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.query.rule; +package com.tencent.supersonic.chat.core.query.rule; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/RuleSemanticQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/RuleSemanticQuery.java similarity index 92% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/RuleSemanticQuery.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/RuleSemanticQuery.java index 98f523c27..7799fd646 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/RuleSemanticQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/RuleSemanticQuery.java @@ -1,10 +1,10 @@ -package com.tencent.supersonic.chat.query.rule; +package com.tencent.supersonic.chat.core.query.rule; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.api.component.SemanticInterpreter; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.knowledge.semantic.SemanticInterpreter; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; @@ -13,12 +13,11 @@ import com.tencent.supersonic.chat.api.pojo.SemanticSchema; import com.tencent.supersonic.chat.api.pojo.request.QueryFilter; import com.tencent.supersonic.chat.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryState; -import com.tencent.supersonic.chat.config.OptimizationConfig; -import com.tencent.supersonic.chat.query.BaseSemanticQuery; -import com.tencent.supersonic.chat.query.QueryManager; -import com.tencent.supersonic.chat.service.SemanticService; -import com.tencent.supersonic.chat.utils.ComponentFactory; -import com.tencent.supersonic.chat.utils.QueryReqBuilder; +import com.tencent.supersonic.chat.core.config.OptimizationConfig; +import com.tencent.supersonic.chat.core.query.BaseSemanticQuery; +import com.tencent.supersonic.chat.core.utils.ComponentFactory; +import com.tencent.supersonic.chat.core.utils.QueryReqBuilder; +import com.tencent.supersonic.chat.core.query.QueryManager; import com.tencent.supersonic.common.pojo.ModelCluster; import com.tencent.supersonic.common.pojo.QueryColumn; import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum; @@ -51,20 +50,18 @@ public abstract class RuleSemanticQuery extends BaseSemanticQuery { } public List match(List candidateElementMatches, - QueryContext queryCtx) { + QueryContext queryCtx) { return queryMatcher.match(candidateElementMatches); } @Override - public void initS2Sql(User user) { - initS2SqlByStruct(); + public void initS2Sql(SemanticSchema semanticSchema, User user) { + initS2SqlByStruct(semanticSchema); } - public void fillParseInfo(ChatContext chatContext) { + public void fillParseInfo(QueryContext queryContext, ChatContext chatContext) { parseInfo.setQueryMode(getQueryMode()); - - SemanticService schemaService = ContextUtils.getBean(SemanticService.class); - SemanticSchema semanticSchema = schemaService.getSemanticSchema(); + SemanticSchema semanticSchema = queryContext.getSemanticSchema(); fillSchemaElement(parseInfo, semanticSchema); fillScore(parseInfo); @@ -107,7 +104,7 @@ public abstract class RuleSemanticQuery extends BaseSemanticQuery { private void fillSchemaElement(SemanticParseInfo parseInfo, SemanticSchema semanticSchema) { Set modelIds = parseInfo.getElementMatches().stream().map(SchemaElementMatch::getElement) - .map(SchemaElement::getModel).collect(Collectors.toSet()); + .map(SchemaElement::getModel).collect(Collectors.toSet()); ModelCluster modelCluster = ModelCluster.build(modelIds); modelCluster.buildName(semanticSchema.getModelIdToName()); parseInfo.setModel(modelCluster); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricFilterQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/metric/MetricFilterQuery.java similarity index 92% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricFilterQuery.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/metric/MetricFilterQuery.java index a40d0dcc2..9c900fef0 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricFilterQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/metric/MetricFilterQuery.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.chat.query.rule.metric; +package com.tencent.supersonic.chat.core.query.rule.metric; import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.VALUE; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.OptionType.REQUIRED; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.OptionType.REQUIRED; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.chat.api.pojo.response.QueryResult; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricGroupByQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/metric/MetricGroupByQuery.java similarity index 63% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricGroupByQuery.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/metric/MetricGroupByQuery.java index a125cabeb..2eec00f67 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricGroupByQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/metric/MetricGroupByQuery.java @@ -1,12 +1,12 @@ -package com.tencent.supersonic.chat.query.rule.metric; +package com.tencent.supersonic.chat.core.query.rule.metric; import org.springframework.stereotype.Component; import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.DIMENSION; import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.VALUE; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.OptionType.OPTIONAL; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.OptionType.REQUIRED; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.OptionType.OPTIONAL; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.OptionType.REQUIRED; @Component public class MetricGroupByQuery extends MetricSemanticQuery { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricModelQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/metric/MetricModelQuery.java similarity index 75% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricModelQuery.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/metric/MetricModelQuery.java index 0f56420a1..d05d45476 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricModelQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/metric/MetricModelQuery.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.chat.query.rule.metric; +package com.tencent.supersonic.chat.core.query.rule.metric; import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.MODEL; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.OptionType.OPTIONAL; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.RequireNumberType.AT_MOST; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.OptionType.OPTIONAL; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.RequireNumberType.AT_MOST; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.chat.api.pojo.response.QueryResult; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/metric/MetricSemanticQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/metric/MetricSemanticQuery.java new file mode 100644 index 000000000..8ed82db07 --- /dev/null +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/metric/MetricSemanticQuery.java @@ -0,0 +1,264 @@ +package com.tencent.supersonic.chat.core.query.rule.metric; + +import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.METRIC; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.OptionType.REQUIRED; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST; +import static com.tencent.supersonic.common.pojo.Constants.DAY; +import static com.tencent.supersonic.common.pojo.Constants.DAY_FORMAT; +import static com.tencent.supersonic.common.pojo.Constants.DAY_FORMAT_INT; +import static com.tencent.supersonic.common.pojo.Constants.MONTH; +import static com.tencent.supersonic.common.pojo.Constants.MONTH_FORMAT; +import static com.tencent.supersonic.common.pojo.Constants.MONTH_FORMAT_INT; +import static com.tencent.supersonic.common.pojo.Constants.TIMES_FORMAT; +import static com.tencent.supersonic.common.pojo.Constants.TIME_FORMAT; +import static com.tencent.supersonic.common.pojo.Constants.WEEK; + +import com.tencent.supersonic.auth.api.authentication.pojo.User; +import com.tencent.supersonic.chat.api.pojo.SchemaElement; +import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; +import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; +import com.tencent.supersonic.chat.api.pojo.request.ChatDefaultConfigReq; +import com.tencent.supersonic.chat.api.pojo.response.AggregateInfo; +import com.tencent.supersonic.chat.api.pojo.response.ChatConfigRichResp; +import com.tencent.supersonic.chat.api.pojo.response.ChatDefaultRichConfigResp; +import com.tencent.supersonic.chat.api.pojo.response.MetricInfo; +import com.tencent.supersonic.chat.api.pojo.response.QueryResult; +import com.tencent.supersonic.chat.core.config.AggregatorConfig; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; +import com.tencent.supersonic.chat.core.query.rule.RuleSemanticQuery; +import com.tencent.supersonic.chat.core.utils.QueryReqBuilder; +import com.tencent.supersonic.common.pojo.DateConf; +import com.tencent.supersonic.common.pojo.DateConf.DateMode; +import com.tencent.supersonic.common.pojo.QueryColumn; +import com.tencent.supersonic.common.pojo.enums.AggOperatorEnum; +import com.tencent.supersonic.common.pojo.enums.RatioOverType; +import com.tencent.supersonic.common.util.ContextUtils; +import com.tencent.supersonic.common.util.DateUtils; +import com.tencent.supersonic.headless.api.request.QueryStructReq; +import com.tencent.supersonic.headless.api.response.QueryResultWithSchemaResp; +import java.text.DecimalFormat; +import java.time.DayOfWeek; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.YearMonth; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.CollectionUtils; + +@Slf4j +public abstract class MetricSemanticQuery extends RuleSemanticQuery { + + private static final Long METRIC_MAX_RESULTS = 365L; + + public MetricSemanticQuery() { + super(); + queryMatcher.addOption(METRIC, REQUIRED, AT_LEAST, 1); + } + + @Override + public List match(List candidateElementMatches, + QueryContext queryCtx) { + return super.match(candidateElementMatches, queryCtx); + } + + @Override + public void fillParseInfo(QueryContext queryContext, ChatContext chatContext) { + super.fillParseInfo(queryContext, chatContext); + + parseInfo.setLimit(METRIC_MAX_RESULTS); + if (parseInfo.getDateInfo() == null) { + ChatConfigRichResp chatConfig = queryContext.getModelIdToChatRichConfig().get(parseInfo.getModelId()); + ChatDefaultRichConfigResp defaultConfig = chatConfig.getChatAggRichConfig().getChatDefaultConfig(); + DateConf dateInfo = new DateConf(); + int unit = 1; + if (Objects.nonNull(defaultConfig) && Objects.nonNull(defaultConfig.getUnit())) { + unit = defaultConfig.getUnit(); + } + String startDate = LocalDate.now().plusDays(-unit).toString(); + String endDate = startDate; + + if (ChatDefaultConfigReq.TimeMode.LAST.equals(defaultConfig.getTimeMode())) { + dateInfo.setDateMode(DateConf.DateMode.BETWEEN); + } else if (ChatDefaultConfigReq.TimeMode.RECENT.equals(defaultConfig.getTimeMode())) { + dateInfo.setDateMode(DateConf.DateMode.RECENT); + endDate = LocalDate.now().plusDays(-1).toString(); + } + dateInfo.setUnit(unit); + dateInfo.setPeriod(defaultConfig.getPeriod()); + dateInfo.setStartDate(startDate); + dateInfo.setEndDate(endDate); + + parseInfo.setDateInfo(dateInfo); + } + } + + public void fillAggregateInfo(User user, QueryResult queryResult) { + if (Objects.nonNull(queryResult)) { + QueryResultWithSchemaResp queryResp = new QueryResultWithSchemaResp(); + queryResp.setColumns(queryResult.getQueryColumns()); + queryResp.setResultList(queryResult.getQueryResults()); + AggregateInfo aggregateInfo = getAggregateInfo(user, parseInfo, queryResp); + queryResult.setAggregateInfo(aggregateInfo); + } + } + + public AggregateInfo getAggregateInfo(User user, SemanticParseInfo semanticParseInfo, + QueryResultWithSchemaResp result) { + AggregatorConfig aggregatorConfig = ContextUtils.getBean(AggregatorConfig.class); + + if (CollectionUtils.isEmpty(semanticParseInfo.getMetrics()) || !aggregatorConfig.getEnableRatio()) { + return new AggregateInfo(); + } + List resultMetricNames = result.getColumns().stream().map(c -> c.getNameEn()) + .collect(Collectors.toList()); + Optional ratioMetric = semanticParseInfo.getMetrics().stream() + .filter(m -> resultMetricNames.contains(m.getBizName())).findFirst(); + if (ratioMetric.isPresent()) { + AggregateInfo aggregateInfo = new AggregateInfo(); + MetricInfo metricInfo = new MetricInfo(); + metricInfo.setStatistics(new HashMap<>()); + try { + String dateField = QueryReqBuilder.getDateField(semanticParseInfo.getDateInfo()); + + Optional lastDayOp = result.getResultList().stream().filter(r -> r.containsKey(dateField)) + .map(r -> r.get(dateField).toString()) + .sorted(Comparator.reverseOrder()).findFirst(); + if (!lastDayOp.isPresent()) { + return new AggregateInfo(); + } + Optional> lastValue = result.getResultList().stream() + .filter(r -> r.get(dateField).toString().equals(lastDayOp.get())).findFirst(); + if (lastValue.isPresent() && lastValue.get().containsKey(ratioMetric.get().getBizName())) { + DecimalFormat df = new DecimalFormat("#.####"); + metricInfo.setValue(df.format(lastValue.get().get(ratioMetric.get().getBizName()))); + } + metricInfo.setDate(lastValue.get().get(dateField).toString()); + + CompletableFuture metricInfoRoll = CompletableFuture + .supplyAsync(() -> { + return queryRatio(user, semanticParseInfo, ratioMetric.get(), AggOperatorEnum.RATIO_ROLL, + result); + }); + CompletableFuture metricInfoOver = CompletableFuture + .supplyAsync(() -> { + return queryRatio(user, semanticParseInfo, ratioMetric.get(), AggOperatorEnum.RATIO_OVER, + result); + }); + CompletableFuture.allOf(metricInfoRoll, metricInfoOver); + metricInfo.setName(metricInfoRoll.get().getName()); + metricInfo.setValue(metricInfoRoll.get().getValue()); + metricInfo.getStatistics().putAll(metricInfoRoll.get().getStatistics()); + metricInfo.getStatistics().putAll(metricInfoOver.get().getStatistics()); + aggregateInfo.getMetricInfos().add(metricInfo); + } catch (Exception e) { + log.error("queryRatio error {}", e); + } + return aggregateInfo; + } + return new AggregateInfo(); + } + + private MetricInfo queryRatio(User user, SemanticParseInfo semanticParseInfo, SchemaElement metric, + AggOperatorEnum aggOperatorEnum, QueryResultWithSchemaResp results) { + MetricInfo metricInfo = new MetricInfo(); + metricInfo.setStatistics(new HashMap<>()); + QueryStructReq queryStructReq = QueryReqBuilder.buildStructRatioReq(semanticParseInfo, metric, aggOperatorEnum); + DateConf dateInfo = semanticParseInfo.getDateInfo(); + String dateField = QueryReqBuilder.getDateField(dateInfo); + + queryStructReq.setGroups(new ArrayList<>(Arrays.asList(dateField))); + queryStructReq.setDateInfo(getRatioDateConf(aggOperatorEnum, semanticParseInfo, results)); + + QueryResultWithSchemaResp queryResp = semanticInterpreter.queryByStruct(queryStructReq, user); + + if (Objects.nonNull(queryResp) && !CollectionUtils.isEmpty(queryResp.getResultList())) { + + Map result = queryResp.getResultList().get(0); + Optional valueColumn = queryResp.getColumns().stream() + .filter(c -> c.getNameEn().equals(metric.getBizName())).findFirst(); + if (valueColumn.isPresent()) { + + String valueField = String.format("%s_%s", valueColumn.get().getNameEn(), + aggOperatorEnum.getOperator()); + if (result.containsKey(valueColumn.get().getNameEn())) { + DecimalFormat df = new DecimalFormat("#.####"); + metricInfo.setValue(df.format(result.get(valueColumn.get().getNameEn()))); + } + String ratio = ""; + if (Objects.nonNull(result.get(valueField))) { + ratio = String.format("%.2f", + (Double.valueOf(result.get(valueField).toString()) * 100)) + "%"; + } + String statisticsRollName = RatioOverType.DAY_ON_DAY.getShowName(); + String statisticsOverName = RatioOverType.WEEK_ON_DAY.getShowName(); + if (MONTH.equals(dateInfo.getPeriod())) { + statisticsRollName = RatioOverType.MONTH_ON_MONTH.getShowName(); + statisticsOverName = RatioOverType.YEAR_ON_MONTH.getShowName(); + } + if (WEEK.equals(dateInfo.getPeriod())) { + statisticsRollName = RatioOverType.WEEK_ON_WEEK.getShowName(); + statisticsOverName = RatioOverType.MONTH_ON_WEEK.getShowName(); + } + metricInfo.getStatistics().put(aggOperatorEnum.equals(AggOperatorEnum.RATIO_ROLL) ? statisticsRollName + : statisticsOverName, + ratio); + } + metricInfo.setName(metric.getName()); + } + return metricInfo; + } + + private DateConf getRatioDateConf(AggOperatorEnum aggOperatorEnum, SemanticParseInfo semanticParseInfo, + QueryResultWithSchemaResp results) { + String dateField = QueryReqBuilder.getDateField(semanticParseInfo.getDateInfo()); + Optional lastDayOp = results.getResultList().stream() + .map(r -> r.get(dateField).toString()) + .sorted(Comparator.reverseOrder()).findFirst(); + if (lastDayOp.isPresent()) { + String lastDay = lastDayOp.get(); + DateConf dateConf = new DateConf(); + dateConf.setPeriod(semanticParseInfo.getDateInfo().getPeriod()); + dateConf.setDateMode(DateMode.LIST); + List dayList = new ArrayList<>(); + dayList.add(lastDay); + String start = ""; + if (DAY.equalsIgnoreCase(semanticParseInfo.getDateInfo().getPeriod())) { + DateTimeFormatter formatter = DateUtils.getDateFormatter(lastDay, + new String[]{DAY_FORMAT, DAY_FORMAT_INT}); + LocalDate end = LocalDate.parse(lastDay, formatter); + start = aggOperatorEnum.equals(AggOperatorEnum.RATIO_ROLL) ? end.minusDays(1).format(formatter) + : end.minusWeeks(1).format(formatter); + } + if (WEEK.equalsIgnoreCase(semanticParseInfo.getDateInfo().getPeriod())) { + DateTimeFormatter formatter = DateUtils.getTimeFormatter(lastDay, + new String[]{TIMES_FORMAT, DAY_FORMAT, TIME_FORMAT, DAY_FORMAT_INT}); + LocalDateTime end = LocalDateTime.parse(lastDay, formatter); + start = aggOperatorEnum.equals(AggOperatorEnum.RATIO_ROLL) ? end.minusWeeks(1).format(formatter) + : end.minusMonths(1).with(DayOfWeek.MONDAY).format(formatter); + } + if (MONTH.equalsIgnoreCase(semanticParseInfo.getDateInfo().getPeriod())) { + DateTimeFormatter formatter = DateUtils.getDateFormatter(lastDay, + new String[]{MONTH_FORMAT, MONTH_FORMAT_INT}); + YearMonth end = YearMonth.parse(lastDay, formatter); + start = aggOperatorEnum.equals(AggOperatorEnum.RATIO_ROLL) ? end.minusMonths(1).format(formatter) + : end.minusYears(1).format(formatter); + } + dayList.add(start); + dateConf.setDateList(dayList); + return dateConf; + + } + return semanticParseInfo.getDateInfo(); + } +} diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricTagQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/metric/MetricTagQuery.java similarity index 92% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricTagQuery.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/metric/MetricTagQuery.java index 04339e908..fcf238b1d 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricTagQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/metric/MetricTagQuery.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.chat.query.rule.metric; +package com.tencent.supersonic.chat.core.query.rule.metric; import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.ENTITY; import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.ID; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.OptionType.REQUIRED; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.OptionType.REQUIRED; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.chat.api.pojo.response.QueryResult; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricTopNQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/metric/MetricTopNQuery.java similarity index 74% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricTopNQuery.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/metric/MetricTopNQuery.java index 93c07a464..969787ae9 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricTopNQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/metric/MetricTopNQuery.java @@ -1,24 +1,23 @@ -package com.tencent.supersonic.chat.query.rule.metric; +package com.tencent.supersonic.chat.core.query.rule.metric; + +import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.DIMENSION; +import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.VALUE; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.OptionType.OPTIONAL; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.OptionType.REQUIRED; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST; +import static com.tencent.supersonic.common.pojo.Constants.DESC_UPPER; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.common.pojo.Order; import com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum; -import org.springframework.stereotype.Component; - import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; - -import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.DIMENSION; -import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.VALUE; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.OptionType.OPTIONAL; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.OptionType.REQUIRED; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST; -import static com.tencent.supersonic.common.pojo.Constants.DESC_UPPER; +import org.springframework.stereotype.Component; @Component public class MetricTopNQuery extends MetricSemanticQuery { @@ -36,7 +35,7 @@ public class MetricTopNQuery extends MetricSemanticQuery { @Override public List match(List candidateElementMatches, - QueryContext queryCtx) { + QueryContext queryCtx) { Matcher matcher = INTENT_PATTERN.matcher(queryCtx.getRequest().getQueryText()); if (matcher.matches()) { return super.match(candidateElementMatches, queryCtx); @@ -50,8 +49,8 @@ public class MetricTopNQuery extends MetricSemanticQuery { } @Override - public void fillParseInfo(ChatContext chatContext) { - super.fillParseInfo(chatContext); + public void fillParseInfo(QueryContext queryContext, ChatContext chatContext) { + super.fillParseInfo(queryContext, chatContext); parseInfo.setLimit(ORDERBY_MAX_RESULTS); parseInfo.setScore(parseInfo.getScore() + 2.0); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/tag/TagDetailQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/tag/TagDetailQuery.java similarity index 69% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/tag/TagDetailQuery.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/tag/TagDetailQuery.java index 841672eeb..16b97ba78 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/tag/TagDetailQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/tag/TagDetailQuery.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.chat.query.rule.tag; +package com.tencent.supersonic.chat.core.query.rule.tag; import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.DIMENSION; import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.ID; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.OptionType.REQUIRED; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.OptionType.REQUIRED; import org.springframework.stereotype.Component; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/tag/TagFilterQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/tag/TagFilterQuery.java similarity index 66% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/tag/TagFilterQuery.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/tag/TagFilterQuery.java index d2a8f2349..60b90c6ef 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/tag/TagFilterQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/tag/TagFilterQuery.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.chat.query.rule.tag; +package com.tencent.supersonic.chat.core.query.rule.tag; import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.VALUE; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.OptionType.REQUIRED; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.OptionType.REQUIRED; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/tag/TagIdQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/tag/TagIdQuery.java similarity index 62% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/tag/TagIdQuery.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/tag/TagIdQuery.java index 6ba6529bd..60e1c7ed7 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/tag/TagIdQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/tag/TagIdQuery.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.chat.query.rule.tag; +package com.tencent.supersonic.chat.core.query.rule.tag; import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.ID; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.OptionType.REQUIRED; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.OptionType.REQUIRED; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST; import org.springframework.stereotype.Component; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/tag/TagListQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/tag/TagListQuery.java similarity index 71% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/tag/TagListQuery.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/tag/TagListQuery.java index 0c843e33b..aa6494b39 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/tag/TagListQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/tag/TagListQuery.java @@ -1,37 +1,32 @@ -package com.tencent.supersonic.chat.query.rule.tag; +package com.tencent.supersonic.chat.core.query.rule.tag; -import com.tencent.supersonic.chat.api.pojo.ChatContext; import com.tencent.supersonic.chat.api.pojo.ModelSchema; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; import com.tencent.supersonic.chat.api.pojo.response.ChatConfigRichResp; import com.tencent.supersonic.chat.api.pojo.response.ChatDefaultRichConfigResp; -import com.tencent.supersonic.chat.service.ConfigService; -import com.tencent.supersonic.chat.service.SemanticService; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.pojo.Order; -import com.tencent.supersonic.common.util.ContextUtils; -import org.apache.commons.collections.CollectionUtils; - import java.util.LinkedHashSet; import java.util.Objects; import java.util.Set; +import org.apache.commons.collections.CollectionUtils; public abstract class TagListQuery extends TagSemanticQuery { @Override - public void fillParseInfo(ChatContext chatContext) { - super.fillParseInfo(chatContext); - this.addEntityDetailAndOrderByMetric(parseInfo); + public void fillParseInfo(QueryContext queryContext, ChatContext chatContext) { + super.fillParseInfo(queryContext, chatContext); + this.addEntityDetailAndOrderByMetric(queryContext, parseInfo); } - private void addEntityDetailAndOrderByMetric(SemanticParseInfo parseInfo) { + private void addEntityDetailAndOrderByMetric(QueryContext queryContext, SemanticParseInfo parseInfo) { Long modelId = parseInfo.getModelId(); if (Objects.nonNull(modelId) && modelId > 0L) { - ConfigService configService = ContextUtils.getBean(ConfigService.class); - ChatConfigRichResp chaConfigRichDesc = configService.getConfigRichInfo(modelId); - SemanticService schemaService = ContextUtils.getBean(SemanticService.class); - ModelSchema modelSchema = schemaService.getModelSchema(parseInfo.getModelId()); + ChatConfigRichResp chaConfigRichDesc = queryContext.getModelIdToChatRichConfig().get(modelId); + ModelSchema modelSchema = queryContext.getSemanticSchema().getModelSchemaMap().get(parseInfo.getModelId()); if (chaConfigRichDesc != null && chaConfigRichDesc.getChatDetailRichConfig() != null && Objects.nonNull(modelSchema) && Objects.nonNull(modelSchema.getEntity())) { Set dimensions = new LinkedHashSet<>(); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/tag/TagSemanticQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/tag/TagSemanticQuery.java similarity index 65% rename from chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/tag/TagSemanticQuery.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/tag/TagSemanticQuery.java index 0486dc617..706f6807e 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/tag/TagSemanticQuery.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/query/rule/tag/TagSemanticQuery.java @@ -1,24 +1,21 @@ -package com.tencent.supersonic.chat.query.rule.tag; +package com.tencent.supersonic.chat.core.query.rule.tag; + +import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.ENTITY; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.OptionType.REQUIRED; +import static com.tencent.supersonic.chat.core.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; import com.tencent.supersonic.chat.api.pojo.response.ChatConfigRichResp; import com.tencent.supersonic.chat.api.pojo.response.ChatDefaultRichConfigResp; -import com.tencent.supersonic.chat.query.rule.RuleSemanticQuery; -import com.tencent.supersonic.chat.service.ConfigService; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; +import com.tencent.supersonic.chat.core.query.rule.RuleSemanticQuery; import com.tencent.supersonic.common.pojo.DateConf; import com.tencent.supersonic.common.pojo.enums.QueryType; -import com.tencent.supersonic.common.util.ContextUtils; -import lombok.extern.slf4j.Slf4j; - import java.time.LocalDate; import java.util.List; import java.util.Objects; - -import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.ENTITY; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.OptionType.REQUIRED; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST; +import lombok.extern.slf4j.Slf4j; @Slf4j public abstract class TagSemanticQuery extends RuleSemanticQuery { @@ -32,19 +29,18 @@ public abstract class TagSemanticQuery extends RuleSemanticQuery { @Override public List match(List candidateElementMatches, - QueryContext queryCtx) { + QueryContext queryCtx) { return super.match(candidateElementMatches, queryCtx); } @Override - public void fillParseInfo(ChatContext chatContext) { - super.fillParseInfo(chatContext); + public void fillParseInfo(QueryContext queryContext, ChatContext chatContext) { + super.fillParseInfo(queryContext, chatContext); parseInfo.setQueryType(QueryType.TAG); parseInfo.setLimit(TAG_MAX_RESULTS); if (parseInfo.getDateInfo() == null) { - ConfigService configService = ContextUtils.getBean(ConfigService.class); - ChatConfigRichResp chatConfig = configService.getConfigRichInfo(parseInfo.getModelId()); + ChatConfigRichResp chatConfig = queryContext.getModelIdToChatRichConfig().get(parseInfo.getModelId()); ChatDefaultRichConfigResp defaultConfig = chatConfig.getChatDetailRichConfig().getChatDefaultConfig(); int unit = 1; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/CacheUtils.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/CacheUtils.java similarity index 84% rename from chat/core/src/main/java/com/tencent/supersonic/chat/utils/CacheUtils.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/CacheUtils.java index c82f2b31a..0ca948845 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/CacheUtils.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/CacheUtils.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.chat.utils; +package com.tencent.supersonic.chat.core.utils; import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import java.util.concurrent.TimeUnit; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/ComponentFactory.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/ComponentFactory.java new file mode 100644 index 000000000..daa84906f --- /dev/null +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/ComponentFactory.java @@ -0,0 +1,65 @@ +package com.tencent.supersonic.chat.core.utils; + +import com.tencent.supersonic.chat.core.knowledge.semantic.SemanticInterpreter; +import com.tencent.supersonic.chat.core.parser.JavaLLMProxy; +import com.tencent.supersonic.chat.core.parser.LLMProxy; +import com.tencent.supersonic.chat.core.parser.sql.llm.ModelResolver; +import com.tencent.supersonic.common.util.ContextUtils; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.core.io.support.SpringFactoriesLoader; + +@Slf4j +public class ComponentFactory { + + private static SemanticInterpreter semanticInterpreter; + private static LLMProxy llmProxy; + private static ModelResolver modelResolver; + + public static SemanticInterpreter getSemanticLayer() { + if (Objects.isNull(semanticInterpreter)) { + semanticInterpreter = init(SemanticInterpreter.class); + } + return semanticInterpreter; + } + + public static LLMProxy getLLMProxy() { + //1.Preferentially retrieve from environment variables + String llmProxyEnv = System.getenv("llmProxy"); + if (StringUtils.isNotBlank(llmProxyEnv)) { + Map implementations = ContextUtils.getBeansOfType(LLMProxy.class); + llmProxy = implementations.entrySet().stream() + .filter(entry -> entry.getKey().equalsIgnoreCase(llmProxyEnv)) + .map(Map.Entry::getValue) + .findFirst() + .orElse(null); + } + //2.default JavaLLMProxy + if (Objects.isNull(llmProxy)) { + llmProxy = ContextUtils.getBean(JavaLLMProxy.class); + } + log.info("llmProxy:{}", llmProxy); + return llmProxy; + } + + public static ModelResolver getModelResolver() { + if (Objects.isNull(modelResolver)) { + modelResolver = init(ModelResolver.class); + } + return modelResolver; + } + + private static List init(Class factoryType, List list) { + list.addAll(SpringFactoriesLoader.loadFactories(factoryType, + Thread.currentThread().getContextClassLoader())); + return list; + } + + private static T init(Class factoryType) { + return SpringFactoriesLoader.loadFactories(factoryType, + Thread.currentThread().getContextClassLoader()).get(0); + } +} \ No newline at end of file diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictQueryHelper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/DictQueryHelper.java similarity index 97% rename from chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictQueryHelper.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/DictQueryHelper.java index 34deac2ab..e6d6e83e8 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictQueryHelper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/DictQueryHelper.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.utils; +package com.tencent.supersonic.chat.core.utils; import static com.tencent.supersonic.common.pojo.Constants.AND_UPPER; import static com.tencent.supersonic.common.pojo.Constants.APOSTROPHE; @@ -7,9 +7,9 @@ import static com.tencent.supersonic.common.pojo.Constants.SPACE; import static com.tencent.supersonic.common.pojo.Constants.UNDERLINE_DOUBLE; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.api.component.SemanticInterpreter; -import com.tencent.supersonic.chat.config.DefaultMetric; -import com.tencent.supersonic.chat.config.Dim4Dict; +import com.tencent.supersonic.chat.core.knowledge.semantic.SemanticInterpreter; +import com.tencent.supersonic.chat.core.config.DefaultMetric; +import com.tencent.supersonic.chat.core.config.Dim4Dict; import com.tencent.supersonic.common.pojo.Aggregator; import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.pojo.DateConf; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/FileHelper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/FileHelper.java similarity index 98% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/FileHelper.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/FileHelper.java index 46df71d81..2fb3121e5 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/FileHelper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/FileHelper.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.utils; +package com.tencent.supersonic.chat.core.utils; import static com.hankcs.hanlp.HanLP.Config.CustomDictionaryPath; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/HanlpHelper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/HanlpHelper.java similarity index 96% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/HanlpHelper.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/HanlpHelper.java index 84f1a970d..136e3da09 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/HanlpHelper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/HanlpHelper.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.utils; +package com.tencent.supersonic.chat.core.utils; import static com.hankcs.hanlp.HanLP.Config.CustomDictionaryPath; @@ -8,12 +8,12 @@ import com.hankcs.hanlp.dictionary.CoreDictionary; import com.hankcs.hanlp.dictionary.DynamicCustomDictionary; import com.hankcs.hanlp.seg.Segment; import com.hankcs.hanlp.seg.common.Term; +import com.tencent.supersonic.chat.core.knowledge.DictWord; +import com.tencent.supersonic.chat.core.knowledge.HadoopFileIOAdapter; +import com.tencent.supersonic.chat.core.knowledge.MapResult; +import com.tencent.supersonic.chat.core.knowledge.MultiCustomDictionary; +import com.tencent.supersonic.chat.core.knowledge.SearchService; import com.tencent.supersonic.common.pojo.enums.DictWordType; -import com.tencent.supersonic.knowledge.dictionary.DictWord; -import com.tencent.supersonic.knowledge.dictionary.HadoopFileIOAdapter; -import com.tencent.supersonic.knowledge.dictionary.MapResult; -import com.tencent.supersonic.knowledge.dictionary.MultiCustomDictionary; -import com.tencent.supersonic.knowledge.service.SearchService; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/HdfsFileHelper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/HdfsFileHelper.java similarity index 98% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/HdfsFileHelper.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/HdfsFileHelper.java index 2d4943954..d429e8c57 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/HdfsFileHelper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/HdfsFileHelper.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.utils; +package com.tencent.supersonic.chat.core.utils; import static com.hankcs.hanlp.HanLP.Config.CustomDictionaryPath; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/ModelClusterBuilder.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/ModelClusterBuilder.java similarity index 96% rename from chat/core/src/main/java/com/tencent/supersonic/chat/utils/ModelClusterBuilder.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/ModelClusterBuilder.java index 218c58eb6..853465e21 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/ModelClusterBuilder.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/ModelClusterBuilder.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.utils; +package com.tencent.supersonic.chat.core.utils; import com.tencent.supersonic.chat.api.pojo.ModelSchema; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/NatureHelper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/NatureHelper.java similarity index 98% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/NatureHelper.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/NatureHelper.java index bb536839c..e877bbb8d 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/NatureHelper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/NatureHelper.java @@ -1,10 +1,10 @@ -package com.tencent.supersonic.knowledge.utils; +package com.tencent.supersonic.chat.core.utils; import com.hankcs.hanlp.corpus.tag.Nature; import com.hankcs.hanlp.seg.common.Term; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; +import com.tencent.supersonic.chat.core.knowledge.ModelInfoStat; import com.tencent.supersonic.common.pojo.enums.DictWordType; -import com.tencent.supersonic.knowledge.dictionary.ModelInfoStat; import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/QueryReqBuilder.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/QueryReqBuilder.java similarity index 98% rename from chat/core/src/main/java/com/tencent/supersonic/chat/utils/QueryReqBuilder.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/QueryReqBuilder.java index ab46acd72..85d9a819a 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/QueryReqBuilder.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/QueryReqBuilder.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.chat.utils; +package com.tencent.supersonic.chat.core.utils; import com.google.common.collect.Lists; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; -import com.tencent.supersonic.chat.query.QueryManager; +import com.tencent.supersonic.chat.core.query.QueryManager; import com.tencent.supersonic.common.pojo.Aggregator; import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.pojo.DateConf; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/SchemaMatchHelper.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/SchemaMatchHelper.java similarity index 96% rename from chat/core/src/main/java/com/tencent/supersonic/chat/utils/SchemaMatchHelper.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/SchemaMatchHelper.java index dfaeb6532..3bcf2157f 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/SchemaMatchHelper.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/SchemaMatchHelper.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.utils; +package com.tencent.supersonic.chat.core.utils; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/SimilarQueryManager.java b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/SimilarQueryManager.java similarity index 99% rename from chat/core/src/main/java/com/tencent/supersonic/chat/utils/SimilarQueryManager.java rename to chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/SimilarQueryManager.java index ca7922267..94e8f1d78 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/SimilarQueryManager.java +++ b/chat/core/src/main/java/com/tencent/supersonic/chat/core/utils/SimilarQueryManager.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.utils; +package com.tencent.supersonic.chat.core.utils; import com.google.common.collect.Lists; import com.tencent.supersonic.chat.api.pojo.request.SimilarQueryReq; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/LLMProxy.java b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/LLMProxy.java deleted file mode 100644 index ba47ea5c2..000000000 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/LLMProxy.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.tencent.supersonic.chat.parser; - -import com.tencent.supersonic.chat.api.pojo.QueryContext; -import com.tencent.supersonic.chat.parser.plugin.function.FunctionReq; -import com.tencent.supersonic.chat.parser.plugin.function.FunctionResp; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMReq; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMResp; - -/** - * LLMProxy encapsulates functions performed by LLMs so that multiple - * orchestration frameworks (e.g. LangChain in python, LangChain4j in java) - * could be used. - */ -public interface LLMProxy { - - boolean isSkip(QueryContext queryContext); - - LLMResp query2sql(LLMReq llmReq, String modelClusterKey); - - FunctionResp requestFunction(FunctionReq functionReq); - -} diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/ModelResolver.java b/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/ModelResolver.java deleted file mode 100644 index ff9e5de64..000000000 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/parser/sql/llm/ModelResolver.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.tencent.supersonic.chat.parser.sql.llm; - - -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; -import java.util.Set; - -public interface ModelResolver { - - String resolve(QueryContext queryContext, ChatContext chatCtx, Set restrictiveModels); - -} diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/StatisticsRepository.java b/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/StatisticsRepository.java deleted file mode 100644 index 2b5967808..000000000 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/StatisticsRepository.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.tencent.supersonic.chat.persistence.repository; - - -import com.tencent.supersonic.chat.persistence.dataobject.StatisticsDO; - -import java.util.List; - -public interface StatisticsRepository { - - void batchSaveStatistics(List list); -} diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/LLMSemanticQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/LLMSemanticQuery.java deleted file mode 100644 index 283b774ff..000000000 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/llm/LLMSemanticQuery.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.tencent.supersonic.chat.query.llm; - -import com.tencent.supersonic.chat.query.BaseSemanticQuery; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -public abstract class LLMSemanticQuery extends BaseSemanticQuery { -} diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/webservice/WebServiceResp.java b/chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/webservice/WebServiceResp.java deleted file mode 100644 index 6ff9a377a..000000000 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/plugin/webservice/WebServiceResp.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.tencent.supersonic.chat.query.plugin.webservice; - -import com.tencent.supersonic.chat.query.plugin.WebBase; -import lombok.Data; - - -@Data -public class WebServiceResp { - - private WebBase webBase; - - private Object result; - -} diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricSemanticQuery.java b/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricSemanticQuery.java deleted file mode 100644 index e72997715..000000000 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/query/rule/metric/MetricSemanticQuery.java +++ /dev/null @@ -1,86 +0,0 @@ -package com.tencent.supersonic.chat.query.rule.metric; - -import static com.tencent.supersonic.chat.api.pojo.SchemaElementType.METRIC; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.OptionType.REQUIRED; -import static com.tencent.supersonic.chat.query.rule.QueryMatchOption.RequireNumberType.AT_LEAST; - -import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; -import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; -import com.tencent.supersonic.chat.api.pojo.request.ChatDefaultConfigReq; -import com.tencent.supersonic.chat.api.pojo.response.AggregateInfo; -import com.tencent.supersonic.chat.api.pojo.response.ChatConfigRichResp; -import com.tencent.supersonic.chat.api.pojo.response.ChatDefaultRichConfigResp; -import com.tencent.supersonic.chat.api.pojo.response.QueryResult; -import com.tencent.supersonic.chat.query.rule.RuleSemanticQuery; -import com.tencent.supersonic.chat.service.ConfigService; -import com.tencent.supersonic.chat.service.SemanticService; -import com.tencent.supersonic.common.pojo.DateConf; -import com.tencent.supersonic.common.util.ContextUtils; -import com.tencent.supersonic.headless.api.response.QueryResultWithSchemaResp; -import java.time.LocalDate; -import java.util.List; -import java.util.Objects; -import lombok.extern.slf4j.Slf4j; - -@Slf4j -public abstract class MetricSemanticQuery extends RuleSemanticQuery { - - private static final Long METRIC_MAX_RESULTS = 365L; - - public MetricSemanticQuery() { - super(); - queryMatcher.addOption(METRIC, REQUIRED, AT_LEAST, 1); - } - - @Override - public List match(List candidateElementMatches, - QueryContext queryCtx) { - return super.match(candidateElementMatches, queryCtx); - } - - @Override - public void fillParseInfo(ChatContext chatContext) { - super.fillParseInfo(chatContext); - - parseInfo.setLimit(METRIC_MAX_RESULTS); - if (parseInfo.getDateInfo() == null) { - ConfigService configService = ContextUtils.getBean(ConfigService.class); - ChatConfigRichResp chatConfig = configService.getConfigRichInfo(parseInfo.getModelId()); - ChatDefaultRichConfigResp defaultConfig = chatConfig.getChatAggRichConfig().getChatDefaultConfig(); - DateConf dateInfo = new DateConf(); - int unit = 1; - if (Objects.nonNull(defaultConfig) && Objects.nonNull(defaultConfig.getUnit())) { - unit = defaultConfig.getUnit(); - } - String startDate = LocalDate.now().plusDays(-unit).toString(); - String endDate = startDate; - - if (ChatDefaultConfigReq.TimeMode.LAST.equals(defaultConfig.getTimeMode())) { - dateInfo.setDateMode(DateConf.DateMode.BETWEEN); - } else if (ChatDefaultConfigReq.TimeMode.RECENT.equals(defaultConfig.getTimeMode())) { - dateInfo.setDateMode(DateConf.DateMode.RECENT); - endDate = LocalDate.now().plusDays(-1).toString(); - } - dateInfo.setUnit(unit); - dateInfo.setPeriod(defaultConfig.getPeriod()); - dateInfo.setStartDate(startDate); - dateInfo.setEndDate(endDate); - - parseInfo.setDateInfo(dateInfo); - } - } - - public void fillAggregateInfo(User user, QueryResult queryResult) { - if (Objects.nonNull(queryResult)) { - QueryResultWithSchemaResp queryResp = new QueryResultWithSchemaResp(); - queryResp.setColumns(queryResult.getQueryColumns()); - queryResp.setResultList(queryResult.getQueryResults()); - AggregateInfo aggregateInfo = ContextUtils.getBean(SemanticService.class) - .getAggregateInfo(user, parseInfo, queryResp); - queryResult.setAggregateInfo(aggregateInfo); - } - } - -} diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/AgentService.java b/chat/core/src/main/java/com/tencent/supersonic/chat/service/AgentService.java deleted file mode 100644 index 6ca47c236..000000000 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/AgentService.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.tencent.supersonic.chat.service; - -import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.agent.Agent; -import com.tencent.supersonic.chat.agent.AgentToolType; -import com.tencent.supersonic.chat.agent.NL2SQLTool; -import java.util.List; -import java.util.Set; - -public interface AgentService { - - List getAgents(); - - void createAgent(Agent agent, User user); - - void updateAgent(Agent agent, User user); - - Agent getAgent(Integer id); - - void deleteAgent(Integer id); - - List getParserTools(Integer agentId, AgentToolType agentToolType); - - Set getModelIds(Integer agentId, AgentToolType agentToolType); - - boolean containsAllModel(Set detectModelIds); -} diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/StatisticsService.java b/chat/core/src/main/java/com/tencent/supersonic/chat/service/StatisticsService.java deleted file mode 100644 index d3908fe49..000000000 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/StatisticsService.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.tencent.supersonic.chat.service; - -import com.tencent.supersonic.chat.persistence.dataobject.StatisticsDO; - -import java.util.List; - -public interface StatisticsService { - void batchSaveStatistics(List list); -} diff --git a/chat/core/src/main/python/few_shot_example/sql_examplar.py b/chat/core/src/main/python/few_shot_example/sql_examplar.py deleted file mode 100644 index 8d5f3a886..000000000 --- a/chat/core/src/main/python/few_shot_example/sql_examplar.py +++ /dev/null @@ -1,374 +0,0 @@ -examplars= [ - { "currentDate":"2020-12-01", - "tableName":"内容库产品", - "fieldsList":"""["部门", "模块", "用户名", "访问次数", "访问人数", "访问时长", "数据日期"]""", - "question":"比较jackjchen和robinlee在内容库的访问次数", - "priorSchemaLinks":"""['jackjchen'->用户名, 'robinlee'->用户名]""", - "analysis": """让我们一步一步地思考。在问题“比较jackjchen和robinlee在内容库的访问次数“中,我们被问: -“比较jackjchen和robinlee”,所以我们需要column=[用户名],cell values = ['jackjchen', 'robinlee'],所以有[用户名:('jackjchen', 'robinlee')] -”内容库的访问次数“,所以我们需要column=[访问次数]""", - "schemaLinks":"""["用户名":("'jackjchen'", "'robinlee'"), "访问次数"]""", - "sql":"""select 用户名, 访问次数 from 内容库产品 where 用户名 in ('jackjchen', 'robinlee')""" - }, - { "currentDate":"2022-11-06", - "tableName":"内容库产品", - "fieldsList":"""["部门", "模块", "用户名", "访问次数", "访问人数", "访问时长", "数据日期"]""", - "question":"内容库近12个月访问人数 按部门", - "priorSchemaLinks":"""[]""", - "analysis": """让我们一步一步地思考。在问题“内容库近12个月访问人数 按部门“中,我们被问: -”内容库近12个月“,所以我们需要column=[数据日期],cell values = [12],所以有[数据日期:(12)] -“访问人数”,所以我们需要column=[访问人数] -”按部门“,所以我们需要column=[部门]""", - "schemaLinks":"""["数据日期":(12), "访问人数", "部门"]""", - "sql":"""select 部门, 数据日期, 访问人数 from 内容库产品 where datediff('month', 数据日期, '2022-11-06') <= 12 """ - }, - { "currentDate":"2023-04-21", - "tableName":"内容库产品", - "fieldsList":"""["部门", "模块", "用户名", "访问次数", "访问人数", "访问时长", "数据日期"]""", - "question":"内容库美术部、技术研发部的访问时长", - "priorSchemaLinks":"""['美术部'->部门, '技术研发部'->部门]""", - "analysis": """让我们一步一步地思考。在问题“内容库美术部、技术研发部的访问时长“中,我们被问: -“访问时长”,所以我们需要column=[访问时长] -”内容库美术部、技术研发部“,所以我们需要column=[部门], cell values = ['美术部', '技术研发部'],所以有[部门:('美术部', '技术研发部')]""", - "schemaLinks":"""["访问时长", "部门":("'美术部'", "'技术研发部'")]""", - "sql":"""select 部门, 访问时长 from 内容库产品 where 部门 in ('美术部', '技术研发部')""" - }, - { "currentDate":"2023-08-21", - "tableName":"严选", - "fieldsList":"""["严选版权归属系", "付费模式", "结算播放份额", "付费用户结算播放份额", "数据日期"]""", - "question":"近3天海田飞系MPPM结算播放份额", - "priorSchemaLinks":"""['海田飞系'->严选版权归属系]""", - "analysis": """让我们一步一步地思考。在问题“近3天海田飞系MPPM结算播放份额“中,我们被问: -“MPPM结算播放份额”,所以我们需要column=[结算播放份额], -”海田飞系“,所以我们需要column=[严选版权归属系], cell values = ['海田飞系'],所以有[严选版权归属系:('海田飞系')], -”近3天“,所以我们需要column=[数据日期], cell values = [3],所以有[数据日期:(3)]""", - "schemaLinks":"""["结算播放份额", "严选版权归属系":("'海田飞系'"), "数据日期":(3)]""", - "sql":"""select 严选版权归属系, 结算播放份额 from 严选 where 严选版权归属系 = '海田飞系' and datediff('day', 数据日期, '2023-08-21') <= 3 """ - }, - { "currentDate":"2023-05-22", - "tableName":"歌曲库", - "fieldsList":"""["是否潮流人歌曲", "C音歌曲ID", "C音歌曲MID", "歌曲名", "歌曲版本", "语种", "歌曲类型", "翻唱类型", "MPPM歌曲ID", "是否严选窄口径歌曲", "是否严选宽口径歌曲", "结算播放量", "运营播放量", "付费用户结算播放量", "历史累计结算播放量", "运营搜播量", "结算搜播量", "运营完播量", "运营推播量", "近7日复播率", "日均搜播量", "数据日期"]""", - "question":"对比近7天翻唱版和纯音乐的歌曲播放量", - "priorSchemaLinks":"""['纯音乐'->语种, '翻唱版'->歌曲版本]""", - "analysis": """让我们一步一步地思考。在问题“对比近3天翻唱版和纯音乐的歌曲播放量“中,我们被问: -“歌曲播放量”,所以我们需要column=[结算播放量] -”翻唱版“,所以我们需要column=[歌曲版本], cell values = ['翻唱版'],所以有[歌曲版本:('翻唱版')] -”和纯音乐的歌曲“,所以我们需要column=[语种], cell values = ['纯音乐'],所以有[语种:('纯音乐')] -”近7天“,所以我们需要column=[数据日期], cell values = [7],所以有[数据日期:(7)]""", - "schemaLinks":"""["结算播放量", "歌曲版本":("'翻唱版'"), "语种":("'纯音乐'"), "数据日期":(7)]""", - "sql":"""select 歌曲版本, 语种, 结算播放量 from 歌曲库 where 歌曲版本 = '翻唱版' and 语种 = '纯音乐' and datediff('day', 数据日期, '2023-05-22') <= 7 """ - }, - { "currentDate":"2023-05-31", - "tableName":"艺人库", - "fieldsList":"""["上下架状态", "歌手名", "歌手等级", "歌手类型", "歌手来源", "MPPM潮流人等级", "活跃区域", "年龄", "歌手才能", "歌手风格", "粉丝数", "潮音粉丝数", "超声波粉丝数", "推博粉丝数", "超声波歌曲数", "在架歌曲数", "超声波分享数", "独占歌曲数", "超声波在架歌曲评论数", "有播放量歌曲数", "数据日期"]""", - "question":"对比一下陈拙悬、孟梅琦、赖媚韵的粉丝数", - "priorSchemaLinks":"""['1527896'->MPPM歌手ID, '1565463'->MPPM歌手ID, '2141459'->MPPM歌手ID]""", - "analysis": """让我们一步一步地思考。在问题“对比一下陈拙悬、孟梅琦、赖媚韵的粉丝数“中,我们被问: -“粉丝数”,所以我们需要column=[粉丝数] -”陈拙悬、孟梅琦、赖媚韵“,所以我们需要column=[歌手名], cell values = ['陈拙悬', '孟梅琦', '赖媚韵'],所以有[歌手名:('陈拙悬', '孟梅琦', '赖媚韵')]""", - "schemaLinks":"""["粉丝数", "歌手名":("'陈拙悬'", "'孟梅琦'", "'赖媚韵'")]""", - "sql":"""select 歌手名, 粉丝数 from 艺人库 where 歌手名 in ('陈拙悬', '孟梅琦', '赖媚韵')""" - }, - { "currentDate":"2023-07-31", - "tableName":"歌曲库", - "fieldsList":"""["歌曲名", "歌曲版本", "歌曲类型", "MPPM歌曲ID", "是否严选窄口径歌曲", "是否严选宽口径歌曲", "是否潮流人歌曲", "超声波歌曲ID", "C音歌曲ID", "C音歌曲MID", "结算播放量", "运营播放量", "分享量", "收藏量", "运营搜播量", "结算搜播量", "拉新用户数", "拉活用户数", "分享率", "结算播放份额", "数据日期"]""", - "question":"播放量大于1万的歌曲有多少", - "priorSchemaLinks":"""[]""", - "analysis": """让我们一步一步地思考。在问题“播放量大于1万的歌曲有多少“中,我们被问: -“歌曲有多少”,所以我们需要column=[歌曲名] -”播放量大于1万的“,所以我们需要column=[结算播放量], cell values = [10000],所以有[结算播放量:(10000)]""", - "schemaLinks":"""["歌曲名", "结算播放量":(10000)]""", - "sql":"""select 歌曲名 from 歌曲库 where 结算播放量 > 10000""" - }, - { "currentDate":"2023-07-31", - "tableName":"内容库产品", - "fieldsList":"""["用户名", "部门", "模块", "访问时长", "访问次数", "访问人数", "数据日期"]""", - "question":"内容库访问时长小于1小时,且来自美术部的用户是哪些", - "priorSchemaLinks":"""['美术部'->部门]""", - "analysis": """让我们一步一步地思考。在问题“内容库访问时长小于1小时,且来自美术部的用户是哪些“中,我们被问: -“用户是哪些”,所以我们需要column=[用户名] -”美术部的“,所以我们需要column=[部门], cell values = ['美术部'],所以有[部门:('美术部')] -”访问时长小于1小时“,所以我们需要column=[访问时长], cell values = [1],所以有[访问时长:(1)]""", - "schemaLinks":"""["用户名", "部门":("'美术部'"), "访问时长":(1)]""", - "sql":"""select 用户名 from 内容库产品 where 部门 = '美术部' and 访问时长 < 1""" - }, - { "currentDate":"2023-08-31", - "tableName":"内容库产品", - "fieldsList":"""["用户名", "部门", "模块", "访问时长", "访问次数", "访问人数", "数据日期"]""", - "question":"内容库pv最高的用户有哪些", - "priorSchemaLinks":"""[]""", - "analysis": """让我们一步一步地思考。在问题“内容库pv最高的用户有哪些“中,我们被问: -“用户有哪些”,所以我们需要column=[用户名] -”pv最高的“,所以我们需要column=[访问次数], cell values = [1],所以有[访问次数:(1)]""", - "schemaLinks":"""["用户名", "访问次数":(1)]""", - "sql":"""select 用户名 from 内容库产品 order by 访问次数 desc limit 1""" - }, - { "currentDate":"2023-08-31", - "tableName":"艺人库", - "fieldsList":"""["播放量层级", "播放量单调性", "播放量方差", "播放量突增类型", "播放量集中度", "歌手名", "歌手等级", "歌手类型", "歌手来源", "MPPM潮流人等级", "结算播放量", "运营播放量", "历史累计结算播放量", "有播放量歌曲数", "历史累计运营播放量", "付费用户结算播放量", "结算播放量占比", "运营播放份额", "免费用户结算播放占比", "完播量", "数据日期"]""", - "question":"近90天袁亚伟播放量平均值是多少", - "priorSchemaLinks":"""['152789226'->MPPM歌手ID]""", - "analysis": """让我们一步一步地思考。在问题“近90天袁亚伟播放量平均值是多少“中,我们被问: -“播放量平均值是多少”,所以我们需要column=[结算播放量] -”袁亚伟“,所以我们需要column=[歌手名], cell values = ['袁亚伟'],所以有[歌手名:('袁亚伟')] -”近90天“,所以我们需要column=[数据日期], cell values = [90],所以有[数据日期:(90)]""", - "schemaLinks":"""["结算播放量", "歌手名":("'袁亚伟'"), "数据日期":(90)]""", - "sql":"""select avg(结算播放量) from 艺人库 where 歌手名 = '袁亚伟' and datediff('day', 数据日期, '2023-08-31') <= 90 """ - }, - { "currentDate":"2023-08-31", - "tableName":"艺人库", - "fieldsList":"""["播放量层级", "播放量单调性", "播放量方差", "播放量突增类型", "播放量集中度", "歌手名", "歌手等级", "歌手类型", "歌手来源", "MPPM潮流人等级", "结算播放量", "运营播放量", "历史累计结算播放量", "有播放量歌曲数", "历史累计运营播放量", "付费用户结算播放量", "结算播放量占比", "运营播放份额", "免费用户结算播放占比", "完播量", "数据日期"]""", - "question":"周倩倩近7天结算播放量总和是多少", - "priorSchemaLinks":"""['199509'->MPPM歌手ID]""", - "analysis": """让我们一步一步地思考。在问题“周倩倩近7天结算播放量总和是多少“中,我们被问: -“结算播放量总和是多少”,所以我们需要column=[结算播放量] -”周倩倩“,所以我们需要column=[歌手名], cell values = ['周倩倩'],所以有[歌手名:('周倩倩')] -”近7天“,所以我们需要column=[数据日期], cell values = [7],所以有[数据日期:(7)]""", - "schemaLinks":"""["结算播放量", "歌手名":("'周倩倩'"), "数据日期":(7)]""", - "sql":"""select sum(结算播放量) from 艺人库 where 歌手名 = '周倩倩' and datediff('day', 数据日期, '2023-08-31') <= 7 """ - }, - { "currentDate":"2023-09-14", - "tableName":"内容库产品", - "fieldsList":"""["部门", "模块", "用户名", "访问次数", "访问人数", "访问时长", "数据日期"]""", - "question":"内容库访问次数大于1k的部门是哪些", - "priorSchemaLinks":"""[]""", - "analysis": """让我们一步一步地思考。在问题“内容库访问次数大于1k的部门是哪些“中,我们被问: -“部门是哪些”,所以我们需要column=[部门] -”访问次数大于1k的“,所以我们需要column=[访问次数], cell values = [1000],所以有[访问次数:(1000)]""", - "schemaLinks":"""["部门", "访问次数":(1000)]""", - "sql":"""select 部门 from 内容库产品 where 访问次数 > 1000""" - }, - { "currentDate":"2023-09-18", - "tableName":"歌曲库", - "fieldsList":"""["歌曲名", "MPPM歌手ID", "歌曲版本", "歌曲类型", "MPPM歌曲ID", "是否严选窄口径歌曲", "是否严选宽口径歌曲", "是否潮流人歌曲", "超声波歌曲ID", "C音歌曲ID", "C音歌曲MID", "结算播放量", "运营播放量", "分享量", "收藏量", "运营搜播量", "结算搜播量", "拉新用户数", "拉活用户数", "分享率", "结算播放份额", "数据日期"]""", - "question":"陈亿训唱的所有的播放量大于20k的孤勇者有哪些", - "priorSchemaLinks":"""['199509'->MPPM歌手ID, '1527123'->MPPM歌曲ID]""", - "analysis": """让我们一步一步地思考。在问题“陈亿训唱的所有的播放量大于20k的孤勇者有哪些“中,我们被问: -“孤勇者有哪些”,所以我们需要column=[歌曲名], cell values = ['孤勇者'],所以有[歌曲名:('孤勇者')] -”播放量大于20k的“,所以我们需要column=[结算播放量], cell values = [20000],所以有[结算播放量:(20000)] -”陈亿训唱的“,所以我们需要column=[歌手名], cell values = ['陈亿训'],所以有[歌手名:('陈亿训')]""", - "schemaLinks":"""["歌曲名":("'孤勇者'"), "结算播放量":(20000), "歌手名":("'陈亿训'")]""", - "sql":"""select 歌曲名 from 歌曲库 where 结算播放量 > 20000 and 歌手名 = '陈亿训' and 歌曲名 = '孤勇者'""" - }, - { "currentDate":"2023-09-18", - "tableName":"歌曲库", - "fieldsList":"""["歌曲名", "歌曲版本", "歌手名", "歌曲类型", "发布时间", "MPPM歌曲ID", "是否严选窄口径歌曲", "是否严选宽口径歌曲", "是否潮流人歌曲", "超声波歌曲ID", "C音歌曲ID", "C音歌曲MID", "结算播放量", "运营播放量", "分享量", "收藏量", "运营搜播量", "结算搜播量", "拉新用户数", "拉活用户数", "分享率", "结算播放份额", "数据日期"]""", - "question":"周洁轮去年发布的歌曲有哪些", - "priorSchemaLinks":"""['23109'->MPPM歌手ID]""", - "analysis": """让我们一步一步地思考。在问题“周洁轮去年发布的歌曲有哪些“中,我们被问: -“歌曲有哪些”,所以我们需要column=[歌曲名] -”去年发布的“,所以我们需要column=[发布时间], cell values = [1],所以有[发布时间:(1)] -”周洁轮“,所以我们需要column=[歌手名], cell values = ['周洁轮'],所以有[歌手名:('周洁轮')]""", - "schemaLinks":"""["歌曲名", "发布时间":(1), "歌手名":("'周洁轮'")]""", - "sql":"""select 歌曲名 from 歌曲库 where datediff('year', 发布时间, '2023-09-18') <= 1 and 歌手名 = '周洁轮'""" - }, - { "currentDate":"2023-09-11", - "tableName":"艺人库", - "fieldsList":"""["播放量层级", "播放量单调性", "播放量方差", "播放量突增类型", "播放量集中度", "歌手名", "歌手等级", "歌手类型", "歌手来源", "签约日期", "MPPM潮流人等级", "结算播放量", "运营播放量", "历史累计结算播放量", "有播放量歌曲数", "历史累计运营播放量", "付费用户结算播放量", "结算播放量占比", "运营播放份额", "免费用户结算播放占比", "完播量", "数据日期"]""", - "question":"我想要近半年签约的播放量前十的歌手有哪些", - "priorSchemaLinks":"""[]""", - "analysis": """让我们一步一步地思考。在问题“我想要近半年签约的播放量前十的歌手“中,我们被问: -“歌手有哪些”,所以我们需要column=[歌手名] -”播放量前十的“,所以我们需要column=[结算播放量], cell values = [10],所以有[结算播放量:(10)] -”近半年签约的“,所以我们需要column=[签约日期], cell values = [0.5],所以有[签约日期:(0.5)]""", - "schemaLinks":"""["歌手名", "结算播放量":(10), "签约日期":(0.5)]""", - "sql":"""select 歌手名 from 艺人库 where datediff('year', 签约日期, '2023-09-11') <= 0.5 order by 结算播放量 desc limit 10""" - }, - { "currentDate":"2023-08-12", - "tableName":"歌曲库", - "fieldsList": """["发行日期", "歌曲语言", "歌曲来源", "歌曲流派", "歌曲名", "歌曲版本", "歌曲类型", "发行时间", "数据日期"]""", - "question":"最近一年发行的歌曲中,有哪些在近7天播放超过一千万的", - "priorSchemaLinks":"""[]""", - "analysis": """让我们一步一步地思考。在问题“最近一年发行的歌曲中,有哪些在近7天播放超过一千万的“中,我们被问: -“发行的歌曲中,有哪些”,所以我们需要column=[歌曲名] -”最近一年发行的“,所以我们需要column=[发行日期], cell values = [1],所以有[发行日期:(1)] -”在近7天播放超过一千万的“,所以我们需要column=[数据日期, 结算播放量], cell values = [7, 10000000],所以有[数据日期:(7), 结算播放量:(10000000)]""", - "schemaLinks":"""["歌曲名", "发行日期":(1), "数据日期":(7), "结算播放量":(10000000)]""", - "sql":"""select 歌曲名 from 歌曲库 where datediff('year', 发行日期, '2023-08-12') <= 1 and datediff('day', 数据日期, '2023-08-12') <= 7 and 结算播放量 > 10000000""" - }, - { "currentDate":"2023-08-12", - "tableName":"歌曲库", - "fieldsList": """["发行日期", "歌曲语言", "歌曲来源", "歌曲流派", "歌曲名", "歌曲版本", "歌曲类型", "发行时间", "数据日期"]""", - "question":"今年以来发行的歌曲中,有哪些在近7天播放超过一千万的", - "priorSchemaLinks":"""[]""", - "analysis": """让我们一步一步地思考。在问题“今年以来发行的歌曲中,有哪些在近7天播放超过一千万的“中,我们被问: -“发行的歌曲中,有哪些”,所以我们需要column=[歌曲名] -”今年以来发行的“,所以我们需要column=[发行日期], cell values = [0],所以有[发行日期:(0)] -”在近7天播放超过一千万的“,所以我们需要column=[数据日期, 结算播放量], cell values = [7, 10000000],所以有[数据日期:(7), 结算播放量:(10000000)]""", - "schemaLinks":"""["歌曲名", "发行日期":(0), "数据日期":(7), "结算播放量":(10000000)]""", - "sql":"""select 歌曲名 from 歌曲库 where datediff('year', 发行日期, '2023-08-12') <= 0 and datediff('day', 数据日期, '2023-08-12') <= 7 and 结算播放量 > 10000000""" - }, - { "currentDate":"2023-08-12", - "tableName":"歌曲库", - "fieldsList": """["发行日期", "歌曲语言", "歌曲来源", "歌曲流派", "歌曲名", "歌曲版本", "歌曲类型", "发行时间", "数据日期"]""", - "question":"2023年以来发行的歌曲中,有哪些在近7天播放超过一千万的", - "priorSchemaLinks":"""['514129144'->MPPM歌曲ID]""", - "analysis": """让我们一步一步地思考。在问题“2023年以来发行的歌曲中,有哪些在近7天播放超过一千万的“中,我们被问: -“发行的歌曲中,有哪些”,所以我们需要column=[歌曲名] -”2023年以来发行的“,所以我们需要column=[发行日期], cell values = ['2023-01-01'],所以有[发行日期:('2023-01-01')] -”在近7天播放超过一千万的“,所以我们需要column=[数据日期, 结算播放量], cell values = [7, 10000000],所以有[数据日期:(7), 结算播放量:(10000000)]""", - "schemaLinks":"""["歌曲名", "发行日期":("'2023-01-01'"), "数据日期":(7), "结算播放量":(10000000)]""", - "sql":"""select 歌曲名 from 歌曲库 where 发行日期 >= '2023-01-01' and datediff('day', 数据日期, '2023-08-12') <= 7 and 结算播放量 > 10000000""" - }, - { "currentDate":"2023-08-01", - "tableName":"歌曲库", - "fieldsList":"""["歌曲名", "歌曲版本", "歌手名", "歌曲类型", "发布时间", "MPPM歌曲ID", "是否严选窄口径歌曲", "是否严选宽口径歌曲", "是否潮流人歌曲", "超声波歌曲ID", "C音歌曲ID", "C音歌曲MID", "结算播放量", "运营播放量", "分享量", "收藏量", "运营搜播量", "结算搜播量", "拉新用户数", "拉活用户数", "分享率", "结算播放份额", "数据日期"]""", - "question":"周洁轮2023年6月之后发布的歌曲有哪些", - "priorSchemaLinks":"""['23109'->MPPM歌手ID]""", - "analysis": """让我们一步一步地思考。在问题“周洁轮2023年6月之后发布的歌曲有哪些“中,我们被问: -“歌曲有哪些”,所以我们需要column=[歌曲名] -”2023年6月之后发布的“,所以我们需要column=[发布时间], cell values = ['2023-06-01'],所以有[发布时间:('2023-06-01')] -”周洁轮“,所以我们需要column=[歌手名], cell values = ['周洁轮'],所以有[歌手名:('周洁轮')]""", - "schemaLinks":"""["歌曲名", "发布时间":("'2023-06-01'"), "歌手名":("'周洁轮'")]""", - "sql":"""select 歌曲名 from 歌曲库 where 发布时间 >= '2023-06-01' and 歌手名 = '周洁轮'""" - }, - { "currentDate":"2023-08-01", - "tableName":"歌曲库", - "fieldsList":"""["歌曲名", "歌曲版本", "歌手名", "歌曲类型", "发布时间", "MPPM歌曲ID", "是否严选窄口径歌曲", "是否严选宽口径歌曲", "是否潮流人歌曲", "超声波歌曲ID", "C音歌曲ID", "C音歌曲MID", "结算播放量", "运营播放量", "分享量", "收藏量", "运营搜播量", "结算搜播量", "拉新用户数", "拉活用户数", "分享率", "结算播放份额", "数据日期"]""", - "question":"邓梓琦在2023年1月5日之后发布的歌曲中,有哪些播放量大于500W的?", - "priorSchemaLinks":"""['2312311'->MPPM歌手ID]""", - "analysis": """让我们一步一步地思考。在问题“邓梓琦在2023年1月5日之后发布的歌曲中,有哪些播放量大于500W的?“中,我们被问: -“歌曲中,有哪些”,所以我们需要column=[歌曲名] -“播放量大于500W的”,所以我们需要column=[结算播放量], cell values = [5000000],所以有[结算播放量:(5000000)] -”邓梓琦在2023年1月5日之后发布的“,所以我们需要column=[发布时间], cell values = ['2023-01-05'],所以有[发布时间:('2023-01-05')] -”邓梓琦“,所以我们需要column=[歌手名], cell values = ['邓梓琦'],所以有[歌手名:('邓梓琦')]""", - "schemaLinks":"""["歌曲名", "结算播放量":(5000000), "发布时间":("'2023-01-05'"), "歌手名":("'邓梓琦'")]""", - "sql":"""select 歌曲名 from 歌曲库 where 发布时间 >= '2023-01-05' and 歌手名 = '邓梓琦' and 结算播放量 > 5000000""" - }, - { "currentDate":"2023-09-17", - "tableName":"歌曲库", - "fieldsList":"""["歌曲名", "歌曲版本", "歌手名", "歌曲类型", "发布时间", "MPPM歌曲ID", "是否严选窄口径歌曲", "是否严选宽口径歌曲", "是否潮流人歌曲", "超声波歌曲ID", "C音歌曲ID", "C音歌曲MID", "结算播放量", "运营播放量", "分享量", "收藏量", "运营搜播量", "结算搜播量", "拉新用户数", "拉活用户数", "分享率", "结算播放份额", "数据日期"]""", - "question":"2023年6月以后,张亮英播放量大于200万的歌曲有哪些?", - "priorSchemaLinks":"""['45453'->MPPM歌手ID]""", - "analysis": """让我们一步一步地思考。在问题“2023年6月以后,张亮英播放量大于200万的歌曲有哪些?“中,我们被问: -“播放量大于200万的”,所以我们需要column=[结算播放量], cell values = [2000000],所以有[结算播放量:(2000000)] -”2023年6月以后,张亮英“,所以我们需要column=[数据日期, 歌手名], cell values = ['2023-06-01', '张亮英'],所以有[数据日期:('2023-06-01'), 歌手名:('张亮英')], -”歌曲有哪些“,所以我们需要column=[歌曲名]""", - "schemaLinks":"""["结算播放量":(2000000), "数据日期":("'2023-06-01'"), "歌手名":("'张亮英'"), "歌曲名"]""", - "sql":"""select 歌曲名 from 歌曲库 where 数据日期 >= '2023-06-01' and 歌手名 = '张亮英' and 结算播放量 > 2000000""" - }, - { "currentDate":"2023-08-16", - "tableName":"歌曲库", - "fieldsList":"""["歌曲名", "歌曲版本", "歌手名", "歌曲类型", "发布时间", "MPPM歌曲ID", "是否严选窄口径歌曲", "是否严选宽口径歌曲", "是否潮流人歌曲", "超声波歌曲ID", "C音歌曲ID", "C音歌曲MID", "结算播放量", "运营播放量", "分享量", "收藏量", "运营搜播量", "结算搜播量", "拉新用户数", "拉活用户数", "分享率", "结算播放份额", "数据日期"]""", - "question":"2021年6月以后发布的李雨纯的播放量大于20万的歌曲有哪些", - "priorSchemaLinks":"""['23109'->MPPM歌手ID]""", - "analysis": """让我们一步一步地思考。在问题“2021年6月以后发布的李雨纯的播放量大于20万的歌曲有哪些“中,我们被问: -“播放量大于20万的”,所以我们需要column=[结算播放量], cell values = [200000],所以有[结算播放量:(200000)] -”2021年6月以后发布的“,所以我们需要column=[发布时间], cell values = ['2021-06-01'],所以有[发布时间:('2021-06-01')] -”李雨纯“,所以我们需要column=[歌手名], cell values = ['李雨纯'],所以有[歌手名:('李雨纯')]""", - "schemaLinks":"""["结算播放量":(200000), "发布时间":("'2021-06-01'"), "歌手名":("'李雨纯'")]""", - "sql":"""select 歌曲名 from 歌曲库 where 发布时间 >= '2021-06-01' and 歌手名 = '李雨纯' and 结算播放量 > 200000""" - }, - { "currentDate":"2023-08-16", - "tableName":"歌曲库", - "fieldsList":"""["歌曲名", "歌曲版本", "歌手名", "歌曲类型", "发布时间", "MPPM歌曲ID", "是否严选窄口径歌曲", "是否严选宽口径歌曲", "是否潮流人歌曲", "超声波歌曲ID", "C音歌曲ID", "C音歌曲MID", "结算播放量", "运营播放量", "分享量", "收藏量", "运营搜播量", "结算搜播量", "拉新用户数", "拉活用户数", "分享率", "结算播放份额", "数据日期"]""", - "question":"刘锝桦在1992年4月2日到2020年5月2日之间发布的播放量大于20万的歌曲有哪些", - "priorSchemaLinks":"""['4234234'->MPPM歌手ID]""", - "analysis": """让我们一步一步地思考。在问题“刘锝桦在1992年4月2日到2020年5月2日之间发布的播放量大于20万的歌曲有哪些“中,我们被问: -“播放量大于20万的”,所以我们需要column=[结算播放量], cell values = [200000],所以有[结算播放量:(200000)] -”1992年4月2日到2020年5月2日之间发布的“, 所以我们需要column=[发布时间], cell values = ['1992-04-02', '2020-05-02'],所以有[发布时间:('1992-04-02', '2020-05-02')] -”刘锝桦“,所以我们需要column=[歌手名], cell values = ['刘锝桦'],所以有[歌手名:('刘锝桦')]""", - "schemaLinks":"""["结算播放量":(200000), "发布时间":("'1992-04-02'", "'2020-05-02'"), "歌手名":("'刘锝桦'")]""", - "sql":"""select 歌曲名 from 歌曲库 where 发布时间 >= '1992-04-02' and 发布时间 <= '2020-05-02' and 歌手名 = '刘锝桦' and 结算播放量 > 200000""" - }, - { - "currentDate":"2023-09-04", - "tableName":"内容库产品", - "fieldsList":"""["用户名", "部门", "模块", "访问时长", "访问次数", "访问人数", "数据日期"]""", - "question":"内容库近30天访问次数的平均数", - "priorSchemaLinks":"""[]""", - "analysis": """让我们一步一步地思考。在问题“内容库近30天访问次数的平均数“中,我们被问: -“访问次数的平均数”,所以我们需要column=[访问次数] -”内容库近30天“,所以我们需要column=[数据日期], cell values = [30],所以有[数据日期:(30)]""", - "schemaLinks":"""["访问次数", "数据日期":(30)]""", - "sql":"""select avg(访问次数) from 内容库产品 where datediff('day', 数据日期, '2023-09-04') <= 30 """ - }, - { - "currentDate":"2023-09-04", - "tableName":"内容库产品", - "fieldsList":"""["用户名", "部门", "模块", "访问时长", "访问次数", "访问人数", "数据日期"]""", - "question":"内容库近半年哪个月的访问次数汇总最高", - "priorSchemaLinks":"""[]""", - "analysis": """让我们一步一步地思考。在问题“内容库近半年哪个月的访问次数汇总最高“中,我们被问: -“访问次数汇总最高”,所以我们需要column=[访问次数], cell values = [1],所以有[访问次数:(1)] -”内容库近半年“,所以我们需要column=[数据日期], cell values = [0.5],所以有[数据日期:(0.5)]""", - "schemaLinks":"""["访问次数":(1), "数据日期":(0.5)]""", - "sql":"""select MONTH(数据日期), sum(访问次数) from 内容库产品 where datediff('year', 数据日期, '2023-09-04') <= 0.5 group by MONTH(数据日期) order by sum(访问次数) desc limit 1""" - }, - { - "currentDate":"2023-09-04", - "tableName":"内容库产品", - "fieldsList":"""["用户名", "部门", "模块", "访问时长", "访问次数", "访问人数", "数据日期"]""", - "question":"内容库近半年每个月的平均访问次数", - "priorSchemaLinks":"""[]""", - "analysis": """让我们一步一步地思考。在问题“内容库近半年每个月的平均访问次数“中,我们被问: -“每个月的平均访问次数”,所以我们需要column=[访问次数] -”内容库近半年“,所以我们需要column=[数据日期], cell values = [0.5],所以有[数据日期:(0.5)]""", - "schemaLinks":"""["访问次数", "数据日期":(0.5)]""", - "sql":"""select MONTH(数据日期), avg(访问次数) from 内容库产品 where datediff('year', 数据日期, '2023-09-04') <= 0.5 group by MONTH(数据日期)""" - }, - { - "currentDate":"2023-09-10", - "tableName":"内容库产品", - "fieldsList":"""["用户名", "部门", "模块", "访问时长", "访问次数", "访问人数", "数据日期"]""", - "question":"内容库 按部门统计访问次数 top10 的部门", - "priorSchemaLinks":"""[]""", - "analysis": """让我们一步一步地思考。在问题“内容库 按部门统计访问次数 top10 的部门“中,我们被问: -“访问次数 top10 的部门”,所以我们需要column=[访问次数], cell values = [10],所以有[访问次数:(10)] -”内容库 按部门统计“,所以我们需要column=[部门]""", - "schemaLinks":"""["访问次数":(10), "部门"]""", - "sql":"""select 部门, sum(访问次数) from 内容库产品 group by 部门 order by sum(访问次数) desc limit 10""" - }, - { - "currentDate":"2023-09-10", - "tableName":"内容库产品", - "fieldsList":"""["用户名", "部门", "模块", "访问时长", "访问次数", "访问人数", "数据日期"]""", - "question":"超音速 近7个月,月度总访问量超过 2万的月份", - "priorSchemaLinks":"""[]""", - "analysis": """让我们一步一步地思考。在问题“超音速 近7个月,月度总访问量超过 2万的月份“中,我们被问: -“月度总访问量超过 2万的月份”,所以我们需要column=[访问次数], cell values = [20000],所以有[访问次数:(20000)] -”超音速 近7个月“,所以我们需要column=[数据日期], cell values = [7],所以有[数据日期:(7)]""", - "schemaLinks":"""["访问次数":(20000), "数据日期":(7)]""", - "sql":"""select MONTH(数据日期) from 内容库产品 where datediff('day', 数据日期, '2023-09-10') <= 7 group by MONTH(数据日期) having sum(访问次数) > 20000""" - }, - { - "currentDate":"2023-09-10", - "tableName":"歌曲库", - "fieldsList":"""["歌曲语言", "歌曲来源", "运营播放量", "播放量", "歌曲名", "结算播放量", "专辑名", "发布日期", "歌曲版本", "歌曲类型", "数据日期"]""", - "question":"2022年7月到2023年7月之间发布到歌曲,按播放量取top 100,再按月粒度来统计近1年的运营播放量", - "priorSchemaLinks":"""[]""", - "analysis": """让我们一步一步地思考。在问题“2022年7月到2023年7月之间发布到歌曲,按播放量取top 100,再按月粒度来统计近1年的运营播放量“中,我们被问: -“按月粒度来统计近1年的运营播放量”,所以我们需要column=[运营播放量, 数据日期], cell values = [1],所以有[运营播放量, 数据日期:(1)] -”按播放量取top 100“,所以我们需要column=[播放量], cell values = [100],所以有[播放量:(100)] -“2022年7月到2023年7月之间发布到歌曲”,所以我们需要column=[发布日期], cell values = ['2022-07-01', '2023-07-01'],所以有[发布日期:('2022-07-01', '2023-07-01')]""", - "schemaLinks":"""["运营播放量", "数据日期":(1), "播放量":(100), "发布日期":("'2022-07-01'", "'2023-07-01'")]""", - "sql":"""select MONTH(数据日期), sum(运营播放量) from (select 数据日期, 运营播放量 from 歌曲库 where 发布日期 >= '2022-07-01' and 发布日期 <= '2023-07-01' order by 播放量 desc limit 100) t where datediff('year', 数据日期, '2023-09-10') <= 1 group by MONTH(数据日期)""" - }, - { - "currentDate":"2023-09-10", - "tableName":"歌曲库", - "fieldsList":"""["歌曲语言", "歌曲来源", "运营播放量", "播放量", "歌曲名", "结算播放量", "专辑名", "发布日期", "歌曲版本", "歌曲类型", "数据日期"]""", - "question":"2022年7月到2023年7月之间发布到歌曲,按播放量取top100,再按月粒度来统计近1年的运营播放量之和,筛选出其中运营播放量之和大于2k的月份", - "priorSchemaLinks":"""[]""", - "analysis": """让我们一步一步地思考。在问题“2022年7月到2023年7月之间发布到歌曲,按播放量取top100,再按月粒度来统计近1年的运营播放量之和,筛选出其中运营播放量之和大于2k的月份“中,我们被问: -“筛选出其中运营播放量之和大于2k的月份”,所以我们需要column=[运营播放量], cell values = [2000],所以有[运营播放量:(2000)] -”按月粒度来统计近1年的运营播放量之和“,所以我们需要column=[数据日期], cell values = [1],所以有[数据日期:(1)] -”按播放量取top100“,所以我们需要column=[播放量], cell values = [100],所以有[播放量:(100)] -”2022年7月到2023年7月之间发布到歌曲“,所以我们需要column=[发布日期], cell values = ['2022-07-01', '2023-07-01'],所以有[发布日期:('2022-07-01', '2023-07-01')]""", - "schemaLinks":"""["运营播放量":(2000), "数据日期":(1), "播放量":(100), "发布日期":("'2022-07-01'", "'2023-07-01'")]""", - "sql":"""select MONTH(数据日期), sum(运营播放量) from (select 数据日期, 运营播放量 from 歌曲库 where 发布日期 >= '2022-07-01' and 发布日期 <= '2023-07-01' order by 播放量 desc limit 100) t where datediff('year', 数据日期, '2023-09-10') <= 1 group by MONTH(数据日期) having sum(运营播放量) > 2000""" - }, - { - "currentDate":"2023-11-01", - "tableName":"营销月模型", - "fieldsList":"""["国家中文名", "机型类别", "销量", "数据日期"]""", - "question":"今年智能机在哪个国家的销量之和最高", - "priorSchemaLinks":"""['智能机'->机型类别]""", - "analysis": """让我们一步一步地思考。在问题“今年智能机在哪个国家的销量之和最高“中,我们被问: -“销量最高”,所以我们需要column=[销量], cell values = [1],所以有[销量:(1)] -”今年“,所以我们需要column=[数据日期], cell values = ['2023-01-01', '2023-11-01'],所以有[数据日期:('2023-01-01', '2023-11-01')] -”智能机“,所以我们需要column=[机型类别], cell values = ['智能机'],所以有[机型类别:('智能机')]""", - "schemaLinks":"""["销量":(1), "数据日期":("'2023-01-01'", "'2023-11-01'"), "机型类别":("'智能机'")]""", - "sql":"""select 国家中文名, sum(销量) from 营销月模型 where 机型类别 = '智能机' and 数据日期 >= '2023-01-01' and 数据日期 <= '2023-11-01' group by 国家中文名 order by sum(销量) desc limit 1""" - } -] \ No newline at end of file diff --git a/chat/core/src/main/resources/META-INF/spring.factories b/chat/core/src/main/resources/META-INF/spring.factories new file mode 100644 index 000000000..ca73c1e2b --- /dev/null +++ b/chat/core/src/main/resources/META-INF/spring.factories @@ -0,0 +1,2 @@ +com.tencent.supersonic.chat.core.knowledge.FileHandler=\ + com.tencent.supersonic.chat.core.knowledge.LocalFileHandler \ No newline at end of file diff --git a/chat/core/src/test/java/com/tencent/supersonic/chat/parser/llm/s2sql/LLMResponseServiceTest.java b/chat/core/src/test/java/com/tencent/supersonic/chat/parser/llm/s2sql/LLMResponseServiceTest.java index 6a044ae8d..e69de29bb 100644 --- a/chat/core/src/test/java/com/tencent/supersonic/chat/parser/llm/s2sql/LLMResponseServiceTest.java +++ b/chat/core/src/test/java/com/tencent/supersonic/chat/parser/llm/s2sql/LLMResponseServiceTest.java @@ -1,55 +0,0 @@ -package com.tencent.supersonic.chat.parser.llm.s2sql; - -import com.tencent.supersonic.chat.parser.sql.llm.LLMResponseService; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMResp; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMSqlResp; -import java.util.HashMap; -import java.util.Map; -import org.junit.Assert; -import org.junit.jupiter.api.Test; - -class LLMResponseServiceTest { - - @Test - void deduplicationSqlWeight() { - String sql1 = "SELECT a,b,c,d FROM table1 WHERE column1 = 1 AND column2 = 2 order by a"; - String sql2 = "SELECT d,c,b,a FROM table1 WHERE column2 = 2 AND column1 = 1 order by a"; - - LLMResp llmResp = new LLMResp(); - Map sqlWeight = new HashMap<>(); - sqlWeight.put(sql1, LLMSqlResp.builder().sqlWeight(0.20).build()); - sqlWeight.put(sql2, LLMSqlResp.builder().sqlWeight(0.80).build()); - - llmResp.setSqlRespMap(sqlWeight); - LLMResponseService llmResponseService = new LLMResponseService(); - Map deduplicationSqlResp = llmResponseService.getDeduplicationSqlResp(llmResp); - - Assert.assertEquals(deduplicationSqlResp.size(), 1); - - sql1 = "SELECT a,b,c,d FROM table1 WHERE column1 = 1 AND column2 = 2 order by a"; - sql2 = "SELECT d,c,b,a FROM table1 WHERE column2 = 2 AND column1 = 1 order by a"; - - LLMResp llmResp2 = new LLMResp(); - Map sqlWeight2 = new HashMap<>(); - sqlWeight2.put(sql1, LLMSqlResp.builder().sqlWeight(0.20).build()); - sqlWeight2.put(sql2, LLMSqlResp.builder().sqlWeight(0.80).build()); - - llmResp2.setSqlRespMap(sqlWeight2); - deduplicationSqlResp = llmResponseService.getDeduplicationSqlResp(llmResp2); - - Assert.assertEquals(deduplicationSqlResp.size(), 1); - - sql1 = "SELECT a,b,c,d,e FROM table1 WHERE column1 = 1 AND column2 = 2 order by a"; - sql2 = "SELECT d,c,b,a FROM table1 WHERE column2 = 2 AND column1 = 1 order by a"; - - LLMResp llmResp3 = new LLMResp(); - Map sqlWeight3 = new HashMap<>(); - sqlWeight3.put(sql1, LLMSqlResp.builder().sqlWeight(0.20).build()); - sqlWeight3.put(sql2, LLMSqlResp.builder().sqlWeight(0.80).build()); - llmResp3.setSqlRespMap(sqlWeight3); - deduplicationSqlResp = llmResponseService.getDeduplicationSqlResp(llmResp3); - - Assert.assertEquals(deduplicationSqlResp.size(), 2); - - } -} \ No newline at end of file diff --git a/chat/knowledge/pom.xml b/chat/knowledge/pom.xml deleted file mode 100644 index 14cec57ad..000000000 --- a/chat/knowledge/pom.xml +++ /dev/null @@ -1,110 +0,0 @@ - - - - chat - com.tencent.supersonic - ${revision} - - 4.0.0 - - chat-knowledge - - - org.springframework - spring-context - - - org.projectlombok - lombok - - - - com.hankcs - hanlp - ${hanlp.version} - - - - org.apache.hadoop - hadoop-client - ${hadoop.version} - - - org.apache.zookeeper - zookeeper - - - javax.servlet - servlet-api - - - - - org.apache.hadoop - hadoop-hdfs - ${hadoop.version} - - - org.apache.zookeeper - zookeeper - - - javax.servlet - servlet-api - - - - - org.apache.hadoop - hadoop-common - ${hadoop.version} - - - org.slf4j - slf4j-log4j12 - - - log4j - log4j - - - org.apache.zookeeper - zookeeper - - - org.apache.curator - * - - - javax.servlet - servlet-api - - - - - com.tencent.supersonic - common - ${project.version} - - - com.tencent.supersonic - auth-api - ${project.version} - - - com.tencent.supersonic - chat-api - ${project.version} - - - com.tencent.supersonic - headless-server - ${project.version} - compile - - - - - diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/ComponentFactory.java b/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/ComponentFactory.java deleted file mode 100644 index 8b0a88183..000000000 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/ComponentFactory.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.tencent.supersonic.knowledge.utils; - -import com.tencent.supersonic.chat.api.component.SemanticInterpreter; -import org.springframework.core.io.support.SpringFactoriesLoader; - -import java.util.List; -import java.util.Objects; - -public class ComponentFactory { - - private static SemanticInterpreter semanticInterpreter; - - public static SemanticInterpreter getSemanticLayer() { - if (Objects.isNull(semanticInterpreter)) { - semanticInterpreter = init(SemanticInterpreter.class); - } - return semanticInterpreter; - } - - public static void setSemanticLayer(SemanticInterpreter layer) { - semanticInterpreter = layer; - } - - private static List init(Class factoryType, List list) { - list.addAll(SpringFactoriesLoader.loadFactories(factoryType, - Thread.currentThread().getContextClassLoader())); - return list; - } - - private static T init(Class factoryType) { - return SpringFactoriesLoader.loadFactories(factoryType, - Thread.currentThread().getContextClassLoader()).get(0); - } -} \ No newline at end of file diff --git a/chat/knowledge/src/main/resources/META-INF/spring.factories b/chat/knowledge/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 68e94072d..000000000 --- a/chat/knowledge/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,2 +0,0 @@ -com.tencent.supersonic.knowledge.dictionary.FileHandler=\ - com.tencent.supersonic.knowledge.dictionary.LocalFileHandler \ No newline at end of file diff --git a/chat/knowledge/src/test/java/com/tencent/supersonic/knowledge/utils/NatureHelperTest.java b/chat/knowledge/src/test/java/com/tencent/supersonic/knowledge/utils/NatureHelperTest.java deleted file mode 100644 index 2ae155177..000000000 --- a/chat/knowledge/src/test/java/com/tencent/supersonic/knowledge/utils/NatureHelperTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.tencent.supersonic.knowledge.utils; - - -import cn.hutool.core.lang.Assert; -import com.tencent.supersonic.chat.api.pojo.SchemaElementType; -import org.junit.jupiter.api.Test; - -class NatureHelperTest { - - @Test - void convertToElementType() { - SchemaElementType schemaElementType = NatureHelper.convertToElementType("_1"); - - Assert.equals(schemaElementType, SchemaElementType.MODEL); - } -} \ No newline at end of file diff --git a/chat/pom.xml b/chat/pom.xml index ea4e3b94f..46eae4dee 100644 --- a/chat/pom.xml +++ b/chat/pom.xml @@ -5,9 +5,9 @@ 4.0.0 pom - core - knowledge api + core + server diff --git a/chat/server/pom.xml b/chat/server/pom.xml new file mode 100644 index 000000000..aca052617 --- /dev/null +++ b/chat/server/pom.xml @@ -0,0 +1,56 @@ + + + + chat + com.tencent.supersonic + ${revision} + + 4.0.0 + + chat-server + + + org.springframework + spring-context + + + org.projectlombok + lombok + + + com.tencent.supersonic + common + ${project.version} + + + com.tencent.supersonic + auth-api + ${project.version} + + + com.tencent.supersonic + chat-api + ${project.version} + + + com.tencent.supersonic + headless-core + ${project.version} + compile + + + com.tencent.supersonic + chat-core + ${project.version} + compile + + + junit + junit + test + + + + \ No newline at end of file diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/config/ChatConfig.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/config/ChatConfig.java similarity index 95% rename from chat/core/src/main/java/com/tencent/supersonic/chat/config/ChatConfig.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/config/ChatConfig.java index 0eec7f4c1..205176e72 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/config/ChatConfig.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/config/ChatConfig.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.config; +package com.tencent.supersonic.chat.server.config; import com.tencent.supersonic.chat.api.pojo.request.ChatAggConfigReq; import com.tencent.supersonic.chat.api.pojo.request.ChatDetailConfigReq; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/config/ChatConfigFilterInternal.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/config/ChatConfigFilterInternal.java similarity index 73% rename from chat/core/src/main/java/com/tencent/supersonic/chat/config/ChatConfigFilterInternal.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/config/ChatConfigFilterInternal.java index e298ae14b..e4f9a614c 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/config/ChatConfigFilterInternal.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/config/ChatConfigFilterInternal.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.config; +package com.tencent.supersonic.chat.server.config; import lombok.Data; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/listener/ApplicationStartedListener.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/listener/ApplicationStartedListener.java similarity index 88% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/listener/ApplicationStartedListener.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/listener/ApplicationStartedListener.java index c02759717..f7cfe0efe 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/listener/ApplicationStartedListener.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/listener/ApplicationStartedListener.java @@ -1,9 +1,11 @@ -package com.tencent.supersonic.knowledge.listener; +package com.tencent.supersonic.chat.server.listener; -import com.tencent.supersonic.knowledge.dictionary.DictWord; -import com.tencent.supersonic.knowledge.service.SchemaService; -import com.tencent.supersonic.knowledge.service.KnowledgeService; -import com.tencent.supersonic.knowledge.service.WordService; +import com.tencent.supersonic.chat.core.knowledge.DictWord; +import com.tencent.supersonic.chat.server.service.KnowledgeService; +import com.tencent.supersonic.chat.server.service.impl.SchemaService; +import com.tencent.supersonic.chat.server.service.impl.WordService; +import java.util.List; +import java.util.concurrent.CompletableFuture; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -12,9 +14,6 @@ import org.springframework.core.annotation.Order; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import java.util.List; -import java.util.concurrent.CompletableFuture; - @Slf4j @Component @Order(2) diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/listener/SchemaDictUpdateListener.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/listener/SchemaDictUpdateListener.java similarity index 89% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/listener/SchemaDictUpdateListener.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/listener/SchemaDictUpdateListener.java index bc2374a92..682aa9c62 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/listener/SchemaDictUpdateListener.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/listener/SchemaDictUpdateListener.java @@ -1,12 +1,12 @@ -package com.tencent.supersonic.knowledge.listener; +package com.tencent.supersonic.chat.server.listener; +import com.tencent.supersonic.chat.core.knowledge.DictWord; +import com.tencent.supersonic.chat.core.utils.HanlpHelper; +import com.tencent.supersonic.chat.server.service.impl.SchemaService; import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.pojo.DataEvent; import com.tencent.supersonic.common.pojo.enums.DictWordType; import com.tencent.supersonic.common.pojo.enums.EventType; -import com.tencent.supersonic.knowledge.dictionary.DictWord; -import com.tencent.supersonic.knowledge.service.SchemaService; -import com.tencent.supersonic.knowledge.utils.HanlpHelper; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationListener; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/AgentDO.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/AgentDO.java similarity index 98% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/AgentDO.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/AgentDO.java index 777b27f04..4f2c9d3e9 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/AgentDO.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/AgentDO.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.persistence.dataobject; +package com.tencent.supersonic.chat.server.persistence.dataobject; import java.util.Date; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/AgentDOExample.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/AgentDOExample.java similarity index 99% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/AgentDOExample.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/AgentDOExample.java index c8ab99a65..2f454bfe3 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/AgentDOExample.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/AgentDOExample.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.persistence.dataobject; +package com.tencent.supersonic.chat.server.persistence.dataobject; import java.util.ArrayList; import java.util.Date; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/ChatConfigDO.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatConfigDO.java similarity index 89% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/ChatConfigDO.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatConfigDO.java index 1498094ba..9f9146063 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/ChatConfigDO.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatConfigDO.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.persistence.dataobject; +package com.tencent.supersonic.chat.server.persistence.dataobject; import java.util.Date; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/ChatContextDO.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatContextDO.java similarity index 81% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/ChatContextDO.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatContextDO.java index 7d9027485..5f5a923c2 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/ChatContextDO.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatContextDO.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.persistence.dataobject; +package com.tencent.supersonic.chat.server.persistence.dataobject; import java.io.Serializable; import java.time.Instant; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/ChatDO.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatDO.java similarity index 82% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/ChatDO.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatDO.java index 139d8330d..d448c52a3 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/ChatDO.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatDO.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.persistence.dataobject; +package com.tencent.supersonic.chat.server.persistence.dataobject; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/ChatParseDO.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatParseDO.java similarity index 97% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/ChatParseDO.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatParseDO.java index 3f5a6d47d..608ca0257 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/ChatParseDO.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatParseDO.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.persistence.dataobject; +package com.tencent.supersonic.chat.server.persistence.dataobject; import java.util.Date; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/ChatQueryDO.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatQueryDO.java similarity index 89% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/ChatQueryDO.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatQueryDO.java index 663b1532e..e525e1c86 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/ChatQueryDO.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatQueryDO.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.persistence.dataobject; +package com.tencent.supersonic.chat.server.persistence.dataobject; import lombok.Data; import java.util.Date; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/ChatQueryDOExample.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatQueryDOExample.java similarity index 99% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/ChatQueryDOExample.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatQueryDOExample.java index b7b69d8cd..311d77a75 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/ChatQueryDOExample.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/ChatQueryDOExample.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.persistence.dataobject; +package com.tencent.supersonic.chat.server.persistence.dataobject; import java.util.ArrayList; import java.util.Date; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/CostType.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/CostType.java similarity index 85% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/CostType.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/CostType.java index 7fa89d99f..35cd8c696 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/CostType.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/CostType.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.persistence.dataobject; +package com.tencent.supersonic.chat.server.persistence.dataobject; public enum CostType { MAPPER(1, "mapper"), diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/persistence/dataobject/DictConfDO.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/DictConfDO.java similarity index 80% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/persistence/dataobject/DictConfDO.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/DictConfDO.java index 770e7c5ec..e39a0d3b4 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/persistence/dataobject/DictConfDO.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/DictConfDO.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.persistence.dataobject; +package com.tencent.supersonic.chat.server.persistence.dataobject; import java.util.Date; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/persistence/dataobject/DictTaskDO.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/DictTaskDO.java similarity index 89% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/persistence/dataobject/DictTaskDO.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/DictTaskDO.java index 44a5776fb..be38e717a 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/persistence/dataobject/DictTaskDO.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/DictTaskDO.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.knowledge.persistence.dataobject; +package com.tencent.supersonic.chat.server.persistence.dataobject; import java.util.Date; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/DimValueDO.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/DimValueDO.java similarity index 79% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/DimValueDO.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/DimValueDO.java index eafe44f57..2818e57e3 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/DimValueDO.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/DimValueDO.java @@ -1,11 +1,11 @@ -package com.tencent.supersonic.chat.persistence.dataobject; +package com.tencent.supersonic.chat.server.persistence.dataobject; +import com.tencent.supersonic.chat.core.config.DefaultMetric; +import com.tencent.supersonic.chat.core.config.Dim4Dict; import java.util.ArrayList; import java.util.List; -import com.tencent.supersonic.chat.config.DefaultMetric; -import com.tencent.supersonic.chat.config.Dim4Dict; import lombok.Data; import lombok.ToString; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/PluginDO.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/PluginDO.java similarity index 98% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/PluginDO.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/PluginDO.java index 77dd94e65..8e5d64ddf 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/PluginDO.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/PluginDO.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.persistence.dataobject; +package com.tencent.supersonic.chat.server.persistence.dataobject; import java.util.Date; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/PluginDOExample.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/PluginDOExample.java similarity index 99% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/PluginDOExample.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/PluginDOExample.java index 703ea3d80..42e3ea131 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/PluginDOExample.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/PluginDOExample.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.persistence.dataobject; +package com.tencent.supersonic.chat.server.persistence.dataobject; import java.util.ArrayList; import java.util.Date; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/QueryDO.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/QueryDO.java similarity index 91% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/QueryDO.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/QueryDO.java index 4f9dc0eec..46dc0a393 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/QueryDO.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/QueryDO.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.persistence.dataobject; +package com.tencent.supersonic.chat.server.persistence.dataobject; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/StatisticsDO.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/StatisticsDO.java similarity index 91% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/StatisticsDO.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/StatisticsDO.java index e69627fcd..cd2ee5da4 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/dataobject/StatisticsDO.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/dataobject/StatisticsDO.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.persistence.dataobject; +package com.tencent.supersonic.chat.server.persistence.dataobject; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/AgentDOMapper.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/AgentDOMapper.java similarity index 84% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/AgentDOMapper.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/AgentDOMapper.java index bfa20f7ab..6beb31b37 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/AgentDOMapper.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/AgentDOMapper.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.chat.persistence.mapper; +package com.tencent.supersonic.chat.server.persistence.mapper; -import com.tencent.supersonic.chat.persistence.dataobject.AgentDO; -import com.tencent.supersonic.chat.persistence.dataobject.AgentDOExample; +import com.tencent.supersonic.chat.server.persistence.dataobject.AgentDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.AgentDOExample; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/ChatConfigMapper.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/ChatConfigMapper.java similarity index 60% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/ChatConfigMapper.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/ChatConfigMapper.java index 5af9a03dc..40626c756 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/ChatConfigMapper.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/ChatConfigMapper.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.chat.persistence.mapper; +package com.tencent.supersonic.chat.server.persistence.mapper; -import com.tencent.supersonic.chat.config.ChatConfigFilterInternal; -import com.tencent.supersonic.chat.persistence.dataobject.ChatConfigDO; +import com.tencent.supersonic.chat.server.config.ChatConfigFilterInternal; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatConfigDO; import java.util.List; import org.apache.ibatis.annotations.Mapper; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/ChatContextMapper.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/ChatContextMapper.java similarity index 62% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/ChatContextMapper.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/ChatContextMapper.java index 391ab3b76..c30b73610 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/ChatContextMapper.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/ChatContextMapper.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.chat.persistence.mapper; +package com.tencent.supersonic.chat.server.persistence.mapper; -import com.tencent.supersonic.chat.persistence.dataobject.ChatContextDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatContextDO; import org.apache.ibatis.annotations.Mapper; @Mapper diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/ChatMapper.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/ChatMapper.java similarity index 72% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/ChatMapper.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/ChatMapper.java index 2434e7f3e..6774373d3 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/ChatMapper.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/ChatMapper.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.chat.persistence.mapper; +package com.tencent.supersonic.chat.server.persistence.mapper; -import com.tencent.supersonic.chat.persistence.dataobject.ChatDO; -import com.tencent.supersonic.chat.persistence.dataobject.QueryDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.QueryDO; import java.util.List; import org.apache.ibatis.annotations.Mapper; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/ChatParseMapper.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/ChatParseMapper.java similarity index 74% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/ChatParseMapper.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/ChatParseMapper.java index 0383ced21..d76ea4445 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/ChatParseMapper.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/ChatParseMapper.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.chat.persistence.mapper; +package com.tencent.supersonic.chat.server.persistence.mapper; -import com.tencent.supersonic.chat.persistence.dataobject.ChatParseDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatParseDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/ChatQueryDOMapper.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/ChatQueryDOMapper.java similarity index 63% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/ChatQueryDOMapper.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/ChatQueryDOMapper.java index 9f3e5d766..dc4d913b3 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/ChatQueryDOMapper.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/ChatQueryDOMapper.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.chat.persistence.mapper; +package com.tencent.supersonic.chat.server.persistence.mapper; -import com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDO; -import com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDOExample; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatQueryDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatQueryDOExample; import org.apache.ibatis.annotations.Mapper; import java.util.List; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/persistence/mapper/DictConfMapper.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/DictConfMapper.java similarity index 68% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/persistence/mapper/DictConfMapper.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/DictConfMapper.java index 76043ff81..c45055ff4 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/persistence/mapper/DictConfMapper.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/DictConfMapper.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.knowledge.persistence.mapper; +package com.tencent.supersonic.chat.server.persistence.mapper; -import com.tencent.supersonic.knowledge.persistence.dataobject.DictConfDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.DictConfDO; import org.apache.ibatis.annotations.Mapper; @Mapper diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/persistence/mapper/DictTaskMapper.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/DictTaskMapper.java similarity index 72% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/persistence/mapper/DictTaskMapper.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/DictTaskMapper.java index ab83cb29d..ce5e6e66e 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/persistence/mapper/DictTaskMapper.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/DictTaskMapper.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.knowledge.persistence.mapper; +package com.tencent.supersonic.chat.server.persistence.mapper; -import com.tencent.supersonic.knowledge.persistence.dataobject.DictTaskDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.DictTaskDO; import com.tencent.supersonic.chat.api.pojo.request.DictTaskFilterReq; import java.util.List; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/PluginDOMapper.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/PluginDOMapper.java similarity index 82% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/PluginDOMapper.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/PluginDOMapper.java index 9f410ed00..c0856c18b 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/PluginDOMapper.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/PluginDOMapper.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.chat.persistence.mapper; +package com.tencent.supersonic.chat.server.persistence.mapper; -import com.tencent.supersonic.chat.persistence.dataobject.PluginDO; -import com.tencent.supersonic.chat.persistence.dataobject.PluginDOExample; +import com.tencent.supersonic.chat.server.persistence.dataobject.PluginDOExample; +import com.tencent.supersonic.chat.server.persistence.dataobject.PluginDO; import org.apache.ibatis.annotations.Mapper; import java.util.List; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/StatisticsMapper.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/StatisticsMapper.java similarity index 62% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/StatisticsMapper.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/StatisticsMapper.java index f46042c27..5bd0b15f1 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/StatisticsMapper.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/StatisticsMapper.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.chat.persistence.mapper; +package com.tencent.supersonic.chat.server.persistence.mapper; -import com.tencent.supersonic.chat.persistence.dataobject.StatisticsDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.StatisticsDO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/custom/ShowCaseCustomMapper.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/custom/ShowCaseCustomMapper.java similarity index 58% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/custom/ShowCaseCustomMapper.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/custom/ShowCaseCustomMapper.java index eb7de40f1..05eb77347 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/mapper/custom/ShowCaseCustomMapper.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/mapper/custom/ShowCaseCustomMapper.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.chat.persistence.mapper.custom; +package com.tencent.supersonic.chat.server.persistence.mapper.custom; -import com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatQueryDO; import org.apache.ibatis.annotations.Mapper; import java.util.List; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/AgentRepository.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/AgentRepository.java similarity index 63% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/AgentRepository.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/AgentRepository.java index 775209cd3..49fb2e38f 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/AgentRepository.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/AgentRepository.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.chat.persistence.repository; +package com.tencent.supersonic.chat.server.persistence.repository; -import com.tencent.supersonic.chat.persistence.dataobject.AgentDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.AgentDO; import java.util.List; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/ChatConfigRepository.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/ChatConfigRepository.java similarity index 76% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/ChatConfigRepository.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/ChatConfigRepository.java index 220190c45..6d5deed21 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/ChatConfigRepository.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/ChatConfigRepository.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.chat.persistence.repository; +package com.tencent.supersonic.chat.server.persistence.repository; -import com.tencent.supersonic.chat.config.ChatConfig; +import com.tencent.supersonic.chat.server.config.ChatConfig; import com.tencent.supersonic.chat.api.pojo.request.ChatConfigFilter; import com.tencent.supersonic.chat.api.pojo.response.ChatConfigResp; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/ChatContextRepository.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/ChatContextRepository.java similarity index 53% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/ChatContextRepository.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/ChatContextRepository.java index 53a534d31..58c6beb8d 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/ChatContextRepository.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/ChatContextRepository.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.chat.persistence.repository; +package com.tencent.supersonic.chat.server.persistence.repository; -import com.tencent.supersonic.chat.api.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.ChatContext; public interface ChatContextRepository { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/ChatQueryRepository.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/ChatQueryRepository.java similarity index 81% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/ChatQueryRepository.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/ChatQueryRepository.java index e716871da..ca363267b 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/ChatQueryRepository.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/ChatQueryRepository.java @@ -1,14 +1,14 @@ -package com.tencent.supersonic.chat.persistence.repository; +package com.tencent.supersonic.chat.server.persistence.repository; import com.github.pagehelper.PageInfo; -import com.tencent.supersonic.chat.api.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.ChatContext; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; import com.tencent.supersonic.chat.api.pojo.request.PageQueryInfoReq; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; import com.tencent.supersonic.chat.api.pojo.response.ParseResp; import com.tencent.supersonic.chat.api.pojo.response.QueryResp; -import com.tencent.supersonic.chat.persistence.dataobject.ChatParseDO; -import com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatParseDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatQueryDO; import java.util.List; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/ChatRepository.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/ChatRepository.java similarity index 69% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/ChatRepository.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/ChatRepository.java index 364a5efa6..e6bc0e6d8 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/ChatRepository.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/ChatRepository.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.chat.persistence.repository; +package com.tencent.supersonic.chat.server.persistence.repository; -import com.tencent.supersonic.chat.persistence.dataobject.ChatDO; -import com.tencent.supersonic.chat.persistence.dataobject.QueryDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.QueryDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatDO; import java.util.List; public interface ChatRepository { diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/persistence/repository/DictRepository.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/DictRepository.java similarity index 58% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/persistence/repository/DictRepository.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/DictRepository.java index 556e96e9b..a3748197d 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/persistence/repository/DictRepository.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/DictRepository.java @@ -1,11 +1,10 @@ -package com.tencent.supersonic.knowledge.persistence.repository; +package com.tencent.supersonic.chat.server.persistence.repository; -import com.tencent.supersonic.knowledge.persistence.dataobject.DictTaskDO; -import com.tencent.supersonic.knowledge.dictionary.DictConfig; import com.tencent.supersonic.chat.api.pojo.request.DictTaskFilterReq; -import com.tencent.supersonic.knowledge.dictionary.DimValueDictInfo; - +import com.tencent.supersonic.chat.core.knowledge.DictConfig; +import com.tencent.supersonic.chat.core.knowledge.DimValueDictInfo; +import com.tencent.supersonic.chat.server.persistence.dataobject.DictTaskDO; import java.util.List; public interface DictRepository { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/PluginRepository.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/PluginRepository.java similarity index 62% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/PluginRepository.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/PluginRepository.java index 4e434c376..c24e50910 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/PluginRepository.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/PluginRepository.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.chat.persistence.repository; +package com.tencent.supersonic.chat.server.persistence.repository; -import com.tencent.supersonic.chat.persistence.dataobject.PluginDO; -import com.tencent.supersonic.chat.persistence.dataobject.PluginDOExample; +import com.tencent.supersonic.chat.server.persistence.dataobject.PluginDOExample; +import com.tencent.supersonic.chat.server.persistence.dataobject.PluginDO; import java.util.List; diff --git a/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/StatisticsRepository.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/StatisticsRepository.java new file mode 100644 index 000000000..ea4431c45 --- /dev/null +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/StatisticsRepository.java @@ -0,0 +1,11 @@ +package com.tencent.supersonic.chat.server.persistence.repository; + + +import com.tencent.supersonic.chat.server.persistence.dataobject.StatisticsDO; + +import java.util.List; + +public interface StatisticsRepository { + + void batchSaveStatistics(List list); +} diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/AgentRepositoryImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/AgentRepositoryImpl.java similarity index 69% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/AgentRepositoryImpl.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/AgentRepositoryImpl.java index 43d7e0a2b..ebe670f87 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/AgentRepositoryImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/AgentRepositoryImpl.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.chat.persistence.repository.impl; +package com.tencent.supersonic.chat.server.persistence.repository.impl; -import com.tencent.supersonic.chat.persistence.dataobject.AgentDO; -import com.tencent.supersonic.chat.persistence.dataobject.AgentDOExample; -import com.tencent.supersonic.chat.persistence.mapper.AgentDOMapper; -import com.tencent.supersonic.chat.persistence.repository.AgentRepository; +import com.tencent.supersonic.chat.server.persistence.dataobject.AgentDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.AgentDOExample; +import com.tencent.supersonic.chat.server.persistence.mapper.AgentDOMapper; +import com.tencent.supersonic.chat.server.persistence.repository.AgentRepository; import org.springframework.stereotype.Repository; import java.util.List; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/ChatConfigRepositoryImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/ChatConfigRepositoryImpl.java similarity index 81% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/ChatConfigRepositoryImpl.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/ChatConfigRepositoryImpl.java index 6ba9121eb..047cca4b6 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/ChatConfigRepositoryImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/ChatConfigRepositoryImpl.java @@ -1,13 +1,13 @@ -package com.tencent.supersonic.chat.persistence.repository.impl; +package com.tencent.supersonic.chat.server.persistence.repository.impl; -import com.tencent.supersonic.chat.config.ChatConfig; +import com.tencent.supersonic.chat.server.config.ChatConfig; import com.tencent.supersonic.chat.api.pojo.request.ChatConfigFilter; -import com.tencent.supersonic.chat.config.ChatConfigFilterInternal; +import com.tencent.supersonic.chat.server.config.ChatConfigFilterInternal; import com.tencent.supersonic.chat.api.pojo.response.ChatConfigResp; -import com.tencent.supersonic.chat.persistence.dataobject.ChatConfigDO; -import com.tencent.supersonic.chat.persistence.repository.ChatConfigRepository; -import com.tencent.supersonic.chat.utils.ChatConfigHelper; -import com.tencent.supersonic.chat.persistence.mapper.ChatConfigMapper; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatConfigDO; +import com.tencent.supersonic.chat.server.persistence.mapper.ChatConfigMapper; +import com.tencent.supersonic.chat.server.util.ChatConfigHelper; +import com.tencent.supersonic.chat.server.persistence.repository.ChatConfigRepository; import java.util.ArrayList; import java.util.List; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/ChatContextRepositoryImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/ChatContextRepositoryImpl.java similarity index 87% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/ChatContextRepositoryImpl.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/ChatContextRepositoryImpl.java index 2765e1f06..dead75eb5 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/ChatContextRepositoryImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/ChatContextRepositoryImpl.java @@ -1,11 +1,11 @@ -package com.tencent.supersonic.chat.persistence.repository.impl; +package com.tencent.supersonic.chat.server.persistence.repository.impl; import com.google.gson.Gson; -import com.tencent.supersonic.chat.api.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.ChatContext; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; -import com.tencent.supersonic.chat.persistence.dataobject.ChatContextDO; -import com.tencent.supersonic.chat.persistence.mapper.ChatContextMapper; -import com.tencent.supersonic.chat.persistence.repository.ChatContextRepository; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatContextDO; +import com.tencent.supersonic.chat.server.persistence.mapper.ChatContextMapper; +import com.tencent.supersonic.chat.server.persistence.repository.ChatContextRepository; import com.tencent.supersonic.common.util.JsonUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/ChatQueryRepositoryImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/ChatQueryRepositoryImpl.java similarity index 91% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/ChatQueryRepositoryImpl.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/ChatQueryRepositoryImpl.java index 97b99dc49..de995510e 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/ChatQueryRepositoryImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/ChatQueryRepositoryImpl.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.chat.persistence.repository.impl; +package com.tencent.supersonic.chat.server.persistence.repository.impl; import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; -import com.tencent.supersonic.chat.api.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.ChatContext; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; import com.tencent.supersonic.chat.api.pojo.request.PageQueryInfoReq; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; @@ -11,14 +11,14 @@ import com.tencent.supersonic.chat.api.pojo.response.ParseResp; import com.tencent.supersonic.chat.api.pojo.response.QueryResp; import com.tencent.supersonic.chat.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.SimilarQueryRecallResp; -import com.tencent.supersonic.chat.persistence.dataobject.ChatParseDO; -import com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDO; -import com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDOExample; -import com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDOExample.Criteria; -import com.tencent.supersonic.chat.persistence.mapper.ChatParseMapper; -import com.tencent.supersonic.chat.persistence.mapper.ChatQueryDOMapper; -import com.tencent.supersonic.chat.persistence.mapper.custom.ShowCaseCustomMapper; -import com.tencent.supersonic.chat.persistence.repository.ChatQueryRepository; +import com.tencent.supersonic.chat.server.persistence.mapper.custom.ShowCaseCustomMapper; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatParseDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatQueryDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatQueryDOExample; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatQueryDOExample.Criteria; +import com.tencent.supersonic.chat.server.persistence.mapper.ChatParseMapper; +import com.tencent.supersonic.chat.server.persistence.mapper.ChatQueryDOMapper; +import com.tencent.supersonic.chat.server.persistence.repository.ChatQueryRepository; import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.common.util.PageUtils; import lombok.extern.slf4j.Slf4j; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/ChatRepositoryImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/ChatRepositoryImpl.java similarity index 79% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/ChatRepositoryImpl.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/ChatRepositoryImpl.java index 2121bb4ce..8e19d2593 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/ChatRepositoryImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/ChatRepositoryImpl.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.chat.persistence.repository.impl; +package com.tencent.supersonic.chat.server.persistence.repository.impl; -import com.tencent.supersonic.chat.persistence.dataobject.ChatDO; -import com.tencent.supersonic.chat.persistence.dataobject.QueryDO; -import com.tencent.supersonic.chat.persistence.repository.ChatRepository; -import com.tencent.supersonic.chat.persistence.mapper.ChatMapper; +import com.tencent.supersonic.chat.server.persistence.dataobject.QueryDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatDO; +import com.tencent.supersonic.chat.server.persistence.mapper.ChatMapper; +import com.tencent.supersonic.chat.server.persistence.repository.ChatRepository; import java.util.List; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Primary; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/persistence/repository/DictRepositoryImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/DictRepositoryImpl.java similarity index 81% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/persistence/repository/DictRepositoryImpl.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/DictRepositoryImpl.java index 6f0d3de34..9e850c909 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/persistence/repository/DictRepositoryImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/DictRepositoryImpl.java @@ -1,29 +1,27 @@ -package com.tencent.supersonic.knowledge.persistence.repository; +package com.tencent.supersonic.chat.server.persistence.repository.impl; +import com.tencent.supersonic.chat.api.pojo.request.DictTaskFilterReq; +import com.tencent.supersonic.chat.core.knowledge.DictConfig; +import com.tencent.supersonic.chat.core.knowledge.DimValueDictInfo; +import com.tencent.supersonic.chat.server.persistence.dataobject.DictConfDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.DictTaskDO; +import com.tencent.supersonic.chat.server.persistence.mapper.DictConfMapper; +import com.tencent.supersonic.chat.server.persistence.mapper.DictTaskMapper; +import com.tencent.supersonic.chat.server.persistence.repository.DictRepository; +import com.tencent.supersonic.chat.server.util.DictTaskConverter; import com.tencent.supersonic.common.pojo.enums.TaskStatusEnum; import com.tencent.supersonic.common.util.JsonUtil; -import com.tencent.supersonic.knowledge.persistence.dataobject.DictTaskDO; -import com.tencent.supersonic.knowledge.utils.DictTaskConverter; -import com.tencent.supersonic.knowledge.persistence.dataobject.DictConfDO; -import com.tencent.supersonic.knowledge.dictionary.DictConfig; -import com.tencent.supersonic.chat.api.pojo.request.DictTaskFilterReq; -import com.tencent.supersonic.knowledge.dictionary.DimValueDictInfo; -import com.tencent.supersonic.knowledge.persistence.mapper.DictConfMapper; -import com.tencent.supersonic.knowledge.persistence.mapper.DictTaskMapper; - - +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.Set; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Repository; import org.springframework.util.CollectionUtils; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Set; -import java.util.Objects; - @Repository @Slf4j diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/PluginRepositoryImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/PluginRepositoryImpl.java similarity index 85% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/PluginRepositoryImpl.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/PluginRepositoryImpl.java index 1b66b5c90..47cc87165 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/PluginRepositoryImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/PluginRepositoryImpl.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.chat.persistence.repository.impl; +package com.tencent.supersonic.chat.server.persistence.repository.impl; -import com.tencent.supersonic.chat.persistence.dataobject.PluginDO; -import com.tencent.supersonic.chat.persistence.dataobject.PluginDOExample; -import com.tencent.supersonic.chat.persistence.mapper.PluginDOMapper; -import com.tencent.supersonic.chat.persistence.repository.PluginRepository; +import com.tencent.supersonic.chat.server.persistence.dataobject.PluginDOExample; +import com.tencent.supersonic.chat.server.persistence.dataobject.PluginDO; +import com.tencent.supersonic.chat.server.persistence.mapper.PluginDOMapper; +import com.tencent.supersonic.chat.server.persistence.repository.PluginRepository; import com.tencent.supersonic.common.util.ContextUtils; import lombok.extern.slf4j.Slf4j; import org.apache.logging.log4j.util.Strings; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/StatisticsRepositoryImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/StatisticsRepositoryImpl.java similarity index 64% rename from chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/StatisticsRepositoryImpl.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/StatisticsRepositoryImpl.java index 1cbf8b065..8bbcc742a 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/persistence/repository/impl/StatisticsRepositoryImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/persistence/repository/impl/StatisticsRepositoryImpl.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.chat.persistence.repository.impl; +package com.tencent.supersonic.chat.server.persistence.repository.impl; -import com.tencent.supersonic.chat.persistence.dataobject.StatisticsDO; -import com.tencent.supersonic.chat.persistence.mapper.StatisticsMapper; -import com.tencent.supersonic.chat.persistence.repository.StatisticsRepository; +import com.tencent.supersonic.chat.server.persistence.dataobject.StatisticsDO; +import com.tencent.supersonic.chat.server.persistence.mapper.StatisticsMapper; +import com.tencent.supersonic.chat.server.persistence.repository.StatisticsRepository; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Repository; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/ResultProcessor.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/ResultProcessor.java similarity index 68% rename from chat/core/src/main/java/com/tencent/supersonic/chat/processor/ResultProcessor.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/ResultProcessor.java index a67843ca2..19e39704b 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/ResultProcessor.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/ResultProcessor.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.processor; +package com.tencent.supersonic.chat.server.processor; /** * A ResultProcessor wraps things up before returning results to users. diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/execute/DimensionRecommendProcessor.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/execute/DimensionRecommendProcessor.java similarity index 95% rename from chat/core/src/main/java/com/tencent/supersonic/chat/processor/execute/DimensionRecommendProcessor.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/execute/DimensionRecommendProcessor.java index 974f48381..056305039 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/execute/DimensionRecommendProcessor.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/execute/DimensionRecommendProcessor.java @@ -1,23 +1,22 @@ -package com.tencent.supersonic.chat.processor.execute; +package com.tencent.supersonic.chat.server.processor.execute; +import com.google.common.collect.Lists; import com.tencent.supersonic.chat.api.pojo.ModelSchema; import com.tencent.supersonic.chat.api.pojo.RelatedSchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; import com.tencent.supersonic.chat.api.pojo.request.ExecuteQueryReq; import com.tencent.supersonic.chat.api.pojo.response.QueryResult; -import com.tencent.supersonic.chat.service.SemanticService; +import com.tencent.supersonic.chat.server.service.SemanticService; import com.tencent.supersonic.common.pojo.enums.QueryType; import com.tencent.supersonic.common.util.ContextUtils; -import org.apache.commons.compress.utils.Lists; -import org.springframework.util.CollectionUtils; - import java.util.Comparator; import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; +import org.springframework.util.CollectionUtils; /** * DimensionRecommendProcessor recommend some dimensions diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/execute/ExecuteResultProcessor.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/execute/ExecuteResultProcessor.java similarity index 78% rename from chat/core/src/main/java/com/tencent/supersonic/chat/processor/execute/ExecuteResultProcessor.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/execute/ExecuteResultProcessor.java index cc8c28fd8..626f8baa9 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/execute/ExecuteResultProcessor.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/execute/ExecuteResultProcessor.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.chat.processor.execute; +package com.tencent.supersonic.chat.server.processor.execute; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; import com.tencent.supersonic.chat.api.pojo.request.ExecuteQueryReq; import com.tencent.supersonic.chat.api.pojo.response.QueryResult; -import com.tencent.supersonic.chat.processor.ResultProcessor; +import com.tencent.supersonic.chat.server.processor.ResultProcessor; /** * A ExecuteResultProcessor wraps things up before returning results to users in execute stage. diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/execute/MetricRecommendProcessor.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/execute/MetricRecommendProcessor.java similarity index 91% rename from chat/core/src/main/java/com/tencent/supersonic/chat/processor/execute/MetricRecommendProcessor.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/execute/MetricRecommendProcessor.java index 3c1c66555..634aae1a3 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/execute/MetricRecommendProcessor.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/execute/MetricRecommendProcessor.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.processor.execute; +package com.tencent.supersonic.chat.server.processor.execute; import com.alibaba.fastjson.JSONObject; import com.tencent.supersonic.chat.api.pojo.SchemaElement; @@ -6,15 +6,14 @@ import com.tencent.supersonic.chat.api.pojo.SchemaElementType; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; import com.tencent.supersonic.chat.api.pojo.request.ExecuteQueryReq; import com.tencent.supersonic.chat.api.pojo.response.QueryResult; +import com.tencent.supersonic.common.config.EmbeddingConfig; import com.tencent.supersonic.common.pojo.enums.QueryType; import com.tencent.supersonic.common.util.ComponentFactory; +import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.embedding.Retrieval; import com.tencent.supersonic.common.util.embedding.RetrieveQuery; import com.tencent.supersonic.common.util.embedding.RetrieveQueryResult; import com.tencent.supersonic.common.util.embedding.S2EmbeddingStore; -import com.tencent.supersonic.headless.server.listener.MetaEmbeddingListener; -import org.springframework.util.CollectionUtils; - import java.util.Collections; import java.util.Comparator; import java.util.HashMap; @@ -22,6 +21,7 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +import org.springframework.util.CollectionUtils; /** * MetricRecommendProcessor fills recommended metrics based on embedding similarity. @@ -49,8 +49,11 @@ public class MetricRecommendProcessor implements ExecuteResultProcessor { filterCondition.put("type", SchemaElementType.METRIC.name()); RetrieveQuery retrieveQuery = RetrieveQuery.builder().queryTextsList(metricNames) .filterCondition(filterCondition).queryEmbeddings(null).build(); + + EmbeddingConfig embeddingConfig = ContextUtils.getBean(EmbeddingConfig.class); + List retrieveQueryResults = s2EmbeddingStore.retrieveQuery( - MetaEmbeddingListener.COLLECTION_NAME, retrieveQuery, METRIC_RECOMMEND_SIZE + 1); + embeddingConfig.getMetaCollectionName(), retrieveQuery, METRIC_RECOMMEND_SIZE + 1); if (CollectionUtils.isEmpty(retrieveQueryResults)) { return; } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/EntityInfoProcessor.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/EntityInfoProcessor.java similarity index 80% rename from chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/EntityInfoProcessor.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/EntityInfoProcessor.java index b1f27184d..4de305ae1 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/EntityInfoProcessor.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/EntityInfoProcessor.java @@ -1,20 +1,19 @@ -package com.tencent.supersonic.chat.processor.parse; +package com.tencent.supersonic.chat.server.processor.parse; -import com.tencent.supersonic.chat.api.component.SemanticQuery; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; +import com.tencent.supersonic.chat.core.query.SemanticQuery; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; import com.tencent.supersonic.chat.api.pojo.response.EntityInfo; import com.tencent.supersonic.chat.api.pojo.response.ParseResp; -import com.tencent.supersonic.chat.query.QueryManager; -import com.tencent.supersonic.chat.query.llm.analytics.MetricAnalyzeQuery; -import com.tencent.supersonic.chat.service.SemanticService; +import com.tencent.supersonic.chat.core.query.QueryManager; +import com.tencent.supersonic.chat.core.query.llm.analytics.MetricAnalyzeQuery; +import com.tencent.supersonic.chat.server.service.SemanticService; import com.tencent.supersonic.common.util.ContextUtils; -import org.springframework.util.CollectionUtils; - import java.util.List; import java.util.stream.Collectors; +import org.springframework.util.CollectionUtils; /** * EntityInfoProcessor fills core attributes of an entity so that diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/MetricCheckProcessor.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/MetricCheckProcessor.java similarity index 97% rename from chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/MetricCheckProcessor.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/MetricCheckProcessor.java index 231ffaaf3..6e1003c04 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/MetricCheckProcessor.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/MetricCheckProcessor.java @@ -1,31 +1,30 @@ -package com.tencent.supersonic.chat.processor.parse; +package com.tencent.supersonic.chat.server.processor.parse; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import com.tencent.supersonic.chat.api.component.SemanticQuery; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.RelatedSchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; +import com.tencent.supersonic.chat.core.query.SemanticQuery; import com.tencent.supersonic.chat.api.pojo.SemanticSchema; import com.tencent.supersonic.chat.api.pojo.response.ParseResp; -import com.tencent.supersonic.chat.service.SemanticService; +import com.tencent.supersonic.chat.server.service.SemanticService; import com.tencent.supersonic.common.pojo.enums.QueryType; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.jsqlparser.SqlParserRemoveHelper; import com.tencent.supersonic.common.util.jsqlparser.SqlParserSelectHelper; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.springframework.util.CollectionUtils; - import java.util.Collection; import java.util.List; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.springframework.util.CollectionUtils; /** * MetricCheckProcessor verifies whether the dimensions diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/ParseInfoProcessor.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/ParseInfoProcessor.java similarity index 97% rename from chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/ParseInfoProcessor.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/ParseInfoProcessor.java index fd193ed35..e7d6b2a42 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/ParseInfoProcessor.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/ParseInfoProcessor.java @@ -1,28 +1,23 @@ -package com.tencent.supersonic.chat.processor.parse; +package com.tencent.supersonic.chat.server.processor.parse; import com.google.common.collect.Lists; -import com.tencent.supersonic.chat.api.component.SemanticQuery; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; +import com.tencent.supersonic.chat.core.query.SemanticQuery; import com.tencent.supersonic.chat.api.pojo.SemanticSchema; import com.tencent.supersonic.chat.api.pojo.request.QueryFilter; import com.tencent.supersonic.chat.api.pojo.response.ParseResp; import com.tencent.supersonic.chat.api.pojo.response.SqlInfo; +import com.tencent.supersonic.chat.server.service.impl.SchemaService; import com.tencent.supersonic.common.pojo.DateConf; -import com.tencent.supersonic.common.pojo.enums.QueryType; import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum; +import com.tencent.supersonic.common.pojo.enums.QueryType; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; import com.tencent.supersonic.common.util.ContextUtils; import com.tencent.supersonic.common.util.jsqlparser.FieldExpression; import com.tencent.supersonic.common.util.jsqlparser.SqlParserSelectHelper; -import com.tencent.supersonic.knowledge.service.SchemaService; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.lang3.tuple.Pair; -import org.springframework.util.CollectionUtils; - import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -31,6 +26,10 @@ import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.tuple.Pair; +import org.springframework.util.CollectionUtils; /** * ParseInfoProcessor extracts structured info from S2SQL so that diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/ParseResultProcessor.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/ParseResultProcessor.java similarity index 56% rename from chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/ParseResultProcessor.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/ParseResultProcessor.java index c83b9d579..54c61edb8 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/ParseResultProcessor.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/ParseResultProcessor.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.chat.processor.parse; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +package com.tencent.supersonic.chat.server.processor.parse; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.response.ParseResp; -import com.tencent.supersonic.chat.processor.ResultProcessor; +import com.tencent.supersonic.chat.server.processor.ResultProcessor; /** * A ParseResultProcessor wraps things up before returning results to users in parse stage. diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/QueryRankProcessor.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/QueryRankProcessor.java similarity index 90% rename from chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/QueryRankProcessor.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/QueryRankProcessor.java index 92b81fe11..749a36a73 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/QueryRankProcessor.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/QueryRankProcessor.java @@ -1,12 +1,12 @@ -package com.tencent.supersonic.chat.processor.parse; +package com.tencent.supersonic.chat.server.processor.parse; -import com.tencent.supersonic.chat.api.component.SemanticQuery; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.query.SemanticQuery; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElementMatch; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; import com.tencent.supersonic.chat.api.pojo.response.ParseResp; -import com.tencent.supersonic.chat.query.rule.RuleSemanticQuery; +import com.tencent.supersonic.chat.core.query.rule.RuleSemanticQuery; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/QueryRecommendProcessor.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/QueryRecommendProcessor.java similarity index 90% rename from chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/QueryRecommendProcessor.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/QueryRecommendProcessor.java index dd5625b7d..b64c6cd9a 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/QueryRecommendProcessor.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/QueryRecommendProcessor.java @@ -1,26 +1,25 @@ -package com.tencent.supersonic.chat.processor.parse; +package com.tencent.supersonic.chat.server.processor.parse; import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageInfo; import com.google.common.collect.Lists; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.request.PageQueryInfoReq; import com.tencent.supersonic.chat.api.pojo.response.ParseResp; import com.tencent.supersonic.chat.api.pojo.response.QueryResp; import com.tencent.supersonic.chat.api.pojo.response.SimilarQueryRecallResp; -import com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDO; -import com.tencent.supersonic.chat.persistence.repository.ChatQueryRepository; -import com.tencent.supersonic.chat.utils.SimilarQueryManager; +import com.tencent.supersonic.chat.core.utils.SimilarQueryManager; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatQueryDO; +import com.tencent.supersonic.chat.server.persistence.repository.ChatQueryRepository; import com.tencent.supersonic.common.util.ContextUtils; -import lombok.SneakyThrows; -import lombok.extern.slf4j.Slf4j; -import org.springframework.util.CollectionUtils; - import java.util.List; import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.util.CollectionUtils; /** * MetricRecommendProcessor fills recommended query based on embedding similarity. diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/RespBuildProcessor.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/RespBuildProcessor.java similarity index 82% rename from chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/RespBuildProcessor.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/RespBuildProcessor.java index 87269aa7e..77209a4b8 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/RespBuildProcessor.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/RespBuildProcessor.java @@ -1,16 +1,16 @@ -package com.tencent.supersonic.chat.processor.parse; +package com.tencent.supersonic.chat.server.processor.parse; -import com.tencent.supersonic.chat.api.component.SemanticQuery; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; +import com.tencent.supersonic.chat.core.query.SemanticQuery; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; import com.tencent.supersonic.chat.api.pojo.response.ParseResp; -import com.tencent.supersonic.chat.service.ChatService; +import com.tencent.supersonic.chat.server.service.ChatService; import com.tencent.supersonic.common.util.ContextUtils; -import lombok.extern.slf4j.Slf4j; import java.util.List; import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; /** * RespBuildProcessor fill response object with parsing results. diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/SqlInfoProcessor.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/SqlInfoProcessor.java similarity index 87% rename from chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/SqlInfoProcessor.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/SqlInfoProcessor.java index 5769b9216..c6fa40503 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/SqlInfoProcessor.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/SqlInfoProcessor.java @@ -1,14 +1,14 @@ -package com.tencent.supersonic.chat.processor.parse; +package com.tencent.supersonic.chat.server.processor.parse; -import com.tencent.supersonic.chat.api.component.SemanticQuery; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.query.SemanticQuery; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; import com.tencent.supersonic.chat.api.pojo.response.ParseResp; import com.tencent.supersonic.chat.api.pojo.response.SqlInfo; -import com.tencent.supersonic.chat.query.QueryManager; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMSqlQuery; +import com.tencent.supersonic.chat.core.query.QueryManager; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMSqlQuery; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/TimeCostProcessor.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/TimeCostProcessor.java similarity index 76% rename from chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/TimeCostProcessor.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/TimeCostProcessor.java index 51a17978d..69aa91ae7 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/processor/parse/TimeCostProcessor.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/processor/parse/TimeCostProcessor.java @@ -1,7 +1,7 @@ -package com.tencent.supersonic.chat.processor.parse; +package com.tencent.supersonic.chat.server.processor.parse; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.response.ParseResp; import lombok.extern.slf4j.Slf4j; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/rest/AgentController.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/AgentController.java similarity index 92% rename from chat/core/src/main/java/com/tencent/supersonic/chat/rest/AgentController.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/AgentController.java index 79a41b5ab..31ff47d4d 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/rest/AgentController.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/AgentController.java @@ -1,19 +1,19 @@ -package com.tencent.supersonic.chat.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.chat.agent.Agent; -import com.tencent.supersonic.chat.service.AgentService; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.PutMapping; -import org.springframework.web.bind.annotation.DeleteMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; +import com.tencent.supersonic.chat.core.agent.Agent; +import com.tencent.supersonic.chat.server.service.AgentService; +import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.util.List; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping({"/api/chat/agent", "/openapi/chat/agent"}) diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/rest/ChatConfigController.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/ChatConfigController.java similarity index 95% rename from chat/core/src/main/java/com/tencent/supersonic/chat/rest/ChatConfigController.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/ChatConfigController.java index 405ed5d9f..92d0fbff2 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/rest/ChatConfigController.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/ChatConfigController.java @@ -1,16 +1,16 @@ -package com.tencent.supersonic.chat.rest; +package com.tencent.supersonic.chat.server.rest; import com.github.pagehelper.PageInfo; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.auth.api.authentication.utils.UserHolder; -import com.tencent.supersonic.chat.api.component.SemanticInterpreter; +import com.tencent.supersonic.chat.core.knowledge.semantic.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.request.ChatConfigBaseReq; import com.tencent.supersonic.chat.api.pojo.request.ChatConfigEditReqReq; import com.tencent.supersonic.chat.api.pojo.request.ChatConfigFilter; import com.tencent.supersonic.chat.api.pojo.response.ChatConfigResp; import com.tencent.supersonic.chat.api.pojo.response.ChatConfigRichResp; -import com.tencent.supersonic.chat.service.ConfigService; -import com.tencent.supersonic.chat.utils.ComponentFactory; +import com.tencent.supersonic.chat.core.utils.ComponentFactory; +import com.tencent.supersonic.chat.server.service.ConfigService; import com.tencent.supersonic.common.pojo.enums.AuthType; import com.tencent.supersonic.headless.api.request.PageDimensionReq; import com.tencent.supersonic.headless.api.request.PageMetricReq; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/rest/ChatController.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/ChatController.java similarity index 95% rename from chat/core/src/main/java/com/tencent/supersonic/chat/rest/ChatController.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/ChatController.java index 7a50e24a0..687fbd7a1 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/rest/ChatController.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/ChatController.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.rest; +package com.tencent.supersonic.chat.server.rest; import com.github.pagehelper.PageInfo; @@ -6,8 +6,8 @@ import com.tencent.supersonic.auth.api.authentication.utils.UserHolder; import com.tencent.supersonic.chat.api.pojo.request.PageQueryInfoReq; import com.tencent.supersonic.chat.api.pojo.response.QueryResp; import com.tencent.supersonic.chat.api.pojo.response.ShowCaseResp; -import com.tencent.supersonic.chat.persistence.dataobject.ChatDO; -import com.tencent.supersonic.chat.service.ChatService; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatDO; +import com.tencent.supersonic.chat.server.service.ChatService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/rest/ChatQueryController.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/ChatQueryController.java similarity index 95% rename from chat/core/src/main/java/com/tencent/supersonic/chat/rest/ChatQueryController.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/ChatQueryController.java index 89618078b..bdfcc9d63 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/rest/ChatQueryController.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/ChatQueryController.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.rest; +package com.tencent.supersonic.chat.server.rest; import com.tencent.supersonic.auth.api.authentication.pojo.User; @@ -7,8 +7,8 @@ import com.tencent.supersonic.chat.api.pojo.request.DimensionValueReq; import com.tencent.supersonic.chat.api.pojo.request.ExecuteQueryReq; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; import com.tencent.supersonic.chat.api.pojo.request.QueryDataReq; -import com.tencent.supersonic.chat.service.QueryService; -import com.tencent.supersonic.chat.service.SearchService; +import com.tencent.supersonic.chat.server.service.QueryService; +import com.tencent.supersonic.chat.server.service.SearchService; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/rest/KnowledgeController.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/KnowledgeController.java similarity index 82% rename from chat/core/src/main/java/com/tencent/supersonic/chat/rest/KnowledgeController.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/KnowledgeController.java index c748477b5..1c948ece3 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/rest/KnowledgeController.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/KnowledgeController.java @@ -1,28 +1,26 @@ -package com.tencent.supersonic.chat.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.chat.api.pojo.request.DictLatestTaskReq; -import com.tencent.supersonic.chat.api.pojo.response.DictLatestTaskResp; -import com.tencent.supersonic.chat.service.KnowledgeService; -import com.tencent.supersonic.knowledge.listener.ApplicationStartedListener; import com.tencent.supersonic.chat.api.pojo.request.DictTaskFilterReq; -import com.tencent.supersonic.knowledge.dictionary.DimValue2DictCommand; -import com.tencent.supersonic.knowledge.dictionary.DimValueDictInfo; - +import com.tencent.supersonic.chat.api.pojo.response.DictLatestTaskResp; +import com.tencent.supersonic.chat.core.knowledge.DimValue2DictCommand; +import com.tencent.supersonic.chat.core.knowledge.DimValueDictInfo; +import com.tencent.supersonic.chat.server.listener.ApplicationStartedListener; +import com.tencent.supersonic.chat.server.service.KnowledgeTaskService; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; - import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; @RestController @@ -30,7 +28,7 @@ import org.springframework.web.bind.annotation.PutMapping; public class KnowledgeController { @Autowired - private KnowledgeService knowledgeService; + private KnowledgeTaskService knowledgeTaskService; @Autowired private ApplicationStartedListener applicationStartedListener; @@ -46,7 +44,7 @@ public class KnowledgeController { HttpServletRequest request, HttpServletResponse response) { User user = UserHolder.findUser(request, response); - return knowledgeService.addDictTask(dimValue2DictCommend, user); + return knowledgeTaskService.addDictTask(dimValue2DictCommend, user); } /** @@ -60,7 +58,7 @@ public class KnowledgeController { HttpServletRequest request, HttpServletResponse response) { User user = UserHolder.findUser(request, response); - return knowledgeService.deleteDictTask(dimValue2DictCommend, user); + return knowledgeTaskService.deleteDictTask(dimValue2DictCommend, user); } /** @@ -73,7 +71,7 @@ public class KnowledgeController { HttpServletRequest request, HttpServletResponse response) { User user = UserHolder.findUser(request, response); - return knowledgeService.searchDictTaskList(filter, user); + return knowledgeTaskService.searchDictTaskList(filter, user); } /** @@ -84,7 +82,7 @@ public class KnowledgeController { HttpServletRequest request, HttpServletResponse response) { User user = UserHolder.findUser(request, response); - return knowledgeService.searchDictLatestTaskList(filter, user); + return knowledgeTaskService.searchDictLatestTaskList(filter, user); } /** @@ -96,7 +94,7 @@ public class KnowledgeController { @GetMapping("/rootPath") public String getDictRootPath(HttpServletRequest request, HttpServletResponse response) { - return knowledgeService.getDictRootPath(); + return knowledgeTaskService.getDictRootPath(); } /** diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/rest/PluginController.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/PluginController.java similarity index 93% rename from chat/core/src/main/java/com/tencent/supersonic/chat/rest/PluginController.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/PluginController.java index 32a1705ec..e7c13c92f 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/rest/PluginController.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/PluginController.java @@ -1,10 +1,10 @@ -package com.tencent.supersonic.chat.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.chat.api.pojo.request.PluginQueryReq; -import com.tencent.supersonic.chat.plugin.Plugin; -import com.tencent.supersonic.chat.service.PluginService; +import com.tencent.supersonic.chat.core.plugin.Plugin; +import com.tencent.supersonic.chat.server.service.PluginService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/rest/RecommendController.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/RecommendController.java similarity index 94% rename from chat/core/src/main/java/com/tencent/supersonic/chat/rest/RecommendController.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/RecommendController.java index 8592dca2c..4d4e61449 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/rest/RecommendController.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/rest/RecommendController.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.chat.rest; +package com.tencent.supersonic.chat.server.rest; import com.tencent.supersonic.chat.api.pojo.request.RecommendReq; import com.tencent.supersonic.chat.api.pojo.response.RecommendQuestionResp; import com.tencent.supersonic.chat.api.pojo.response.RecommendResp; -import com.tencent.supersonic.chat.service.RecommendService; +import com.tencent.supersonic.chat.server.service.RecommendService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RequestMapping; diff --git a/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/AgentService.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/AgentService.java new file mode 100644 index 000000000..9ab72deca --- /dev/null +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/AgentService.java @@ -0,0 +1,19 @@ +package com.tencent.supersonic.chat.server.service; + +import com.tencent.supersonic.auth.api.authentication.pojo.User; +import com.tencent.supersonic.chat.core.agent.Agent; +import java.util.List; + +public interface AgentService { + + List getAgents(); + + void createAgent(Agent agent, User user); + + void updateAgent(Agent agent, User user); + + Agent getAgent(Integer id); + + void deleteAgent(Integer id); + +} diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/ChatService.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/ChatService.java similarity index 84% rename from chat/core/src/main/java/com/tencent/supersonic/chat/service/ChatService.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/ChatService.java index 5414b117f..c10ffdf5b 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/ChatService.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/ChatService.java @@ -1,17 +1,17 @@ -package com.tencent.supersonic.chat.service; +package com.tencent.supersonic.chat.server.service; import com.github.pagehelper.PageInfo; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.api.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.ChatContext; import com.tencent.supersonic.chat.api.pojo.request.PageQueryInfoReq; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; import com.tencent.supersonic.chat.api.pojo.response.ParseResp; import com.tencent.supersonic.chat.api.pojo.response.QueryResp; import com.tencent.supersonic.chat.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.ShowCaseResp; -import com.tencent.supersonic.chat.persistence.dataobject.ChatDO; -import com.tencent.supersonic.chat.persistence.dataobject.ChatParseDO; -import com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatParseDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatQueryDO; import java.util.List; import java.util.Set; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/ConfigService.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/ConfigService.java similarity index 84% rename from chat/core/src/main/java/com/tencent/supersonic/chat/service/ConfigService.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/ConfigService.java index 0945633b0..7039a72ae 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/ConfigService.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/ConfigService.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.service; +package com.tencent.supersonic.chat.server.service; import com.tencent.supersonic.auth.api.authentication.pojo.User; @@ -8,9 +8,10 @@ import com.tencent.supersonic.chat.api.pojo.request.ChatConfigFilter; import com.tencent.supersonic.chat.api.pojo.request.ItemNameVisibilityInfo; import com.tencent.supersonic.chat.api.pojo.response.ChatConfigResp; import com.tencent.supersonic.chat.api.pojo.response.ChatConfigRichResp; -import com.tencent.supersonic.chat.config.ChatConfig; +import com.tencent.supersonic.chat.server.config.ChatConfig; import java.util.List; +import java.util.Map; public interface ConfigService { @@ -29,4 +30,6 @@ public interface ConfigService { ChatConfigResp fetchConfigByModelId(Long modelId); List getAllChatRichConfig(); + + Map getModelIdToChatRichConfig(); } diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/KnowledgeService.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/KnowledgeService.java similarity index 67% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/KnowledgeService.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/KnowledgeService.java index ff26cad82..9ebb1a6a2 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/KnowledgeService.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/KnowledgeService.java @@ -1,7 +1,6 @@ -package com.tencent.supersonic.knowledge.service; - -import com.tencent.supersonic.knowledge.dictionary.DictWord; +package com.tencent.supersonic.chat.server.service; +import com.tencent.supersonic.chat.core.knowledge.DictWord; import java.util.List; public interface KnowledgeService { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/KnowledgeService.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/KnowledgeTaskService.java similarity index 71% rename from chat/core/src/main/java/com/tencent/supersonic/chat/service/KnowledgeService.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/KnowledgeTaskService.java index ea441a9b1..dbf27d522 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/KnowledgeService.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/KnowledgeTaskService.java @@ -1,16 +1,15 @@ -package com.tencent.supersonic.chat.service; +package com.tencent.supersonic.chat.server.service; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.chat.api.pojo.request.DictLatestTaskReq; -import com.tencent.supersonic.chat.api.pojo.response.DictLatestTaskResp; -import com.tencent.supersonic.knowledge.dictionary.DictConfig; import com.tencent.supersonic.chat.api.pojo.request.DictTaskFilterReq; -import com.tencent.supersonic.knowledge.dictionary.DimValue2DictCommand; -import com.tencent.supersonic.knowledge.dictionary.DimValueDictInfo; - +import com.tencent.supersonic.chat.api.pojo.response.DictLatestTaskResp; +import com.tencent.supersonic.chat.core.knowledge.DictConfig; +import com.tencent.supersonic.chat.core.knowledge.DimValue2DictCommand; +import com.tencent.supersonic.chat.core.knowledge.DimValueDictInfo; import java.util.List; -public interface KnowledgeService { +public interface KnowledgeTaskService { Long addDictTask(DimValue2DictCommand dimValue2DictCommend, User user); Long deleteDictTask(DimValue2DictCommand dimValue2DictCommend, User user); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/PluginService.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/PluginService.java similarity index 78% rename from chat/core/src/main/java/com/tencent/supersonic/chat/service/PluginService.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/PluginService.java index b898e6950..c9cd64efd 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/PluginService.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/PluginService.java @@ -1,11 +1,12 @@ -package com.tencent.supersonic.chat.service; +package com.tencent.supersonic.chat.server.service; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.plugin.Plugin; import com.tencent.supersonic.chat.api.pojo.request.PluginQueryReq; +import com.tencent.supersonic.chat.core.plugin.Plugin; import java.util.List; +import java.util.Map; import java.util.Optional; public interface PluginService { @@ -25,4 +26,7 @@ public interface PluginService { Optional getPluginByName(String name); List queryWithAuthCheck(PluginQueryReq pluginQueryReq, User user); + + Map getNameToPlugin(); + } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/QueryService.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/QueryService.java similarity index 95% rename from chat/core/src/main/java/com/tencent/supersonic/chat/service/QueryService.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/QueryService.java index cdefed69f..780af4cd3 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/QueryService.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/QueryService.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.service; +package com.tencent.supersonic.chat.server.service; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/RecommendService.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/RecommendService.java similarity index 90% rename from chat/core/src/main/java/com/tencent/supersonic/chat/service/RecommendService.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/RecommendService.java index eec699542..4ff49e3fe 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/RecommendService.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/RecommendService.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.service; +package com.tencent.supersonic.chat.server.service; import com.tencent.supersonic.chat.api.pojo.request.RecommendReq; import com.tencent.supersonic.chat.api.pojo.response.RecommendQuestionResp; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/SearchService.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/SearchService.java similarity index 83% rename from chat/core/src/main/java/com/tencent/supersonic/chat/service/SearchService.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/SearchService.java index 8f36c0996..de70ca117 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/SearchService.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/SearchService.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.service; +package com.tencent.supersonic.chat.server.service; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; import com.tencent.supersonic.chat.api.pojo.response.SearchResult; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/SemanticService.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/SemanticService.java similarity index 54% rename from chat/core/src/main/java/com/tencent/supersonic/chat/service/SemanticService.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/SemanticService.java index fdfa1a8ff..7c0d346aa 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/SemanticService.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/SemanticService.java @@ -1,68 +1,41 @@ -package com.tencent.supersonic.chat.service; +package com.tencent.supersonic.chat.server.service; -import static com.tencent.supersonic.common.pojo.Constants.DAY; -import static com.tencent.supersonic.common.pojo.Constants.DAY_FORMAT; -import static com.tencent.supersonic.common.pojo.Constants.DAY_FORMAT_INT; -import static com.tencent.supersonic.common.pojo.Constants.MONTH; -import static com.tencent.supersonic.common.pojo.Constants.MONTH_FORMAT; -import static com.tencent.supersonic.common.pojo.Constants.MONTH_FORMAT_INT; -import static com.tencent.supersonic.common.pojo.Constants.TIMES_FORMAT; -import static com.tencent.supersonic.common.pojo.Constants.TIME_FORMAT; -import static com.tencent.supersonic.common.pojo.Constants.WEEK; - import com.google.common.collect.Sets; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.ModelSchema; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; import com.tencent.supersonic.chat.api.pojo.SemanticSchema; import com.tencent.supersonic.chat.api.pojo.request.ChatDefaultConfigReq; import com.tencent.supersonic.chat.api.pojo.request.QueryFilter; -import com.tencent.supersonic.chat.api.pojo.response.AggregateInfo; import com.tencent.supersonic.chat.api.pojo.response.ChatConfigResp; import com.tencent.supersonic.chat.api.pojo.response.ChatConfigRichResp; import com.tencent.supersonic.chat.api.pojo.response.ChatDefaultRichConfigResp; import com.tencent.supersonic.chat.api.pojo.response.DataInfo; import com.tencent.supersonic.chat.api.pojo.response.EntityInfo; -import com.tencent.supersonic.chat.api.pojo.response.MetricInfo; import com.tencent.supersonic.chat.api.pojo.response.ModelInfo; -import com.tencent.supersonic.chat.config.AggregatorConfig; -import com.tencent.supersonic.chat.utils.ComponentFactory; -import com.tencent.supersonic.chat.utils.QueryReqBuilder; +import com.tencent.supersonic.chat.core.config.AggregatorConfig; +import com.tencent.supersonic.chat.core.knowledge.semantic.SemanticInterpreter; +import com.tencent.supersonic.chat.core.utils.ComponentFactory; +import com.tencent.supersonic.chat.core.utils.QueryReqBuilder; +import com.tencent.supersonic.chat.server.service.impl.SchemaService; import com.tencent.supersonic.common.pojo.DateConf; import com.tencent.supersonic.common.pojo.DateConf.DateMode; import com.tencent.supersonic.common.pojo.ModelCluster; -import com.tencent.supersonic.common.pojo.QueryColumn; -import com.tencent.supersonic.common.pojo.enums.AggOperatorEnum; import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum; import com.tencent.supersonic.common.pojo.enums.QueryType; -import com.tencent.supersonic.common.pojo.enums.RatioOverType; import com.tencent.supersonic.common.util.ContextUtils; -import com.tencent.supersonic.common.util.DateUtils; -import com.tencent.supersonic.headless.api.response.QueryResultWithSchemaResp; import com.tencent.supersonic.headless.api.request.QueryStructReq; -import com.tencent.supersonic.knowledge.service.SchemaService; -import java.text.DecimalFormat; -import java.time.DayOfWeek; +import com.tencent.supersonic.headless.api.response.QueryResultWithSchemaResp; import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.YearMonth; -import java.time.format.DateTimeFormatter; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Optional; import java.util.Set; -import java.util.concurrent.CompletableFuture; -import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; @@ -302,150 +275,4 @@ public class SemanticService { return modelInfo.getModelInfo().getPrimaryKey(); } - public AggregateInfo getAggregateInfo(User user, SemanticParseInfo semanticParseInfo, - QueryResultWithSchemaResp result) { - if (CollectionUtils.isEmpty(semanticParseInfo.getMetrics()) || !aggregatorConfig.getEnableRatio()) { - return new AggregateInfo(); - } - List resultMetricNames = result.getColumns().stream().map(c -> c.getNameEn()) - .collect(Collectors.toList()); - Optional ratioMetric = semanticParseInfo.getMetrics().stream() - .filter(m -> resultMetricNames.contains(m.getBizName())).findFirst(); - if (ratioMetric.isPresent()) { - AggregateInfo aggregateInfo = new AggregateInfo(); - MetricInfo metricInfo = new MetricInfo(); - metricInfo.setStatistics(new HashMap<>()); - try { - String dateField = QueryReqBuilder.getDateField(semanticParseInfo.getDateInfo()); - - Optional lastDayOp = result.getResultList().stream().filter(r -> r.containsKey(dateField)) - .map(r -> r.get(dateField).toString()) - .sorted(Comparator.reverseOrder()).findFirst(); - if (!lastDayOp.isPresent()) { - return new AggregateInfo(); - } - Optional> lastValue = result.getResultList().stream() - .filter(r -> r.get(dateField).toString().equals(lastDayOp.get())).findFirst(); - if (lastValue.isPresent() && lastValue.get().containsKey(ratioMetric.get().getBizName())) { - DecimalFormat df = new DecimalFormat("#.####"); - metricInfo.setValue(df.format(lastValue.get().get(ratioMetric.get().getBizName()))); - } - metricInfo.setDate(lastValue.get().get(dateField).toString()); - - CompletableFuture metricInfoRoll = CompletableFuture - .supplyAsync(() -> { - return queryRatio(user, semanticParseInfo, ratioMetric.get(), AggOperatorEnum.RATIO_ROLL, - result); - }); - CompletableFuture metricInfoOver = CompletableFuture - .supplyAsync(() -> { - return queryRatio(user, semanticParseInfo, ratioMetric.get(), AggOperatorEnum.RATIO_OVER, - result); - }); - CompletableFuture.allOf(metricInfoRoll, metricInfoOver); - metricInfo.setName(metricInfoRoll.get().getName()); - metricInfo.setValue(metricInfoRoll.get().getValue()); - metricInfo.getStatistics().putAll(metricInfoRoll.get().getStatistics()); - metricInfo.getStatistics().putAll(metricInfoOver.get().getStatistics()); - aggregateInfo.getMetricInfos().add(metricInfo); - } catch (Exception e) { - log.error("queryRatio error {}", e); - } - return aggregateInfo; - } - return new AggregateInfo(); - } - - private MetricInfo queryRatio(User user, SemanticParseInfo semanticParseInfo, SchemaElement metric, - AggOperatorEnum aggOperatorEnum, QueryResultWithSchemaResp results) { - MetricInfo metricInfo = new MetricInfo(); - metricInfo.setStatistics(new HashMap<>()); - QueryStructReq queryStructReq = QueryReqBuilder.buildStructRatioReq(semanticParseInfo, metric, aggOperatorEnum); - DateConf dateInfo = semanticParseInfo.getDateInfo(); - String dateField = QueryReqBuilder.getDateField(dateInfo); - - queryStructReq.setGroups(new ArrayList<>(Arrays.asList(dateField))); - queryStructReq.setDateInfo(getRatioDateConf(aggOperatorEnum, semanticParseInfo, results)); - - QueryResultWithSchemaResp queryResp = semanticInterpreter.queryByStruct(queryStructReq, user); - - if (Objects.nonNull(queryResp) && !CollectionUtils.isEmpty(queryResp.getResultList())) { - - Map result = queryResp.getResultList().get(0); - Optional valueColumn = queryResp.getColumns().stream() - .filter(c -> c.getNameEn().equals(metric.getBizName())).findFirst(); - if (valueColumn.isPresent()) { - - String valueField = String.format("%s_%s", valueColumn.get().getNameEn(), - aggOperatorEnum.getOperator()); - if (result.containsKey(valueColumn.get().getNameEn())) { - DecimalFormat df = new DecimalFormat("#.####"); - metricInfo.setValue(df.format(result.get(valueColumn.get().getNameEn()))); - } - String ratio = ""; - if (Objects.nonNull(result.get(valueField))) { - ratio = String.format("%.2f", - (Double.valueOf(result.get(valueField).toString()) * 100)) + "%"; - } - String statisticsRollName = RatioOverType.DAY_ON_DAY.getShowName(); - String statisticsOverName = RatioOverType.WEEK_ON_DAY.getShowName(); - if (MONTH.equals(dateInfo.getPeriod())) { - statisticsRollName = RatioOverType.MONTH_ON_MONTH.getShowName(); - statisticsOverName = RatioOverType.YEAR_ON_MONTH.getShowName(); - } - if (WEEK.equals(dateInfo.getPeriod())) { - statisticsRollName = RatioOverType.WEEK_ON_WEEK.getShowName(); - statisticsOverName = RatioOverType.MONTH_ON_WEEK.getShowName(); - } - metricInfo.getStatistics().put(aggOperatorEnum.equals(AggOperatorEnum.RATIO_ROLL) ? statisticsRollName - : statisticsOverName, - ratio); - } - metricInfo.setName(metric.getName()); - } - return metricInfo; - } - - private DateConf getRatioDateConf(AggOperatorEnum aggOperatorEnum, SemanticParseInfo semanticParseInfo, - QueryResultWithSchemaResp results) { - String dateField = QueryReqBuilder.getDateField(semanticParseInfo.getDateInfo()); - Optional lastDayOp = results.getResultList().stream() - .map(r -> r.get(dateField).toString()) - .sorted(Comparator.reverseOrder()).findFirst(); - if (lastDayOp.isPresent()) { - String lastDay = lastDayOp.get(); - DateConf dateConf = new DateConf(); - dateConf.setPeriod(semanticParseInfo.getDateInfo().getPeriod()); - dateConf.setDateMode(DateMode.LIST); - List dayList = new ArrayList<>(); - dayList.add(lastDay); - String start = ""; - if (DAY.equalsIgnoreCase(semanticParseInfo.getDateInfo().getPeriod())) { - DateTimeFormatter formatter = DateUtils.getDateFormatter(lastDay, - new String[]{DAY_FORMAT, DAY_FORMAT_INT}); - LocalDate end = LocalDate.parse(lastDay, formatter); - start = aggOperatorEnum.equals(AggOperatorEnum.RATIO_ROLL) ? end.minusDays(1).format(formatter) - : end.minusWeeks(1).format(formatter); - } - if (WEEK.equalsIgnoreCase(semanticParseInfo.getDateInfo().getPeriod())) { - DateTimeFormatter formatter = DateUtils.getTimeFormatter(lastDay, - new String[]{TIMES_FORMAT, DAY_FORMAT, TIME_FORMAT, DAY_FORMAT_INT}); - LocalDateTime end = LocalDateTime.parse(lastDay, formatter); - start = aggOperatorEnum.equals(AggOperatorEnum.RATIO_ROLL) ? end.minusWeeks(1).format(formatter) - : end.minusMonths(1).with(DayOfWeek.MONDAY).format(formatter); - } - if (MONTH.equalsIgnoreCase(semanticParseInfo.getDateInfo().getPeriod())) { - DateTimeFormatter formatter = DateUtils.getDateFormatter(lastDay, - new String[]{MONTH_FORMAT, MONTH_FORMAT_INT}); - YearMonth end = YearMonth.parse(lastDay, formatter); - start = aggOperatorEnum.equals(AggOperatorEnum.RATIO_ROLL) ? end.minusMonths(1).format(formatter) - : end.minusYears(1).format(formatter); - } - dayList.add(start); - dateConf.setDateList(dayList); - return dateConf; - - } - return semanticParseInfo.getDateInfo(); - } } diff --git a/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/StatisticsService.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/StatisticsService.java new file mode 100644 index 000000000..bd42932fa --- /dev/null +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/StatisticsService.java @@ -0,0 +1,9 @@ +package com.tencent.supersonic.chat.server.service; + +import com.tencent.supersonic.chat.server.persistence.dataobject.StatisticsDO; + +import java.util.List; + +public interface StatisticsService { + void batchSaveStatistics(List list); +} diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/TimeCost.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/TimeCost.java similarity index 86% rename from chat/core/src/main/java/com/tencent/supersonic/chat/service/TimeCost.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/TimeCost.java index 29d915c73..9cbcbe809 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/TimeCost.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/TimeCost.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.service; +package com.tencent.supersonic.chat.server.service; import java.lang.annotation.Documented; import java.lang.annotation.Target; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/TimeCostAOP.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/TimeCostAOP.java similarity index 87% rename from chat/core/src/main/java/com/tencent/supersonic/chat/service/TimeCostAOP.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/TimeCostAOP.java index f1c094a76..d0475ef5d 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/TimeCostAOP.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/TimeCostAOP.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.service; +package com.tencent.supersonic.chat.server.service; import com.tencent.supersonic.chat.api.pojo.response.QueryResult; import lombok.extern.slf4j.Slf4j; @@ -13,7 +13,7 @@ import org.springframework.stereotype.Component; @Aspect public class TimeCostAOP { - @Pointcut("@annotation(com.tencent.supersonic.chat.service.TimeCost)") + @Pointcut("@annotation(com.tencent.supersonic.chat.server.service.TimeCost)") private void timeCostAdvicePointcut() { } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/AgentServiceImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/AgentServiceImpl.java similarity index 56% rename from chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/AgentServiceImpl.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/AgentServiceImpl.java index ed7a83e09..a7734dd97 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/AgentServiceImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/AgentServiceImpl.java @@ -1,23 +1,16 @@ -package com.tencent.supersonic.chat.service.impl; +package com.tencent.supersonic.chat.server.service.impl; import com.alibaba.fastjson.JSONObject; -import com.google.common.collect.Lists; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.agent.Agent; -import com.tencent.supersonic.chat.agent.AgentToolType; -import com.tencent.supersonic.chat.agent.NL2SQLTool; -import com.tencent.supersonic.chat.persistence.dataobject.AgentDO; -import com.tencent.supersonic.chat.persistence.repository.AgentRepository; -import com.tencent.supersonic.chat.service.AgentService; -import java.util.Collection; +import com.tencent.supersonic.chat.core.agent.Agent; +import com.tencent.supersonic.chat.server.persistence.dataobject.AgentDO; +import com.tencent.supersonic.chat.server.persistence.repository.AgentRepository; +import com.tencent.supersonic.chat.server.service.AgentService; import java.util.Date; -import java.util.HashSet; import java.util.List; -import java.util.Set; import java.util.stream.Collectors; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; @Service public class AgentServiceImpl implements AgentService { @@ -87,32 +80,4 @@ public class AgentServiceImpl implements AgentService { return agentDO; } - public List getParserTools(Integer agentId, AgentToolType agentToolType) { - Agent agent = getAgent(agentId); - if (agent == null) { - return Lists.newArrayList(); - } - List tools = agent.getTools(agentToolType); - if (CollectionUtils.isEmpty(tools)) { - return Lists.newArrayList(); - } - return tools.stream().map(tool -> JSONObject.parseObject(tool, NL2SQLTool.class)) - .collect(Collectors.toList()); - } - - public Set getModelIds(Integer agentId, AgentToolType agentToolType) { - List commonAgentTools = getParserTools(agentId, agentToolType); - if (CollectionUtils.isEmpty(commonAgentTools)) { - return new HashSet<>(); - } - return commonAgentTools.stream().map(NL2SQLTool::getModelIds) - .filter(modelIds -> !CollectionUtils.isEmpty(modelIds)) - .flatMap(Collection::stream) - .collect(Collectors.toSet()); - } - - @Override - public boolean containsAllModel(Set detectModelIds) { - return !CollectionUtils.isEmpty(detectModelIds) && detectModelIds.contains(-1L); - } } diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/ChatKnowledgeServiceImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/ChatKnowledgeTaskServiceImpl.java similarity index 89% rename from chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/ChatKnowledgeServiceImpl.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/ChatKnowledgeTaskServiceImpl.java index cdd35f41d..daf6f58f5 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/ChatKnowledgeServiceImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/ChatKnowledgeTaskServiceImpl.java @@ -1,30 +1,34 @@ -package com.tencent.supersonic.chat.service.impl; +package com.tencent.supersonic.chat.server.service.impl; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.chat.api.pojo.request.DictLatestTaskReq; +import com.tencent.supersonic.chat.api.pojo.request.DictTaskFilterReq; import com.tencent.supersonic.chat.api.pojo.response.DictLatestTaskResp; -import com.tencent.supersonic.chat.config.DefaultMetric; -import com.tencent.supersonic.chat.config.Dim4Dict; -import com.tencent.supersonic.chat.persistence.dataobject.DimValueDO; -import com.tencent.supersonic.chat.service.KnowledgeService; -import com.tencent.supersonic.chat.utils.DictMetaHelper; -import com.tencent.supersonic.chat.utils.DictQueryHelper; +import com.tencent.supersonic.chat.core.config.DefaultMetric; +import com.tencent.supersonic.chat.core.config.Dim4Dict; +import com.tencent.supersonic.chat.core.knowledge.DictConfig; +import com.tencent.supersonic.chat.core.knowledge.DictUpdateMode; +import com.tencent.supersonic.chat.core.knowledge.DimValue2DictCommand; +import com.tencent.supersonic.chat.core.knowledge.DimValueDictInfo; +import com.tencent.supersonic.chat.core.knowledge.FileHandler; +import com.tencent.supersonic.chat.core.utils.DictQueryHelper; +import com.tencent.supersonic.chat.server.listener.ApplicationStartedListener; +import com.tencent.supersonic.chat.server.persistence.dataobject.DictTaskDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.DimValueDO; +import com.tencent.supersonic.chat.server.persistence.repository.DictRepository; +import com.tencent.supersonic.chat.server.service.KnowledgeTaskService; +import com.tencent.supersonic.chat.server.util.DictMetaHelper; +import com.tencent.supersonic.chat.server.util.DictTaskConverter; import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.pojo.enums.TaskStatusEnum; import com.tencent.supersonic.common.util.JsonUtil; -import com.tencent.supersonic.knowledge.dictionary.FileHandler; -import com.tencent.supersonic.knowledge.listener.ApplicationStartedListener; -import com.tencent.supersonic.knowledge.persistence.dataobject.DictTaskDO; -import com.tencent.supersonic.knowledge.utils.DictTaskConverter; -import com.tencent.supersonic.knowledge.dictionary.DictConfig; -import com.tencent.supersonic.chat.api.pojo.request.DictTaskFilterReq; -import com.tencent.supersonic.knowledge.dictionary.DictUpdateMode; -import com.tencent.supersonic.knowledge.dictionary.DimValue2DictCommand; -import com.tencent.supersonic.knowledge.dictionary.DimValueDictInfo; -import com.tencent.supersonic.knowledge.persistence.repository.DictRepository; - - - +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; @@ -32,17 +36,9 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import java.util.HashSet; -import java.util.List; -import java.util.ArrayList; -import java.util.Objects; -import java.util.Set; -import java.util.Map; -import java.util.HashMap; - @Slf4j @Service -public class ChatKnowledgeServiceImpl implements KnowledgeService { +public class ChatKnowledgeTaskServiceImpl implements KnowledgeTaskService { private final DictMetaHelper metaUtils; private final DictQueryHelper dictQueryHelper; @@ -58,7 +54,7 @@ public class ChatKnowledgeServiceImpl implements KnowledgeService { private String dictFileType; private String dimValue = "DimValue_%d_%d"; - public ChatKnowledgeServiceImpl(DictMetaHelper metaUtils, + public ChatKnowledgeTaskServiceImpl(DictMetaHelper metaUtils, DictQueryHelper dictQueryHelper, FileHandler fileHandler, DictRepository dictRepository, diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/ChatServiceImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/ChatServiceImpl.java similarity index 92% rename from chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/ChatServiceImpl.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/ChatServiceImpl.java index 7c17f3902..a3553674d 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/ChatServiceImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/ChatServiceImpl.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.chat.service.impl; +package com.tencent.supersonic.chat.server.service.impl; import com.github.pagehelper.PageInfo; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.api.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.ChatContext; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; import com.tencent.supersonic.chat.api.pojo.request.PageQueryInfoReq; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; @@ -10,14 +10,14 @@ import com.tencent.supersonic.chat.api.pojo.response.ParseResp; import com.tencent.supersonic.chat.api.pojo.response.QueryResp; import com.tencent.supersonic.chat.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.ShowCaseResp; -import com.tencent.supersonic.chat.persistence.dataobject.ChatDO; -import com.tencent.supersonic.chat.persistence.dataobject.ChatParseDO; -import com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDO; -import com.tencent.supersonic.chat.persistence.dataobject.QueryDO; -import com.tencent.supersonic.chat.persistence.repository.ChatContextRepository; -import com.tencent.supersonic.chat.persistence.repository.ChatQueryRepository; -import com.tencent.supersonic.chat.persistence.repository.ChatRepository; -import com.tencent.supersonic.chat.service.ChatService; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatParseDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatQueryDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.QueryDO; +import com.tencent.supersonic.chat.server.persistence.repository.ChatContextRepository; +import com.tencent.supersonic.chat.server.persistence.repository.ChatQueryRepository; +import com.tencent.supersonic.chat.server.persistence.repository.ChatRepository; +import com.tencent.supersonic.chat.server.service.ChatService; import com.tencent.supersonic.common.util.JsonUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Primary; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/ConfigServiceImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/ConfigServiceImpl.java similarity index 92% rename from chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/ConfigServiceImpl.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/ConfigServiceImpl.java index f9f65308b..2e8ef402c 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/ConfigServiceImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/ConfigServiceImpl.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.chat.service.impl; +package com.tencent.supersonic.chat.server.service.impl; import com.google.common.collect.Lists; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.api.component.SemanticInterpreter; +import com.tencent.supersonic.chat.core.knowledge.semantic.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.ModelSchema; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.request.ChatAggConfigReq; @@ -23,13 +23,13 @@ import com.tencent.supersonic.chat.api.pojo.response.ChatDefaultRichConfigResp; import com.tencent.supersonic.chat.api.pojo.response.ChatDetailRichConfigResp; import com.tencent.supersonic.chat.api.pojo.response.EntityRichInfoResp; import com.tencent.supersonic.chat.api.pojo.response.ItemVisibilityInfo; -import com.tencent.supersonic.chat.config.ChatConfig; -import com.tencent.supersonic.chat.persistence.repository.ChatConfigRepository; -import com.tencent.supersonic.chat.service.ConfigService; -import com.tencent.supersonic.chat.service.SemanticService; -import com.tencent.supersonic.chat.utils.ChatConfigHelper; -import com.tencent.supersonic.chat.utils.ComponentFactory; -import com.tencent.supersonic.chat.utils.VisibilityEvent; +import com.tencent.supersonic.chat.server.config.ChatConfig; +import com.tencent.supersonic.chat.server.util.ChatConfigHelper; +import com.tencent.supersonic.chat.core.utils.ComponentFactory; +import com.tencent.supersonic.chat.server.util.VisibilityEvent; +import com.tencent.supersonic.chat.server.persistence.repository.ChatConfigRepository; +import com.tencent.supersonic.chat.server.service.ConfigService; +import com.tencent.supersonic.chat.server.service.SemanticService; import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.headless.api.pojo.SchemaItem; import com.tencent.supersonic.headless.api.response.DimensionResp; @@ -69,9 +69,9 @@ public class ConfigServiceImpl implements ConfigService { public ConfigServiceImpl(ChatConfigRepository chatConfigRepository, - ChatConfigHelper chatConfigHelper, - DimensionService dimensionService, - MetricService metricService) { + ChatConfigHelper chatConfigHelper, + DimensionService dimensionService, + MetricService metricService) { this.chatConfigRepository = chatConfigRepository; this.chatConfigHelper = chatConfigHelper; this.dimensionService = dimensionService; @@ -173,7 +173,7 @@ public class ConfigServiceImpl implements ConfigService { } private ItemVisibilityInfo fetchVisibilityDescByConfig(ItemVisibility visibility, - ModelSchema modelSchema) { + ModelSchema modelSchema) { ItemVisibilityInfo itemVisibilityDesc = new ItemVisibilityInfo(); List dimIdAllList = chatConfigHelper.generateAllDimIdList(modelSchema); @@ -229,8 +229,8 @@ public class ConfigServiceImpl implements ConfigService { } private ChatDetailRichConfigResp fillChatDetailRichConfig(ModelSchema modelSchema, - ChatConfigRichResp chatConfigRich, - ChatConfigResp chatConfigResp) { + ChatConfigRichResp chatConfigRich, + ChatConfigResp chatConfigResp) { if (Objects.isNull(chatConfigResp) || Objects.isNull(chatConfigResp.getChatDetailConfig())) { return null; } @@ -277,8 +277,8 @@ public class ConfigServiceImpl implements ConfigService { } private ChatDefaultRichConfigResp fetchDefaultConfig(ChatDefaultConfigReq chatDefaultConfig, - ModelSchema modelSchema, - ItemVisibilityInfo itemVisibilityInfo) { + ModelSchema modelSchema, + ItemVisibilityInfo itemVisibilityInfo) { ChatDefaultRichConfigResp defaultRichConfig = new ChatDefaultRichConfigResp(); if (Objects.isNull(chatDefaultConfig)) { return defaultRichConfig; @@ -327,7 +327,7 @@ public class ConfigServiceImpl implements ConfigService { } private List fillKnowledgeBizName(List knowledgeInfos, - ModelSchema modelSchema) { + ModelSchema modelSchema) { if (CollectionUtils.isEmpty(knowledgeInfos)) { return new ArrayList<>(); } @@ -356,4 +356,11 @@ public class ConfigServiceImpl implements ConfigService { }); return chatConfigRichInfoList; } + + @Override + public Map getModelIdToChatRichConfig() { + List allChatRichConfig = getAllChatRichConfig(); + return allChatRichConfig.stream() + .collect(Collectors.toMap(ChatConfigRichResp::getModelId, value -> value, (k1, k2) -> k1)); + } } diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/KnowledgeServiceImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/KnowledgeServiceImpl.java similarity index 82% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/KnowledgeServiceImpl.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/KnowledgeServiceImpl.java index 656708ed2..f2f563d7f 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/KnowledgeServiceImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/KnowledgeServiceImpl.java @@ -1,12 +1,12 @@ -package com.tencent.supersonic.knowledge.service; +package com.tencent.supersonic.chat.server.service.impl; -import com.tencent.supersonic.knowledge.dictionary.DictWord; +import com.tencent.supersonic.chat.core.knowledge.DictWord; +import com.tencent.supersonic.chat.core.knowledge.SearchService; +import com.tencent.supersonic.chat.core.utils.HanlpHelper; +import com.tencent.supersonic.chat.server.service.KnowledgeService; import com.tencent.supersonic.common.pojo.enums.DictWordType; -import com.tencent.supersonic.knowledge.utils.HanlpHelper; - import java.util.List; import java.util.stream.Collectors; - import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/PluginServiceImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/PluginServiceImpl.java similarity index 76% rename from chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/PluginServiceImpl.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/PluginServiceImpl.java index 144b4f46e..bd2de4a88 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/PluginServiceImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/PluginServiceImpl.java @@ -1,22 +1,29 @@ -package com.tencent.supersonic.chat.service.impl; +package com.tencent.supersonic.chat.server.service.impl; import com.google.common.collect.Lists; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.request.PluginQueryReq; -import com.tencent.supersonic.chat.persistence.dataobject.PluginDO; -import com.tencent.supersonic.chat.persistence.dataobject.PluginDOExample; -import com.tencent.supersonic.chat.persistence.repository.PluginRepository; -import com.tencent.supersonic.chat.plugin.Plugin; -import com.tencent.supersonic.chat.plugin.PluginParseConfig; -import com.tencent.supersonic.chat.plugin.event.PluginAddEvent; -import com.tencent.supersonic.chat.plugin.event.PluginDelEvent; -import com.tencent.supersonic.chat.plugin.event.PluginUpdateEvent; -import com.tencent.supersonic.chat.service.PluginService; -import com.tencent.supersonic.chat.utils.ComponentFactory; +import com.tencent.supersonic.chat.core.knowledge.semantic.SemanticInterpreter; +import com.tencent.supersonic.chat.core.plugin.Plugin; +import com.tencent.supersonic.chat.core.plugin.PluginParseConfig; +import com.tencent.supersonic.chat.core.plugin.event.PluginAddEvent; +import com.tencent.supersonic.chat.core.plugin.event.PluginDelEvent; +import com.tencent.supersonic.chat.core.plugin.event.PluginUpdateEvent; +import com.tencent.supersonic.chat.core.utils.ComponentFactory; +import com.tencent.supersonic.chat.server.persistence.dataobject.PluginDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.PluginDOExample; +import com.tencent.supersonic.chat.server.persistence.repository.PluginRepository; +import com.tencent.supersonic.chat.server.service.PluginService; import com.tencent.supersonic.common.pojo.enums.AuthType; import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.headless.api.response.ModelResp; +import java.util.Arrays; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; @@ -24,13 +31,6 @@ import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.stream.Collectors; - @Service @Slf4j public class PluginServiceImpl implements PluginService { @@ -40,7 +40,7 @@ public class PluginServiceImpl implements PluginService { private ApplicationEventPublisher publisher; public PluginServiceImpl(PluginRepository pluginRepository, - ApplicationEventPublisher publisher) { + ApplicationEventPublisher publisher) { this.pluginRepository = pluginRepository; this.publisher = publisher; } @@ -127,15 +127,8 @@ public class PluginServiceImpl implements PluginService { log.info("name:{}", name); return getPluginList().stream() .filter(plugin -> { - if (StringUtils.isBlank(plugin.getParseModeConfig())) { - return false; - } - PluginParseConfig functionCallConfig = JsonUtil.toObject( - plugin.getParseModeConfig(), PluginParseConfig.class); - if (Objects.isNull(functionCallConfig) || StringUtils.isEmpty(functionCallConfig.getName())) { - return false; - } - if (StringUtils.isBlank(functionCallConfig.getName())) { + PluginParseConfig functionCallConfig = getPluginParseConfig(plugin); + if (functionCallConfig == null) { return false; } return functionCallConfig.getName().equalsIgnoreCase(name); @@ -143,11 +136,45 @@ public class PluginServiceImpl implements PluginService { .findFirst(); } + private PluginParseConfig getPluginParseConfig(Plugin plugin) { + if (StringUtils.isBlank(plugin.getParseModeConfig())) { + return null; + } + PluginParseConfig functionCallConfig = JsonUtil.toObject( + plugin.getParseModeConfig(), PluginParseConfig.class); + if (Objects.isNull(functionCallConfig) || StringUtils.isEmpty(functionCallConfig.getName())) { + return null; + } + if (StringUtils.isBlank(functionCallConfig.getName())) { + return null; + } + return functionCallConfig; + } + @Override public List queryWithAuthCheck(PluginQueryReq pluginQueryReq, User user) { return authCheck(query(pluginQueryReq), user); } + @Override + public Map getNameToPlugin() { + List pluginList = getPluginList(); + + return pluginList.stream() + .filter(plugin -> { + PluginParseConfig functionCallConfig = getPluginParseConfig(plugin); + if (functionCallConfig == null) { + return false; + } + return true; + }) + .collect(Collectors.toMap(a -> { + PluginParseConfig functionCallConfig = JsonUtil.toObject( + a.getParseModeConfig(), PluginParseConfig.class); + return functionCallConfig.getName(); + }, a -> a, (k1, k2) -> k1)); + } + private List authCheck(List plugins, User user) { SemanticInterpreter semanticInterpreter = ComponentFactory.getSemanticLayer(); List modelIdAuthorized = semanticInterpreter.getModelList(AuthType.ADMIN, null, user).stream() diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/QueryServiceImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/QueryServiceImpl.java similarity index 89% rename from chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/QueryServiceImpl.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/QueryServiceImpl.java index 9385e777c..862ca30a5 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/QueryServiceImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/QueryServiceImpl.java @@ -1,16 +1,9 @@ -package com.tencent.supersonic.chat.service.impl; +package com.tencent.supersonic.chat.server.service.impl; -import com.hankcs.hanlp.seg.common.Term; import com.tencent.supersonic.auth.api.authentication.pojo.User; -import com.tencent.supersonic.chat.api.component.SemanticCorrector; -import com.tencent.supersonic.chat.api.component.SchemaMapper; -import com.tencent.supersonic.chat.api.component.SemanticInterpreter; -import com.tencent.supersonic.chat.api.component.SemanticParser; -import com.tencent.supersonic.chat.api.component.SemanticQuery; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElement; +import com.tencent.supersonic.chat.api.pojo.SchemaMapInfo; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; import com.tencent.supersonic.chat.api.pojo.SemanticSchema; import com.tencent.supersonic.chat.api.pojo.request.DimensionValueReq; @@ -20,29 +13,45 @@ import com.tencent.supersonic.chat.api.pojo.request.QueryFilter; import com.tencent.supersonic.chat.api.pojo.request.QueryFilters; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; import com.tencent.supersonic.chat.api.pojo.request.SimilarQueryReq; +import com.tencent.supersonic.chat.api.pojo.response.ChatConfigRichResp; import com.tencent.supersonic.chat.api.pojo.response.EntityInfo; import com.tencent.supersonic.chat.api.pojo.response.ParseResp; import com.tencent.supersonic.chat.api.pojo.response.QueryResult; import com.tencent.supersonic.chat.api.pojo.response.QueryState; -import com.tencent.supersonic.chat.persistence.dataobject.ChatParseDO; -import com.tencent.supersonic.chat.persistence.dataobject.ChatQueryDO; -import com.tencent.supersonic.chat.persistence.dataobject.CostType; -import com.tencent.supersonic.chat.persistence.dataobject.StatisticsDO; -import com.tencent.supersonic.chat.processor.execute.ExecuteResultProcessor; -import com.tencent.supersonic.chat.processor.parse.ParseResultProcessor; -import com.tencent.supersonic.chat.query.QueryManager; -import com.tencent.supersonic.chat.query.llm.s2sql.LLMSqlQuery; -import com.tencent.supersonic.chat.query.rule.RuleSemanticQuery; -import com.tencent.supersonic.chat.service.ChatService; -import com.tencent.supersonic.chat.service.SemanticService; -import com.tencent.supersonic.chat.service.QueryService; -import com.tencent.supersonic.chat.service.StatisticsService; -import com.tencent.supersonic.chat.service.TimeCost; -import com.tencent.supersonic.chat.utils.ComponentFactory; -import com.tencent.supersonic.chat.utils.SimilarQueryManager; +import com.tencent.supersonic.chat.core.agent.Agent; +import com.tencent.supersonic.chat.core.corrector.SemanticCorrector; +import com.tencent.supersonic.chat.core.knowledge.HanlpMapResult; +import com.tencent.supersonic.chat.core.knowledge.SearchService; +import com.tencent.supersonic.chat.core.knowledge.semantic.SemanticInterpreter; +import com.tencent.supersonic.chat.core.mapper.SchemaMapper; +import com.tencent.supersonic.chat.core.parser.SemanticParser; +import com.tencent.supersonic.chat.core.plugin.Plugin; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; +import com.tencent.supersonic.chat.core.query.QueryManager; +import com.tencent.supersonic.chat.core.query.SemanticQuery; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMSqlQuery; +import com.tencent.supersonic.chat.core.query.rule.RuleSemanticQuery; +import com.tencent.supersonic.chat.core.utils.HanlpHelper; +import com.tencent.supersonic.chat.core.utils.NatureHelper; +import com.tencent.supersonic.chat.core.utils.SimilarQueryManager; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatParseDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatQueryDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.CostType; +import com.tencent.supersonic.chat.server.persistence.dataobject.StatisticsDO; +import com.tencent.supersonic.chat.server.processor.execute.ExecuteResultProcessor; +import com.tencent.supersonic.chat.server.processor.parse.ParseResultProcessor; +import com.tencent.supersonic.chat.server.service.AgentService; +import com.tencent.supersonic.chat.server.service.ChatService; +import com.tencent.supersonic.chat.server.service.ConfigService; +import com.tencent.supersonic.chat.server.service.PluginService; +import com.tencent.supersonic.chat.server.service.QueryService; +import com.tencent.supersonic.chat.server.service.SemanticService; +import com.tencent.supersonic.chat.server.service.StatisticsService; +import com.tencent.supersonic.chat.server.service.TimeCost; +import com.tencent.supersonic.chat.server.util.ComponentFactory; import com.tencent.supersonic.common.pojo.DateConf; import com.tencent.supersonic.common.pojo.QueryColumn; -import com.tencent.supersonic.common.pojo.enums.DictWordType; import com.tencent.supersonic.common.pojo.enums.FilterOperatorEnum; import com.tencent.supersonic.common.pojo.enums.QueryType; import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; @@ -54,13 +63,16 @@ import com.tencent.supersonic.common.util.jsqlparser.SqlParserAddHelper; import com.tencent.supersonic.common.util.jsqlparser.SqlParserRemoveHelper; import com.tencent.supersonic.common.util.jsqlparser.SqlParserReplaceHelper; import com.tencent.supersonic.common.util.jsqlparser.SqlParserSelectHelper; -import com.tencent.supersonic.knowledge.dictionary.HanlpMapResult; -import com.tencent.supersonic.knowledge.dictionary.MultiCustomDictionary; -import com.tencent.supersonic.knowledge.service.SearchService; -import com.tencent.supersonic.knowledge.utils.HanlpHelper; -import com.tencent.supersonic.knowledge.utils.NatureHelper; -import com.tencent.supersonic.headless.api.response.QueryResultWithSchemaResp; import com.tencent.supersonic.headless.api.request.QueryStructReq; +import com.tencent.supersonic.headless.api.response.QueryResultWithSchemaResp; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.expression.LongValue; @@ -84,16 +96,6 @@ import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.PriorityQueue; -import java.util.Set; -import java.util.stream.Collectors; - @Service @Component("chatQueryService") @Primary @@ -106,6 +108,16 @@ public class QueryServiceImpl implements QueryService { private StatisticsService statisticsService; @Autowired private SimilarQueryManager similarQueryManager; + @Autowired + private SchemaService schemaService; + @Autowired + private AgentService agentService; + + @Autowired + private ConfigService configService; + + @Autowired + private PluginService pluginService; @Value("${time.threshold: 100}") private Integer timeThreshold; @@ -120,7 +132,8 @@ public class QueryServiceImpl implements QueryService { public ParseResp performParsing(QueryReq queryReq) { ParseResp parseResult = new ParseResp(); // build queryContext and chatContext - QueryContext queryCtx = new QueryContext(queryReq); + QueryContext queryCtx = buildQueryContext(queryReq); + // in order to support multi-turn conversation, chat context is needed ChatContext chatCtx = chatService.getOrCreateContext(queryReq.getChatId()); List timeCostDOList = new ArrayList<>(); @@ -150,8 +163,8 @@ public class QueryServiceImpl implements QueryService { if (semanticQuery instanceof RuleSemanticQuery) { continue; } - semanticCorrectors.forEach(correction -> { - correction.correct(queryReq, semanticQuery.getParseInfo()); + semanticCorrectors.forEach(corrector -> { + corrector.correct(queryCtx, semanticQuery.getParseInfo()); }); } } @@ -173,6 +186,26 @@ public class QueryServiceImpl implements QueryService { return parseResult; } + private QueryContext buildQueryContext(QueryReq queryReq) { + Integer agentId = queryReq.getAgentId(); + Agent agent = agentService.getAgent(agentId); + + SemanticSchema semanticSchema = schemaService.getSemanticSchema(); + Map modelIdToChatRichConfig = configService.getModelIdToChatRichConfig(); + + Map nameToPlugin = pluginService.getNameToPlugin(); + QueryContext queryCtx = QueryContext.builder() + .request(queryReq) + .semanticSchema(semanticSchema) + .candidateQueries(new ArrayList<>()) + .mapInfo(new SchemaMapInfo()) + .agent(agent) + .modelIdToChatRichConfig(modelIdToChatRichConfig) + .nameToPlugin(nameToPlugin) + .build(); + return queryCtx; + } + @Override @TimeCost public QueryResult performExecution(ExecuteQueryReq queryReq) throws Exception { @@ -270,6 +303,7 @@ public class QueryServiceImpl implements QueryService { ChatParseDO chatParseDO = chatService.getParseInfo(queryData.getQueryId(), queryData.getParseId()); SemanticParseInfo parseInfo = getSemanticParseInfo(queryData, chatParseDO); + SemanticSchema semanticSchema = schemaService.getSemanticSchema(); SemanticQuery semanticQuery = QueryManager.createQuery(parseInfo.getQueryMode()); semanticQuery.setParseInfo(parseInfo); @@ -300,7 +334,7 @@ public class QueryServiceImpl implements QueryService { validFilter(semanticQuery.getParseInfo().getDimensionFilters()); validFilter(semanticQuery.getParseInfo().getMetricFilters()); //init s2sql - semanticQuery.initS2Sql(user); + semanticQuery.initS2Sql(semanticSchema, user); QueryReq queryReq = new QueryReq(); queryReq.setQueryFilters(new QueryFilters()); queryReq.setUser(user); @@ -624,13 +658,7 @@ public class QueryServiceImpl implements QueryService { private List getDimensionValues(DimensionValueReq dimensionValueReq, Set detectModelIds) { //if value is null ,then search from NATURE_TO_VALUES if (StringUtils.isBlank(dimensionValueReq.getValue())) { - String nature = DictWordType.NATURE_SPILT + dimensionValueReq.getModelId() + DictWordType.NATURE_SPILT - + dimensionValueReq.getElementID(); - PriorityQueue terms = MultiCustomDictionary.NATURE_TO_VALUES.get(nature); - if (CollectionUtils.isEmpty(terms)) { - return new ArrayList<>(); - } - return terms.stream().map(term -> term.getWord()).collect(Collectors.toList()); + return SearchService.getDimensionValue(dimensionValueReq); } //search from prefixSearch List hanlpMapResultList = SearchService.prefixSearch(dimensionValueReq.getValue(), diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/RecommendServiceImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/RecommendServiceImpl.java similarity index 95% rename from chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/RecommendServiceImpl.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/RecommendServiceImpl.java index 041fc71f1..cf1e222d9 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/RecommendServiceImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/RecommendServiceImpl.java @@ -1,6 +1,7 @@ -package com.tencent.supersonic.chat.service.impl; +package com.tencent.supersonic.chat.server.service.impl; +import com.google.common.collect.Lists; import com.tencent.supersonic.chat.api.pojo.ModelSchema; import com.tencent.supersonic.chat.api.pojo.RelatedSchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaElement; @@ -9,15 +10,9 @@ import com.tencent.supersonic.chat.api.pojo.request.RecommendReq; import com.tencent.supersonic.chat.api.pojo.response.ChatConfigResp; import com.tencent.supersonic.chat.api.pojo.response.RecommendQuestionResp; import com.tencent.supersonic.chat.api.pojo.response.RecommendResp; -import com.tencent.supersonic.chat.service.ConfigService; -import com.tencent.supersonic.chat.service.RecommendService; -import com.tencent.supersonic.chat.service.SemanticService; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.compress.utils.Lists; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; - +import com.tencent.supersonic.chat.server.service.ConfigService; +import com.tencent.supersonic.chat.server.service.RecommendService; +import com.tencent.supersonic.chat.server.service.SemanticService; import java.util.ArrayList; import java.util.Comparator; import java.util.List; @@ -25,6 +20,10 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; /*** * Recommend Service impl diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/SchemaService.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/SchemaService.java similarity index 88% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/SchemaService.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/SchemaService.java index 9ce75ad34..5e1509dcf 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/SchemaService.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/SchemaService.java @@ -1,17 +1,16 @@ -package com.tencent.supersonic.knowledge.service; +package com.tencent.supersonic.chat.server.service.impl; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; -import com.tencent.supersonic.chat.api.component.SemanticInterpreter; +import com.tencent.supersonic.chat.core.knowledge.semantic.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.ModelSchema; import com.tencent.supersonic.chat.api.pojo.SemanticSchema; -import com.tencent.supersonic.knowledge.utils.ComponentFactory; +import com.tencent.supersonic.chat.core.utils.ComponentFactory; +import java.util.concurrent.TimeUnit; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; -import java.util.concurrent.TimeUnit; - @Service @Slf4j public class SchemaService { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/SearchServiceImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/SearchServiceImpl.java similarity index 93% rename from chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/SearchServiceImpl.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/SearchServiceImpl.java index 929f387e3..39bc91118 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/SearchServiceImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/SearchServiceImpl.java @@ -1,10 +1,9 @@ -package com.tencent.supersonic.chat.service.impl; +package com.tencent.supersonic.chat.server.service.impl; import com.github.benmanes.caffeine.cache.Cache; import com.google.common.collect.Lists; import com.hankcs.hanlp.seg.common.Term; -import com.tencent.supersonic.chat.agent.Agent; -import com.tencent.supersonic.chat.api.pojo.QueryContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; import com.tencent.supersonic.chat.api.pojo.SemanticSchema; @@ -13,28 +12,22 @@ import com.tencent.supersonic.chat.api.pojo.request.QueryFilter; import com.tencent.supersonic.chat.api.pojo.request.QueryFilters; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; import com.tencent.supersonic.chat.api.pojo.response.SearchResult; -import com.tencent.supersonic.chat.mapper.MapperHelper; -import com.tencent.supersonic.chat.mapper.MatchText; -import com.tencent.supersonic.chat.mapper.ModelWithSemanticType; -import com.tencent.supersonic.chat.mapper.SearchMatchStrategy; -import com.tencent.supersonic.chat.service.AgentService; -import com.tencent.supersonic.chat.service.ChatService; -import com.tencent.supersonic.chat.service.ConfigService; -import com.tencent.supersonic.chat.service.SearchService; +import com.tencent.supersonic.chat.core.agent.Agent; +import com.tencent.supersonic.chat.core.knowledge.DictWord; +import com.tencent.supersonic.chat.core.knowledge.HanlpMapResult; +import com.tencent.supersonic.chat.core.knowledge.ModelInfoStat; +import com.tencent.supersonic.chat.core.mapper.MapperHelper; +import com.tencent.supersonic.chat.core.mapper.MatchText; +import com.tencent.supersonic.chat.core.mapper.ModelWithSemanticType; +import com.tencent.supersonic.chat.core.mapper.SearchMatchStrategy; +import com.tencent.supersonic.chat.core.utils.HanlpHelper; +import com.tencent.supersonic.chat.core.utils.NatureHelper; +import com.tencent.supersonic.chat.server.service.AgentService; +import com.tencent.supersonic.chat.server.service.ChatService; +import com.tencent.supersonic.chat.server.service.ConfigService; +import com.tencent.supersonic.chat.server.service.SearchService; import com.tencent.supersonic.common.pojo.enums.DictWordType; import com.tencent.supersonic.common.util.ContextUtils; -import com.tencent.supersonic.knowledge.dictionary.DictWord; -import com.tencent.supersonic.knowledge.dictionary.HanlpMapResult; -import com.tencent.supersonic.knowledge.dictionary.ModelInfoStat; -import com.tencent.supersonic.knowledge.service.SchemaService; -import com.tencent.supersonic.knowledge.utils.HanlpHelper; -import com.tencent.supersonic.knowledge.utils.NatureHelper; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.stereotype.Service; - import java.util.ArrayList; import java.util.Comparator; import java.util.HashSet; @@ -47,6 +40,11 @@ import java.util.Objects; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; /** @@ -74,7 +72,6 @@ public class SearchServiceImpl implements SearchService { @Override public List search(QueryReq queryReq) { - // 1. check search enable Integer agentId = queryReq.getAgentId(); if (agentId != null) { @@ -94,7 +91,7 @@ public class SearchServiceImpl implements SearchService { List originals = HanlpHelper.getTerms(queryText); log.info("hanlp parse result: {}", originals); MapperHelper mapperHelper = ContextUtils.getBean(MapperHelper.class); - Set detectModelIds = mapperHelper.getModelIds(queryReq); + Set detectModelIds = mapperHelper.getModelIds(queryReq, agentService.getAgent(agentId)); QueryContext queryContext = new QueryContext(); queryContext.setRequest(queryReq); diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/StatisticsServiceImpl.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/StatisticsServiceImpl.java similarity index 67% rename from chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/StatisticsServiceImpl.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/StatisticsServiceImpl.java index cb162d237..92efad359 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/service/impl/StatisticsServiceImpl.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/StatisticsServiceImpl.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.chat.service.impl; +package com.tencent.supersonic.chat.server.service.impl; -import com.tencent.supersonic.chat.persistence.dataobject.StatisticsDO; -import com.tencent.supersonic.chat.persistence.repository.StatisticsRepository; -import com.tencent.supersonic.chat.service.StatisticsService; +import com.tencent.supersonic.chat.server.persistence.dataobject.StatisticsDO; +import com.tencent.supersonic.chat.server.persistence.repository.StatisticsRepository; +import com.tencent.supersonic.chat.server.service.StatisticsService; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/WordService.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/WordService.java similarity index 83% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/WordService.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/WordService.java index b904c1a20..650447e4e 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/service/WordService.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/service/impl/WordService.java @@ -1,16 +1,14 @@ -package com.tencent.supersonic.knowledge.service; +package com.tencent.supersonic.chat.server.service.impl; -import com.tencent.supersonic.chat.api.component.SemanticInterpreter; +import com.tencent.supersonic.chat.core.knowledge.semantic.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SemanticSchema; -import com.tencent.supersonic.knowledge.dictionary.DictWord; +import com.tencent.supersonic.chat.core.knowledge.DictWord; +import com.tencent.supersonic.chat.core.knowledge.builder.WordBuilderFactory; +import com.tencent.supersonic.chat.core.utils.ComponentFactory; import com.tencent.supersonic.common.pojo.enums.DictWordType; -import com.tencent.supersonic.knowledge.dictionary.builder.WordBuilderFactory; - import java.util.ArrayList; import java.util.List; - -import com.tencent.supersonic.knowledge.utils.ComponentFactory; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/ChatConfigHelper.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/util/ChatConfigHelper.java similarity index 97% rename from chat/core/src/main/java/com/tencent/supersonic/chat/utils/ChatConfigHelper.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/util/ChatConfigHelper.java index f43c46547..2a8ef82fa 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/ChatConfigHelper.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/util/ChatConfigHelper.java @@ -1,29 +1,27 @@ -package com.tencent.supersonic.chat.utils; +package com.tencent.supersonic.chat.server.util; import static com.tencent.supersonic.common.pojo.Constants.ADMIN_LOWER; import com.tencent.supersonic.auth.api.authentication.pojo.User; import com.tencent.supersonic.chat.api.pojo.ModelSchema; import com.tencent.supersonic.chat.api.pojo.SchemaElement; -import com.tencent.supersonic.chat.api.pojo.request.ChatConfigBaseReq; import com.tencent.supersonic.chat.api.pojo.request.ChatAggConfigReq; -import com.tencent.supersonic.chat.api.pojo.request.ChatDetailConfigReq; +import com.tencent.supersonic.chat.api.pojo.request.ChatConfigBaseReq; import com.tencent.supersonic.chat.api.pojo.request.ChatConfigEditReqReq; +import com.tencent.supersonic.chat.api.pojo.request.ChatDetailConfigReq; import com.tencent.supersonic.chat.api.pojo.request.ItemVisibility; import com.tencent.supersonic.chat.api.pojo.request.RecommendedQuestionReq; import com.tencent.supersonic.chat.api.pojo.response.ChatConfigResp; -import com.tencent.supersonic.chat.config.ChatConfig; -import com.tencent.supersonic.chat.persistence.dataobject.ChatConfigDO; -import com.tencent.supersonic.common.pojo.enums.StatusEnum; +import com.tencent.supersonic.chat.server.config.ChatConfig; +import com.tencent.supersonic.chat.server.persistence.dataobject.ChatConfigDO; import com.tencent.supersonic.common.pojo.RecordInfo; +import com.tencent.supersonic.common.pojo.enums.StatusEnum; import com.tencent.supersonic.common.util.JsonUtil; - import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; - import lombok.extern.slf4j.Slf4j; import org.apache.logging.log4j.util.Strings; import org.springframework.beans.BeanUtils; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/ComponentFactory.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/util/ComponentFactory.java similarity index 84% rename from chat/core/src/main/java/com/tencent/supersonic/chat/utils/ComponentFactory.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/util/ComponentFactory.java index 30d0972dd..f46a54420 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/ComponentFactory.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/util/ComponentFactory.java @@ -1,23 +1,23 @@ -package com.tencent.supersonic.chat.utils; +package com.tencent.supersonic.chat.server.util; -import com.tencent.supersonic.chat.api.component.SemanticCorrector; -import com.tencent.supersonic.chat.api.component.SemanticInterpreter; -import com.tencent.supersonic.chat.api.component.SchemaMapper; -import com.tencent.supersonic.chat.api.component.SemanticParser; -import com.tencent.supersonic.chat.parser.JavaLLMProxy; -import com.tencent.supersonic.chat.parser.LLMProxy; -import com.tencent.supersonic.chat.parser.sql.llm.ModelResolver; -import com.tencent.supersonic.chat.processor.execute.ExecuteResultProcessor; -import com.tencent.supersonic.chat.processor.parse.ParseResultProcessor; +import com.tencent.supersonic.chat.core.corrector.SemanticCorrector; +import com.tencent.supersonic.chat.core.knowledge.semantic.SemanticInterpreter; +import com.tencent.supersonic.chat.core.mapper.SchemaMapper; +import com.tencent.supersonic.chat.core.parser.JavaLLMProxy; +import com.tencent.supersonic.chat.core.parser.LLMProxy; +import com.tencent.supersonic.chat.core.parser.SemanticParser; +import com.tencent.supersonic.chat.core.parser.sql.llm.ModelResolver; +import com.tencent.supersonic.chat.server.processor.execute.ExecuteResultProcessor; +import com.tencent.supersonic.chat.server.processor.parse.ParseResultProcessor; import com.tencent.supersonic.common.util.ContextUtils; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang3.StringUtils; -import org.springframework.core.io.support.SpringFactoriesLoader; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.core.io.support.SpringFactoriesLoader; @Slf4j public class ComponentFactory { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictMetaHelper.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/util/DictMetaHelper.java similarity index 95% rename from chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictMetaHelper.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/util/DictMetaHelper.java index b0bd9c9f6..a601dc233 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/DictMetaHelper.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/util/DictMetaHelper.java @@ -1,28 +1,24 @@ -package com.tencent.supersonic.chat.utils; +package com.tencent.supersonic.chat.server.util; + +import static com.tencent.supersonic.common.pojo.Constants.DAY; +import static com.tencent.supersonic.common.pojo.Constants.UNDERLINE; import com.github.pagehelper.PageInfo; -import com.tencent.supersonic.chat.api.component.SemanticInterpreter; import com.tencent.supersonic.chat.api.pojo.ModelSchema; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.request.KnowledgeAdvancedConfig; import com.tencent.supersonic.chat.api.pojo.request.KnowledgeInfoReq; import com.tencent.supersonic.chat.api.pojo.response.ChatConfigRichResp; import com.tencent.supersonic.chat.api.pojo.response.ChatDefaultRichConfigResp; -import com.tencent.supersonic.chat.config.DefaultMetric; -import com.tencent.supersonic.chat.config.Dim4Dict; -import com.tencent.supersonic.chat.persistence.dataobject.DimValueDO; -import com.tencent.supersonic.chat.service.ConfigService; -import com.tencent.supersonic.knowledge.dictionary.DictUpdateMode; -import com.tencent.supersonic.knowledge.dictionary.DimValue2DictCommand; +import com.tencent.supersonic.chat.core.config.DefaultMetric; +import com.tencent.supersonic.chat.core.config.Dim4Dict; +import com.tencent.supersonic.chat.core.knowledge.DictUpdateMode; +import com.tencent.supersonic.chat.core.knowledge.DimValue2DictCommand; +import com.tencent.supersonic.chat.core.knowledge.semantic.SemanticInterpreter; +import com.tencent.supersonic.chat.server.persistence.dataobject.DimValueDO; +import com.tencent.supersonic.chat.server.service.ConfigService; import com.tencent.supersonic.headless.api.request.PageDimensionReq; import com.tencent.supersonic.headless.api.response.DimensionResp; -import org.apache.commons.lang3.StringUtils; -import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; - import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -32,9 +28,12 @@ import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; - -import static com.tencent.supersonic.common.pojo.Constants.DAY; -import static com.tencent.supersonic.common.pojo.Constants.UNDERLINE; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; @Component public class DictMetaHelper { diff --git a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/DictTaskConverter.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/util/DictTaskConverter.java similarity index 80% rename from chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/DictTaskConverter.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/util/DictTaskConverter.java index 821dd7041..f1f6858f9 100644 --- a/chat/knowledge/src/main/java/com/tencent/supersonic/knowledge/utils/DictTaskConverter.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/util/DictTaskConverter.java @@ -1,15 +1,14 @@ -package com.tencent.supersonic.knowledge.utils; +package com.tencent.supersonic.chat.server.util; import com.google.common.base.Strings; import com.tencent.supersonic.auth.api.authentication.pojo.User; +import com.tencent.supersonic.chat.core.knowledge.DictConfig; +import com.tencent.supersonic.chat.core.knowledge.DimValue2DictCommand; +import com.tencent.supersonic.chat.core.knowledge.DimValueInfo; +import com.tencent.supersonic.chat.server.persistence.dataobject.DictConfDO; +import com.tencent.supersonic.chat.server.persistence.dataobject.DictTaskDO; import com.tencent.supersonic.common.pojo.enums.TaskStatusEnum; import com.tencent.supersonic.common.util.JsonUtil; -import com.tencent.supersonic.knowledge.dictionary.DictConfig; -import com.tencent.supersonic.knowledge.dictionary.DimValue2DictCommand; -import com.tencent.supersonic.knowledge.dictionary.DimValueInfo; -import com.tencent.supersonic.knowledge.persistence.dataobject.DictConfDO; -import com.tencent.supersonic.knowledge.persistence.dataobject.DictTaskDO; - import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.Date; diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/VisibilityEvent.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/util/VisibilityEvent.java similarity index 82% rename from chat/core/src/main/java/com/tencent/supersonic/chat/utils/VisibilityEvent.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/util/VisibilityEvent.java index ca973b6ee..98e267d3d 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/VisibilityEvent.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/util/VisibilityEvent.java @@ -1,6 +1,6 @@ -package com.tencent.supersonic.chat.utils; +package com.tencent.supersonic.chat.server.util; -import com.tencent.supersonic.chat.config.ChatConfig; +import com.tencent.supersonic.chat.server.config.ChatConfig; import org.springframework.context.ApplicationEvent; public class VisibilityEvent extends ApplicationEvent { diff --git a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/VisibilityListener.java b/chat/server/src/main/java/com/tencent/supersonic/chat/server/util/VisibilityListener.java similarity index 90% rename from chat/core/src/main/java/com/tencent/supersonic/chat/utils/VisibilityListener.java rename to chat/server/src/main/java/com/tencent/supersonic/chat/server/util/VisibilityListener.java index 7e227e4b5..11f5a0dfd 100644 --- a/chat/core/src/main/java/com/tencent/supersonic/chat/utils/VisibilityListener.java +++ b/chat/server/src/main/java/com/tencent/supersonic/chat/server/util/VisibilityListener.java @@ -1,8 +1,8 @@ -package com.tencent.supersonic.chat.utils; +package com.tencent.supersonic.chat.server.util; import com.github.benmanes.caffeine.cache.Cache; import com.tencent.supersonic.chat.api.pojo.request.ItemNameVisibilityInfo; -import com.tencent.supersonic.chat.service.ConfigService; +import com.tencent.supersonic.chat.server.service.ConfigService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; diff --git a/chat/core/src/main/resources/mapper/AgentDOMapper.xml b/chat/server/src/main/resources/mapper/AgentDOMapper.xml similarity index 95% rename from chat/core/src/main/resources/mapper/AgentDOMapper.xml rename to chat/server/src/main/resources/mapper/AgentDOMapper.xml index 9e1fcd353..9c1c3556f 100644 --- a/chat/core/src/main/resources/mapper/AgentDOMapper.xml +++ b/chat/server/src/main/resources/mapper/AgentDOMapper.xml @@ -1,7 +1,7 @@ - - + + @@ -76,7 +76,7 @@ id, name, description, status, examples, config, created_by, created_at, updated_by, updated_at, enable_search - select distinct @@ -103,7 +103,7 @@ delete from s2_agent where id = #{id,jdbcType=INTEGER} - + insert into s2_agent (id, name, description, status, examples, config, created_by, created_at, updated_by, @@ -113,7 +113,7 @@ #{createdBy,jdbcType=VARCHAR}, #{createdAt,jdbcType=TIMESTAMP}, #{updatedBy,jdbcType=VARCHAR}, #{updatedAt,jdbcType=TIMESTAMP}, #{enableSearch,jdbcType=INTEGER}) - + insert into s2_agent @@ -186,7 +186,7 @@ - select count(*) from s2_agent @@ -250,7 +250,7 @@ - + update s2_agent @@ -286,7 +286,7 @@ where id = #{id,jdbcType=INTEGER} - + update s2_agent set name = #{name,jdbcType=VARCHAR}, description = #{description,jdbcType=VARCHAR}, diff --git a/chat/core/src/main/resources/mapper/ChatConfigMapper.xml b/chat/server/src/main/resources/mapper/ChatConfigMapper.xml similarity index 92% rename from chat/core/src/main/resources/mapper/ChatConfigMapper.xml rename to chat/server/src/main/resources/mapper/ChatConfigMapper.xml index 6d289934b..edd7d2b25 100644 --- a/chat/core/src/main/resources/mapper/ChatConfigMapper.xml +++ b/chat/server/src/main/resources/mapper/ChatConfigMapper.xml @@ -3,10 +3,10 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + + type="com.tencent.supersonic.chat.server.persistence.dataobject.ChatConfigDO"> @@ -21,7 +21,7 @@ insert into s2_chat_config ( diff --git a/chat/core/src/main/resources/mapper/ChatContextMapper.xml b/chat/server/src/main/resources/mapper/ChatContextMapper.xml similarity index 81% rename from chat/core/src/main/resources/mapper/ChatContextMapper.xml rename to chat/server/src/main/resources/mapper/ChatContextMapper.xml index 2a8834627..b957115f8 100644 --- a/chat/core/src/main/resources/mapper/ChatContextMapper.xml +++ b/chat/server/src/main/resources/mapper/ChatContextMapper.xml @@ -3,10 +3,10 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + + type="com.tencent.supersonic.chat.server.persistence.dataobject.ChatContextDO"> @@ -20,7 +20,7 @@ from s2_chat_context where chat_id=#{chatId} limit 1 - + insert into s2_chat_context (chat_id,user,query_text,semantic_parse) values (#{chatId}, #{user},#{queryText}, #{semanticParse}) diff --git a/chat/core/src/main/resources/mapper/ChatMapper.xml b/chat/server/src/main/resources/mapper/ChatMapper.xml similarity index 93% rename from chat/core/src/main/resources/mapper/ChatMapper.xml rename to chat/server/src/main/resources/mapper/ChatMapper.xml index 18f71d54f..8fc08a17f 100644 --- a/chat/core/src/main/resources/mapper/ChatMapper.xml +++ b/chat/server/src/main/resources/mapper/ChatMapper.xml @@ -3,9 +3,9 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + - + @@ -49,7 +49,7 @@ where chat_id = #{chatId} - + insert into s2_chat (agent_id, chat_name, create_time, last_time, creator, last_question, is_delete, is_top) values (#{agentId}, #{chatName}, #{createTime}, #{lastTime}, #{creator}, #{lastQuestion}, #{isDelete}, #{isTop}) @@ -63,7 +63,7 @@ - + @@ -87,14 +87,14 @@ - + update s2_chat_query set score=#{score}, feedback=#{feedback} where question_id = #{id} - insert into s2_chat_query (question_id, create_time, user_name, question, query_result, time, state, data_content, name, query_type, diff --git a/chat/core/src/main/resources/mapper/ChatParseMapper.xml b/chat/server/src/main/resources/mapper/ChatParseMapper.xml similarity index 88% rename from chat/core/src/main/resources/mapper/ChatParseMapper.xml rename to chat/server/src/main/resources/mapper/ChatParseMapper.xml index 3c442fe2a..f5242e3fb 100644 --- a/chat/core/src/main/resources/mapper/ChatParseMapper.xml +++ b/chat/server/src/main/resources/mapper/ChatParseMapper.xml @@ -3,9 +3,9 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + - + @@ -16,7 +16,7 @@ - + insert into s2_chat_parse (question_id, chat_id, parse_id, create_time, query_text, user_name, parse_info,is_candidate) values @@ -25,7 +25,7 @@ - + update s2_chat_parse set parse_info = #{parseInfo} where question_id = #{questionId} and parse_id = #{parseId} diff --git a/chat/core/src/main/resources/mapper/ChatQueryDOMapper.xml b/chat/server/src/main/resources/mapper/ChatQueryDOMapper.xml similarity index 91% rename from chat/core/src/main/resources/mapper/ChatQueryDOMapper.xml rename to chat/server/src/main/resources/mapper/ChatQueryDOMapper.xml index 3baaefe6d..d7ef77ab1 100644 --- a/chat/core/src/main/resources/mapper/ChatQueryDOMapper.xml +++ b/chat/server/src/main/resources/mapper/ChatQueryDOMapper.xml @@ -1,7 +1,7 @@ - - + + @@ -11,7 +11,7 @@ - + @@ -51,7 +51,7 @@ query_text, query_result, similar_queries - select distinct @@ -78,7 +78,7 @@ delete from s2_chat_query where question_id = #{questionId,jdbcType=BIGINT} - + insert into s2_chat_query (agent_id, create_time, user_name, query_state, chat_id, score, feedback, query_text, query_result, similar_queries @@ -90,7 +90,7 @@ ) - + update s2_chat_query diff --git a/chat/knowledge/src/main/resources/mapper/DictConfMapper.xml b/chat/server/src/main/resources/mapper/DictConfMapper.xml similarity index 90% rename from chat/knowledge/src/main/resources/mapper/DictConfMapper.xml rename to chat/server/src/main/resources/mapper/DictConfMapper.xml index eb28da69e..5ec8d968a 100644 --- a/chat/knowledge/src/main/resources/mapper/DictConfMapper.xml +++ b/chat/server/src/main/resources/mapper/DictConfMapper.xml @@ -2,10 +2,10 @@ - + + type="com.tencent.supersonic.chat.server.persistence.dataobject.DictConfDO"> diff --git a/chat/knowledge/src/main/resources/mapper/DictTaskMapper.xml b/chat/server/src/main/resources/mapper/DictTaskMapper.xml similarity index 93% rename from chat/knowledge/src/main/resources/mapper/DictTaskMapper.xml rename to chat/server/src/main/resources/mapper/DictTaskMapper.xml index e378f7a80..807357dd4 100644 --- a/chat/knowledge/src/main/resources/mapper/DictTaskMapper.xml +++ b/chat/server/src/main/resources/mapper/DictTaskMapper.xml @@ -2,10 +2,10 @@ - + + type="com.tencent.supersonic.chat.server.persistence.dataobject.DictTaskDO"> diff --git a/chat/core/src/main/resources/mapper/PluginDOMapper.xml b/chat/server/src/main/resources/mapper/PluginDOMapper.xml similarity index 77% rename from chat/core/src/main/resources/mapper/PluginDOMapper.xml rename to chat/server/src/main/resources/mapper/PluginDOMapper.xml index 5a9386a4f..37a9ef60b 100644 --- a/chat/core/src/main/resources/mapper/PluginDOMapper.xml +++ b/chat/server/src/main/resources/mapper/PluginDOMapper.xml @@ -1,7 +1,7 @@ - - + + @@ -13,7 +13,7 @@ - + @@ -54,7 +54,7 @@ parse_mode_config, config, comment - select distinct @@ -70,7 +70,7 @@ order by ${orderByClause} - select distinct @@ -88,7 +88,7 @@ + - + update s2_plugin @@ -244,33 +244,33 @@ where id = #{id,jdbcType=BIGINT} - + update s2_plugin set type = #{type,jdbcType=VARCHAR}, - model = #{model,jdbcType=VARCHAR}, - pattern = #{pattern,jdbcType=VARCHAR}, - parse_mode = #{parseMode,jdbcType=VARCHAR}, - name = #{name,jdbcType=VARCHAR}, - created_at = #{createdAt,jdbcType=TIMESTAMP}, - created_by = #{createdBy,jdbcType=VARCHAR}, - updated_at = #{updatedAt,jdbcType=TIMESTAMP}, - updated_by = #{updatedBy,jdbcType=VARCHAR}, - parse_mode_config = #{parseModeConfig,jdbcType=LONGVARCHAR}, - config = #{config,jdbcType=LONGVARCHAR}, - comment = #{comment,jdbcType=LONGVARCHAR} + model = #{model,jdbcType=VARCHAR}, + pattern = #{pattern,jdbcType=VARCHAR}, + parse_mode = #{parseMode,jdbcType=VARCHAR}, + name = #{name,jdbcType=VARCHAR}, + created_at = #{createdAt,jdbcType=TIMESTAMP}, + created_by = #{createdBy,jdbcType=VARCHAR}, + updated_at = #{updatedAt,jdbcType=TIMESTAMP}, + updated_by = #{updatedBy,jdbcType=VARCHAR}, + parse_mode_config = #{parseModeConfig,jdbcType=LONGVARCHAR}, + config = #{config,jdbcType=LONGVARCHAR}, + comment = #{comment,jdbcType=LONGVARCHAR} where id = #{id,jdbcType=BIGINT} - + update s2_plugin set type = #{type,jdbcType=VARCHAR}, - model = #{model,jdbcType=VARCHAR}, - pattern = #{pattern,jdbcType=VARCHAR}, - parse_mode = #{parseMode,jdbcType=VARCHAR}, - name = #{name,jdbcType=VARCHAR}, - created_at = #{createdAt,jdbcType=TIMESTAMP}, - created_by = #{createdBy,jdbcType=VARCHAR}, - updated_at = #{updatedAt,jdbcType=TIMESTAMP}, - updated_by = #{updatedBy,jdbcType=VARCHAR} + model = #{model,jdbcType=VARCHAR}, + pattern = #{pattern,jdbcType=VARCHAR}, + parse_mode = #{parseMode,jdbcType=VARCHAR}, + name = #{name,jdbcType=VARCHAR}, + created_at = #{createdAt,jdbcType=TIMESTAMP}, + created_by = #{createdBy,jdbcType=VARCHAR}, + updated_at = #{updatedAt,jdbcType=TIMESTAMP}, + updated_by = #{updatedBy,jdbcType=VARCHAR} where id = #{id,jdbcType=BIGINT} \ No newline at end of file diff --git a/chat/core/src/main/resources/mapper/StatisticsMapper.xml b/chat/server/src/main/resources/mapper/StatisticsMapper.xml similarity index 87% rename from chat/core/src/main/resources/mapper/StatisticsMapper.xml rename to chat/server/src/main/resources/mapper/StatisticsMapper.xml index 2470c222d..a6342ea57 100644 --- a/chat/core/src/main/resources/mapper/StatisticsMapper.xml +++ b/chat/server/src/main/resources/mapper/StatisticsMapper.xml @@ -3,9 +3,9 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + - + @@ -16,7 +16,7 @@ - + insert into s2_chat_statistics (question_id,chat_id, user_name, query_text, interface_name,cost,type ,create_time) values diff --git a/chat/core/src/main/resources/mapper/custom/ShowCaseCustomMapper.xml b/chat/server/src/main/resources/mapper/custom/ShowCaseCustomMapper.xml similarity index 93% rename from chat/core/src/main/resources/mapper/custom/ShowCaseCustomMapper.xml rename to chat/server/src/main/resources/mapper/custom/ShowCaseCustomMapper.xml index e59bbf1fb..ac274baf0 100644 --- a/chat/core/src/main/resources/mapper/custom/ShowCaseCustomMapper.xml +++ b/chat/server/src/main/resources/mapper/custom/ShowCaseCustomMapper.xml @@ -1,8 +1,8 @@ - - + + @@ -11,7 +11,7 @@ - + diff --git a/chat/core/src/test/java/com/tencent/supersonic/chat/application/parser/TimeRangeParserTest.java b/chat/server/src/test/java/com/tencent/supersonic/chat/server/application/parser/TimeRangeParserTest.java similarity index 52% rename from chat/core/src/test/java/com/tencent/supersonic/chat/application/parser/TimeRangeParserTest.java rename to chat/server/src/test/java/com/tencent/supersonic/chat/server/application/parser/TimeRangeParserTest.java index 3a129bffd..de2e15f63 100644 --- a/chat/core/src/test/java/com/tencent/supersonic/chat/application/parser/TimeRangeParserTest.java +++ b/chat/server/src/test/java/com/tencent/supersonic/chat/server/application/parser/TimeRangeParserTest.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.chat.application.parser; +package com.tencent.supersonic.chat.server.application.parser; -import com.tencent.supersonic.chat.api.pojo.ChatContext; -import com.tencent.supersonic.chat.api.pojo.QueryContext; import com.tencent.supersonic.chat.api.pojo.request.QueryReq; -import com.tencent.supersonic.chat.parser.sql.rule.TimeRangeParser; +import com.tencent.supersonic.chat.core.parser.sql.rule.TimeRangeParser; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.core.pojo.QueryContext; import org.junit.jupiter.api.Test; @@ -17,7 +17,8 @@ class TimeRangeParserTest { ChatContext chatCtx = new ChatContext(); queryRequest.setQueryText("supersonic最近30天访问次数"); - timeRangeParser.parse(new QueryContext(queryRequest), chatCtx); + + timeRangeParser.parse(QueryContext.builder().request(queryRequest).semanticSchema(null).build(), chatCtx); } } diff --git a/chat/core/src/test/java/com/tencent/supersonic/chat/application/parser/aggregate/AggregateTypeParserTest.java b/chat/server/src/test/java/com/tencent/supersonic/chat/server/application/parser/aggregate/AggregateTypeParserTest.java similarity index 59% rename from chat/core/src/test/java/com/tencent/supersonic/chat/application/parser/aggregate/AggregateTypeParserTest.java rename to chat/server/src/test/java/com/tencent/supersonic/chat/server/application/parser/aggregate/AggregateTypeParserTest.java index f56082ad3..df13e676b 100644 --- a/chat/core/src/test/java/com/tencent/supersonic/chat/application/parser/aggregate/AggregateTypeParserTest.java +++ b/chat/server/src/test/java/com/tencent/supersonic/chat/server/application/parser/aggregate/AggregateTypeParserTest.java @@ -1,9 +1,9 @@ -package com.tencent.supersonic.chat.application.parser.aggregate; +package com.tencent.supersonic.chat.server.application.parser.aggregate; -import static org.junit.Assert.assertEquals; -import com.tencent.supersonic.chat.parser.sql.rule.AggregateTypeParser; +import com.tencent.supersonic.chat.core.parser.sql.rule.AggregateTypeParser; import com.tencent.supersonic.common.pojo.enums.AggregateTypeEnum; +import org.junit.Assert; import org.junit.jupiter.api.Test; class AggregateTypeParserTest { @@ -12,27 +12,27 @@ class AggregateTypeParserTest { void getAggregateParser() { AggregateTypeParser aggregateParser = new AggregateTypeParser(); AggregateTypeEnum aggregateType = aggregateParser.resolveAggregateType("supsersonic产品访问次数最大值"); - assertEquals(aggregateType, AggregateTypeEnum.MAX); + Assert.assertEquals(aggregateType, AggregateTypeEnum.MAX); aggregateType = aggregateParser.resolveAggregateType("supsersonic产品pv"); - assertEquals(aggregateType, AggregateTypeEnum.COUNT); + Assert.assertEquals(aggregateType, AggregateTypeEnum.COUNT); aggregateType = aggregateParser.resolveAggregateType("supsersonic产品uv"); - assertEquals(aggregateType, AggregateTypeEnum.DISTINCT); + Assert.assertEquals(aggregateType, AggregateTypeEnum.DISTINCT); aggregateType = aggregateParser.resolveAggregateType("supsersonic产品访问次数最大值"); - assertEquals(aggregateType, AggregateTypeEnum.MAX); + Assert.assertEquals(aggregateType, AggregateTypeEnum.MAX); aggregateType = aggregateParser.resolveAggregateType("supsersonic产品访问次数最小值"); - assertEquals(aggregateType, AggregateTypeEnum.MIN); + Assert.assertEquals(aggregateType, AggregateTypeEnum.MIN); aggregateType = aggregateParser.resolveAggregateType("supsersonic产品访问次数平均值"); - assertEquals(aggregateType, AggregateTypeEnum.AVG); + Assert.assertEquals(aggregateType, AggregateTypeEnum.AVG); aggregateType = aggregateParser.resolveAggregateType("supsersonic产品访问次数topN"); - assertEquals(aggregateType, AggregateTypeEnum.TOPN); + Assert.assertEquals(aggregateType, AggregateTypeEnum.TOPN); aggregateType = aggregateParser.resolveAggregateType("supsersonic产品访问次数汇总"); - assertEquals(aggregateType, AggregateTypeEnum.SUM); + Assert.assertEquals(aggregateType, AggregateTypeEnum.SUM); } } \ No newline at end of file diff --git a/chat/core/src/test/java/com/tencent/supersonic/chat/application/search/SearchServiceImplTest.java b/chat/server/src/test/java/com/tencent/supersonic/chat/server/application/search/SearchServiceImplTest.java similarity index 71% rename from chat/core/src/test/java/com/tencent/supersonic/chat/application/search/SearchServiceImplTest.java rename to chat/server/src/test/java/com/tencent/supersonic/chat/server/application/search/SearchServiceImplTest.java index e6c815297..f95cbc4c7 100644 --- a/chat/core/src/test/java/com/tencent/supersonic/chat/application/search/SearchServiceImplTest.java +++ b/chat/server/src/test/java/com/tencent/supersonic/chat/server/application/search/SearchServiceImplTest.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.application.search; +package com.tencent.supersonic.chat.server.application.search; import org.junit.jupiter.api.Test; diff --git a/chat/core/src/test/java/com/tencent/supersonic/chat/mapper/LoadRemoveServiceTest.java b/chat/server/src/test/java/com/tencent/supersonic/chat/server/mapper/LoadRemoveServiceTest.java similarity index 85% rename from chat/core/src/test/java/com/tencent/supersonic/chat/mapper/LoadRemoveServiceTest.java rename to chat/server/src/test/java/com/tencent/supersonic/chat/server/mapper/LoadRemoveServiceTest.java index 299077254..d0eadacbb 100644 --- a/chat/core/src/test/java/com/tencent/supersonic/chat/mapper/LoadRemoveServiceTest.java +++ b/chat/server/src/test/java/com/tencent/supersonic/chat/server/mapper/LoadRemoveServiceTest.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.mapper; +package com.tencent.supersonic.chat.server.mapper; import com.hankcs.hanlp.algorithm.EditDistance; diff --git a/chat/server/src/test/java/com/tencent/supersonic/chat/server/mapper/match/HanlpDictMatchStrategyTest.java b/chat/server/src/test/java/com/tencent/supersonic/chat/server/mapper/match/HanlpDictMatchStrategyTest.java new file mode 100644 index 000000000..c6a3531ff --- /dev/null +++ b/chat/server/src/test/java/com/tencent/supersonic/chat/server/mapper/match/HanlpDictMatchStrategyTest.java @@ -0,0 +1,18 @@ +package com.tencent.supersonic.chat.server.mapper.match; + +import com.tencent.supersonic.chat.server.test.context.ContextTest; +import org.junit.jupiter.api.Test; + +/** + * MatchStrategyImplTest + */ +class HanlpDictMatchStrategyTest extends ContextTest { + + @Test + void match() { + } + + @Test + void testMatch() { + } +} \ No newline at end of file diff --git a/chat/server/src/test/java/com/tencent/supersonic/chat/server/parser/llm/s2sql/LLMResponseServiceTest.java b/chat/server/src/test/java/com/tencent/supersonic/chat/server/parser/llm/s2sql/LLMResponseServiceTest.java new file mode 100644 index 000000000..fcb9e6e3b --- /dev/null +++ b/chat/server/src/test/java/com/tencent/supersonic/chat/server/parser/llm/s2sql/LLMResponseServiceTest.java @@ -0,0 +1,55 @@ +package com.tencent.supersonic.chat.server.parser.llm.s2sql; + +import com.tencent.supersonic.chat.core.parser.sql.llm.LLMResponseService; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMSqlResp; +import com.tencent.supersonic.chat.core.query.llm.s2sql.LLMResp; +import java.util.HashMap; +import java.util.Map; +import org.junit.Assert; +import org.junit.jupiter.api.Test; + +class LLMResponseServiceTest { + + @Test + void deduplicationSqlWeight() { + String sql1 = "SELECT a,b,c,d FROM table1 WHERE column1 = 1 AND column2 = 2 order by a"; + String sql2 = "SELECT d,c,b,a FROM table1 WHERE column2 = 2 AND column1 = 1 order by a"; + + LLMResp llmResp = new LLMResp(); + Map sqlWeight = new HashMap<>(); + sqlWeight.put(sql1, LLMSqlResp.builder().sqlWeight(0.20).build()); + sqlWeight.put(sql2, LLMSqlResp.builder().sqlWeight(0.80).build()); + + llmResp.setSqlRespMap(sqlWeight); + LLMResponseService llmResponseService = new LLMResponseService(); + Map deduplicationSqlResp = llmResponseService.getDeduplicationSqlResp(llmResp); + + Assert.assertEquals(deduplicationSqlResp.size(), 1); + + sql1 = "SELECT a,b,c,d FROM table1 WHERE column1 = 1 AND column2 = 2 order by a"; + sql2 = "SELECT d,c,b,a FROM table1 WHERE column2 = 2 AND column1 = 1 order by a"; + + LLMResp llmResp2 = new LLMResp(); + Map sqlWeight2 = new HashMap<>(); + sqlWeight2.put(sql1, LLMSqlResp.builder().sqlWeight(0.20).build()); + sqlWeight2.put(sql2, LLMSqlResp.builder().sqlWeight(0.80).build()); + + llmResp2.setSqlRespMap(sqlWeight2); + deduplicationSqlResp = llmResponseService.getDeduplicationSqlResp(llmResp2); + + Assert.assertEquals(deduplicationSqlResp.size(), 1); + + sql1 = "SELECT a,b,c,d,e FROM table1 WHERE column1 = 1 AND column2 = 2 order by a"; + sql2 = "SELECT d,c,b,a FROM table1 WHERE column2 = 2 AND column1 = 1 order by a"; + + LLMResp llmResp3 = new LLMResp(); + Map sqlWeight3 = new HashMap<>(); + sqlWeight3.put(sql1, LLMSqlResp.builder().sqlWeight(0.20).build()); + sqlWeight3.put(sql2, LLMSqlResp.builder().sqlWeight(0.80).build()); + llmResp3.setSqlRespMap(sqlWeight3); + deduplicationSqlResp = llmResponseService.getDeduplicationSqlResp(llmResp3); + + Assert.assertEquals(deduplicationSqlResp.size(), 2); + + } +} \ No newline at end of file diff --git a/chat/core/src/test/java/com/tencent/supersonic/chat/parser/llm/s2sql/LLMS2SQLParserTest.java b/chat/server/src/test/java/com/tencent/supersonic/chat/server/parser/llm/s2sql/LLMS2SQLParserTest.java similarity index 94% rename from chat/core/src/test/java/com/tencent/supersonic/chat/parser/llm/s2sql/LLMS2SQLParserTest.java rename to chat/server/src/test/java/com/tencent/supersonic/chat/server/parser/llm/s2sql/LLMS2SQLParserTest.java index cef47a74f..79ab32575 100644 --- a/chat/core/src/test/java/com/tencent/supersonic/chat/parser/llm/s2sql/LLMS2SQLParserTest.java +++ b/chat/server/src/test/java/com/tencent/supersonic/chat/server/parser/llm/s2sql/LLMS2SQLParserTest.java @@ -1,12 +1,12 @@ -package com.tencent.supersonic.chat.parser.llm.s2sql; +package com.tencent.supersonic.chat.server.parser.llm.s2sql; import static org.mockito.Mockito.when; import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaValueMap; import com.tencent.supersonic.chat.api.pojo.SemanticSchema; +import com.tencent.supersonic.chat.server.service.impl.SchemaService; import com.tencent.supersonic.common.util.ContextUtils; -import com.tencent.supersonic.knowledge.service.SchemaService; import java.util.ArrayList; import java.util.Arrays; import java.util.List; diff --git a/chat/core/src/test/java/com/tencent/supersonic/chat/processor/MetricCheckProcessorTest.java b/chat/server/src/test/java/com/tencent/supersonic/chat/server/processor/MetricCheckProcessorTest.java similarity index 98% rename from chat/core/src/test/java/com/tencent/supersonic/chat/processor/MetricCheckProcessorTest.java rename to chat/server/src/test/java/com/tencent/supersonic/chat/server/processor/MetricCheckProcessorTest.java index 5e51d8c2b..ef3289e91 100644 --- a/chat/core/src/test/java/com/tencent/supersonic/chat/processor/MetricCheckProcessorTest.java +++ b/chat/server/src/test/java/com/tencent/supersonic/chat/server/processor/MetricCheckProcessorTest.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.processor; +package com.tencent.supersonic.chat.server.processor; import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -8,12 +8,11 @@ import com.tencent.supersonic.chat.api.pojo.SchemaElement; import com.tencent.supersonic.chat.api.pojo.SchemaElementType; import com.tencent.supersonic.chat.api.pojo.SemanticParseInfo; import com.tencent.supersonic.chat.api.pojo.SemanticSchema; -import com.tencent.supersonic.chat.processor.parse.MetricCheckProcessor; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - +import com.tencent.supersonic.chat.server.processor.parse.MetricCheckProcessor; import java.util.List; import java.util.Set; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; class MetricCheckProcessorTest { diff --git a/chat/core/src/test/java/com/tencent/supersonic/chat/test/ChatBizLauncher.java b/chat/server/src/test/java/com/tencent/supersonic/chat/server/test/ChatBizLauncher.java similarity index 91% rename from chat/core/src/test/java/com/tencent/supersonic/chat/test/ChatBizLauncher.java rename to chat/server/src/test/java/com/tencent/supersonic/chat/server/test/ChatBizLauncher.java index fc996b200..146080b3d 100644 --- a/chat/core/src/test/java/com/tencent/supersonic/chat/test/ChatBizLauncher.java +++ b/chat/server/src/test/java/com/tencent/supersonic/chat/server/test/ChatBizLauncher.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.test; +package com.tencent.supersonic.chat.server.test; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; diff --git a/chat/server/src/test/java/com/tencent/supersonic/chat/server/test/context/ContextTest.java b/chat/server/src/test/java/com/tencent/supersonic/chat/server/test/context/ContextTest.java new file mode 100644 index 000000000..9d7315008 --- /dev/null +++ b/chat/server/src/test/java/com/tencent/supersonic/chat/server/test/context/ContextTest.java @@ -0,0 +1,35 @@ + +package com.tencent.supersonic.chat.server.test.context; + +import com.tencent.supersonic.chat.core.knowledge.semantic.RemoteSemanticInterpreter; +import com.tencent.supersonic.chat.core.utils.ComponentFactory; +import com.tencent.supersonic.chat.server.persistence.mapper.ChatContextMapper; +import com.tencent.supersonic.chat.server.persistence.repository.impl.ChatContextRepositoryImpl; +import com.tencent.supersonic.chat.server.service.QueryService; +import com.tencent.supersonic.chat.server.test.ChatBizLauncher; +import com.tencent.supersonic.headless.server.service.DimensionService; +import com.tencent.supersonic.headless.server.service.MetricService; +import com.tencent.supersonic.headless.server.service.ModelService; +import org.junit.runner.RunWith; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.test.context.junit4.SpringRunner; +import org.springframework.web.client.RestTemplate; + +@MockBean(ChatContextRepositoryImpl.class) +@MockBean(QueryService.class) +@MockBean(DimensionService.class) +@MockBean(MetricService.class) +@MockBean(ModelService.class) +@MockBean(ChatContextMapper.class) +@MockBean(RestTemplate.class) +@MockBean(RemoteSemanticInterpreter.class) +@MockBean(ComponentFactory.class) +@RunWith(SpringRunner.class) +@SpringBootTest(classes = ChatBizLauncher.class) +public class ContextTest { + + protected final Logger logger = LoggerFactory.getLogger(ContextTest.class); +} \ No newline at end of file diff --git a/chat/core/src/test/java/com/tencent/supersonic/chat/test/context/MockBeansConfiguration.java b/chat/server/src/test/java/com/tencent/supersonic/chat/server/test/context/MockBeansConfiguration.java similarity index 88% rename from chat/core/src/test/java/com/tencent/supersonic/chat/test/context/MockBeansConfiguration.java rename to chat/server/src/test/java/com/tencent/supersonic/chat/server/test/context/MockBeansConfiguration.java index cd26389d7..c31c5dd52 100644 --- a/chat/core/src/test/java/com/tencent/supersonic/chat/test/context/MockBeansConfiguration.java +++ b/chat/server/src/test/java/com/tencent/supersonic/chat/server/test/context/MockBeansConfiguration.java @@ -1,15 +1,19 @@ -package com.tencent.supersonic.chat.test.context; +package com.tencent.supersonic.chat.server.test.context; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.Mockito.when; -import com.tencent.supersonic.chat.api.pojo.ChatContext; import com.tencent.supersonic.chat.api.pojo.response.ChatConfigResp; -import com.tencent.supersonic.chat.config.DefaultMetric; -import com.tencent.supersonic.chat.config.DefaultMetricInfo; -import com.tencent.supersonic.chat.config.EntityInternalDetail; -import com.tencent.supersonic.chat.persistence.mapper.ChatContextMapper; -import com.tencent.supersonic.chat.persistence.repository.impl.ChatContextRepositoryImpl; -import com.tencent.supersonic.chat.service.ChatService; -import com.tencent.supersonic.chat.service.QueryService; -import com.tencent.supersonic.chat.service.impl.ConfigServiceImpl; +import com.tencent.supersonic.chat.core.config.DefaultMetric; +import com.tencent.supersonic.chat.core.config.DefaultMetricInfo; +import com.tencent.supersonic.chat.core.config.EntityInternalDetail; +import com.tencent.supersonic.chat.core.pojo.ChatContext; +import com.tencent.supersonic.chat.server.persistence.mapper.ChatContextMapper; +import com.tencent.supersonic.chat.server.persistence.repository.impl.ChatContextRepositoryImpl; +import com.tencent.supersonic.chat.server.service.ChatService; +import com.tencent.supersonic.chat.server.service.QueryService; +import com.tencent.supersonic.chat.server.service.impl.ConfigServiceImpl; import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.headless.api.response.DimSchemaResp; import com.tencent.supersonic.headless.api.response.DimensionResp; @@ -21,19 +25,14 @@ import com.tencent.supersonic.headless.server.pojo.MetaFilter; import com.tencent.supersonic.headless.server.service.DimensionService; import com.tencent.supersonic.headless.server.service.MetricService; import com.tencent.supersonic.headless.server.service.ModelService; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import org.mockito.Mockito; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.client.RestTemplate; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.Mockito.when; - @Configuration public class MockBeansConfiguration { diff --git a/chat/core/src/test/java/com/tencent/supersonic/chat/test/context/SemanticParseObjectHelper.java b/chat/server/src/test/java/com/tencent/supersonic/chat/server/test/context/SemanticParseObjectHelper.java similarity index 98% rename from chat/core/src/test/java/com/tencent/supersonic/chat/test/context/SemanticParseObjectHelper.java rename to chat/server/src/test/java/com/tencent/supersonic/chat/server/test/context/SemanticParseObjectHelper.java index 5b18d3ea7..0a23b439a 100644 --- a/chat/core/src/test/java/com/tencent/supersonic/chat/test/context/SemanticParseObjectHelper.java +++ b/chat/server/src/test/java/com/tencent/supersonic/chat/server/test/context/SemanticParseObjectHelper.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.test.context; +package com.tencent.supersonic.chat.server.test.context; import com.google.gson.Gson; import com.tencent.supersonic.chat.api.pojo.SchemaElement; diff --git a/chat/core/src/test/java/com/tencent/supersonic/chat/utils/QueryReqBuilderTest.java b/chat/server/src/test/java/com/tencent/supersonic/chat/server/utils/QueryReqBuilderTest.java similarity index 98% rename from chat/core/src/test/java/com/tencent/supersonic/chat/utils/QueryReqBuilderTest.java rename to chat/server/src/test/java/com/tencent/supersonic/chat/server/utils/QueryReqBuilderTest.java index 990860788..654f9e4a0 100644 --- a/chat/core/src/test/java/com/tencent/supersonic/chat/utils/QueryReqBuilderTest.java +++ b/chat/server/src/test/java/com/tencent/supersonic/chat/server/utils/QueryReqBuilderTest.java @@ -1,4 +1,4 @@ -package com.tencent.supersonic.chat.utils; +package com.tencent.supersonic.chat.server.utils; import com.tencent.supersonic.common.pojo.Aggregator; diff --git a/common/src/main/java/com/tencent/supersonic/common/config/EmbeddingConfig.java b/common/src/main/java/com/tencent/supersonic/common/config/EmbeddingConfig.java index a41afe690..b28d2931d 100644 --- a/common/src/main/java/com/tencent/supersonic/common/config/EmbeddingConfig.java +++ b/common/src/main/java/com/tencent/supersonic/common/config/EmbeddingConfig.java @@ -17,6 +17,9 @@ public class EmbeddingConfig { @Value("${embedding.preset.collection:preset_query_collection}") private String presetCollection; + @Value("${embedding.meta.collection:meta_collection}") + private String metaCollectionName; + @Value("${embedding.nResult:1}") private int nResult; @@ -34,4 +37,5 @@ public class EmbeddingConfig { @Value("${inMemoryEmbeddingStore.persistent.path:/tmp}") private String embeddingStorePersistentPath; + } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/listener/MetaEmbeddingListener.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/listener/MetaEmbeddingListener.java index 0bf7db3ef..9ef187d53 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/listener/MetaEmbeddingListener.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/listener/MetaEmbeddingListener.java @@ -1,28 +1,30 @@ package com.tencent.supersonic.headless.server.listener; import com.alibaba.fastjson.JSONObject; +import com.tencent.supersonic.common.config.EmbeddingConfig; import com.tencent.supersonic.common.pojo.DataEvent; import com.tencent.supersonic.common.pojo.enums.DictWordType; import com.tencent.supersonic.common.pojo.enums.EventType; import com.tencent.supersonic.common.util.ComponentFactory; import com.tencent.supersonic.common.util.embedding.EmbeddingQuery; import com.tencent.supersonic.common.util.embedding.S2EmbeddingStore; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.ApplicationListener; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - @Component @Slf4j public class MetaEmbeddingListener implements ApplicationListener { - public static final String COLLECTION_NAME = "meta_collection"; + @Autowired + private EmbeddingConfig embeddingConfig; private S2EmbeddingStore s2EmbeddingStore = ComponentFactory.getS2EmbeddingStore(); @@ -55,14 +57,14 @@ public class MetaEmbeddingListener implements ApplicationListener { } catch (InterruptedException e) { log.error("", e); } - s2EmbeddingStore.addCollection(COLLECTION_NAME); + s2EmbeddingStore.addCollection(embeddingConfig.getMetaCollectionName()); if (event.getEventType().equals(EventType.ADD)) { - s2EmbeddingStore.addQuery(COLLECTION_NAME, embeddingQueries); + s2EmbeddingStore.addQuery(embeddingConfig.getMetaCollectionName(), embeddingQueries); } else if (event.getEventType().equals(EventType.DELETE)) { - s2EmbeddingStore.deleteQuery(COLLECTION_NAME, embeddingQueries); + s2EmbeddingStore.deleteQuery(embeddingConfig.getMetaCollectionName(), embeddingQueries); } else if (event.getEventType().equals(EventType.UPDATE)) { - s2EmbeddingStore.deleteQuery(COLLECTION_NAME, embeddingQueries); - s2EmbeddingStore.addQuery(COLLECTION_NAME, embeddingQueries); + s2EmbeddingStore.deleteQuery(embeddingConfig.getMetaCollectionName(), embeddingQueries); + s2EmbeddingStore.addQuery(embeddingConfig.getMetaCollectionName(), embeddingQueries); } } diff --git a/headless/server/src/main/resources/mapper/DatabaseDOMapper.xml b/headless/server/src/main/resources/mapper/DatabaseDOMapper.xml index d170e0a60..e7d4deda5 100644 --- a/headless/server/src/main/resources/mapper/DatabaseDOMapper.xml +++ b/headless/server/src/main/resources/mapper/DatabaseDOMapper.xml @@ -47,7 +47,7 @@ - id, name, description, version, type, created_at, created_by, updated_at, updated_by, + id, name, description, version, type, created_at, created_by, updated_at, updated_by, admin, viewer @@ -87,7 +87,7 @@