This document shows the changes that are introduced into Smarti with the releases.

Smarti 0.8.0 Release Notes

Smarti 0.8.0 introduces a new result provider "Rocket.Chat-Search", providing live search on the integrated Rocket.Chat search functionality.

Upgrading

To ensure that the improved analysis result is available for all users, you should clear the collection caching analysis results.

Furthermore, all client-configurations that have the classical conversationsearch enabled get the new rocketchatsearch endpoint added.

A migration script is available. If you are not using one of the provided installation packages (deb, rpm) or docker, you must apply it manually:

migrate-07_0.7.1-to-0.8.0.js
function runDatabaseMigration() {
    // Drop analysis cache
    db.getCollection('analysis').drop();

    // Configure chatpal-provider for all clients that have a conversationsearch provider enabled
    var configuration = db.getCollection('configuration');
    var configs = configuration.find({ $and: [
            {'config.queryBuilder': { $elemMatch: { type: 'conversationsearch' }}},
            {'config.queryBuilder': { $not: { $elemMatch: { type: 'rocketchatsearch' }}}},
        ]});
    configs.forEach(function (c) {
       var conversationSearch = c.config.queryBuilder.find(function(b) { return b.type === 'conversationsearch'; });

        configuration.update({_id: c._id}, {
            $push: {
                'config.queryBuilder': {
                    name : 'rocketchatsearch',
                    displayName : 'rocketchatsearch',
                    type : 'rocketchatsearch',
                    enabled : conversationSearch.enabled,
                    unbound : false,
                    configuration : {
                        excludeCurrentChannel : false,
                        payload : {
                            rows : 10
                        }
                    }
                }
            }
        });
    });
}

Smarti 0.7.7 Release Notes

Sept 11th, 2018

Smarti 0.7.7 contains minor bug fixes for the Samrti Widget and deactivated filters for conversation search

Smarti 0.7.6 Release Notes

Smarti 0.7.5 Release Notes

June 14th, 2018

Smarti 0.7.5 contains a bug fixe for the Samrti Widget

Smarti 0.7.4 Release Notes

Smarti 0.7.3 Release Notes

May 15th, 2018

Smarti 0.7.3 contains a fix to the Chatpal Backend

Smarti 0.7.2 Release Notes

May 14th, 2018

Smarti 0.7.2 is contains improvements to to the Chatpal Backend and posting of multiple messages in the Widget

Smarti 0.7.1 Release Notes

April 20th, 2018

Smarti 0.7.1 is contains several improvements for analysis quality and some bugfixes.

Upgrading

To ensure that the improved analysis result is available for all users, you should clear the collection caching analysis results.

A migration script is available. If you are not using one of the provided installation packages (deb, rpm) or docker, you must apply it manually:

migrate-06_0.7.0-to-0.7.1.js
function runDatabaseMigration() {
    db.getCollection('analysis').drop();
}

Smarti 0.7.0 Release Notes

February 28th, 2018

Smarti 0.7.0 is a refactoring release, and introduces an improved webservice API.

Upgrading

With 0.7.0, the datamodel has changed so data from older installations must be migrated to the new model.

A migration script is available and must be applied manually:

migrate-05_0.6-to-0.7.js
function runDatabaseMigration() {
    var conversations = db.getCollection('conversations');

    conversations.update({tokens: {$exists: true}}, {
        $unset: {
            channelId: true,
            tokens: true,
            queryTemplates: true,
            'meta.lastMessageAnalyzed': true
        }
    }, {multi: true});
}

Smarti 0.6.1 Release Notes

January 8th, 2018

Smarti 0.6.1 is a security feature release, that also covers several improvements to optimize Smarti’s resource consumption behavior. This is the first Smarti release, that has a Docker image as part of its distribution.

Smarti 0.6.1 is 100% compatible to chatpal.search - A Rocket.Chat package for search with chatpal backend. So Smarti can be used as cross-channel search engine for Rocket.Chat.

New in Smarti 0.6.1

