@animalabs/membrane 0.1.0
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/context/index.d.ts +10 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +9 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/process.d.ts +22 -0
- package/dist/context/process.d.ts.map +1 -0
- package/dist/context/process.js +369 -0
- package/dist/context/process.js.map +1 -0
- package/dist/context/types.d.ts +118 -0
- package/dist/context/types.d.ts.map +1 -0
- package/dist/context/types.js +60 -0
- package/dist/context/types.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/membrane.d.ts +96 -0
- package/dist/membrane.d.ts.map +1 -0
- package/dist/membrane.js +893 -0
- package/dist/membrane.js.map +1 -0
- package/dist/providers/anthropic.d.ts +36 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +265 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/index.d.ts +8 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +8 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai-compatible.d.ts +74 -0
- package/dist/providers/openai-compatible.d.ts.map +1 -0
- package/dist/providers/openai-compatible.js +412 -0
- package/dist/providers/openai-compatible.js.map +1 -0
- package/dist/providers/openai.d.ts +69 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +455 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/openrouter.d.ts +76 -0
- package/dist/providers/openrouter.d.ts.map +1 -0
- package/dist/providers/openrouter.js +492 -0
- package/dist/providers/openrouter.js.map +1 -0
- package/dist/transforms/chat.d.ts +52 -0
- package/dist/transforms/chat.d.ts.map +1 -0
- package/dist/transforms/chat.js +136 -0
- package/dist/transforms/chat.js.map +1 -0
- package/dist/transforms/index.d.ts +6 -0
- package/dist/transforms/index.d.ts.map +1 -0
- package/dist/transforms/index.js +6 -0
- package/dist/transforms/index.js.map +1 -0
- package/dist/transforms/prefill.d.ts +89 -0
- package/dist/transforms/prefill.d.ts.map +1 -0
- package/dist/transforms/prefill.js +401 -0
- package/dist/transforms/prefill.js.map +1 -0
- package/dist/types/config.d.ts +103 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +21 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/content.d.ts +81 -0
- package/dist/types/content.d.ts.map +1 -0
- package/dist/types/content.js +40 -0
- package/dist/types/content.js.map +1 -0
- package/dist/types/errors.d.ts +42 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +208 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/index.d.ts +18 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +9 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/message.d.ts +46 -0
- package/dist/types/message.d.ts.map +1 -0
- package/dist/types/message.js +38 -0
- package/dist/types/message.js.map +1 -0
- package/dist/types/provider.d.ts +155 -0
- package/dist/types/provider.d.ts.map +1 -0
- package/dist/types/provider.js +5 -0
- package/dist/types/provider.js.map +1 -0
- package/dist/types/request.d.ts +78 -0
- package/dist/types/request.d.ts.map +1 -0
- package/dist/types/request.js +5 -0
- package/dist/types/request.js.map +1 -0
- package/dist/types/response.d.ts +131 -0
- package/dist/types/response.d.ts.map +1 -0
- package/dist/types/response.js +7 -0
- package/dist/types/response.js.map +1 -0
- package/dist/types/streaming.d.ts +164 -0
- package/dist/types/streaming.d.ts.map +1 -0
- package/dist/types/streaming.js +5 -0
- package/dist/types/streaming.js.map +1 -0
- package/dist/types/tools.d.ts +71 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +5 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/stream-parser.d.ts +53 -0
- package/dist/utils/stream-parser.d.ts.map +1 -0
- package/dist/utils/stream-parser.js +359 -0
- package/dist/utils/stream-parser.js.map +1 -0
- package/dist/utils/tool-parser.d.ts +130 -0
- package/dist/utils/tool-parser.d.ts.map +1 -0
- package/dist/utils/tool-parser.js +571 -0
- package/dist/utils/tool-parser.js.map +1 -0
- package/package.json +37 -0
- package/src/context/index.ts +24 -0
- package/src/context/process.ts +520 -0
- package/src/context/types.ts +231 -0
- package/src/index.ts +23 -0
- package/src/membrane.ts +1174 -0
- package/src/providers/anthropic.ts +340 -0
- package/src/providers/index.ts +31 -0
- package/src/providers/openai-compatible.ts +570 -0
- package/src/providers/openai.ts +625 -0
- package/src/providers/openrouter.ts +662 -0
- package/src/transforms/chat.ts +212 -0
- package/src/transforms/index.ts +22 -0
- package/src/transforms/prefill.ts +585 -0
- package/src/types/config.ts +172 -0
- package/src/types/content.ts +181 -0
- package/src/types/errors.ts +277 -0
- package/src/types/index.ts +154 -0
- package/src/types/message.ts +89 -0
- package/src/types/provider.ts +249 -0
- package/src/types/request.ts +131 -0
- package/src/types/response.ts +223 -0
- package/src/types/streaming.ts +231 -0
- package/src/types/tools.ts +92 -0
- package/src/utils/index.ts +15 -0
- package/src/utils/stream-parser.ts +440 -0
- package/src/utils/tool-parser.ts +715 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Membrane - LLM middleware
|
|
3
|
+
*
|
|
4
|
+
* A selective boundary that transforms what passes through.
|
|
5
|
+
*/
|
|
6
|
+
// Core class
|
|
7
|
+
export { Membrane } from './membrane.js';
|
|
8
|
+
// Types
|
|
9
|
+
export * from './types/index.js';
|
|
10
|
+
// Transforms
|
|
11
|
+
export * from './transforms/index.js';
|
|
12
|
+
// Providers
|
|
13
|
+
export * from './providers/index.js';
|
|
14
|
+
// Utilities
|
|
15
|
+
export * from './utils/index.js';
|
|
16
|
+
// Context management
|
|
17
|
+
export * from './context/index.js';
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,aAAa;AACb,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,QAAQ;AACR,cAAc,kBAAkB,CAAC;AAEjC,aAAa;AACb,cAAc,uBAAuB,CAAC;AAEtC,YAAY;AACZ,cAAc,sBAAsB,CAAC;AAErC,YAAY;AACZ,cAAc,kBAAkB,CAAC;AAEjC,qBAAqB;AACrB,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Membrane - LLM middleware core class
|
|
3
|
+
*
|
|
4
|
+
* A selective boundary that transforms what passes through.
|
|
5
|
+
*/
|
|
6
|
+
import type { NormalizedRequest, NormalizedResponse, AbortedResponse, ProviderAdapter, MembraneConfig, StreamOptions, CompleteOptions } from './types/index.js';
|
|
7
|
+
export declare class Membrane {
|
|
8
|
+
private adapter;
|
|
9
|
+
private registry?;
|
|
10
|
+
private retryConfig;
|
|
11
|
+
private config;
|
|
12
|
+
constructor(adapter: ProviderAdapter, config?: MembraneConfig);
|
|
13
|
+
/**
|
|
14
|
+
* Complete a request (non-streaming)
|
|
15
|
+
*/
|
|
16
|
+
complete(request: NormalizedRequest, options?: CompleteOptions): Promise<NormalizedResponse>;
|
|
17
|
+
/**
|
|
18
|
+
* Stream a request with inline tool execution.
|
|
19
|
+
*
|
|
20
|
+
* Returns either a complete NormalizedResponse or an AbortedResponse
|
|
21
|
+
* if the request was cancelled via the abort signal. Use `isAbortedResponse()`
|
|
22
|
+
* to check which type was returned.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* const result = await membrane.stream(request, { signal: controller.signal });
|
|
27
|
+
* if (isAbortedResponse(result)) {
|
|
28
|
+
* console.log('Aborted:', result.rawAssistantText);
|
|
29
|
+
* // Use rawAssistantText as prefill to continue, or toolCalls/toolResults to rebuild state
|
|
30
|
+
* } else {
|
|
31
|
+
* console.log('Complete:', result.content);
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
stream(request: NormalizedRequest, options?: StreamOptions): Promise<NormalizedResponse | AbortedResponse>;
|
|
36
|
+
/**
|
|
37
|
+
* Determine the effective tool mode
|
|
38
|
+
*/
|
|
39
|
+
private resolveToolMode;
|
|
40
|
+
/**
|
|
41
|
+
* Stream with XML-based tool execution (prefill mode)
|
|
42
|
+
*
|
|
43
|
+
* Uses IncrementalXmlParser to track XML nesting depth for:
|
|
44
|
+
* - False-positive stop sequence detection (e.g., "\nUser:" inside tool results)
|
|
45
|
+
* - Structured block events for UI
|
|
46
|
+
*/
|
|
47
|
+
private streamWithXmlTools;
|
|
48
|
+
/**
|
|
49
|
+
* Stream with native API tool execution
|
|
50
|
+
*/
|
|
51
|
+
private streamWithNativeTools;
|
|
52
|
+
/**
|
|
53
|
+
* Build a provider request with native tool support
|
|
54
|
+
*/
|
|
55
|
+
private buildNativeToolRequest;
|
|
56
|
+
/**
|
|
57
|
+
* Parse provider response content into normalized blocks
|
|
58
|
+
*/
|
|
59
|
+
private parseProviderContent;
|
|
60
|
+
private transformRequest;
|
|
61
|
+
private streamOnce;
|
|
62
|
+
private buildContinuationRequest;
|
|
63
|
+
/**
|
|
64
|
+
* Build continuation request with split-turn image injection.
|
|
65
|
+
*
|
|
66
|
+
* When tool results contain images in prefill mode, we must:
|
|
67
|
+
* 1. End assistant turn mid-XML (after text content, inside <function_results>)
|
|
68
|
+
* 2. Insert user turn with only image content
|
|
69
|
+
* 3. Continue with assistant prefill containing closing XML tags
|
|
70
|
+
*
|
|
71
|
+
* This is required because Anthropic API only allows images in user turns.
|
|
72
|
+
*
|
|
73
|
+
* Structure:
|
|
74
|
+
* ```
|
|
75
|
+
* Assistant: "...response..." + <function_results><result>text content
|
|
76
|
+
* User: [image blocks]
|
|
77
|
+
* Assistant (prefill): </result></function_results>
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
private buildContinuationRequestWithImages;
|
|
81
|
+
private transformResponse;
|
|
82
|
+
private buildFinalResponse;
|
|
83
|
+
private mapStopReason;
|
|
84
|
+
private calculateCacheHitRatio;
|
|
85
|
+
private calculateRetryDelay;
|
|
86
|
+
private sleep;
|
|
87
|
+
/**
|
|
88
|
+
* Check if an error is an abort error
|
|
89
|
+
*/
|
|
90
|
+
private isAbortError;
|
|
91
|
+
/**
|
|
92
|
+
* Build an AbortedResponse from current execution state
|
|
93
|
+
*/
|
|
94
|
+
private buildAbortedResponse;
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=membrane.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"membrane.d.ts","sourceRoot":"","sources":["../src/membrane.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EAEf,eAAe,EAEf,cAAc,EACd,aAAa,EACb,eAAe,EAYhB,MAAM,kBAAkB,CAAC;AA2B1B,qBAAa,QAAQ;IACnB,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAgB;IACjC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,MAAM,CAAiB;gBAG7B,OAAO,EAAE,eAAe,EACxB,MAAM,GAAE,cAAmB;IAY7B;;OAEG;IACG,QAAQ,CACZ,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,kBAAkB,CAAC;IA4D9B;;;;;;;;;;;;;;;;;OAiBG;IACG,MAAM,CACV,OAAO,EAAE,iBAAiB,EAC1B,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,kBAAkB,GAAG,eAAe,CAAC;IAWhD;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;;;;;OAMG;YACW,kBAAkB;IAgRhC;;OAEG;YACW,qBAAqB;IAyMnC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAsD9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAqC5B,OAAO,CAAC,gBAAgB;YA2CV,UAAU;IAQxB,OAAO,CAAC,wBAAwB;IAuChC;;;;;;;;;;;;;;;;OAgBG;IACH,OAAO,CAAC,kCAAkC;IAuD1C,OAAO,CAAC,iBAAiB;IA8FzB,OAAO,CAAC,kBAAkB;IAyE1B,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,KAAK;IAIb;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAoB7B"}
|