@tiledesk/tiledesk-server 2.4.52 → 2.4.54

Sign up to get free protection for your applications and to get access to all the features.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,9 @@
5
5
  🚀 IN PRODUCTION 🚀
6
6
  (https://www.npmjs.com/package/@tiledesk/tiledesk-server/v/2.3.77)
7
7
 
8
+ # 2.4.43
9
+ - updated tybot-connector to 0.1.96
10
+ - added segment module
8
11
 
9
12
  # 2.4.42
10
13
  - createIfNotExistsWithLeadId now update the lead email if jwt email changes
package/app.js CHANGED
@@ -112,7 +112,7 @@ var jwtroute = require('./routes/jwt');
112
112
  var key = require('./routes/key');
113
113
  var widgets = require('./routes/widget');
114
114
  var widgetsLoader = require('./routes/widgetLoader');
115
- var openai_kbs = require('./routes/openai_kbs');
115
+ var openai = require('./routes/openai');
116
116
  var kbsettings = require('./routes/kbsettings');
117
117
 
118
118
  // var admin = require('./routes/admin');
@@ -129,6 +129,8 @@ var requestUtilRoot = require('./routes/requestUtilRoot');
129
129
  var urls = require('./routes/urls');
130
130
  var email = require('./routes/email');
131
131
  var property = require('./routes/property');
132
+ var segment = require('./routes/segment');
133
+
132
134
 
133
135
  var bootDataLoader = require('./services/bootDataLoader');
134
136
  var settingDataLoader = require('./services/settingDataLoader');
@@ -550,8 +552,9 @@ app.use('/:projectid/campaigns',[passport.authenticate(['basic', 'jwt'], { sessi
550
552
  app.use('/:projectid/emails',[passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['bot','subscription'])], email);
551
553
 
552
554
  app.use('/:projectid/properties',[passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['bot','subscription'])], property);
555
+ app.use('/:projectid/segments',[passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['bot','subscription'])], segment);
553
556
 
554
- app.use('/:projectid/openai_kbs', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent')], openai_kbs);
557
+ app.use('/:projectid/openai', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent')], openai);
555
558
  app.use('/:projectid/kbsettings', [passport.authenticate(['basic', 'jwt'], { session: false }), validtoken, roleChecker.hasRoleOrTypes('agent', ['bot','subscription'])], kbsettings);
556
559
 
557
560
 
package/docs/api-dev.md CHANGED
@@ -882,4 +882,45 @@ curl -v -X GET -H 'Content-Type:application/json' -H "Authorization: JWT eyJhbGc
882
882
 
883
883
 
884
884
 
885
- curl -v -X POST -H 'Content-Type:application/json' -u andrea.leo@frontiere21.it:258456 https://tiledesk-server-pre.herokuapp.com/chat21/native/auth/createCustomToken
885
+ curl -v -X POST -H 'Content-Type:application/json' -u andrea.leo@frontiere21.it:258456 https://tiledesk-server-pre.herokuapp.com/chat21/native/auth/createCustomToken
886
+
887
+
888
+
889
+
890
+
891
+ curl -v -X POST -H 'Content-Type:application/json' -u admin@tiledesk.com:adminadmin -d '{"name":"testprj"}' http://localhost:3000/projects
892
+
893
+ curl -v -X POST -H 'Content-Type:application/json' -u admin@tiledesk.com:adminadmin -d '{ "name":"segment1", "filters": [{"field":"field1","operator":"=","value":"ciao2"}]}' http://localhost:3000/651446eeaf0e4e333f86db6d/segments
894
+
895
+
896
+ curl -v -X POST -H 'Content-Type:application/json' -u admin@tiledesk.com:adminadmin -d '{"text":"firstText"}' http://localhost:3000/651446eeaf0e4e333f86db6d/requests/req123456999-651446eeaf0e4e333f86db6d/messages
897
+
898
+
899
+ curl -v -X GET -u admin@tiledesk.com:adminadmin http://localhost:3000/651446eeaf0e4e333f86db6d/leads?segment=651448cc39405451f2165a80
900
+
901
+
902
+ number
903
+
904
+ curl -v -X POST -H 'Content-Type:application/json' -u admin@tiledesk.com:adminadmin -d '{ "name":"segment1", "filters": [{"field":"field1","operator":"=","value":44}]}' http://localhost:3000/651446eeaf0e4e333f86db6d/segments
905
+
906
+ curl -v -X GET -u admin@tiledesk.com:adminadmin http://localhost:3000/651446eeaf0e4e333f86db6d/leads?segment=6515a7e0066727cb94bccd5c
907
+
908
+
909
+
910
+
911
+ sudo systemctl start mongod
912
+
913
+
914
+
915
+
916
+ curl -v -X PUT -H 'Content-Type:application/json' -u admin@tiledesk.com:adminadmin -d '{ "name":"segment2", "filters": [{"field":"field1","operator":"=","value":"ciao2"}]}' http://localhost:3000/651446eeaf0e4e333f86db6d/segments/6516eb0a11e143e3548b8dd6
917
+
918
+
919
+
920
+ curl -v -X GET -H 'Content-Type:application/json' -u admin@tiledesk.com:adminadmin http://localhost:3000/651446eeaf0e4e333f86db6d/segments/6516eb0a11e143e3548b8dd6
921
+
922
+
923
+ curl -v -X GET -H 'Content-Type:application/json' -u admin@tiledesk.com:adminadmin http://localhost:3000/651446eeaf0e4e333f86db6d/segments/
924
+
925
+
926
+ curl -v -X DELETE -H 'Content-Type:application/json' -u admin@tiledesk.com:adminadmin http://localhost:3000/651446eeaf0e4e333f86db6d/segments/6516eb0a11e143e3548b8dd6
package/models/faq.js CHANGED
@@ -7,6 +7,12 @@ const uuidv4 = require('uuid/v4');
7
7
  var defaultFullTextLanguage = process.env.DEFAULT_FULLTEXT_INDEX_LANGUAGE || "none";
8
8
 
9
9
  var FaqSchema = new Schema({
10
+ _id: {
11
+ type: mongoose.Schema.Types.ObjectId,
12
+ index: true,
13
+ required: true,
14
+ auto: true,
15
+ },
10
16
  id_faq_kb: {
11
17
  type: String,
12
18
  index: true
@@ -0,0 +1,67 @@
1
+ var mongoose = require('mongoose');
2
+ var Schema = mongoose.Schema;
3
+ var winston = require('../config/winston');
4
+
5
+
6
+
7
+ var SegmentFilterSchema = new Schema({
8
+ field: { //ex: email
9
+ type: String,
10
+ required: true,
11
+ // index:true
12
+ },
13
+ operator: {
14
+ type: String,
15
+ required: true
16
+ },
17
+ value: { //tidio supports date, tag, dropdown
18
+ //type: String,
19
+ type: Object,
20
+ required: true
21
+ },
22
+ },{ _id : false });
23
+
24
+
25
+ var SegmentSchema = new Schema({
26
+
27
+ name: {
28
+ type: String,
29
+ required: true,
30
+ // index: true
31
+ },
32
+ match: {
33
+ type: String,
34
+ required: true,
35
+ // index:
36
+ default: "all" //or any
37
+ },
38
+ filters: [SegmentFilterSchema],
39
+ id_project: {
40
+ type: String,
41
+ required: true,
42
+ index: true
43
+ },
44
+ status: {
45
+ type: Number,
46
+ default: 100,
47
+ required: true,
48
+ index: true
49
+ },
50
+ createdBy: {
51
+ type: String,
52
+ required: true
53
+ }
54
+ },{
55
+ timestamps: true
56
+ }
57
+ );
58
+
59
+
60
+ var segment = mongoose.model('segment', SegmentSchema);
61
+
62
+ if (process.env.MONGOOSE_SYNCINDEX) {
63
+ segment.syncIndexes();
64
+ winston.info("segment syncIndexes")
65
+ }
66
+
67
+ module.exports = segment;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@tiledesk/tiledesk-server",
3
3
  "description": "The Tiledesk server module",
4
- "version": "2.4.52",
4
+ "version": "2.4.54",
5
5
  "scripts": {
6
6
  "start": "node ./bin/www",
7
7
  "pretest": "mongodb-runner start",
@@ -44,7 +44,7 @@
44
44
  "@tiledesk/tiledesk-kaleyra-proxy": "^0.1.7",
45
45
  "@tiledesk/tiledesk-messenger-connector": "0.1.9",
46
46
  "@tiledesk/tiledesk-rasa-connector": "^1.0.10",
47
- "@tiledesk/tiledesk-tybot-connector": "^0.1.93",
47
+ "@tiledesk/tiledesk-tybot-connector": "^0.1.96",
48
48
  "@tiledesk/tiledesk-whatsapp-connector": "^0.1.51",
49
49
  "amqplib": "^0.5.5",
50
50
  "app-root-path": "^3.0.0",
package/routes/faq.js CHANGED
@@ -147,6 +147,7 @@ router.post('/', function (req, res) {
147
147
  winston.debug('faq_kb ', faq_kb.toJSON());
148
148
 
149
149
  var newFaq = new Faq({
150
+ _id: req.body._id,
150
151
  id_faq_kb: req.body.id_faq_kb,
151
152
  question: req.body.question,
152
153
  answer: req.body.answer,
@@ -203,6 +204,8 @@ router.patch('/:faqid/attributes', function (req, res) {
203
204
  let data = req.body;
204
205
  winston.debug("data: ", data);
205
206
 
207
+ // aggiugnere controllo su intent_id qui
208
+
206
209
  Faq.findById(req.params.faqid, function (err, updatedFaq) {
207
210
  if (err) {
208
211
  winston.error('Find Faq by id ERROR: ', err);
@@ -253,6 +256,7 @@ router.patch('/:faqid/attributes', function (req, res) {
253
256
  router.put('/:faqid', function (req, res) {
254
257
 
255
258
  winston.debug('UPDATE FAQ ', req.body);
259
+ let faqid = req.params.faqid;
256
260
 
257
261
  var update = {};
258
262
 
@@ -296,45 +300,84 @@ router.put('/:faqid', function (req, res) {
296
300
  update.attributes = req.body.attributes;
297
301
  }
298
302
 
299
- Faq.findByIdAndUpdate(req.params.faqid, update, { new: true, upsert: true }, function (err, updatedFaq) {
300
- if (err) {
301
- if (err.code == 11000) {
302
- return res.status(409).send({ success: false, msg: 'Duplicate intent_display_name.' });
303
- } else {
304
- return res.status(500).send({ success: false, msg: 'Error updating object.' });
303
+ if (faqid.startsWith("intentId")) {
304
+ let intent_id = faqid.substring(8);
305
+ Faq.findOneAndUpdate({ intent_id: intent_id }, update, { new: true, upsert: true}, (err, updatedFaq) => {
306
+ if (err) {
307
+ if (err.code == 11000) {
308
+ return res.status(409).send({ success: false, msg: 'Duplicate intent_display_name.' });
309
+ } else {
310
+ return res.status(500).send({ success: false, msg: 'Error updating object.' });
311
+ }
305
312
  }
306
- }
307
313
 
308
- faqBotEvent.emit('faq.update', updatedFaq);
309
- faqBotEvent.emit('faq_train.update', updatedFaq.id_faq_kb);
314
+ faqBotEvent.emit('faq.update', updatedFaq);
315
+ faqBotEvent.emit('faq_train.update', updatedFaq.id_faq_kb);
316
+
317
+ res.status(200).send(updatedFaq);
318
+ })
310
319
 
311
- res.json(updatedFaq);
320
+ } else {
321
+ Faq.findByIdAndUpdate(req.params.faqid, update, { new: true, upsert: true }, function (err, updatedFaq) {
322
+ if (err) {
323
+ if (err.code == 11000) {
324
+ return res.status(409).send({ success: false, msg: 'Duplicate intent_display_name.' });
325
+ } else {
326
+ return res.status(500).send({ success: false, msg: 'Error updating object.' });
327
+ }
328
+ }
329
+
330
+ faqBotEvent.emit('faq.update', updatedFaq);
331
+ faqBotEvent.emit('faq_train.update', updatedFaq.id_faq_kb);
332
+
333
+ res.status(200).send(updatedFaq);
334
+ // updateRemoteFaq(updatedFaq)
335
+ });
336
+ }
312
337
 
313
- // updateRemoteFaq(updatedFaq)
314
- });
315
338
  });
316
339
 
317
340
 
318
341
  // DELETE REMOTE AND LOCAL FAQ
319
342
  router.delete('/:faqid', function (req, res) {
320
343
 
321
- // deleteRemoteFaq(req.params.faqid)
322
344
  winston.debug('DELETE FAQ - FAQ ID ', req.params.faqid);
323
345
 
324
- Faq.findByIdAndRemove({ _id: req.params.faqid }, function (err, faq) {
325
- if (err) {
326
- return res.status(500).send({ success: false, msg: 'Error deleting object.' });
327
- }
328
- winston.debug('Deleted FAQ ', faq);
329
-
330
- faqBotEvent.emit('faq.delete', faq);
331
- faqBotEvent.emit('faq_train.delete', faq.id_faq_kb);
346
+ let faqid = req.params.faqid;
347
+
348
+ if (faqid.startsWith("intentId")) {
349
+ console.log("faqid is an intent_id")
350
+ let intent_id = faqid.substring(8);
351
+ console.log("faq intent_id: ", intent_id);
332
352
 
333
- res.json(faq);
353
+ Faq.findOneAndDelete({ intent_id: intent_id }, (err, faq) => {
354
+ if (err) {
355
+ return res.status(500).send({ success: false, msg: "Error deleting object." });
356
+ }
334
357
 
335
- });
358
+ winston.debug('Deleted FAQ ', faq);
359
+
360
+ faqBotEvent.emit('faq.delete', faq);
361
+ faqBotEvent.emit('faq_train.delete', faq.id_faq_kb);
362
+
363
+ res.status(200).send(faq);
336
364
 
365
+ })
337
366
 
367
+ } else {
368
+ Faq.findByIdAndRemove({ _id: req.params.faqid }, function (err, faq) {
369
+ if (err) {
370
+ return res.status(500).send({ success: false, msg: 'Error deleting object.' });
371
+ }
372
+ winston.debug('Deleted FAQ ', faq);
373
+
374
+ faqBotEvent.emit('faq.delete', faq);
375
+ faqBotEvent.emit('faq_train.delete', faq.id_faq_kb);
376
+
377
+ res.status(200).send(faq);
378
+
379
+ });
380
+ }
338
381
  });
339
382
 
340
383
  // EXPORT FAQ TO CSV
package/routes/faq_kb.js CHANGED
@@ -639,6 +639,7 @@ router.post('/importjson/:id_faq_kb', upload.single('uploadFile'), async (req, r
639
639
 
640
640
  winston.debug("json source " + json_string)
641
641
 
642
+ // intentOnly still existing?
642
643
  if (req.query.intentsOnly && req.query.intentsOnly == "true") {
643
644
 
644
645
  winston.debug("intents only")
@@ -658,7 +659,8 @@ router.post('/importjson/:id_faq_kb', upload.single('uploadFile'), async (req, r
658
659
  enabled: intent.enabled,
659
660
  webhook_enabled: intent.webhook_enabled,
660
661
  language: intent.language,
661
- actions: intent.actions
662
+ actions: intent.actions,
663
+ attributes: intent.attributes
662
664
  }
663
665
 
664
666
  // overwrite duplicated intents
@@ -746,7 +748,8 @@ router.post('/importjson/:id_faq_kb', upload.single('uploadFile'), async (req, r
746
748
  enabled: intent.enabled,
747
749
  webhook_enabled: intent.webhook_enabled,
748
750
  language: intent.language,
749
- actions: intent.actions
751
+ actions: intent.actions,
752
+ attributes: intent.attributes
750
753
  }
751
754
 
752
755
  // TO DELETE: no used when req.query.create = 'true'
@@ -869,7 +872,8 @@ router.post('/importjson/:id_faq_kb', upload.single('uploadFile'), async (req, r
869
872
  enabled: intent.enabled,
870
873
  webhook_enabled: intent.webhook_enabled,
871
874
  language: intent.language,
872
- actions: intent.actions
875
+ actions: intent.actions,
876
+ attributes: intent.attributes
873
877
  }
874
878
 
875
879
  // overwrite duplicated intents
@@ -3,6 +3,7 @@ var KBSettings = require('../models/kb_setting');
3
3
  // var KB = require('../models/kb_setting')
4
4
  var router = express.Router();
5
5
  var winston = require('../config/winston');
6
+ const openaiService = require('../services/openaiService');
6
7
 
7
8
  router.get('/', async (req, res) => {
8
9
  let project_id = req.projectid;
@@ -54,35 +55,6 @@ router.post('/', async (req, res) => {
54
55
  })
55
56
  })
56
57
 
57
- router.post('/:settings_id', async (req, res) => {
58
-
59
- let settings_id = req.params.settings_id;
60
- let body = req.body;
61
-
62
- KBSettings.findById(settings_id, (err, settings) => {
63
- if (err) {
64
- winston.error("find knoledge base error: ", err);
65
- return res.status(500).send({ success: false, error: err});
66
- } else {
67
-
68
- let new_kb = {
69
- name: body.name,
70
- url: body.url
71
- }
72
- settings.kbs.push(new_kb);
73
-
74
- KBSettings.findByIdAndUpdate( settings_id, settings, { new: true }, (err, savedSettings) => {
75
- if (err) {
76
- winston.err("findByIdAndUpdate error: ", err);
77
- res.status(500).send({ success: false, error: err });
78
- } else {
79
- res.status(200).send(savedSettings);
80
- }
81
- })
82
- }
83
- })
84
- })
85
-
86
58
  router.put('/:settings_id', async (req, res) => {
87
59
 
88
60
  let settings_id = req.params.settings_id;
@@ -123,6 +95,81 @@ router.delete('/:settings_id/:kb_id', async (req, res) => {
123
95
  res.status(200).send(settings);
124
96
  }
125
97
  })
98
+
99
+ })
100
+
101
+
102
+ // PROXY PUGLIA AI - START
103
+ router.post('/qa', async (req, res) => {
104
+ let data = req.body;
105
+ console.log("data: ", data);
106
+
107
+ openaiService.ask(data).then((resp) => {
108
+ // console.log("qa resp: ", resp.data);
109
+ res.status(200).send(resp.data);
110
+ }).catch((err) => {
111
+ winston.error("qa err: ", err);
112
+ res.status(500).send(err);
113
+ })
114
+ })
115
+
116
+ router.post('/startscrape', async (req, res) => {
117
+
118
+ let data = req.body;
119
+ console.log("data: ", data);
120
+
121
+ openaiService.startScrape(data).then((resp) => {
122
+ // console.log("startScrape resp: ", resp.data);
123
+ res.status(200).send(resp.data);
124
+ }).catch((err) => {
125
+ winston.error("startScrape err: ", err);
126
+ res.status(500).send(err);
127
+ })
128
+ })
129
+
130
+
131
+ router.post('/checkstatus', async (req, res) => {
132
+
133
+ let data = req.body;
134
+ console.log("data: ", data);
135
+
136
+ openaiService.checkStatus(data).then((resp) => {
137
+ // console.log("checkStatus resp: ", resp.data);
138
+ res.status(200).send(resp.data);
139
+ }).catch((err) => {
140
+ winston.error("checkStatus err: ", err);
141
+ res.status(500).send(err);
142
+ })
143
+ })
144
+ // PROXY PUGLIA AI - END
145
+
146
+ router.post('/:settings_id', async (req, res) => {
147
+
148
+ let settings_id = req.params.settings_id;
149
+ let body = req.body;
150
+
151
+ KBSettings.findById(settings_id, (err, settings) => {
152
+ if (err) {
153
+ winston.error("find knoledge base error: ", err);
154
+ return res.status(500).send({ success: false, error: err});
155
+ } else {
156
+
157
+ let new_kb = {
158
+ name: body.name,
159
+ url: body.url
160
+ }
161
+ settings.kbs.push(new_kb);
162
+
163
+ KBSettings.findByIdAndUpdate( settings_id, settings, { new: true }, (err, savedSettings) => {
164
+ if (err) {
165
+ winston.err("findByIdAndUpdate error: ", err);
166
+ res.status(500).send({ success: false, error: err });
167
+ } else {
168
+ res.status(200).send(savedSettings);
169
+ }
170
+ })
171
+ }
172
+ })
126
173
  })
127
174
 
128
175
  module.exports = router;
package/routes/lead.js CHANGED
@@ -7,6 +7,8 @@ var leadService = require("../services/leadService");
7
7
  csv = require('csv-express');
8
8
  csv.separator = ';';
9
9
  const leadEvent = require('../event/leadEvent');
10
+ var Segment = require("../models/segment");
11
+ var Segment2MongoConverter = require("../utils/segment2mongoConverter");
10
12
 
11
13
 
12
14
  router.post('/', function (req, res) {
@@ -388,7 +390,7 @@ router.get('/:leadid', function (req, res) {
388
390
  });
389
391
 
390
392
 
391
- router.get('/', function (req, res) {
393
+ router.get('/', async(req, res) => {
392
394
 
393
395
  var limit = 40; // Number of request per page
394
396
 
@@ -407,7 +409,7 @@ router.get('/', function (req, res) {
407
409
  winston.debug('LEAD ROUTE - SKIP PAGE ', skip);
408
410
 
409
411
 
410
- var query = { "id_project": req.projectid, "status": LeadConstants.NORMAL};
412
+ var query = {};
411
413
 
412
414
  if (req.query.full_text) {
413
415
  winston.debug('LEAD ROUTE req.query.fulltext', req.query.full_text);
@@ -440,6 +442,24 @@ router.get('/', function (req, res) {
440
442
  query["tags"] = req.query.tags;
441
443
  }
442
444
 
445
+
446
+ if (req.query.segment) {
447
+ let segment = await Segment.findOne({id_project: req.projectid, _id: req.query.segment }).exec();
448
+ if (!segment) {
449
+ return res.status(404).send({ success: false, msg: 'Error segment not found' });
450
+ }
451
+ Segment2MongoConverter.convert(query, segment);
452
+ }
453
+
454
+
455
+
456
+ // last query modifier
457
+ query["id_project"] = req.projectid;
458
+ query["status"] = LeadConstants.NORMAL;
459
+
460
+ winston.debug("query", query);
461
+
462
+
443
463
  var direction = -1; //-1 descending , 1 ascending
444
464
  if (req.query.direction) {
445
465
  direction = req.query.direction;
@@ -0,0 +1,112 @@
1
+ var express = require('express');
2
+ var router = express.Router();
3
+ var KBSettings = require('../models/kb_setting');
4
+ var openaiService = require('../services/openaiService');
5
+ var winston = require('../config/winston');
6
+
7
+ router.post('/', async (req, res) => {
8
+
9
+ let project_id = req.projectid;
10
+ let body = req.body;
11
+
12
+ console.log("### --> body: ", body);
13
+
14
+ KBSettings.findOne({ id_project: project_id }, (err, kbSettings) => {
15
+ console.log("kbSettings: ", kbSettings);
16
+
17
+ if (!kbSettings) {
18
+ return res.status(400).send({ success: false, message: "Missing gptkey parameter (settings not exist)" })
19
+ }
20
+
21
+ let gptkey = kbSettings.gptkey;
22
+
23
+ if (!gptkey) {
24
+ return res.status(400).send({ success: false, message: "Missing gptkey parameter" })
25
+ }
26
+
27
+ // attua modifiche
28
+ let json = {
29
+ "model": body.model,
30
+ "messages": [
31
+ {
32
+ "role": "user",
33
+ "content": body.question
34
+ }
35
+ ],
36
+ "max_tokens": body.max_tokens,
37
+ "temperature": body.temperature
38
+ }
39
+
40
+ let message = { role: "", content: "" };
41
+ if (body.context) {
42
+ message.role = "system";
43
+ message.content = body.context;
44
+ json.messages.unshift(message);
45
+ }
46
+ console.log("openai preview --> json: ", json);
47
+
48
+ openaiService.completions(json, gptkey).then((response) => {
49
+ // winston.debug("completions response: ", response);
50
+ res.status(200).send(response.data);
51
+ }).catch((err) => {
52
+ console.log("err: ", err);
53
+ // winston.error("completions error: ", err);
54
+ res.status(500).send(err)
55
+ })
56
+
57
+ })
58
+ })
59
+
60
+ // router.get('/', async (req, res) => {
61
+
62
+ // let project_id = req.projectid;
63
+
64
+ // OpenaiKbs.find({ id_project: project_id }, (err, kbs) => {
65
+ // if (err) {
66
+ // console.error("find all kbs error: ", err);
67
+ // return res.status(500).send({ success: false, error: err });
68
+ // } else {
69
+ // return res.status(200).send(kbs);
70
+ // }
71
+ // })
72
+ // })
73
+
74
+ // router.post('/', async (req, res) => {
75
+
76
+ // let body = req.body;
77
+
78
+ // let new_kbs = new OpenaiKbs({
79
+ // name: body.name,
80
+ // url: body.url,
81
+ // id_project: req.projectid,
82
+ // gptkey: req.body.gptkey
83
+ // })
84
+
85
+ // new_kbs.save(function (err, savedKbs) {
86
+ // if (err) {
87
+ // console.error("save new kbs error: ", err);
88
+ // return res.status(500).send({ success: false, error: err});
89
+ // } else {
90
+ // return res.status(200).send(savedKbs);
91
+ // }
92
+ // })
93
+ // })
94
+
95
+ // router.put('/', async (req, res) => {
96
+ // // to be implemented
97
+ // })
98
+
99
+ // router.delete('/:kbs_id', async (req, res) => {
100
+ // let kbs_id = req.params.kbs_id;
101
+
102
+ // OpenaiKbs.findOneAndDelete( { _id: kbs_id }, (err, kbDeleted) => {
103
+ // if (err) {
104
+ // console.error("find one and delete kbs error: ", err);
105
+ // return res.status(500).send({ success: false, error: err});
106
+ // } else {
107
+ // return res.status(200).send({ success: true, message: 'Knowledge Base deleted successfully', openai_kb: kbDeleted });
108
+ // }
109
+ // })
110
+ // })
111
+
112
+ module.exports = router;