This is an automated email from the ASF dual-hosted git repository.

sergeykamov pushed a commit to branch master-ask-validate
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git

commit 3f0f3a755f3f91cc8eac2cf27090c2e46ed05cd8
Author: Sergey Kamov <skhdlem...@gmail.com>
AuthorDate: Mon Mar 28 14:28:35 2022 +0300

    Ask validation client method added.
---
 .../scala/org/apache/nlpcraft/NCModelClient.java   |  5 +++++
 .../nlpcraft/internal/impl/NCModelClientImpl.scala | 22 ++++++++++++++--------
 .../intent/matcher/NCIntentSolverManager.scala     | 10 ++++++----
 .../nlpcraft/internal/impl/NCModelClientSpec.scala |  6 ++++++
 4 files changed, 31 insertions(+), 12 deletions(-)

diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelClient.java 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelClient.java
index 54f023b..3924812 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelClient.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelClient.java
@@ -20,6 +20,7 @@ package org.apache.nlpcraft;
 import org.apache.nlpcraft.internal.impl.NCModelClientImpl;
 
 import java.util.Map;
+import java.util.List;
 import java.util.function.Predicate;
 
 /**
@@ -98,4 +99,8 @@ public class NCModelClient implements AutoCloseable {
     public void validateSamples() {
         impl.validateSamples();
     }
+
+    public List<List<NCEntity>> validateAsk(String txt, Map<String, Object> 
data, String usrId) {
+        return impl.validateAsk(txt, data, usrId);
+    }
 }
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 87b8983..06887a0 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
@@ -75,13 +75,7 @@ class NCModelClientImpl(mdl: NCModel) extends LazyLogging:
         dlgMgr.start()
         plMgr.start()
 
-     /*
-      * @param txt
-      * @param data
-      * @param usrId
-      * @return
-      */
-    def ask(txt: String, data: JMap[String, AnyRef], usrId: String): NCResult =
+    private def ask0(txt: String, data: JMap[String, AnyRef], usrId: String, 
isValidation: Boolean): NCResult =
         val plData = plMgr.prepare(txt, data, usrId)
 
         val userId = plData.request.getUserId
@@ -105,7 +99,16 @@ class NCModelClientImpl(mdl: NCModel) extends LazyLogging:
                 override val getVariants: util.Collection[NCVariant] = 
plData.variants.asJava
                 override val getTokens: JList[NCToken] = plData.tokens
 
-        intentsMgr.solve(mdl, ctx)
+        intentsMgr.solve(mdl, ctx, isValidation)
+
+
+     /*
+      * @param txt
+      * @param data
+      * @param usrId
+      * @return
+      */
+    def ask(txt: String, data: JMap[String, AnyRef], usrId: String): NCResult 
= ask0(txt, data, usrId, false)
 
     /**
       *
@@ -187,3 +190,6 @@ class NCModelClientImpl(mdl: NCModel) extends LazyLogging:
         plMgr.close()
         dlgMgr.close()
         convMgr.close()
+
+    def validateAsk(txt: String, data: JMap[String, AnyRef], usrId: String): 
JList[JList[NCEntity]] =
+        ask0(txt, data, usrId, 
true).getBody.asInstanceOf[JList[JList[NCEntity]]]
\ No newline at end of file
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/matcher/NCIntentSolverManager.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/matcher/NCIntentSolverManager.scala
index 74cacda..d08b711 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/matcher/NCIntentSolverManager.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/intent/matcher/NCIntentSolverManager.scala
@@ -622,9 +622,10 @@ class NCIntentSolverManager(dialog: NCDialogFlowManager, 
intents: Map[NCIDLInten
       *
       * @param mdl
       * @param ctx
+      * @param isValidation
       * @return
       */
-    private def solveIteration(mdl: NCModel, ctx: NCContext): 
Option[IterationResult] =
+    private def solveIteration(mdl: NCModel, ctx: NCContext, isValidation: 
Boolean): Option[IterationResult] =
         require(intents.nonEmpty)
 
         val req = ctx.getRequest
@@ -662,7 +663,7 @@ class NCIntentSolverManager(dialog: NCDialogFlowManager, 
intents: Map[NCIDLInten
             try
                 if mdl.onMatchedIntent(intentMatch) then
                     // This can throw NCIntentSkip exception.
-                    val cbRes = intentRes.fn(intentMatch)
+                    val cbRes = if isValidation then new 
NCResult(intentMatch.getIntentEntities, NCResultType.ASK_RESULT) else 
intentRes.fn(intentMatch)
                     // Store won intent match in the input.
                     if cbRes.getIntentId == null then
                         cbRes.setIntentId(intentRes.intentId)
@@ -685,9 +686,10 @@ class NCIntentSolverManager(dialog: NCDialogFlowManager, 
intents: Map[NCIDLInten
       *
       * @param mdl
       * @param ctx
+      * @param isValidation
       * @return
       */
-    def solve(mdl: NCModel, ctx: NCContext): NCResult =
+    def solve(mdl: NCModel, ctx: NCContext, isValidation: Boolean): NCResult =
         var res: NCResult = mdl.onContext(ctx)
 
         if res != null then
@@ -704,7 +706,7 @@ class NCIntentSolverManager(dialog: NCDialogFlowManager, 
intents: Map[NCIDLInten
 
             try
                 while (loopRes == null)
-                    solveIteration(mdl, ctx) match
+                    solveIteration(mdl, ctx, isValidation) match
                         case Some(iterRes) => loopRes = iterRes
                         case None => // No-op.
 
diff --git 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/impl/NCModelClientSpec.scala
 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/impl/NCModelClientSpec.scala
index 5123c84..72928aa 100644
--- 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/impl/NCModelClientSpec.scala
+++ 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/internal/impl/NCModelClientSpec.scala
@@ -27,6 +27,9 @@ import scala.jdk.CollectionConverters.*
 import scala.util.Using
 
 class NCModelClientSpec:
+    private def s(e: NCEntity): String =
+        s"Entity [id=${e.getId}, text=${e.mkText()}, 
properties={${e.keysSet().asScala.map(k => s"$k=${e.get(k)}")}}]"
+
     private def test0(mdl: NCTestModelAdapter): Unit =
         
mdl.getPipeline.getEntityParsers.add(NCTestUtils.mkENSemanticParser("models/lightswitch_model.yaml"))
 
@@ -37,6 +40,9 @@ class NCModelClientSpec:
             println(s"Body: ${res.getBody}")
 
             client.validateSamples()
+            val entities = client.validateAsk("Lights on at second floor 
kitchen", null, "userId")
+
+            println("Entities: \n" + entities.asScala.map(p => 
p.asScala.map(s).mkString(", ")).mkString("\n"))
         }
     /**
       *

Reply via email to