@animalabs/membrane 0.5.51 → 0.5.53

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.
Files changed (134) hide show
  1. package/dist/context/index.d.ts +12 -0
  2. package/dist/context/index.js +11 -0
  3. package/dist/context/index.js.map +1 -0
  4. package/dist/context/process.d.ts +43 -0
  5. package/dist/context/process.js +381 -0
  6. package/dist/context/process.js.map +1 -0
  7. package/dist/context/types.d.ts +164 -0
  8. package/dist/context/types.js +61 -0
  9. package/dist/context/types.js.map +1 -0
  10. package/dist/formatters/anthropic-xml.d.ts +63 -0
  11. package/dist/formatters/anthropic-xml.js +417 -0
  12. package/dist/formatters/anthropic-xml.js.map +1 -0
  13. package/dist/formatters/completions.d.ts +68 -0
  14. package/dist/formatters/completions.js +261 -0
  15. package/dist/formatters/completions.js.map +1 -0
  16. package/dist/formatters/index.d.ts +10 -0
  17. package/dist/formatters/index.d.ts.map +1 -1
  18. package/dist/formatters/index.js +8 -0
  19. package/dist/formatters/index.js.map +1 -0
  20. package/dist/formatters/native.d.ts +35 -0
  21. package/dist/formatters/native.d.ts.map +1 -1
  22. package/dist/formatters/native.js +346 -0
  23. package/dist/formatters/native.js.map +1 -0
  24. package/dist/formatters/normalize-tool-pairs.d.ts +75 -0
  25. package/dist/formatters/normalize-tool-pairs.d.ts.map +1 -0
  26. package/dist/formatters/normalize-tool-pairs.js +498 -0
  27. package/dist/formatters/normalize-tool-pairs.js.map +1 -0
  28. package/dist/formatters/types.d.ts +222 -0
  29. package/dist/formatters/types.d.ts.map +1 -1
  30. package/dist/formatters/types.js +7 -0
  31. package/dist/formatters/types.js.map +1 -0
  32. package/dist/index.d.ts +13 -0
  33. package/dist/index.js +20 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/membrane.d.ts +155 -0
  36. package/dist/providers/anthropic.d.ts +36 -0
  37. package/dist/providers/bedrock.d.ts +43 -0
  38. package/dist/providers/gemini.d.ts +68 -0
  39. package/dist/providers/gemini.js +538 -0
  40. package/dist/providers/gemini.js.map +1 -0
  41. package/dist/providers/index.d.ts +13 -0
  42. package/dist/providers/index.js +13 -0
  43. package/dist/providers/index.js.map +1 -0
  44. package/dist/providers/mock.d.ts +90 -0
  45. package/dist/providers/mock.d.ts.map +1 -0
  46. package/dist/providers/mock.js +210 -0
  47. package/dist/providers/mock.js.map +1 -0
  48. package/dist/providers/openai-compatible.d.ts +82 -0
  49. package/dist/providers/openai-compatible.js +480 -0
  50. package/dist/providers/openai-compatible.js.map +1 -0
  51. package/dist/providers/openai-completions.d.ts +89 -0
  52. package/dist/providers/openai-completions.js +347 -0
  53. package/dist/providers/openai-completions.js.map +1 -0
  54. package/dist/providers/openai-responses.d.ts +77 -0
  55. package/dist/providers/openai-responses.js +333 -0
  56. package/dist/providers/openai-responses.js.map +1 -0
  57. package/dist/providers/openai.d.ts +77 -0
  58. package/dist/providers/openai.js +533 -0
  59. package/dist/providers/openai.js.map +1 -0
  60. package/dist/providers/openrouter.d.ts +82 -0
  61. package/dist/providers/openrouter.js +556 -0
  62. package/dist/providers/openrouter.js.map +1 -0
  63. package/dist/providers/utils.d.ts +44 -0
  64. package/dist/providers/utils.d.ts.map +1 -0
  65. package/dist/providers/utils.js +100 -0
  66. package/dist/providers/utils.js.map +1 -0
  67. package/dist/registry/default-pricing.d.ts +3 -0
  68. package/dist/registry/default-pricing.d.ts.map +1 -0
  69. package/dist/registry/default-pricing.js +75 -0
  70. package/dist/registry/default-pricing.js.map +1 -0
  71. package/dist/transforms/chat.d.ts +52 -0
  72. package/dist/transforms/chat.js +136 -0
  73. package/dist/transforms/chat.js.map +1 -0
  74. package/dist/transforms/index.d.ts +5 -0
  75. package/dist/transforms/index.js +7 -0
  76. package/dist/transforms/index.js.map +1 -0
  77. package/dist/types/config.d.ts +110 -0
  78. package/dist/types/config.js +21 -0
  79. package/dist/types/config.js.map +1 -0
  80. package/dist/types/content.d.ts +87 -0
  81. package/dist/types/content.d.ts.map +1 -0
  82. package/dist/types/content.js +40 -0
  83. package/dist/types/content.js.map +1 -0
  84. package/dist/types/errors.d.ts +50 -0
  85. package/dist/types/errors.d.ts.map +1 -0
  86. package/dist/types/errors.js +253 -0
  87. package/dist/types/errors.js.map +1 -0
  88. package/dist/types/index.d.ts +20 -0
  89. package/dist/types/index.js +10 -0
  90. package/dist/types/index.js.map +1 -0
  91. package/dist/types/message.d.ts +52 -0
  92. package/dist/types/message.d.ts.map +1 -0
  93. package/dist/types/message.js +38 -0
  94. package/dist/types/message.js.map +1 -0
  95. package/dist/types/provider.d.ts +169 -0
  96. package/dist/types/provider.d.ts.map +1 -0
  97. package/dist/types/provider.js +5 -0
  98. package/dist/types/provider.js.map +1 -0
  99. package/dist/types/request.d.ts +116 -0
  100. package/dist/types/request.d.ts.map +1 -0
  101. package/dist/types/request.js +5 -0
  102. package/dist/types/request.js.map +1 -0
  103. package/dist/types/response.d.ts +131 -0
  104. package/dist/types/response.d.ts.map +1 -0
  105. package/dist/types/response.js +7 -0
  106. package/dist/types/response.js.map +1 -0
  107. package/dist/types/streaming.d.ts +194 -0
  108. package/dist/types/streaming.js +5 -0
  109. package/dist/types/streaming.js.map +1 -0
  110. package/dist/types/tools.d.ts +71 -0
  111. package/dist/types/tools.d.ts.map +1 -0
  112. package/dist/types/tools.js +5 -0
  113. package/dist/types/tools.js.map +1 -0
  114. package/dist/utils/cost.d.ts +10 -0
  115. package/dist/utils/cost.d.ts.map +1 -0
  116. package/dist/utils/cost.js +19 -0
  117. package/dist/utils/cost.js.map +1 -0
  118. package/dist/utils/index.d.ts +7 -0
  119. package/dist/utils/index.js +6 -0
  120. package/dist/utils/index.js.map +1 -0
  121. package/dist/utils/stream-parser.d.ts +84 -0
  122. package/dist/utils/stream-parser.js +418 -0
  123. package/dist/utils/stream-parser.js.map +1 -0
  124. package/dist/utils/tool-parser.d.ts +134 -0
  125. package/dist/utils/tool-parser.js +600 -0
  126. package/dist/utils/tool-parser.js.map +1 -0
  127. package/dist/yielding-stream.d.ts +60 -0
  128. package/dist/yielding-stream.js +206 -0
  129. package/dist/yielding-stream.js.map +1 -0
  130. package/package.json +1 -1
  131. package/src/formatters/index.ts +9 -0
  132. package/src/formatters/native.ts +12 -1
  133. package/src/formatters/normalize-tool-pairs.ts +622 -0
  134. package/src/formatters/types.ts +39 -0
