@peopl-health/nexus 2.5.2-fix → 2.5.3

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.
@@ -3,8 +3,8 @@ const { Config_ID } = require('../config/airtableConfig');
3
3
  const { Thread } = require('../models/threadModel');
4
4
 
5
5
  const { getRecordByFilter } = require('../services/airtableService');
6
- const { createAssistant, addMsgAssistant, addInsAssistant } = require('../services/assistantService');
7
- const { getThreadInfo, switchAssistant } = require('../services/assistantService');
6
+ const { createAssistant, addMsgAssistant, addInsAssistant, switchAssistant } = require('../services/assistantService');
7
+ const { getThreadInfo } = require('../helpers/threadHelper');
8
8
  const { sendMessage } = require('../core/NexusMessaging');
9
9
  const { logger } = require('../utils/logger');
10
10
 
@@ -16,7 +16,7 @@ const activeAssistantController = async (req, res) => {
16
16
  await Thread.updateOne({ code }, { $set: { active: !!active } });
17
17
  return res.status(200).send({ message: 'Active assistant' });
18
18
  } catch (error) {
19
- logger.error(error);
19
+ logger.error('[activeAssistantController] Error', { error: error.message, code });
20
20
  return res.status(500).send({ message: 'Failed to active assistant', error });
21
21
  }
22
22
  };
@@ -32,7 +32,7 @@ const addInsAssistantController = async (req, res) => {
32
32
  if (ans) await sendMessage({code, body: ans, fileType: 'text', origin: 'assistant'});
33
33
  return res.status(200).send({ message: 'Add instruction to the assistant' });
34
34
  } catch (error) {
35
- logger.error(error);
35
+ logger.error('[addInsAssistantController] Error', { error: error.message, code });
36
36
  res.status(500).send({ message: 'Failed to add instruction to assistant', error });
37
37
  }
38
38
  };
@@ -45,7 +45,7 @@ const addMsgAssistantController = async (req, res) => {
45
45
  if (ans) await sendMessage({code, body: ans, fileType: 'text', origin: 'assistant'});
46
46
  return res.status(200).send({ message: 'Add message to the assistant' });
47
47
  } catch (error) {
48
- logger.error(error);
48
+ logger.error('[addMsgAssistantController] Error', { error: error.message, code, role });
49
49
  res.status(500).send({ message: 'Failed to add message assistant', error });
50
50
  }
51
51
  };
@@ -59,18 +59,18 @@ const createAssistantController = async (req, res) => {
59
59
  messages = Array.isArray(messages) ? messages : [];
60
60
 
61
61
  try {
62
- logger.info('[createAssistantController] codes', codes);
62
+ logger.info('[createAssistantController] codes', { codes });
63
63
  for (const code of codes) {
64
64
  await createAssistant(code, assistant_id, [...instrucciones, ...messages], force);
65
- logger.info('[createAssistantController] messages', messages);
65
+ logger.info('[createAssistantController] messages', { messages });
66
66
  for (const message of messages) {
67
- logger.info('[createAssistantController] message', message);
67
+ logger.info('[createAssistantController] message', { message });
68
68
  await sendMessage({code, body: message, fileType: 'text'});
69
69
  }
70
70
  }
71
71
  res.status(200).send({ message: 'Create the assistant' });
72
72
  } catch (error) {
73
- logger.error(error);
73
+ logger.error('[createAssistantController] Error creating assistant', { error: error.message, stack: error.stack });
74
74
  res.status(500).send({ message: 'Failed to create assistant', error });
75
75
  }
76
76
  };
@@ -82,7 +82,7 @@ const getInfoAssistantController = async (req, res) => {
82
82
  let threadInfo = await getThreadInfo(code);
83
83
  return res.status(200).send({ message: 'Send assistant info' , threadInfo});
84
84
  } catch (error) {
85
- logger.error(error);
85
+ logger.error('[getInfoAssistantController] Error', { error: error.message, code });
86
86
  res.status(500).send({ message: 'Failed to receive assistant info', error });
87
87
  }
88
88
  };
@@ -97,7 +97,7 @@ const listAssistantController = async (req, res) => {
97
97
  const assistants = await getRecordByFilter(Config_ID, tableName, `status="${airtableStatus}"`);
98
98
  return res.status(200).send({ message: 'List assistants' , assistants});
99
99
  } catch (error) {
100
- logger.error(error);
100
+ logger.error('[listAssistantController] Error', { error: error.message });
101
101
  res.status(500).send({ message: 'Failed to list assistants', error });
102
102
  }
103
103
  };
@@ -109,7 +109,7 @@ const switchAssistantController = async (req, res) => {
109
109
  await switchAssistant(code, assistant_id);
110
110
  return res.status(200).send({ message: 'Switch assistant' });
111
111
  } catch (error) {
112
- logger.error(error);
112
+ logger.error('[switchAssistantController] Error', { error: error.message, code, assistant_id });
113
113
  res.status(500).send({ message: 'Failed to switch assistant', error });
114
114
  }
115
115
  };
