You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nlpcraft.apache.org by ar...@apache.org on 2021/08/09 06:54:44 UTC

[incubator-nlpcraft] branch NLPCRAFT-405 updated: Fixed NLPCRAFT-405

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

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


The following commit(s) were added to refs/heads/NLPCRAFT-405 by this push:
     new f980ebd  Fixed NLPCRAFT-405
f980ebd is described below

commit f980ebd8c66a2bfde798bef6191a00c641156b98
Author: Aaron Radzinski <ar...@datalingvo.com>
AuthorDate: Sun Aug 8 23:54:37 2021 -0700

    Fixed NLPCRAFT-405
---
 .../org/apache/nlpcraft/common/ansi/NCAnsi.scala   |  3 +-
 .../nlpcraft/common/ascii/NCAsciiTable.scala       |  4 +-
 .../scala/org/apache/nlpcraft/common/package.scala | 27 +++++++------
 .../org/apache/nlpcraft/common/util/NCUtils.scala  | 43 ++++++++++++++------
 .../nlpcraft/probe/mgrs/cmd/NCCommandManager.scala | 46 +++++++++++++++++-----
 5 files changed, 88 insertions(+), 35 deletions(-)

diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/ansi/NCAnsi.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/ansi/NCAnsi.scala
index 43d25da..826e7d7 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/ansi/NCAnsi.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/ansi/NCAnsi.scala
@@ -1462,7 +1462,6 @@ object NCAnsi extends NCAnsi {
     def ackStatus(): Unit =
         if (isEnabled)
             logger.info(
-                s"${U.bgRainbow4Bit("ANSI coloring")} ${U.fgRainbow4Bit("is enabled")}. " +
-                s"Use '-D${ansiCyanFg}NLPCRAFT_ANSI_COLOR_DISABLED$ansiReset=true' to disable it."
+                U.gradAnsi8BitBgLine("ANSI coloring is enabled. Use '-DNLPCRAFT_ANSI_COLOR_DISABLED=true' to disable it.", 130, 147)
             )
 }
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/ascii/NCAsciiTable.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/ascii/NCAsciiTable.scala
index a2d8336..5232ecd 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/ascii/NCAsciiTable.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/ascii/NCAsciiTable.scala
@@ -109,8 +109,8 @@ class NCAsciiTable {
     )
 
     // Table drawing symbols.
