This is an automated email from the ASF dual-hosted git repository. sergeykamov pushed a commit to branch NLPCRAFT-477 in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
commit 24a831fdc07336760b0684531c8e3f86bf5073b2 Author: Sergey Kamov <skhdlem...@gmail.com> AuthorDate: Fri Feb 18 12:13:11 2022 +0300 WIP. --- .../nlpcraft/internal/impl/NCModelClientImpl.scala | 44 ++++++++++++---------- .../internal/impl/NCModelPipelineManager.scala | 11 +++--- 2 files changed, 30 insertions(+), 25 deletions(-) diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelClientImpl.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelClientImpl.scala index 2666a8b..6990e5a 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelClientImpl.scala +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelClientImpl.scala @@ -56,10 +56,12 @@ class NCModelClientImpl(mdl: NCModel) extends LazyLogging: verify() private val intents = NCModelScanner.scan(mdl) - private val pipelineMgr = new NCModelPipelineManager(mdl.getConfig, mdl.getPipeline) private val convMgr = NCConversationManager(mdl.getConfig) - private val dialogMgr = NCDialogFlowManager(mdl.getConfig) - private val intentsMgr = NCIntentsManager(dialogMgr, intents.map(p => p.intent -> p.function).toMap) + private val dlgMgr = NCDialogFlowManager(mdl.getConfig) + private val plMgr = new NCModelPipelineManager(mdl.getConfig, mdl.getPipeline) + private val intentsMgr = NCIntentsManager(dlgMgr, intents.map(p => p.intent -> p.function).toMap) + + init() /** * @@ -82,10 +84,19 @@ class NCModelClientImpl(mdl: NCModel) extends LazyLogging: /** * + */ + private def init(): Unit = + convMgr.start() + dlgMgr.start() + plMgr.start() + + + /** + * * @param data * @return */ - private def ask0(data: NCPipelineVariants): NCResult = + private def ask0(data: NCPipelineData): NCResult = val userId = data.request.getUserId val convHldr = convMgr.getConversation(userId) val allEnts = data.variants.flatMap(_.getEntities.asScala) @@ -94,9 +105,9 @@ class NCModelClientImpl(mdl: NCModel) extends LazyLogging: new NCConversation: override val getSession: NCPropertyMap = convHldr.getUserData override val getStm: JList[NCEntity] = convHldr.getEntities - override val getDialogFlow: JList[NCDialogFlowItem] = dialogMgr.getDialogFlow(userId).asJava + override val getDialogFlow: JList[NCDialogFlowItem] = dlgMgr.getDialogFlow(userId).asJava override def clearStm(filter: Predicate[NCEntity]): Unit = convHldr.clearEntities(filter) - override def clearDialog(filter: Predicate[String]): Unit = dialogMgr.clearForPredicate(userId, (s: String) => filter.test(s)) + override def clearDialog(filter: Predicate[String]): Unit = dlgMgr.clearForPredicate(userId, (s: String) => filter.test(s)) val ctx: NCContext = new NCContext: @@ -118,10 +129,9 @@ class NCModelClientImpl(mdl: NCModel) extends LazyLogging: */ def ask(txt: String, data: JMap[String, AnyRef], usrId: String): CompletableFuture[NCResult] = val fut = new CompletableFuture[NCResult] - val check = () => if fut.isCancelled then - E(s"Asynchronous ask is interrupted [txt=$txt, usrId=$usrId]") + val check = () => if fut.isCancelled then E(s"Asynchronous ask is interrupted [txt=$txt, usrId=$usrId]") - fut.completeAsync(() => ask0(pipelineMgr.prepare(txt, data, usrId, Option(check)))) + fut.completeAsync(() => ask0(plMgr.prepare(txt, data, usrId, Option(check)))) /** * @@ -130,25 +140,21 @@ class NCModelClientImpl(mdl: NCModel) extends LazyLogging: * @param usrId * @return */ - def askSync(txt: String, data: JMap[String, AnyRef], usrId: String): NCResult = - ask0(pipelineMgr.prepare(txt, data, usrId)) + def askSync(txt: String, data: JMap[String, AnyRef], usrId: String): NCResult = ask0(plMgr.prepare(txt, data, usrId)) /** * * @param usrId */ - def clearConversation(usrId: String): Unit = convMgr.getConversation(usrId) + def clearConversation(usrId: String): Unit = convMgr.getConversation(usrId).clearEntities(_ => true) /** * * @param usrId */ - def clearDialog(usrId: String): Unit = dialogMgr.clear(usrId) + def clearDialog(usrId: String): Unit = dlgMgr.clear(usrId) - /** - * - */ def close(): Unit = - if pipelineMgr != null then pipelineMgr.close() - if convMgr != null then convMgr.close() - if dialogMgr != null then dialogMgr.close() + plMgr.close() + dlgMgr.close() + convMgr.close() diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineManager.scala index d2758c9..1a43827 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineManager.scala +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineManager.scala @@ -42,7 +42,7 @@ import scala.jdk.OptionConverters.* * @param tokens * @param checkCancel */ -case class NCPipelineVariants(request: NCRequest, variants: Seq[NCVariant], tokens: JList[NCToken], checkCancel: Option[() => Unit]) +case class NCPipelineData(request: NCRequest, variants: Seq[NCVariant], tokens: JList[NCToken], checkCancel: Option[() => Unit]) /** * @@ -62,9 +62,6 @@ class NCModelPipelineManager(cfg: NCModelConfig, pipeline: NCModelPipeline) exte private val allSrvs: Seq[NCLifecycle] = tokEnrichers ++ entEnrichers ++ entParsers ++ tokVals ++ entVals ++ varFilterOpt.toSeq - processServices(_.onStart(cfg), "started") - - /** * * @param act @@ -94,7 +91,7 @@ class NCModelPipelineManager(cfg: NCModelConfig, pipeline: NCModelPipeline) exte * @param checkCancel * @return */ - def prepare(txt: String, data: JMap[String, AnyRef], usrId: String, checkCancel: Option[() => Unit] = None): NCPipelineVariants = + def prepare(txt: String, data: JMap[String, AnyRef], usrId: String, checkCancel: Option[() => Unit] = None): NCPipelineData = require(txt != null && usrId != null) /** @@ -166,7 +163,9 @@ class NCModelPipelineManager(cfg: NCModelConfig, pipeline: NCModelPipeline) exte check() variants = varFilterOpt.get.filter(req, cfg, variants) - NCPipelineVariants(req, variants.asScala.toSeq, toks, checkCancel) + NCPipelineData(req, variants.asScala.toSeq, toks, checkCancel) + + def start(): Unit = processServices(_.onStart(cfg), "started") /** * */