Chatbot: Trying to understand Interactive Learning - chatbot

Doubts:
It seems that interactive learning completely ignored pre-defined
stories.
How do I create multiple stories with interactive learning? Would have to make a way "happy", generate the file, start a new training
and then join the files? I tried to fix multiple paths, in the file
generated by the end it seems to have become a single story.
I'm working with Rasa Core, to create context conversations in a chatbot. First I did this basic tutorial and then tried to make a story file using markers, to make sure I understood how to use markers.
stories.md - It looks like this:
## Story Hi
* greet
- utter_greet
## Story Good Morning
* mood_great
- utter_happy
## Story bad_day
* mood_unhappy
- utter_cheer_up
- utter_did_that_help
> marking_bad_day
## Story bad_day Best
> marking_bad_day
* mood_affirm
- utter_happy
## Story bad_day nothing changed
> marking_bad_day
* mood_deny
- utter_goodbye
## say goodbye
* goodbye
- utter_goodbye
But by testing the conversations with the robot, he does not seem to follow the markers. So I mixed the learning of the third tutorial, which is using interactive learning. This seems to have solved my problem, I really managed to make the bot follow the flow wanted, unfortunately with a great effort of learning.
New stories.md:
## Generated Story 5325363759313905425
* greet
- utter_greet
* mood_unhappy
- utter_cheer_up
- utter_did_that_help
* mood_affirm
- utter_happy
* greet
- utter_greet
* mood_unhappy
- utter_cheer_up
- utter_did_that_help
* mood_affirm
- utter_happy
* greet
- utter_greet
* mood_unhappy
- utter_cheer_up
- utter_did_that_help
* mood_deny
- export

after you finished online training, type 0 to export dialogue and then enter filename (eg. story01.md). Now open trained story (story01.md) and copy/paste to data/stories.md or wherever you stored your stories.md training file.
Can you provide your train_online.py file maybe?

Related

how can we change datasource based on the tags we are triggering in karate?

I have a Scenario Outline which has 2 tags #Smoke and #Regression. Inside the Scenario Outline there is a simple Http GET call. We have assigned 2 different tags to the same Scenario Outlie because api is same for both smoke and regression and there are minute differences in the datasource i.e in the headers. Is there any way we can switch the inputs or datasource depending on the tag we trigger at run time?
I strongly recommend not overcomplicating tests like this. As of now, there is no way to get the tags that were used on the command-line. The recommendation is to use the karate.env and then do some conditional logic in karate-config.js, you can then set some variables. Using the variables in your tests is then up to you.
Also see Environment Tags: https://github.com/karatelabs/karate#environment-tags
For completeness - karate.tags will get you the tags for the currently running Scenario: https://github.com/karatelabs/karate#karate-tags
Example:
#smoke
Scenario:
* def headerJson = {}
* if (karate.tags.includes('smoke')) headerJson.foo = 'bar'
* url 'https://httpbin.org/anything'
* headers headerJson
* method get

How to get Script Parameters ( SuiteScript 2.0) using VS Code?

I would like to know if there is any way to get all the scripts parameters when you create a new script (SuiteScript 2.0) using VS Code.
I'm aware that it is possible when using Eclipse IDE but I do really would like to keep using VS Code as I'm already using for Python and JavaScript.
This is what I'm looking for:
/**
* Function definition to be triggered before record is loaded.
*
* Task #5060 : calculate PO Spent Amount and Balance in realtime
*
* #param {Object} scriptContext
* #param {Record} scriptContext.newRecord - New record
* #param {Record} scriptContext.oldRecord - Old record
* #param {string} scriptContext.type - Trigger type
* #Since 2015.2
*/
BTW, I'm already using VS Code Intelisense and NetSuite Uploader extensions.
Thanks
At the time of writing, there are no official plugins from Netsuite for VS Code, only Eclipse & Webstorm are available. However, there is an unofficial plugin from Head-in-the-Cloud that might do what you're after.

AEM 6.1 configuration for Search Sugesstion and StopWords

We are using AEM6.1 and implementing OOTB search functionality. The requirement is that we have to implement StopWords(will not user to search common words such as like,for,is) and Spellcheck(Did you mean ?) features as part of this implementation.Can anyone suggest as the best way to achieve this requirement.
Thanks
You can configure stopwords in your oak index definition.
-fulltextIndex
- jcr:primaryType = "oak:QueryIndexDefinition"
- compatVersion = 2
- type = "lucene"
- async = "async"
+ analyzers
+ default
- class = "org.apache.lucene.analysis.standard.StandardAnalyzer"
- luceneMatchVersion = "LUCENE_47" (optional)
+ stopwords (nt:file)
Please check the following documentation on Oak[1].
To see more details on this it is better to follow the JIRA story on the Jackrabbit Oak Jira[2]. This was part of Oak1.1.2 and since AEM6.1 comes with Oak1.2.2, you should be able to configure the stop words directly.
[1] - https://jackrabbit.apache.org/oak/docs/query/lucene.html
[2] - https://issues.apache.org/jira/browse/OAK-2177

