@tiledesk/tiledesk-server 2.13.16 → 2.13.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,13 @@
5
5
  🚀 IN PRODUCTION 🚀
6
6
  (https://www.npmjs.com/package/@tiledesk/tiledesk-server/v/2.3.77)
7
7
 
8
+ # 2.13.18
9
+ - Improved: llm preview to support openai models
10
+ - Updated: 2.0.30
11
+
12
+ # 2.13.17
13
+ - Updated: whatsapp-connector to 1.0.7
14
+
8
15
  # 2.13.16
9
16
  - Updated: whatsapp-connector to 1.0.6
10
17
 
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.13.16",
4
+ "version": "2.13.18",
5
5
  "scripts": {
6
6
  "start": "node ./bin/www",
7
7
  "pretest": "mongodb-runner start",
@@ -49,10 +49,10 @@
49
49
  "@tiledesk/tiledesk-rasa-connector": "^1.0.10",
50
50
  "@tiledesk/tiledesk-sms-connector": "^0.1.11",
51
51
  "@tiledesk/tiledesk-telegram-connector": "^0.1.14",
52
- "@tiledesk/tiledesk-tybot-connector": "^2.0.28",
52
+ "@tiledesk/tiledesk-tybot-connector": "^2.0.30",
53
53
  "@tiledesk/tiledesk-voice-twilio-connector": "^0.1.22",
54
54
  "@tiledesk/tiledesk-vxml-connector": "^0.1.78",
55
- "@tiledesk/tiledesk-whatsapp-connector": "1.0.6",
55
+ "@tiledesk/tiledesk-whatsapp-connector": "1.0.7",
56
56
  "@tiledesk/tiledesk-whatsapp-jobworker": "^0.0.13",
57
57
  "amqplib": "^0.5.5",
58
58
  "app-root-path": "^3.0.0",
package/routes/llm.js CHANGED
@@ -5,6 +5,7 @@ let Integration = require('../models/integrations');
5
5
  const aiService = require('../services/aiService');
6
6
  const multer = require('multer');
7
7
  const fileUtils = require('../utils/fileUtils');
8
+ const { MODELS_MULTIPLIER } = require('../utils/aiUtils');
8
9
 
9
10
  let MAX_UPLOAD_FILE_SIZE = process.env.MAX_UPLOAD_FILE_SIZE;
10
11
  let uploadlimits = undefined;
@@ -22,6 +23,7 @@ router.post('/preview', async (req, res) => {
22
23
  let id_project = req.projectid;
23
24
  let body = req.body;
24
25
  let key;
26
+ let publicKey = false;
25
27
 
26
28
  if (!body.llm) {
27
29
  return res.status(400).send({ success: false, error: "Missing required parameter 'llm'" });
@@ -33,15 +35,36 @@ router.post('/preview', async (req, res) => {
33
35
  })
34
36
 
35
37
  if (!integration) {
36
- winston.verbose("Integration for " + body.llm + " not found.")
37
- return res.status(404).send({ success: false, error: "Integration for " + body.llm + " not found."})
38
+ winston.verbose("Integration not found for " + body.llm)
39
+ if (body.llm === "openai") {
40
+ winston.verbose("Try to retrieve shared OpenAI key")
41
+ if (!process.env.GPTKEY) {
42
+ winston.error("Shared key for OpenAI not configured.");
43
+ return res.status(404).send({ success: false, error: "No key found for " + body.llm });
44
+ }
45
+ key = process.env.GPTKEY;
46
+ publicKey = true;
47
+ winston.verbose("Using shared OpenAI key as fallback.");
48
+ } else {
49
+ winston.verbose("Integration for " + body.llm + " not found.")
50
+ return res.status(404).send({ success: false, error: "Integration for " + body.llm + " not found." })
51
+ }
52
+ } else {
53
+ if (!integration?.value?.apikey && body.llm !== "ollama") {
54
+ return res.status(422).send({ success: false, error: "The key provided for " + body.llm + " is not valid or undefined." });
55
+ }
56
+ key = integration.value.apikey;
38
57
  }
39
58
 
40
- if (!integration?.value?.apikey && body.llm !== 'ollama') {
41
- return res.status(422).send({ success: false, error: "The key provided for " + body.llm + " is not valid or undefined." })
42
- }
59
+ let obj = { createdAt: new Date() };
43
60
 
44
- key = integration.value.apikey;
61
+ let quoteManager = req.app.get('quote_manager');
62
+ if (publicKey === true) {
63
+ let isAvailable = await quoteManager.checkQuote(req.project, obj, 'tokens');
64
+ if (isAvailable === false) {
65
+ return res.status(403).send({ success: false, message: "Tokens quota exceeded", error_code: 13001})
66
+ }
67
+ }
45
68
 
46
69
  let json = {
47
70
  question: body.question,
@@ -70,6 +93,16 @@ router.post('/preview', async (req, res) => {
70
93
 
71
94
  aiService.askllm(json).then((response) => {
72
95
  winston.verbose("Askllm response: ", response);
96
+ if (publicKey === true) {
97
+ let multiplier = MODELS_MULTIPLIER[json.model];
98
+ if (!multiplier) {
99
+ multiplier = 1;
100
+ winston.info("No multiplier found for AI model " + json.model)
101
+ }
102
+ obj.multiplier = multiplier;
103
+ obj.tokens = response.data?.prompt_token_size || 0;
104
+ quoteManager.incrementTokenCount(req.project, obj);
105
+ }
73
106
  res.status(200).send(response.data)
74
107
  }).catch((err) => {
75
108
  if (err.response?.data?.detail[0]) {
package/routes/webhook.js CHANGED
@@ -276,7 +276,7 @@ async function scheduleScrape(resources) {
276
276
  if (err) {
277
277
  winston.error("Scheduling error: ", err);
278
278
  } else {
279
- winston.info("Scheduling result: ", result);
279
+ winston.verbose("Scheduling result: ", result);
280
280
  }
281
281
  });
282
282
  })