You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nlpcraft.apache.org by se...@apache.org on 2021/07/22 08:52:37 UTC
[incubator-nlpcraft] 01/02: WIP.
This is an automated email from the ASF dual-hosted git repository.
sergeykamov pushed a commit to branch NLPCRAFT-371
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
commit 4564f4230dd0d1727db12c5950acaa7c2bd2248d
Author: Sergey Kamov <sk...@gmail.com>
AuthorDate: Wed Jul 21 15:26:31 2021 +0300
WIP.
---
.../opencensus/NCOpenCensusServerStats.scala | 5 +-
.../nlpcraft/server/rest/NCBasicRestApi.scala | 68 +++++++++++++++++++++-
.../scala/org/apache/nlpcraft/NCTestElement.scala | 20 ++++++-
.../nlpcraft/server/rest/NCRestModelSpec.scala | 22 ++++++-
.../nlpcraft/server/rest/RestTestModel.scala | 5 +-
5 files changed, 110 insertions(+), 10 deletions(-)
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/opencensus/NCOpenCensusServerStats.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/opencensus/NCOpenCensusServerStats.scala
index 25340d7..dde284a 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/opencensus/NCOpenCensusServerStats.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/opencensus/NCOpenCensusServerStats.scala
@@ -17,9 +17,7 @@
package org.apache.nlpcraft.server.opencensus
-import java.util.Collections
import io.opencensus.stats.Measure._
-import io.opencensus.stats.View.Name
import io.opencensus.stats._
import org.apache.nlpcraft.common.opencensus.NCOpenCensusStats
@@ -31,6 +29,7 @@ trait NCOpenCensusServerStats extends NCOpenCensusStats {
val M_ASK_LATENCY_MS: MeasureLong = MeasureLong.create("ask_latency", "The latency of '/ask' REST call", "ms")
val M_CHECK_LATENCY_MS: MeasureLong = MeasureLong.create("check_latency", "The latency of '/check' REST call", "ms")
val M_MODEL_SUGSYN_LATENCY_MS: MeasureLong = MeasureLong.create("model_inspect_latency", "The latency of '/model/inspect' REST call", "ms")
+ val M_MODEL_SYNS_LATENCY_MS: MeasureLong = MeasureLong.create("model_synonyms_latency", "The latency of '/model/syns' REST call", "ms")
val M_CANCEL_LATENCY_MS: MeasureLong = MeasureLong.create("cancel_latency", "The latency of '/cancel' REST call", "ms")
val M_SIGNIN_LATENCY_MS: MeasureLong = MeasureLong.create("signin_latency", "The latency of '/signin' REST call", "ms")
val M_SIGNOUT_LATENCY_MS: MeasureLong = MeasureLong.create("signout_latency", "The latency of '/signout' REST call", "ms")
@@ -77,6 +76,7 @@ trait NCOpenCensusServerStats extends NCOpenCensusStats {
mkViews(M_COMPANY_TOKEN_LATENCY_MS, "company/token"),
mkViews(M_COMPANY_DELETE_LATENCY_MS, "company/delete"),
mkViews(M_MODEL_SUGSYN_LATENCY_MS, "model/sugsyn"),
+ mkViews(M_MODEL_SYNS_LATENCY_MS, "model/syns"),
mkViews(M_USER_ADD_LATENCY_MS, "user/add"),
mkViews(M_USER_GET_LATENCY_MS, "user/get"),
mkViews(M_USER_DELETE_LATENCY_MS, "user/delete"),
@@ -87,7 +87,6 @@ trait NCOpenCensusServerStats extends NCOpenCensusStats {
mkViews(M_FEEDBACK_ADD_LATENCY_MS, "feedback/add"),
mkViews(M_FEEDBACK_DELETE_LATENCY_MS, "feedback/delete"),
mkViews(M_FEEDBACK_GET_LATENCY_MS, "feedback/get"),
- mkViews(M_MODEL_SUGSYN_LATENCY_MS, "model/sugsyn"),
mkViews(M_PROBE_ALL_LATENCY_MS, "probe/all"),
mkViews(M_ROUND_TRIP_LATENCY_MS, "roundTrip/latdist"),
).flatten
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
index 45ab892..70368f1 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/server/rest/NCBasicRestApi.scala
@@ -36,6 +36,7 @@ import org.apache.nlpcraft.common.pool.NCThreadPoolManager
import org.apache.nlpcraft.common.util.NCUtils.{jsonToJavaMap, uncompress}
import org.apache.nlpcraft.common.{JavaMeta, NCE, U}
import org.apache.nlpcraft.model.NCModelView
+import org.apache.nlpcraft.probe.mgrs.model.NCModelManager
import org.apache.nlpcraft.server.apicodes.NCApiStatusCode.{API_OK, _}
import org.apache.nlpcraft.server.company.NCCompanyManager
import org.apache.nlpcraft.server.feedback.NCFeedbackManager
@@ -786,15 +787,15 @@ class NCBasicRestApi extends NCRestApi with LazyLogging with NCOpenCensusTrace w
* @return
*/
protected def sugsyn$(): Route = {
- case class Req$Model$Sugsyn$(
+ case class Req$Model$Sugsyn(
acsTok: String,
mdlId: String,
minScore: Option[Double]
)
- implicit val reqFmt: RootJsonFormat[Req$Model$Sugsyn$] = jsonFormat3(Req$Model$Sugsyn$)
+ implicit val reqFmt: RootJsonFormat[Req$Model$Sugsyn] = jsonFormat3(Req$Model$Sugsyn)
- entity(as[Req$Model$Sugsyn$]) { req =>
+ entity(as[Req$Model$Sugsyn]) { req =>
startScopedSpan(
"model$sugsyn",
"acsTok" -> req.acsTok,
@@ -819,6 +820,66 @@ class NCBasicRestApi extends NCRestApi with LazyLogging with NCOpenCensusTrace w
}
}
+
+ /**
+ *
+ * @return
+ */
+ protected def elementSynonyms$(): Route = {
+ case class Req$Model$Syn(
+ acsTok: String,
+ mdlId: String,
+ elemId: String
+ )
+
+ implicit val reqFmt: RootJsonFormat[Req$Model$Syn] = jsonFormat3(Req$Model$Syn)
+
+ case class Res$Model$Value(
+ name: String,
+ synonyms: Seq[String]
+ )
+
+ case class Res$Model$Element(
+ status: String,
+ synonyms: Seq[String],
+ values: Seq[Res$Model$Value]
+ )
+
+ implicit val resValFmt: RootJsonFormat[Res$Model$Value] = jsonFormat2(Res$Model$Value)
+ implicit val resFmt: RootJsonFormat[Res$Model$Element] = jsonFormat3(Res$Model$Element)
+
+ entity(as[Req$Model$Syn]) { req =>
+ startScopedSpan(
+ "model$syns",
+ "acsTok" -> req.acsTok,
+ "mdlId" -> req.mdlId,
+ "elemId" -> req.elemId) { span =>
+ checkLength("acsTok" -> req.acsTok, "mdlId" -> req.mdlId)
+
+ val admUsr = authenticateAsAdmin(req.acsTok)
+
+ checkModelId(req.mdlId, admUsr.companyId)
+
+ val elm =
+ NCModelManager.
+ getModel(req.mdlId, span).
+ model.
+ getElements.asScala.find(_.getId == req.elemId).getOrElse(throw InvalidModelId(req.elemId))
+
+ complete {
+ Res$Model$Element(
+ API_OK,
+ elm.getSynonyms.asScala.toSeq,
+ if (elm.getValues != null)
+ elm.getValues.asScala.map(p => Res$Model$Value(p.getName, p.getSynonyms.asScala.toSeq)).toSeq
+ else
+ Seq.empty
+ )
+ }
+ }
+ }
+ }
+
/**
*
* @return
@@ -1977,6 +2038,7 @@ class NCBasicRestApi extends NCRestApi with LazyLogging with NCOpenCensusTrace w
path(API / "feedback" / "delete") { withMetric(M_FEEDBACK_DELETE_LATENCY_MS, feedback$Delete) } ~
path(API / "probe" / "all") { withMetric(M_PROBE_ALL_LATENCY_MS, probe$All) } ~
path(API / "model" / "sugsyn") { withMetric(M_MODEL_SUGSYN_LATENCY_MS, sugsyn$) } ~
+ path(API / "model" / "syns") { withMetric(M_MODEL_SYNS_LATENCY_MS, elementSynonyms$) } ~
path(API / "ask") { withMetric(M_ASK_LATENCY_MS, ask$) } ~
path(API / "ask" / "sync") { withMetric(M_ASK_SYNC_LATENCY_MS, ask$Sync) }
}
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/NCTestElement.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/NCTestElement.scala
index dc465d8..3598d2e 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/NCTestElement.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/NCTestElement.scala
@@ -17,7 +17,7 @@
package org.apache.nlpcraft
-import org.apache.nlpcraft.model.NCElement
+import org.apache.nlpcraft.model.{NCElement, NCValue}
import java.util
import scala.jdk.CollectionConverters.{SeqHasAsJava, SetHasAsJava}
@@ -27,8 +27,11 @@ import scala.language.implicitConversions
* Simple test element.
*/
case class NCTestElement(id: String, syns: String*) extends NCElement {
+ private val values = new util.ArrayList[NCValue]
+
override def getId: String = id
override def getSynonyms: util.List[String] = (syns :+ id).asJava
+ override def getValues: util.List[NCValue] = values
}
/**
@@ -38,4 +41,19 @@ object NCTestElement {
private def to(e: NCTestElement): NCElement = e
implicit def to(set: Set[NCTestElement]): util.Set[NCElement] = set.map(to).asJava
+
+ def apply(id: String, syns: Seq[String], vals: Map[String, Seq[String]]): NCTestElement = {
+ val e = NCTestElement(id, syns :_*)
+
+ e.getValues.addAll(
+ vals.map { case (value, syns) =>
+ new NCValue {
+ override def getName: String = value
+ override def getSynonyms: util.List[String] = syns.asJava
+ }
+ }.toSeq.asJava
+ )
+
+ e
+ }
}
\ No newline at end of file
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/server/rest/NCRestModelSpec.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/server/rest/NCRestModelSpec.scala
index d47a297..86fb1af 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/server/rest/NCRestModelSpec.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/server/rest/NCRestModelSpec.scala
@@ -29,7 +29,7 @@ import scala.jdk.CollectionConverters.ListHasAsScala
@NCTestEnvironment(model = classOf[RestTestModel], startClient = false)
class NCRestModelSpec extends NCRestSpec {
@Test
- def test(): Unit = {
+ def testSugsyn(): Unit = {
def extract(data: JList[java.util.Map[String, Object]]): Seq[Double] =
data.asScala.map(_.get("score").asInstanceOf[Number].doubleValue()).toSeq
@@ -55,4 +55,24 @@ class NCRestModelSpec extends NCRestSpec {
})
)
}
+
+ @Test
+ def testSyns(): Unit = {
+ def extract(data: JList[java.util.Map[String, Object]]): Seq[Double] =
+ data.asScala.map(_.get("score").asInstanceOf[Number].doubleValue()).toSeq
+
+ // Note that checked values are valid for current configuration of `RestTestModel` model.
+ post("model/syns", "mdlId" -> "rest.test.model", "elemId" -> "x")(
+ ("$.status", (status: String) => assertEquals("API_OK", status)),
+ ("$.synonyms", (data: ResponseList) => {
+ println("data="+data)
+ })
+ )
+ post("model/syns", "mdlId" -> "rest.test.model", "elemId" -> "valElem")(
+ ("$.status", (status: String) => assertEquals("API_OK", status)),
+ ("$.synonyms", (data: ResponseList) => {
+ println("data="+data)
+ })
+ )
+ }
}
diff --git a/nlpcraft/src/test/scala/org/apache/nlpcraft/server/rest/RestTestModel.scala b/nlpcraft/src/test/scala/org/apache/nlpcraft/server/rest/RestTestModel.scala
index 8099e39..8319862 100644
--- a/nlpcraft/src/test/scala/org/apache/nlpcraft/server/rest/RestTestModel.scala
+++ b/nlpcraft/src/test/scala/org/apache/nlpcraft/server/rest/RestTestModel.scala
@@ -18,7 +18,7 @@
package org.apache.nlpcraft.server.rest
import org.apache.nlpcraft.NCTestElement
-import org.apache.nlpcraft.model.{NCElement, NCIntent, NCIntentSample, NCModelAdapter, NCResult}
+import org.apache.nlpcraft.model.{NCElement, NCIntent, NCIntentSample, NCModelAdapter, NCResult, NCValue}
import java.util
@@ -49,7 +49,8 @@ class RestTestModel extends NCModelAdapter("rest.test.model", "REST test model",
NCTestElement("a"),
NCTestElement("b"),
NCTestElement("x", "cat"),
- NCTestElement("meta")
+ NCTestElement("meta"),
+ NCTestElement("valElem", Seq("valElem1"), Map("v1"->Seq("v11", "v12"), "v2" -> Seq("v21")))
)
@NCIntent("intent=onA term(t)={tok_id() == 'a'}")