All notable changes for the Xatkit runtime component will be documented in this file.
Note that there is no changelog available for the initial release of the platform (2.0.0), you can find the release notes here.
The changelog format is based on Keep a Changelog, and this project adheres to Semantic Versioning
- Utility test class
AbstractActionTest
andAbstractEventProviderTest
that eases the definition of action and event provider test classes, respectively. - Class
EmptyContentRestHandler
which can be used to define REST endpoints that do not accept any request content (this is for example the case for most of the GET requests). - Support for pre/post processors wrapping intent recognition (see #252). This allows to define specific functions to adapt the textual input (e.g. to improve the intent recognition quality), as well as the computed intent (e.g. to normalize values in extracted contexts). This change breaks the public API: the
IntentRecognitionProvider
interface is now an abstract class, existing classes implementing the interface should now extend it. - Post-processor
RemoveEnglishStopWordsPostProcessor
that removes English stop words from recognized intent's parameter values that have been extracted fromany
entities. This processor should help normalizing DialogFlow values when usingany
entities (see #265). The processor can be activated using the following property:xatkit.recognition.postprocessors = RemoveEnglishStopWords
. - Post-processor
IsEnglishYesNoQuestion
that sets the context parameternlp.isYesNo
totrue
if the user input is a yes/no question, andfalse
otherwise (see #276). - Post-processor
EnglishSentiment
that sets the context parameternlp.sentiment
to a value in["Very Negative", "Negative", "Neutral", "Positive", "Very Positive"]
(see #275). - Hook method
RuntimeArtifactAction#beforeDelay(delay)
that can be extended by concrete messaging actions that need to perform any computation before a potential message delay (specified withxatkit.message.delay
). This is for example the case if the action needs to notify a client to print a waiting message or loading dots. This change does not break the public API: the hook does nothing if not implemented. - Support for
CompositeEntity
in the DialogFlow intent provider (see #271). The keyword was already present in the language but the mapping to DialogFlow wasn't working properly (nested values were not supported by the connector).CompositeEntities
can be accessed as multi-level maps, e.g.(context.get("context").get("composite") as Map).get("nested1")
. - New utility methods in
HttpEntityHelper
to create and parseHttpEntity
instances. - New configuration option
xatkit.dialogflow.confidence.threshold
to set the minimum confidence level of matched intent. This threshold is used to discard matched intents that have a low confidence. The default value for this option is0
(accept all intents). Note that intents usingany
entities cannot be filtered by the confidence threshold (these intents typically have a low confidence score) - File-based logging with rotation (fixes #268). Xatkit now creates a
logs
directory next to the executed properties file to store the logs of the bot. The maximum size of a log fragment is 10MB and the default rollover strategy is 100. Archived logs are compressed. This feature is enabled for both the production and the test environments.
HttpHandler
now supportsHttpEntity
instances returned fromRestHandler#handle
. This allows to define handlers that directly return a validHttpEntity
(e.g. the content of an HTML page). In this case, theRestHandler
implementation is responsible of theHttpEntity
creation.RestHandler
instances can now throw aRestHandlerException
to notify the server that an error occurred when handling the request. For now this exception is used to return a 404 status code instead of 200.- Change log level of non-critical messages in
XatkitServer
,DialogFlow
andRegEx
intent recognition providers. This reduces the amount of noise in Xatkit logs. RestHandlerException
now supports HTTP error codes, and theHttpHandler
uses this value to return the corresponding HTTP status to the client.- Monitoring endpoint
GET: /analytics/monitoring/session
now returns a404
with an error message if thesessionId
parameter is missing or if the corresponding session cannot be found. This change breaks the public API: client application expecting a status code200
should be updated. EventInstanceBuilder#build()
now logs aDEBUG
message for each parameter that has not been assigned a value. This change does not break the public API: the check only produces log messages that can be used to spot changes in external APIs.XatkitSession
now logs a message when constructed. This eases the reading of raw logs. The similar log message already defined inDialogFlowApi
has been removed (this change tracks session created from anyIntentRecognitionProvider
).IntentRecognitionProvider
is now an interface, the abstract implementation including pre/post processing has been moved toAbstractIntentRecognitionProvider
. This changes allows to mockIntentRecognitionProvider
. This change breaks the public API.
- Class
AdminHttpHandler
: this class was designed to test the ReactPlatform, it didn't make sense to keep it in xatkit-runtime. The functionality of theAdminHttpHandler
are still available when starting a bot based on the ReactPlatform, but the handlers are now defined in the xatkit-react-platform project. - Native support for deploying bots on HTTPS. Xatkit bots can be deployed behind a reverse proxy with HTTPS enabled, we don't need to provide an ad-hoc solution to support this. See this wiki article for more information.
- Classes
RestAction
,RestGetAction
, andRestPostAction
. These classes are now defined in the Rest Platform. The dependency to Unirest has been removed too and moved to the Rest Platform.
- #251: AdminHttpHandler should be moved to react platform
- The
XatkitServer
now correctly returns a404
error if there is noRestHandler
associated to a requested URI. - #252:: Pre/Post processing of user inputs
- #260: Public react server URL should be decoupled from the server base URL
- #267: Change log level of XatkitServer logs to debug
- #269: Reduce default logging of DialogFlow API
- #252: Pre/Post processing of user inputs
- #265: An option to remove stop words from parameters extracted with any
- #267: Change log level of XatkitServer logs to debug
- #269: Reduce default logging of DialogFlow API
- #271: Add support for composite entity
- #275: Add sentiment analysis post-processor
- #276: Add post-processor extracting whether a user input is a yes/no question
- #279: Monitoring API: error responses should use proper HTTP codes
- Configuration option
xatkit.message.delay
that allows to specify a delay (in milliseconds) the bot should wait for before sending a message (0
by default, meaning that the bots replies immediately). This option impacts all theRuntimeActions
inheriting fromRuntimeArtifactMessage
. - Support for from clause in execution rule. Execution rules now accept an optional
from <PlatformDefinition>
that allows to filter execution rules based on the platform that triggered the event. When the a from clause is specified Xatkit will take it into account to only execute the rules matching both the triggered event and the specified platform. This allows to define precise bot interactions when manipulating multiple messaging platforms. - Support for all the Http methods supported by Apache http-core in XatkitServer (fix #222). This includes requests with parameters (
?param=value
), that are correctly mapped to the handler corresponding to their base URI. This change breaks the public API: it is now required to specify theHttpMethod
when registering a rest handler. - We have replaced the previous monitoring API with a brand new REST API that will offer us the required flexibility to expose additional information in the future. You can take a look at the available endpoints and the associated responses in this wiki article. Note that this API is far from perfect, and we already have a couple of opened issues to improve it (see here and here).
RuntimeActions
creating a dedicatedXatkitSession
(e.g. messaging actions getting a session based on the targeted channel) now update the execution rule's session to reflect the session shift. This allows, in the context of an event reaction bot, to set session variables in reaction to an event that will be merged in the session corresponding to the messaging action triggered within the rule.AdminHttpHandler
now uses a list of test client names to simulate multi-client bots using the web-based component. The name is printed in the rendered HTML page, and used to initialize the xatkit-react client.- Support for bots hosted on
https
domains. The Xatkit configuration can now contain axatkit.server.ssl.keystore
property specifying the location of the keystore to use to sign http responses. Additional properties specifying keystore password are also required, check Xatkit configuration options for more information.
JsonEventMatcher
now logs the builder content even if the intent definition is not known. This allows to inspect the logs and copy-paste new events easily in the platform editor (the builder content is populated from the received JSON payload and is printed using the platform language syntax).XatkitCore
now loads.execution
files instead of.xmi
. This change breaks the public API: existing.properties
file need to be updated with the path to the.execution
file.ExecutionService
now inherits fromXbaseInterpreter
, offering complete support for Xbase expressions in the execution models. This change breaks the public API: the interpreter public methods have changed to reflect this integration.- Renamed
DefaultIntentProvider
toRegExIntentProvider
to reflect how intents are extracted. This change breaks the public API: classes depending onDefaultIntentProvider
need to update their dependencies. The behavior of the provider is not changed by this update. - The monitoring database structure has been changed. Data stored with previous versions of Xatkit won't be accessible with the new version, and existing databases need to be deleted/moved before starting bots to avoid data corruption.
XatkitSession.merge(other)
now performs a deep copy of theother
session variables. This allows to update a merged session without altering the base one.RegExIntentRecognitionProvider
is now case insensitive for training sentences. This means that the training sentencehi
now matchesHI
,Hi
, etc. This change does not affect mapping entities, that are still case sensitive. To extend the behavior to mapping entities we need to implement support for synonyms (see #261)
- Monitoring REST endpoints
POST /analytics/unmatched
andPOST /analytics/matched
have been removed and replace by a new monitoring API. This change breaks the public API: client applications relying on these endpoints need to adapt to the new API.
- Class
XatkitServerUtils
containing the configuration keys and default values related to the Xatkit server. - Xatkit now creates a
public
directory relative to the properties file that is used to store files that can be accessed through an URL. - Class
ContentHttpHandler
allowing to access files in thepublic
directory through public URLs. The URLs must follow this template:/content/my_file
, wheremy_file
is an existing file located atpublic/my_file
. TheXatkitServer
class now provides utility methods to create and update public files.
- Refactored the Intent/Event provider hierarchy and integrate it with the
RestHandler
infrastructure of Xatkit server. All the providers are now defined in anEventProvider
hierarchy, and can use theIntentRecognitionHelper
to recognize intents from inputs when needed. This change breaks the public API. See issues #219, #220, and #221 for more information. - The directory storing monitoring data is now relative to the properties file. See issue #243 for more information.
- Moved
CONFIGURATION_FOLDER_PATH
fromXatkit
toXatkitCore
. This allows to easily create file/directory relative to the properties file. This change breaks the public API. - HTTP header matching is now case insensitive. This fixes issues related to server-specific policy for headers (e.g. ngrok forwards them without any processing, while serveo forwards them in lower case).
- Intent libraries are now loaded the same way as platforms (using
$XATKIT/plugins/libraries/
directory). See issue #249 for additional information. - The generated HTML file to test react-based bots (accessible at
localhost:5000/admin
) now connects to the react platform usinglocalhost:5001
instead oflocalhost:5000/react
. This change is related to the new socket infrastructure used in Xatkit react platform (see the changelog here).
- Removed core library: the library is now a standalone project and is loaded the same way as platforms (using the
$XATKIT/plugins/
directory). See issue #249 for additional information. - Removed
SERVER_PORT_KEY
andDEFAULT_SERVER_PORT
fromXatkitServer
and moved them toXatkitServerUtils
. This change breaks the public API. - Removed Xatkit metamodels from the Xatkit runtime project. Xatkit runtime now has an explicit dependency to xatkit-metamodels.
- Removed Xatkit core resources from the Xatkit runtime project. The core resources are not needed anymore since all the platforms and libraries are loaded using the
$XATKIT/plugins
directory.
- Fixed an issue that caused
HttpHandler
to ignore single-line JSON payloads.
See the release notes here.