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 2022/05/05 11:05:56 UTC

[incubator-nlpcraft] 01/03: Minor fixes.

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

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

commit f29523906775b9519b8cff3694b340af7ac185ca
Author: Sergey Kamov <sk...@gmail.com>
AuthorDate: Thu May 5 12:00:47 2022 +0300

    Minor fixes.
---
 .../nlpcraft/examples/pizzeria/PizzeriaModel.scala | 66 ++++++++++------------
 .../examples/pizzeria/PizzeriaModelSpec.scala      |  6 +-
 2 files changed, 33 insertions(+), 39 deletions(-)

diff --git a/nlpcraft-examples/pizzeria/src/main/java/org/apache/nlpcraft/examples/pizzeria/PizzeriaModel.scala b/nlpcraft-examples/pizzeria/src/main/java/org/apache/nlpcraft/examples/pizzeria/PizzeriaModel.scala
index d135ccaa..c9452e32 100644
--- a/nlpcraft-examples/pizzeria/src/main/java/org/apache/nlpcraft/examples/pizzeria/PizzeriaModel.scala
+++ b/nlpcraft-examples/pizzeria/src/main/java/org/apache/nlpcraft/examples/pizzeria/PizzeriaModel.scala
@@ -42,7 +42,7 @@ object PizzeriaModel extends LazyLogging:
     private def extractDrink(e: NCEntity): Drink =
         Drink(e.get[String]("ord:drink:value"), extractQty(e, "ord:drink:qty"))
 
-    type ResultState = (NCResult, State)
+    type Result = (NCResult, State)
 
 import org.apache.nlpcraft.examples.pizzeria.PizzeriaModel.*
 
