diff --git a/libs/sepia-assist-v2.5.0-javadoc.jar b/libs/sepia-assist-v2.5.0-javadoc.jar
deleted file mode 100644
index fb82efc..0000000
Binary files a/libs/sepia-assist-v2.5.0-javadoc.jar and /dev/null differ
diff --git a/libs/sepia-assist-v2.5.1-javadoc.jar b/libs/sepia-assist-v2.5.1-javadoc.jar
new file mode 100644
index 0000000..cb17125
Binary files /dev/null and b/libs/sepia-assist-v2.5.1-javadoc.jar differ
diff --git a/libs/sepia-assist-v2.5.0.jar b/libs/sepia-assist-v2.5.1.jar
similarity index 56%
rename from libs/sepia-assist-v2.5.0.jar
rename to libs/sepia-assist-v2.5.1.jar
index 6afca6d..d1b52d7 100644
Binary files a/libs/sepia-assist-v2.5.0.jar and b/libs/sepia-assist-v2.5.1.jar differ
diff --git a/libs/sepia-chat-v1.3.0-javadoc.jar b/libs/sepia-chat-v1.3.0-javadoc.jar
deleted file mode 100644
index c307fb4..0000000
Binary files a/libs/sepia-chat-v1.3.0-javadoc.jar and /dev/null differ
diff --git a/libs/sepia-chat-v1.3.0.jar b/libs/sepia-chat-v1.3.0.jar
deleted file mode 100644
index b6ad8a6..0000000
Binary files a/libs/sepia-chat-v1.3.0.jar and /dev/null differ
diff --git a/libs/sepia-chat-v1.3.1-javadoc.jar b/libs/sepia-chat-v1.3.1-javadoc.jar
new file mode 100644
index 0000000..78218a9
Binary files /dev/null and b/libs/sepia-chat-v1.3.1-javadoc.jar differ
diff --git a/libs/sepia-chat-v1.3.1.jar b/libs/sepia-chat-v1.3.1.jar
new file mode 100644
index 0000000..259fccb
Binary files /dev/null and b/libs/sepia-chat-v1.3.1.jar differ
diff --git a/libs/sepia-core-tools-v2.2.6-javadoc.jar b/libs/sepia-core-tools-v2.2.6-javadoc.jar
deleted file mode 100644
index 0ff1ac2..0000000
Binary files a/libs/sepia-core-tools-v2.2.6-javadoc.jar and /dev/null differ
diff --git a/libs/sepia-core-tools-v2.2.7-javadoc.jar b/libs/sepia-core-tools-v2.2.7-javadoc.jar
new file mode 100644
index 0000000..453d960
Binary files /dev/null and b/libs/sepia-core-tools-v2.2.7-javadoc.jar differ
diff --git a/libs/sepia-core-tools-v2.2.6.jar b/libs/sepia-core-tools-v2.2.7.jar
similarity index 53%
rename from libs/sepia-core-tools-v2.2.6.jar
rename to libs/sepia-core-tools-v2.2.7.jar
index 1a6b7c9..fcc37f0 100644
Binary files a/libs/sepia-core-tools-v2.2.6.jar and b/libs/sepia-core-tools-v2.2.7.jar differ
diff --git a/pom.xml b/pom.xml
index 1301b91..f31dad3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,7 +3,7 @@
net.b07z.sepia.sdk
sepia-sdk-java
- 0.9.22
+ 0.9.23
SEPIA SDK
Tools to develop services for the SEPIA framework
https://sepia-framework.github.io
@@ -29,11 +29,11 @@
net.b07z.sepia.server.assist
sepia-assist-API
- 2.5.0
+ 2.5.1
-->
-
+
com.sparkjava
spark-core
@@ -97,9 +97,9 @@
net.b07z.sepia.server.core
sepia-core-tools
- 2.2.6
+ 2.2.7
system
- ${basedir}/libs/sepia-core-tools-v2.2.6.jar
+ ${basedir}/libs/sepia-core-tools-v2.2.7.jar
@@ -115,9 +115,9 @@
net.b07z.sepia.websockets
sepia-websockets
- 1.3.0
+ 1.3.1
system
- ${basedir}/libs/sepia-chat-v1.3.0.jar
+ ${basedir}/libs/sepia-chat-v1.3.1.jar
@@ -138,9 +138,9 @@
net.b07z.sepia.server.assist
sepia-assist-API
- 2.5.0
+ 2.5.1
system
- ${basedir}/libs/sepia-assist-v2.5.0.jar
+ ${basedir}/libs/sepia-assist-v2.5.1.jar
@@ -150,7 +150,7 @@
junit
junit
- 4.12
+ 4.13.1
test
diff --git a/src/main/java/net/b07z/sepia/sdk/main/TestServiceLocally.java b/src/main/java/net/b07z/sepia/sdk/main/TestServiceLocally.java
index 2ff4dc5..8ec5b03 100644
--- a/src/main/java/net/b07z/sepia/sdk/main/TestServiceLocally.java
+++ b/src/main/java/net/b07z/sepia/sdk/main/TestServiceLocally.java
@@ -1,6 +1,7 @@
package net.b07z.sepia.sdk.main;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -8,20 +9,31 @@
import org.slf4j.LoggerFactory;
import net.b07z.sepia.sdk.services.uid1007.RestaurantDemo;
+import net.b07z.sepia.sdk.substitutes.AnswerLoaderEmpty;
+import net.b07z.sepia.server.assist.answers.AnswerLoaderFile;
+import net.b07z.sepia.server.assist.answers.DefaultReplies;
import net.b07z.sepia.server.assist.assistant.LANGUAGES;
+import net.b07z.sepia.server.assist.data.Parameter;
import net.b07z.sepia.server.assist.interpreters.NluInput;
import net.b07z.sepia.server.assist.interpreters.NluKeywordAnalyzer;
import net.b07z.sepia.server.assist.interpreters.NluResult;
import net.b07z.sepia.server.assist.interpreters.Normalizer;
+import net.b07z.sepia.server.assist.interviews.AbstractInterview;
+import net.b07z.sepia.server.assist.interviews.Interview;
+import net.b07z.sepia.server.assist.interviews.InterviewInterface;
+import net.b07z.sepia.server.assist.interviews.InterviewResult;
import net.b07z.sepia.server.assist.interviews.InterviewServicesMap;
import net.b07z.sepia.server.assist.parameters.ParameterConfig;
+import net.b07z.sepia.server.assist.parameters.ParameterHandler;
import net.b07z.sepia.server.assist.server.Config;
import net.b07z.sepia.server.assist.server.ConfigTestServer;
import net.b07z.sepia.server.assist.services.ServiceInterface;
+import net.b07z.sepia.server.assist.services.ServiceResult;
+import net.b07z.sepia.server.core.assistant.PARAMETERS;
import net.b07z.sepia.server.core.tools.JSONWriter;
/**
- * Demonstrates how to test a service locally before using the upload function.
+ * Demonstrates how to test a service locally before using the upload function and offers methods to help with testing.
*
* @author Florian Quirin
*
@@ -41,25 +53,59 @@ public static void main(String[] args) {
ServiceInterface service = new RestaurantDemo();
String lang = LANGUAGES.EN;
- //Run
+ //Get a result using the regular-expressions defined inside custom service
setup();
NluResult result = testServiceWithRegExpTrigger(service, text, lang);
//Print result
log.info(JSONWriter.getPrettyString(result.getBestResultJSON()));
+
+ //Build a parameter - result is added to given NluResult
+ /*
+ Interview interviewApi = new Interview(result);
+ Parameter p1 = buildParameter(interviewApi, PARAMETERS.NUMBER); //global name or ...
+ Parameter p2 = buildParameter(interviewApi, PARAMETERS.TIME);
+ Parameter p3 = buildParameter(interviewApi, new RestaurantDemo.ReservationName()); //... parameter handler
+
+ //Print individual results
+ log.info(JSONWriter.getPrettyString(p1.getData()));
+ log.info(JSONWriter.getPrettyString(p2.getData()));
+ log.info(JSONWriter.getPrettyString(p3.getData()));
+ */
+
+ //Get service result from NLU result
+ ServiceResult sr = getServiceResultFromNluResult(service, result);
+
+ //Print result
+ log.info(JSONWriter.getPrettyString(sr.getResultJSONObject()));
}
/**
- * Setup some components of SEPIA.
+ * Setup some default components of SEPIA.
*/
public static void setup() {
+ setup(false);
+ }
+ /**
+ * Setup some default components of SEPIA and include the answers-file loader.
+ * NOTE: It will try to load answer files from "answers/" folder (may be useful if you want to include your custom files).
+ */
+ public static void setup(boolean includeAnswersFromFile){
//setup answers
- //Config.setAnswerModule(new AnswerLoaderFile()); //choose txt-file answers-module
- //DefaultReplies.setupDefaults(); //setup default question mapping for parameters and stuff
+ if (includeAnswersFromFile){
+ Config.answersPath = "answers/"; //new folder to copy answer files to
+ Config.setAnswerModule(new AnswerLoaderFile()); //choose txt-file answers-module
+ }else{
+ Config.setAnswerModule(new AnswerLoaderEmpty());
+ }
+ DefaultReplies.setupDefaults(); //setup default question mapping for parameters and stuff
//setup commands and parameters
InterviewServicesMap.load(); //services connected to interviews
ParameterConfig.setup(); //connect parameter names to handlers and other stuff
+
+ //reduce DB access for default test user (we are not running a DB in this test-mode)
+ ConfigTestServer.reduceDatabaseAccess(ConfigTestServer.getFakeUserId(null));
}
/**
@@ -95,7 +141,10 @@ public static NluResult testServiceWithRegExpTrigger(ServiceInterface service, S
int bestScoreIndex = 0; //for the test we assume that index 0 is our goal
log.info("Primary score: " + possibleScore.get(bestScoreIndex));
+
NluResult result = new NluResult(possibleCMDs, possibleParameters, possibleScore, bestScoreIndex);
+ result.input = input; //TODO: is this enough for simple testing?
+
return result;
}
@@ -108,4 +157,51 @@ private static String normalize(String text, String languageCode) {
return normText;
}
+ /**
+ * Very basic method to execute parameter 'build' process.
+ * @param interview - {@link Interview} object initialized with given {@NluResult}
+ * @param parameterName - name of a parameter, usually defined in {@link PARAMETERS}
+ */
+ public static Parameter buildParameter(Interview interview, String parameterName){
+ Parameter p = new Parameter(parameterName);
+ return buildParameter(interview, p);
+ }
+ /**
+ * Very basic method to execute parameter 'build' process.
+ * @param interview - {@link Interview} object initialized with given {@NluResult}
+ * @param parameterHandler - {@link ParameterHandler} e.g. your parameter from a custom service
+ */
+ public static Parameter buildParameter(Interview interview, ParameterHandler parameterHandler){
+ Parameter p = new Parameter(parameterHandler);
+ return buildParameter(interview, p);
+ }
+ /**
+ * Very basic method to execute parameter 'build' process.
+ */
+ private static Parameter buildParameter(Interview interview, Parameter p){
+ interview.getParameterInput(p);
+ interview.buildParameterOrComment(p, null);
+ return interview.nluResult.getOptionalParameter(p.getName(), null);
+ }
+
+ /**
+ * Build a service result for a given {@link ServiceInterface} from previously created {@link NluResult}.
+ * NOTE: Depending on how your answers-module is set up (default is empty) you will only get the answer-keys not the "real" answer.
+ * @param service - your custom service, e.g. "new RestaurantDemo()"
+ * @param nluResult - previously created {@link NluResult}, e.g. via {@link #testServiceWithRegExpTrigger}
+ * @return
+ */
+ public static ServiceResult getServiceResultFromNluResult(ServiceInterface service, NluResult nluResult){
+ //ServiceResult answer;
+ List services = Arrays.asList(service);
+ InterviewInterface interview = new AbstractInterview();
+ interview.setCommand(nluResult.getCommand());
+ interview.setServices(services);
+ InterviewResult iResult = interview.getMissingParameters(nluResult);
+ if (iResult.isComplete()){
+ return interview.getServiceResults(iResult);
+ }else{
+ return iResult.getApiComment();
+ }
+ }
}
diff --git a/src/main/java/net/b07z/sepia/sdk/services/uid1007/CoronaDataEcdc.java b/src/main/java/net/b07z/sepia/sdk/services/uid1007/CoronaDataEcdc.java
index 5eb61d4..76bac42 100644
--- a/src/main/java/net/b07z/sepia/sdk/services/uid1007/CoronaDataEcdc.java
+++ b/src/main/java/net/b07z/sepia/sdk/services/uid1007/CoronaDataEcdc.java
@@ -84,10 +84,10 @@ public ServiceAnswers getAnswersPool(String language) {
//Build German answers
if (language.equals(LANGUAGES.DE)){
answerPool
- .addAnswer(successAnswer, 0, "Hier sind die aktuellen, weltweiten Corona Zahlen des ECDC. "
- + "Fälle insgesamt: <2>. Tote insgesamt: <3>.")
- .addAnswer(successWithCountry, 0, "Hier sind die aktuellen Corona Zahlen des ECDC für <1>. "
- + "Fälle insgesamt: <2>. Tote insgesamt: <3>. Neue Fälle: <4>.")
+ .addAnswer(successAnswer, 0, "Hier sind die aktuellen, weltweiten Corona Zahlen des ECDC. "
+ + "Fälle insgesamt: <2>. Tote insgesamt: <3>.")
+ .addAnswer(successWithCountry, 0, "Hier sind die aktuellen Corona Zahlen des ECDC für <1>. "
+ + "Fälle insgesamt: <2>. Tote insgesamt: <3>. Neue Fälle: <4>.")
.addAnswer(okAnswer, 0, "Die Anfrage ist angekommen aber ich kann sie nicht bearbeiten.")
;
return answerPool;
@@ -95,10 +95,10 @@ public ServiceAnswers getAnswersPool(String language) {
//Or default to English
}else{
answerPool
- .addAnswer(successAnswer, 0, "Here are the recent, worldwide Corona numbers from the ECDC. "
- + "Total cases: <2>. Total deaths: <3>.")
- .addAnswer(successWithCountry, 0, "Here are the recent ECDC Corona numbers for <1>. "
- + "Total cases: <2>. Total deaths: <3>. New cases: <4>.")
+ .addAnswer(successAnswer, 0, "Here are the recent, worldwide Corona numbers from the ECDC. "
+ + "Total cases: <2>. Total deaths: <3>.")
+ .addAnswer(successWithCountry, 0, "Here are the recent ECDC Corona numbers for <1>. "
+ + "Total cases: <2>. Total deaths: <3>. New cases: <4>.")
.addAnswer(okAnswer, 0, "Message received but I could not fulfill your request.")
;
return answerPool;
diff --git a/src/main/java/net/b07z/sepia/sdk/services/uid1007/WorkoutHelperDemo.java b/src/main/java/net/b07z/sepia/sdk/services/uid1007/WorkoutHelperDemo.java
index 952dcb1..b1ac37f 100644
--- a/src/main/java/net/b07z/sepia/sdk/services/uid1007/WorkoutHelperDemo.java
+++ b/src/main/java/net/b07z/sepia/sdk/services/uid1007/WorkoutHelperDemo.java
@@ -210,7 +210,7 @@ public ServiceResult getResult(NluResult nluResult) {
ServiceBuilder service = new ServiceBuilder(nluResult);
service.answer = Answers.getAnswerString(nluResult, followUpFinish);
service.status = "success";
- /*boolean wasSent =*/ service.sendFollowUpMessage(nluResult.input, service.buildResult());
+ /*boolean wasSent =*/ service.sendFollowUpMessage(service.buildResult());
return;
}).getJson());
//Interval minutes
@@ -220,7 +220,7 @@ public ServiceResult getResult(NluResult nluResult) {
ServiceBuilder service = new ServiceBuilder(nluResult);
service.answer = Answers.getAnswerString(nluResult, followUpIntervalMinutes, halfTimeMinutes);
service.status = "success";
- /*boolean wasSent =*/ service.sendFollowUpMessage(nluResult.input, service.buildResult());
+ /*boolean wasSent =*/ service.sendFollowUpMessage(service.buildResult());
return;
}).getJson());
}
@@ -231,7 +231,7 @@ public ServiceResult getResult(NluResult nluResult) {
ServiceBuilder service = new ServiceBuilder(nluResult);
service.answer = Answers.getAnswerString(nluResult, followUpIntervalSeconds, seconds);
service.status = "success";
- /*boolean wasSent =*/ service.sendFollowUpMessage(nluResult.input, service.buildResult());
+ /*boolean wasSent =*/ service.sendFollowUpMessage(service.buildResult());
return;
}).getJson());
diff --git a/src/main/java/net/b07z/sepia/sdk/substitutes/AnswerLoaderEmpty.java b/src/main/java/net/b07z/sepia/sdk/substitutes/AnswerLoaderEmpty.java
new file mode 100644
index 0000000..07109e4
--- /dev/null
+++ b/src/main/java/net/b07z/sepia/sdk/substitutes/AnswerLoaderEmpty.java
@@ -0,0 +1,43 @@
+package net.b07z.sepia.sdk.substitutes;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import net.b07z.sepia.server.assist.answers.AnswerLoader;
+import net.b07z.sepia.server.assist.interpreters.NluResult;
+import net.b07z.sepia.server.core.data.Answer;
+
+/**
+ * Substitution for a proper {@link AnswerLoader} that simply returns the answer key (or direct answer).
+ */
+public class AnswerLoaderEmpty implements AnswerLoader {
+
+ //stores the references to all answers in different languages
+ Map>> answers = new HashMap<>();
+
+ @Override
+ public void setupAnswers(){}
+
+ @Override
+ public void updateAnswerPool(Map>> answersPool){
+ this.answers = answersPool;
+ }
+
+ @Override
+ public String getAnswer(NluResult nluResult, String key){
+ return key;
+ }
+ @Override
+ public String getAnswer(NluResult nluResult, String key, Object... wildcards){
+ return key;
+ }
+ @Override
+ public String getAnswer(Map> memory, NluResult nluResult, String key){
+ return key;
+ }
+ @Override
+ public String getAnswer(Map> memory, NluResult nluResult, String key, Object... wildcards){
+ return key;
+ }
+}