From the feature perspective Smarti 0.6.1 introduces a simple user management including FORM based user authentication as well as TOKEN based system authentication. Users having the role ADMIN are allowed to manage clients, configurations, conversations, users and tokens. Regular Smarti users are only permitted to manage configurations and conversations of specific clients. Tokens are designed to access the Smarti API by technical systems/users.

The Smarti Admin UI allows you to:

  • manage (create, change and delete) users,

  • permit users access to specific clients,

  • generate tokens to allow technical access,

Upgrading

Stanford-NLP

For improved memory efficiency, smarti now uses Stanford-CoreNLP v3.8.0. If you added the Stanford-NLP dependencies in previous versions, you must update those libraries. Please refer to the Installation Guide for details.

Configuration

The following changes in the configuration files are recommended:

application.properties
+ nlp.stanfordnlp.de.parseModel=edu/stanford/nlp/models/srparser/germanSR.ser.gz
+ nlp.stanfordnlp.de.parseMaxlen=40

- security.password=
+ security.config.mongo.admin-password=

+ smarti.migration.mongo.script-home=/usr/share/smarti/scripts
logback.xml
- <logger name="io.redlink.nlp" level="DEBUG"/>
+ <logger name="edu.stanford" level="INFO"/>
+ <logger name="io.redlink.nlp" level="INFO"/>

Previous client-configurations for solrsearch-query-builders might require an update of their default settings: While in previous versions those parameters needed to be url-encoded, this is now happening within the component.

A migration-script is available and applied automatically on starup:

migrate-04_fix-param-encoding.js
function runDatabaseMigration() {
    var clientConfig = db.getCollection('configuration');

    clientConfig
        .find({'config.queryBuilder': { $elemMatch: { type: 'solrsearch' }}})
        .forEach(function (configuration) {
            configuration.config.queryBuilder.forEach(function (builder) {
                if (builder.type !== 'solrsearch') return;

                var convertedDefaults = {};
                for (var k in builder.defaults) {
                    if (builder.defaults.hasOwnProperty(k)){
                        try {
                            convertedDefaults[k] = decodeURIComponent(builder.defaults[k]);
                        } catch (e) {
                            print('Could not uri-decode "' + k + "' of config '" + builder.name + "' for client '" + configuration.client + "'." +
                                " Keeping unmodified parameter '" + builder.defaults[k] + "'");
                            convertedDefaults[k] = builder.defaults[k];
                        }
                    }
                }
                builder.defaults = convertedDefaults;
            });

            clientConfig.save(configuration);
        });
}

Smarti 0.6.0 Release Notes

November 30th, 2017

Smarti 0.6.0 is a search feature release. Conversations stored in Smarti can now be searched explicit, there is no need to create conversations in order to search within the knowledge base anymore. Smarti 0.6.0 enables more relevant suggestions for conversations by introducing conversation-filtering.

New in Smarti 0.6.0

This release introduces a brand new search API that allows:

  • explicit full text search over all the stored conversations,

  • filtering related conversations based on meta data such as classifications or topics,

  • paging over suggestions, that can be configured.

Upgrading

redlink-nlp has been upgraded to use StanfordNLP v3.8. Please upgrade your locally installed libraries of stanford core-nlp.

Configuration

Starting with 0.6.0 recommended conversations (conversationmlt and conversationsearch) can be restricted to the same support_area. To enable this feature, update the configuration to contain the following settings:

{
  "filter": [
    "support_area"
  ]
}

Database

With 0.6.0, the datamodel has changed so data from older installations must be migrated to the new model.

A migration script is available. When using the installation packages, the migration will happen automatically on the first startup. Alternatively, the following script must be applied manually:

