@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,224 @@
1
+ import { BaseInterceptor } from './base.js';
2
+ /**
3
+ * Interceptor for AWS Bedrock API calls
4
+ *
5
+ * Bedrock uses AWS IAM authentication (no API keys required).
6
+ * Supports multiple model providers: Anthropic Claude, Amazon Titan, Meta Llama, etc.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { BedrockRuntimeClient, InvokeModelCommand } from '@aws-sdk/client-bedrock-runtime';
11
+ * import { AxonFlow, wrapBedrockClient } from '@axonflow/sdk';
12
+ *
13
+ * const bedrockClient = new BedrockRuntimeClient({ region: 'us-east-1' });
14
+ * const axonflow = new AxonFlow({ endpoint: 'http://localhost:8080' });
15
+ *
16
+ * const wrapped = wrapBedrockClient(bedrockClient, axonflow);
17
+ * const response = await wrapped.send(new InvokeModelCommand({...}));
18
+ * ```
19
+ */
20
+ export class BedrockInterceptor extends BaseInterceptor {
21
+ canHandle(aiCall) {
22
+ const callString = aiCall.toString();
23
+ return (callString.includes('bedrock') ||
24
+ callString.includes('BedrockRuntime') ||
25
+ callString.includes('InvokeModel') ||
26
+ callString.includes('anthropic.claude') ||
27
+ callString.includes('amazon.titan'));
28
+ }
29
+ extractRequest(aiCall) {
30
+ const callString = aiCall.toString();
31
+ let model = 'anthropic.claude-3-sonnet';
32
+ if (callString.includes('titan')) {
33
+ model = 'amazon.titan-text-express-v1';
34
+ }
35
+ else if (callString.includes('llama')) {
36
+ model = 'meta.llama2-70b-chat-v1';
37
+ }
38
+ else if (callString.includes('claude-3-opus')) {
39
+ model = 'anthropic.claude-3-opus';
40
+ }
41
+ else if (callString.includes('claude-3-haiku')) {
42
+ model = 'anthropic.claude-3-haiku';
43
+ }
44
+ return {
45
+ provider: 'bedrock',
46
+ model,
47
+ prompt: callString,
48
+ parameters: {},
49
+ };
50
+ }
51
+ executeWithModifications(aiCall, _modifications) {
52
+ return aiCall();
53
+ }
54
+ getProvider() {
55
+ return 'bedrock';
56
+ }
57
+ }
58
+ /**
59
+ * Bedrock model providers and their model IDs
60
+ */
61
+ export const BedrockModels = {
62
+ // Anthropic Claude models
63
+ CLAUDE_3_OPUS: 'anthropic.claude-3-opus-20240229-v1:0',
64
+ CLAUDE_3_SONNET: 'anthropic.claude-3-sonnet-20240229-v1:0',
65
+ CLAUDE_3_HAIKU: 'anthropic.claude-3-haiku-20240307-v1:0',
66
+ CLAUDE_2_1: 'anthropic.claude-v2:1',
67
+ CLAUDE_2: 'anthropic.claude-v2',
68
+ CLAUDE_INSTANT: 'anthropic.claude-instant-v1',
69
+ // Amazon Titan models
70
+ TITAN_TEXT_EXPRESS: 'amazon.titan-text-express-v1',
71
+ TITAN_TEXT_LITE: 'amazon.titan-text-lite-v1',
72
+ TITAN_TEXT_PREMIER: 'amazon.titan-text-premier-v1:0',
73
+ // Meta Llama models
74
+ LLAMA2_13B: 'meta.llama2-13b-chat-v1',
75
+ LLAMA2_70B: 'meta.llama2-70b-chat-v1',
76
+ LLAMA3_8B: 'meta.llama3-8b-instruct-v1:0',
77
+ LLAMA3_70B: 'meta.llama3-70b-instruct-v1:0',
78
+ // Cohere models
79
+ COHERE_COMMAND: 'cohere.command-text-v14',
80
+ COHERE_COMMAND_LIGHT: 'cohere.command-light-text-v14',
81
+ // AI21 models
82
+ AI21_JURASSIC_ULTRA: 'ai21.j2-ultra-v1',
83
+ AI21_JURASSIC_MID: 'ai21.j2-mid-v1',
84
+ };
85
+ /**
86
+ * Wraps an AWS Bedrock client with AxonFlow governance.
87
+ *
88
+ * @deprecated This function is deprecated and will be removed in v2.0.0.
89
+ * JavaScript Proxy-based wrapping has compatibility issues with modern SDK versions.
90
+ *
91
+ * Use Gateway Mode or Proxy Mode instead:
92
+ *
93
+ * Gateway Mode (recommended):
94
+ * ```typescript
95
+ * const context = await axonflow.getPolicyApprovedContext({ query, userToken });
96
+ * const response = await bedrockClient.send(new InvokeModelCommand({...}));
97
+ * await axonflow.auditLLMCall({ contextId: context.contextId, ... });
98
+ * ```
99
+ *
100
+ * Proxy Mode:
101
+ * ```typescript
102
+ * const response = await axonflow.executeQuery({
103
+ * query,
104
+ * userToken,
105
+ * context: { provider: 'bedrock', model: 'anthropic.claude-3-sonnet' }
106
+ * });
107
+ * ```
108
+ *
109
+ * See: https://docs.getaxonflow.com/sdk/gateway-mode
110
+ */
111
+ export function wrapBedrockClient(bedrockClient, axonflow) {
112
+ console.warn('[AxonFlow] wrapBedrockClient is deprecated and will be removed in v2.0.0. ' +
113
+ 'Use Gateway Mode (getPolicyApprovedContext + auditLLMCall) or Proxy Mode (executeQuery) instead. ' +
114
+ 'See: https://docs.getaxonflow.com/sdk/gateway-mode');
115
+ const originalSend = bedrockClient.send.bind(bedrockClient);
116
+ bedrockClient.send = async (command) => {
117
+ // Check if this is an InvokeModelCommand
118
+ const commandName = command.constructor?.name || '';
119
+ if (!commandName.includes('InvokeModel')) {
120
+ return originalSend(command);
121
+ }
122
+ // Extract model ID and prompt for governance context
123
+ const modelId = command.input?.modelId || 'unknown';
124
+ let prompt = '';
125
+ try {
126
+ const body = JSON.parse(typeof command.input?.body === 'string'
127
+ ? command.input.body
128
+ : new TextDecoder().decode(command.input?.body));
129
+ // Extract prompt based on model type
130
+ if (body.messages) {
131
+ // Claude format
132
+ prompt = body.messages
133
+ .map((m) => (typeof m.content === 'string' ? m.content : m.content?.[0]?.text || ''))
134
+ .join(' ');
135
+ }
136
+ else if (body.inputText) {
137
+ // Titan format
138
+ prompt = body.inputText;
139
+ }
140
+ else if (body.prompt) {
141
+ // Generic format
142
+ prompt = body.prompt;
143
+ }
144
+ }
145
+ catch {
146
+ // If we can't parse the body, continue without prompt extraction
147
+ }
148
+ // Protect the call with AxonFlow, passing context
149
+ return axonflow.protect(async () => {
150
+ return originalSend(command);
151
+ }, { provider: 'bedrock', model: modelId, query: prompt });
152
+ };
153
+ return bedrockClient;
154
+ }
155
+ /**
156
+ * Creates a governed Bedrock invoke function with full governance flow.
157
+ *
158
+ * Use this for fine-grained control with pre-check and audit.
159
+ */
160
+ export function createGovernedBedrockInvoke(bedrockClient, axonflow, userToken = '') {
161
+ return async (modelId, body) => {
162
+ // Extract prompt
163
+ let prompt = '';
164
+ if (body.messages) {
165
+ prompt = body.messages
166
+ .map((m) => (typeof m.content === 'string' ? m.content : m.content?.[0]?.text || ''))
167
+ .join(' ');
168
+ }
169
+ else if (body.inputText) {
170
+ prompt = body.inputText;
171
+ }
172
+ // Pre-check with AxonFlow
173
+ const preCheck = await axonflow.getPolicyApprovedContext({
174
+ userToken,
175
+ query: prompt,
176
+ context: {
177
+ provider: 'bedrock',
178
+ model: modelId,
179
+ },
180
+ });
181
+ if (!preCheck.approved) {
182
+ throw new Error(`Request blocked by policy: ${preCheck.blockReason}`);
183
+ }
184
+ // Execute the call
185
+ const startTime = Date.now();
186
+ // Dynamically import to avoid requiring AWS SDK as a dependency
187
+ const { InvokeModelCommand } = await import('@aws-sdk/client-bedrock-runtime');
188
+ const command = new InvokeModelCommand({
189
+ modelId,
190
+ body: JSON.stringify(body),
191
+ contentType: 'application/json',
192
+ accept: 'application/json',
193
+ });
194
+ const response = await bedrockClient.send(command);
195
+ const latencyMs = Date.now() - startTime;
196
+ // Parse response
197
+ const responseBody = JSON.parse(new TextDecoder().decode(response.body));
198
+ // Audit the call
199
+ if (preCheck.contextId) {
200
+ let summary = '';
201
+ let promptTokens = 0;
202
+ let completionTokens = 0;
203
+ if (responseBody.content) {
204
+ // Claude response
205
+ summary = responseBody.content[0]?.text?.substring(0, 200) || '';
206
+ promptTokens = responseBody.usage?.input_tokens || 0;
207
+ completionTokens = responseBody.usage?.output_tokens || 0;
208
+ }
209
+ else if (responseBody.results) {
210
+ // Titan response
211
+ summary = responseBody.results[0]?.outputText?.substring(0, 200) || '';
212
+ promptTokens = responseBody.inputTextTokenCount || 0;
213
+ completionTokens = responseBody.results[0]?.tokenCount || 0;
214
+ }
215
+ await axonflow.auditLLMCall(preCheck.contextId, summary, 'bedrock', modelId, {
216
+ promptTokens,
217
+ completionTokens,
218
+ totalTokens: promptTokens + completionTokens,
219
+ }, latencyMs);
220
+ }
221
+ return responseBody;
222
+ };
223
+ }
224
+ //# 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,116 @@
1
+ import { BaseInterceptor } from './base.js';
2
+ /**
3
+ * Interceptor for Google Gemini API calls
4
+ *
5
+ * Supports both @google/generative-ai SDK and direct API calls.
6
+ */
7
+ export class GeminiInterceptor extends BaseInterceptor {
8
+ canHandle(aiCall) {
9
+ // Check if this looks like a Gemini call
10
+ const callString = aiCall.toString();
11
+ return (callString.includes('gemini') ||
12
+ callString.includes('generateContent') ||
13
+ callString.includes('GenerativeModel') ||
14
+ callString.includes('google') ||
15
+ callString.includes('palm'));
16
+ }
17
+ extractRequest(aiCall) {
18
+ // Try to extract Gemini-specific details
19
+ const callString = aiCall.toString();
20
+ // Try to detect model
21
+ let model = 'gemini-pro';
22
+ if (callString.includes('gemini-1.5-pro')) {
23
+ model = 'gemini-1.5-pro';
24
+ }
25
+ else if (callString.includes('gemini-1.5-flash')) {
26
+ model = 'gemini-1.5-flash';
27
+ }
28
+ else if (callString.includes('gemini-pro-vision')) {
29
+ model = 'gemini-pro-vision';
30
+ }
31
+ return {
32
+ provider: 'gemini',
33
+ model,
34
+ prompt: callString,
35
+ parameters: {
36
+ // Would extract temperature, topP, etc. in production
37
+ },
38
+ };
39
+ }
40
+ executeWithModifications(aiCall, _modifications) {
41
+ // Execute the call with any modifications from governance
42
+ return aiCall();
43
+ }
44
+ getProvider() {
45
+ return 'gemini';
46
+ }
47
+ }
48
+ /**
49
+ * Helper to wrap Gemini GenerativeModel for easier interception
50
+ *
51
+ * @deprecated This function is deprecated and will be removed in v2.0.0.
52
+ * JavaScript Proxy-based wrapping has compatibility issues with modern SDK versions.
53
+ *
54
+ * Use Gateway Mode or Proxy Mode instead:
55
+ *
56
+ * Gateway Mode (recommended):
57
+ * ```typescript
58
+ * const context = await axonflow.getPolicyApprovedContext({ query, userToken });
59
+ * const response = await model.generateContent(query);
60
+ * await axonflow.auditLLMCall({ contextId: context.contextId, ... });
61
+ * ```
62
+ *
63
+ * Proxy Mode:
64
+ * ```typescript
65
+ * const response = await axonflow.executeQuery({
66
+ * query,
67
+ * userToken,
68
+ * context: { provider: 'gemini', model: 'gemini-2.0-flash' }
69
+ * });
70
+ * ```
71
+ *
72
+ * See: https://docs.getaxonflow.com/sdk/gateway-mode
73
+ */
74
+ export function wrapGeminiModel(geminiModel, axonflow) {
75
+ console.warn('[AxonFlow] wrapGeminiModel is deprecated and will be removed in v2.0.0. ' +
76
+ 'Use Gateway Mode (getPolicyApprovedContext + auditLLMCall) or Proxy Mode (executeQuery) instead. ' +
77
+ 'See: https://docs.getaxonflow.com/sdk/gateway-mode');
78
+ return new Proxy(geminiModel, {
79
+ get(target, prop, receiver) {
80
+ const original = Reflect.get(target, prop, receiver);
81
+ // Intercept generateContent and generateContentStream
82
+ if (typeof original === 'function' &&
83
+ ['generateContent', 'generateContentStream', 'sendMessage'].includes(prop.toString())) {
84
+ return async (...args) => {
85
+ // Protect the call with AxonFlow
86
+ return axonflow.protect(() => original.apply(target, args));
87
+ };
88
+ }
89
+ // For chat sessions, wrap the returned chat object
90
+ if (prop === 'startChat' && typeof original === 'function') {
91
+ return (...args) => {
92
+ const chat = original.apply(target, args);
93
+ return wrapGeminiChat(chat, axonflow);
94
+ };
95
+ }
96
+ return original;
97
+ },
98
+ });
99
+ }
100
+ /**
101
+ * Helper to wrap Gemini ChatSession for multi-turn conversations
102
+ */
103
+ function wrapGeminiChat(chatSession, axonflow) {
104
+ return new Proxy(chatSession, {
105
+ get(target, prop, receiver) {
106
+ const original = Reflect.get(target, prop, receiver);
107
+ if (typeof original === 'function' && prop === 'sendMessage') {
108
+ return async (...args) => {
109
+ return axonflow.protect(() => original.apply(target, args));
110
+ };
111
+ }
112
+ return original;
113
+ },
114
+ });
115
+ }
116
+ //# 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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"}
@@ -0,0 +1,143 @@
1
+ import { BaseInterceptor } from './base';
2
+ import { AIRequest } from '../types';
3
+ /**
4
+ * Interceptor for Ollama API calls
5
+ *
6
+ * Ollama is a local LLM server that runs on localhost:11434 by default.
7
+ * No authentication is required.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { AxonFlow, wrapOllamaClient } from '@axonflow/sdk';
12
+ * import Ollama from 'ollama';
13
+ *
14
+ * const ollama = new Ollama({ host: 'http://localhost:11434' });
15
+ * const axonflow = new AxonFlow({ endpoint: 'http://localhost:8080' });
16
+ *
17
+ * const wrapped = wrapOllamaClient(ollama, axonflow);
18
+ * const response = await wrapped.chat({
19
+ * model: 'llama2',
20
+ * messages: [{ role: 'user', content: 'Hello!' }]
21
+ * });
22
+ * ```
23
+ */
24
+ export declare class OllamaInterceptor extends BaseInterceptor {
25
+ canHandle(aiCall: any): boolean;
26
+ extractRequest(aiCall: any): AIRequest;
27
+ executeWithModifications(aiCall: any, _modifications: any): Promise<any>;
28
+ getProvider(): string;
29
+ }
30
+ /**
31
+ * Ollama chat message
32
+ */
33
+ export interface OllamaMessage {
34
+ role: 'system' | 'user' | 'assistant';
35
+ content: string;
36
+ images?: string[];
37
+ }
38
+ /**
39
+ * Ollama chat request
40
+ */
41
+ export interface OllamaChatRequest {
42
+ model: string;
43
+ messages: OllamaMessage[];
44
+ stream?: boolean;
45
+ format?: 'json';
46
+ options?: {
47
+ temperature?: number;
48
+ top_p?: number;
49
+ top_k?: number;
50
+ num_predict?: number;
51
+ stop?: string[];
52
+ };
53
+ }
54
+ /**
55
+ * Ollama chat response
56
+ */
57
+ export interface OllamaChatResponse {
58
+ model: string;
59
+ created_at: string;
60
+ message: OllamaMessage;
61
+ done: boolean;
62
+ total_duration?: number;
63
+ load_duration?: number;
64
+ prompt_eval_count?: number;
65
+ prompt_eval_duration?: number;
66
+ eval_count?: number;
67
+ eval_duration?: number;
68
+ }
69
+ /**
70
+ * Ollama generate request (for completions)
71
+ */
72
+ export interface OllamaGenerateRequest {
73
+ model: string;
74
+ prompt: string;
75
+ stream?: boolean;
76
+ format?: 'json';
77
+ options?: {
78
+ temperature?: number;
79
+ top_p?: number;
80
+ top_k?: number;
81
+ num_predict?: number;
82
+ stop?: string[];
83
+ };
84
+ }
85
+ /**
86
+ * Ollama generate response
87
+ */
88
+ export interface OllamaGenerateResponse {
89
+ model: string;
90
+ created_at: string;
91
+ response: string;
92
+ done: boolean;
93
+ total_duration?: number;
94
+ load_duration?: number;
95
+ prompt_eval_count?: number;
96
+ prompt_eval_duration?: number;
97
+ eval_count?: number;
98
+ eval_duration?: number;
99
+ }
100
+ /**
101
+ * Wraps an Ollama client with AxonFlow governance.
102
+ *
103
+ * @deprecated This function is deprecated and will be removed in v2.0.0.
104
+ * JavaScript Proxy-based wrapping has compatibility issues with modern SDK versions.
105
+ *
106
+ * Use Gateway Mode or Proxy Mode instead:
107
+ *
108
+ * Gateway Mode (recommended):
109
+ * ```typescript
110
+ * const context = await axonflow.getPolicyApprovedContext({ query, userToken });
111
+ * const response = await ollama.chat({ model: 'llama2', messages: [...] });
112
+ * await axonflow.auditLLMCall({ contextId: context.contextId, ... });
113
+ * ```
114
+ *
115
+ * Proxy Mode:
116
+ * ```typescript
117
+ * const response = await axonflow.executeQuery({
118
+ * query,
119
+ * userToken,
120
+ * context: { provider: 'ollama', model: 'llama2' }
121
+ * });
122
+ * ```
123
+ *
124
+ * See: https://docs.getaxonflow.com/sdk/gateway-mode
125
+ */
126
+ export declare function wrapOllamaClient(ollamaClient: any, axonflow: any): any;
127
+ /**
128
+ * Creates a governed Ollama chat function.
129
+ *
130
+ * Use this when you want fine-grained control over individual calls
131
+ * rather than wrapping the entire client.
132
+ *
133
+ * @example
134
+ * ```typescript
135
+ * const governedChat = createGovernedOllamaChat(ollamaClient, axonflow, 'user-123');
136
+ * const response = await governedChat({
137
+ * model: 'llama2',
138
+ * messages: [{ role: 'user', content: 'Hello!' }]
139
+ * });
140
+ * ```
141
+ */
142
+ export declare function createGovernedOllamaChat(ollamaClient: any, axonflow: any, userToken?: string): (request: OllamaChatRequest) => Promise<OllamaChatResponse>;
143
+ //# sourceMappingURL=ollama.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../src/interceptors/ollama.ts"],"names":[],"mappings":"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"}