Google Sheets not showing custom function in autocomplete

I can't get the google sheets autocomplete to show my custom function even when I use Google's version (see below). I have the jsdoc info correctly formatted, but it still doesn't show up. I'm sure I'm just overlooking something stupid, but I can't find it. So what am I missing?
Google's demo code:
/**
* Multiplies the input value by 2.
*
* #param {number} input The value to multiply.
* #customfunction
*/
function double(input) {
return input * 2;
}
BTW, I'm using Chrome to develop my custom functions. Also, my function works, just no autocomplete. All the built-in functions autocomplete works.
Thanks in advance for the help!
Brad
I managed to get the custom function autocomplete working yesterday. It seems to only work with container-bound scripts, so any JSDoc info inside a script being used as a library will not come across. To verify it works, I did the following:
Create new Google Sheet
Open Script Editor
Enter the following in the script:
/**
* Returns amount multiplied by itself.
*
* #param {Number} amount The amount to be multiplied by itself.
* #return {Number} The amount multiplied by itself.
* #customfunction
*/
function test(amount) {
return amount*amount;
}
Then, when entering =test into a cell in the spreadsheet, the information above the function appears in the autocomplete hint, like any other built-in spreadsheet function.

Zend Framework Controller to Module routing

So i have been doing my best trying to absorb as much as i can about the Zend Framework which is pretty new to me, i'm about two weeks in since my first attempts and being doing well so far.
However i have run into a small issue i just can't figure out.
So here's the deal, i have a standard Zend Framework project with a number of modules in it. Like this :
- Project
- - Application
- - - configs
- - - controllers
- - - - IndexController
- - - - WMSController
- - - forms
- - - layouts
- - - models
- - - modules
- - - - content
- - - - - controllers
- - - - - - IndexController
- - - - - models
- - - - - views
- - - - - Bootstrap
- - - views
- - - bootstrap
- - public
etc..
Now i have a simple test link set in the view for the WMSController wich is supposed to direct someone klicking it to the IndexController of the content module.
test link to content module
Now as you can probably see this link is NOT going to work since it is pointing towards localhost/wms/content which would be the content action in the WMSController which doesn't exist at this moment.
Now what i want to do is to make the wms/content actually point towards the IndexController of the content module. Why? Well i simply do not want a user to type localhost/content to get to the content module which is part of the WMS. I want to force them to get trough the WMS controller first.
I have read numerous things about routing being the solution using the bootstrap or the autoloader but pretty much all of them simply help you with pointing a certain url to a specific action in a specific controller.
What i want is a url to point to a specific action in a specific controller in a specific module.
NOTE: All the other controllers and views are still the default generated versions with no changes made to them yet!
If anyone could show me a code example of how this is done it would be much appreciated!
If I understand correctly you simply want /wms/content to point to module content controller Index action index. This is a case where a simple router will work(at least until you want to get more complex)
In your application.ini add these lines:
resources.router.routes.content.route = "wms/content"
resources.router.routes.content.defaults.module = "content"
resources.router.routes.content.defaults.controller = "index"
resources.router.routes.content.defaults.action = "index"
this is the easiest way to build a custom route.
*Note:*The 4th parameter from the left is the name of the route, so if you use it with a method that allows using route names (the url() helper for example) you can just use the route name. $this->url(array(), 'content');
This is how you would use a named route, personally I would probably consider renaming my module wms (if possible and practical) and just redirecting there from the default Index controller. Because once you start with named and custom routes it's hard to quit...
From your question that you
want to force them to get trough the WMS controller first
You can do one thing. Whatever you want to do in WMSController whenever a user types localhost/content/** you can put it in the parent class for ALL THE CONTROLLERS IN MODULE: 'CONTENT'. This way you can check for something/ perform operations everytime a request comes to this controller (no matter if the user wanted to go to the other module.)
class Content_AnyController extends MyControllers_Controller_Action_Admin{
....
}
where
class Reviewmo_Controller_Action extends Zend_Controller_Action{
public function init(){
//Things you want to do each time
}
}
This is what I think you want to achieve because if you want to just simply redirect to WMSController's ContentAction you can simply redirect to that controller.