universal_bot
Version:
Taking the principles of aiml - but allowing a dynamic and extendable *.js environment
262 lines (156 loc) • 6.34 kB
JavaScript
;
var resolve = require('path').resolve;
var meta = require('debug')('worker:meta');
var debug = require('debug')('intentions');
var debugs = require('debug')('input');
var Session = require('./lib/session.js');
var Strategy = require("./lib/strategy.js");
var Aiml = require('./lib/aiml.js');
var Paraphrase = require('./lib/paraphrase.js');
var IntentionManager = require('./lib/intentions/intention_manager.js');
meta("Hier kommt der Universale Bot");
var version = "0.0.28";
console.log("UniversalBot - version: " + version)
var UniversalBot = function(params) {
var self = this;
if (params) meta( params.aiml );
this.intentions = null;
if (params.intentions) this.intentions = new IntentionManager ( params.intentions );
this.sessions = [];
this.change_topic = function(session) {
var actual = session.conversation_state;
meta ("aktueller Status " + actual);
if ( self.stragey.chain) {
var x = self.strategy.chain.next( actual );
session.set_conversation_state(x.name);
} else meta("Die Strategiekette ist noch nicht da");
}
this.process_aiml = function(params, error) {
console.log("PROCESS_AIML");
if (params) {
debugs ("HIER KOMMT DER CALLBACK PROCESS AIML");
console.log( params );
var s = self.find_session( params.session_id);
if (params.topic_change) self.change_topic( s );
else s.topic_counter ++;
// könnte die Repetition hier abfangen
} else {
meta("KEINE ANTWORT");
meta ( error );
// self.aiml_intervention(params);
}
// console.log( params.answer.template );
}
this.check_sessions = function() {
}
self.test = function(input) {
console.log("Das ist der Test des Bots " + input);
}
self.find_session = function(id) {
meta("ID : " + id);
for (var i = 0; i < self.sessions.length; i++) {
var ses = self.sessions[i];
if (ses.id === id) return ses;
}
return null;
}
this.aiml_intervention = function(params) {
meta("PRARADOXE INTERVENTION");
meta(params.session_id);
if( params.session_id) {
var session = self.find_session(params.session_id);
if (session ) session.set_conversation_state( "intervention" );
var input = {
pattern: "PARDOXICAL_INTERVENTION",
topic: session.conversation_state
}
meta( input );
self.aiml.input ( input, session, self.process_aiml);
}
else
{
meta("Es gibt keine SessionID");
}
}
this.create_session = function() {
debugs("Neue Sitzung wird erzeugt ");
var s = new Session(this, params.strategy);
meta (" Die Strategie ist: " + params.strategy );
s.set_conversation_state( self.strategy.chain.nodes[0].name );
var session_id = s.id;
self.sessions.push(s);
debugs("Number of already running sessions " + self.sessions.length);
return session_id;
}
// THIS IS THE ENTRY FUNCTION
this.input = function(text, session_id, type, callback) {
debugs ("Hier kommt die Eingabe: " + text + " type " + type);
if (! session_id) session_id = self.create_session();
var session = self.find_session(session_id);
debugs( "STATE " + session.conversation_state );
var input = {
pattern: text,
topic: session.conversation_state.name
}
// Whene an intention can be found, it should have priority
if ( self.intentions) {
debugs ("INTENTIONEN - Hier sollte überprüft werden, ob der Input auf eine Intention trifft");
var node = self.intentions.check( input );
debugs( node );
if (node) {
debug ("HIER KOMMT " + node.aiml );
input.pattern = node.aiml;
debug ( input.topic = "intention" );
self.intentions.actual = node;
debugs ("Es folgt aiml.input");
self.aiml.input ( input, session, callback );
// self.aiml.input ( input, session, self.process_aiml);
}
else {
debugs("Es gibt keine erkennbare Intention");
switch(type) {
case "AIML":
self.aiml.input ( input, session, callback );
break;
default:
debugs("noch nicht definiert");
break;
}
}
}
else
{
debugs ("Hier kommt reines AIML - ohne Intentionen ");
// self.aiml.input ( input, session, self.process_aiml);
self.aiml.input ( input, session, callback );
}
}
this.init = function () {
// self.session = new Session(this, params.strategy);
if ( params.strategy) {
meta("STRATEGY IS DEFINED");
var f = resolve( params.strategy );
console.log( f );
self.strategy = new Strategy("normal", f );
}
if (params.bot_identity) {
meta("BOT_IDENTITY");
self.bot_identity = params.bot_identity;
}
/////
meta("NOW THE AIML PART");
var list = [
"./aiml.json",
"./greeting.json"
];
if (params.aiml ) list = params.aiml;
// This is the AIML Bot
self.aiml = new Aiml( list, self );
// self.aiml.input( { pattern: "No", that: "Do you like movies?" } );
// self.aiml.input ( { pattern: "No" }, self.session, self.process_aiml);
// self.interpreter.findAnswer('Thank you for following', self.aiml_callback);
}
self.init();
};
// var u = new UniversalBot();
module.exports = UniversalBot;