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 2020/03/25 12:27:17 UTC

[incubator-nlpcraft] 01/01: Initial refactoring.

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

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

commit 7b25ff240a7c1ec4852cefc7e3c0ea60e686c33c
Author: Sergey Kamov <se...@apache.org>
AuthorDate: Wed Mar 25 15:27:08 2020 +0300

    Initial refactoring.
---
 .../apache/nlpcraft/examples/alarm/AlarmModel.java |  8 +--
 .../apache/nlpcraft/examples/alarm/AlarmTest.java  | 12 +++-
 .../apache/nlpcraft/examples/echo/EchoTest.java    | 14 +++--
 .../examples/helloworld/HelloWorldModel.java       |  6 +-
 .../examples/helloworld/HelloWorldTest.java        | 26 +++++----
 .../examples/lightswitch/LightSwitchModel.scala    |  3 +-
 .../examples/lightswitch/LightSwitchTest.java      | 50 +++++++++-------
 .../misc/geo/cities/CitiesDataProvider.java        |  6 +-
 .../apache/nlpcraft/examples/phone/PhoneModel.java |  5 +-
 .../apache/nlpcraft/examples/phone/PhoneTest.java  | 22 +++++---
 .../nlpcraft/examples/sql/SqlModelTest.scala       | 66 ++++++++++++----------
 .../nlpcraft/examples/sql/db/SqlAccess.scala       |  2 +-
 .../nlpcraft/examples/sql/db/SqlBuilder.scala      |  4 +-
 .../apache/nlpcraft/examples/time/TimeModel.java   |  3 -
 .../nlpcraft/examples/time/TimeModelApp.java       |  2 +-
 .../apache/nlpcraft/examples/time/TimeTest.java    | 24 +++++---
 .../nlpcraft/examples/weather/WeatherTest.java     | 63 ++++++++++++---------
 .../nlpcraft/model/intent/dsl/NCDslTest.java       | 11 ++--
 .../nlpcraft/models/stm/NCStmTestModelSpec.java    | 14 +++--
 19 files changed, 196 insertions(+), 145 deletions(-)

diff --git a/src/main/scala/org/apache/nlpcraft/examples/alarm/AlarmModel.java b/src/main/scala/org/apache/nlpcraft/examples/alarm/AlarmModel.java
index 4c81dda..2182df7 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/alarm/AlarmModel.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/alarm/AlarmModel.java
@@ -17,13 +17,7 @@
 
 package org.apache.nlpcraft.examples.alarm;
 
-import org.apache.nlpcraft.model.NCModelFileAdapter;
-import org.apache.nlpcraft.model.NCResult;
-import org.apache.nlpcraft.model.NCRejection;
-import org.apache.nlpcraft.model.NCToken;
-import org.apache.nlpcraft.model.NCIntentRef;
-import org.apache.nlpcraft.model.NCIntentMatch;
-import org.apache.nlpcraft.model.NCIntentTerm;
+import org.apache.nlpcraft.model.*;
 
 import java.time.LocalDateTime;
 import java.time.ZoneId;
diff --git a/src/main/scala/org/apache/nlpcraft/examples/alarm/AlarmTest.java b/src/main/scala/org/apache/nlpcraft/examples/alarm/AlarmTest.java
index fe027c9..ae69e11 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/alarm/AlarmTest.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/alarm/AlarmTest.java
@@ -17,10 +17,13 @@
 
 package org.apache.nlpcraft.examples.alarm;
 
-import org.junit.jupiter.api.*;
 import org.apache.nlpcraft.common.NCException;
 import org.apache.nlpcraft.model.tools.test.NCTestClient;
 import org.apache.nlpcraft.model.tools.test.NCTestClientBuilder;
+import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe;
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
 
 import java.io.IOException;
 
