@peopl-health/nexus 3.8.0 → 3.8.1

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.
@@ -1,6 +1,5 @@
1
1
  const { OpenAI } = require('openai');
2
2
 
3
- const { Config_ID } = require('../config/airtableConfig');
4
3
  const { getCurrentMexicoDateTime } = require('../utils/dateUtils');
5
4
  const { retryWithBackoff } = require('../utils/retryUtils');
6
5
  const { logger } = require('../utils/logger');
@@ -8,7 +7,7 @@ const { Thread } = require('../models/threadModel');
8
7
  const { DefaultMemoryManager } = require('../memory/DefaultMemoryManager');
9
8
  const { OpenAIResponsesProvider } = require('../providers/OpenAIResponsesProvider');
10
9
  const { handleFunctionCalls } = require('../providers/OpenAIResponsesProviderTools');
11
- const { getRecordByFilter } = require('../services/airtableService');
10
+ const { composePrompt } = require('../services/promptComposerService');
12
11
  const { getAssistantById } = require('../services/assistantResolver');
13
12
 
14
13
  const MAX_FUNCTION_ROUNDS = parseInt(process.env.MAX_FUNCTION_ROUNDS || '5', 10);
@@ -108,12 +107,15 @@ class EvalProvider {
108
107
  async _resolvePrompt(fallbackPrompt, assistantId, thread, promptVariables) {
109
108
  let devContent;
110
109
  if (this.promptSource === 'airtable' && assistantId) {
111
- const devRecord = await getRecordByFilter(Config_ID, 'responses', `{prompt_id} = "${assistantId}"`);
112
- devContent = devRecord?.[0]?.content || '';
110
+ const { resolvedPrompt } = await composePrompt({
111
+ promptId: assistantId,
112
+ variables: promptVariables,
113
+ });
114
+ devContent = resolvedPrompt;
113
115
  } else {
114
116
  devContent = fallbackPrompt;
117
+ devContent = devContent.replace(/\{\{(\w+)\}\}/g, (_, key) => promptVariables[key] ?? '');
115
118
  }
116
- devContent = devContent.replace(/\{\{(\w+)\}\}/g, (_, key) => promptVariables[key] ?? '');
117
119
 
118
120
  let assistant = null;
119
121
  let toolSchemas = [];
@@ -1,7 +1,5 @@
1
1
  const { OpenAI } = require('openai');
2
2
 
3
- const { Config_ID } = require('../config/airtableConfig');
4
-
5
3
  const { retryWithBackoff } = require('../utils/retryUtils');
6
4
  const { logger } = require('../utils/logger');
7
5
  const { getCurrentMexicoDateTime } = require('../utils/dateUtils');
@@ -10,7 +8,7 @@ const { DefaultMemoryManager } = require('../memory/DefaultMemoryManager');
10
8
 
11
9
  const { getLastNMessages } = require('../helpers/messageHelper');
12
10
 
13
- const { getRecordByFilter } = require('../services/airtableService');
11
+ const { composePrompt } = require('../services/promptComposerService');
14
12
  const { handleFunctionCalls } = require('./OpenAIResponsesProviderTools');
15
13
 
16
14
  const CONVERSATION_PREFIX = 'conv_';
@@ -314,10 +312,12 @@ class OpenAIResponsesProvider {
314
312
  accumulatedUsage.total_tokens += usage.total_tokens || 0;
315
313
  };
316
314
 
317
- const devRecord = await getRecordByFilter(Config_ID, 'responses', `{prompt_id} = "${assistantId}"`);
318
- let devContent = devRecord?.[0]?.content || '';
319
- if (promptVariables) devContent = devContent.replace(/\{\{(\w+)\}\}/g, (_, key) => promptVariables[key] ?? '');
315
+ const { resolvedPrompt, snippetIds } = await composePrompt({
316
+ promptId: assistantId,
317
+ variables: promptVariables,
318
+ });
320
319
 
320
+ let devContent = resolvedPrompt;
321
321
  if (assistant?.tools?.size) {
322
322
  const toolNames = Array.from(assistant.tools.keys()).join(', ');
323
323
  devContent += `\n\nYou only have access to these tools: ${toolNames}. Do not call or reference any tools not listed here.`;
@@ -376,6 +376,8 @@ class OpenAIResponsesProvider {
376
376
  tools_executed: allToolsExecuted,
377
377
  retries: totalRetries,
378
378
  usage: accumulatedUsage,
379
+ resolved_prompt: devContent,
380
+ snippet_ids: snippetIds,
379
381
  };
380
382
  }
381
383
 
@@ -243,6 +243,8 @@ const replyAssistantCore = async (code, message_ = null, thread_ = null, runOpti
243
243
  const response_id = runResult.run?.id || null;
244
244
  const usage = runResult.run?.usage || null;
245
245
  const model = runResult.run?.model || null;
246
+ const resolved_prompt = runResult.run?.resolved_prompt || null;
247
+ const snippet_ids = runResult.run?.snippet_ids || [];
246
248
 
247
249
  const output = sanitizeOutput(rawOutput);
248
250
  if (rawOutput !== output) {
@@ -294,6 +296,8 @@ const replyAssistantCore = async (code, message_ = null, thread_ = null, runOpti
294
296
  prompt_config: prompt || null,
295
297
  response_id: response_id || null,
296
298
  context_message_count: lastMessage?.length || null,
299
+ resolved_prompt: resolved_prompt,
300
+ snippet_ids: snippet_ids,
297
301
  }).catch(err => logger.error('[replyAssistant] Failed to store metrics', { error: err.message }));
298
302
 
299
303
  const alertThreshold = parseInt(process.env.TOKEN_ALERT_THRESHOLD, 10);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peopl-health/nexus",
3
- "version": "3.8.0",
3
+ "version": "3.8.1",
4
4
  "description": "Core messaging and assistant library for WhatsApp communication platforms",
5
5
  "keywords": [
6
6
  "whatsapp",