@peopl-health/nexus 3.11.2 → 3.11.4

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.
@@ -168,7 +168,15 @@ class EvalProvider {
168
168
 
169
169
  _buildApiConfig(devContent, messages, assistantId, promptVariables, toolSchemas) {
170
170
  const convertedMessages = this.provider._convertItemsToApiFormat(messages);
171
- const input = [{ role: 'developer', content: devContent }, ...convertedMessages];
171
+
172
+ const memoryParts = [];
173
+ if (promptVariables?.patient_memories) memoryParts.push(`--- Memoria del paciente ---\n${promptVariables.patient_memories}`);
174
+ if (promptVariables?.conversation_summaries) memoryParts.push(`--- Resumen de conversaciones recientes ---\n${promptVariables.conversation_summaries}`);
175
+ const memoryMessage = memoryParts.length > 0
176
+ ? [{ role: 'developer', content: memoryParts.join('\n\n') }]
177
+ : [];
178
+
179
+ const input = [{ role: 'developer', content: devContent }, ...memoryMessage, ...convertedMessages];
172
180
  const apiConfig = { input, instructions: devContent || '' };
173
181
 
174
182
  if (assistantId) {
@@ -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;
@@ -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.2",
3
+ "version": "3.11.4",
4
4
  "description": "Core messaging and assistant library for WhatsApp communication platforms",
5
5
  "keywords": [
6
6
  "whatsapp",