@@ -36,6 +39,8 @@ class AlarmTest {
     
     @BeforeAll
     static void setUp() throws NCException, IOException {
+        NCEmbeddedProbe.start(AlarmModel.class);
+
         client = new NCTestClientBuilder().newBuilder().build();
         
         client.open("nlpcraft.alarm.ex"); // See alarm_model.json
@@ -43,7 +48,10 @@ class AlarmTest {
     
     @AfterAll
     static void tearDown() throws NCException, IOException {
-        client.close();
+        if (client != null)
+            client.close();
+
+        NCEmbeddedProbe.stop();
     }
     
     @Test
diff --git a/src/main/scala/org/apache/nlpcraft/examples/echo/EchoTest.java b/src/main/scala/org/apache/nlpcraft/examples/echo/EchoTest.java
index b10c38c..5936925 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/echo/EchoTest.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/echo/EchoTest.java
@@ -17,12 +17,13 @@
 
 package org.apache.nlpcraft.examples.echo;
 
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
 import org.apache.nlpcraft.common.NCException;
 import org.apache.nlpcraft.model.tools.test.NCTestClient;
 import org.apache.nlpcraft.model.tools.test.NCTestClientBuilder;
+import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import java.io.IOException;
 
@@ -38,6 +39,8 @@ class EchoTest {
     
     @BeforeEach
     void setUp() throws NCException, IOException {
+        NCEmbeddedProbe.start(EchoModel.class);
+
         client = new NCTestClientBuilder().newBuilder().build();
     
         client.open("nlpcraft.echo.ex");
@@ -45,7 +48,10 @@ class EchoTest {
     
     @AfterEach
     void tearDown() throws NCException, IOException {
-        client.close();
+        if (client != null)
+            client.close();
+
+        NCEmbeddedProbe.stop();
     }
     
     @Test
diff --git a/src/main/scala/org/apache/nlpcraft/examples/helloworld/HelloWorldModel.java b/src/main/scala/org/apache/nlpcraft/examples/helloworld/HelloWorldModel.java
index 8b07e7d..81d8fa6 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/helloworld/HelloWorldModel.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/helloworld/HelloWorldModel.java
@@ -17,8 +17,10 @@
 
 package org.apache.nlpcraft.examples.helloworld;
 
-import org.apache.nlpcraft.common.*;
-import org.apache.nlpcraft.model.*;
+import org.apache.nlpcraft.common.NCException;
+import org.apache.nlpcraft.model.NCContext;
+import org.apache.nlpcraft.model.NCModelAdapter;
+import org.apache.nlpcraft.model.NCResult;
 
 /**
  * Hello World example data model.
diff --git a/src/main/scala/org/apache/nlpcraft/examples/helloworld/HelloWorldTest.java b/src/main/scala/org/apache/nlpcraft/examples/helloworld/HelloWorldTest.java
index 61ba5df..f24b359 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/helloworld/HelloWorldTest.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/helloworld/HelloWorldTest.java
@@ -17,12 +17,13 @@
 
 package org.apache.nlpcraft.examples.helloworld;
 
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
 import org.apache.nlpcraft.common.NCException;
 import org.apache.nlpcraft.model.tools.test.NCTestClient;
 import org.apache.nlpcraft.model.tools.test.NCTestClientBuilder;
+import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import java.io.IOException;
 
@@ -35,28 +36,33 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  */
 class HelloWorldTest {
     private NCTestClient client;
-    
+
     @BeforeEach
     void setUp() throws NCException, IOException {
+        NCEmbeddedProbe.start(HelloWorldModel.class);
+
         // Use all defaults.
         client = new NCTestClientBuilder().newBuilder().build();
-        
+
         client.open("nlpcraft.helloworld.ex");
     }
-    
+
     @AfterEach
     void tearDown() throws NCException, IOException {
-        client.close();
+        if (client != null)
+            client.close();
+
+        NCEmbeddedProbe.stop();
     }
-    
+
     @Test
     void test() throws NCException, IOException {
         // Empty parameter.
         assertTrue(client.ask("").isFailed());
-    
+
         // Only latin charset is supported.
         assertTrue(client.ask("El tiempo en España").isFailed());
-    
+
         // Should be passed.
         assertTrue(client.ask("Hi!").isOk());
     }
diff --git a/src/main/scala/org/apache/nlpcraft/examples/lightswitch/LightSwitchModel.scala b/src/main/scala/org/apache/nlpcraft/examples/lightswitch/LightSwitchModel.scala
index df39329..5f001e3 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/lightswitch/LightSwitchModel.scala
+++ b/src/main/scala/org/apache/nlpcraft/examples/lightswitch/LightSwitchModel.scala
@@ -17,8 +17,7 @@
 
 package org.apache.nlpcraft.examples.lightswitch
 
-import org.apache.nlpcraft.model._
-import org.apache.nlpcraft.model.NCIntentTerm
+import org.apache.nlpcraft.model.{NCIntentTerm, _}
 
 /**
   * This example provides very simple implementation for NLI-powered light switch.
diff --git a/src/main/scala/org/apache/nlpcraft/examples/lightswitch/LightSwitchTest.java b/src/main/scala/org/apache/nlpcraft/examples/lightswitch/LightSwitchTest.java
index a99de80..0565f4b 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/lightswitch/LightSwitchTest.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/lightswitch/LightSwitchTest.java
@@ -17,12 +17,17 @@
 
 package org.apache.nlpcraft.examples.lightswitch;
 
-import org.junit.jupiter.api.*;
-import org.apache.nlpcraft.common.*;
-import org.apache.nlpcraft.model.tools.test.*;
-import java.io.*;
+import org.apache.nlpcraft.common.NCException;
+import org.apache.nlpcraft.model.tools.test.NCTestClient;
+import org.apache.nlpcraft.model.tools.test.NCTestClientBuilder;
+import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
-import static org.junit.jupiter.api.Assertions.*;
+import java.io.IOException;
+
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
  * Lightswitch model test.
@@ -30,32 +35,37 @@ import static org.junit.jupiter.api.Assertions.*;
  * @see LightSwitchModel
  */
 class LightSwitchTest {
-    private NCTestClient cli;
+    private NCTestClient client;
 
     @BeforeEach
     void setUp() throws NCException, IOException {
-        cli = new NCTestClientBuilder().newBuilder().build();
+        NCEmbeddedProbe.start(LightSwitchModel.class);
+
+        client = new NCTestClientBuilder().newBuilder().build();
 
-        cli.open("nlpcraft.lightswitch.ex");
+        client.open("nlpcraft.lightswitch.ex");
     }
 
     @AfterEach
     void tearDown() throws NCException, IOException {
-        cli.close();
+        if (client != null)
+            client.close();
+
+        NCEmbeddedProbe.stop();
     }
 
     @Test
     void test() throws NCException, IOException {
-        assertTrue(cli.ask("Turn the lights off in the entire house.").isOk());
-        assertTrue(cli.ask("Switch on the illumination in the master bedroom closet.").isOk());
-        assertTrue(cli.ask("Get the lights on.").isOk());
-        assertTrue(cli.ask("Please, put the light out in the upstairs bedroom.").isOk());
-        assertTrue(cli.ask("Set the lights on in the entire house.").isOk());
-        assertTrue(cli.ask("Turn the lights off in the guest bedroom.").isOk());
-        assertTrue(cli.ask("Could you please switch off all the lights?").isOk());
-        assertTrue(cli.ask("Dial off illumination on the 2nd floor.").isOk());
-        assertTrue(cli.ask("Please, no lights!").isOk());
-        assertTrue(cli.ask("Kill off all the lights now!").isOk());
-        assertTrue(cli.ask("No lights in the bedroom, please.").isOk());
+        assertTrue(client.ask("Turn the lights off in the entire house.").isOk());
+        assertTrue(client.ask("Switch on the illumination in the master bedroom closet.").isOk());
+        assertTrue(client.ask("Get the lights on.").isOk());
+        assertTrue(client.ask("Please, put the light out in the upstairs bedroom.").isOk());
+        assertTrue(client.ask("Set the lights on in the entire house.").isOk());
+        assertTrue(client.ask("Turn the lights off in the guest bedroom.").isOk());
+        assertTrue(client.ask("Could you please switch off all the lights?").isOk());
+        assertTrue(client.ask("Dial off illumination on the 2nd floor.").isOk());
+        assertTrue(client.ask("Please, no lights!").isOk());
+        assertTrue(client.ask("Kill off all the lights now!").isOk());
+        assertTrue(client.ask("No lights in the bedroom, please.").isOk());
     }
 }
diff --git a/src/main/scala/org/apache/nlpcraft/examples/misc/geo/cities/CitiesDataProvider.java b/src/main/scala/org/apache/nlpcraft/examples/misc/geo/cities/CitiesDataProvider.java
index 94ab352..15d6dfa 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/misc/geo/cities/CitiesDataProvider.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/misc/geo/cities/CitiesDataProvider.java
@@ -23,11 +23,7 @@ import org.apache.nlpcraft.common.NCException;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
diff --git a/src/main/scala/org/apache/nlpcraft/examples/phone/PhoneModel.java b/src/main/scala/org/apache/nlpcraft/examples/phone/PhoneModel.java
index 64c35e8..6ca8d26 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/phone/PhoneModel.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/phone/PhoneModel.java
@@ -18,8 +18,9 @@
 package org.apache.nlpcraft.examples.phone;
 
 import org.apache.nlpcraft.model.*;
-import java.util.*;
-import java.util.stream.*;
+
+import java.util.List;
+import java.util.stream.Collectors;
 
 
 /**
diff --git a/src/main/scala/org/apache/nlpcraft/examples/phone/PhoneTest.java b/src/main/scala/org/apache/nlpcraft/examples/phone/PhoneTest.java
index 8170c5f..4806f34 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/phone/PhoneTest.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/phone/PhoneTest.java
@@ -17,12 +17,13 @@
 
 package org.apache.nlpcraft.examples.phone;
 
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
 import org.apache.nlpcraft.common.NCException;
 import org.apache.nlpcraft.model.tools.test.NCTestClient;
 import org.apache.nlpcraft.model.tools.test.NCTestClientBuilder;
+import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import java.io.IOException;
 
@@ -35,19 +36,24 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  */
 class PhoneTest {
     private NCTestClient client;
-    
+
     @BeforeEach
     void setUp() throws NCException, IOException {
+        NCEmbeddedProbe.start(PhoneModel.class);
+
         client = new NCTestClientBuilder().newBuilder().build();
-        
+
         client.open("nlpcraft.phone.ex"); // See phone_model.json
     }
-    
+
     @AfterEach
     void tearDown() throws NCException, IOException {
-        client.close();
+        if (client != null)
+            client.close();
+
+        NCEmbeddedProbe.stop();
     }
-    
+
     @Test
     void test() throws NCException, IOException {
         assertTrue(client.ask("Call to Apple office").isOk());
diff --git a/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModelTest.scala b/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModelTest.scala
index 558a344..1968895 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModelTest.scala
+++ b/src/main/scala/org/apache/nlpcraft/examples/sql/SqlModelTest.scala
@@ -27,14 +27,15 @@ import com.google.gson.reflect.TypeToken
 import com.jakewharton.fliptables.FlipTable
 import org.apache.nlpcraft.model.tools.sqlgen.NCSqlException
 import org.apache.nlpcraft.model.tools.test.{NCTestClient, NCTestClientBuilder}
+import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe
 import org.scalatest.{BeforeAndAfterAll, FlatSpec}
 
 import scala.collection.JavaConverters._
 import scala.compat.java8.OptionConverters._
 
 /**
-  *
-  */
+ *
+ */
 class SqlModelTest extends FlatSpec with BeforeAndAfterAll {
     private val GSON = new Gson
     private val TYPE_RESP = new TypeToken[util.Map[String, Object]]() {}.getType
@@ -50,8 +51,8 @@ class SqlModelTest extends FlatSpec with BeforeAndAfterAll {
                 override def apply(t: java.lang.Boolean): String = "**"
             }).
             build
-    
-    private var cli: NCTestClient = _
+
+    private var client: NCTestClient = _
 
     case class Case(texts: Seq[String], sql: String)
 
@@ -64,62 +65,67 @@ class SqlModelTest extends FlatSpec with BeforeAndAfterAll {
             mkString(" ")
 
     private def toPretty(s: String): util.List[String] = SqlFormatter.format(s).split("\n").toSeq.asJava
-    
+
     override protected def beforeAll(): Unit = {
-        cli = new NCTestClientBuilder().newBuilder.setResponseLog(false).build
-    
-        cli.open("sql.model.id")
-        
+        NCEmbeddedProbe.start(classOf[SqlModel])
+
+        client = new NCTestClientBuilder().newBuilder.setResponseLog(false).build
+
+        client.open("sql.model.id")
+
     }
-    
-    override protected def afterAll(): Unit =
-        if (cli != null)
-            cli.close()
-    
+
+    override protected def afterAll(): Unit = {
+        if (client != null)
+            client.close()
+
+        NCEmbeddedProbe.stop()
+    }
+
     private def check(multiLineOut: Boolean, cases: Case*): Unit = {
         val errs = collection.mutable.LinkedHashMap.empty[String, String]
-        
+
         cases.
             flatMap(c ⇒ {
                 val sql = normalize(c.sql)
-                
+
                 c.texts.map(t ⇒ t → sql)
             }).
             foreach {
                 case (txt, expSqlNorm) ⇒
-                    val res = cli.ask(txt)
-    
+                    val res = client.ask(txt)
+
                     if (res.isOk) {
                         require(res.getResult.asScala.isDefined)
-    
+
                         val m: util.Map[String, Object] = GSON.fromJson(res.getResult.get, TYPE_RESP)
-    
+
                         val err = m.get("error")
-    
+
                         if (err != null)
                             errs += txt → err.toString
                         else {
                             val resSqlNorm = normalize(m.asScala("sql").asInstanceOf[String])
-    
+
                             if (resSqlNorm != expSqlNorm) {
                                 if (multiLineOut) {
                                     val rows = DIFF.generateDiffRows(toPretty(expSqlNorm), toPretty(resSqlNorm)).asScala
-    
+
                                     val table =
                                         FlipTable.of(
                                             Array("Expected", "Real"),
                                             rows.map(p ⇒ Array(p.getOldLine, p.getNewLine)).toArray
                                         )
-    
+
                                     errs += txt → s"Unexpected SQL:\n$table"
                                 }
                                 else {
                                     val rows = DIFF.generateDiffRows(Seq(expSqlNorm).asJava, Seq(resSqlNorm).asJava).asScala
-    
+
                                     require(rows.size == 1)
-    
+
                                     val row = rows.head
-    
+
                                     errs += txt →
                                         s"""Unexpected SQL (expected vs real)
                                            |${row.getOldLine}
@@ -131,13 +137,13 @@ class SqlModelTest extends FlatSpec with BeforeAndAfterAll {
                     }
                     else {
                         require(res.getResultError.isPresent)
-    
+
                         errs += txt → res.getResultError.get
                     }
             }
 
         if (errs.nonEmpty) {
-            errs.foreach { case (txt, err) ⇒ println(s"Text: $txt\nError: $err\n")}
+            errs.foreach { case (txt, err) ⇒ println(s"Text: $txt\nError: $err\n") }
 
             throw new NCSqlException(s"Test finished with errors [passed=${cases.size - errs.size}, failed=${errs.size}]")
         }
@@ -566,7 +572,7 @@ class SqlModelTest extends FlatSpec with BeforeAndAfterAll {
                   |LIMIT
                   |  1000
                 """.stripMargin
-            ) ,
+            ),
             Case(
                 Seq(
                     "give me the orders sorted by ship date"
diff --git a/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlAccess.scala b/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlAccess.scala
index ef2d0be..cd9ab5d 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlAccess.scala
+++ b/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlAccess.scala
@@ -22,8 +22,8 @@ import java.sql.{Connection, SQLException}
 import com.github.vertical_blank.sqlformatter.SqlFormatter
 import com.jakewharton.fliptables.FlipTable
 import com.typesafe.scalalogging.LazyLogging
-import org.h2.jdbcx.JdbcDataSource
 import org.apache.nlpcraft.model.tools.sqlgen.NCSqlQuery
+import org.h2.jdbcx.JdbcDataSource
 import resource.managed
 
 import scala.collection.JavaConverters._
diff --git a/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlBuilder.scala b/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlBuilder.scala
index f9435f4..699f495 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlBuilder.scala
+++ b/src/main/scala/org/apache/nlpcraft/examples/sql/db/SqlBuilder.scala
@@ -21,10 +21,10 @@ import java.sql.Types
 import java.util
 
 import com.typesafe.scalalogging.LazyLogging
+import org.apache.nlpcraft.model.tools.sqlgen.impl.{NCSqlFunctionImpl, NCSqlSortImpl}
+import org.apache.nlpcraft.model.tools.sqlgen.{NCSqlAggregate, _}
 import org.jgrapht.alg.DijkstraShortestPath
 import org.jgrapht.graph.{DefaultEdge, SimpleGraph}
-import org.apache.nlpcraft.model.tools.sqlgen.{NCSqlAggregate, _}
-import org.apache.nlpcraft.model.tools.sqlgen.impl.{NCSqlFunctionImpl, NCSqlSortImpl}
 
 import scala.collection.JavaConverters._
 import scala.collection.{Seq, mutable}
diff --git a/src/main/scala/org/apache/nlpcraft/examples/time/TimeModel.java b/src/main/scala/org/apache/nlpcraft/examples/time/TimeModel.java
index 55d4192..e6d7e2e 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/time/TimeModel.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/time/TimeModel.java
@@ -28,9 +28,6 @@ import org.apache.nlpcraft.examples.misc.geo.cities.CityData;
 import org.apache.nlpcraft.examples.misc.geo.keycdn.GeoManager;
 import org.apache.nlpcraft.examples.misc.geo.keycdn.beans.GeoDataBean;
 import org.apache.nlpcraft.model.*;
-import org.apache.nlpcraft.model.NCIntent;
-import org.apache.nlpcraft.model.NCIntentMatch;
-import org.apache.nlpcraft.model.NCIntentTerm;
 
 import java.time.ZoneId;
 import java.time.ZonedDateTime;
diff --git a/src/main/scala/org/apache/nlpcraft/examples/time/TimeModelApp.java b/src/main/scala/org/apache/nlpcraft/examples/time/TimeModelApp.java
index e7f0307..cd8e1ad 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/time/TimeModelApp.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/time/TimeModelApp.java
@@ -17,7 +17,7 @@
 
 package org.apache.nlpcraft.examples.time;
 
-import org.apache.nlpcraft.probe.embedded.*;
+import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe;
 
 /**
  * An app that demo the usage of embedded probe. This is an alternative way to
diff --git a/src/main/scala/org/apache/nlpcraft/examples/time/TimeTest.java b/src/main/scala/org/apache/nlpcraft/examples/time/TimeTest.java
index d2e8b40..0a5441e 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/time/TimeTest.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/time/TimeTest.java
@@ -17,12 +17,13 @@
 
 package org.apache.nlpcraft.examples.time;
 
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
 import org.apache.nlpcraft.common.NCException;
 import org.apache.nlpcraft.model.tools.test.NCTestClient;
 import org.apache.nlpcraft.model.tools.test.NCTestClientBuilder;
+import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import java.io.IOException;
 
@@ -35,24 +36,29 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
  */
 class TimeTest {
     private NCTestClient client;
-    
+
     @BeforeEach
     void setUp() throws NCException, IOException {
+        NCEmbeddedProbe.start(TimeModel.class);
+
         client = new NCTestClientBuilder().newBuilder().build();
-        
+
         client.open("nlpcraft.time.ex"); // See time_model.json
     }
-    
+
     @AfterEach
     void tearDown() throws NCException, IOException {
-        client.close();
+        if (client != null)
+            client.close();
+
+        NCEmbeddedProbe.stop();
     }
-    
+
     @Test
     void test() throws NCException, IOException {
         // Empty parameter.
         assertTrue(client.ask("").isFailed());
-    
+
         // Only latin charset is supported.
         assertTrue(client.ask("El tiempo en España").isFailed());
 
diff --git a/src/main/scala/org/apache/nlpcraft/examples/weather/WeatherTest.java b/src/main/scala/org/apache/nlpcraft/examples/weather/WeatherTest.java
index e640c88..32e2eb5 100644
--- a/src/main/scala/org/apache/nlpcraft/examples/weather/WeatherTest.java
+++ b/src/main/scala/org/apache/nlpcraft/examples/weather/WeatherTest.java
@@ -19,13 +19,14 @@ package org.apache.nlpcraft.examples.weather;
 
 import com.google.gson.Gson;
 import com.google.gson.reflect.TypeToken;
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
 import org.apache.nlpcraft.common.NCException;
 import org.apache.nlpcraft.model.tools.test.NCTestClient;
 import org.apache.nlpcraft.model.tools.test.NCTestClientBuilder;
 import org.apache.nlpcraft.model.tools.test.NCTestResult;
+import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import java.io.IOException;
 import java.lang.reflect.Type;
@@ -42,62 +43,68 @@ import static org.junit.jupiter.api.Assertions.*;
  */
 class WeatherTest {
     private static final Gson GSON = new Gson();
-    private static final Type TYPE_MAP_RESP = new TypeToken<HashMap<String, Object>>() {}.getType();
-    
-    private NCTestClient cli;
-    
+    private static final Type TYPE_MAP_RESP = new TypeToken<HashMap<String, Object>>() {
+    }.getType();
+
+    private NCTestClient client;
+
     /**
      * Checks given intent.
      *
-     * @param txt Sentence.
-     * @param intentId Intent ID.
+     * @param txt          Sentence.
+     * @param intentId     Intent ID.
      * @param shouldBeSame Equal vs. non-equal intent ID flag.
      */
     private void checkIntent(String txt, String intentId, boolean shouldBeSame) throws NCException, IOException {
-        NCTestResult res = cli.ask(txt);
-        
+        NCTestResult res = client.ask(txt);
+
         assertTrue(res.isOk(), () -> res.getResultError().get());
 
         assert res.getResult().isPresent();
-        
+
         Map<String, Object> map = GSON.fromJson(res.getResult().get(), TYPE_MAP_RESP);
-        
+
         if (shouldBeSame)
             assertEquals(intentId, map.get("intentId"));
         else
             assertNotEquals(intentId, map.get("intentId"));
     }
-    
+
     @BeforeEach
     void setUp() throws NCException, IOException {
-        cli = new NCTestClientBuilder().newBuilder().build();
-        
-        cli.open("nlpcraft.weather.ex");  // See weather_model.json
+        NCEmbeddedProbe.start(WeatherModel.class);
+
+        client = new NCTestClientBuilder().newBuilder().build();
+
+        client.open("nlpcraft.weather.ex");  // See weather_model.json
     }
-    
+
     @AfterEach
     void tearDown() throws NCException, IOException {
-        cli.close();
+        if (client != null)
+            client.close();
+
+        NCEmbeddedProbe.stop();
     }
-    
+
     @Test
     void test() throws NCException, IOException {
         // Empty parameter.
-        assertTrue(cli.ask("").isFailed());
-    
+        assertTrue(client.ask("").isFailed());
+
         // Only latin charset is supported.
-        assertTrue(cli.ask("El tiempo en España").isFailed());
-    
+        assertTrue(client.ask("El tiempo en España").isFailed());
+
         // Should be passed.
         checkIntent("What's the local weather forecast?", "fcast", true);
         checkIntent("What's the weather in Moscow?", "curr", true);
         // Can be answered with conversation.
         checkIntent("Chance of snow?", "curr", true);
         checkIntent("Moscow", "curr", true);
-        
-        cli.clearConversation();
-    
+
+        client.clearConversation();
+
         // Cannot be answered without conversation.
-        assertTrue(cli.ask("Moscow").isFailed());
+        assertTrue(client.ask("Moscow").isFailed());
     }
 }
diff --git a/src/test/scala/org/apache/nlpcraft/model/intent/dsl/NCDslTest.java b/src/test/scala/org/apache/nlpcraft/model/intent/dsl/NCDslTest.java
index 8ea9cba..9f61f65 100644
--- a/src/test/scala/org/apache/nlpcraft/model/intent/dsl/NCDslTest.java
+++ b/src/test/scala/org/apache/nlpcraft/model/intent/dsl/NCDslTest.java
@@ -29,27 +29,28 @@ import static org.junit.jupiter.api.Assertions.*;
  * DSL test model test. Make sure to start up the NLPCraft server before running this test.
  */
 class NCDslTest {
-    private NCTestClient cli;
+    private NCTestClient client;
 
     @BeforeEach
     void setUp() throws NCException, IOException {
         // Start embedded probe with the test model.
         NCEmbeddedProbe.start(NCDslTestModel.class);
 
-        cli = new NCTestClientBuilder().newBuilder().build();
+        client = new NCTestClientBuilder().newBuilder().build();
 
-        cli.open("nlpcraft.dsl.test");
+        client.open("nlpcraft.dsl.test");
     }
 
     @AfterEach
     void tearDown() throws NCException, IOException {
-        cli.close();
+        if (client != null)
+            client.close();
     
         NCEmbeddedProbe.stop();
     }
 
     @Test
     void test() throws NCException, IOException {
-        assertTrue(cli.ask("aa").isOk());
+        assertTrue(client.ask("aa").isOk());
     }
 }
diff --git a/src/test/scala/org/apache/nlpcraft/models/stm/NCStmTestModelSpec.java b/src/test/scala/org/apache/nlpcraft/models/stm/NCStmTestModelSpec.java
index f95ae31..c995f51 100644
--- a/src/test/scala/org/apache/nlpcraft/models/stm/NCStmTestModelSpec.java
+++ b/src/test/scala/org/apache/nlpcraft/models/stm/NCStmTestModelSpec.java
@@ -17,13 +17,14 @@
 
 package org.apache.nlpcraft.models.stm;
 
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
 import org.apache.nlpcraft.common.NCException;
 import org.apache.nlpcraft.model.tools.test.NCTestClient;
 import org.apache.nlpcraft.model.tools.test.NCTestClientBuilder;
 import org.apache.nlpcraft.model.tools.test.NCTestResult;
+import org.apache.nlpcraft.probe.embedded.NCEmbeddedProbe;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
 
 import java.io.IOException;
 
@@ -38,6 +39,8 @@ class NCStmTestModelSpec {
     
     @BeforeEach
     void setUp() throws NCException, IOException {
+        NCEmbeddedProbe.start(NCStmTestModel.class);
+
         client = new NCTestClientBuilder().newBuilder().build();
         
         client.open("nlpcraft.stm.test"); // See phone_model.json
@@ -45,7 +48,10 @@ class NCStmTestModelSpec {
     
     @AfterEach
     void tearDown() throws NCException, IOException {
-        client.close();
+        if (client != null)
+            client.close();
+
+        NCEmbeddedProbe.stop();
     }
     
     /**