@animalabs/membrane 0.5.18 → 0.5.19
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/formatters/native.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EAEZ,QAAQ,EACR,UAAU,EACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EAIhB,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,qBAAsB,SAAQ,eAAe;IAC5D;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA2ED,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,SAAS;IAE7B,OAAO,CAAC,MAAM,CAAkC;gBAEpC,MAAM,GAAE,qBAA0B;IAY9C,aAAa,CAAC,QAAQ,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,WAAW;
|
|
1
|
+
{"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../../src/formatters/native.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,YAAY,EAEZ,QAAQ,EACR,UAAU,EACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,eAAe,EAIhB,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,qBAAsB,SAAQ,eAAe;IAC5D;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AA2ED,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,WAAW,SAAS;IAE7B,OAAO,CAAC,MAAM,CAAkC;gBAEpC,MAAM,GAAE,qBAA0B;IAY9C,aAAa,CAAC,QAAQ,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,WAAW;IA0GhF,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,MAAM;IAchD,kBAAkB,IAAI,YAAY;IAIlC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE;IAM3C,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKpC,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,EAAE;IAYnD,OAAO,CAAC,cAAc;IAkEtB,OAAO,CAAC,qBAAqB;IA2B7B,OAAO,CAAC,oBAAoB;CAO7B"}
|
|
@@ -83,13 +83,20 @@ export class NativeFormatter {
|
|
|
83
83
|
// REQUEST BUILDING
|
|
84
84
|
// ==========================================================================
|
|
85
85
|
buildMessages(messages, options) {
|
|
86
|
-
const { participantMode, assistantParticipant, humanParticipant, tools, systemPrompt, } = options;
|
|
86
|
+
const { participantMode, assistantParticipant, humanParticipant, tools, systemPrompt, promptCaching = false, cacheTtl, hasCacheMarker, } = options;
|
|
87
|
+
// Build cache_control object if prompt caching is enabled
|
|
88
|
+
const cacheControl = promptCaching
|
|
89
|
+
? { type: 'ephemeral', ...(cacheTtl ? { ttl: cacheTtl } : {}) }
|
|
90
|
+
: undefined;
|
|
87
91
|
const providerMessages = [];
|
|
88
92
|
// Validate simple mode participants
|
|
89
93
|
if (participantMode === 'simple' && !humanParticipant) {
|
|
90
94
|
throw new Error('NativeFormatter in simple mode requires humanParticipant option');
|
|
91
95
|
}
|
|
92
|
-
for (
|
|
96
|
+
for (let i = 0; i < messages.length; i++) {
|
|
97
|
+
const message = messages[i];
|
|
98
|
+
if (!message)
|
|
99
|
+
continue;
|
|
93
100
|
// Determine role
|
|
94
101
|
const isAssistant = message.participant === assistantParticipant;
|
|
95
102
|
// Validate participant in simple mode
|
|
@@ -107,17 +114,46 @@ export class NativeFormatter {
|
|
|
107
114
|
if (content.length === 0) {
|
|
108
115
|
continue; // Skip empty messages
|
|
109
116
|
}
|
|
117
|
+
// hasCacheMarker: cache boundary is BEFORE this message — tag previous message's last block
|
|
118
|
+
if (hasCacheMarker && hasCacheMarker(message, i) && cacheControl && providerMessages.length > 0) {
|
|
119
|
+
const prevMsg = providerMessages[providerMessages.length - 1];
|
|
120
|
+
const prevContent = Array.isArray(prevMsg.content) ? prevMsg.content : [];
|
|
121
|
+
if (prevContent.length > 0) {
|
|
122
|
+
prevContent[prevContent.length - 1].cache_control = cacheControl;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
110
125
|
providerMessages.push({ role, content });
|
|
126
|
+
// cacheBreakpoint: cache up to and INCLUDING this message — tag last block
|
|
127
|
+
if (message.cacheBreakpoint && cacheControl && content.length > 0) {
|
|
128
|
+
content[content.length - 1].cache_control = cacheControl;
|
|
129
|
+
}
|
|
111
130
|
}
|
|
112
131
|
// Merge consecutive same-role messages (API requires alternating)
|
|
113
132
|
const mergedMessages = this.mergeConsecutiveRoles(providerMessages);
|
|
114
|
-
// Build system content
|
|
133
|
+
// Build system content with optional cache control
|
|
115
134
|
let systemContent;
|
|
116
135
|
if (typeof systemPrompt === 'string') {
|
|
117
|
-
|
|
136
|
+
if (cacheControl) {
|
|
137
|
+
// Must use array format for cache_control support
|
|
138
|
+
systemContent = [{ type: 'text', text: systemPrompt, cache_control: cacheControl }];
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
systemContent = systemPrompt;
|
|
142
|
+
}
|
|
118
143
|
}
|
|
119
144
|
else if (Array.isArray(systemPrompt)) {
|
|
120
|
-
|
|
145
|
+
if (cacheControl && systemPrompt.length > 0) {
|
|
146
|
+
// Add cache_control to the last system block
|
|
147
|
+
systemContent = systemPrompt.map((block, idx) => {
|
|
148
|
+
if (idx === systemPrompt.length - 1) {
|
|
149
|
+
return { ...block, cache_control: cacheControl };
|
|
150
|
+
}
|
|
151
|
+
return block;
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
systemContent = systemPrompt;
|
|
156
|
+
}
|
|
121
157
|
}
|
|
122
158
|
// Native tools
|
|
123
159
|
const nativeTools = tools?.length ? this.convertToNativeTools(tools) : undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/formatters/native.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAgCH,+EAA+E;AAC/E,6BAA6B;AAC7B,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,iBAAiB;IACb,WAAW,GAAG,EAAE,CAAC;IACjB,UAAU,GAAG,CAAC,CAAC;IAEvB,YAAY,CAAC,KAAa;QACxB,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC;QAC1B,MAAM,IAAI,GAAG;YACX,IAAI,EAAE,MAAe;YACrB,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC;QACF,OAAO;YACL,SAAS,EAAE,CAAC;oBACV,IAAI,EAAE,SAAkB;oBACxB,IAAI,EAAE,KAAK;oBACX,IAAI;iBACL,CAAC;YACF,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YAChC,WAAW,EAAE,EAAE;SAChB,CAAC;IACJ,CAAC;IAED,KAAK;QACH,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IACzD,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,CAAC,OAAe;QAClB,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC;IAC9B,CAAC;IAED,mBAAmB;QACjB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,mBAAmB;QACjB,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,aAAa;QACX,4CAA4C;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,oBAAoB;QAClB,gDAAgD;IAClD,CAAC;CACF;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E,MAAM,OAAO,eAAe;IACjB,IAAI,GAAG,QAAQ,CAAC;IAChB,WAAW,GAAG,KAAK,CAAC;IAErB,MAAM,CAAkC;IAEhD,YAAY,SAAgC,EAAE;QAC5C,IAAI,CAAC,MAAM,GAAG;YACZ,UAAU,EAAE,MAAM,CAAC,UAAU,IAAI,UAAU;YAC3C,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,IAAI,OAAO;YACpD,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,IAAI;SACxC,CAAC;IACJ,CAAC;IAED,6EAA6E;IAC7E,mBAAmB;IACnB,6EAA6E;IAE7E,aAAa,CAAC,QAA6B,EAAE,OAAqB;QAChE,MAAM,EACJ,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,KAAK,EACL,YAAY,
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../../src/formatters/native.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/formatters/native.ts
CHANGED
|
@@ -137,8 +137,16 @@ export class NativeFormatter implements PrefillFormatter {
|
|
|
137
137
|
humanParticipant,
|
|
138
138
|
tools,
|
|
139
139
|
systemPrompt,
|
|
140
|
+
promptCaching = false,
|
|
141
|
+
cacheTtl,
|
|
142
|
+
hasCacheMarker,
|
|
140
143
|
} = options;
|
|
141
144
|
|
|
145
|
+
// Build cache_control object if prompt caching is enabled
|
|
146
|
+
const cacheControl: Record<string, unknown> | undefined = promptCaching
|
|
147
|
+
? { type: 'ephemeral', ...(cacheTtl ? { ttl: cacheTtl } : {}) }
|
|
148
|
+
: undefined;
|
|
149
|
+
|
|
142
150
|
const providerMessages: ProviderMessage[] = [];
|
|
143
151
|
|
|
144
152
|
// Validate simple mode participants
|
|
@@ -146,7 +154,10 @@ export class NativeFormatter implements PrefillFormatter {
|
|
|
146
154
|
throw new Error('NativeFormatter in simple mode requires humanParticipant option');
|
|
147
155
|
}
|
|
148
156
|
|
|
149
|
-
for (
|
|
157
|
+
for (let i = 0; i < messages.length; i++) {
|
|
158
|
+
const message = messages[i];
|
|
159
|
+
if (!message) continue;
|
|
160
|
+
|
|
150
161
|
// Determine role
|
|
151
162
|
const isAssistant = message.participant === assistantParticipant;
|
|
152
163
|
|
|
@@ -171,18 +182,47 @@ export class NativeFormatter implements PrefillFormatter {
|
|
|
171
182
|
continue; // Skip empty messages
|
|
172
183
|
}
|
|
173
184
|
|
|
185
|
+
// hasCacheMarker: cache boundary is BEFORE this message — tag previous message's last block
|
|
186
|
+
if (hasCacheMarker && hasCacheMarker(message, i) && cacheControl && providerMessages.length > 0) {
|
|
187
|
+
const prevMsg = providerMessages[providerMessages.length - 1]!;
|
|
188
|
+
const prevContent = Array.isArray(prevMsg.content) ? prevMsg.content as Record<string, unknown>[] : [];
|
|
189
|
+
if (prevContent.length > 0) {
|
|
190
|
+
prevContent[prevContent.length - 1]!.cache_control = cacheControl;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
174
194
|
providerMessages.push({ role, content });
|
|
195
|
+
|
|
196
|
+
// cacheBreakpoint: cache up to and INCLUDING this message — tag last block
|
|
197
|
+
if (message.cacheBreakpoint && cacheControl && content.length > 0) {
|
|
198
|
+
(content[content.length - 1] as Record<string, unknown>).cache_control = cacheControl;
|
|
199
|
+
}
|
|
175
200
|
}
|
|
176
201
|
|
|
177
202
|
// Merge consecutive same-role messages (API requires alternating)
|
|
178
203
|
const mergedMessages = this.mergeConsecutiveRoles(providerMessages);
|
|
179
204
|
|
|
180
|
-
// Build system content
|
|
205
|
+
// Build system content with optional cache control
|
|
181
206
|
let systemContent: unknown;
|
|
182
207
|
if (typeof systemPrompt === 'string') {
|
|
183
|
-
|
|
208
|
+
if (cacheControl) {
|
|
209
|
+
// Must use array format for cache_control support
|
|
210
|
+
systemContent = [{ type: 'text', text: systemPrompt, cache_control: cacheControl }];
|
|
211
|
+
} else {
|
|
212
|
+
systemContent = systemPrompt;
|
|
213
|
+
}
|
|
184
214
|
} else if (Array.isArray(systemPrompt)) {
|
|
185
|
-
|
|
215
|
+
if (cacheControl && systemPrompt.length > 0) {
|
|
216
|
+
// Add cache_control to the last system block
|
|
217
|
+
systemContent = systemPrompt.map((block, idx) => {
|
|
218
|
+
if (idx === systemPrompt.length - 1) {
|
|
219
|
+
return { ...block, cache_control: cacheControl };
|
|
220
|
+
}
|
|
221
|
+
return block;
|
|
222
|
+
});
|
|
223
|
+
} else {
|
|
224
|
+
systemContent = systemPrompt;
|
|
225
|
+
}
|
|
186
226
|
}
|
|
187
227
|
|
|
188
228
|
// Native tools
|