@peopl-health/nexus 4.7.0-dev.450 → 4.7.0-dev.451
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.
|
@@ -160,14 +160,6 @@ class BaseLLMProvider {
|
|
|
160
160
|
throw new Error(`${this.constructor.name} must implement _invokeModel()`);
|
|
161
161
|
}
|
|
162
162
|
|
|
163
|
-
async createConversation() {
|
|
164
|
-
throw new Error(`createConversation is not supported by ${this.constructor.name}`);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
async listMessages() {
|
|
168
|
-
throw new Error(`listMessages is not supported by ${this.constructor.name}`);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
163
|
async transcribeAudio() {
|
|
172
164
|
throw new Error(`transcribeAudio is not supported by ${this.constructor.name}`);
|
|
173
165
|
}
|
|
@@ -420,13 +412,6 @@ class BaseLLMProvider {
|
|
|
420
412
|
if (segments.length > 1) logger.debug(`[${this.constructor.name}] Concatenated transcript detected, using last segment`, { segmentCount: segments.length });
|
|
421
413
|
return segments[segments.length - 1].trim();
|
|
422
414
|
}
|
|
423
|
-
|
|
424
|
-
_ensureId(value) {
|
|
425
|
-
if (!value) throw new Error('Identifier value is required');
|
|
426
|
-
if (typeof value === 'string') return value;
|
|
427
|
-
if (value?.id) return value.id;
|
|
428
|
-
throw new Error('Unable to resolve identifier value');
|
|
429
|
-
}
|
|
430
415
|
}
|
|
431
416
|
|
|
432
417
|
module.exports = {
|
|
@@ -10,9 +10,6 @@ const { logger } = require('../../utils/logger');
|
|
|
10
10
|
const { BaseLLMProvider } = require('./BaseLLMProvider');
|
|
11
11
|
const { handleFunctionCalls } = require('./OpenAIResponsesProviderTools');
|
|
12
12
|
|
|
13
|
-
const CONVERSATION_PREFIX = 'conv_';
|
|
14
|
-
const MAX_ITEMS_ON_CREATE = 20;
|
|
15
|
-
const MAX_ITEMS_PER_BATCH = 20;
|
|
16
13
|
const DEFAULT_MAX_FUNCTION_ROUNDS = 5;
|
|
17
14
|
|
|
18
15
|
class OpenAIResponsesProvider extends BaseLLMProvider {
|
|
@@ -46,76 +43,12 @@ class OpenAIResponsesProvider extends BaseLLMProvider {
|
|
|
46
43
|
this.supportsPromptRegistry = true;
|
|
47
44
|
|
|
48
45
|
this.responses = this.client.responses;
|
|
49
|
-
this.conversations = this.client.conversations;
|
|
50
46
|
}
|
|
51
47
|
|
|
52
48
|
_operatorInstructionTurn(additionalInstructions) {
|
|
53
49
|
return { role: 'developer', content: `[Instrucción del operador para tu próxima respuesta al paciente]: ${additionalInstructions}` };
|
|
54
50
|
}
|
|
55
51
|
|
|
56
|
-
async createConversation({ metadata, messages = [], toolResources } = {}) {
|
|
57
|
-
const maxHistoricalMessages = this.conversationManager.maxHistoricalMessages;
|
|
58
|
-
const capped = messages.length > maxHistoricalMessages;
|
|
59
|
-
const messagesToProcess = capped ? messages.slice(-maxHistoricalMessages) : messages;
|
|
60
|
-
if (capped) {
|
|
61
|
-
logger.warn(`[createConversation] Capped ${messages.length} → ${maxHistoricalMessages} messages`);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
const allItems = this._convertItemsToApiFormat(messagesToProcess);
|
|
65
|
-
const initialItems = allItems.slice(0, MAX_ITEMS_ON_CREATE);
|
|
66
|
-
const remainingItems = allItems.slice(MAX_ITEMS_ON_CREATE);
|
|
67
|
-
|
|
68
|
-
if (remainingItems.length) {
|
|
69
|
-
logger.info(`[createConversation] Batching: ${initialItems.length} initial + ${remainingItems.length} remaining`);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
const conversation = await this._createConversationWithItems(metadata, initialItems, toolResources);
|
|
73
|
-
|
|
74
|
-
if (remainingItems.length) {
|
|
75
|
-
try {
|
|
76
|
-
await this._addItemsInBatches(conversation.id, remainingItems);
|
|
77
|
-
} catch (error) {
|
|
78
|
-
logger.error('[createConversation] Failed to add remaining messages', { error: error.message });
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
return conversation;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
async _createConversationWithItems(metadata, items, toolResources) {
|
|
86
|
-
const payload = {
|
|
87
|
-
metadata,
|
|
88
|
-
items: items.length ? items : undefined,
|
|
89
|
-
tool_resources: toolResources
|
|
90
|
-
};
|
|
91
|
-
const { result } = await retryWithBackoff(
|
|
92
|
-
() => this.conversations.create(payload),
|
|
93
|
-
{ providerName: this.constructor.name }
|
|
94
|
-
);
|
|
95
|
-
return result;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
async _addItemsInBatches(threadId, items, batchSize = MAX_ITEMS_PER_BATCH) {
|
|
99
|
-
if (!items?.length) return;
|
|
100
|
-
|
|
101
|
-
const id = this._ensurethreadId(threadId);
|
|
102
|
-
for (let i = 0; i < items.length; i += batchSize) {
|
|
103
|
-
const batch = this._convertItemsToApiFormat(items.slice(i, i + batchSize));
|
|
104
|
-
await retryWithBackoff(
|
|
105
|
-
() => this.conversations.items.create(id, { items: batch }),
|
|
106
|
-
{ providerName: this.constructor.name }
|
|
107
|
-
);
|
|
108
|
-
}
|
|
109
|
-
logger.info(`[_addItemsInBatches] Added ${items.length} messages in ${Math.ceil(items.length / batchSize)} batches`);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
async listMessages({ threadId, order = 'desc', limit } = {}) {
|
|
113
|
-
return this.client.conversations.items.list(
|
|
114
|
-
this._ensurethreadId(threadId),
|
|
115
|
-
{ order, limit }
|
|
116
|
-
);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
52
|
async _invokeModel({
|
|
120
53
|
instructions, input, toolSchemas = [], toolChoice = 'auto', followUpToolChoice = 'auto',
|
|
121
54
|
modelConfig, metadata = {}, assistant, phiProcessor = null,
|
|
@@ -237,15 +170,6 @@ class OpenAIResponsesProvider extends BaseLLMProvider {
|
|
|
237
170
|
file, language, response_format: responseFormat, temperature, prompt,
|
|
238
171
|
});
|
|
239
172
|
}
|
|
240
|
-
|
|
241
|
-
_ensurethreadId(value) {
|
|
242
|
-
const id = this._ensureId(value);
|
|
243
|
-
if (!id.startsWith(CONVERSATION_PREFIX)) {
|
|
244
|
-
throw new Error(`Expected conversation id to start with '${CONVERSATION_PREFIX}'`);
|
|
245
|
-
}
|
|
246
|
-
return id;
|
|
247
|
-
}
|
|
248
|
-
|
|
249
173
|
}
|
|
250
174
|
|
|
251
175
|
module.exports = {
|
|
@@ -196,14 +196,6 @@ class OpenRouterProvider extends OpenAIResponsesProvider {
|
|
|
196
196
|
file, language, response_format: responseFormat, temperature, prompt,
|
|
197
197
|
});
|
|
198
198
|
}
|
|
199
|
-
|
|
200
|
-
async createConversation() {
|
|
201
|
-
throw new Error('createConversation is not supported by OpenRouterProvider');
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
async listMessages() {
|
|
205
|
-
throw new Error('listMessages is not supported by OpenRouterProvider');
|
|
206
|
-
}
|
|
207
199
|
}
|
|
208
200
|
|
|
209
201
|
module.exports = {
|
package/lib/index.d.ts
CHANGED
|
@@ -273,8 +273,6 @@ declare module '@peopl-health/nexus' {
|
|
|
273
273
|
constructor(options?: { apiKey?: string; organization?: string; client?: any; defaultModels?: Record<string, string>; conversationManager?: any });
|
|
274
274
|
getVariant(): string;
|
|
275
275
|
getClient(): any;
|
|
276
|
-
createConversation(options?: any): Promise<any>;
|
|
277
|
-
listMessages(options?: any): Promise<any>;
|
|
278
276
|
executeRun(options: { thread: any; assistant: any; message?: string; tools?: any[]; config?: any }): Promise<any>;
|
|
279
277
|
runConversation(config?: any): Promise<any>;
|
|
280
278
|
transcribeAudio(options?: any): Promise<any>;
|