@@ -64,7 +64,7 @@ class PizzeriaModel extends NCModelAdapter(new NCModelConfig("nlpcraft.pizzeria.
             data.put(usrId, o)
             o
 
-    private def execute(im: NCIntentMatch, body: Order => ResultState): NCResult =
+    private def doRequest(body: Order => Result)(using im: NCIntentMatch): NCResult =
         val o = getOrder(im.getContext)
 
         logger.info(s"Intent '${im.getIntentId}' activated for text: '${im.getContext.getRequest.getText}'.")
@@ -73,13 +73,13 @@ class PizzeriaModel extends NCModelAdapter(new NCModelConfig("nlpcraft.pizzeria.
         val (res, resState) = body.apply(o)
         o.setState(resState)
 
-        logger.info(s"After call  [desc=${o.getDescription}, resState: $resState.")
+        logger.info(s"After call [desc=${o.getDescription}, resState: $resState.")
 
         res
 
-    private def askIsReady(): ResultState = NCResult(s"Is order ready?", ASK_DIALOG) -> DIALOG_IS_READY
+    private def askIsReady(): Result = NCResult(s"Is order ready?", ASK_DIALOG) -> DIALOG_IS_READY
 
-    private def askSpecify(o: Order): ResultState =
+    private def askSpecify(o: Order): Result =
         require(!o.isValid)
 
         o.findPizzaWithoutSize match
@@ -89,7 +89,7 @@ class PizzeriaModel extends NCModelAdapter(new NCModelConfig("nlpcraft.pizzeria.
                 require(o.isEmpty)
                 NCResult(s"Please order something. Ask `menu` to look what you can order.", ASK_DIALOG) -> DIALOG_SPECIFY
 
-    private def askShouldStop(): ResultState =
+    private def askShouldStop(): Result =
         NCResult(s"Should current order be canceled?", ASK_DIALOG) -> DIALOG_SHOULD_CANCEL
 
     private def doShowMenu(): NCResult =
@@ -101,11 +101,11 @@ class PizzeriaModel extends NCModelAdapter(new NCModelConfig("nlpcraft.pizzeria.
 
     private def doShowStatus(o: Order): NCResult = NCResult(s"Current order state: ${o.getDescription}.", ASK_RESULT)
 
-    private def askConfirm(o: Order): ResultState =
+    private def askConfirm(o: Order): Result =
         require(o.isValid)
         NCResult(s"Let's specify your order: ${o.getDescription}. Is it correct?", ASK_DIALOG) -> DIALOG_CONFIRM
 
-    private def withClear(res: NCResult, newState: State, im: NCIntentMatch): ResultState =
+    private def withClear(res: NCResult, newState: State, im: NCIntentMatch): Result =
         val ctx = im.getContext
         val conv = ctx.getConversation
         conv.getData.remove(ctx.getRequest.getUserId)
@@ -114,11 +114,11 @@ class PizzeriaModel extends NCModelAdapter(new NCModelConfig("nlpcraft.pizzeria.
         res -> newState
 
     // Access level set for tests reasons.
-    private[pizzeria] def doExecute(im: NCIntentMatch, o: Order): ResultState =
+    private[pizzeria] def doExecute(o: Order)(using im: NCIntentMatch): Result =
         require(o.isValid)
         withClear(NCResult(s"Executed: ${o.getDescription}.", ASK_RESULT), DIALOG_EMPTY, im)
 
-    private def doStop(im: NCIntentMatch, o: Order): ResultState =
+    private def doStop(o: Order)(using im: NCIntentMatch): Result =
         withClear(
             NCResult(
                 if !o.isEmpty then s"Everything cancelled. Ask `menu` to look what you can order."
@@ -129,40 +129,38 @@ class PizzeriaModel extends NCModelAdapter(new NCModelConfig("nlpcraft.pizzeria.
             im
         )
 
-    private def doContinue(): ResultState = NCResult(s"OK, please continue.", ASK_RESULT) -> DIALOG_EMPTY
-    private def askConfirmOrAskSpecify(o: Order): ResultState = if o.isValid then askConfirm(o) else askSpecify(o)
-    private def askIsReadyOrAskSpecify(o: Order): ResultState = if o.isValid then askIsReady() else askSpecify(o)
-    private def doExecuteOrAskSpecify(im: NCIntentMatch, o: Order): ResultState = if o.isValid then doExecute(im, o) else askSpecify(o)
-    private def askStopOrDoStop(im: NCIntentMatch, o: Order): ResultState = if o.isValid then askShouldStop() else doStop(im, o)
-
+    private def doContinue(): Result = NCResult(s"OK, please continue.", ASK_RESULT) -> DIALOG_EMPTY
+    private def askConfirmOrAskSpecify(o: Order): Result = if o.isValid then askConfirm(o) else askSpecify(o)
+    private def askIsReadyOrAskSpecify(o: Order): Result = if o.isValid then askIsReady() else askSpecify(o)
+    private def doExecuteOrAskSpecify(o: Order)(using im: NCIntentMatch): Result = if o.isValid then doExecute(o) else askSpecify(o)
     /**
       *
       * @param im
       * @return
       */
     @NCIntent("intent=yes term(yes)={# == 'ord:yes'}")
-    def onYes(im: NCIntentMatch): NCResult = execute(
-        im,
+    def onYes(using im: NCIntentMatch): NCResult = doRequest(
         o => o.getState match
-            case DIALOG_CONFIRM => doExecute(im, o)
-            case DIALOG_SHOULD_CANCEL => doStop(im, o)
+            case DIALOG_CONFIRM => doExecute(o)
+            case DIALOG_SHOULD_CANCEL => doStop(o)
             case DIALOG_IS_READY => askConfirmOrAskSpecify(o)
             case DIALOG_SPECIFY | DIALOG_EMPTY => throw UNEXPECTED_REQUEST
     )
 
+    private def askStopOrDoStop(o: Order)(using im: NCIntentMatch): Result = if o.isValid then askShouldStop() else doStop(o)
+
     /**
       *
       * @param im
       * @return
       */
     @NCIntent("intent=no term(no)={# == 'ord:no'}")
-    def onNo(im: NCIntentMatch): NCResult = execute(
-        im,
+    def onNo(using im: NCIntentMatch): NCResult = doRequest(
         o => o.getState match
             case DIALOG_CONFIRM | DIALOG_IS_READY => doContinue()
             case DIALOG_SHOULD_CANCEL => askConfirmOrAskSpecify(o)
             case DIALOG_SPECIFY | DIALOG_EMPTY => throw UNEXPECTED_REQUEST
-        )
+    )
     /**
       *
       * @param im
@@ -170,7 +168,7 @@ class PizzeriaModel extends NCModelAdapter(new NCModelConfig("nlpcraft.pizzeria.
       */
     @NCIntent("intent=stop term(stop)={# == 'ord:stop'}")
     // It doesn't depend on order validity and dialog state.
-    def onStop(im: NCIntentMatch): NCResult = execute(im, o => askStopOrDoStop(im, o))
+    def onStop(using im: NCIntentMatch): NCResult = doRequest(askStopOrDoStop)
 
     /**
       *
@@ -178,26 +176,24 @@ class PizzeriaModel extends NCModelAdapter(new NCModelConfig("nlpcraft.pizzeria.
       * @return
       */
     @NCIntent("intent=status term(status)={# == 'ord:status'}")
-    def onStatus(im: NCIntentMatch): NCResult = execute(
-        im,
+    def onStatus(using im: NCIntentMatch): NCResult = doRequest(
         o => o.getState match
             case DIALOG_CONFIRM => askConfirm(o) // Ignore `status`, confirm again.
             case DIALOG_SHOULD_CANCEL => doShowStatus(o) -> DIALOG_EMPTY // Changes state.
             case DIALOG_EMPTY | DIALOG_IS_READY | DIALOG_SPECIFY => doShowStatus(o) -> o.getState  // Keeps same state.
-        )
+    )
     /**
       *
       * @param im
       * @return
       */
     @NCIntent("intent=finish term(finish)={# == 'ord:finish'}")
-    def onFinish(im: NCIntentMatch): NCResult = execute(
-        im,
+    def onFinish(using im: NCIntentMatch): NCResult = doRequest(
         o => o.getState match
-            case DIALOG_CONFIRM => doExecuteOrAskSpecify(im, o) // Like YES if valid.
+            case DIALOG_CONFIRM => doExecuteOrAskSpecify(o) // Like YES if valid.
             case DIALOG_SPECIFY => askSpecify(o) // Ignore `finish`, specify again.
             case DIALOG_EMPTY | DIALOG_IS_READY | DIALOG_SHOULD_CANCEL => askConfirmOrAskSpecify(o)
-        )
+    )
     /**
       *
       * @param im
@@ -205,7 +201,7 @@ class PizzeriaModel extends NCModelAdapter(new NCModelConfig("nlpcraft.pizzeria.
       */
     @NCIntent("intent=menu term(menu)={# == 'ord:menu'}")
     // It doesn't depend and doesn't influence on order validity and dialog state.
-    def onMenu(im: NCIntentMatch): NCResult = execute(im, o => doShowMenu() -> o.getState)
+    def onMenu(using im: NCIntentMatch): NCResult = doRequest(o => doShowMenu() -> o.getState)
 
     /**
       *
@@ -215,8 +211,7 @@ class PizzeriaModel extends NCModelAdapter(new NCModelConfig("nlpcraft.pizzeria.
       * @return
       */
     @NCIntent("intent=order term(ps)={# == 'ord:pizza'}* term(ds)={# == 'ord:drink'}*")
-    def onOrder(im: NCIntentMatch, @NCIntentTerm("ps") ps: List[NCEntity], @NCIntentTerm("ds") ds: List[NCEntity]): NCResult = execute(
-        im,
+    def onOrder(using im: NCIntentMatch, @NCIntentTerm("ps") ps: List[NCEntity], @NCIntentTerm("ds") ds: List[NCEntity]): NCResult = doRequest(
         o =>
             require(ps.nonEmpty || ds.nonEmpty);
             // It doesn't depend on order validity and dialog state.
@@ -231,8 +226,7 @@ class PizzeriaModel extends NCModelAdapter(new NCModelConfig("nlpcraft.pizzeria.
       * @return
       */
     @NCIntent("intent=orderSpecify term(size)={# == 'ord:pizza:size'}")
-    def onOrderSpecify(im: NCIntentMatch, @NCIntentTerm("size") size: NCEntity): NCResult = execute(
-        im,
+    def onOrderSpecify(using im: NCIntentMatch, @NCIntentTerm("size") size: NCEntity): NCResult = doRequest(
         // If order in progress and has pizza with unknown size, it doesn't depend on dialog state.
         o => if !o.isEmpty && o.fixPizzaWithoutSize(extractPizzaSize(size)) then askIsReadyOrAskSpecify(o) else throw UNEXPECTED_REQUEST
     )
diff --git a/nlpcraft-examples/pizzeria/src/test/java/org/apache/nlpcraft/examples/pizzeria/PizzeriaModelSpec.scala b/nlpcraft-examples/pizzeria/src/test/java/org/apache/nlpcraft/examples/pizzeria/PizzeriaModelSpec.scala
index cf1bdab2..ef99b54b 100644
--- a/nlpcraft-examples/pizzeria/src/test/java/org/apache/nlpcraft/examples/pizzeria/PizzeriaModelSpec.scala
+++ b/nlpcraft-examples/pizzeria/src/test/java/org/apache/nlpcraft/examples/pizzeria/PizzeriaModelSpec.scala
@@ -19,7 +19,7 @@ package org.apache.nlpcraft.examples.pizzeria
 
 import org.apache.nlpcraft.*
 import org.apache.nlpcraft.NCResultType.*
-import org.apache.nlpcraft.examples.pizzeria.PizzeriaModel.ResultState
+import org.apache.nlpcraft.examples.pizzeria.PizzeriaModel.Result
 import org.apache.nlpcraft.examples.pizzeria.PizzeriaOrderState.*
 import org.junit.jupiter.api.*
 
@@ -30,8 +30,8 @@ import scala.collection.mutable
 object PizzeriaModelSpec:
     private class ModelTestWrapper extends PizzeriaModel:
         private var o: PizzeriaOrder = _
-        override def doExecute(im: NCIntentMatch, o: PizzeriaOrder): ResultState =
-            val res = super.doExecute(im, o)
+        override def doExecute(o: PizzeriaOrder)(using im: NCIntentMatch): Result =
+            val res = super.doExecute(o)
             this.o = o
             res
         def getLastExecutedOrder: PizzeriaOrder = o