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