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

aradzinski pushed a commit to branch NLPCRAFT-472
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git


The following commit(s) were added to refs/heads/NLPCRAFT-472 by this push:
     new 6158427  CR WIP
6158427 is described below

commit 6158427b46405644e7e20cae2c9137523402ace2
Author: Aaron Radzinski <[email protected]>
AuthorDate: Thu Jan 13 13:07:16 2022 -0800

    CR WIP
---
 .../scala/org/apache/nlpcraft/NCModelPipeline.java |  5 ++--
 .../apache/nlpcraft/NCModelPipelineBuilder.java    | 32 +++++---------------
 ...CVariantValidator.java => NCVariantFilter.java} |  4 +--
 .../internal/impl/NCModelPipelineProcessor.scala   | 34 ++++++++++------------
 .../nlpcraft/internal/impl/NCSentenceHelper.java   |  6 +++-
 .../apache/nlpcraft/nlp/util/NCTestPipeline.scala  | 17 ++++++-----
 .../org/apache/nlpcraft/nlp/util/NCTestUtils.scala |  1 +
 7 files changed, 43 insertions(+), 56 deletions(-)

diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelPipeline.java 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelPipeline.java
index 1e7ecb7..cdd0d05 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelPipeline.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelPipeline.java
@@ -19,6 +19,7 @@ package org.apache.nlpcraft;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.Optional;
 
 /**
  *
@@ -72,7 +73,7 @@ public interface NCModelPipeline {
      *
      * @return
      */
-    default List<NCVariantValidator> getVariantValidators() {
-        return Collections.emptyList();
+    default Optional<NCVariantFilter> getVariantFilter() {
+        return Optional.empty();
     }
 }
\ No newline at end of file
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelPipelineBuilder.java 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelPipelineBuilder.java
index c363741..1d4d977 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelPipelineBuilder.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModelPipelineBuilder.java
@@ -17,10 +17,7 @@
 
 package org.apache.nlpcraft;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 
 /**
  *
@@ -32,7 +29,7 @@ public class NCModelPipelineBuilder {
     private final List<NCEntityParser> entParsers = new ArrayList<>();
     private final List<NCTokenValidator> tokVals = new ArrayList<>();
     private final List<NCEntityValidator> entVals = new ArrayList<>();
-    private final List<NCVariantValidator> varVals = new ArrayList<>();
+    private Optional<NCVariantFilter> varFilter = Optional.empty();
 
     /**
      *
@@ -186,26 +183,11 @@ public class NCModelPipelineBuilder {
     }
 
     /**
-     * @param varVals
+     * @param varFilter
      * @return This instance for call chaining.
      */
