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 2a83b64 WIP.
2a83b64 is described below
commit 2a83b64dfa0fe5ce24405be64b8e13879d181623
Author: Aaron Radzinski <[email protected]>
AuthorDate: Fri Feb 19 18:28:00 2021 -0800
WIP.
---
.../scala/org/apache/nlpcraft/common/package.scala | 1 +
.../scala/org/apache/nlpcraft/model/NCMetadata.java | 10 ++++++++++
.../apache/nlpcraft/model/NCTokenPredicateResult.java | 6 +++---
.../model/factories/basic/NCBasicModelFactory.java | 7 ++++++-
.../model/factories/spring/NCSpringModelFactory.java | 9 +++++++--
.../model/intent/impl/ver2/NCIntentDslCompiler.scala | 19 ++++++++++++++-----
.../probe/mgrs/nlp/NCProbeEnrichmentManager.scala | 2 +-
.../conversation/NCConversationTimeoutSpec.scala | 16 ++++++++--------
8 files changed, 50 insertions(+), 20 deletions(-)
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala
index 21df52a..8a54bca 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala
@@ -42,6 +42,7 @@ package object common {
final val MDL_META_ALL_GRP_IDS_KEY = "__NLPCRAFT_MDL_META_ALL_GRP_IDS"
final val MDL_META_ALL_ALIASES_KEY = "__NLPCRAFT_MDL_META_ALL_ALIASES"
final val TOK_META_ALIASES_KEY = "__NLPCRAFT_TOK_META_ALIASES"
+ final val MDL_META_MODEL_CLASS_KEY = "__NLPCRAFT_MDL_CLASS_NAME"
def G: String = ansiGreenFg
def R: String = ansiRedFg
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCMetadata.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCMetadata.java
index 2ca8a9f..6b0f319 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCMetadata.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCMetadata.java
@@ -28,6 +28,16 @@ import java.util.*;
*/
public interface NCMetadata {
/**
+ * Factory for creating metadata out of standard map.
+ *
+ * @param map Map to convert to metadata.
+ * @return Newly created metadata container.
+ */
+ static NCMetadata convert(Map<String, Object> map) {
+ return () -> map;
+ }
+
+ /**
* Gets mutable metadata.
*
* @return Metadata.
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCTokenPredicateResult.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCTokenPredicateResult.java
index a3356ef..04a7bbf 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCTokenPredicateResult.java
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/NCTokenPredicateResult.java
@@ -35,7 +35,7 @@ public class NCTokenPredicateResult {
* @param result Token predicate result.
* @param wasTokenUsed Whether or not a token was used by this predicate
(if {@link #getResult() result} is {@code true}).
*/
- NCTokenPredicateResult(boolean result, boolean wasTokenUsed) {
+ public NCTokenPredicateResult(boolean result, boolean wasTokenUsed) {
this.result = result;
this.wasTokenUsed = wasTokenUsed;
}
@@ -45,7 +45,7 @@ public class NCTokenPredicateResult {
*
* @return Predicate result.
*/
- boolean getResult() {
+ public boolean getResult() {
return result;
}
@@ -54,7 +54,7 @@ public class NCTokenPredicateResult {
*
* @return {@code true} if token was used by this predicate, {@code false}
otherwise.
*/
- boolean wasTokenUsed() {
+ public boolean wasTokenUsed() {
return wasTokenUsed;
}
}
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/factories/basic/NCBasicModelFactory.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/factories/basic/NCBasicModelFactory.java
index e9c9c72..6c06f4e 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/factories/basic/NCBasicModelFactory.java
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/factories/basic/NCBasicModelFactory.java
@@ -18,6 +18,7 @@
package org.apache.nlpcraft.model.factories.basic;
import org.apache.nlpcraft.common.*;
+import org.apache.nlpcraft.common.package$;
import org.apache.nlpcraft.model.*;
import java.lang.reflect.InvocationTargetException;
@@ -68,7 +69,11 @@ public class NCBasicModelFactory implements NCModelFactory {
@Override
public NCModel mkModel(Class<? extends NCModel> type) {
try {
- return type.getConstructor().newInstance();
+ NCModel mdl = type.getConstructor().newInstance();
+
+ mdl.getMetadata().put(package$.MODULE$.MDL_META_MODEL_CLASS_KEY(),
type.getCanonicalName());
+
+ return mdl;
}
catch (NoSuchMethodException e) {
throw new NCException(String.format("Model class does not have
no-arg constructor: %s", type.getCanonicalName()), e);
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/factories/spring/NCSpringModelFactory.java
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/factories/spring/NCSpringModelFactory.java
index 84648d7..6fa234c 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/model/factories/spring/NCSpringModelFactory.java
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/model/factories/spring/NCSpringModelFactory.java
@@ -18,6 +18,7 @@
package org.apache.nlpcraft.model.factories.spring;
import org.apache.nlpcraft.common.*;
+import org.apache.nlpcraft.common.package$;
import org.apache.nlpcraft.model.*;
import org.springframework.context.annotation.*;
import org.springframework.context.support.*;
@@ -115,8 +116,12 @@ public class NCSpringModelFactory implements
NCModelFactory {
public NCModel mkModel(Class<? extends NCModel> claxx) {
if (ctx == null)
throw new IllegalStateException(String.format("%s is not
initialized.", getClass().getSimpleName()));
-
- return ctx.getBean(claxx);
+
+ NCModel mdl = ctx.getBean(claxx);
+
+ mdl.getMetadata().put(package$.MODULE$.MDL_META_MODEL_CLASS_KEY(),
claxx.getCanonicalName());
+
+ return mdl;
}
@Override
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 b466e8f..459391b 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
@@ -23,7 +23,7 @@ import org.antlr.v4.runtime.tree.ParseTreeWalker
import org.apache.nlpcraft.common._
import org.apache.nlpcraft.model.intent.impl.antlr4.{NCIntentDslParser ⇒
Parser, _}
import org.apache.nlpcraft.model.intent.utils.ver2._
-import org.apache.nlpcraft.model.{NCMetadata, NCRequest, NCToken,
NCTokenPredicateContext}
+import org.apache.nlpcraft.model.{NCMetadata, NCRequest, NCToken,
NCTokenPredicateContext, NCTokenPredicateResult}
import java.lang.{IllegalArgumentException ⇒ IAE}
import java.util.Optional
@@ -138,16 +138,25 @@ object NCIntentDslCompiler extends LazyLogging {
override lazy val getToken: NCToken = tok
override lazy val getIntentMeta:
Optional[NCMetadata] =
if (termCtx.intentMeta != null)
- Optional.of(termCtx.intentMeta.asJava)
+
Optional.of(NCMetadata.convert(termCtx.intentMeta.asJava))
else
Optional.empty()
}
- val obj = if (termClsName == null) tok.getModel else
U.mkObject(termClsName)
+ val mdl = tok.getModel
+ val mdlCls = if (termClsName == null)
mdl.meta[String](MDL_META_MODEL_CLASS_KEY) else termClsName
- // TODO
+ try {
+ val obj = if (termClsName == null) mdl else
U.mkObject(termClsName)
+ val mtd =
Thread.currentThread().getContextClassLoader.loadClass(mdlCls).getMethod(termMtdName,
classOf[NCTokenPredicateContext])
- (true, true)
+ val res = mtd.invoke(obj,
javaCtx).asInstanceOf[NCTokenPredicateResult]
+
+ (res.getResult, res.wasTokenUsed())
+ }
+ catch {
+ case e: Exception ⇒ throw new IAE(s"Failed to
invoke custom DSL intent term: $mdlCls.$termMtdName", e)
+ }
}
}
else { // DSL-defined term.
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 85c0c1e..e00a74a 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
@@ -573,7 +573,7 @@ object NCProbeEnrichmentManager extends NCService with
NCOpenCensusModelStats {
override def getDialogFlow: util.List[String] =
NCDialogFlowManager.getDialogFlow(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 getUserData: util.Map[String, Object] =
conv.getUserData
+ override def getMetadata = conv.getUserData
}
override def isOwnerOf(tok: NCToken): Boolean =
allVars.contains(tok)
diff --git
a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/conversation/NCConversationTimeoutSpec.scala
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/conversation/NCConversationTimeoutSpec.scala
index 2826c34..680183e 100644
---
a/nlpcraft/src/test/scala/org/apache/nlpcraft/model/conversation/NCConversationTimeoutSpec.scala
+++
b/nlpcraft/src/test/scala/org/apache/nlpcraft/model/conversation/NCConversationTimeoutSpec.scala
@@ -53,26 +53,26 @@ class NCTimeoutSpecModel extends NCModel {
step match {
case 0 ⇒
- assertTrue(conv.getUserData.isEmpty)
+ assertTrue(conv.getMetadata.isEmpty)
assertTrue(conv.getDialogFlow.isEmpty)
- conv.getUserData.put("key", "value")
+ conv.getMetadata.put("key", "value")
- saveData = conv.getUserData
+ saveData = conv.getMetadata
case 1 ⇒
- assertFalse(conv.getUserData.isEmpty)
- assertEquals(saveData, conv.getUserData)
- assertEquals("value", conv.getUserData.getOrDefault("key",
"-"))
+ assertFalse(conv.getMetadata.isEmpty)
+ assertEquals(saveData, conv.getMetadata)
+ assertEquals("value", conv.getMetadata.getOrDefault("key",
"-"))
assertFalse(conv.getDialogFlow.isEmpty)
case 2 ⇒
- assertTrue(conv.getUserData.isEmpty)
+ assertTrue(conv.getMetadata.isEmpty)
assertTrue(saveData.isEmpty)
assertTrue(conv.getDialogFlow.isEmpty)
case 3 ⇒
- assertTrue(conv.getUserData.isEmpty)
+ assertTrue(conv.getMetadata.isEmpty)
assertFalse(conv.getDialogFlow.isEmpty)
case _ ⇒ require(false)