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; + } +}