Skip to content

Latest commit

 

History

History
133 lines (100 loc) · 3.32 KB

sessions.md

File metadata and controls

133 lines (100 loc) · 3.32 KB

Sessions

NaifJs is a multi-user dialog manager. The dialog system act as a "server" that manages dialogues with multiple users, in parallel. Even if used as an embedded library, the engine manages different conversational sessions at once.

User session thread

A user session, or session thread is a sequence of back-and-forth between a final user and the dialog system.

A session start when a dialog unit state is activated by a start DSL statement and it terminates:

  • normally when the dialog flow encounter an end statement.
  • when the user abandons the dialog and a prompt timeout expires.

Session id

Each inbound request, the input sentence coming from a user, is identified by an session id (any unique identifier string defined by the caller application).

Note that user id, session id, sender_id, chat id or simply id are synonyms in NaifJs parlance.

  const user = 'Giorgio Robino'
  const sentence = 'I love you, Naif!' 

  naif.request(user, sentence)

Session data storage

To manage multi users at the same time, for each sessionid the engine store some dialog data (the stateid conversation state and more attributes) into a session data structure:

  • dialog stateid
  • time of last interaction
  • last user request
  • last response to user
  • flag indicating if the dialog is currently active
  • dialog unit variables

The sessions database is currently managed as in-memory object, disk-persistent (with a loaded/saved JSON file).

When the engine bootstrap (up), it checks if the session data storage JSON file does exist and load it in memory. When the engine stop working (down) the in-memory sessions are saved again on the JSON file. By default, if not specified by developer, the engine load or create a sessions.json in the application directory.

If NaifJs is used for a single-user application (by example, an embedded system/IoT device), nothing change. In this specific case the session storage will manage just a single entry.

Session file example

Here below a session file example, containing entries for two users (session ids are in this case: 34824744 and 103034393).

$ cat examples/story_it/sessions.js
{
  "34824744": {

    "unit": "secondUnit",
    "state": "restart",

    "time": 1602775249799,
    "active": false,

    "variables": {
      "firstUnit": {
        "firstName": "Giorgio"
      }
    },

    "response": {
      "text": "Arrivederci Giorgio!",
      "speech": false,
      "time": 1602775251566,
      "stateid": "secondUnit.restart"
    },

    "request": {
      "text": "no",
      "speech": false,
      "time": 1602775251565
    }

  },

  "103034393": {

    "unit": "ascoltaeripeti",
    "state": "restart",

    "time": 1561539134,
    "active": false,

    "response": {
      "text": "Arrivederci Giorgio!",
      "speech": false,
      "time": 1602775251577,
      "stateid": "ascoltaeripeti.restart"
    },

    "request": {
      "text": "no",
      "speech": false,
      "time": 1602775251000
    },

    "variables": {
      "leggieripeti": {
        "word": "TASCHE",
        "retryNum": 5,
        "score": 0
      },

      "ascoltaescrivi": {
        "word": "MERCATI",
        "retryNum": 5,
        "score": 0
      }
    }
  }
}  

top | home | index