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

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


The following commit(s) were added to refs/heads/NLPCRAFT-206 by this push:
     new a61d003  WIP.
a61d003 is described below

commit a61d00393ddd0a2923ad1b376cbd7ac57cfee34a
Author: Aaron Radzinski <[email protected]>
AuthorDate: Wed Mar 3 21:16:31 2021 -0800

    WIP.
---
 .../org/apache/nlpcraft/model/NCConversation.java  |  6 ++---
 .../nlpcraft/model/NCTokenPredicateContext.java    |  3 ++-
 .../intent/impl/ver2/NCIntentDslCompiler.scala     | 28 ++++++++++++++++++++--
 .../probe/mgrs/deploy/NCDeployManager.scala        | 14 +++++------
 .../probe/mgrs/nlp/NCProbeEnrichmentManager.scala  |  2 +-
 5 files changed, 39 insertions(+), 14 deletions(-)

diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCConversation.java 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCConversation.java
index 6352dfa..3e8f07b 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCConversation.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCConversation.java
@@ -54,12 +54,12 @@ public interface NCConversation extends NCMetadata {
     List<NCToken> getTokens();
 
     /**
-     * Gets IDs for the previously matched intents sorted from oldest to 
newest for the current
+     * Gets the chronologically ordered list of previously matched intents 
sorted from oldest to newest for the current
      * user and data model.
      *
-     * @return IDs for the previously matched intents.
+     * @return List of chronologically ordered previously matched intents.
      */
-    List<String> getDialogFlow();
+    List<NCDialogFlowItem> getDialogFlow();
 
     /**
      * Removes all tokens satisfying given predicate from the conversation STM.
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCTokenPredicateContext.java
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCTokenPredicateContext.java
index 5888f07..1448800 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCTokenPredicateContext.java
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCTokenPredicateContext.java
@@ -20,7 +20,8 @@ package org.apache.nlpcraft.model;
 import java.util.Optional;
 
 /**
- * Context passed into custom user-defined token predicate. Token predicates 
can be used in intent and synonym DSL.
+ * Context passed into custom user-defined token predicate. Custom token 
predicates can be used in
+ * intent and synonym DSL.
  * <p>
  * Read full documentation in <a target=_ 
href="https://nlpcraft.apache.org/intent-matching.html";>Intent Matching</a> 
section and review
  * <a target=_ 
href="https://github.com/apache/incubator-nlpcraft/tree/master/nlpcraft/src/main/scala/org/apache/nlpcraft/examples/";>examples</a>.
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/ver2/NCIntentDslCompiler.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/ver2/NCIntentDslCompiler.scala
index 75a10d9..3cdd22d 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/ver2/NCIntentDslCompiler.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/impl/ver2/NCIntentDslCompiler.scala
@@ -218,9 +218,31 @@ object NCIntentDslCompiler extends LazyLogging {
 
                         try {
                             val obj = if (clsName == null) mdl else 
U.mkObject(clsName)
-                            val mtd = 
Thread.currentThread().getContextClassLoader.loadClass(mdlCls).getMethod(mtdName,
 classOf[NCTokenPredicateContext])
+                            val mtd = 
Thread.currentThread().getContextClassLoader.loadClass(mdlCls)
+                                .getMethod(mtdName, 
classOf[NCTokenPredicateContext])
 
-                            val res = mtd.invoke(obj, 
javaCtx).asInstanceOf[NCTokenPredicateResult]
+                            var flag = mtd.canAccess(mdl)
+
+                            val res = try {
+                                if (!flag) {
+                                    mtd.setAccessible(true)
+
+                                    flag = true
+                                }
+                                else
+                                    flag = false
+
+                                mtd.invoke(obj, 
javaCtx).asInstanceOf[NCTokenPredicateResult]
+                            }
+                            finally {
+                                if (flag)
+                                    try
+                                        mtd.setAccessible(false)
+                                    catch {
+                                        case e: SecurityException ⇒
+                                            throw new NCE(s"Access or security 
error in custom intent term: $mdlCls.$mtdName", e)
+                                    }
+                            }
 
                             (res.getResult, res.wasTokenUsed())
                         }
@@ -238,8 +260,10 @@ object NCIntentDslCompiler extends LazyLogging {
                     (tok: NCToken, termCtx: NCDslTermContext) ⇒ {
                         val stack = new mutable.ArrayStack[NCDslTermRetVal]()
 
+                        // Execute all instructions.
                         instrs.foreach(_(tok, stack, termCtx))
 
+                        // Pop final result from stack.
                         val x = stack.pop()
 
                         if (!isBoolean(x.retVal))
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
index a68e305..6e17620 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/deploy/NCDeployManager.scala
@@ -1222,14 +1222,14 @@ object NCDeployManager extends NCService with 
DecorateAsScala {
                 case e: NCRejection ⇒ throw e
                 case e: NCE ⇒ throw e
                 case e: Throwable ⇒
-                    throw new NCE(s"Invocation error [" +
+                    throw new NCE(s"Intent callback invocation error [" +
                         s"mdlId=$mdlId, " +
                         s"callback=${method2Str(mtd)}" +
                     s"]", e)
             }
 
             case e: Throwable ⇒
-                throw new NCE(s"Unexpected invocation error [" +
+                throw new NCE(s"Unexpected intent callback invocation error [" 
+
                     s"mdlId=$mdlId, " +
                     s"callback=${method2Str(mtd)}" +
                 s"]", e)
@@ -1240,7 +1240,7 @@ object NCDeployManager extends NCService with 
DecorateAsScala {
                     mtd.setAccessible(false)
                 catch {
                     case e: SecurityException ⇒
-                        throw new NCE(s"Access or security error [" +
+                        throw new NCE(s"Access or security error in intent 
callback [" +
                             s"mdlId=$mdlId, " +
                             s"callback=${method2Str(mtd)}" +
                         s"]", e)
@@ -1385,10 +1385,10 @@ object NCDeployManager extends NCService with 
DecorateAsScala {
                                 if (lowBounds.nonEmpty || upBounds.size != 1 
|| upBounds(0) != CLS_TOKEN)
                                     throw new NCE(
                                         s"Unexpected Kotlin generic type for 
@NCIntentTerm annotated argument [" +
-                                        s"mdlId=$mdlId, " +
-                                        s"type=${wc2Str(wildcardType)}, " +
-                                        s"arg=${mkArg()}" +
-                                    s"]")
+                                            s"mdlId=$mdlId, " +
+                                            s"type=${wc2Str(wildcardType)}, " +
+                                            s"arg=${mkArg()}" +
+                                        s"]")
                             case _ ⇒
                                 throw new NCE(s"Unexpected generic type for 
@NCIntentTerm annotated argument [" +
                                     s"mdlId=$mdlId, " +
diff --git 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
index b272ac5..2a70932 100644
--- 
a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
+++ 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/nlp/NCProbeEnrichmentManager.scala
@@ -586,7 +586,7 @@ object NCProbeEnrichmentManager extends NCService with 
NCOpenCensusModelStats {
 
             override lazy val getConversation: NCConversation = new 
NCConversation {
                 override def getTokens: util.List[NCToken] = conv.getTokens()
-                override def getDialogFlow: util.List[String] = 
NCDialogFlowManager.getDialogFlow(usrId, mdlId, span).asJava
+                override def getDialogFlow: util.List[NCDialogFlowItem] = 
NCDialogFlowManager.getItemFlow(usrId, mdlId, span).asJava
                 override def clearStm(filter: Predicate[NCToken]): Unit = 
conv.clearTokens(filter)
                 override def clearDialog(filter: Predicate[String]): Unit = 
NCDialogFlowManager.clear(usrId, mdlId, span)
                 override def getMetadata = conv.getUserData

Reply via email to