@axonflow/sdk 2.3.0 → 3.3.1
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/README.md +185 -8
- package/dist/cjs/client.d.ts +487 -8
- package/dist/cjs/client.d.ts.map +1 -1
- package/dist/cjs/client.js +1672 -45
- package/dist/cjs/client.js.map +1 -1
- package/dist/cjs/errors.d.ts +22 -0
- package/dist/cjs/errors.d.ts.map +1 -1
- package/dist/cjs/errors.js +32 -1
- package/dist/cjs/errors.js.map +1 -1
- package/dist/cjs/index.d.ts +10 -14
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/index.js +11 -20
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/connector.d.ts +54 -0
- package/dist/cjs/types/connector.d.ts.map +1 -1
- package/dist/cjs/types/connector.js +7 -0
- package/dist/cjs/types/connector.js.map +1 -1
- package/dist/cjs/types/execution.d.ts +227 -0
- package/dist/cjs/types/execution.d.ts.map +1 -0
- package/dist/cjs/types/execution.js +73 -0
- package/dist/cjs/types/execution.js.map +1 -0
- package/dist/cjs/types/index.d.ts +3 -0
- package/dist/cjs/types/index.d.ts.map +1 -1
- package/dist/cjs/types/index.js +3 -0
- package/dist/cjs/types/index.js.map +1 -1
- package/dist/cjs/types/masfeat.d.ts +238 -0
- package/dist/cjs/types/masfeat.d.ts.map +1 -0
- package/dist/cjs/types/masfeat.js +11 -0
- package/dist/cjs/types/masfeat.js.map +1 -0
- package/dist/cjs/types/planning.d.ts +126 -1
- package/dist/cjs/types/planning.d.ts.map +1 -1
- package/dist/cjs/types/policies.d.ts +19 -1
- package/dist/cjs/types/policies.d.ts.map +1 -1
- package/dist/cjs/types/proxy.d.ts +29 -3
- package/dist/cjs/types/proxy.d.ts.map +1 -1
- package/dist/cjs/types/workflows.d.ts +318 -0
- package/dist/cjs/types/workflows.d.ts.map +1 -0
- package/dist/cjs/types/workflows.js +61 -0
- package/dist/cjs/types/workflows.js.map +1 -0
- package/dist/esm/client.d.ts +487 -8
- package/dist/esm/client.d.ts.map +1 -1
- package/dist/esm/client.js +1673 -46
- package/dist/esm/client.js.map +1 -1
- package/dist/esm/errors.d.ts +22 -0
- package/dist/esm/errors.d.ts.map +1 -1
- package/dist/esm/errors.js +30 -0
- package/dist/esm/errors.js.map +1 -1
- package/dist/esm/index.d.ts +10 -14
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +7 -15
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/connector.d.ts +54 -0
- package/dist/esm/types/connector.d.ts.map +1 -1
- package/dist/esm/types/connector.js +6 -1
- package/dist/esm/types/connector.js.map +1 -1
- package/dist/esm/types/execution.d.ts +227 -0
- package/dist/esm/types/execution.d.ts.map +1 -0
- package/dist/esm/types/execution.js +70 -0
- package/dist/esm/types/execution.js.map +1 -0
- package/dist/esm/types/index.d.ts +3 -0
- package/dist/esm/types/index.d.ts.map +1 -1
- package/dist/esm/types/index.js +3 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/types/masfeat.d.ts +238 -0
- package/dist/esm/types/masfeat.d.ts.map +1 -0
- package/dist/esm/types/masfeat.js +10 -0
- package/dist/esm/types/masfeat.js.map +1 -0
- package/dist/esm/types/planning.d.ts +126 -1
- package/dist/esm/types/planning.d.ts.map +1 -1
- package/dist/esm/types/policies.d.ts +19 -1
- package/dist/esm/types/policies.d.ts.map +1 -1
- package/dist/esm/types/proxy.d.ts +29 -3
- package/dist/esm/types/proxy.d.ts.map +1 -1
- package/dist/esm/types/workflows.d.ts +318 -0
- package/dist/esm/types/workflows.d.ts.map +1 -0
- package/dist/esm/types/workflows.js +58 -0
- package/dist/esm/types/workflows.js.map +1 -0
- package/package.json +7 -2
- package/dist/cjs/interceptors/anthropic.d.ts +0 -40
- package/dist/cjs/interceptors/anthropic.d.ts.map +0 -1
- package/dist/cjs/interceptors/anthropic.js +0 -101
- package/dist/cjs/interceptors/anthropic.js.map +0 -1
- package/dist/cjs/interceptors/base.d.ts +0 -23
- package/dist/cjs/interceptors/base.d.ts.map +0 -1
- package/dist/cjs/interceptors/base.js +0 -10
- package/dist/cjs/interceptors/base.js.map +0 -1
- package/dist/cjs/interceptors/bedrock.d.ts +0 -142
- package/dist/cjs/interceptors/bedrock.d.ts.map +0 -1
- package/dist/cjs/interceptors/bedrock.js +0 -263
- package/dist/cjs/interceptors/bedrock.js.map +0 -1
- package/dist/cjs/interceptors/gemini.d.ts +0 -89
- package/dist/cjs/interceptors/gemini.d.ts.map +0 -1
- package/dist/cjs/interceptors/gemini.js +0 -121
- package/dist/cjs/interceptors/gemini.js.map +0 -1
- package/dist/cjs/interceptors/ollama.d.ts +0 -143
- package/dist/cjs/interceptors/ollama.d.ts.map +0 -1
- package/dist/cjs/interceptors/ollama.js +0 -153
- package/dist/cjs/interceptors/ollama.js.map +0 -1
- package/dist/cjs/interceptors/openai.d.ts +0 -40
- package/dist/cjs/interceptors/openai.d.ts.map +0 -1
- package/dist/cjs/interceptors/openai.js +0 -100
- package/dist/cjs/interceptors/openai.js.map +0 -1
- package/dist/esm/interceptors/anthropic.d.ts +0 -40
- package/dist/esm/interceptors/anthropic.d.ts.map +0 -1
- package/dist/esm/interceptors/anthropic.js +0 -96
- package/dist/esm/interceptors/anthropic.js.map +0 -1
- package/dist/esm/interceptors/base.d.ts +0 -23
- package/dist/esm/interceptors/base.d.ts.map +0 -1
- package/dist/esm/interceptors/base.js +0 -6
- package/dist/esm/interceptors/base.js.map +0 -1
- package/dist/esm/interceptors/bedrock.d.ts +0 -142
- package/dist/esm/interceptors/bedrock.d.ts.map +0 -1
- package/dist/esm/interceptors/bedrock.js +0 -224
- package/dist/esm/interceptors/bedrock.js.map +0 -1
- package/dist/esm/interceptors/gemini.d.ts +0 -89
- package/dist/esm/interceptors/gemini.d.ts.map +0 -1
- package/dist/esm/interceptors/gemini.js +0 -116
- package/dist/esm/interceptors/gemini.js.map +0 -1
- package/dist/esm/interceptors/ollama.d.ts +0 -143
- package/dist/esm/interceptors/ollama.d.ts.map +0 -1
- package/dist/esm/interceptors/ollama.js +0 -147
- package/dist/esm/interceptors/ollama.js.map +0 -1
- package/dist/esm/interceptors/openai.d.ts +0 -40
- package/dist/esm/interceptors/openai.d.ts.map +0 -1
- package/dist/esm/interceptors/openai.js +0 -95
- package/dist/esm/interceptors/openai.js.map +0 -1
|
@@ -1,143 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../src/interceptors/ollama.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OllamaInterceptor = void 0;
|
|
4
|
-
exports.wrapOllamaClient = wrapOllamaClient;
|
|
5
|
-
exports.createGovernedOllamaChat = createGovernedOllamaChat;
|
|
6
|
-
const base_1 = require("./base");
|
|
7
|
-
/**
|
|
8
|
-
* Interceptor for Ollama API calls
|
|
9
|
-
*
|
|
10
|
-
* Ollama is a local LLM server that runs on localhost:11434 by default.
|
|
11
|
-
* No authentication is required.
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```typescript
|
|
15
|
-
* import { AxonFlow, wrapOllamaClient } from '@axonflow/sdk';
|
|
16
|
-
* import Ollama from 'ollama';
|
|
17
|
-
*
|
|
18
|
-
* const ollama = new Ollama({ host: 'http://localhost:11434' });
|
|
19
|
-
* const axonflow = new AxonFlow({ endpoint: 'http://localhost:8080' });
|
|
20
|
-
*
|
|
21
|
-
* const wrapped = wrapOllamaClient(ollama, axonflow);
|
|
22
|
-
* const response = await wrapped.chat({
|
|
23
|
-
* model: 'llama2',
|
|
24
|
-
* messages: [{ role: 'user', content: 'Hello!' }]
|
|
25
|
-
* });
|
|
26
|
-
* ```
|
|
27
|
-
*/
|
|
28
|
-
class OllamaInterceptor extends base_1.BaseInterceptor {
|
|
29
|
-
canHandle(aiCall) {
|
|
30
|
-
const callString = aiCall.toString();
|
|
31
|
-
return (callString.includes('ollama') ||
|
|
32
|
-
callString.includes('llama') ||
|
|
33
|
-
callString.includes('mistral') ||
|
|
34
|
-
callString.includes('codellama') ||
|
|
35
|
-
callString.includes('localhost:11434'));
|
|
36
|
-
}
|
|
37
|
-
extractRequest(aiCall) {
|
|
38
|
-
const callString = aiCall.toString();
|
|
39
|
-
let model = 'llama2';
|
|
40
|
-
if (callString.includes('mistral')) {
|
|
41
|
-
model = 'mistral';
|
|
42
|
-
}
|
|
43
|
-
else if (callString.includes('codellama')) {
|
|
44
|
-
model = 'codellama';
|
|
45
|
-
}
|
|
46
|
-
else if (callString.includes('llama3')) {
|
|
47
|
-
model = 'llama3';
|
|
48
|
-
}
|
|
49
|
-
return {
|
|
50
|
-
provider: 'ollama',
|
|
51
|
-
model,
|
|
52
|
-
prompt: callString,
|
|
53
|
-
parameters: {},
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
executeWithModifications(aiCall, _modifications) {
|
|
57
|
-
return aiCall();
|
|
58
|
-
}
|
|
59
|
-
getProvider() {
|
|
60
|
-
return 'ollama';
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
exports.OllamaInterceptor = OllamaInterceptor;
|
|
64
|
-
/**
|
|
65
|
-
* Wraps an Ollama client with AxonFlow governance.
|
|
66
|
-
*
|
|
67
|
-
* @deprecated This function is deprecated and will be removed in v2.0.0.
|
|
68
|
-
* JavaScript Proxy-based wrapping has compatibility issues with modern SDK versions.
|
|
69
|
-
*
|
|
70
|
-
* Use Gateway Mode or Proxy Mode instead:
|
|
71
|
-
*
|
|
72
|
-
* Gateway Mode (recommended):
|
|
73
|
-
* ```typescript
|
|
74
|
-
* const context = await axonflow.getPolicyApprovedContext({ query, userToken });
|
|
75
|
-
* const response = await ollama.chat({ model: 'llama2', messages: [...] });
|
|
76
|
-
* await axonflow.auditLLMCall({ contextId: context.contextId, ... });
|
|
77
|
-
* ```
|
|
78
|
-
*
|
|
79
|
-
* Proxy Mode:
|
|
80
|
-
* ```typescript
|
|
81
|
-
* const response = await axonflow.executeQuery({
|
|
82
|
-
* query,
|
|
83
|
-
* userToken,
|
|
84
|
-
* context: { provider: 'ollama', model: 'llama2' }
|
|
85
|
-
* });
|
|
86
|
-
* ```
|
|
87
|
-
*
|
|
88
|
-
* See: https://docs.getaxonflow.com/sdk/gateway-mode
|
|
89
|
-
*/
|
|
90
|
-
function wrapOllamaClient(ollamaClient, axonflow) {
|
|
91
|
-
console.warn('[AxonFlow] wrapOllamaClient is deprecated and will be removed in v2.0.0. ' +
|
|
92
|
-
'Use Gateway Mode (getPolicyApprovedContext + auditLLMCall) or Proxy Mode (executeQuery) instead. ' +
|
|
93
|
-
'See: https://docs.getaxonflow.com/sdk/gateway-mode');
|
|
94
|
-
return new Proxy(ollamaClient, {
|
|
95
|
-
get(target, prop, receiver) {
|
|
96
|
-
const original = Reflect.get(target, prop, receiver);
|
|
97
|
-
// Intercept chat and generate methods
|
|
98
|
-
if (typeof original === 'function' && ['chat', 'generate'].includes(prop.toString())) {
|
|
99
|
-
return async (...args) => {
|
|
100
|
-
return axonflow.protect(() => original.apply(target, args));
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
return original;
|
|
104
|
-
},
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Creates a governed Ollama chat function.
|
|
109
|
-
*
|
|
110
|
-
* Use this when you want fine-grained control over individual calls
|
|
111
|
-
* rather than wrapping the entire client.
|
|
112
|
-
*
|
|
113
|
-
* @example
|
|
114
|
-
* ```typescript
|
|
115
|
-
* const governedChat = createGovernedOllamaChat(ollamaClient, axonflow, 'user-123');
|
|
116
|
-
* const response = await governedChat({
|
|
117
|
-
* model: 'llama2',
|
|
118
|
-
* messages: [{ role: 'user', content: 'Hello!' }]
|
|
119
|
-
* });
|
|
120
|
-
* ```
|
|
121
|
-
*/
|
|
122
|
-
function createGovernedOllamaChat(ollamaClient, axonflow, userToken = '') {
|
|
123
|
-
return async (request) => {
|
|
124
|
-
// Extract prompt from messages
|
|
125
|
-
const prompt = request.messages.map(m => m.content).join(' ');
|
|
126
|
-
// Pre-check with AxonFlow
|
|
127
|
-
const preCheck = await axonflow.getPolicyApprovedContext({
|
|
128
|
-
userToken,
|
|
129
|
-
query: prompt,
|
|
130
|
-
context: {
|
|
131
|
-
provider: 'ollama',
|
|
132
|
-
model: request.model,
|
|
133
|
-
},
|
|
134
|
-
});
|
|
135
|
-
if (!preCheck.approved) {
|
|
136
|
-
throw new Error(`Request blocked by policy: ${preCheck.blockReason}`);
|
|
137
|
-
}
|
|
138
|
-
// Execute the call
|
|
139
|
-
const startTime = Date.now();
|
|
140
|
-
const response = await ollamaClient.chat(request);
|
|
141
|
-
const latencyMs = Date.now() - startTime;
|
|
142
|
-
// Audit the call
|
|
143
|
-
if (preCheck.contextId) {
|
|
144
|
-
await axonflow.auditLLMCall(preCheck.contextId, response.message?.content?.substring(0, 200) || '', 'ollama', request.model, {
|
|
145
|
-
promptTokens: response.prompt_eval_count || 0,
|
|
146
|
-
completionTokens: response.eval_count || 0,
|
|
147
|
-
totalTokens: (response.prompt_eval_count || 0) + (response.eval_count || 0),
|
|
148
|
-
}, latencyMs);
|
|
149
|
-
}
|
|
150
|
-
return response;
|
|
151
|
-
};
|
|
152
|
-
}
|
|
153
|
-
//# sourceMappingURL=ollama.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../src/interceptors/ollama.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { BaseInterceptor } from './base';
|
|
2
|
-
import { AIRequest } from '../types';
|
|
3
|
-
/**
|
|
4
|
-
* Interceptor for OpenAI API calls
|
|
5
|
-
*/
|
|
6
|
-
export declare class OpenAIInterceptor extends BaseInterceptor {
|
|
7
|
-
canHandle(aiCall: any): boolean;
|
|
8
|
-
extractRequest(aiCall: any): AIRequest;
|
|
9
|
-
executeWithModifications(aiCall: any, _modifications: any): Promise<any>;
|
|
10
|
-
getProvider(): string;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Helper to wrap OpenAI client for easier interception
|
|
14
|
-
*
|
|
15
|
-
* @deprecated This function is deprecated and will be removed in v2.0.0.
|
|
16
|
-
* Modern OpenAI SDK versions (v4+) use private class fields that are incompatible
|
|
17
|
-
* with JavaScript Proxy-based wrapping.
|
|
18
|
-
*
|
|
19
|
-
* Use Gateway Mode or Proxy Mode instead:
|
|
20
|
-
*
|
|
21
|
-
* Gateway Mode (recommended):
|
|
22
|
-
* ```typescript
|
|
23
|
-
* const context = await axonflow.getPolicyApprovedContext({ query, userToken });
|
|
24
|
-
* const response = await openai.chat.completions.create({ ... });
|
|
25
|
-
* await axonflow.auditLLMCall({ contextId: context.contextId, ... });
|
|
26
|
-
* ```
|
|
27
|
-
*
|
|
28
|
-
* Proxy Mode:
|
|
29
|
-
* ```typescript
|
|
30
|
-
* const response = await axonflow.executeQuery({
|
|
31
|
-
* query,
|
|
32
|
-
* userToken,
|
|
33
|
-
* context: { provider: 'openai', model: 'gpt-4' }
|
|
34
|
-
* });
|
|
35
|
-
* ```
|
|
36
|
-
*
|
|
37
|
-
* See: https://docs.getaxonflow.com/sdk/gateway-mode
|
|
38
|
-
*/
|
|
39
|
-
export declare function wrapOpenAIClient(openaiClient: any, axonflow: any): any;
|
|
40
|
-
//# sourceMappingURL=openai.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/interceptors/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO;IAW/B,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,SAAS;IAuBtC,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAMxE,WAAW,IAAI,MAAM;CAGtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,GAAG,GAAG,CA8BtE"}
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.OpenAIInterceptor = void 0;
|
|
4
|
-
exports.wrapOpenAIClient = wrapOpenAIClient;
|
|
5
|
-
const base_1 = require("./base");
|
|
6
|
-
/**
|
|
7
|
-
* Interceptor for OpenAI API calls
|
|
8
|
-
*/
|
|
9
|
-
class OpenAIInterceptor extends base_1.BaseInterceptor {
|
|
10
|
-
canHandle(aiCall) {
|
|
11
|
-
// Check if this looks like an OpenAI call
|
|
12
|
-
const callString = aiCall.toString();
|
|
13
|
-
return (callString.includes('openai') ||
|
|
14
|
-
callString.includes('createCompletion') ||
|
|
15
|
-
callString.includes('createChatCompletion') ||
|
|
16
|
-
callString.includes('gpt'));
|
|
17
|
-
}
|
|
18
|
-
extractRequest(aiCall) {
|
|
19
|
-
// Try to extract OpenAI-specific details
|
|
20
|
-
// This is simplified - in production, we'd use more sophisticated parsing
|
|
21
|
-
const callString = aiCall.toString();
|
|
22
|
-
// Try to detect model
|
|
23
|
-
let model = 'unknown';
|
|
24
|
-
if (callString.includes('gpt-4')) {
|
|
25
|
-
model = 'gpt-4';
|
|
26
|
-
}
|
|
27
|
-
else if (callString.includes('gpt-3.5')) {
|
|
28
|
-
model = 'gpt-3.5-turbo';
|
|
29
|
-
}
|
|
30
|
-
return {
|
|
31
|
-
provider: 'openai',
|
|
32
|
-
model,
|
|
33
|
-
prompt: callString,
|
|
34
|
-
parameters: {
|
|
35
|
-
// Would extract temperature, max_tokens, etc. in production
|
|
36
|
-
},
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
executeWithModifications(aiCall, _modifications) {
|
|
40
|
-
// Execute the call with any modifications from governance
|
|
41
|
-
// In production, this would apply actual modifications
|
|
42
|
-
return aiCall();
|
|
43
|
-
}
|
|
44
|
-
getProvider() {
|
|
45
|
-
return 'openai';
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
exports.OpenAIInterceptor = OpenAIInterceptor;
|
|
49
|
-
/**
|
|
50
|
-
* Helper to wrap OpenAI client for easier interception
|
|
51
|
-
*
|
|
52
|
-
* @deprecated This function is deprecated and will be removed in v2.0.0.
|
|
53
|
-
* Modern OpenAI SDK versions (v4+) use private class fields that are incompatible
|
|
54
|
-
* with JavaScript Proxy-based wrapping.
|
|
55
|
-
*
|
|
56
|
-
* Use Gateway Mode or Proxy Mode instead:
|
|
57
|
-
*
|
|
58
|
-
* Gateway Mode (recommended):
|
|
59
|
-
* ```typescript
|
|
60
|
-
* const context = await axonflow.getPolicyApprovedContext({ query, userToken });
|
|
61
|
-
* const response = await openai.chat.completions.create({ ... });
|
|
62
|
-
* await axonflow.auditLLMCall({ contextId: context.contextId, ... });
|
|
63
|
-
* ```
|
|
64
|
-
*
|
|
65
|
-
* Proxy Mode:
|
|
66
|
-
* ```typescript
|
|
67
|
-
* const response = await axonflow.executeQuery({
|
|
68
|
-
* query,
|
|
69
|
-
* userToken,
|
|
70
|
-
* context: { provider: 'openai', model: 'gpt-4' }
|
|
71
|
-
* });
|
|
72
|
-
* ```
|
|
73
|
-
*
|
|
74
|
-
* See: https://docs.getaxonflow.com/sdk/gateway-mode
|
|
75
|
-
*/
|
|
76
|
-
function wrapOpenAIClient(openaiClient, axonflow) {
|
|
77
|
-
console.warn('[AxonFlow] wrapOpenAIClient is deprecated and will be removed in v2.0.0. ' +
|
|
78
|
-
'Use Gateway Mode (getPolicyApprovedContext + auditLLMCall) or Proxy Mode (executeQuery) instead. ' +
|
|
79
|
-
'See: https://docs.getaxonflow.com/sdk/gateway-mode');
|
|
80
|
-
// Create a proxy that intercepts method calls
|
|
81
|
-
return new Proxy(openaiClient, {
|
|
82
|
-
get(target, prop, receiver) {
|
|
83
|
-
const original = Reflect.get(target, prop, receiver);
|
|
84
|
-
// If it's a function that makes API calls
|
|
85
|
-
if (typeof original === 'function' &&
|
|
86
|
-
['createCompletion', 'createChatCompletion', 'createEdit'].includes(prop.toString())) {
|
|
87
|
-
return async (...args) => {
|
|
88
|
-
// Protect the call with AxonFlow
|
|
89
|
-
return axonflow.protect(() => original.apply(target, args));
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
// For nested objects (like openai.chat.completions)
|
|
93
|
-
if (typeof original === 'object' && original !== null) {
|
|
94
|
-
return wrapOpenAIClient(original, axonflow);
|
|
95
|
-
}
|
|
96
|
-
return original;
|
|
97
|
-
},
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
//# sourceMappingURL=openai.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/interceptors/openai.ts"],"names":[],"mappings":";;;AA+EA,4CA8BC;AA7GD,iCAAyC;AAGzC;;GAEG;AACH,MAAa,iBAAkB,SAAQ,sBAAe;IACpD,SAAS,CAAC,MAAW;QACnB,0CAA0C;QAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrC,OAAO,CACL,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC7B,UAAU,CAAC,QAAQ,CAAC,kBAAkB,CAAC;YACvC,UAAU,CAAC,QAAQ,CAAC,sBAAsB,CAAC;YAC3C,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAC3B,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,MAAW;QACxB,yCAAyC;QACzC,0EAA0E;QAC1E,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAErC,sBAAsB;QACtB,IAAI,KAAK,GAAG,SAAS,CAAC;QACtB,IAAI,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACjC,KAAK,GAAG,OAAO,CAAC;QAClB,CAAC;aAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1C,KAAK,GAAG,eAAe,CAAC;QAC1B,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,QAAQ;YAClB,KAAK;YACL,MAAM,EAAE,UAAU;YAClB,UAAU,EAAE;YACV,4DAA4D;aAC7D;SACF,CAAC;IACJ,CAAC;IAED,wBAAwB,CAAC,MAAW,EAAE,cAAmB;QACvD,0DAA0D;QAC1D,uDAAuD;QACvD,OAAO,MAAM,EAAE,CAAC;IAClB,CAAC;IAED,WAAW;QACT,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF;AA5CD,8CA4CC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,SAAgB,gBAAgB,CAAC,YAAiB,EAAE,QAAa;IAC/D,OAAO,CAAC,IAAI,CACV,2EAA2E;QACzE,mGAAmG;QACnG,oDAAoD,CACvD,CAAC;IACF,8CAA8C;IAC9C,OAAO,IAAI,KAAK,CAAC,YAAY,EAAE;QAC7B,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;YACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAErD,0CAA0C;YAC1C,IACE,OAAO,QAAQ,KAAK,UAAU;gBAC9B,CAAC,kBAAkB,EAAE,sBAAsB,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EACpF,CAAC;gBACD,OAAO,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE;oBAC9B,iCAAiC;oBACjC,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC9D,CAAC,CAAC;YACJ,CAAC;YAED,oDAAoD;YACpD,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtD,OAAO,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC9C,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { BaseInterceptor } from './base';
|
|
2
|
-
import { AIRequest } from '../types';
|
|
3
|
-
/**
|
|
4
|
-
* Interceptor for Anthropic Claude API calls
|
|
5
|
-
*/
|
|
6
|
-
export declare class AnthropicInterceptor extends BaseInterceptor {
|
|
7
|
-
canHandle(aiCall: any): boolean;
|
|
8
|
-
extractRequest(aiCall: any): AIRequest;
|
|
9
|
-
executeWithModifications(aiCall: any, _modifications: any): Promise<any>;
|
|
10
|
-
getProvider(): string;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Helper to wrap Anthropic client for easier interception
|
|
14
|
-
*
|
|
15
|
-
* @deprecated This function is deprecated and will be removed in v2.0.0.
|
|
16
|
-
* Modern Anthropic SDK versions use private class fields that are incompatible
|
|
17
|
-
* with JavaScript Proxy-based wrapping.
|
|
18
|
-
*
|
|
19
|
-
* Use Gateway Mode or Proxy Mode instead:
|
|
20
|
-
*
|
|
21
|
-
* Gateway Mode (recommended):
|
|
22
|
-
* ```typescript
|
|
23
|
-
* const context = await axonflow.getPolicyApprovedContext({ query, userToken });
|
|
24
|
-
* const response = await anthropic.messages.create({ ... });
|
|
25
|
-
* await axonflow.auditLLMCall({ contextId: context.contextId, ... });
|
|
26
|
-
* ```
|
|
27
|
-
*
|
|
28
|
-
* Proxy Mode:
|
|
29
|
-
* ```typescript
|
|
30
|
-
* const response = await axonflow.executeQuery({
|
|
31
|
-
* query,
|
|
32
|
-
* userToken,
|
|
33
|
-
* context: { provider: 'anthropic', model: 'claude-3-sonnet' }
|
|
34
|
-
* });
|
|
35
|
-
* ```
|
|
36
|
-
*
|
|
37
|
-
* See: https://docs.getaxonflow.com/sdk/gateway-mode
|
|
38
|
-
*/
|
|
39
|
-
export declare function wrapAnthropicClient(anthropicClient: any, axonflow: any): any;
|
|
40
|
-
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/interceptors/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,eAAe;IACvD,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO;IAU/B,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,SAAS;IAsBtC,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAKxE,WAAW,IAAI,MAAM;CAGtB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,mBAAmB,CAAC,eAAe,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,GAAG,GAAG,CAiC5E"}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { BaseInterceptor } from './base.js';
|
|
2
|
-
/**
|
|
3
|
-
* Interceptor for Anthropic Claude API calls
|
|
4
|
-
*/
|
|
5
|
-
export class AnthropicInterceptor extends BaseInterceptor {
|
|
6
|
-
canHandle(aiCall) {
|
|
7
|
-
// Check if this looks like an Anthropic call
|
|
8
|
-
const callString = aiCall.toString();
|
|
9
|
-
return (callString.includes('anthropic') ||
|
|
10
|
-
callString.includes('claude') ||
|
|
11
|
-
callString.includes('messages.create'));
|
|
12
|
-
}
|
|
13
|
-
extractRequest(aiCall) {
|
|
14
|
-
// Try to extract Anthropic-specific details
|
|
15
|
-
const callString = aiCall.toString();
|
|
16
|
-
// Try to detect model
|
|
17
|
-
let model = 'unknown';
|
|
18
|
-
if (callString.includes('claude-3')) {
|
|
19
|
-
model = 'claude-3';
|
|
20
|
-
}
|
|
21
|
-
else if (callString.includes('claude-2')) {
|
|
22
|
-
model = 'claude-2';
|
|
23
|
-
}
|
|
24
|
-
return {
|
|
25
|
-
provider: 'anthropic',
|
|
26
|
-
model,
|
|
27
|
-
prompt: callString,
|
|
28
|
-
parameters: {
|
|
29
|
-
// Would extract max_tokens, temperature, etc. in production
|
|
30
|
-
},
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
executeWithModifications(aiCall, _modifications) {
|
|
34
|
-
// Execute the call with any modifications from governance
|
|
35
|
-
return aiCall();
|
|
36
|
-
}
|
|
37
|
-
getProvider() {
|
|
38
|
-
return 'anthropic';
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Helper to wrap Anthropic client for easier interception
|
|
43
|
-
*
|
|
44
|
-
* @deprecated This function is deprecated and will be removed in v2.0.0.
|
|
45
|
-
* Modern Anthropic SDK versions use private class fields that are incompatible
|
|
46
|
-
* with JavaScript Proxy-based wrapping.
|
|
47
|
-
*
|
|
48
|
-
* Use Gateway Mode or Proxy Mode instead:
|
|
49
|
-
*
|
|
50
|
-
* Gateway Mode (recommended):
|
|
51
|
-
* ```typescript
|
|
52
|
-
* const context = await axonflow.getPolicyApprovedContext({ query, userToken });
|
|
53
|
-
* const response = await anthropic.messages.create({ ... });
|
|
54
|
-
* await axonflow.auditLLMCall({ contextId: context.contextId, ... });
|
|
55
|
-
* ```
|
|
56
|
-
*
|
|
57
|
-
* Proxy Mode:
|
|
58
|
-
* ```typescript
|
|
59
|
-
* const response = await axonflow.executeQuery({
|
|
60
|
-
* query,
|
|
61
|
-
* userToken,
|
|
62
|
-
* context: { provider: 'anthropic', model: 'claude-3-sonnet' }
|
|
63
|
-
* });
|
|
64
|
-
* ```
|
|
65
|
-
*
|
|
66
|
-
* See: https://docs.getaxonflow.com/sdk/gateway-mode
|
|
67
|
-
*/
|
|
68
|
-
export function wrapAnthropicClient(anthropicClient, axonflow) {
|
|
69
|
-
console.warn('[AxonFlow] wrapAnthropicClient is deprecated and will be removed in v2.0.0. ' +
|
|
70
|
-
'Use Gateway Mode (getPolicyApprovedContext + auditLLMCall) or Proxy Mode (executeQuery) instead. ' +
|
|
71
|
-
'See: https://docs.getaxonflow.com/sdk/gateway-mode');
|
|
72
|
-
// Create a proxy that intercepts method calls
|
|
73
|
-
return new Proxy(anthropicClient, {
|
|
74
|
-
get(target, prop, receiver) {
|
|
75
|
-
const original = Reflect.get(target, prop, receiver);
|
|
76
|
-
// If it's the messages object
|
|
77
|
-
if (prop === 'messages' && typeof original === 'object') {
|
|
78
|
-
return new Proxy(original, {
|
|
79
|
-
get(messagesTarget, messagesProp) {
|
|
80
|
-
const messagesOriginal = Reflect.get(messagesTarget, messagesProp);
|
|
81
|
-
// If it's the create method
|
|
82
|
-
if (messagesProp === 'create' && typeof messagesOriginal === 'function') {
|
|
83
|
-
return async (...args) => {
|
|
84
|
-
// Protect the call with AxonFlow
|
|
85
|
-
return axonflow.protect(() => messagesOriginal.apply(messagesTarget, args));
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
return messagesOriginal;
|
|
89
|
-
},
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
return original;
|
|
93
|
-
},
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
//# sourceMappingURL=anthropic.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/interceptors/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAGzC;;GAEG;AACH,MAAM,OAAO,oBAAqB,SAAQ,eAAe;IACvD,SAAS,CAAC,MAAW;QACnB,6CAA6C;QAC7C,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrC,OAAO,CACL,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC;YAChC,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC7B,UAAU,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CACvC,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,MAAW;QACxB,4CAA4C;QAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;QAErC,sBAAsB;QACtB,IAAI,KAAK,GAAG,SAAS,CAAC;QACtB,IAAI,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YACpC,KAAK,GAAG,UAAU,CAAC;QACrB,CAAC;aAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3C,KAAK,GAAG,UAAU,CAAC;QACrB,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,WAAW;YACrB,KAAK;YACL,MAAM,EAAE,UAAU;YAClB,UAAU,EAAE;YACV,4DAA4D;aAC7D;SACF,CAAC;IACJ,CAAC;IAED,wBAAwB,CAAC,MAAW,EAAE,cAAmB;QACvD,0DAA0D;QAC1D,OAAO,MAAM,EAAE,CAAC;IAClB,CAAC;IAED,WAAW;QACT,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,UAAU,mBAAmB,CAAC,eAAoB,EAAE,QAAa;IACrE,OAAO,CAAC,IAAI,CACV,8EAA8E;QAC5E,mGAAmG;QACnG,oDAAoD,CACvD,CAAC;IACF,8CAA8C;IAC9C,OAAO,IAAI,KAAK,CAAC,eAAe,EAAE;QAChC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ;YACxB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;YAErD,8BAA8B;YAC9B,IAAI,IAAI,KAAK,UAAU,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBACxD,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;oBACzB,GAAG,CAAC,cAAc,EAAE,YAAY;wBAC9B,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;wBAEnE,4BAA4B;wBAC5B,IAAI,YAAY,KAAK,QAAQ,IAAI,OAAO,gBAAgB,KAAK,UAAU,EAAE,CAAC;4BACxE,OAAO,KAAK,EAAE,GAAG,IAAW,EAAE,EAAE;gCAC9B,iCAAiC;gCACjC,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;4BAC9E,CAAC,CAAC;wBACJ,CAAC;wBAED,OAAO,gBAAgB,CAAC;oBAC1B,CAAC;iBACF,CAAC,CAAC;YACL,CAAC;YAED,OAAO,QAAQ,CAAC;QAClB,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { AIRequest } from '../types';
|
|
2
|
-
/**
|
|
3
|
-
* Base interceptor interface for different AI providers
|
|
4
|
-
*/
|
|
5
|
-
export declare abstract class BaseInterceptor {
|
|
6
|
-
/**
|
|
7
|
-
* Check if this interceptor can handle the given AI call
|
|
8
|
-
*/
|
|
9
|
-
abstract canHandle(aiCall: any): boolean;
|
|
10
|
-
/**
|
|
11
|
-
* Extract request details from the AI call
|
|
12
|
-
*/
|
|
13
|
-
abstract extractRequest(aiCall: any): AIRequest;
|
|
14
|
-
/**
|
|
15
|
-
* Execute the AI call with modifications
|
|
16
|
-
*/
|
|
17
|
-
abstract executeWithModifications(aiCall: any, modifications: any): Promise<any>;
|
|
18
|
-
/**
|
|
19
|
-
* Get the provider name
|
|
20
|
-
*/
|
|
21
|
-
abstract getProvider(): string;
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=base.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/interceptors/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC;;GAEG;AACH,8BAAsB,eAAe;IACnC;;OAEG;IACH,QAAQ,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO;IAExC;;OAEG;IACH,QAAQ,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,GAAG,SAAS;IAE/C;;OAEG;IACH,QAAQ,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAEhF;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,MAAM;CAC/B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/interceptors/base.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,OAAgB,eAAe;CAoBpC"}
|