migrate-03_0.5-to-0.6.js
function runDatabaseMigration() {
    var conversations = db.getCollection('conversations');

    // migrate channel_id and support_area to meta.properties (#87, #99)
    conversations
        .find({
            'meta.properties': {$exists: false}
        })
        .forEach(function (c) {
            var metaProps = {};
            if (c.meta && c.meta.tags) {
                metaProps.tags = c.meta.tags;
            }
            if (c.context && c.context.environment) {
                if (c.context.environment.channel_id) {
                    metaProps.channel_id = [c.context.environment.channel_id];
                }
                if (c.context.environment.support_area) {
                    metaProps.support_area = [c.context.environment.support_area];
                }
            }

            conversations.update({
                _id: c._id
            }, {
                $set: {
                    'meta.properties': metaProps
                },
                $unset: {
                    'meta.tags': true
                }
            });
        });

    return 'success';
}

Smarti 0.5.0 Release Notes

September 18th, 2017

Smarti 0.5.0 is a technical architecture release. For now basic decisions about the fundamental software design are not complete. In short this version of Smarti solves some security aspects, ensures backward compatibility to version 0.3.0 and fixes some bugs. Next to a new comprehensive development documentation Smarti 0.5.0 introduces lifecycle management for stored conversations.

New in Smarti 0.5.0

This release introduces an API that allows to manage the lifecycle of stored conversation, including:

  • JSON-based im- and export of conversations,

  • mark conversations obsolete by setting an expiration date,

  • authors may now edit their conversation’s texts or remove messages

Upgrading

With 0.5.0, the datamodel has changed so data from older installations must be migrated to the new model.

A migration script is available. When using the installation packages, the migration will happen automatically on the first startup. Alternatively, the following script must be applied manually:

migrate-02_0.3-to-0.5.js
function runDatabaseMigration() {
    var conversation = 'conversations',
        configuration = 'configuration',
        client = 'client';

    // create all clients
    db.getCollection(conversation).aggregate([
        {$match: { owner: { $exists: false }}},
        {$project: {domain: '$context.domain'}},
        {$group: {_id: '$domain'}},
        {
            $project: {
                _id: 0,
                name: '$_id',
                lastUpdate: {$literal: ISODate()},
                defaultClient: {$literal: false}
            }
        },
        {$out: client}
    ]);
    db.getCollection(client).find().forEach(function (c) {
        db.getCollection(conversation).update(
            {'context.domain': c.name},
            {$set: {owner: c._id}},
            {multi: true}
        );
        db.getCollection(configuration).update(
            {client: c._id},
            {
                $setOnInsert: {
                    created: new ISODate(),
                    modified: new ISODate(),
                    config: {
                        "queryBuilder": [
                            {
                                "name": "conversationmlt",
                                "displayName": "Related Conversations",
                                "type": "conversationmlt",
                                "enabled": true,
                                "unbound": false,
                                "configuration": {}
                            },
                            {
                                "solrEndpoint": "http://host.domain.org:8983/solr/change-me",
                                "search": {
                                    "title": {
                                        "enabled": false,
                                        "field": ""
                                    },
                                    "fullText": {
                                        "enabled": true,
                                        "field": ""
                                    },
                                    "spatial": {
                                        "enabled": true,
                                        "locationNameField": ""
                                    },
                                    "temporal": {
                                        "enabled": false
                                    },
                                    "related": {
                                        "enabled": false,
                                        "fields": []
                                    }
                                },
                                "defaults": {
                                    "rows": 10,
                                    "fields": "*,score"
                                },
                                "result": {
                                    "numOfRows": 10,
                                    "mappings": {
                                        "title": "title",
                                        "description": "description",
                                        "type": "type",
                                        "doctype": "doctype",
                                        "thumb": "thumb",
                                        "link": "link",
                                        "date": "date",
                                        "source": "source"
                                    },
                                },
                                "name": "search-endpoint-0",
                                "displayName": "Search Endpoint",
                                "type": "solrsearch",
                                "enabled": false,
                                "unbound": false,
                                "configuration": {},
                                "_class": "io.redlink.smarti.query.solr.SolrEndpointConfiguration"
                            },
                            {
                                "name": "conversationsearch",
                                "displayName": "conversationsearch",
                                "type": "conversationsearch",
                                "enabled": true,
                                "unbound": false,
                                "configuration": {}
                            }
                        ]
                    }
                }
            },
            {upsert: true}
        );
    });

    return 'success';
}