-    public NCModelPipelineBuilder 
withVariantValidators(List<NCVariantValidator> varVals) {
-        Objects.requireNonNull(varVals, "List of variant validators cannot be 
null.");
-        varVals.forEach(p -> Objects.requireNonNull(p, "Variant validators 
cannot be null."));
-
-        this.varVals.addAll(varVals);
-
-        return this;
-    }
-
-    /**
-     * @param varVal
-     * @return This instance for call chaining.
-     */
-    public NCModelPipelineBuilder withVariantValidator(NCVariantValidator 
varVal) {
-        Objects.requireNonNull(varVal, "Variant validator cannot be null.");
-
-        this.varVals.add(varVal);
+    public NCModelPipelineBuilder withVariantFilter(NCVariantFilter varFilter) 
{
+        this.varFilter = Optional.of(varFilter);
 
         return this;
     }
@@ -233,8 +215,8 @@ public class NCModelPipelineBuilder {
             @Override public List<NCEntityValidator> getEntityValidators() {
                 return entVals;
             }
-            @Override public List<NCVariantValidator> getVariantValidators() {
-                return varVals;
+            @Override public Optional<NCVariantFilter> getVariantFilter() {
+                return varFilter;
             }
         };
     }
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCVariantValidator.java 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCVariantFilter.java
similarity index 86%
rename from nlpcraft/src/main/scala/org/apache/nlpcraft/NCVariantValidator.java
rename to nlpcraft/src/main/scala/org/apache/nlpcraft/NCVariantFilter.java
index 0252faf..35fabac 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCVariantValidator.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCVariantFilter.java
@@ -22,12 +22,12 @@ import java.util.List;
 /**
  *
  */
-public interface NCVariantValidator extends NCLifecycle {
+public interface NCVariantFilter extends NCLifecycle {
     /**
      * 
      * @param req
      * @param cfg
      * @param vars
      */
-    List<NCVariant> validateAndFilter(NCRequest req, NCModelConfig cfg, 
List<NCVariant> vars);
+    List<NCVariant> filter(NCRequest req, NCModelConfig cfg, List<NCVariant> 
vars);
 }
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineProcessor.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineProcessor.scala
index b3b730b..41fdf01 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineProcessor.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCModelPipelineProcessor.scala
@@ -27,6 +27,7 @@ import java.util.concurrent.*
 import java.util.concurrent.atomic.*
 import java.util.{ArrayList, UUID, List as JList, Map as JMap}
 import scala.collection.immutable
+import scala.jdk.OptionConverters.*
 import scala.concurrent.ExecutionContext
 import scala.jdk.CollectionConverters.*
 
@@ -57,7 +58,7 @@ class NCModelPipelineProcessor(mdl: NCModel) extends 
LazyLogging:
     private val entParsers = nvl(pipeline.getEntityParsers)
     private val tokVals = nvl(pipeline.getTokenValidators)
     private val entVals = nvl(pipeline.getEntityValidators)
-    private val varVals = nvl(pipeline.getVariantValidators)
+    private val varFilter = pipeline.getVariantFilter.toScala
 
     /**
       *
@@ -95,7 +96,7 @@ class NCModelPipelineProcessor(mdl: NCModel) extends 
LazyLogging:
           * @param ents
           * @return
           */
-        def variant(ents: Seq[NCEntity]): NCVariant =
+        def newVariant(ents: Seq[NCEntity]): NCVariant =
             new NCVariant:
                 override val getEntities: JList[NCEntity] = ents.asJava
 
@@ -114,6 +115,7 @@ class NCModelPipelineProcessor(mdl: NCModel) extends 
LazyLogging:
                 check()
                 e.enrich(req, cfg, toks)
 
+        // NOTE: we run validators regardless of whether token list is empty.
         for (v <- tokVals)
             check()
             v.validate(req, cfg, toks)
@@ -129,6 +131,7 @@ class NCModelPipelineProcessor(mdl: NCModel) extends 
LazyLogging:
                 check()
                 e.enrich(req, cfg, entsList)
 
+        // NOTE: we run validators regardless of whether entity list is empty.
         for (v <- entVals)
             check()
             v.validate(req, cfg, entsList)
@@ -146,15 +149,15 @@ class NCModelPipelineProcessor(mdl: NCModel) extends 
LazyLogging:
             if overlapEnts.nonEmpty then
                 
NCSentenceHelper.findCombinations(overlapEnts.map(_.asJava).asJava, pool)
                     .asScala.map(_.asScala).map(delComb =>
-                    val delSet = delComb.toSet
-                    variant(entities.filter(!delSet.contains(_)))
-                ).asJava
+                        val delSet = delComb.toSet
+                        newVariant(entities.filter(!delSet.contains(_)))
+                    ).asJava
             else
-                Seq(variant(entities)).asJava
+                Seq(newVariant(entities)).asJava
 
-        for (v <- varVals)
+        if varFilter.isDefined then
             check()
-            variants = v.validateAndFilter(req, cfg, variants)
+            variants = varFilter.get.filter(req, cfg, variants)
 
         VariantsHolder(req, variants.asScala.toSeq, checkCancel)
 
@@ -177,19 +180,14 @@ class NCModelPipelineProcessor(mdl: NCModel) extends 
LazyLogging:
       * @param data
       * @param usrId
       * @return
-      * @throws NCRejection
-      * @throws NCCuration
-      * @throws NCException
+      * @throws NCRejection TODO
+      * @throws NCCuration TODO
+      * @throws NCException TODO
       */
     def ask(txt: String, data: JMap[String, AnyRef], usrId: String): 
CompletableFuture[NCResult] =
         val fut = new CompletableFuture[NCResult]
-
-        // TODO: error text.
-        def check = () =>
-            if fut.isCancelled then
-                val txt = "Execution interrupted."
-                logger.warn(txt)
-                throw new NCException(txt)
+        val check = () => if fut.isCancelled then
+            E(s"Asynchronous ask is interrupted [txt=$txt, usrId=$usrId]")
 
         fut.completeAsync(() => matchIntent(prepVariants(txt, data, usrId, 
Option(check))))
 
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCSentenceHelper.java
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCSentenceHelper.java
index 9ae59c4..44ce0b2 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCSentenceHelper.java
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/internal/impl/NCSentenceHelper.java
@@ -28,8 +28,12 @@ import java.util.concurrent.RecursiveTask;
 
 import static java.util.stream.Collectors.toList;
 
+// It is not converted to scala because scala and
+// java long values implicit conversion performance problems.
+// ==========================================================
+
 /**
- * It is not converted to scala because scala and java long values implicit 
conversion performance problems.
+ *
  */
 class NCSentenceHelper extends RecursiveTask<List<Long>> {
     private static final long THRESHOLD = (long)Math.pow(2, 20);
diff --git 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/util/NCTestPipeline.scala 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/util/NCTestPipeline.scala
index 9ddf364..410ff98 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/util/NCTestPipeline.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/util/NCTestPipeline.scala
@@ -21,7 +21,7 @@ import 
org.apache.nlpcraft.nlp.token.parser.opennlp.NCOpenNlpTokenParser
 import org.apache.nlpcraft.nlp.util.NCTestPipeline.*
 import org.apache.nlpcraft.*
 
-import java.util.{Optional, ArrayList as JAList, List as JList}
+import java.util.{Optional, ArrayList as JList}
 
 /**
   *
@@ -31,12 +31,12 @@ case class NCTestPipeline(tokParser: NCTokenParser) extends 
NCPropertyMapAdapter
     require(tokParser != null)
 
     override val getTokenParser: NCTokenParser = tokParser
-    override val getTokenEnrichers = new JAList[NCTokenEnricher]()
-    override val getEntityEnrichers = new JAList[NCEntityEnricher]()
-    override val getEntityParsers = new JAList[NCEntityParser]()
-    override val getTokenValidators = new JAList[NCTokenValidator]()
-    override val getEntityValidators = new JAList[NCEntityValidator]()
-    override val getVariantValidators = new JAList[NCVariantValidator]()
+    override val getTokenEnrichers = new JList[NCTokenEnricher]()
+    override val getEntityEnrichers = new JList[NCEntityEnricher]()
+    override val getEntityParsers = new JList[NCEntityParser]()
+    override val getTokenValidators = new JList[NCTokenValidator]()
+    override val getEntityValidators = new JList[NCEntityValidator]()
+    override val getVariantFilter: Optional[NCVariantFilter] = 
Optional.empty[NCVariantFilter]()
 
     override def clone(): NCTestPipeline =
         val copy = NCTestPipeline(this.tokParser)
@@ -46,7 +46,8 @@ case class NCTestPipeline(tokParser: NCTokenParser) extends 
NCPropertyMapAdapter
         copy.getEntityParsers.addAll(this.getEntityParsers)
         copy.getTokenValidators.addAll(this.getTokenValidators)
         copy.getEntityValidators.addAll(this.getEntityValidators)
-        copy.getVariantValidators.addAll(this.getVariantValidators)
+
+        // TODO: variant filter?
 
         copy
 
diff --git 
a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/util/NCTestUtils.scala 
b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/util/NCTestUtils.scala
index d3a2f95..f95e11a 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/util/NCTestUtils.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/nlp/util/NCTestUtils.scala
@@ -24,6 +24,7 @@ import java.util
 import java.util.List as JList
 import scala.jdk.CollectionConverters.*
 import scala.jdk.OptionConverters.RichOptional
+
 /**
   *
   */

Reply via email to