@animalabs/membrane 0.5.20 → 0.5.22
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/completions.d.ts.map +1 -1
- package/dist/formatters/completions.js +6 -1
- package/dist/formatters/completions.js.map +1 -1
- package/dist/formatters/native.d.ts.map +1 -1
- package/dist/formatters/native.js +13 -2
- package/dist/formatters/native.js.map +1 -1
- package/dist/membrane.d.ts.map +1 -1
- package/dist/membrane.js +5 -0
- package/dist/membrane.js.map +1 -1
- package/dist/providers/anthropic.d.ts.map +1 -1
- package/dist/providers/anthropic.js +8 -0
- package/dist/providers/anthropic.js.map +1 -1
- package/dist/providers/bedrock.d.ts.map +1 -1
- package/dist/providers/bedrock.js +7 -0
- package/dist/providers/bedrock.js.map +1 -1
- package/dist/providers/gemini.d.ts.map +1 -1
- package/dist/providers/gemini.js +6 -0
- package/dist/providers/gemini.js.map +1 -1
- package/dist/providers/openai-compatible.d.ts.map +1 -1
- package/dist/providers/openai-compatible.js +9 -0
- package/dist/providers/openai-compatible.js.map +1 -1
- package/dist/providers/openai-completions.d.ts.map +1 -1
- package/dist/providers/openai-completions.js +9 -0
- package/dist/providers/openai-completions.js.map +1 -1
- package/dist/providers/openai.d.ts.map +1 -1
- package/dist/providers/openai.js +9 -0
- package/dist/providers/openai.js.map +1 -1
- package/dist/providers/openrouter.d.ts.map +1 -1
- package/dist/providers/openrouter.js +11 -0
- package/dist/providers/openrouter.js.map +1 -1
- package/dist/types/provider.d.ts +8 -0
- package/dist/types/provider.d.ts.map +1 -1
- package/dist/types/request.d.ts +6 -0
- package/dist/types/request.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/formatters/completions.ts +7 -0
- package/src/formatters/native.ts +15 -1
- package/src/membrane.ts +5 -0
- package/src/providers/anthropic.ts +11 -1
- package/src/providers/bedrock.ts +11 -0
- package/src/providers/gemini.ts +9 -0
- package/src/providers/openai-compatible.ts +13 -1
- package/src/providers/openai-completions.ts +15 -0
- package/src/providers/openai.ts +13 -1
- package/src/providers/openrouter.ts +15 -1
- package/src/types/provider.ts +13 -1
- package/src/types/request.ts +8 -1
package/src/membrane.ts
CHANGED
|
@@ -1015,12 +1015,17 @@ export class Membrane {
|
|
|
1015
1015
|
cacheTtl: request.cacheTtl,
|
|
1016
1016
|
additionalStopSequences,
|
|
1017
1017
|
maxParticipantsForStop,
|
|
1018
|
+
contextPrefix: request.contextPrefix,
|
|
1018
1019
|
});
|
|
1019
1020
|
|
|
1020
1021
|
const providerRequest = {
|
|
1021
1022
|
model: request.config.model,
|
|
1022
1023
|
maxTokens: request.config.maxTokens,
|
|
1023
1024
|
temperature: request.config.temperature,
|
|
1025
|
+
topP: request.config.topP,
|
|
1026
|
+
topK: request.config.topK,
|
|
1027
|
+
presencePenalty: request.config.presencePenalty,
|
|
1028
|
+
frequencyPenalty: request.config.frequencyPenalty,
|
|
1024
1029
|
messages: buildResult.messages,
|
|
1025
1030
|
system: buildResult.systemContent,
|
|
1026
1031
|
stopSequences: buildResult.stopSequences,
|
|
@@ -141,7 +141,17 @@ export class AnthropicAdapter implements ProviderAdapter {
|
|
|
141
141
|
if (request.temperature !== undefined) {
|
|
142
142
|
params.temperature = request.temperature;
|
|
143
143
|
}
|
|
144
|
-
|
|
144
|
+
|
|
145
|
+
// Anthropic API rejects requests with both temperature and top_p set.
|
|
146
|
+
// When both are provided, prefer temperature (more commonly tuned) and drop top_p.
|
|
147
|
+
if (request.topP !== undefined && request.temperature === undefined) {
|
|
148
|
+
params.top_p = request.topP;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
if (request.topK !== undefined) {
|
|
152
|
+
params.top_k = request.topK;
|
|
153
|
+
}
|
|
154
|
+
|
|
145
155
|
if (request.stopSequences && request.stopSequences.length > 0) {
|
|
146
156
|
params.stop_sequences = request.stopSequences;
|
|
147
157
|
}
|
package/src/providers/bedrock.ts
CHANGED
|
@@ -58,6 +58,8 @@ interface BedrockMessageRequest {
|
|
|
58
58
|
}>;
|
|
59
59
|
system?: string | Array<{ type: 'text'; text: string; cache_control?: { type: 'ephemeral' } }>;
|
|
60
60
|
temperature?: number;
|
|
61
|
+
top_p?: number;
|
|
62
|
+
top_k?: number;
|
|
61
63
|
stop_sequences?: string[];
|
|
62
64
|
tools?: unknown[];
|
|
63
65
|
thinking?: { type: 'enabled'; budget_tokens: number };
|
|
@@ -343,6 +345,15 @@ export class BedrockAdapter implements ProviderAdapter {
|
|
|
343
345
|
params.temperature = request.temperature;
|
|
344
346
|
}
|
|
345
347
|
|
|
348
|
+
// Anthropic API (via Bedrock) rejects requests with both temperature and top_p set.
|
|
349
|
+
if (request.topP !== undefined && request.temperature === undefined) {
|
|
350
|
+
params.top_p = request.topP;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
if (request.topK !== undefined) {
|
|
354
|
+
params.top_k = request.topK;
|
|
355
|
+
}
|
|
356
|
+
|
|
346
357
|
if (request.stopSequences && request.stopSequences.length > 0) {
|
|
347
358
|
params.stop_sequences = request.stopSequences;
|
|
348
359
|
}
|
package/src/providers/gemini.ts
CHANGED
|
@@ -52,6 +52,7 @@ interface GeminiRequest {
|
|
|
52
52
|
maxOutputTokens?: number;
|
|
53
53
|
temperature?: number;
|
|
54
54
|
topP?: number;
|
|
55
|
+
topK?: number;
|
|
55
56
|
stopSequences?: string[];
|
|
56
57
|
};
|
|
57
58
|
tools?: { functionDeclarations: GeminiFunctionDeclaration[] }[];
|
|
@@ -336,6 +337,14 @@ export class GeminiAdapter implements ProviderAdapter {
|
|
|
336
337
|
geminiRequest.generationConfig.temperature = request.temperature;
|
|
337
338
|
}
|
|
338
339
|
|
|
340
|
+
if (request.topP !== undefined) {
|
|
341
|
+
geminiRequest.generationConfig.topP = request.topP;
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
if (request.topK !== undefined) {
|
|
345
|
+
geminiRequest.generationConfig.topK = request.topK;
|
|
346
|
+
}
|
|
347
|
+
|
|
339
348
|
if (request.stopSequences && request.stopSequences.length > 0) {
|
|
340
349
|
// Gemini API limits stop sequences to 5
|
|
341
350
|
geminiRequest.generationConfig.stopSequences = request.stopSequences.slice(0, 5);
|
|
@@ -278,7 +278,19 @@ export class OpenAICompatibleAdapter implements ProviderAdapter {
|
|
|
278
278
|
if (request.temperature !== undefined) {
|
|
279
279
|
params.temperature = request.temperature;
|
|
280
280
|
}
|
|
281
|
-
|
|
281
|
+
|
|
282
|
+
if (request.topP !== undefined) {
|
|
283
|
+
params.top_p = request.topP;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
if (request.presencePenalty !== undefined) {
|
|
287
|
+
params.presence_penalty = request.presencePenalty;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
if (request.frequencyPenalty !== undefined) {
|
|
291
|
+
params.frequency_penalty = request.frequencyPenalty;
|
|
292
|
+
}
|
|
293
|
+
|
|
282
294
|
if (request.stopSequences && request.stopSequences.length > 0) {
|
|
283
295
|
params.stop = request.stopSequences;
|
|
284
296
|
}
|
|
@@ -37,6 +37,9 @@ interface CompletionsRequest {
|
|
|
37
37
|
prompt: string;
|
|
38
38
|
max_tokens?: number;
|
|
39
39
|
temperature?: number;
|
|
40
|
+
top_p?: number;
|
|
41
|
+
presence_penalty?: number;
|
|
42
|
+
frequency_penalty?: number;
|
|
40
43
|
stop?: string[];
|
|
41
44
|
stream?: boolean;
|
|
42
45
|
}
|
|
@@ -344,6 +347,18 @@ export class OpenAICompletionsAdapter implements ProviderAdapter {
|
|
|
344
347
|
params.temperature = request.temperature;
|
|
345
348
|
}
|
|
346
349
|
|
|
350
|
+
if (request.topP !== undefined) {
|
|
351
|
+
params.top_p = request.topP;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
if (request.presencePenalty !== undefined) {
|
|
355
|
+
params.presence_penalty = request.presencePenalty;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
if (request.frequencyPenalty !== undefined) {
|
|
359
|
+
params.frequency_penalty = request.frequencyPenalty;
|
|
360
|
+
}
|
|
361
|
+
|
|
347
362
|
// Generate stop sequences from participant names + EOT token + any extras
|
|
348
363
|
const stopSequences = [
|
|
349
364
|
...this.generateStopSequences(participants),
|
package/src/providers/openai.ts
CHANGED
|
@@ -376,7 +376,19 @@ export class OpenAIAdapter implements ProviderAdapter {
|
|
|
376
376
|
if (request.temperature !== undefined && !noTemperatureSupport(model)) {
|
|
377
377
|
params.temperature = request.temperature;
|
|
378
378
|
}
|
|
379
|
-
|
|
379
|
+
|
|
380
|
+
if (request.topP !== undefined && !noTemperatureSupport(model)) {
|
|
381
|
+
params.top_p = request.topP;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
if (request.presencePenalty !== undefined) {
|
|
385
|
+
params.presence_penalty = request.presencePenalty;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
if (request.frequencyPenalty !== undefined) {
|
|
389
|
+
params.frequency_penalty = request.frequencyPenalty;
|
|
390
|
+
}
|
|
391
|
+
|
|
380
392
|
// Reasoning models (o1, o3, o4) don't support stop sequences
|
|
381
393
|
if (request.stopSequences && request.stopSequences.length > 0 && !noStopSupport(model)) {
|
|
382
394
|
params.stop = request.stopSequences;
|
|
@@ -298,7 +298,21 @@ export class OpenRouterAdapter implements ProviderAdapter {
|
|
|
298
298
|
if (request.temperature !== undefined) {
|
|
299
299
|
params.temperature = request.temperature;
|
|
300
300
|
}
|
|
301
|
-
|
|
301
|
+
|
|
302
|
+
// Anthropic models (routed via OpenRouter) reject both temperature and top_p.
|
|
303
|
+
const isAnthropicModel = /claude|anthropic/i.test(request.model);
|
|
304
|
+
if (request.topP !== undefined && !(isAnthropicModel && request.temperature !== undefined)) {
|
|
305
|
+
params.top_p = request.topP;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
if (request.presencePenalty !== undefined) {
|
|
309
|
+
params.presence_penalty = request.presencePenalty;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
if (request.frequencyPenalty !== undefined) {
|
|
313
|
+
params.frequency_penalty = request.frequencyPenalty;
|
|
314
|
+
}
|
|
315
|
+
|
|
302
316
|
if (request.stopSequences && request.stopSequences.length > 0) {
|
|
303
317
|
params.stop = request.stopSequences;
|
|
304
318
|
}
|
package/src/types/provider.ts
CHANGED
|
@@ -202,7 +202,19 @@ export interface ProviderRequest {
|
|
|
202
202
|
|
|
203
203
|
/** Temperature */
|
|
204
204
|
temperature?: number;
|
|
205
|
-
|
|
205
|
+
|
|
206
|
+
/** Top P nucleus sampling */
|
|
207
|
+
topP?: number;
|
|
208
|
+
|
|
209
|
+
/** Top K sampling */
|
|
210
|
+
topK?: number;
|
|
211
|
+
|
|
212
|
+
/** Presence penalty */
|
|
213
|
+
presencePenalty?: number;
|
|
214
|
+
|
|
215
|
+
/** Frequency penalty */
|
|
216
|
+
frequencyPenalty?: number;
|
|
217
|
+
|
|
206
218
|
/** Stop sequences */
|
|
207
219
|
stopSequences?: string[];
|
|
208
220
|
|
package/src/types/request.ts
CHANGED
|
@@ -139,7 +139,14 @@ export interface NormalizedRequest {
|
|
|
139
139
|
* '1h' = 1 hour TTL (extended caching)
|
|
140
140
|
*/
|
|
141
141
|
cacheTtl?: '5m' | '1h';
|
|
142
|
-
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Context prefix for simulacrum seeding.
|
|
145
|
+
* Injected as first assistant message (before conversation history).
|
|
146
|
+
* Cached when promptCaching is enabled.
|
|
147
|
+
*/
|
|
148
|
+
contextPrefix?: string;
|
|
149
|
+
|
|
143
150
|
/** Provider-specific parameters (pass-through) */
|
|
144
151
|
providerParams?: Record<string, unknown>;
|
|
145
152
|
}
|