@@ -0,0 +1,538 @@
1
+ /**
2
+ * Google Gemini provider adapter
3
+ *
4
+ * Direct adapter for Google's Generative AI REST API.
5
+ * Supports Gemini 2.x, 2.5, 3.x models with:
6
+ * - Text and image input
7
+ * - Tool/function calling
8
+ * - Streaming via SSE
9
+ *
10
+ * Auth: API key passed as query parameter (?key=...)
11
+ * Endpoint: generativelanguage.googleapis.com/v1beta
12
+ */
13
+ import { MembraneError, rateLimitError, contextLengthError, authError, serverError, abortError, networkError, } from '../types/index.js';
14
+ import { createCombinedSignal } from './utils.js';
15
+ // ============================================================================
16
+ // Gemini Adapter
17
+ // ============================================================================
18
+ export class GeminiAdapter {
19
+ name = 'gemini';
20
+ apiKey;
21
+ baseURL;
22
+ defaultMaxTokens;
23
+ constructor(config = {}) {
24
+ this.apiKey = config.apiKey ?? process.env.GOOGLE_API_KEY ?? '';
25
+ this.baseURL = (config.baseURL ?? 'https://generativelanguage.googleapis.com/v1beta').replace(/\/$/, '');
26
+ this.defaultMaxTokens = config.defaultMaxTokens ?? 4096;
27
+ if (!this.apiKey) {
28
+ throw new Error('Google AI API key not provided');
29
+ }
30
+ }
31
+ supportsModel(modelId) {
32
+ return modelId.startsWith('gemini-');
33
+ }
34
+ async complete(request, options) {
35
+ const geminiRequest = this.buildRequest(request);
36
+ options?.onRequest?.(geminiRequest);
37
+ const { signal: combinedSignal, cleanup } = createCombinedSignal(options?.signal, options?.timeoutMs);
38
+ try {
39
+ const url = `${this.baseURL}/models/${request.model}:generateContent?key=${this.apiKey}`;
40
+ const response = await fetch(url, {
41
+ method: 'POST',
42
+ headers: { 'Content-Type': 'application/json' },
43
+ body: JSON.stringify(geminiRequest),
44
+ signal: combinedSignal,
45
+ });
46
+ if (!response.ok) {
47
+ const errorText = await response.text();
48
+ throw new Error(`Gemini API error: ${response.status} ${errorText}`);
49
+ }
50
+ const data = await response.json();
51
+ if (data.error) {
52
+ throw new Error(`Gemini API error: ${data.error.code} ${data.error.message}`);
53
+ }
54
+ return this.parseResponse(data, request.model, geminiRequest);
55
+ }
56
+ catch (error) {
57
+ throw this.handleError(error, geminiRequest);
58
+ }
59
+ finally {
60
+ cleanup?.();
61
+ }
62
+ }
63
+ async stream(request, callbacks, options) {
64
+ const geminiRequest = this.buildRequest(request);
65
+ options?.onRequest?.(geminiRequest);
66
+ const { signal: combinedSignal, cleanup } = createCombinedSignal(options?.signal, options?.timeoutMs);
67
+ try {
68
+ const url = `${this.baseURL}/models/${request.model}:streamGenerateContent?alt=sse&key=${this.apiKey}`;
69
+ const response = await fetch(url, {
70
+ method: 'POST',
71
+ headers: { 'Content-Type': 'application/json' },
72
+ body: JSON.stringify(geminiRequest),
73
+ signal: combinedSignal,
74
+ });
75
+ if (!response.ok) {
76
+ const errorText = await response.text();
77
+ throw new Error(`Gemini API error: ${response.status} ${errorText}`);
78
+ }
79
+ const reader = response.body?.getReader();
80
+ if (!reader) {
81
+ throw new Error('No response body');
82
+ }
83
+ const decoder = new TextDecoder();
84
+ let accumulated = '';
85
+ let finishReason = 'STOP';
86
+ let toolCalls = [];
87
+ let images = [];
88
+ let lastUsage;
89
+ let buffer = '';
90
+ while (true) {
91
+ const { done, value } = await reader.read();
92
+ if (done)
93
+ break;
94
+ buffer += decoder.decode(value, { stream: true });
95
+ const lines = buffer.split('\n');
96
+ // Keep the last potentially incomplete line in buffer
97
+ buffer = lines.pop() ?? '';
98
+ for (const line of lines) {
99
+ if (!line.startsWith('data: '))
100
+ continue;
101
+ const data = line.slice(6).trim();
102
+ if (!data || data === '[DONE]')
103
+ continue;
104
+ try {
105
+ const parsed = JSON.parse(data);
106
+ const candidate = parsed.candidates?.[0];
107
+ if (candidate?.content?.parts) {
108
+ for (const part of candidate.content.parts) {
109
+ if (part.text) {
110
+ accumulated += part.text;
111
+ callbacks.onChunk(part.text);
112
+ }
113
+ if (part.inlineData) {
114
+ images.push({
115
+ data: part.inlineData.data,
116
+ mimeType: part.inlineData.mimeType,
117
+ });
118
+ }
119
+ if (part.functionCall) {
120
+ toolCalls.push({
121
+ name: part.functionCall.name,
122
+ args: part.functionCall.args,
123
+ });
124
+ }
125
+ }
126
+ }
127
+ if (candidate?.finishReason) {
128
+ finishReason = candidate.finishReason;
129
+ }
130
+ if (parsed.usageMetadata) {
131
+ lastUsage = parsed.usageMetadata;
132
+ }
133
+ }
134
+ catch {
135
+ // Ignore parse errors in stream chunks
136
+ }
137
+ }
138
+ }
139
+ // Process any remaining data in the buffer (final chunk may not end with newline)
140
+ if (buffer.trim()) {
141
+ const remaining = buffer.trim();
142
+ const dataLine = remaining.startsWith('data: ') ? remaining.slice(6).trim() : remaining;
143
+ if (dataLine && dataLine !== '[DONE]') {
144
+ try {
145
+ const parsed = JSON.parse(dataLine);
146
+ const candidate = parsed.candidates?.[0];
147
+ if (candidate?.content?.parts) {
148
+ for (const part of candidate.content.parts) {
149
+ if (part.text) {
150
+ accumulated += part.text;
151
+ callbacks.onChunk(part.text);
152
+ }
153
+ if (part.inlineData) {
154
+ images.push({
155
+ data: part.inlineData.data,
156
+ mimeType: part.inlineData.mimeType,
157
+ });
158
+ }
159
+ if (part.functionCall) {
160
+ toolCalls.push({
161
+ name: part.functionCall.name,
162
+ args: part.functionCall.args,
163
+ });
164
+ }
165
+ }
166
+ }
167
+ if (candidate?.finishReason) {
168
+ finishReason = candidate.finishReason;
169
+ }
170
+ if (parsed.usageMetadata) {
171
+ lastUsage = parsed.usageMetadata;
172
+ }
173
+ }
174
+ catch {
175
+ // Final buffer wasn't valid JSON — nothing to do
176
+ }
177
+ }
178
+ }
179
+ return {
180
+ content: this.buildContentBlocks(accumulated, toolCalls, images),
181
+ stopReason: this.mapFinishReason(finishReason),
182
+ stopSequence: undefined,
183
+ usage: {
184
+ inputTokens: lastUsage?.promptTokenCount ?? 0,
185
+ outputTokens: lastUsage?.candidatesTokenCount ?? 0,
186
+ cacheReadTokens: lastUsage?.cachedContentTokenCount
187
+ ? lastUsage.cachedContentTokenCount
188
+ : undefined,
189
+ },
190
+ model: request.model,
191
+ rawRequest: geminiRequest,
192
+ raw: { finishReason, usage: lastUsage },
193
+ };
194
+ }
195
+ catch (error) {
196
+ throw this.handleError(error, geminiRequest);
197
+ }
198
+ finally {
199
+ cleanup?.();
200
+ }
201
+ }
202
+ // --------------------------------------------------------------------------
203
+ // Request Building
204
+ // --------------------------------------------------------------------------
205
+ buildRequest(request) {
206
+ const contents = this.convertMessages(request.messages, request.model);
207
+ const maxTokens = request.maxTokens || this.defaultMaxTokens;
208
+ const geminiRequest = { contents };
209
+ // System instruction
210
+ if (request.system) {
211
+ const systemText = typeof request.system === 'string'
212
+ ? request.system
213
+ : request.system
214
+ .filter((b) => b.type === 'text')
215
+ .map((b) => b.text)
216
+ .join('\n');
217
+ if (systemText) {
218
+ geminiRequest.systemInstruction = {
219
+ parts: [{ text: systemText }],
220
+ };
221
+ }
222
+ }
223
+ // Generation config
224
+ geminiRequest.generationConfig = {
225
+ maxOutputTokens: maxTokens,
226
+ };
227
+ if (request.temperature !== undefined) {
228
+ geminiRequest.generationConfig.temperature = request.temperature;
229
+ }
230
+ if (request.topP !== undefined) {
231
+ geminiRequest.generationConfig.topP = request.topP;
232
+ }
233
+ if (request.topK !== undefined) {
234
+ geminiRequest.generationConfig.topK = request.topK;
235
+ }
236
+ if (request.stopSequences && request.stopSequences.length > 0) {
237
+ // Gemini API limits stop sequences to 5
238
+ geminiRequest.generationConfig.stopSequences = request.stopSequences.slice(0, 5);
239
+ }
240
+ // Auto-detect image generation models by name
241
+ if (request.model?.includes('image')) {
242
+ geminiRequest.generationConfig.responseModalities = ['TEXT', 'IMAGE'];
243
+ }
244
+ // Tools
245
+ if (request.tools && request.tools.length > 0) {
246
+ geminiRequest.tools = [{
247
+ functionDeclarations: this.convertTools(request.tools),
248
+ }];
249
+ }
250
+ // Extra params — deep-merge generationConfig to preserve auto-detected settings
251
+ if (request.extra) {
252
+ const { normalizedMessages, prompt, generationConfig: extraGenConfig, ...rest } = request.extra;
253
+ Object.assign(geminiRequest, rest);
254
+ if (extraGenConfig && typeof extraGenConfig === 'object') {
255
+ Object.assign(geminiRequest.generationConfig, extraGenConfig);
256
+ }
257
+ }
258
+ return geminiRequest;
259
+ }
260
+ convertMessages(messages, model) {
261
+ const contents = [];
262
+ // Gemini 3.x requires thought_signature on image parts from model outputs.
263
+ // Images that round-trip through Discord lose their thought_signature metadata,
264
+ // causing 400 INVALID_ARGUMENT when sent back as inlineData. For gemini-3.x
265
+ // model-role images, we fall back to embedding the source URL as text — Gemini
266
+ // auto-fetches URLs from text content, enabling iterative editing without
267
+ // thought_signature. User images pass through as normal inlineData.
268
+ const useUrlForModelImages = model?.startsWith('gemini-3');
269
+ for (const msg of messages) {
270
+ const role = msg.role === 'assistant' ? 'model' : 'user';
271
+ // Simple string content
272
+ if (typeof msg.content === 'string') {
273
+ contents.push({ role, parts: [{ text: msg.content }] });
274
+ continue;
275
+ }
276
+ // Array content blocks (Anthropic-style)
277
+ if (Array.isArray(msg.content)) {
278
+ const parts = [];
279
+ const toolResultParts = [];
280
+ for (const block of msg.content) {
281
+ if (block.type === 'text') {
282
+ if (block.text)
283
+ parts.push({ text: block.text });
284
+ }
285
+ else if (block.type === 'image') {
286
+ // Gemini 3.x model-role images: use URL-as-text so Gemini auto-fetches
287
+ // the image without needing thought_signature metadata
288
+ if (useUrlForModelImages && role === 'model' && block.sourceUrl) {
289
+ parts.push({ text: block.sourceUrl });
290
+ continue;
291
+ }
292
+ // Anthropic image format → Gemini inlineData
293
+ const source = block.source;
294
+ if (source?.type === 'base64' && source.data) {
295
+ parts.push({
296
+ inlineData: {
297
+ mimeType: source.media_type ?? 'image/jpeg',
298
+ data: source.data,
299
+ },
300
+ });
301
+ }
302
+ }
303
+ else if (block.type === 'tool_use') {
304
+ parts.push({
305
+ functionCall: {
306
+ name: block.name,
307
+ args: block.input ?? {},
308
+ },
309
+ });
310
+ }
311
+ else if (block.type === 'tool_result') {
312
+ const resultContent = typeof block.content === 'string'
313
+ ? block.content
314
+ : JSON.stringify(block.content);
315
+ toolResultParts.push({
316
+ functionResponse: {
317
+ name: block.name ?? block.tool_use_id ?? 'unknown',
318
+ response: { result: resultContent },
319
+ },
320
+ });
321
+ }
322
+ }
323
+ // Tool results go in a user message
324
+ if (toolResultParts.length > 0) {
325
+ contents.push({ role: 'user', parts: toolResultParts });
326
+ }
327
+ if (parts.length > 0) {
328
+ contents.push({ role, parts });
329
+ }
330
+ continue;
331
+ }
332
+ // Null/empty content — skip
333
+ if (msg.content === null || msg.content === undefined)
334
+ continue;
335
+ // Fallback
336
+ contents.push({ role, parts: [{ text: String(msg.content) }] });
337
+ }
338
+ // Gemini requires alternating user/model roles.
339
+ // Merge consecutive same-role messages.
340
+ return this.mergeConsecutiveRoles(contents);
341
+ }
342
+ /**
343
+ * Gemini requires strictly alternating user/model messages.
344
+ * Merge consecutive messages with the same role into one.
345
+ */
346
+ mergeConsecutiveRoles(contents) {
347
+ if (contents.length === 0)
348
+ return contents;
349
+ const merged = [contents[0]];
350
+ for (let i = 1; i < contents.length; i++) {
351
+ const current = contents[i];
352
+ const last = merged[merged.length - 1];
353
+ if (current.role === last.role) {
354
+ // Merge parts into the previous message
355
+ last.parts.push(...current.parts);
356
+ }
357
+ else {
358
+ merged.push(current);
359
+ }
360
+ }
361
+ // Gemini also requires the first message to be "user"
362
+ // TODO: Accept prefillUserMessage from request when Gemini bots need C2 migration
363
+ if (merged.length > 0 && merged[0].role !== 'user') {
364
+ merged.unshift({ role: 'user', parts: [{ text: '[Start]' }] });
365
+ }
366
+ return merged;
367
+ }
368
+ convertTools(tools) {
369
+ return tools.map(tool => {
370
+ const schema = tool.inputSchema || tool.input_schema || { type: 'object', properties: {} };
371
+ return {
372
+ name: tool.name,
373
+ description: tool.description ?? '',
374
+ parameters: schema,
375
+ };
376
+ });
377
+ }
378
+ // --------------------------------------------------------------------------
379
+ // Response Parsing
380
+ // --------------------------------------------------------------------------
381
+ parseResponse(response, requestedModel, rawRequest) {
382
+ const candidate = response.candidates?.[0];
383
+ const parts = candidate?.content?.parts ?? [];
384
+ let text = '';
385
+ const toolCalls = [];
386
+ const images = [];
387
+ for (const part of parts) {
388
+ if (part.text)
389
+ text += part.text;
390
+ if (part.inlineData) {
391
+ images.push({
392
+ data: part.inlineData.data,
393
+ mimeType: part.inlineData.mimeType,
394
+ });
395
+ }
396
+ if (part.functionCall) {
397
+ toolCalls.push({
398
+ name: part.functionCall.name,
399
+ args: part.functionCall.args,
400
+ });
401
+ }
402
+ }
403
+ return {
404
+ content: this.buildContentBlocks(text, toolCalls, images),
405
+ stopReason: this.mapFinishReason(candidate?.finishReason),
406
+ stopSequence: undefined,
407
+ usage: {
408
+ inputTokens: response.usageMetadata?.promptTokenCount ?? 0,
409
+ outputTokens: response.usageMetadata?.candidatesTokenCount ?? 0,
410
+ cacheReadTokens: response.usageMetadata?.cachedContentTokenCount
411
+ ? response.usageMetadata.cachedContentTokenCount
412
+ : undefined,
413
+ },
414
+ model: response.modelVersion ?? requestedModel,
415
+ rawRequest,
416
+ raw: response,
417
+ };
418
+ }
419
+ buildContentBlocks(text, toolCalls, images = []) {
420
+ const content = [];
421
+ if (text) {
422
+ content.push({ type: 'text', text });
423
+ }
424
+ for (const img of images) {
425
+ content.push({
426
+ type: 'generated_image',
427
+ data: img.data,
428
+ mimeType: img.mimeType,
429
+ });
430
+ }
431
+ for (const tc of toolCalls) {
432
+ content.push({
433
+ type: 'tool_use',
434
+ id: `gemini-tc-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
435
+ name: tc.name,
436
+ input: tc.args,
437
+ });
438
+ }
439
+ return content;
440
+ }
441
+ mapFinishReason(reason) {
442
+ switch (reason) {
443
+ case 'STOP':
444
+ return 'end_turn';
445
+ case 'MAX_TOKENS':
446
+ return 'max_tokens';
447
+ case 'SAFETY':
448
+ return 'refusal';
449
+ case 'RECITATION':
450
+ return 'refusal';
451
+ case 'TOOL_CALLS':
452
+ case 'FUNCTION_CALL':
453
+ return 'tool_use';
454
+ default:
455
+ return 'end_turn';
456
+ }
457
+ }
458
+ // --------------------------------------------------------------------------
459
+ // Error Handling
460
+ // --------------------------------------------------------------------------
461
+ handleError(error, rawRequest) {
462
+ if (error instanceof MembraneError)
463
+ return error;
464
+ if (error instanceof Error) {
465
+ const message = error.message;
466
+ if (message.includes('401') || message.includes('403') || message.includes('API_KEY_INVALID') || message.includes('PERMISSION_DENIED')) {
467
+ return authError(message, error, rawRequest);
468
+ }
469
+ if (message.includes('429') || message.includes('RESOURCE_EXHAUSTED')) {
470
+ const retryMatch = message.match(/retry.after[:\s]*(\d+)/i);
471
+ const retryAfter = retryMatch?.[1] ? parseInt(retryMatch[1], 10) * 1000 : undefined;
472
+ return rateLimitError(message, retryAfter, error, rawRequest);
473
+ }
474
+ if (message.includes('context') || message.includes('too long') || message.includes('token limit')) {
475
+ return contextLengthError(message, error, rawRequest);
476
+ }
477
+ if (message.includes('500') || message.includes('502') || message.includes('503') || message.includes('INTERNAL')) {
478
+ return serverError(message, undefined, error, rawRequest);
479
+ }
480
+ if (error.name === 'AbortError') {
481
+ return abortError(undefined, rawRequest);
482
+ }
483
+ if (message.includes('network') || message.includes('fetch') || message.includes('ECONNREFUSED')) {
484
+ return networkError(message, error, rawRequest);
485
+ }
486
+ }
487
+ return new MembraneError({
488
+ type: 'unknown',
489
+ message: error instanceof Error ? error.message : String(error),
490
+ retryable: false,
491
+ rawError: error,
492
+ rawRequest,
493
+ });
494
+ }
495
+ }
496
+ // ============================================================================
497
+ // Content Conversion Utilities
498
+ // ============================================================================
499
+ /**
500
+ * Convert normalized content blocks to Gemini parts
501
+ */
502
+ export function toGeminiParts(blocks) {
503
+ return blocks.map(block => {
504
+ if (block.type === 'text') {
505
+ return { text: block.text };
506
+ }
507
+ if (block.type === 'tool_use') {
508
+ return {
509
+ functionCall: {
510
+ name: block.name,
511
+ args: block.input ?? {},
512
+ },
513
+ };
514
+ }
515
+ return { text: String(block) };
516
+ });
517
+ }
518
+ /**
519
+ * Convert Gemini parts to normalized content blocks
520
+ */
521
+ export function fromGeminiParts(parts) {
522
+ const result = [];
523
+ for (const part of parts) {
524
+ if (part.text) {
525
+ result.push({ type: 'text', text: part.text });
526
+ }
527
+ if (part.functionCall) {
528
+ result.push({
529
+ type: 'tool_use',
530
+ id: `gemini-tc-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
531
+ name: part.functionCall.name,
532
+ input: part.functionCall.args,
533
+ });
534
+ }
535
+ }
536
+ return result;
537
+ }
538
+ //# sourceMappingURL=gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Provider exports
3
+ */
4
+ export { AnthropicAdapter, toAnthropicContent, fromAnthropicContent, type AnthropicAdapterConfig, } from './anthropic.js';
5
+ export { OpenRouterAdapter, toOpenRouterMessages, fromOpenRouterMessage, type OpenRouterAdapterConfig, } from './openrouter.js';
6
+ export { OpenAIAdapter, toOpenAIContent, fromOpenAIContent, type OpenAIAdapterConfig, } from './openai.js';
7
+ export { OpenAICompatibleAdapter, toOpenAIMessages, fromOpenAIMessage, type OpenAICompatibleAdapterConfig, } from './openai-compatible.js';
8
+ export { OpenAICompletionsAdapter, type OpenAICompletionsAdapterConfig, } from './openai-completions.js';
9
+ export { MockAdapter, createEchoAdapter, createCannedAdapter, type MockAdapterConfig, } from './mock.js';
10
+ export { BedrockAdapter, type BedrockAdapterConfig, } from './bedrock.js';
11
+ export { GeminiAdapter, toGeminiParts, fromGeminiParts, type GeminiAdapterConfig, } from './gemini.js';
12
+ export { OpenAIResponsesAdapter, type OpenAIResponsesAdapterConfig, } from './openai-responses.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Provider exports
3
+ */
4
+ export { AnthropicAdapter, toAnthropicContent, fromAnthropicContent, } from './anthropic.js';
5
+ export { OpenRouterAdapter, toOpenRouterMessages, fromOpenRouterMessage, } from './openrouter.js';
6
+ export { OpenAIAdapter, toOpenAIContent, fromOpenAIContent, } from './openai.js';
7
+ export { OpenAICompatibleAdapter, toOpenAIMessages, fromOpenAIMessage, } from './openai-compatible.js';
8
+ export { OpenAICompletionsAdapter, } from './openai-completions.js';
9
+ export { MockAdapter, createEchoAdapter, createCannedAdapter, } from './mock.js';
10
+ export { BedrockAdapter, } from './bedrock.js';
11
+ export { GeminiAdapter, toGeminiParts, fromGeminiParts, } from './gemini.js';
12
+ export { OpenAIResponsesAdapter, } from './openai-responses.js';
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,GAErB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,GAEtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,aAAa,EACb,eAAe,EACf,iBAAiB,GAElB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,wBAAwB,GAEzB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,mBAAmB,GAEpB,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,cAAc,GAEf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,aAAa,EACb,aAAa,EACb,eAAe,GAEhB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,sBAAsB,GAEvB,MAAM,uBAAuB,CAAC"}