@animalabs/membrane 0.5.45 → 0.5.46
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.
- package/dist/formatters/index.d.ts +0 -1
- package/dist/formatters/index.js +0 -1
- package/dist/formatters/index.js.map +1 -1
- package/dist/formatters/types.d.ts +0 -4
- package/dist/providers/gemini.js +11 -2
- package/dist/providers/gemini.js.map +1 -1
- package/dist/providers/openai-compatible.js +25 -15
- package/dist/providers/openai-compatible.js.map +1 -1
- package/dist/providers/openai-completions.js +48 -24
- package/dist/providers/openai-completions.js.map +1 -1
- package/dist/providers/openai-responses.js +6 -1
- package/dist/providers/openai-responses.js.map +1 -1
- package/dist/providers/openai.js +25 -15
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/openrouter.js +35 -16
- package/dist/providers/openrouter.js.map +1 -1
- package/dist/providers/utils.d.ts +38 -0
- package/dist/providers/utils.d.ts.map +1 -1
- package/dist/providers/utils.js +86 -0
- package/dist/providers/utils.js.map +1 -1
- package/dist/types/request.d.ts +8 -0
- package/dist/types/request.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/formatters/pseudo-prefill.d.ts +0 -71
- package/dist/formatters/pseudo-prefill.d.ts.map +0 -1
- package/dist/formatters/pseudo-prefill.js +0 -410
- package/dist/formatters/pseudo-prefill.js.map +0 -1
- package/dist/transforms/prefill.d.ts +0 -89
- package/dist/transforms/prefill.d.ts.map +0 -1
- package/dist/transforms/prefill.js +0 -390
- package/dist/transforms/prefill.js.map +0 -1
|
@@ -1,390 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Prefill mode transforms
|
|
3
|
-
*
|
|
4
|
-
* Converts normalized messages to participant-based conversation log format:
|
|
5
|
-
*
|
|
6
|
-
* Alice: Hello there!
|
|
7
|
-
*
|
|
8
|
-
* Bob: Hi Alice!
|
|
9
|
-
*
|
|
10
|
-
* Claude: [assistant continuation starts here...]
|
|
11
|
-
*
|
|
12
|
-
* Key features:
|
|
13
|
-
* - Cache control markers for Anthropic prompt caching
|
|
14
|
-
* - Image flushing (images cause conversation flush to user turn)
|
|
15
|
-
* - Tool injection into conversation
|
|
16
|
-
*/
|
|
17
|
-
import { formatToolDefinitions } from '../utils/tool-parser.js';
|
|
18
|
-
// ============================================================================
|
|
19
|
-
// Main Transform Function
|
|
20
|
-
// ============================================================================
|
|
21
|
-
/**
|
|
22
|
-
* Transform normalized request to prefill format with cache control support
|
|
23
|
-
*/
|
|
24
|
-
export function transformToPrefill(request, options = {}) {
|
|
25
|
-
const { assistantName = 'Claude', maxParticipantsForStop = 10, additionalStopSequences = [], toolInjectionMode = 'conversation', toolInjectionPosition = 10, promptCaching = true, messageDelimiter = '', contextPrefix, prefillThinking = false, } = options;
|
|
26
|
-
const messages = request.messages;
|
|
27
|
-
const providerMessages = [];
|
|
28
|
-
// Track cache marker GLOBALLY across all flushes
|
|
29
|
-
// Everything BEFORE we see the marker gets cache_control
|
|
30
|
-
// Everything AFTER does NOT
|
|
31
|
-
let passedCacheMarker = false;
|
|
32
|
-
let cacheMarkersApplied = 0;
|
|
33
|
-
// Joiner between messages (if delimiter, no newlines needed)
|
|
34
|
-
const joiner = messageDelimiter ? '' : '\n';
|
|
35
|
-
// Track conversation lines for current section
|
|
36
|
-
let currentConversation = [];
|
|
37
|
-
let lastNonEmptyParticipant = null;
|
|
38
|
-
// Calculate tool injection point based on total message count (not current segment)
|
|
39
|
-
// Tools should be injected N messages from the end of the entire conversation
|
|
40
|
-
const totalMessages = messages.length;
|
|
41
|
-
const toolInjectionIndex = Math.max(0, totalMessages - toolInjectionPosition);
|
|
42
|
-
let toolsInjected = false;
|
|
43
|
-
const hasToolsForConversation = toolInjectionMode === 'conversation' &&
|
|
44
|
-
request.tools &&
|
|
45
|
-
request.tools.length > 0;
|
|
46
|
-
const toolsText = hasToolsForConversation ? formatToolsForInjection(request.tools) : '';
|
|
47
|
-
// Build system prompt
|
|
48
|
-
let systemText = request.system ?? '';
|
|
49
|
-
// Inject tool definitions into system prompt if mode is 'system'
|
|
50
|
-
if (toolInjectionMode === 'system' && request.tools && request.tools.length > 0) {
|
|
51
|
-
const toolsXml = formatToolsForPrefill(request.tools);
|
|
52
|
-
systemText = injectToolsIntoSystem(systemText, toolsXml);
|
|
53
|
-
}
|
|
54
|
-
// System prompt content (with cache_control if enabled)
|
|
55
|
-
const systemContent = [];
|
|
56
|
-
if (systemText) {
|
|
57
|
-
const systemBlock = { type: 'text', text: systemText };
|
|
58
|
-
if (promptCaching) {
|
|
59
|
-
systemBlock.cache_control = { type: 'ephemeral' };
|
|
60
|
-
cacheMarkersApplied++;
|
|
61
|
-
}
|
|
62
|
-
systemContent.push(systemBlock);
|
|
63
|
-
// Note: system content goes in systemContent, not providerMessages
|
|
64
|
-
// Anthropic's API requires system as a top-level parameter
|
|
65
|
-
}
|
|
66
|
-
// Add context prefix as first cached assistant message (for simulacrum seeding)
|
|
67
|
-
if (contextPrefix) {
|
|
68
|
-
const prefixBlock = { type: 'text', text: contextPrefix };
|
|
69
|
-
if (promptCaching) {
|
|
70
|
-
prefixBlock.cache_control = { type: 'ephemeral' };
|
|
71
|
-
cacheMarkersApplied++;
|
|
72
|
-
}
|
|
73
|
-
providerMessages.push({
|
|
74
|
-
role: 'assistant',
|
|
75
|
-
content: [prefixBlock],
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
// Process messages
|
|
79
|
-
for (let i = 0; i < messages.length; i++) {
|
|
80
|
-
const message = messages[i];
|
|
81
|
-
if (!message)
|
|
82
|
-
continue;
|
|
83
|
-
const isLastMessage = i === messages.length - 1;
|
|
84
|
-
const isAssistant = message.participant === assistantName;
|
|
85
|
-
const hasCacheMarker = !!message.metadata?.cacheControl;
|
|
86
|
-
// Extract text and images
|
|
87
|
-
const { text, images } = formatContentForPrefill(message.content, message.participant);
|
|
88
|
-
const hasImages = images.length > 0;
|
|
89
|
-
const isEmpty = !text.trim() && !hasImages;
|
|
90
|
-
// Check for tool results
|
|
91
|
-
const hasToolResult = message.content.some(c => c.type === 'tool_result');
|
|
92
|
-
// If message has images, flush current conversation and add as user message
|
|
93
|
-
if (hasImages && !isEmpty) {
|
|
94
|
-
// Flush current assistant conversation
|
|
95
|
-
if (currentConversation.length > 0) {
|
|
96
|
-
const content = currentConversation.join(joiner);
|
|
97
|
-
providerMessages.push({
|
|
98
|
-
role: 'assistant',
|
|
99
|
-
content: content,
|
|
100
|
-
});
|
|
101
|
-
currentConversation = [];
|
|
102
|
-
}
|
|
103
|
-
// Add message with image as user turn
|
|
104
|
-
const userContent = [];
|
|
105
|
-
if (text) {
|
|
106
|
-
userContent.push({ type: 'text', text: `${message.participant}: ${text}` });
|
|
107
|
-
}
|
|
108
|
-
userContent.push(...images);
|
|
109
|
-
providerMessages.push({
|
|
110
|
-
role: 'user',
|
|
111
|
-
content: userContent,
|
|
112
|
-
});
|
|
113
|
-
lastNonEmptyParticipant = message.participant;
|
|
114
|
-
continue;
|
|
115
|
-
}
|
|
116
|
-
// Skip empty messages (except last)
|
|
117
|
-
if (isEmpty && !isLastMessage) {
|
|
118
|
-
continue;
|
|
119
|
-
}
|
|
120
|
-
// Check if this message has the cache marker - switch to uncached mode AFTER this
|
|
121
|
-
if (hasCacheMarker && !passedCacheMarker) {
|
|
122
|
-
// Flush everything before this message WITH cache_control (if caching enabled)
|
|
123
|
-
if (currentConversation.length > 0) {
|
|
124
|
-
const content = currentConversation.join(joiner);
|
|
125
|
-
const contentBlock = { type: 'text', text: content };
|
|
126
|
-
if (promptCaching) {
|
|
127
|
-
contentBlock.cache_control = { type: 'ephemeral' };
|
|
128
|
-
cacheMarkersApplied++;
|
|
129
|
-
}
|
|
130
|
-
providerMessages.push({
|
|
131
|
-
role: 'assistant',
|
|
132
|
-
content: [contentBlock],
|
|
133
|
-
});
|
|
134
|
-
currentConversation = [];
|
|
135
|
-
}
|
|
136
|
-
passedCacheMarker = true;
|
|
137
|
-
}
|
|
138
|
-
// Inject tools BEFORE this message if we've reached the injection point
|
|
139
|
-
// For short conversations (toolInjectionIndex <= 0), inject at the very beginning (i === 0)
|
|
140
|
-
const shouldInjectHere = toolInjectionIndex > 0 ? i >= toolInjectionIndex : i === 0;
|
|
141
|
-
if (hasToolsForConversation && !toolsInjected && shouldInjectHere) {
|
|
142
|
-
currentConversation.push(toolsText);
|
|
143
|
-
toolsInjected = true;
|
|
144
|
-
}
|
|
145
|
-
// Check bot continuation logic
|
|
146
|
-
const isBotMessage = message.participant === assistantName;
|
|
147
|
-
const isContinuation = isBotMessage && lastNonEmptyParticipant === assistantName && !hasToolResult;
|
|
148
|
-
if (isContinuation && isLastMessage) {
|
|
149
|
-
// Bot continuation - don't add prefix, just complete from where we are
|
|
150
|
-
continue;
|
|
151
|
-
}
|
|
152
|
-
else if (isLastMessage && isEmpty) {
|
|
153
|
-
// Completion target - turn prefix will be added AFTER tool injection
|
|
154
|
-
// (handled below, not here)
|
|
155
|
-
}
|
|
156
|
-
else if (text) {
|
|
157
|
-
// Regular message - append delimiter if configured
|
|
158
|
-
currentConversation.push(`${message.participant}: ${text}${messageDelimiter}`);
|
|
159
|
-
if (!hasToolResult) {
|
|
160
|
-
lastNonEmptyParticipant = message.participant;
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
// Determine the turn prefix to use (added AFTER tool injection)
|
|
165
|
-
let turnPrefix;
|
|
166
|
-
if (prefillThinking) {
|
|
167
|
-
turnPrefix = `${assistantName}: <thinking>`;
|
|
168
|
-
}
|
|
169
|
-
else {
|
|
170
|
-
turnPrefix = `${assistantName}:`;
|
|
171
|
-
}
|
|
172
|
-
// Flush any remaining conversation
|
|
173
|
-
// If tools haven't been injected yet (short conversation), add them now
|
|
174
|
-
if (hasToolsForConversation && !toolsInjected) {
|
|
175
|
-
currentConversation.push(toolsText);
|
|
176
|
-
toolsInjected = true;
|
|
177
|
-
}
|
|
178
|
-
// Add turn prefix at the very end (after tools and all messages)
|
|
179
|
-
if (currentConversation.length > 0) {
|
|
180
|
-
providerMessages.push({
|
|
181
|
-
role: 'assistant',
|
|
182
|
-
content: [...currentConversation, turnPrefix].join(joiner),
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
else {
|
|
186
|
-
// Empty conversation, just turn prefix
|
|
187
|
-
providerMessages.push({
|
|
188
|
-
role: 'assistant',
|
|
189
|
-
content: turnPrefix,
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
// Build stop sequences from participants
|
|
193
|
-
const stopSequences = buildStopSequences(messages, assistantName, maxParticipantsForStop, additionalStopSequences);
|
|
194
|
-
// Build legacy string versions for backwards compatibility
|
|
195
|
-
const legacyStrings = buildLegacyStrings(providerMessages, systemText);
|
|
196
|
-
return {
|
|
197
|
-
systemContent,
|
|
198
|
-
messages: providerMessages,
|
|
199
|
-
system: systemText,
|
|
200
|
-
userContent: legacyStrings.userContent,
|
|
201
|
-
assistantPrefill: legacyStrings.assistantPrefill,
|
|
202
|
-
stopSequences,
|
|
203
|
-
cacheMarkersApplied,
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
// ============================================================================
|
|
207
|
-
// Helper Functions
|
|
208
|
-
// ============================================================================
|
|
209
|
-
function formatContentForPrefill(content, participant) {
|
|
210
|
-
const parts = [];
|
|
211
|
-
const images = [];
|
|
212
|
-
for (const block of content) {
|
|
213
|
-
if (block.type === 'text') {
|
|
214
|
-
parts.push(block.text);
|
|
215
|
-
}
|
|
216
|
-
else if (block.type === 'image') {
|
|
217
|
-
// Convert to provider format
|
|
218
|
-
if (block.source.type === 'base64') {
|
|
219
|
-
images.push({
|
|
220
|
-
type: 'image',
|
|
221
|
-
source: {
|
|
222
|
-
type: 'base64',
|
|
223
|
-
media_type: block.source.mediaType,
|
|
224
|
-
data: block.source.data,
|
|
225
|
-
},
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
else if (block.type === 'tool_use') {
|
|
230
|
-
// Format as: Name>[toolname]: {json}
|
|
231
|
-
parts.push(`${participant}>[${block.name}]: ${JSON.stringify(block.input)}`);
|
|
232
|
-
}
|
|
233
|
-
else if (block.type === 'tool_result') {
|
|
234
|
-
// Format as: Name<[tool_result]: result
|
|
235
|
-
const resultText = typeof block.content === 'string'
|
|
236
|
-
? block.content
|
|
237
|
-
: JSON.stringify(block.content);
|
|
238
|
-
parts.push(`${participant}<[tool_result]: ${resultText}`);
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
return { text: parts.join('\n'), images };
|
|
242
|
-
}
|
|
243
|
-
function formatToolsForPrefill(tools) {
|
|
244
|
-
const toolsForPrompt = tools.map((tool) => ({
|
|
245
|
-
name: tool.name,
|
|
246
|
-
description: tool.description,
|
|
247
|
-
parameters: Object.fromEntries(Object.entries(tool.inputSchema.properties).map(([name, schema]) => [
|
|
248
|
-
name,
|
|
249
|
-
{
|
|
250
|
-
type: schema.type,
|
|
251
|
-
description: schema.description,
|
|
252
|
-
required: tool.inputSchema.required?.includes(name),
|
|
253
|
-
enum: schema.enum,
|
|
254
|
-
},
|
|
255
|
-
])),
|
|
256
|
-
}));
|
|
257
|
-
return formatToolDefinitions(toolsForPrompt);
|
|
258
|
-
}
|
|
259
|
-
function injectToolsIntoSystem(system, toolsXml) {
|
|
260
|
-
const toolsSection = `
|
|
261
|
-
<available_tools>
|
|
262
|
-
${toolsXml}
|
|
263
|
-
</available_tools>
|
|
264
|
-
|
|
265
|
-
When you want to use a tool, output:
|
|
266
|
-
<function_calls>
|
|
267
|
-
<invoke name="tool_name">
|
|
268
|
-
<parameter name="param_name">value</parameter>
|
|
269
|
-
</invoke>
|
|
270
|
-
</function_calls>
|
|
271
|
-
`;
|
|
272
|
-
return system + '\n\n' + toolsSection;
|
|
273
|
-
}
|
|
274
|
-
// Tool format constants (assembled to avoid triggering stop sequences)
|
|
275
|
-
const FUNCTIONS_OPEN = '<' + 'functions>';
|
|
276
|
-
const FUNCTIONS_CLOSE = '</' + 'functions>';
|
|
277
|
-
const FUNCTION_OPEN = '<' + 'function>';
|
|
278
|
-
const FUNCTION_CLOSE = '</' + 'function>';
|
|
279
|
-
const FUNC_CALLS_OPEN = '<' + 'function_calls>';
|
|
280
|
-
const FUNC_CALLS_CLOSE = '</' + 'function_calls>';
|
|
281
|
-
const INVOKE_OPEN = '<' + 'invoke name="';
|
|
282
|
-
const INVOKE_CLOSE = '</' + 'invoke>';
|
|
283
|
-
const PARAM_OPEN = '<' + 'parameter name="';
|
|
284
|
-
const PARAM_CLOSE = '</' + 'parameter>';
|
|
285
|
-
function formatToolsForInjection(tools) {
|
|
286
|
-
// Use the same XML format as system mode for consistency
|
|
287
|
-
const toolsXml = formatToolsForPrefill(tools);
|
|
288
|
-
return `
|
|
289
|
-
<available_tools>
|
|
290
|
-
${toolsXml}
|
|
291
|
-
</available_tools>
|
|
292
|
-
|
|
293
|
-
When you want to use a tool, output:
|
|
294
|
-
${FUNC_CALLS_OPEN}
|
|
295
|
-
${INVOKE_OPEN}tool_name">
|
|
296
|
-
${PARAM_OPEN}param_name">value${PARAM_CLOSE}
|
|
297
|
-
${INVOKE_CLOSE}
|
|
298
|
-
${FUNC_CALLS_CLOSE}`;
|
|
299
|
-
}
|
|
300
|
-
function buildStopSequences(messages, assistantName, maxParticipants, additionalSequences) {
|
|
301
|
-
// Collect unique participants (excluding assistant)
|
|
302
|
-
const participants = new Set();
|
|
303
|
-
// Scan from end of messages
|
|
304
|
-
for (let i = messages.length - 1; i >= 0 && participants.size < maxParticipants; i--) {
|
|
305
|
-
const message = messages[i];
|
|
306
|
-
if (!message)
|
|
307
|
-
continue;
|
|
308
|
-
const participant = message.participant;
|
|
309
|
-
if (participant !== assistantName) {
|
|
310
|
-
participants.add(participant);
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
// Build stop sequences
|
|
314
|
-
const sequences = [];
|
|
315
|
-
// Participant-based stops
|
|
316
|
-
for (const participant of participants) {
|
|
317
|
-
sequences.push(`\n${participant}:`);
|
|
318
|
-
}
|
|
319
|
-
// Tool-related stop
|
|
320
|
-
sequences.push('</function_calls>');
|
|
321
|
-
// Additional sequences
|
|
322
|
-
sequences.push(...additionalSequences);
|
|
323
|
-
return sequences;
|
|
324
|
-
}
|
|
325
|
-
function buildLegacyStrings(messages, systemText) {
|
|
326
|
-
// Extract user content (first user message after system)
|
|
327
|
-
let userContent = '';
|
|
328
|
-
let assistantPrefill = '';
|
|
329
|
-
for (const msg of messages) {
|
|
330
|
-
if (msg.role === 'user') {
|
|
331
|
-
if (typeof msg.content === 'string') {
|
|
332
|
-
userContent += msg.content + '\n\n';
|
|
333
|
-
}
|
|
334
|
-
else {
|
|
335
|
-
// Extract text from blocks
|
|
336
|
-
for (const block of msg.content) {
|
|
337
|
-
if (block.type === 'text') {
|
|
338
|
-
userContent += block.text + '\n\n';
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
else if (msg.role === 'assistant') {
|
|
344
|
-
if (typeof msg.content === 'string') {
|
|
345
|
-
assistantPrefill += msg.content;
|
|
346
|
-
}
|
|
347
|
-
else {
|
|
348
|
-
for (const block of msg.content) {
|
|
349
|
-
if (block.type === 'text') {
|
|
350
|
-
assistantPrefill += block.text;
|
|
351
|
-
}
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
return {
|
|
357
|
-
userContent: userContent.trim(),
|
|
358
|
-
assistantPrefill: assistantPrefill,
|
|
359
|
-
};
|
|
360
|
-
}
|
|
361
|
-
// ============================================================================
|
|
362
|
-
// Prefill Continuation
|
|
363
|
-
// ============================================================================
|
|
364
|
-
/**
|
|
365
|
-
* Build a continuation request from accumulated output
|
|
366
|
-
*/
|
|
367
|
-
export function buildContinuationPrefill(originalResult, accumulated) {
|
|
368
|
-
// Update the last assistant message with accumulated content
|
|
369
|
-
const newMessages = [...originalResult.messages];
|
|
370
|
-
// Find the last assistant message or add one
|
|
371
|
-
const lastIdx = newMessages.length - 1;
|
|
372
|
-
if (lastIdx >= 0 && newMessages[lastIdx]?.role === 'assistant') {
|
|
373
|
-
newMessages[lastIdx] = {
|
|
374
|
-
role: 'assistant',
|
|
375
|
-
content: accumulated,
|
|
376
|
-
};
|
|
377
|
-
}
|
|
378
|
-
else {
|
|
379
|
-
newMessages.push({
|
|
380
|
-
role: 'assistant',
|
|
381
|
-
content: accumulated,
|
|
382
|
-
});
|
|
383
|
-
}
|
|
384
|
-
return {
|
|
385
|
-
...originalResult,
|
|
386
|
-
messages: newMessages,
|
|
387
|
-
assistantPrefill: accumulated,
|
|
388
|
-
};
|
|
389
|
-
}
|
|
390
|
-
//# sourceMappingURL=prefill.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prefill.js","sourceRoot":"","sources":["../../src/transforms/prefill.ts"],"names":[],"mappings":"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"}
|