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

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


The following commit(s) were added to refs/heads/master by this push:
     new c0f0507  WIP Javadoc.
c0f0507 is described below

commit c0f0507aea4e1acedc9bc109b07cb5562885c3e0
Author: Aaron Radzinski <aradzin...@datalingvo.com>
AuthorDate: Thu Mar 24 19:29:50 2022 -0700

    WIP Javadoc.
---
 .../examples/lightswitch/LightSwitchJavaModel.java |  2 +-
 .../main/scala/org/apache/nlpcraft/NCModel.java    | 86 +++++++++++++++++++---
 2 files changed, 76 insertions(+), 12 deletions(-)

diff --git 
a/nlpcraft-examples/lightswitch/src/main/java/org/apache/nlpcraft/examples/lightswitch/LightSwitchJavaModel.java
 
b/nlpcraft-examples/lightswitch/src/main/java/org/apache/nlpcraft/examples/lightswitch/LightSwitchJavaModel.java
index b8c4a8f..a13b6d6 100644
--- 
a/nlpcraft-examples/lightswitch/src/main/java/org/apache/nlpcraft/examples/lightswitch/LightSwitchJavaModel.java
+++ 
b/nlpcraft-examples/lightswitch/src/main/java/org/apache/nlpcraft/examples/lightswitch/LightSwitchJavaModel.java
@@ -32,7 +32,7 @@ import java.util.stream.Collectors;
  * You can easily modify intent callbacks to perform the actual light 
switching using
  * HomeKit or Arduino-based controllers.
  * <p>
- * See 'README.md' file in the same folder for running and testing 
instructions.
+ * See 'README.md' file in the same folder for running and testing 
instructions. 
  */
 public class LightSwitchJavaModel extends NCModelAdapter {
     public LightSwitchJavaModel() {
diff --git a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModel.java 
b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModel.java
index 43404fc..311d05b 100644
--- a/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModel.java
+++ b/nlpcraft/src/main/scala/org/apache/nlpcraft/NCModel.java
@@ -18,35 +18,99 @@
 package org.apache.nlpcraft;
 
 /**
+ * User data model
+ * <p>
+ * Data model is a holder for user-define NLP processing logic that provides 
an interface to your data sources like a
+ * database or a SaaS application. NLPCraft employs model-as-a-code approach 
where entire data model is an
+ * implementation of this interface which can be developed using any JVM 
programming language like Java, Scala,
+ * Kotlin, or Groovy. The instance of this interface is passed to {@link 
NCModelClient} class and contains:
+ * <ul>
+ *     <li>Model {@link #getConfig() configurfation}.</li>
+ *     <li>Model {@link #getPipeline() processing pipeline}.</li>
+ *     <li>Life-cycle callbacks.</li>
+ * </ul>
+ * Note that model-as-a-code approach natively supports any software life 
cycle tools and frameworks like various
+ * build tools, CI/SCM tools, IDEs, etc. You don't need an additional 
web-based tools to manage
+ * some aspects of your data models - your entire model and all of its 
components are part of your project's source code.
+ * <p>
+ * In most cases, one would use a convenient {@link NCModelAdapter} adapter to 
implement this interface. Here's a snippet
+ * of the user data model from Lighswitch example:
+ * <pre class="brush: java, highlight: [1]">
+ * public class LightSwitchJavaModel extends NCModelAdapter {
+ *     public LightSwitchJavaModel() {
+ *         super(
+ *             new NCModelConfig("nlpcraft.lightswitch.java.ex", "LightSwitch 
Example Model", "1.0"),
+ *             new NCPipelineBuilder().withSemantic("en", 
"lightswitch_model.yaml").build()
+ *         );
+ *     }
  *
+ *     &#64;NCIntent("intent=ls term(act)={has(ent_groups, 'act')} 
term(loc)={# == 'ls:loc'}*")
+ *     NCResult onMatch(
+ *          &#64;NCIntentTerm("act") NCEntity actEnt,
+ *          &#64;NCIntentTerm("loc") List&lt;NCEntity&gt; locEnts
+ *      ) {
+ *          String status=actEnt.getId().equals("ls:on")?"on":"off";
+ *          String locations=locEnts.isEmpty() ? "entire house":
+ *              
locEnts.stream().map(NCEntity::mkText).collect(Collectors.joining(", "));
+ *
+ *          return new NCResult(
+ *              "Lights are [" + status + "] in [" + locations.toLowerCase() + 
"].",
+ *              NCResultType.ASK_RESULT
+ *          );
+ *      }
+ * }
+ * </pre>
+ *
+ * @see NCModelClient
+ * @see NCModelAdapter
  */
 public interface NCModel {
     /**
+     * Gets model configuration.
      *
-     * @return
+     * @return Model configuraiton.
      */
     NCModelConfig getConfig();
 
     /**
+     * Gets model NLP processing pipeline.
      *
-     * @return
+     * @return NLP processing pipeline.
      */
     NCPipeline getPipeline();
 
     /**
+     * A callback to accept or reject a parsed variant. This callback is 
called before any other callbacks at the
+     * beginning of the processing pipeline and it is called for each parsed 
variant.
+     * <p>
+     * Note that a given input query can have one or more possible different 
parsing variants. Depending on model
+     * configuration an input query can produce hundreds or even thousands of 
parsing variants that can significantly
+     * slow down the overall processing. This method allows to filter out 
unnecessary parsing variants based on
+     * variety of user-defined factors like number of entities, presence of a 
particular entnity in the variant, etc.
+     * <p>
+     * By default, this method accepts all variants (returns {@code true}).
      *
-     * @param vrn
-     * @return
+     * @param vrn A parsing variant to accept or reject.
+     * @return {@code True} to accept variant for further processing, {@code 
false} otherwise.
      */
     default boolean onVariant(NCVariant vrn) {
         return true;
     }
 
     /**
+     * A callback that is called when a fully assembled query context is 
ready. This callback is called after
+     * all {@link #onVariant(NCVariant)} callbacks are called but before any 
{@link #onMatchedIntent(NCIntentMatch)} are
+     * called, i.e. right before the intent matching is performed. It's called 
always once per input query processing.
+     * Typical use case for this callback is to perform logging, debugging, 
statistic or usage collection, explicit
+     * update or initialization of conversation context, security audit or 
validation, etc.
+     * <p>
+     * Default implementation returns {@code null}.
      *
-     * @param ctx
-     * @return
-     * @throws NCRejection
+     * @param ctx Input query context.
+     * @return Optional query result to return interrupting the default 
workflow. Specifically, if this method
+     *      returns a non-{@code null} result, it will be returned to the 
caller immediately overriding default behavior.
+     *      If the method returns {@code null} - the default processing flow 
will continue.
+     * @throws NCRejection This callback can throw the rejection exception to 
abort input query processing.
      */
     default NCResult onContext(NCContext ctx) throws NCRejection {
         return null;
@@ -54,7 +118,7 @@ public interface NCModel {
 
     /**
      *
-     * @param ctx
+     * @param ctx Input query context.
      * @return
      * @throws NCRejection
      */
@@ -64,7 +128,7 @@ public interface NCModel {
 
     /**
      *
-     * @param ctx
+     * @param ctx Input query context.
      * @param res
      * @return
      */
@@ -74,7 +138,7 @@ public interface NCModel {
 
     /**
      *
-     * @param ctx
+     * @param ctx Input query context.
      * @param e
      * @return
      */
@@ -84,7 +148,7 @@ public interface NCModel {
 
     /**
      *
-     * @param ctx
+     * @param ctx Input query context.
      * @param e
      * @return
      */

Reply via email to