@peopl-health/nexus 3.11.1 → 3.11.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.
@@ -32,22 +32,8 @@ class EnhancedMemoryManager extends DefaultMemoryManager {
32
32
  const formattedMemories = this._formatMemoriesForPrompt(memories);
33
33
  const formattedSummaries = this._formatSummariesForPrompt(summaries);
34
34
 
35
- // Append memories and summaries to clinicalContext so they flow through
36
- // the existing {{clinical_context}} placeholder without template changes
37
- let clinicalContext = baseClinicalData?.clinicalContext ?? '';
38
- if (formattedMemories) {
39
- clinicalContext += '\n\n--- Memoria del paciente ---\n'
40
- + 'IMPORTANTE: Usa la siguiente información para personalizar tu respuesta. '
41
- + 'Adapta tu tono, contenido y recomendaciones según las preferencias, '
42
- + 'contexto emocional y situación específica del paciente.\n'
43
- + formattedMemories;
44
- }
45
- if (formattedSummaries) {
46
- clinicalContext += `\n\n--- Resumen de conversaciones recientes ---\n${formattedSummaries}`;
47
- }
48
-
49
35
  return {
50
- clinicalContext,
36
+ clinicalContext: baseClinicalData?.clinicalContext ?? '',
51
37
  lastSymptoms: baseClinicalData?.lastSymptoms ?? '',
52
38
  patientMemories: formattedMemories,
53
39
  conversationSummaries: formattedSummaries,
@@ -378,7 +378,14 @@ class OpenAIResponsesProvider {
378
378
  messages = [...messages, ...this._convertItemsToApiFormat(prePromptResult.additionalMessages)];
379
379
  }
380
380
 
381
- const input = [{ role: 'developer', content: devContent }, ...messages];
381
+ const memoryParts = [];
382
+ if (promptVariables?.patient_memories) memoryParts.push(`--- Memoria del paciente ---\n${promptVariables.patient_memories}`);
383
+ if (promptVariables?.conversation_summaries) memoryParts.push(`--- Resumen de conversaciones recientes ---\n${promptVariables.conversation_summaries}`);
384
+ const memoryMessage = memoryParts.length > 0
385
+ ? [{ role: 'developer', content: memoryParts.join('\n\n') }]
386
+ : [];
387
+
388
+ const input = [{ role: 'developer', content: devContent }, ...memoryMessage, ...messages];
382
389
 
383
390
  const promptConfig = { id: resolvedPromptId || assistantId };
384
391
  if (promptVariables) promptConfig.variables = promptVariables;
@@ -432,7 +439,7 @@ class OpenAIResponsesProvider {
432
439
  }
433
440
  }
434
441
 
435
- return {
442
+ const result = {
436
443
  ...finalResponse,
437
444
  thread_id: threadId,
438
445
  assistant_id: assistantId,
@@ -447,6 +454,7 @@ class OpenAIResponsesProvider {
447
454
  preset_version: resolvedPresetVersion,
448
455
  preset: resolvedPresetId ? { id: resolvedPresetId, version: resolvedPresetVersion } : null,
449
456
  };
457
+ return result;
450
458
  }
451
459
 
452
460
  async transcribeAudio({ file, model, language, responseFormat, temperature, prompt } = {}) {
@@ -312,7 +312,7 @@ const replyAssistantCore = async (code, message_ = null, thread_ = null, runOpti
312
312
  }
313
313
  }
314
314
 
315
- return { output, tools_executed, prompt_config: run?.prompt || null, response_id: run?.id || null };
315
+ return { output, tools_executed, prompt: run?.prompt || null, preset: run?.preset || null, response_id: run?.id || null };
316
316
  } catch (error) {
317
317
  logger.error('[replyAssistant] Error in reply', {
318
318
  error: error.message,
@@ -79,35 +79,33 @@ async function composePrompt({ presetId = null, presetVersion = null, promptId =
79
79
  let presetToolIds = null;
80
80
  let resolvedPresetVersion = null;
81
81
 
82
- if (presetId) {
83
- const preset = await fetchPreset(presetId, presetVersion);
84
- if (preset) {
85
- presetSnippetIds = preset.snippets || [];
86
- presetToolIds = preset.tools || [];
87
- resolvedPresetVersion = preset.version ? String(preset.version) : null;
88
- const promptRecordId = preset.prompt?.[0];
89
- if (promptRecordId) {
90
- const promptRecords = await getRecordByFilter(Config_ID, 'responses', `RECORD_ID()="${promptRecordId}"`);
91
- const presetPromptId = promptRecords?.[0]?.prompt_id;
92
- if (presetPromptId) resolvedPromptId = presetPromptId;
93
- }
94
- } else {
95
- logger.error('[promptComposer] Preset not found in Airtable', { presetId, presetVersion });
82
+ async function applyPreset(id, version = null) {
83
+ const preset = await fetchPreset(id, version);
84
+ if (!preset) {
85
+ logger.error('[promptComposer] Preset not found in Airtable', { presetId: id, presetVersion: version });
86
+ return;
96
87
  }
88
+ presetSnippetIds = preset.snippets || [];
89
+ presetToolIds = preset.tools || [];
90
+ resolvedPresetVersion = preset.version ? String(preset.version) : null;
91
+ const promptRecordId = preset.prompt?.[0];
92
+ if (promptRecordId) {
93
+ const promptRecords = await getRecordByFilter(Config_ID, 'responses', `RECORD_ID()="${promptRecordId}"`);
94
+ const presetPromptId = promptRecords?.[0]?.prompt_id;
95
+ if (presetPromptId) resolvedPromptId = presetPromptId;
96
+ }
97
+ }
98
+
99
+ if (presetId) {
100
+ await applyPreset(presetId, presetVersion);
97
101
  }
98
102
 
99
- const baseRecord = await fetchBasePrompt(resolvedPromptId);
103
+ let baseRecord = await fetchBasePrompt(resolvedPromptId);
100
104
 
101
105
  if (!presetId && baseRecord?.preset_id) {
102
106
  presetId = baseRecord.preset_id;
103
- const preset = await fetchPreset(presetId);
104
- if (preset) {
105
- presetSnippetIds = preset.snippets || [];
106
- presetToolIds = preset.tools || [];
107
- resolvedPresetVersion = preset.version ? String(preset.version) : null;
108
- } else {
109
- logger.error('[promptComposer] Prompt-level preset not found in Airtable', { presetId, promptId: resolvedPromptId });
110
- }
107
+ await applyPreset(presetId);
108
+ baseRecord = await fetchBasePrompt(resolvedPromptId);
111
109
  }
112
110
 
113
111
  if (!baseRecord) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peopl-health/nexus",
3
- "version": "3.11.1",
3
+ "version": "3.11.3",
4
4
  "description": "Core messaging and assistant library for WhatsApp communication platforms",
5
5
  "keywords": [
6
6
  "whatsapp",