@axonflow/sdk 1.2.1 → 1.4.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.
Files changed (74) hide show
  1. package/README.md +119 -0
  2. package/dist/cjs/client.d.ts +42 -1
  3. package/dist/cjs/client.d.ts.map +1 -1
  4. package/dist/cjs/client.js +167 -0
  5. package/dist/cjs/client.js.map +1 -1
  6. package/dist/cjs/index.d.ts +10 -2
  7. package/dist/cjs/index.d.ts.map +1 -1
  8. package/dist/cjs/index.js +15 -2
  9. package/dist/cjs/index.js.map +1 -1
  10. package/dist/cjs/interceptors/anthropic.d.ts +24 -0
  11. package/dist/cjs/interceptors/anthropic.d.ts.map +1 -1
  12. package/dist/cjs/interceptors/anthropic.js +27 -0
  13. package/dist/cjs/interceptors/anthropic.js.map +1 -1
  14. package/dist/cjs/interceptors/bedrock.d.ts +142 -0
  15. package/dist/cjs/interceptors/bedrock.d.ts.map +1 -0
  16. package/dist/cjs/interceptors/bedrock.js +263 -0
  17. package/dist/cjs/interceptors/bedrock.js.map +1 -0
  18. package/dist/cjs/interceptors/gemini.d.ts +89 -0
  19. package/dist/cjs/interceptors/gemini.d.ts.map +1 -0
  20. package/dist/cjs/interceptors/gemini.js +121 -0
  21. package/dist/cjs/interceptors/gemini.js.map +1 -0
  22. package/dist/cjs/interceptors/ollama.d.ts +143 -0
  23. package/dist/cjs/interceptors/ollama.d.ts.map +1 -0
  24. package/dist/cjs/interceptors/ollama.js +153 -0
  25. package/dist/cjs/interceptors/ollama.js.map +1 -0
  26. package/dist/cjs/interceptors/openai.d.ts +24 -0
  27. package/dist/cjs/interceptors/openai.d.ts.map +1 -1
  28. package/dist/cjs/interceptors/openai.js +27 -0
  29. package/dist/cjs/interceptors/openai.js.map +1 -1
  30. package/dist/cjs/types/index.d.ts +1 -0
  31. package/dist/cjs/types/index.d.ts.map +1 -1
  32. package/dist/cjs/types/index.js +1 -0
  33. package/dist/cjs/types/index.js.map +1 -1
  34. package/dist/cjs/types/proxy.d.ts +78 -0
  35. package/dist/cjs/types/proxy.d.ts.map +1 -0
  36. package/dist/cjs/types/proxy.js +9 -0
  37. package/dist/cjs/types/proxy.js.map +1 -0
  38. package/dist/esm/client.d.ts +42 -1
  39. package/dist/esm/client.d.ts.map +1 -1
  40. package/dist/esm/client.js +168 -1
  41. package/dist/esm/client.js.map +1 -1
  42. package/dist/esm/index.d.ts +10 -2
  43. package/dist/esm/index.d.ts.map +1 -1
  44. package/dist/esm/index.js +11 -1
  45. package/dist/esm/index.js.map +1 -1
  46. package/dist/esm/interceptors/anthropic.d.ts +24 -0
  47. package/dist/esm/interceptors/anthropic.d.ts.map +1 -1
  48. package/dist/esm/interceptors/anthropic.js +27 -0
  49. package/dist/esm/interceptors/anthropic.js.map +1 -1
  50. package/dist/esm/interceptors/bedrock.d.ts +142 -0
  51. package/dist/esm/interceptors/bedrock.d.ts.map +1 -0
  52. package/dist/esm/interceptors/bedrock.js +224 -0
  53. package/dist/esm/interceptors/bedrock.js.map +1 -0
  54. package/dist/esm/interceptors/gemini.d.ts +89 -0
  55. package/dist/esm/interceptors/gemini.d.ts.map +1 -0
  56. package/dist/esm/interceptors/gemini.js +116 -0
  57. package/dist/esm/interceptors/gemini.js.map +1 -0
  58. package/dist/esm/interceptors/ollama.d.ts +143 -0
  59. package/dist/esm/interceptors/ollama.d.ts.map +1 -0
  60. package/dist/esm/interceptors/ollama.js +147 -0
  61. package/dist/esm/interceptors/ollama.js.map +1 -0
  62. package/dist/esm/interceptors/openai.d.ts +24 -0
  63. package/dist/esm/interceptors/openai.d.ts.map +1 -1
  64. package/dist/esm/interceptors/openai.js +27 -0
  65. package/dist/esm/interceptors/openai.js.map +1 -1
  66. package/dist/esm/types/index.d.ts +1 -0
  67. package/dist/esm/types/index.d.ts.map +1 -1
  68. package/dist/esm/types/index.js +1 -0
  69. package/dist/esm/types/index.js.map +1 -1
  70. package/dist/esm/types/proxy.d.ts +78 -0
  71. package/dist/esm/types/proxy.d.ts.map +1 -0
  72. package/dist/esm/types/proxy.js +8 -0
  73. package/dist/esm/types/proxy.js.map +1 -0
  74. package/package.json +5 -1