@@ -121,7 +121,7 @@ const stopAssistantController = async (req, res) => {
121
121
  await Thread.updateOne({ code }, { $set: { stopped: !!stop } });
122
122
  return res.status(200).send({ message: 'Stop assistant' });
123
123
  } catch (error) {
124
- logger.error(error);
124
+ logger.error('[stopAssistantController] Error', { error: error.message, code, stop });
125
125
  return res.status(500).send({ message: 'Failed to stop assistant', error });
126
126
  }
127
127
  };
@@ -5,6 +5,7 @@ const { createProvider } = require('../providers/createProvider');
5
5
  const { Thread } = require('../models/threadModel.js');
6
6
  const { PredictionMetrics } = require('../models/predictionMetricsModel');
7
7
  const { insertMessage } = require('../models/messageModel');
8
+ const { Historial_Clinico_ID } = require('../config/airtableConfig');
8
9
 
9
10
  const { getCurRow, runAssistantWithRetries } = require('../helpers/assistantHelper.js');
10
11
  const { getThread } = require('../helpers/threadHelper.js');
@@ -19,14 +20,14 @@ const createAssistantCore = async (code, assistant_id, getAssistantById) => {
19
20
  if (!thread) return null;
20
21
 
21
22
  const assistant = getAssistantById(assistant_id, thread);
22
- const curRow = await getCurRow(code);
23
+ const curRow = await getCurRow(Historial_Clinico_ID, code);
23
24
  const context = { curRow };
24
25
 
25
26
  try {
26
27
  await assistant.create(code, context);
27
28
  return { success: true, assistant_id };
28
29
  } catch (error) {
29
- logger.error('[createAssistantCore] Error:', error);
30
+ logger.error('[createAssistantCore] Error creating assistant', { error: error.message, assistant_id, code });
30
31
  return { success: false, error: error.message };
31
32
  }
32
33
  };
@@ -43,7 +44,7 @@ const addMsgAssistantCore = async (code, message, role = 'user') => {
43
44
  await insertMessage({ code, message, role });
44
45
  return { success: true };
45
46
  } catch (error) {
46
- logger.error('[addMsgAssistantCore] Error:', error);
47
+ logger.error('[addMsgAssistantCore] Error adding message', { error: error.message, code, role });
47
48
  return { success: false, error: error.message };
48
49
  }
49
50
  };
@@ -59,7 +60,7 @@ const addInstructionCore = async (code, instruction, role = 'user') => {
59
60
  await provider.addMessage({ threadId, messages: [{ role, content: instruction }] });
60
61
  return { success: true };
61
62
  } catch (error) {
62
- logger.error('[addInstructionCore] Error:', error);
63
+ logger.error('[addInstructionCore] Error adding instruction', { error: error.message, code, role });
63
64
  return { success: false, error: error.message };
64
65
  }
65
66
  };
@@ -175,12 +176,18 @@ const replyAssistantCore = async (code, message_ = null, thread_ = null, runOpti
175
176
  retry_count: retries,
176
177
  completed: completed,
177
178
  timing_breakdown: timings
178
- }).catch(err => logger.error('[replyAssistantCore] Failed to store metrics:', err));
179
+ }).catch(err => logger.error('[replyAssistantCore] Failed to store metrics', { error: err.message }));
179
180
  }
180
181
 
181
182
  return { output, tools_executed };
182
183
  } catch (error) {
183
- logger.error('[replyAssistantCore] Error:', { error: error.message });
184
+ logger.error('[replyAssistantCore] Error in reply', {
185
+ error: error.message,
186
+ stack: error.stack,
187
+ code: code ? `${code.substring(0, 3)}***${code.slice(-4)}` : 'unknown',
188
+ hasCustomThread: !!thread_,
189
+ hasMessage: !!message_
190
+ });
184
191
  throw error;
185
192
  }
186
193
  };
@@ -189,7 +196,8 @@ const switchAssistantCore = async (code, assistant_id) => {
189
196
  try {
190
197
  const thread = await Thread.findOne({ code });
191
198
  if (!thread) {
192
- return null;
199
+ logger.warn('[switchAssistantCore] Thread not found', { code, assistant_id });
200
+ return { success: false, error: 'Thread not found' };
193
201
  }
194
202
 
195
203
  const updateFields = {
@@ -199,10 +207,16 @@ const switchAssistantCore = async (code, assistant_id) => {
199
207
  };
200
208
 
201
209
  await Thread.updateOne({ code }, { $set: updateFields });
210
+ logger.info('[switchAssistantCore] Assistant switched', { code, assistant_id });
202
211
  return { success: true, assistant_id };
203
212
  } catch (error) {
204
- logger.info(error);
205
- return null;
213
+ logger.error('[switchAssistantCore] Error switching assistant', {
214
+ error: error.message,
215
+ stack: error.stack,
216
+ code,
217
+ assistant_id
218
+ });
219
+ return { success: false, error: error.message };
206
220
  }
207
221
  };
208
222
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peopl-health/nexus",
3
- "version": "2.5.2-fix",
3
+ "version": "2.5.3",
4
4
  "description": "Core messaging and assistant library for WhatsApp communication platforms",
5
5
  "keywords": [
6
6
  "whatsapp",