This is an automated email from the ASF dual-hosted git repository. sergeykamov pushed a commit to branch NLPCRAFT-334 in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
commit 52553b34d8b74637964b4d6a790b691f13e7d064 Author: Sergey Kamov <[email protected]> AuthorDate: Tue Jun 8 15:06:52 2021 +0300 WIP. --- .../apache/nlpcraft/examples/sql/SqlModel.scala | 4 +-- .../nlpcraft/probe/mgrs/NCProbeMessage.scala | 31 ++++++++++++---------- .../probe/mgrs/conn/NCConnectionManager.scala | 6 ++--- .../probe/mgrs/nlp/NCProbeEnrichmentManager.scala | 10 +++---- 4 files changed, 26 insertions(+), 25 deletions(-) diff --git a/nlpcraft-examples/sql/src/main/java/org/apache/nlpcraft/examples/sql/SqlModel.scala b/nlpcraft-examples/sql/src/main/java/org/apache/nlpcraft/examples/sql/SqlModel.scala index 1807c5f..181ae8b 100644 --- a/nlpcraft-examples/sql/src/main/java/org/apache/nlpcraft/examples/sql/SqlModel.scala +++ b/nlpcraft-examples/sql/src/main/java/org/apache/nlpcraft/examples/sql/SqlModel.scala @@ -407,8 +407,8 @@ class SqlModel extends NCModelFileAdapter("sql_model.yaml") with LazyLogging { * conversation context between this and previous questions will not be cleared. */ override def onMatchedIntent(m: NCIntentMatch): Boolean = { - val toks = m.getVariant.getMatchedTokens.asScala - val intentConvToks = m.getIntentTokens.asScala.flatMap(_.asScala) -- toks + val toks = m.getVariant.getMatchedTokens.asScala.toSet + val intentConvToks = m.getIntentTokens.asScala.flatMap(_.asScala).filterNot(toks.contains) // Variant doesn't use tokens from the conversation context (STM). if (intentConvToks.isEmpty) diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/NCProbeMessage.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/NCProbeMessage.scala index 29aea3a..d856049 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/NCProbeMessage.scala +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/NCProbeMessage.scala @@ -29,13 +29,14 @@ import scala.collection.mutable * * @param typ Type (name) of the message. */ -class NCProbeMessage(val typ: String) extends mutable.HashMap[String/*Name*/, Serializable/*Value*/] - with Serializable with NCAsciiLike { +class NCProbeMessage(val typ: String) extends Serializable with NCAsciiLike { + private val data = mutable.HashMap.empty[String/*Name*/, Serializable/*Value*/] + private val guid = U.genGuid() private val hash = guid.hashCode() - - put("TYPE", typ) - put("GUID", guid) + + data += "TYPE" -> typ + data += "GUID" -> guid override def equals(obj: Any): Boolean = obj match { case msg: NCProbeMessage => msg.guid == guid @@ -52,17 +53,17 @@ class NCProbeMessage(val typ: String) extends mutable.HashMap[String/*Name*/, Se def getProbeGuid: String = data[String]("PROBE_GUID") // Probe GUID. def setProbeToken(tkn: String): NCProbeMessage = { - put("PROBE_TOKEN", tkn) + data += "PROBE_TOKEN" -> tkn this } def setProbeId(id: String): NCProbeMessage = { - put("PROBE_ID", id) + data += "PROBE_ID" -> id this } def setProbeGuid(guid: String): NCProbeMessage = { - put("PROBE_GUID", guid) + data += "PROBE_GUID"-> guid this } @@ -86,7 +87,7 @@ class NCProbeMessage(val typ: String) extends mutable.HashMap[String/*Name*/, Se * @return `None` or `Some` map value (including `null` values). */ def dataOpt[T](key: String): Option[T] = - get(key) match { + data.get(key) match { case None => None case Some(x) => x match { case None | null => None @@ -95,10 +96,12 @@ class NCProbeMessage(val typ: String) extends mutable.HashMap[String/*Name*/, Se } override def toAscii: String = - iterator.toSeq.sortBy(_._1).foldLeft(NCAsciiTable("Key", "Value"))((t, p) => t += p).toString - - override def toString(): String = - iterator.toSeq.sortWith((t1, t2) => { + data.iterator.toSeq.sortBy(_._1).foldLeft(NCAsciiTable("Key", "Value"))((t, p) => t += p).toString + + def addData(key: String, value: => Serializable): Unit = data += key -> value + + override def toString: String = + data.iterator.toSeq.sortWith((t1, t2) => { if (t1._1 == "TYPE") true else if (t2._1 == "TYPE") @@ -118,7 +121,7 @@ object NCProbeMessage { val impl = new NCProbeMessage(typ) for ((k, v) <- pairs) - impl.put(k, v) + impl.data.put(k, v) impl } diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/conn/NCConnectionManager.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/conn/NCConnectionManager.scala index 0e851c4..159ffd2 100644 --- a/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/conn/NCConnectionManager.scala +++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/probe/mgrs/conn/NCConnectionManager.scala @@ -175,10 +175,8 @@ object NCConnectionManager extends NCService { val tmz = TimeZone.getDefault val srvNlpEng: String = - hashResp.getOrElse( - "NLP_ENGINE", - throw new HandshakeError("NLP engine parameter missed in response.") - ).asInstanceOf[String] + hashResp.dataOpt[String]("NLP_ENGINE"). + getOrElse(throw new HandshakeError("NLP engine parameter missed in response.")) val probeNlpEng = NCNlpCoreManager.getEngine 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 887b9c9..196ed9c 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 @@ -296,17 +296,17 @@ object NCProbeEnrichmentManager extends NCService with NCOpenCensusModelStats { val msg = NCProbeMessage(msgName) - msg += "srvReqId" -> srvReqId - msg += "mdlId" -> mdlId - msg += "txt" -> txt + msg.addData("srvReqId", srvReqId) + msg.addData("mdlId", mdlId) + msg.addData("txt", txt) def addOptional(name: String, vOpt: Option[Serializable]): Unit = if (vOpt.isDefined) - msg += name -> vOpt.get + msg.addData(name, vOpt.get) def addMeta(name: String, vOpt: Option[JavaMeta]): Unit = if (vOpt.isDefined) - msg += name -> vOpt.get.asInstanceOf[Serializable] + msg.addData(name, vOpt.get.asInstanceOf[Serializable]) if (resBody.isDefined && resBody.get.length > Config.resultMaxSize) { addOptional("error", Some("Result is too big. Model result must be corrected."))