-    private val HDR_HOR = ansi256Fg(75, "=")
-    private val HDR_VER = ansi256Fg(75, "|")
+    private val HDR_HOR = ansi256Fg(105, "=")
+    private val HDR_VER = ansi256Fg(105, "|")
     private val HDR_CRS = ansi256Fg(99, "+")
     private val ROW_HOR = ansi256Fg(39, "-")
     private val ROW_VER = ansi256Fg(67, "|")
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 b2f1121..d222e5e 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/package.scala
@@ -43,27 +43,32 @@ package object common {
     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 M: String = ansiMagentaFg
-    def R: String = ansiRedFg
+    // Re-route to 8-bit colors.
+    def G: String = ansi256Fg(34)
+    def M: String = ansi256Fg(177)
+    def R: String = ansi256Fg(202)
+
     def C: String = ansiCyanFg
     def Y: String = ansiYellowFg
-    def W: String = ansiWhiteFg
+    def W: String = ansi256Fg(231)
     def B: String = ansiBlueFg
-    def BO: String = ansiBold
     def K: String = ansiBlackFg
-    def GB: String = ansiGreenBg
-    def MB: String = ansiMagentaBg
-    def RB: String = ansiRedBg
+
+    def GB: String = ansi256Bg(34)
+    def MB: String = ansi256Bg(177)
+    def RB: String = ansi256Bg(202)
     def CB: String = ansiCyanBg
     def YB: String = ansiYellowBg
     def WB: String = ansiWhiteBg
     def BB: String = ansiBlueBg
     def KB: String = ansiBlackBg
+
+    def BO: String = ansiBold
     def RST: String = ansiReset
-    def g(s: Any): String = s"${ansi256Fg(34)}${s.toString}$RST"
-    def m(s: Any): String = s"${ansi256Fg(177)}${s.toString}$RST"
-    def r(s: Any): String = s"${ansi256Fg(202)}${s.toString}$RST"
+
+    def g(s: Any): String = s"$G${s.toString}$RST"
+    def m(s: Any): String = s"$M${s.toString}$RST"
+    def r(s: Any): String = s"$R${s.toString}$RST"
     def c(s: Any): String = s"$C${s.toString}$RST"
     def y(s: Any): String = s"$Y${s.toString}$RST"
     def w(s: Any): String = s"$W${s.toString}$RST"
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
index e2a74a2..1fbde7e 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/util/NCUtils.scala
@@ -83,9 +83,9 @@ object NCUtils extends LazyLogging {
 
     private final val DISABLE_GA_PROP = "NLPCRAFT_DISABLE_GA"
 
-    private lazy val ANSI_FG_8BIT_COLORS = for (i <- 1 to 255) yield ansi256Fg(i)
+    private lazy val ANSI_FG_8BIT_COLORS = for (i <- 16 to 255) yield ansi256Fg(i)
 
-    private lazy val ANSI_BG_8BIT_COLORS = for (i <- 1 to 255) yield ansi256Bg(i)
+    private lazy val ANSI_BG_8BIT_COLORS = for (i <- 16 to 255) yield ansi256Bg(i)
 
     private lazy val ANSI_FG_4BIT_COLORS = Seq(
         ansiRedFg,
@@ -114,7 +114,7 @@ object NCUtils extends LazyLogging {
 
     private final lazy val DEC_FMT_SYMS = new DecimalFormatSymbols(Locale.US)
 
-    private final lazy val GSON = new GsonBuilder().setPrettyPrinting().create()
+    private final lazy val GSON = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create()
     private final lazy val YAML = new ObjectMapper(new YAMLFactory).
         configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false).
         registerModule(new DefaultScalaModule()).
@@ -1613,7 +1613,7 @@ object NCUtils extends LazyLogging {
             val start = startColor + (36 * idx)
             val end = start + range - 1
 
-            gradAnsi8BitLine(line, start, end)
+            gradAnsi8BitFgLine(line, start, end)
         })
         .mkString("")
     }
@@ -1625,7 +1625,7 @@ object NCUtils extends LazyLogging {
      * @param endColor Inclusive.
      * @return
      */
-    private def gradAnsi8BitLine(line: String, startColor: Int, endColor: Int): String = {
+    def gradAnsi8BitFgLine(line: String, startColor: Int, endColor: Int): String = {
         line.zipWithIndex.foldLeft(new StringBuilder())((buf, zip) => {
             val ch = zip._1
             val idx = zip._2
@@ -1638,6 +1638,24 @@ object NCUtils extends LazyLogging {
 
     /**
      *
+     * @param line
+     * @param startColor Inclusive.
+     * @param endColor Inclusive.
+     * @return
+     */
+    def gradAnsi8BitBgLine(line: String, startColor: Int, endColor: Int): String = {
+        line.zipWithIndex.foldLeft(new StringBuilder())((buf, zip) => {
+            val ch = zip._1
+            val idx = zip._2
+            val color = startColor + idx % (endColor - startColor + 1)
+
+            buf ++= s"${ansi256Bg(color)}$ch"
+        })
+        .toString + ansiReset
+    }
+
+    /**
+     *
      * @param s
      * @return
      */
@@ -1707,17 +1725,20 @@ object NCUtils extends LazyLogging {
         val buf = new StringBuilder
 
         var inQuotes = false
+        var isValue = false
 
         for (ch <- json) {
             ch match {
-                case ':' if !inQuotes => buf ++= r(":")
-                case '[' | ']' | '{' | '}' if !inQuotes => buf ++= y(s"$ch")
-                case ',' if !inQuotes => buf ++= g(s"$ch")
+                case ':' if !inQuotes => buf ++= r(":"); isValue = true
+                case '[' | ']' | '{' | '}' if !inQuotes => buf ++= y(s"$ch"); isValue = false
+                case ',' if !inQuotes => buf ++= ansi256Fg(213, s"$ch"); isValue = false
                 case '"' =>
                     if (inQuotes)
-                        buf ++= b(s"$ch")
-                    else
-                        buf ++= s"$ansiBlueFg$ch$ansiCyanFg"
+                        buf ++= ansi256Fg(105, s"$ch")
+                    else {
+                        buf ++= s"${ansi256Fg(105)}$ch"
+                        buf ++= (if (isValue) G else ansiCyanFg)
+                    }
 
                     inQuotes = !inQuotes
 
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/cmd/NCCommandManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/cmd/NCCommandManager.scala
index 0a19ad2..1d923ce 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/cmd/NCCommandManager.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/cmd/NCCommandManager.scala
@@ -22,6 +22,7 @@ import com.fasterxml.jackson.module.scala.DefaultScalaModule
 import io.opencensus.trace.Span
 import org.apache.nlpcraft.common.nlp.NCNlpSentence
 import org.apache.nlpcraft.common.{NCService, _}
+import org.apache.nlpcraft.model.intent.NCIdlIntent
 import org.apache.nlpcraft.model.{NCCustomParser, NCElement, NCModelView, NCToken, NCValue, NCValueLoader}
 import org.apache.nlpcraft.probe.mgrs.NCProbeMessage
 import org.apache.nlpcraft.probe.mgrs.conn.NCConnectionManager
@@ -200,9 +201,23 @@ object NCCommandManager extends NCService {
                             mkMsg = () => {
                                 val mdlId = msg.data[String]("mdlId")
 
-                                val mdl = NCModelManager.getModel(mdlId).model
+                                val probeMdl = NCModelManager.getModel(mdlId)
+                                val mdl = probeMdl.model
+
+                                case class IntentInfo(
+                                    intentId: String,
+                                    intentIdl: String,
+                                    intentOrigin: String,
+                                    callback: String
+                                )
 
-                                val jsonMdl: NCModelView =
+                                case class ModelInfo(
+                                    model: NCModelView,
+                                    intentsCnt: Int,
+                                    intents: Seq[IntentInfo]
+                                )
+
+                                val mdlView: NCModelView =
                                     new NCModelView {
                                         // As is.
                                         override def getId: String = mdl.getId
@@ -256,7 +271,7 @@ object NCCommandManager extends NCService {
                                                 def getSparse: lang.Boolean
                                             }
 
-                                            val eJs: NCElement =
+                                            val elm: NCElement =
                                                 new NCElementJs {
                                                     // As is.
                                                     override def getId: String = e.getId
@@ -275,19 +290,32 @@ object NCCommandManager extends NCService {
                                                     override def isSparse: Optional[lang.Boolean] = null
 
                                                     // Wrapped.
-                                                    override def getPermutateSynonyms: lang.Boolean =
-                                                        e.isPermutateSynonyms.orElse(null)
-                                                    override def getSparse: lang.Boolean =
-                                                        e.isSparse.orElse(null)
+                                                    override def getPermutateSynonyms: lang.Boolean = e.isPermutateSynonyms.orElse(null)
+                                                    override def getSparse: lang.Boolean = e.isSparse.orElse(null)
                                                 }
-                                            eJs
+                                            elm
                                         }).asJava
                                     }
 
+                                val mdlInfo = ModelInfo(
+                                    model = mdlView,
+                                    intentsCnt = probeMdl.intents.size,
+                                    probeMdl.intents.map((intent: NCIdlIntent) => {
+                                        val cb = probeMdl.callbacks.get(intent.id)
+
+                                        IntentInfo(
+                                            intentId = intent.id,
+                                            intentIdl = intent.idl,
+                                            intentOrigin = intent.origin,
+                                            callback = if (cb.isDefined) s"${cb.get.className}#${cb.get.methodName}(...)" else null
+                                        )
+                                    })
+                                )
+
                                 NCProbeMessage(
                                     "P2S_MODEL_INFO",
                                     "reqGuid" -> msg.getGuid,
-                                    "resp" -> JS_MAPPER.writeValueAsString(jsonMdl)
+                                    "resp" -> JS_MAPPER.writeValueAsString(mdlInfo)
                                 )
                             },
                             mkErrorMsg = e =>