@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
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
83
|
-
const preset = await fetchPreset(
|
|
84
|
-
if (preset) {
|
|
85
|
-
|
|
86
|
-
|
|
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
|
-
|
|
103
|
+
let baseRecord = await fetchBasePrompt(resolvedPromptId);
|
|
100
104
|
|
|
101
105
|
if (!presetId && baseRecord?.preset_id) {
|
|
102
106
|
presetId = baseRecord.preset_id;
|
|
103
|
-
|
|
104
|
-
|
|
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) {
|