@@ -0,0 +1,142 @@
1
+ import { BaseInterceptor } from './base';
2
+ import { AIRequest } from '../types';
3
+ /**
4
+ * Interceptor for AWS Bedrock API calls
5
+ *
6
+ * Bedrock uses AWS IAM authentication (no API keys required).
7
+ * Supports multiple model providers: Anthropic Claude, Amazon Titan, Meta Llama, etc.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { BedrockRuntimeClient, InvokeModelCommand } from '@aws-sdk/client-bedrock-runtime';
12
+ * import { AxonFlow, wrapBedrockClient } from '@axonflow/sdk';
13
+ *
14
+ * const bedrockClient = new BedrockRuntimeClient({ region: 'us-east-1' });
15
+ * const axonflow = new AxonFlow({ endpoint: 'http://localhost:8080' });
16
+ *
17
+ * const wrapped = wrapBedrockClient(bedrockClient, axonflow);
18
+ * const response = await wrapped.send(new InvokeModelCommand({...}));
19
+ * ```
20
+ */
21
+ export declare class BedrockInterceptor extends BaseInterceptor {
22
+ canHandle(aiCall: any): boolean;
23
+ extractRequest(aiCall: any): AIRequest;
24
+ executeWithModifications(aiCall: any, _modifications: any): Promise<any>;
25
+ getProvider(): string;
26
+ }
27
+ /**
28
+ * Bedrock model providers and their model IDs
29
+ */
30
+ export declare const BedrockModels: {
31
+ readonly CLAUDE_3_OPUS: "anthropic.claude-3-opus-20240229-v1:0";
32
+ readonly CLAUDE_3_SONNET: "anthropic.claude-3-sonnet-20240229-v1:0";
33
+ readonly CLAUDE_3_HAIKU: "anthropic.claude-3-haiku-20240307-v1:0";
34
+ readonly CLAUDE_2_1: "anthropic.claude-v2:1";
35
+ readonly CLAUDE_2: "anthropic.claude-v2";
36
+ readonly CLAUDE_INSTANT: "anthropic.claude-instant-v1";
37
+ readonly TITAN_TEXT_EXPRESS: "amazon.titan-text-express-v1";
38
+ readonly TITAN_TEXT_LITE: "amazon.titan-text-lite-v1";
39
+ readonly TITAN_TEXT_PREMIER: "amazon.titan-text-premier-v1:0";
40
+ readonly LLAMA2_13B: "meta.llama2-13b-chat-v1";
41
+ readonly LLAMA2_70B: "meta.llama2-70b-chat-v1";
42
+ readonly LLAMA3_8B: "meta.llama3-8b-instruct-v1:0";
43
+ readonly LLAMA3_70B: "meta.llama3-70b-instruct-v1:0";
44
+ readonly COHERE_COMMAND: "cohere.command-text-v14";
45
+ readonly COHERE_COMMAND_LIGHT: "cohere.command-light-text-v14";
46
+ readonly AI21_JURASSIC_ULTRA: "ai21.j2-ultra-v1";
47
+ readonly AI21_JURASSIC_MID: "ai21.j2-mid-v1";
48
+ };
49
+ /**
50
+ * Bedrock invoke model request body for Claude
51
+ */
52
+ export interface BedrockClaudeRequest {
53
+ anthropic_version: string;
54
+ max_tokens: number;
55
+ messages: Array<{
56
+ role: 'user' | 'assistant';
57
+ content: string | Array<{
58
+ type: 'text';
59
+ text: string;
60
+ }>;
61
+ }>;
62
+ temperature?: number;
63
+ top_p?: number;
64
+ top_k?: number;
65
+ stop_sequences?: string[];
66
+ system?: string;
67
+ }
68
+ /**
69
+ * Bedrock invoke model response for Claude
70
+ */
71
+ export interface BedrockClaudeResponse {
72
+ id: string;
73
+ type: string;
74
+ role: string;
75
+ content: Array<{
76
+ type: 'text';
77
+ text: string;
78
+ }>;
79
+ model: string;
80
+ stop_reason: string;
81
+ usage: {
82
+ input_tokens: number;
83
+ output_tokens: number;
84
+ };
85
+ }
86
+ /**
87
+ * Bedrock invoke model request body for Titan
88
+ */
89
+ export interface BedrockTitanRequest {
90
+ inputText: string;
91
+ textGenerationConfig?: {
92
+ maxTokenCount?: number;
93
+ temperature?: number;
94
+ topP?: number;
95
+ stopSequences?: string[];
96
+ };
97
+ }
98
+ /**
99
+ * Bedrock invoke model response for Titan
100
+ */
101
+ export interface BedrockTitanResponse {
102
+ inputTextTokenCount: number;
103
+ results: Array<{
104
+ tokenCount: number;
105
+ outputText: string;
106
+ completionReason: string;
107
+ }>;
108
+ }
109
+ /**
110
+ * Wraps an AWS Bedrock client with AxonFlow governance.
111
+ *
112
+ * @deprecated This function is deprecated and will be removed in v2.0.0.
113
+ * JavaScript Proxy-based wrapping has compatibility issues with modern SDK versions.
114
+ *
115
+ * Use Gateway Mode or Proxy Mode instead:
116
+ *
117
+ * Gateway Mode (recommended):
118
+ * ```typescript
119
+ * const context = await axonflow.getPolicyApprovedContext({ query, userToken });
120
+ * const response = await bedrockClient.send(new InvokeModelCommand({...}));
121
+ * await axonflow.auditLLMCall({ contextId: context.contextId, ... });
122
+ * ```
123
+ *
124
+ * Proxy Mode:
125
+ * ```typescript
126
+ * const response = await axonflow.executeQuery({
127
+ * query,
128
+ * userToken,
129
+ * context: { provider: 'bedrock', model: 'anthropic.claude-3-sonnet' }
130
+ * });
131
+ * ```
132
+ *
133
+ * See: https://docs.getaxonflow.com/sdk/gateway-mode
134
+ */
135
+ export declare function wrapBedrockClient(bedrockClient: any, axonflow: any): any;
136
+ /**
137
+ * Creates a governed Bedrock invoke function with full governance flow.
138
+ *
139
+ * Use this for fine-grained control with pre-check and audit.
140
+ */
141
+ export declare function createGovernedBedrockInvoke(bedrockClient: any, axonflow: any, userToken?: string): (modelId: string, body: any) => Promise<any>;
142
+ //# sourceMappingURL=bedrock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bedrock.d.ts","sourceRoot":"","sources":["../../../src/interceptors/bedrock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,kBAAmB,SAAQ,eAAe;IACrD,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO;IAW/B,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,SAAS;IAsBtC,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAIxE,WAAW,IAAI,MAAM;CAGtB;AAED;;GAEG;AACH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;CA2BhB,CAAC;AAEX;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;QAC3B,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACzD,CAAC,CAAC;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE;QACL,YAAY,EAAE,MAAM,CAAC;QACrB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,CAAC,EAAE;QACrB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,OAAO,EAAE,KAAK,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC,CAAC;CACJ;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,GAAG,GAAG,CAsDxE;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,aAAa,EAAE,GAAG,EAClB,QAAQ,EAAE,GAAG,EACb,SAAS,GAAE,MAAW,GACrB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CA8E9C"}
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.BedrockModels = exports.BedrockInterceptor = void 0;
37
+ exports.wrapBedrockClient = wrapBedrockClient;
38
+ exports.createGovernedBedrockInvoke = createGovernedBedrockInvoke;
39
+ const base_1 = require("./base");
40
+ /**
41
+ * Interceptor for AWS Bedrock API calls
42
+ *
43
+ * Bedrock uses AWS IAM authentication (no API keys required).
44
+ * Supports multiple model providers: Anthropic Claude, Amazon Titan, Meta Llama, etc.
45
+ *
46
+ * @example
47
+ * ```typescript
48
+ * import { BedrockRuntimeClient, InvokeModelCommand } from '@aws-sdk/client-bedrock-runtime';
49
+ * import { AxonFlow, wrapBedrockClient } from '@axonflow/sdk';
50
+ *
51
+ * const bedrockClient = new BedrockRuntimeClient({ region: 'us-east-1' });
52
+ * const axonflow = new AxonFlow({ endpoint: 'http://localhost:8080' });
53
+ *
54
+ * const wrapped = wrapBedrockClient(bedrockClient, axonflow);
55
+ * const response = await wrapped.send(new InvokeModelCommand({...}));
56
+ * ```
57
+ */
58
+ class BedrockInterceptor extends base_1.BaseInterceptor {
59
+ canHandle(aiCall) {
60
+ const callString = aiCall.toString();
61
+ return (callString.includes('bedrock') ||
62
+ callString.includes('BedrockRuntime') ||
63
+ callString.includes('InvokeModel') ||
64
+ callString.includes('anthropic.claude') ||
65
+ callString.includes('amazon.titan'));
66
+ }
67
+ extractRequest(aiCall) {
68
+ const callString = aiCall.toString();
69
+ let model = 'anthropic.claude-3-sonnet';
70
+ if (callString.includes('titan')) {
71
+ model = 'amazon.titan-text-express-v1';
72
+ }
73
+ else if (callString.includes('llama')) {
74
+ model = 'meta.llama2-70b-chat-v1';
75
+ }
76
+ else if (callString.includes('claude-3-opus')) {
77
+ model = 'anthropic.claude-3-opus';
78
+ }
79
+ else if (callString.includes('claude-3-haiku')) {
80
+ model = 'anthropic.claude-3-haiku';
81
+ }
82
+ return {
83
+ provider: 'bedrock',
84
+ model,
85
+ prompt: callString,
86
+ parameters: {},
87
+ };
88
+ }
89
+ executeWithModifications(aiCall, _modifications) {
90
+ return aiCall();
91
+ }
92
+ getProvider() {
93
+ return 'bedrock';
94
+ }
95
+ }
96
+ exports.BedrockInterceptor = BedrockInterceptor;
97
+ /**
98
+ * Bedrock model providers and their model IDs
99
+ */
100
+ exports.BedrockModels = {
101
+ // Anthropic Claude models
102
+ CLAUDE_3_OPUS: 'anthropic.claude-3-opus-20240229-v1:0',
103
+ CLAUDE_3_SONNET: 'anthropic.claude-3-sonnet-20240229-v1:0',
104
+ CLAUDE_3_HAIKU: 'anthropic.claude-3-haiku-20240307-v1:0',
105
+ CLAUDE_2_1: 'anthropic.claude-v2:1',
106
+ CLAUDE_2: 'anthropic.claude-v2',
107
+ CLAUDE_INSTANT: 'anthropic.claude-instant-v1',
108
+ // Amazon Titan models
109
+ TITAN_TEXT_EXPRESS: 'amazon.titan-text-express-v1',
110
+ TITAN_TEXT_LITE: 'amazon.titan-text-lite-v1',
111
+ TITAN_TEXT_PREMIER: 'amazon.titan-text-premier-v1:0',
112
+ // Meta Llama models
113
+ LLAMA2_13B: 'meta.llama2-13b-chat-v1',
114
+ LLAMA2_70B: 'meta.llama2-70b-chat-v1',
115
+ LLAMA3_8B: 'meta.llama3-8b-instruct-v1:0',
116
+ LLAMA3_70B: 'meta.llama3-70b-instruct-v1:0',
117
+ // Cohere models
118
+ COHERE_COMMAND: 'cohere.command-text-v14',
119
+ COHERE_COMMAND_LIGHT: 'cohere.command-light-text-v14',
120
+ // AI21 models
121
+ AI21_JURASSIC_ULTRA: 'ai21.j2-ultra-v1',
122
+ AI21_JURASSIC_MID: 'ai21.j2-mid-v1',
123
+ };
124
+ /**
125
+ * Wraps an AWS Bedrock client with AxonFlow governance.
126
+ *
127
+ * @deprecated This function is deprecated and will be removed in v2.0.0.
128
+ * JavaScript Proxy-based wrapping has compatibility issues with modern SDK versions.
129
+ *
130
+ * Use Gateway Mode or Proxy Mode instead:
131
+ *
132
+ * Gateway Mode (recommended):
133
+ * ```typescript
134
+ * const context = await axonflow.getPolicyApprovedContext({ query, userToken });
135
+ * const response = await bedrockClient.send(new InvokeModelCommand({...}));
136
+ * await axonflow.auditLLMCall({ contextId: context.contextId, ... });
137
+ * ```
138
+ *
139
+ * Proxy Mode:
140
+ * ```typescript
141
+ * const response = await axonflow.executeQuery({
142
+ * query,
143
+ * userToken,
144
+ * context: { provider: 'bedrock', model: 'anthropic.claude-3-sonnet' }
145
+ * });
146
+ * ```
147
+ *
148
+ * See: https://docs.getaxonflow.com/sdk/gateway-mode
149
+ */
150
+ function wrapBedrockClient(bedrockClient, axonflow) {
151
+ console.warn('[AxonFlow] wrapBedrockClient is deprecated and will be removed in v2.0.0. ' +
152
+ 'Use Gateway Mode (getPolicyApprovedContext + auditLLMCall) or Proxy Mode (executeQuery) instead. ' +
153
+ 'See: https://docs.getaxonflow.com/sdk/gateway-mode');
154
+ const originalSend = bedrockClient.send.bind(bedrockClient);
155
+ bedrockClient.send = async (command) => {
156
+ // Check if this is an InvokeModelCommand
157
+ const commandName = command.constructor?.name || '';
158
+ if (!commandName.includes('InvokeModel')) {
159
+ return originalSend(command);
160
+ }
161
+ // Extract model ID and prompt for governance context
162
+ const modelId = command.input?.modelId || 'unknown';
163
+ let prompt = '';
164
+ try {
165
+ const body = JSON.parse(typeof command.input?.body === 'string'
166
+ ? command.input.body
167
+ : new TextDecoder().decode(command.input?.body));
168
+ // Extract prompt based on model type
169
+ if (body.messages) {
170
+ // Claude format
171
+ prompt = body.messages
172
+ .map((m) => (typeof m.content === 'string' ? m.content : m.content?.[0]?.text || ''))
173
+ .join(' ');
174
+ }
175
+ else if (body.inputText) {
176
+ // Titan format
177
+ prompt = body.inputText;
178
+ }
179
+ else if (body.prompt) {
180
+ // Generic format
181
+ prompt = body.prompt;
182
+ }
183
+ }
184
+ catch {
185
+ // If we can't parse the body, continue without prompt extraction
186
+ }
187
+ // Protect the call with AxonFlow, passing context
188
+ return axonflow.protect(async () => {
189
+ return originalSend(command);
190
+ }, { provider: 'bedrock', model: modelId, query: prompt });
191
+ };
192
+ return bedrockClient;
193
+ }
194
+ /**
195
+ * Creates a governed Bedrock invoke function with full governance flow.
196
+ *
197
+ * Use this for fine-grained control with pre-check and audit.
198
+ */
199
+ function createGovernedBedrockInvoke(bedrockClient, axonflow, userToken = '') {
200
+ return async (modelId, body) => {
201
+ // Extract prompt
202
+ let prompt = '';
203
+ if (body.messages) {
204
+ prompt = body.messages
205
+ .map((m) => (typeof m.content === 'string' ? m.content : m.content?.[0]?.text || ''))
206
+ .join(' ');
207
+ }
208
+ else if (body.inputText) {
209
+ prompt = body.inputText;
210
+ }
211
+ // Pre-check with AxonFlow
212
+ const preCheck = await axonflow.getPolicyApprovedContext({
213
+ userToken,
214
+ query: prompt,
215
+ context: {
216
+ provider: 'bedrock',
217
+ model: modelId,
218
+ },
219
+ });
220
+ if (!preCheck.approved) {
221
+ throw new Error(`Request blocked by policy: ${preCheck.blockReason}`);
222
+ }
223
+ // Execute the call
224
+ const startTime = Date.now();
225
+ // Dynamically import to avoid requiring AWS SDK as a dependency
226
+ const { InvokeModelCommand } = await Promise.resolve().then(() => __importStar(require('@aws-sdk/client-bedrock-runtime')));
227
+ const command = new InvokeModelCommand({
228
+ modelId,
229
+ body: JSON.stringify(body),
230
+ contentType: 'application/json',
231
+ accept: 'application/json',
232
+ });
233
+ const response = await bedrockClient.send(command);
234
+ const latencyMs = Date.now() - startTime;
235
+ // Parse response
236
+ const responseBody = JSON.parse(new TextDecoder().decode(response.body));
237
+ // Audit the call
238
+ if (preCheck.contextId) {
239
+ let summary = '';
240
+ let promptTokens = 0;
241
+ let completionTokens = 0;
242
+ if (responseBody.content) {
243
+ // Claude response
244
+ summary = responseBody.content[0]?.text?.substring(0, 200) || '';
245
+ promptTokens = responseBody.usage?.input_tokens || 0;
246
+ completionTokens = responseBody.usage?.output_tokens || 0;
247
+ }
248
+ else if (responseBody.results) {
249
+ // Titan response
250
+ summary = responseBody.results[0]?.outputText?.substring(0, 200) || '';
251
+ promptTokens = responseBody.inputTextTokenCount || 0;
252
+ completionTokens = responseBody.results[0]?.tokenCount || 0;
253
+ }
254
+ await axonflow.auditLLMCall(preCheck.contextId, summary, 'bedrock', modelId, {
255
+ promptTokens,
256
+ completionTokens,
257
+ totalTokens: promptTokens + completionTokens,
258
+ }, latencyMs);
259
+ }
260
+ return responseBody;
261
+ };
262
+ }
263
+ //# sourceMappingURL=bedrock.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bedrock.js","sourceRoot":"","sources":["../../../src/interceptors/bedrock.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ import { BaseInterceptor } from './base';
2
+ import { AIRequest } from '../types';
3
+ /**
4
+ * Interceptor for Google Gemini API calls
5
+ *
6
+ * Supports both @google/generative-ai SDK and direct API calls.
7
+ */
8
+ export declare class GeminiInterceptor extends BaseInterceptor {
9
+ canHandle(aiCall: any): boolean;
10
+ extractRequest(aiCall: any): AIRequest;
11
+ executeWithModifications(aiCall: any, _modifications: any): Promise<any>;
12
+ getProvider(): string;
13
+ }
14
+ /**
15
+ * Gemini content part types
16
+ */
17
+ export interface GeminiTextPart {
18
+ text: string;
19
+ }
20
+ export interface GeminiInlineDataPart {
21
+ inlineData: {
22
+ mimeType: string;
23
+ data: string;
24
+ };
25
+ }
26
+ export type GeminiPart = GeminiTextPart | GeminiInlineDataPart;
27
+ export interface GeminiContent {
28
+ role?: 'user' | 'model';
29
+ parts: GeminiPart[];
30
+ }
31
+ export interface GeminiGenerateContentRequest {
32
+ contents: GeminiContent[];
33
+ generationConfig?: {
34
+ temperature?: number;
35
+ topP?: number;
36
+ topK?: number;
37
+ maxOutputTokens?: number;
38
+ stopSequences?: string[];
39
+ };
40
+ safetySettings?: Array<{
41
+ category: string;
42
+ threshold: string;
43
+ }>;
44
+ }
45
+ export interface GeminiCandidate {
46
+ content: GeminiContent;
47
+ finishReason: string;
48
+ safetyRatings?: Array<{
49
+ category: string;
50
+ probability: string;
51
+ }>;
52
+ }
53
+ export interface GeminiUsageMetadata {
54
+ promptTokenCount: number;
55
+ candidatesTokenCount: number;
56
+ totalTokenCount: number;
57
+ }
58
+ export interface GeminiGenerateContentResponse {
59
+ candidates: GeminiCandidate[];
60
+ usageMetadata?: GeminiUsageMetadata;
61
+ }
62
+ /**
63
+ * Helper to wrap Gemini GenerativeModel for easier interception
64
+ *
65
+ * @deprecated This function is deprecated and will be removed in v2.0.0.
66
+ * JavaScript Proxy-based wrapping has compatibility issues with modern SDK versions.
67
+ *
68
+ * Use Gateway Mode or Proxy Mode instead:
69
+ *
70
+ * Gateway Mode (recommended):
71
+ * ```typescript
72
+ * const context = await axonflow.getPolicyApprovedContext({ query, userToken });
73
+ * const response = await model.generateContent(query);
74
+ * await axonflow.auditLLMCall({ contextId: context.contextId, ... });
75
+ * ```
76
+ *
77
+ * Proxy Mode:
78
+ * ```typescript
79
+ * const response = await axonflow.executeQuery({
80
+ * query,
81
+ * userToken,
82
+ * context: { provider: 'gemini', model: 'gemini-2.0-flash' }
83
+ * });
84
+ * ```
85
+ *
86
+ * See: https://docs.getaxonflow.com/sdk/gateway-mode
87
+ */
88
+ export declare function wrapGeminiModel(geminiModel: any, axonflow: any): any;
89
+ //# sourceMappingURL=gemini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/interceptors/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO;IAY/B,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,SAAS;IAwBtC,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAKxE,WAAW,IAAI,MAAM;CAGtB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,oBAAoB,CAAC;AAE/D,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACxB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,cAAc,CAAC,EAAE,KAAK,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,aAAa,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,KAAK,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,GAAG,GAAG,CAgCpE"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GeminiInterceptor = void 0;
4
+ exports.wrapGeminiModel = wrapGeminiModel;
5
+ const base_1 = require("./base");
6
+ /**
7
+ * Interceptor for Google Gemini API calls
8
+ *
9
+ * Supports both @google/generative-ai SDK and direct API calls.
10
+ */
11
+ class GeminiInterceptor extends base_1.BaseInterceptor {
12
+ canHandle(aiCall) {
13
+ // Check if this looks like a Gemini call
14
+ const callString = aiCall.toString();
15
+ return (callString.includes('gemini') ||
16
+ callString.includes('generateContent') ||
17
+ callString.includes('GenerativeModel') ||
18
+ callString.includes('google') ||
19
+ callString.includes('palm'));
20
+ }
21
+ extractRequest(aiCall) {
22
+ // Try to extract Gemini-specific details
23
+ const callString = aiCall.toString();
24
+ // Try to detect model
25
+ let model = 'gemini-pro';
26
+ if (callString.includes('gemini-1.5-pro')) {
27
+ model = 'gemini-1.5-pro';
28
+ }
29
+ else if (callString.includes('gemini-1.5-flash')) {
30
+ model = 'gemini-1.5-flash';
31
+ }
32
+ else if (callString.includes('gemini-pro-vision')) {
33
+ model = 'gemini-pro-vision';
34
+ }
35
+ return {
36
+ provider: 'gemini',
37
+ model,
38
+ prompt: callString,
39
+ parameters: {
40
+ // Would extract temperature, topP, etc. in production
41
+ },
42
+ };
43
+ }
44
+ executeWithModifications(aiCall, _modifications) {
45
+ // Execute the call with any modifications from governance
46
+ return aiCall();
47
+ }
48
+ getProvider() {
49
+ return 'gemini';
50
+ }
51
+ }
52
+ exports.GeminiInterceptor = GeminiInterceptor;
53
+ /**
54
+ * Helper to wrap Gemini GenerativeModel for easier interception
55
+ *
56
+ * @deprecated This function is deprecated and will be removed in v2.0.0.
57
+ * JavaScript Proxy-based wrapping has compatibility issues with modern SDK versions.
58
+ *
59
+ * Use Gateway Mode or Proxy Mode instead:
60
+ *
61
+ * Gateway Mode (recommended):
62
+ * ```typescript
63
+ * const context = await axonflow.getPolicyApprovedContext({ query, userToken });
64
+ * const response = await model.generateContent(query);
65
+ * await axonflow.auditLLMCall({ contextId: context.contextId, ... });
66
+ * ```
67
+ *
68
+ * Proxy Mode:
69
+ * ```typescript
70
+ * const response = await axonflow.executeQuery({
71
+ * query,
72
+ * userToken,
73
+ * context: { provider: 'gemini', model: 'gemini-2.0-flash' }
74
+ * });
75
+ * ```
76
+ *
77
+ * See: https://docs.getaxonflow.com/sdk/gateway-mode
78
+ */
79
+ function wrapGeminiModel(geminiModel, axonflow) {
80
+ console.warn('[AxonFlow] wrapGeminiModel is deprecated and will be removed in v2.0.0. ' +
81
+ 'Use Gateway Mode (getPolicyApprovedContext + auditLLMCall) or Proxy Mode (executeQuery) instead. ' +
82
+ 'See: https://docs.getaxonflow.com/sdk/gateway-mode');
83
+ return new Proxy(geminiModel, {
84
+ get(target, prop, receiver) {
85
+ const original = Reflect.get(target, prop, receiver);
86
+ // Intercept generateContent and generateContentStream
87
+ if (typeof original === 'function' &&
88
+ ['generateContent', 'generateContentStream', 'sendMessage'].includes(prop.toString())) {
89
+ return async (...args) => {
90
+ // Protect the call with AxonFlow
91
+ return axonflow.protect(() => original.apply(target, args));
92
+ };
93
+ }
94
+ // For chat sessions, wrap the returned chat object
95
+ if (prop === 'startChat' && typeof original === 'function') {
96
+ return (...args) => {
97
+ const chat = original.apply(target, args);
98
+ return wrapGeminiChat(chat, axonflow);
99
+ };
100
+ }
101
+ return original;
102
+ },
103
+ });
104
+ }
105
+ /**
106
+ * Helper to wrap Gemini ChatSession for multi-turn conversations
107
+ */
108
+ function wrapGeminiChat(chatSession, axonflow) {
109
+ return new Proxy(chatSession, {
110
+ get(target, prop, receiver) {
111
+ const original = Reflect.get(target, prop, receiver);
112
+ if (typeof original === 'function' && prop === 'sendMessage') {
113
+ return async (...args) => {
114
+ return axonflow.protect(() => original.apply(target, args));
115
+ };
116
+ }
117
+ return original;
118
+ },
119
+ });
120
+ }
121
+ //# sourceMappingURL=gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../src/interceptors/gemini.ts"],"names":[],"mappings":"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"}