You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nlpcraft.apache.org by se...@apache.org on 2022/02/18 09:37:27 UTC

[incubator-nlpcraft] 01/02: WIP.

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 <sk...@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")
     /**
       *
       */