@tiledesk/tiledesk-server 2.13.36 → 2.13.38
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 +8 -0
- package/package.json +2 -2
- package/routes/kb.js +18 -13
- package/services/QuoteManager.js +0 -2
- package/services/requestService.js +10 -4
- package/utils/TdCache.js +0 -2
- package/websocket/webSocketServer.js +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,14 @@
|
|
|
5
5
|
🚀 IN PRODUCTION 🚀
|
|
6
6
|
(https://www.npmjs.com/package/@tiledesk/tiledesk-server/v/2.3.77)
|
|
7
7
|
|
|
8
|
+
# 2.13.38
|
|
9
|
+
- Updated tybot-connector to 2.0.38
|
|
10
|
+
- Updated /qa to support reranking with hybrid namespaces
|
|
11
|
+
- Updated default AI contexts
|
|
12
|
+
|
|
13
|
+
# 2.13.37
|
|
14
|
+
- Improved abandoned requests management
|
|
15
|
+
|
|
8
16
|
# 2.13.36
|
|
9
17
|
- Fixed /logs/whatsapp/:phone_number endpoint to logs route
|
|
10
18
|
|
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.
|
|
4
|
+
"version": "2.13.38",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"start": "node ./bin/www",
|
|
7
7
|
"pretest": "mongodb-runner start",
|
|
@@ -49,7 +49,7 @@
|
|
|
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.
|
|
52
|
+
"@tiledesk/tiledesk-tybot-connector": "^2.0.38",
|
|
53
53
|
"@tiledesk/tiledesk-voice-twilio-connector": "^0.1.22",
|
|
54
54
|
"@tiledesk/tiledesk-vxml-connector": "^0.1.87",
|
|
55
55
|
"@tiledesk/tiledesk-whatsapp-connector": "1.0.15",
|
package/routes/kb.js
CHANGED
|
@@ -96,15 +96,18 @@ let default_engine_hybrid = {
|
|
|
96
96
|
//let default_context = "Answer if and ONLY if the answer is contained in the context provided. If the answer is not contained in the context provided ALWAYS answer with <NOANS>\n{context}"
|
|
97
97
|
//let default_context = "You are an helpful assistant for question-answering tasks.\nUse ONLY the following pieces of retrieved context to answer the question.\nIf you don't know the answer, just say that you don't know.\nIf none of the retrieved context answer the question, add this word to the end <NOANS>\n\n{context}";
|
|
98
98
|
let contexts = {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
99
|
+
"gpt-3.5-turbo": process.env.GPT_3_5_CONTEXT || "You are an helpful assistant for question-answering tasks.\nUse ONLY the pieces of retrieved context delimited by #### and the chat history to answer the question.\nIf you don't know the answer, just say: \"I don't know<NOANS>\"\n\n####{context}####",
|
|
100
|
+
"gpt-4": process.env.GPT_4_CONTEXT || "You are an helpful assistant for question-answering tasks.\nUse ONLY the pieces of retrieved context delimited by #### and the chat history to answer the question.\nIf you don't know the answer, just say that you don't know.\nIf and only if none of the retrieved context is useful for your task, add this word to the end <NOANS>\n\n####{context}####",
|
|
101
|
+
"gpt-4-turbo-preview": process.env.GPT_4T_CONTEXT || "You are an helpful assistant for question-answering tasks.\nUse ONLY the pieces of retrieved context delimited by #### and the chat history to answer the question.\nIf you don't know the answer, just say that you don't know.\nIf and only if none of the retrieved context is useful for your task, add this word to the end <NOANS>\n\n####{context}####",
|
|
102
|
+
"gpt-4o": process.env.GPT_4O_CONTEXT || "You are an helpful assistant for question-answering tasks. Follow these steps carefully:\n1. Answer in the same language of the user question, regardless of the retrieved context language\n2. Use ONLY the pieces of the retrieved context and the chat history to answer the question.\n3. If the retrieved context does not contain sufficient information to generate an accurate and informative answer, return <NOANS>\n\n==Retrieved context start==\n{context}\n==Retrieved context end==",
|
|
103
|
+
"gpt-4o-mini": process.env.GPT_4O_MINI_CONTEXT || "You are an helpful assistant for question-answering tasks. Follow these steps carefully:\n1. Answer in the same language of the user question, regardless of the retrieved context language\n2. Use ONLY the pieces of the retrieved context and the chat history to answer the question.\n3. If the retrieved context does not contain sufficient information to generate an accurate and informative answer, return <NOANS>\n\n==Retrieved context start==\n{context}\n==Retrieved context end==",
|
|
104
|
+
"gpt-4.1": process.env.GPT_4_1_CONTEXT || "You are an helpful assistant for question-answering tasks. Follow these steps carefully:\n1. Answer in the same language of the user question, regardless of the retrieved context language\n2. Use ONLY the pieces of the retrieved context and the chat history to answer the question.\n3. If the retrieved context does not contain sufficient information to generate an accurate and informative answer, append <NOANS> at the end of the answer\n\n==Retrieved context start==\n{context}\n==Retrieved context end==",
|
|
105
|
+
"gpt-4.1-mini": process.env.GPT_4_1_MINI_CONTEXT || "You are an helpful assistant for question-answering tasks. Follow these steps carefully:\n1. Answer in the same language of the user question, regardless of the retrieved context language\n2. Use ONLY the pieces of the retrieved context and the chat history to answer the question.\n3. If the retrieved context does not contain sufficient information to generate an accurate and informative answer, append <NOANS> at the end of the answer\n\n==Retrieved context start==\n{context}\n==Retrieved context end==",
|
|
106
|
+
"gpt-4.1-nano": process.env.GPT_4_1_NANO_CONTEXT || "You are an helpful assistant for question-answering tasks. Follow these steps carefully:\n1. Answer in the same language of the user question, regardless of the retrieved context language\n2. Use ONLY the pieces of the retrieved context and the chat history to answer the question.\n3. If the retrieved context does not contain sufficient information to generate an accurate and informative answer, append <NOANS> at the end of the answer\n\n==Retrieved context start==\n{context}\n==Retrieved context end==",
|
|
107
|
+
"gpt-5": process.env.GPT_5_CONTEXT || "You are an helpful assistant for question-answering tasks. Follow these steps carefully:\n1. Answer in the same language of the user question, regardless of the retrieved context language\n2. Use ONLY the pieces of the retrieved context and the chat history to answer the question.\n3. If the retrieved context does not contain sufficient information to generate an accurate and informative answer, append <NOANS> at the end of the answer\n\n==Retrieved context start==\n{context}\n==Retrieved context end==",
|
|
108
|
+
"gpt-5-mini": process.env.GPT_5_MINI_CONTEXT || "You are an helpful assistant for question-answering tasks. Follow these steps carefully:\n1. Answer in the same language of the user question, regardless of the retrieved context language\n2. Use ONLY the pieces of the retrieved context and the chat history to answer the question.\n3. If the retrieved context does not contain sufficient information to generate an accurate and informative answer, append <NOANS> at the end of the answer\n\n==Retrieved context start==\n{context}\n==Retrieved context end==",
|
|
109
|
+
"gpt-5-nano": process.env.GPT_5_NANO_CONTEXT || "You are an helpful assistant for question-answering tasks. Follow these steps carefully:\n1. Answer in the same language of the user question, regardless of the retrieved context language\n2. Use ONLY the pieces of the retrieved context and the chat history to answer the question.\n3. If the retrieved context does not contain sufficient information to generate an accurate and informative answer, append <NOANS> at the end of the answer\n\n==Retrieved context start==\n{context}\n==Retrieved context end==",
|
|
110
|
+
"general": process.env.GENERAL_CONTEXT || "You are an helpful assistant for question-answering tasks. Follow these steps carefully:\n1. Answer in the same language of the user question, regardless of the retrieved context language\n2. Use ONLY the pieces of the retrieved context and the chat history to answer the question.\n3. If the retrieved context does not contain sufficient information to generate an accurate and informative answer, append <NOANS> at the end of the answer\n\n==Retrieved context start==\n{context}\n==Retrieved context end=="
|
|
108
111
|
}
|
|
109
112
|
|
|
110
113
|
/**
|
|
@@ -318,13 +321,10 @@ router.post('/qa', async (req, res) => {
|
|
|
318
321
|
} else {
|
|
319
322
|
try {
|
|
320
323
|
let key = await integrationService.getKeyFromIntegration(project_id, data.llm);
|
|
321
|
-
console.log("key from integration: ", key);
|
|
322
324
|
if (!key) {
|
|
323
|
-
console.log("key not found in integration")
|
|
324
325
|
if (data.llm === 'openai') {
|
|
325
326
|
data.gptkey = process.env.GPTKEY;
|
|
326
327
|
publicKey = true;
|
|
327
|
-
console.log("set gptkey to " + data.gptkey + " and publicKey to " + publicKey);
|
|
328
328
|
} else {
|
|
329
329
|
return res.status(404).send({ success: false, error: `Invalid or empty key provided for ${data.llm}` });
|
|
330
330
|
}
|
|
@@ -364,6 +364,12 @@ router.post('/qa', async (req, res) => {
|
|
|
364
364
|
|
|
365
365
|
if (ns.hybrid === true) {
|
|
366
366
|
data.search_type = 'hybrid';
|
|
367
|
+
|
|
368
|
+
if (data.reranking === true) {
|
|
369
|
+
json.reranking = true;
|
|
370
|
+
json.reranking_multiplier = 3;
|
|
371
|
+
json.reranker_model = "cross-encoder/ms-marco-MiniLM-L-6-v2";
|
|
372
|
+
}
|
|
367
373
|
}
|
|
368
374
|
|
|
369
375
|
if (data.llm === 'ollama') {
|
|
@@ -411,7 +417,6 @@ router.post('/qa', async (req, res) => {
|
|
|
411
417
|
}
|
|
412
418
|
obj.multiplier = multiplier;
|
|
413
419
|
obj.tokens = answer.prompt_token_size;
|
|
414
|
-
console.log("is publicKey TRUE: ", obj)
|
|
415
420
|
|
|
416
421
|
let incremented_key = quoteManager.incrementTokenCount(req.project, obj);
|
|
417
422
|
winston.verbose("incremented_key: ", incremented_key);
|
package/services/QuoteManager.js
CHANGED
|
@@ -97,9 +97,7 @@ class QuoteManager {
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
let tokens = data.tokens * data.multiplier;
|
|
100
|
-
console.log("incr tokens by ", tokens);
|
|
101
100
|
await this.tdCache.incrbyfloat(key, tokens);
|
|
102
|
-
console.log("token increased");
|
|
103
101
|
// await this.tdCache.incrby(key, tokens);
|
|
104
102
|
this.sendEmailIfQuotaExceeded(project, data, 'tokens', key);
|
|
105
103
|
return key;
|
|
@@ -325,10 +325,16 @@ class RequestService {
|
|
|
325
325
|
})
|
|
326
326
|
}
|
|
327
327
|
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
328
|
+
/**
|
|
329
|
+
* TODO: Restore proper functioning
|
|
330
|
+
* Option commented on 03/12/2025 by Johnny in order to allows clients to receive the request populated
|
|
331
|
+
* in such case of Abandoned Request (Status 150)
|
|
332
|
+
*/
|
|
333
|
+
// if (no_populate === "true" || no_populate === true) {
|
|
334
|
+
// winston.debug("no_populate is true");
|
|
335
|
+
// requestEvent.emit('request.update', request);
|
|
336
|
+
// return resolve(request);
|
|
337
|
+
// }
|
|
332
338
|
|
|
333
339
|
return request
|
|
334
340
|
.populate('lead')
|
package/utils/TdCache.js
CHANGED
|
@@ -113,10 +113,8 @@ class TdCache {
|
|
|
113
113
|
return new Promise( async (resolve, reject) => {
|
|
114
114
|
try {
|
|
115
115
|
await this.client.incrbyfloat(key, increment);
|
|
116
|
-
console.log("incrbyfloat OK")
|
|
117
116
|
}
|
|
118
117
|
catch(error) {
|
|
119
|
-
console.error("Error on incrby: ", error);
|
|
120
118
|
reject(error);
|
|
121
119
|
}
|
|
122
120
|
return resolve();
|
|
@@ -334,7 +334,7 @@ class WebSocketServer {
|
|
|
334
334
|
|
|
335
335
|
// db.getCollection('requests').find({"id_project":"5e15bef09877c800176d217f","status":{"$lt":1000},"$or":[{"agents":{"id_user":"5ddd30bff0195f0017f72c6d"}},{"participants":"5ddd30bff0195f0017f72c6d"}]})
|
|
336
336
|
// pubblica dopo toni
|
|
337
|
-
var query = { "id_project": projectId, "status": { $lt: 1000, $gt: 50
|
|
337
|
+
var query = { "id_project": projectId, "status": { $lt: 1000, $gt: 50 }, preflight: false, "draft": { $in: [false, null] } };
|
|
338
338
|
// add hasBot:false
|
|
339
339
|
|
|
340
340
|
// var query = {"id_project":projectId, "status": { $lt: 1000, $gt: 50 }, $or:[ {preflight:false}, { preflight : { $exists: false } } ] };
|