ai-requests-adapter 1.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +201 -101
- package/dist/capabilities.d.ts +3 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +59 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/chat-style-transformer.d.ts +77 -0
- package/dist/chat-style-transformer.d.ts.map +1 -0
- package/dist/chat-style-transformer.js +245 -0
- package/dist/chat-style-transformer.js.map +1 -0
- package/dist/index.d.ts +13 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +30 -16
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# AI Requests Adapter
|
|
2
2
|
|
|
3
|
-
A
|
|
3
|
+
A unified chat-style transformer SDK for handling AI API requests across multiple providers. This SDK provides a single input format (Chat Completions-style) and transforms it into vendor-specific API payloads, making it easy to work with different AI services through a consistent interface.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -11,160 +11,260 @@ npm install ai-requests-adapter
|
|
|
11
11
|
## Quick Start
|
|
12
12
|
|
|
13
13
|
```typescript
|
|
14
|
-
import {
|
|
15
|
-
|
|
16
|
-
// Create an adapter instance
|
|
17
|
-
const adapter = createAIAdapter();
|
|
18
|
-
|
|
19
|
-
// Register a provider (you'll need to implement the AIProvider interface)
|
|
20
|
-
adapter.registerProvider('my-provider', myProviderImplementation, true);
|
|
14
|
+
import { transformToVendorRequest } from 'ai-requests-adapter';
|
|
21
15
|
|
|
22
|
-
//
|
|
23
|
-
const
|
|
16
|
+
// Transform a unified chat-style request to vendor-specific API payload
|
|
17
|
+
const result = transformToVendorRequest({
|
|
18
|
+
provider: 'openai',
|
|
19
|
+
model: 'gpt-5.2',
|
|
24
20
|
messages: [
|
|
21
|
+
{ role: 'system', content: 'You are helpful.' },
|
|
25
22
|
{ role: 'user', content: 'Hello, how are you?' }
|
|
26
23
|
],
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
max_tokens: 200,
|
|
25
|
+
reasoning: { effort: 'medium' },
|
|
26
|
+
temperature: 0.2
|
|
29
27
|
});
|
|
30
28
|
|
|
31
|
-
console.log(
|
|
29
|
+
console.log(result.api); // "responses"
|
|
30
|
+
console.log(result.payload); // Ready-to-send OpenAI Responses API payload
|
|
31
|
+
console.log(result.warnings); // Any transformation warnings
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Core Concept
|
|
35
|
+
|
|
36
|
+
**One unified input format** → **Transformer** → **Vendor + API specific payload**
|
|
37
|
+
|
|
38
|
+
Your gateway always receives Chat Completions-style requests:
|
|
39
|
+
|
|
40
|
+
```typescript
|
|
41
|
+
{
|
|
42
|
+
provider: 'openai' | 'anthropic' | 'google' | 'xai',
|
|
43
|
+
model: string,
|
|
44
|
+
messages: [{ role: 'system'|'developer'|'user'|'assistant', content: string }, ...],
|
|
45
|
+
temperature?, top_p?, max_tokens?, frequency_penalty?, presence_penalty?, stop?, tools?, reasoning?
|
|
46
|
+
}
|
|
32
47
|
```
|
|
33
48
|
|
|
49
|
+
The transformer outputs the exact payload needed for each vendor's API.
|
|
50
|
+
|
|
34
51
|
## API Reference
|
|
35
52
|
|
|
36
|
-
###
|
|
53
|
+
### Main Function
|
|
54
|
+
|
|
55
|
+
#### `transformToVendorRequest(request, registry?)`
|
|
56
|
+
|
|
57
|
+
Transforms a unified chat-style request into a vendor-specific API payload.
|
|
37
58
|
|
|
38
|
-
|
|
59
|
+
```typescript
|
|
60
|
+
import { transformToVendorRequest } from 'ai-requests-adapter';
|
|
61
|
+
|
|
62
|
+
const result = transformToVendorRequest(unifiedRequest, customRegistry?);
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
**Parameters:**
|
|
66
|
+
- `request: UnifiedChatRequest` - The unified chat-style request
|
|
67
|
+
- `registry?: CapabilitiesRegistry` - Optional custom capabilities registry
|
|
39
68
|
|
|
40
|
-
|
|
69
|
+
**Returns:** `BuiltVendorRequest`
|
|
70
|
+
- `provider: string` - The provider (e.g., 'openai')
|
|
71
|
+
- `api: string` - The API endpoint (e.g., 'responses', 'chat_completions')
|
|
72
|
+
- `payload: Record<string, any>` - Ready-to-send API payload
|
|
73
|
+
- `warnings: string[]` - Any transformation warnings
|
|
41
74
|
|
|
42
|
-
|
|
43
|
-
- `sendRequest(request: AIRequest): Promise<AIResponse>`: Send a request using the default provider
|
|
44
|
-
- `sendRequestWithProvider(providerName: string, request: AIRequest): Promise<AIResponse>`: Send a request using a specific provider
|
|
45
|
-
- `getProviders(): string[]`: Get list of registered provider names
|
|
46
|
-
- `setDefaultProvider(name: string)`: Set the default provider
|
|
47
|
-
- `getDefaultProvider(): string | undefined`: Get the current default provider
|
|
75
|
+
### Types
|
|
48
76
|
|
|
49
|
-
|
|
77
|
+
#### `UnifiedChatRequest`
|
|
50
78
|
|
|
51
|
-
|
|
79
|
+
The single input format your gateway accepts:
|
|
52
80
|
|
|
53
81
|
```typescript
|
|
54
|
-
|
|
82
|
+
type UnifiedChatRequest = {
|
|
83
|
+
provider: 'openai' | 'anthropic' | 'google' | 'xai';
|
|
84
|
+
model: string;
|
|
55
85
|
messages: Array<{
|
|
56
|
-
role: '
|
|
86
|
+
role: 'system' | 'developer' | 'user' | 'assistant';
|
|
57
87
|
content: string;
|
|
58
88
|
}>;
|
|
59
|
-
|
|
89
|
+
|
|
90
|
+
// Chat-style config (snake_case primary, camelCase accepted):
|
|
60
91
|
temperature?: number;
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
92
|
+
top_p?: number;
|
|
93
|
+
max_tokens?: number;
|
|
94
|
+
frequency_penalty?: number;
|
|
95
|
+
presence_penalty?: number;
|
|
96
|
+
stop?: string[] | string;
|
|
97
|
+
tools?: unknown[];
|
|
98
|
+
|
|
99
|
+
reasoning?: { effort?: 'none'|'minimal'|'low'|'medium'|'high' };
|
|
100
|
+
reasoning_effort?: 'none'|'minimal'|'low'|'medium'|'high';
|
|
101
|
+
reasoningEffort?: 'none'|'minimal'|'low'|'medium'|'high';
|
|
102
|
+
|
|
103
|
+
// Future keys allowed
|
|
104
|
+
[k: string]: unknown;
|
|
105
|
+
};
|
|
64
106
|
```
|
|
65
107
|
|
|
66
|
-
|
|
108
|
+
### OpenAI Examples
|
|
109
|
+
|
|
110
|
+
#### GPT-5.2 with Responses API
|
|
67
111
|
|
|
68
112
|
```typescript
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
model:
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
113
|
+
const result = transformToVendorRequest({
|
|
114
|
+
provider: 'openai',
|
|
115
|
+
model: 'gpt-5.2',
|
|
116
|
+
messages: [
|
|
117
|
+
{ role: 'system', content: 'You are helpful.' },
|
|
118
|
+
{ role: 'developer', content: 'Return JSON only.' },
|
|
119
|
+
{ role: 'user', content: 'Hello' }
|
|
120
|
+
],
|
|
121
|
+
max_tokens: 200,
|
|
122
|
+
reasoning: { effort: 'medium' },
|
|
123
|
+
temperature: 0.2 // Will be omitted (conditional on reasoning_effort='none')
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
console.log(result.api); // "responses"
|
|
127
|
+
console.log(result.payload);
|
|
128
|
+
/*
|
|
129
|
+
{
|
|
130
|
+
model: 'gpt-5.2',
|
|
131
|
+
instructions: 'You are helpful.\n\n-------------------------------------------------------------\n\nReturn JSON only.',
|
|
132
|
+
input: [{ role: 'user', content: 'Hello' }],
|
|
133
|
+
max_output_tokens: 200,
|
|
134
|
+
reasoning: { effort: 'medium' }
|
|
78
135
|
}
|
|
136
|
+
*/
|
|
137
|
+
console.log(result.warnings); // ["Omitted temperature=0.2 (not supported for model/reasoning)."]
|
|
79
138
|
```
|
|
80
139
|
|
|
81
|
-
####
|
|
140
|
+
#### GPT-4-Turbo with Chat Completions API
|
|
82
141
|
|
|
83
142
|
```typescript
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
143
|
+
const result = transformToVendorRequest({
|
|
144
|
+
provider: 'openai',
|
|
145
|
+
model: 'gpt-4-turbo',
|
|
146
|
+
messages: [
|
|
147
|
+
{ role: 'system', content: 'You are helpful.' },
|
|
148
|
+
{ role: 'user', content: 'Hello' }
|
|
149
|
+
],
|
|
150
|
+
max_tokens: 100,
|
|
151
|
+
temperature: 0.7,
|
|
152
|
+
frequency_penalty: 0.1
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
console.log(result.api); // "chat_completions"
|
|
156
|
+
console.log(result.payload);
|
|
157
|
+
/*
|
|
158
|
+
{
|
|
159
|
+
model: 'gpt-4-turbo',
|
|
160
|
+
messages: [
|
|
161
|
+
{ role: 'system', content: 'You are helpful.' },
|
|
162
|
+
{ role: 'user', content: 'Hello' }
|
|
163
|
+
],
|
|
164
|
+
max_tokens: 100,
|
|
165
|
+
temperature: 0.7,
|
|
166
|
+
frequency_penalty: 0.1
|
|
87
167
|
}
|
|
168
|
+
*/
|
|
88
169
|
```
|
|
89
170
|
|
|
90
|
-
##
|
|
171
|
+
## Capabilities Registry
|
|
172
|
+
|
|
173
|
+
The SDK uses a capabilities registry to determine how to transform requests based on provider and model capabilities.
|
|
91
174
|
|
|
92
|
-
|
|
175
|
+
### Built-in Registry
|
|
93
176
|
|
|
94
177
|
```typescript
|
|
95
|
-
import {
|
|
96
|
-
|
|
97
|
-
class OpenAIProvider implements AIProvider {
|
|
98
|
-
name = 'openai';
|
|
99
|
-
|
|
100
|
-
async sendRequest(request: AIRequest): Promise<AIResponse> {
|
|
101
|
-
// Your OpenAI API implementation here
|
|
102
|
-
const response = await fetch('https://api.openai.com/v1/chat/completions', {
|
|
103
|
-
method: 'POST',
|
|
104
|
-
headers: {
|
|
105
|
-
'Authorization': `Bearer ${process.env.OPENAI_API_KEY}`,
|
|
106
|
-
'Content-Type': 'application/json',
|
|
107
|
-
},
|
|
108
|
-
body: JSON.stringify({
|
|
109
|
-
model: request.model || 'gpt-3.5-turbo',
|
|
110
|
-
messages: request.messages,
|
|
111
|
-
temperature: request.temperature,
|
|
112
|
-
max_tokens: request.maxTokens,
|
|
113
|
-
}),
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
const data = await response.json();
|
|
117
|
-
|
|
118
|
-
return {
|
|
119
|
-
content: data.choices[0].message.content,
|
|
120
|
-
model: data.model,
|
|
121
|
-
usage: {
|
|
122
|
-
promptTokens: data.usage.prompt_tokens,
|
|
123
|
-
completionTokens: data.usage.completion_tokens,
|
|
124
|
-
totalTokens: data.usage.total_tokens,
|
|
125
|
-
},
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
}
|
|
178
|
+
import { capabilities } from 'ai-requests-adapter';
|
|
129
179
|
|
|
130
|
-
//
|
|
131
|
-
|
|
132
|
-
adapter.registerProvider('openai', new OpenAIProvider());
|
|
180
|
+
// Access the default registry
|
|
181
|
+
console.log(capabilities.providers.openai.models['gpt-5.2']);
|
|
133
182
|
```
|
|
134
183
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
### Multiple Providers
|
|
184
|
+
### Custom Registry
|
|
138
185
|
|
|
139
186
|
```typescript
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
187
|
+
import { transformToVendorRequest } from 'ai-requests-adapter';
|
|
188
|
+
|
|
189
|
+
const customCapabilities = {
|
|
190
|
+
providers: {
|
|
191
|
+
openai: {
|
|
192
|
+
schemaVersion: '2025-12-24',
|
|
193
|
+
defaults: {
|
|
194
|
+
tokenParamByApi: {
|
|
195
|
+
responses: 'max_output_tokens',
|
|
196
|
+
chat_completions: 'max_tokens'
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
models: {
|
|
200
|
+
'my-custom-model': {
|
|
201
|
+
api: 'responses',
|
|
202
|
+
reasoningEffort: { supported: true },
|
|
203
|
+
sampling: { temperature: { supported: true }, top_p: { supported: true } },
|
|
204
|
+
penalties: { frequency: false, presence: false },
|
|
205
|
+
stop: { supported: true }
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
};
|
|
145
211
|
|
|
146
|
-
|
|
147
|
-
const openAIResponse = await adapter.sendRequestWithProvider('openai', request);
|
|
148
|
-
const anthropicResponse = await adapter.sendRequest(request); // Uses default (anthropic)
|
|
212
|
+
const result = transformToVendorRequest(request, customCapabilities);
|
|
149
213
|
```
|
|
150
214
|
|
|
151
|
-
|
|
215
|
+
## Legacy API (Deprecated)
|
|
216
|
+
|
|
217
|
+
The old adapter pattern is still available but deprecated. Use the transformer API instead.
|
|
152
218
|
|
|
153
219
|
```typescript
|
|
220
|
+
import { AIRequestsAdapter, createAIAdapter } from 'ai-requests-adapter';
|
|
221
|
+
|
|
222
|
+
// Legacy usage (deprecated)
|
|
154
223
|
const adapter = createAIAdapter();
|
|
155
224
|
adapter.registerProvider('openai', openAIProvider);
|
|
156
|
-
adapter.
|
|
225
|
+
const response = await adapter.sendRequest(request);
|
|
226
|
+
```
|
|
157
227
|
|
|
158
|
-
|
|
159
|
-
adapter.setDefaultProvider('anthropic');
|
|
228
|
+
## Integration Example
|
|
160
229
|
|
|
161
|
-
|
|
162
|
-
|
|
230
|
+
Here's how to integrate with your gateway:
|
|
231
|
+
|
|
232
|
+
```typescript
|
|
233
|
+
import { transformToVendorRequest } from 'ai-requests-adapter';
|
|
234
|
+
|
|
235
|
+
// Your gateway endpoint
|
|
236
|
+
app.post('/api/chat', async (req, res) => {
|
|
237
|
+
try {
|
|
238
|
+
// req.body is already in UnifiedChatRequest format
|
|
239
|
+
const { provider, api, payload, warnings } = transformToVendorRequest(req.body);
|
|
240
|
+
|
|
241
|
+
// Route to appropriate vendor SDK
|
|
242
|
+
let response;
|
|
243
|
+
switch (provider) {
|
|
244
|
+
case 'openai':
|
|
245
|
+
if (api === 'responses') {
|
|
246
|
+
response = await openai.responses.create(payload);
|
|
247
|
+
} else {
|
|
248
|
+
response = await openai.chat.completions.create(payload);
|
|
249
|
+
}
|
|
250
|
+
break;
|
|
251
|
+
// Handle other providers...
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
res.json({ response, warnings });
|
|
255
|
+
} catch (error) {
|
|
256
|
+
res.status(500).json({ error: error.message });
|
|
257
|
+
}
|
|
258
|
+
});
|
|
163
259
|
```
|
|
164
260
|
|
|
165
261
|
## Contributing
|
|
166
262
|
|
|
167
|
-
Contributions are welcome!
|
|
263
|
+
Contributions are welcome! The transformer system is designed to be extensible:
|
|
264
|
+
|
|
265
|
+
- Add new providers to the capabilities registry
|
|
266
|
+
- Implement vendor-specific payload builders
|
|
267
|
+
- Extend the reasoning effort and sampling rules
|
|
168
268
|
|
|
169
269
|
## License
|
|
170
270
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAErE,eAAO,MAAM,YAAY,EAAE,oBAwD1B,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.capabilities = void 0;
|
|
4
|
+
exports.capabilities = {
|
|
5
|
+
providers: {
|
|
6
|
+
openai: {
|
|
7
|
+
schemaVersion: '2025-12-24',
|
|
8
|
+
defaults: {
|
|
9
|
+
assumeApiFor: [
|
|
10
|
+
{ modelPrefix: 'gpt-5', api: 'responses' },
|
|
11
|
+
{ modelPrefix: 'gpt-5-mini', api: 'responses' },
|
|
12
|
+
{ modelPrefix: 'gpt-5-nano', api: 'responses' },
|
|
13
|
+
{ modelPrefix: 'gpt-5.1', api: 'responses' },
|
|
14
|
+
{ modelPrefix: 'gpt-5.2', api: 'responses' },
|
|
15
|
+
{ modelPrefix: 'gpt-5.2-pro', api: 'responses' },
|
|
16
|
+
],
|
|
17
|
+
tokenParamByApi: {
|
|
18
|
+
responses: 'max_output_tokens',
|
|
19
|
+
chat_completions: 'max_tokens',
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
models: {
|
|
23
|
+
'gpt-5.2': {
|
|
24
|
+
api: 'responses',
|
|
25
|
+
reasoningEffort: { supported: true, allowed: ['none', 'minimal', 'low', 'medium', 'high'] },
|
|
26
|
+
sampling: {
|
|
27
|
+
temperature: { supported: 'conditional', when: { reasoningEffortEquals: 'none' } },
|
|
28
|
+
top_p: { supported: 'conditional', when: { reasoningEffortEquals: 'none' } },
|
|
29
|
+
},
|
|
30
|
+
penalties: { frequency: false, presence: false },
|
|
31
|
+
stop: { supported: true },
|
|
32
|
+
},
|
|
33
|
+
'gpt-4-turbo': {
|
|
34
|
+
api: 'chat_completions',
|
|
35
|
+
reasoningEffort: { supported: false },
|
|
36
|
+
sampling: { temperature: { supported: true }, top_p: { supported: true } },
|
|
37
|
+
penalties: { frequency: true, presence: true },
|
|
38
|
+
stop: { supported: true },
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
anthropic: {
|
|
43
|
+
schemaVersion: '2025-12-24',
|
|
44
|
+
defaults: { tokenParamByApi: { messages: 'max_tokens' } },
|
|
45
|
+
models: {},
|
|
46
|
+
},
|
|
47
|
+
google: {
|
|
48
|
+
schemaVersion: '2025-12-24',
|
|
49
|
+
defaults: { tokenParamByApi: { generateContent: 'maxOutputTokens' } },
|
|
50
|
+
models: {},
|
|
51
|
+
},
|
|
52
|
+
xai: {
|
|
53
|
+
schemaVersion: '2025-12-24',
|
|
54
|
+
defaults: { tokenParamByApi: { chat: 'max_tokens' } },
|
|
55
|
+
models: {},
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":";;;AAEa,QAAA,YAAY,GAAyB;IAChD,SAAS,EAAE;QACT,MAAM,EAAE;YACN,aAAa,EAAE,YAAY;YAC3B,QAAQ,EAAE;gBACR,YAAY,EAAE;oBACZ,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,WAAW,EAAE;oBAC1C,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE;oBAC/C,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,EAAE,WAAW,EAAE;oBAC/C,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE;oBAC5C,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE;oBAC5C,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,EAAE,WAAW,EAAE;iBACjD;gBACD,eAAe,EAAE;oBACf,SAAS,EAAE,mBAAmB;oBAC9B,gBAAgB,EAAE,YAAY;iBAC/B;aACF;YACD,MAAM,EAAE;gBACN,SAAS,EAAE;oBACT,GAAG,EAAE,WAAW;oBAChB,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE;oBAC3F,QAAQ,EAAE;wBACR,WAAW,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,qBAAqB,EAAE,MAAM,EAAE,EAAE;wBAClF,KAAK,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,qBAAqB,EAAE,MAAM,EAAE,EAAE;qBAC7E;oBACD,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE;oBAChD,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;iBAC1B;gBACD,aAAa,EAAE;oBACb,GAAG,EAAE,kBAAkB;oBACvB,eAAe,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;oBACrC,QAAQ,EAAE,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;oBAC1E,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC9C,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;iBAC1B;aACF;SACF;QAGD,SAAS,EAAE;YACT,aAAa,EAAE,YAAY;YAC3B,QAAQ,EAAE,EAAE,eAAe,EAAE,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE;YACzD,MAAM,EAAE,EAAE;SACX;QACD,MAAM,EAAE;YACN,aAAa,EAAE,YAAY;YAC3B,QAAQ,EAAE,EAAE,eAAe,EAAE,EAAE,eAAe,EAAE,iBAAiB,EAAE,EAAE;YACrE,MAAM,EAAE,EAAE;SACX;QACD,GAAG,EAAE;YACH,aAAa,EAAE,YAAY;YAC3B,QAAQ,EAAE,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE;YACrD,MAAM,EAAE,EAAE;SACX;KACF;CACF,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
export type ProviderId = 'openai' | 'anthropic' | 'google' | 'xai';
|
|
2
|
+
export type ChatRole = 'system' | 'developer' | 'user' | 'assistant';
|
|
3
|
+
export type UnifiedChatMessage = {
|
|
4
|
+
role: ChatRole;
|
|
5
|
+
content: string;
|
|
6
|
+
};
|
|
7
|
+
export type UnifiedChatRequest = {
|
|
8
|
+
provider: ProviderId;
|
|
9
|
+
model: string;
|
|
10
|
+
messages: UnifiedChatMessage[];
|
|
11
|
+
temperature?: number;
|
|
12
|
+
top_p?: number;
|
|
13
|
+
max_tokens?: number;
|
|
14
|
+
frequency_penalty?: number;
|
|
15
|
+
presence_penalty?: number;
|
|
16
|
+
stop?: string[] | string;
|
|
17
|
+
tools?: unknown[];
|
|
18
|
+
reasoning?: {
|
|
19
|
+
effort?: ReasoningEffort;
|
|
20
|
+
};
|
|
21
|
+
reasoning_effort?: ReasoningEffort;
|
|
22
|
+
reasoningEffort?: ReasoningEffort;
|
|
23
|
+
[k: string]: unknown;
|
|
24
|
+
};
|
|
25
|
+
export type BuiltVendorRequest = {
|
|
26
|
+
provider: ProviderId;
|
|
27
|
+
api: string;
|
|
28
|
+
payload: Record<string, any>;
|
|
29
|
+
warnings: string[];
|
|
30
|
+
};
|
|
31
|
+
export type ReasoningEffort = 'none' | 'minimal' | 'low' | 'medium' | 'high';
|
|
32
|
+
export type ApiKindOpenAI = 'responses' | 'chat_completions';
|
|
33
|
+
export type SamplingRule = {
|
|
34
|
+
supported: false;
|
|
35
|
+
} | {
|
|
36
|
+
supported: true;
|
|
37
|
+
fixedValue?: number;
|
|
38
|
+
} | {
|
|
39
|
+
supported: 'conditional';
|
|
40
|
+
when: {
|
|
41
|
+
reasoningEffortEquals: ReasoningEffort;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
export type CapabilityRule = {
|
|
45
|
+
api: string;
|
|
46
|
+
reasoningEffort: {
|
|
47
|
+
supported: boolean;
|
|
48
|
+
allowed?: ReasoningEffort[];
|
|
49
|
+
};
|
|
50
|
+
sampling: {
|
|
51
|
+
temperature: SamplingRule;
|
|
52
|
+
top_p: SamplingRule;
|
|
53
|
+
};
|
|
54
|
+
penalties: {
|
|
55
|
+
frequency: boolean;
|
|
56
|
+
presence: boolean;
|
|
57
|
+
};
|
|
58
|
+
stop: {
|
|
59
|
+
supported: boolean;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
export type ProviderCapabilities = {
|
|
63
|
+
schemaVersion: string;
|
|
64
|
+
defaults: {
|
|
65
|
+
assumeApiFor?: Array<{
|
|
66
|
+
modelPrefix: string;
|
|
67
|
+
api: string;
|
|
68
|
+
}>;
|
|
69
|
+
tokenParamByApi: Record<string, string>;
|
|
70
|
+
};
|
|
71
|
+
models: Record<string, CapabilityRule>;
|
|
72
|
+
};
|
|
73
|
+
export type CapabilitiesRegistry = {
|
|
74
|
+
providers: Record<ProviderId, ProviderCapabilities>;
|
|
75
|
+
};
|
|
76
|
+
export declare function transformChatStyleToVendorRequest(req: UnifiedChatRequest, registry: CapabilitiesRegistry): BuiltVendorRequest;
|
|
77
|
+
//# sourceMappingURL=chat-style-transformer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-style-transformer.d.ts","sourceRoot":"","sources":["../src/chat-style-transformer.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,KAAK,CAAC;AACnE,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,GAAG,WAAW,CAAC;AAErE,MAAM,MAAM,kBAAkB,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAErE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,UAAU,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAG/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAElB,SAAS,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,eAAe,CAAA;KAAE,CAAC;IACzC,gBAAgB,CAAC,EAAE,eAAe,CAAC;IACnC,eAAe,CAAC,EAAE,eAAe,CAAC;IAGlC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,EAAE,UAAU,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAC7E,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,kBAAkB,CAAC;AAI7D,MAAM,MAAM,YAAY,GACpB;IAAE,SAAS,EAAE,KAAK,CAAA;CAAE,GACpB;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,SAAS,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE;QAAE,qBAAqB,EAAE,eAAe,CAAA;KAAE,CAAA;CAAE,CAAC;AAEnF,MAAM,MAAM,cAAc,GAAG;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,eAAe,EAAE,CAAA;KAAE,CAAC;IACrE,QAAQ,EAAE;QAAE,WAAW,EAAE,YAAY,CAAC;QAAC,KAAK,EAAE,YAAY,CAAA;KAAE,CAAC;IAC7D,SAAS,EAAE;QAAE,SAAS,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IACrD,IAAI,EAAE;QAAE,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE;QACR,YAAY,CAAC,EAAE,KAAK,CAAC;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC3D,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACzC,CAAC;IACF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,EAAE,MAAM,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;CACrD,CAAC;AAkRF,wBAAgB,iCAAiC,CAC/C,GAAG,EAAE,kBAAkB,EACvB,QAAQ,EAAE,oBAAoB,GAC7B,kBAAkB,CAgCpB"}
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.transformChatStyleToVendorRequest = transformChatStyleToVendorRequest;
|
|
4
|
+
const DEFAULT_SPLITTER = '\n\n-------------------------------------------------------------\n\n';
|
|
5
|
+
function trim(s) {
|
|
6
|
+
return String(s ?? '').trim();
|
|
7
|
+
}
|
|
8
|
+
function joinHuman(parts, splitter = DEFAULT_SPLITTER) {
|
|
9
|
+
const cleaned = parts.map(p => trim(p)).filter(Boolean);
|
|
10
|
+
if (cleaned.length === 0)
|
|
11
|
+
return '';
|
|
12
|
+
if (cleaned.length === 1)
|
|
13
|
+
return cleaned[0];
|
|
14
|
+
return cleaned.join(splitter);
|
|
15
|
+
}
|
|
16
|
+
function coerceNumber(v) {
|
|
17
|
+
if (typeof v === 'number' && Number.isFinite(v))
|
|
18
|
+
return v;
|
|
19
|
+
if (typeof v === 'string' && v.trim() !== '' && Number.isFinite(Number(v)))
|
|
20
|
+
return Number(v);
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
function normalizeModelKey(model) {
|
|
24
|
+
return model.trim().replace(/-\d{4}-\d{2}-\d{2}.*$/, '');
|
|
25
|
+
}
|
|
26
|
+
function detectReasoningEffort(cfg) {
|
|
27
|
+
const direct = cfg.reasoningEffort ??
|
|
28
|
+
cfg.reasoning_effort;
|
|
29
|
+
if (direct)
|
|
30
|
+
return direct;
|
|
31
|
+
const reasoning = cfg.reasoning;
|
|
32
|
+
if (reasoning && typeof reasoning === 'object') {
|
|
33
|
+
const effort = reasoning.effort;
|
|
34
|
+
if (effort)
|
|
35
|
+
return effort;
|
|
36
|
+
}
|
|
37
|
+
return undefined;
|
|
38
|
+
}
|
|
39
|
+
function allowConditional(rule, reasoningEffort) {
|
|
40
|
+
if (rule.supported === false)
|
|
41
|
+
return { allowed: false, omit: true };
|
|
42
|
+
if (rule.supported === true && rule.fixedValue !== undefined) {
|
|
43
|
+
return { allowed: false, omit: true, fixedValue: rule.fixedValue };
|
|
44
|
+
}
|
|
45
|
+
if (rule.supported === true)
|
|
46
|
+
return { allowed: true, omit: false };
|
|
47
|
+
const ok = reasoningEffort === rule.when.reasoningEffortEquals;
|
|
48
|
+
return { allowed: ok, omit: !ok };
|
|
49
|
+
}
|
|
50
|
+
function resolveRule(providerCaps, model, warnings) {
|
|
51
|
+
const baseKey = normalizeModelKey(model);
|
|
52
|
+
const exact = providerCaps.models[model];
|
|
53
|
+
if (exact)
|
|
54
|
+
return { api: exact.api, rule: exact };
|
|
55
|
+
const base = providerCaps.models[baseKey];
|
|
56
|
+
if (base)
|
|
57
|
+
return { api: base.api, rule: base };
|
|
58
|
+
const assume = providerCaps.defaults.assumeApiFor ?? [];
|
|
59
|
+
const hit = assume.find(x => baseKey === x.modelPrefix ||
|
|
60
|
+
baseKey.startsWith(x.modelPrefix + '-') ||
|
|
61
|
+
baseKey.startsWith(x.modelPrefix + '.'));
|
|
62
|
+
if (hit) {
|
|
63
|
+
warnings.push(`Unknown model "${model}". Falling back to assumed api "${hit.api}".`);
|
|
64
|
+
return {
|
|
65
|
+
api: hit.api,
|
|
66
|
+
rule: {
|
|
67
|
+
api: hit.api,
|
|
68
|
+
reasoningEffort: { supported: false },
|
|
69
|
+
sampling: { temperature: { supported: false }, top_p: { supported: false } },
|
|
70
|
+
penalties: { frequency: false, presence: false },
|
|
71
|
+
stop: { supported: true },
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
warnings.push(`Unknown model "${model}". Falling back to conservative api "chat_completions".`);
|
|
76
|
+
return {
|
|
77
|
+
api: 'chat_completions',
|
|
78
|
+
rule: {
|
|
79
|
+
api: 'chat_completions',
|
|
80
|
+
reasoningEffort: { supported: false },
|
|
81
|
+
sampling: { temperature: { supported: true }, top_p: { supported: true } },
|
|
82
|
+
penalties: { frequency: true, presence: true },
|
|
83
|
+
stop: { supported: true },
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function adaptChatStyleConfigToApiParams(providerCaps, api, rule, model, cfg, warnings) {
|
|
88
|
+
const config = cfg ?? {};
|
|
89
|
+
const out = {};
|
|
90
|
+
const effort = detectReasoningEffort(config);
|
|
91
|
+
if (effort) {
|
|
92
|
+
if (!rule.reasoningEffort.supported) {
|
|
93
|
+
warnings.push(`Dropped reasoning effort "${effort}" (not supported).`);
|
|
94
|
+
}
|
|
95
|
+
else if (rule.reasoningEffort.allowed && !rule.reasoningEffort.allowed.includes(effort)) {
|
|
96
|
+
warnings.push(`Dropped reasoning effort "${effort}" (not allowed).`);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
out.reasoning = { effort };
|
|
100
|
+
out.reasoning_effort = effort;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const finalEffort = out.reasoning?.effort ?? effort;
|
|
104
|
+
const requestedMax = coerceNumber(config.max_tokens) ??
|
|
105
|
+
coerceNumber(config.maxTokens) ??
|
|
106
|
+
coerceNumber(config.max_output_tokens) ??
|
|
107
|
+
coerceNumber(config.maxOutputTokens) ??
|
|
108
|
+
coerceNumber(config.max_completion_tokens);
|
|
109
|
+
if (requestedMax !== undefined) {
|
|
110
|
+
const tokenKey = providerCaps.defaults.tokenParamByApi[api];
|
|
111
|
+
if (!tokenKey)
|
|
112
|
+
warnings.push(`No tokenParamByApi mapping for api="${api}". Dropping max_tokens.`);
|
|
113
|
+
else
|
|
114
|
+
out[tokenKey] = requestedMax;
|
|
115
|
+
}
|
|
116
|
+
if (config.stop !== undefined) {
|
|
117
|
+
if (rule.stop.supported)
|
|
118
|
+
out.stop = config.stop;
|
|
119
|
+
else
|
|
120
|
+
warnings.push(`Dropped stop (not supported).`);
|
|
121
|
+
}
|
|
122
|
+
if (config.temperature !== undefined) {
|
|
123
|
+
const res = allowConditional(rule.sampling.temperature, finalEffort);
|
|
124
|
+
if (!res.allowed || res.omit) {
|
|
125
|
+
warnings.push(res.fixedValue !== undefined
|
|
126
|
+
? `Omitted temperature=${config.temperature} (fixed default ${res.fixedValue}, param not accepted).`
|
|
127
|
+
: `Omitted temperature=${config.temperature} (not supported for model/reasoning).`);
|
|
128
|
+
}
|
|
129
|
+
else {
|
|
130
|
+
out.temperature = config.temperature;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
const topP = coerceNumber(config.top_p) ?? coerceNumber(config.topP);
|
|
134
|
+
if (topP !== undefined) {
|
|
135
|
+
const res = allowConditional(rule.sampling.top_p, finalEffort);
|
|
136
|
+
if (!res.allowed || res.omit)
|
|
137
|
+
warnings.push(`Omitted top_p=${topP} (not supported for model/reasoning).`);
|
|
138
|
+
else
|
|
139
|
+
out.top_p = topP;
|
|
140
|
+
}
|
|
141
|
+
const freq = coerceNumber(config.frequency_penalty) ?? coerceNumber(config.frequencyPenalty);
|
|
142
|
+
const pres = coerceNumber(config.presence_penalty) ?? coerceNumber(config.presencePenalty);
|
|
143
|
+
if (freq !== undefined) {
|
|
144
|
+
if (rule.penalties.frequency)
|
|
145
|
+
out.frequency_penalty = freq;
|
|
146
|
+
else
|
|
147
|
+
warnings.push(`Dropped frequency_penalty=${freq} (not supported).`);
|
|
148
|
+
}
|
|
149
|
+
if (pres !== undefined) {
|
|
150
|
+
if (rule.penalties.presence)
|
|
151
|
+
out.presence_penalty = pres;
|
|
152
|
+
else
|
|
153
|
+
warnings.push(`Dropped presence_penalty=${pres} (not supported).`);
|
|
154
|
+
}
|
|
155
|
+
if (config.tools !== undefined)
|
|
156
|
+
out.tools = config.tools;
|
|
157
|
+
const blocked = new Set([
|
|
158
|
+
'model', 'messages',
|
|
159
|
+
'max_tokens', 'maxTokens', 'max_output_tokens', 'maxOutputTokens', 'max_completion_tokens',
|
|
160
|
+
'temperature',
|
|
161
|
+
'top_p', 'topP',
|
|
162
|
+
'frequency_penalty', 'frequencyPenalty',
|
|
163
|
+
'presence_penalty', 'presencePenalty',
|
|
164
|
+
'stop',
|
|
165
|
+
'tools',
|
|
166
|
+
'reasoning', 'reasoning_effort', 'reasoningEffort',
|
|
167
|
+
'provider'
|
|
168
|
+
]);
|
|
169
|
+
for (const [k, v] of Object.entries(config)) {
|
|
170
|
+
if (blocked.has(k))
|
|
171
|
+
continue;
|
|
172
|
+
out[k] = v;
|
|
173
|
+
}
|
|
174
|
+
return out;
|
|
175
|
+
}
|
|
176
|
+
function buildOpenAIPayloadFromChatStyle(api, model, messages) {
|
|
177
|
+
if (api === 'responses') {
|
|
178
|
+
const instructions = joinHuman(messages.filter(m => m.role === 'system').map(m => m.content));
|
|
179
|
+
const inputArr = [];
|
|
180
|
+
for (const m of messages) {
|
|
181
|
+
const c = trim(m.content);
|
|
182
|
+
if (!c)
|
|
183
|
+
continue;
|
|
184
|
+
if (m.role === 'system')
|
|
185
|
+
continue;
|
|
186
|
+
if (m.role === 'developer')
|
|
187
|
+
inputArr.push({ role: 'developer', content: c });
|
|
188
|
+
if (m.role === 'assistant')
|
|
189
|
+
inputArr.push({ role: 'assistant', content: c });
|
|
190
|
+
if (m.role === 'user')
|
|
191
|
+
inputArr.push({ role: 'user', content: c });
|
|
192
|
+
}
|
|
193
|
+
const onlyUser = inputArr.length === 1 && inputArr[0].role === 'user';
|
|
194
|
+
return {
|
|
195
|
+
model,
|
|
196
|
+
...(instructions ? { instructions } : {}),
|
|
197
|
+
input: onlyUser ? inputArr[0].content : inputArr,
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
const systemMerged = joinHuman([
|
|
201
|
+
...messages.filter(m => m.role === 'system').map(m => m.content),
|
|
202
|
+
...messages.filter(m => m.role === 'developer').map(m => m.content),
|
|
203
|
+
]);
|
|
204
|
+
const outMsgs = [];
|
|
205
|
+
if (systemMerged)
|
|
206
|
+
outMsgs.push({ role: 'system', content: systemMerged });
|
|
207
|
+
for (const m of messages) {
|
|
208
|
+
const c = trim(m.content);
|
|
209
|
+
if (!c)
|
|
210
|
+
continue;
|
|
211
|
+
if (m.role === 'user')
|
|
212
|
+
outMsgs.push({ role: 'user', content: c });
|
|
213
|
+
if (m.role === 'assistant')
|
|
214
|
+
outMsgs.push({ role: 'assistant', content: c });
|
|
215
|
+
}
|
|
216
|
+
return { model, messages: outMsgs };
|
|
217
|
+
}
|
|
218
|
+
function buildGenericChatPayload(model, messages) {
|
|
219
|
+
return {
|
|
220
|
+
model,
|
|
221
|
+
messages: messages.map(m => ({ role: m.role, content: trim(m.content) })).filter(m => m.content),
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
function transformChatStyleToVendorRequest(req, registry) {
|
|
225
|
+
const warnings = [];
|
|
226
|
+
const providerCaps = registry.providers[req.provider];
|
|
227
|
+
if (!providerCaps)
|
|
228
|
+
throw new Error(`No capabilities for provider "${req.provider}".`);
|
|
229
|
+
const { api, rule } = resolveRule(providerCaps, req.model, warnings);
|
|
230
|
+
let base;
|
|
231
|
+
if (req.provider === 'openai') {
|
|
232
|
+
base = buildOpenAIPayloadFromChatStyle(api, req.model, req.messages);
|
|
233
|
+
}
|
|
234
|
+
else {
|
|
235
|
+
base = buildGenericChatPayload(req.model, req.messages);
|
|
236
|
+
}
|
|
237
|
+
const configParams = adaptChatStyleConfigToApiParams(providerCaps, api, rule, req.model, req, warnings);
|
|
238
|
+
return {
|
|
239
|
+
provider: req.provider,
|
|
240
|
+
api,
|
|
241
|
+
payload: { ...base, ...configParams },
|
|
242
|
+
warnings,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=chat-style-transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chat-style-transformer.js","sourceRoot":"","sources":["../src/chat-style-transformer.ts"],"names":[],"mappings":";;AAmVA,8EAmCC;AAjTD,MAAM,gBAAgB,GAAG,uEAAuE,CAAC;AAEjG,SAAS,IAAI,CAAC,CAAU;IACtB,OAAO,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAChC,CAAC;AAED,SAAS,SAAS,CAAC,KAAe,EAAE,QAAQ,GAAG,gBAAgB;IAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACpC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAE,CAAC;IAC7C,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,YAAY,CAAC,CAAU;IAC9B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IAC1D,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IAC7F,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,qBAAqB,CAAC,GAA4B;IACzD,MAAM,MAAM,GACT,GAAG,CAAC,eAAuB;QAC3B,GAAG,CAAC,gBAAwB,CAAC;IAEhC,IAAI,MAAM;QAAE,OAAO,MAAyB,CAAC;IAE7C,MAAM,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IAChC,IAAI,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAI,SAAiB,CAAC,MAAM,CAAC;QACzC,IAAI,MAAM;YAAE,OAAO,MAAyB,CAAC;IAC/C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAkB,EAClB,eAA4C;IAE5C,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAEpE,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAE7D,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;IACrE,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI;QAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAEnE,MAAM,EAAE,GAAG,eAAe,KAAK,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC;IAC/D,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,WAAW,CAClB,YAAkC,EAClC,KAAa,EACb,QAAkB;IAElB,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAEzC,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,KAAK;QAAE,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAElD,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1C,IAAI,IAAI;QAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAE/C,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,YAAY,IAAI,EAAE,CAAC;IACxD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAC1B,OAAO,KAAK,CAAC,CAAC,WAAW;QACzB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC;QACvC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,GAAG,GAAG,CAAC,CACxC,CAAC;IAEF,IAAI,GAAG,EAAE,CAAC;QACR,QAAQ,CAAC,IAAI,CAAC,kBAAkB,KAAK,mCAAmC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACrF,OAAO;YACL,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,IAAI,EAAE;gBACJ,GAAG,EAAE,GAAG,CAAC,GAAG;gBACZ,eAAe,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;gBACrC,QAAQ,EAAE,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE;gBAC5E,SAAS,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE;gBAChD,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;aAC1B;SACF,CAAC;IACJ,CAAC;IAED,QAAQ,CAAC,IAAI,CAAC,kBAAkB,KAAK,yDAAyD,CAAC,CAAC;IAChG,OAAO;QACL,GAAG,EAAE,kBAAkB;QACvB,IAAI,EAAE;YACJ,GAAG,EAAE,kBAAkB;YACvB,eAAe,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;YACrC,QAAQ,EAAE,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;YAC1E,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;YAC9C,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE;SAC1B;KACF,CAAC;AACJ,CAAC;AAID,SAAS,+BAA+B,CACtC,YAAkC,EAClC,GAAW,EACX,IAAoB,EACpB,KAAa,EACb,GAAwC,EACxC,QAAkB;IAElB,MAAM,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC;IACzB,MAAM,GAAG,GAA4B,EAAE,CAAC;IAExC,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAG7C,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,CAAC;YACpC,QAAQ,CAAC,IAAI,CAAC,6BAA6B,MAAM,oBAAoB,CAAC,CAAC;QACzE,CAAC;aAAM,IAAI,IAAI,CAAC,eAAe,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1F,QAAQ,CAAC,IAAI,CAAC,6BAA6B,MAAM,kBAAkB,CAAC,CAAC;QACvE,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,SAAS,GAAG,EAAE,MAAM,EAAE,CAAC;YAC3B,GAAG,CAAC,gBAAgB,GAAG,MAAM,CAAC;QAChC,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAK,GAAG,CAAC,SAAiB,EAAE,MAAsC,IAAI,MAAM,CAAC;IAG9F,MAAM,YAAY,GAChB,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC;QAC/B,YAAY,CAAE,MAAc,CAAC,SAAS,CAAC;QACvC,YAAY,CAAE,MAAc,CAAC,iBAAiB,CAAC;QAC/C,YAAY,CAAE,MAAc,CAAC,eAAe,CAAC;QAC7C,YAAY,CAAE,MAAc,CAAC,qBAAqB,CAAC,CAAC;IAEtD,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC5D,IAAI,CAAC,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,uCAAuC,GAAG,yBAAyB,CAAC,CAAC;;YAC7F,GAAG,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC;IACpC,CAAC;IAGD,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;;YAC3C,QAAQ,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;IACtD,CAAC;IAGD,IAAI,MAAM,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACrE,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC7B,QAAQ,CAAC,IAAI,CACX,GAAG,CAAC,UAAU,KAAK,SAAS;gBAC1B,CAAC,CAAC,uBAAuB,MAAM,CAAC,WAAW,mBAAmB,GAAG,CAAC,UAAU,wBAAwB;gBACpG,CAAC,CAAC,uBAAuB,MAAM,CAAC,WAAW,uCAAuC,CACrF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACvC,CAAC;IACH,CAAC;IAGD,MAAM,IAAI,GAAG,YAAY,CAAE,MAAc,CAAC,KAAK,CAAC,IAAI,YAAY,CAAE,MAAc,CAAC,IAAI,CAAC,CAAC;IACvF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC/D,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI;YAAE,QAAQ,CAAC,IAAI,CAAC,iBAAiB,IAAI,uCAAuC,CAAC,CAAC;;YACrG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;IACxB,CAAC;IAGD,MAAM,IAAI,GAAG,YAAY,CAAE,MAAc,CAAC,iBAAiB,CAAC,IAAI,YAAY,CAAE,MAAc,CAAC,gBAAgB,CAAC,CAAC;IAC/G,MAAM,IAAI,GAAG,YAAY,CAAE,MAAc,CAAC,gBAAgB,CAAC,IAAI,YAAY,CAAE,MAAc,CAAC,eAAe,CAAC,CAAC;IAE7G,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS;YAAE,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC;;YACtD,QAAQ,CAAC,IAAI,CAAC,6BAA6B,IAAI,mBAAmB,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ;YAAE,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC;;YACpD,QAAQ,CAAC,IAAI,CAAC,4BAA4B,IAAI,mBAAmB,CAAC,CAAC;IAC1E,CAAC;IAGD,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;QAAE,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IAGzD,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC;QACtB,OAAO,EAAE,UAAU;QACnB,YAAY,EAAE,WAAW,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,uBAAuB;QAC1F,aAAa;QACb,OAAO,EAAE,MAAM;QACf,mBAAmB,EAAE,kBAAkB;QACvC,kBAAkB,EAAE,iBAAiB;QACrC,MAAM;QACN,OAAO;QACP,WAAW,EAAE,kBAAkB,EAAE,iBAAiB;QAClD,UAAU;KACX,CAAC,CAAC;IAEH,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC5C,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,SAAS;QAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IACb,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAID,SAAS,+BAA+B,CACtC,GAAkB,EAClB,KAAa,EACb,QAA8B;IAE9B,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;QACxB,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAE9F,MAAM,QAAQ,GAAyE,EAAE,CAAC;QAC1F,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAC1B,IAAI,CAAC,CAAC;gBAAE,SAAS;YACjB,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;gBAAE,SAAS;YAClC,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;gBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7E,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;gBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7E,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;gBAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,MAAM,CAAC;QAEvE,OAAO;YACL,KAAK;YACL,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;SAClD,CAAC;IACJ,CAAC;IAID,MAAM,YAAY,GAAG,SAAS,CAAC;QAC7B,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAChE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;KACpE,CAAC,CAAC;IAEH,MAAM,OAAO,GAAsE,EAAE,CAAC;IACtF,IAAI,YAAY;QAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;IAE1E,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC1B,IAAI,CAAC,CAAC;YAAE,SAAS;QACjB,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAa,EAAE,QAA8B;IAE5E,OAAO;QACL,KAAK;QACL,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;KACjG,CAAC;AACJ,CAAC;AAID,SAAgB,iCAAiC,CAC/C,GAAuB,EACvB,QAA8B;IAE9B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,MAAM,YAAY,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACtD,IAAI,CAAC,YAAY;QAAE,MAAM,IAAI,KAAK,CAAC,iCAAiC,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC;IAEtF,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,YAAY,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAGrE,IAAI,IAA6B,CAAC;IAClC,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC9B,IAAI,GAAG,+BAA+B,CAAC,GAAoB,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxF,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,uBAAuB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAGD,MAAM,YAAY,GAAG,+BAA+B,CAClD,YAAY,EACZ,GAAG,EACH,IAAI,EACJ,GAAG,CAAC,KAAK,EACT,GAAU,EACV,QAAQ,CACT,CAAC;IAEF,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,GAAG;QACH,OAAO,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,YAAY,EAAE;QACrC,QAAQ;KACT,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
export type { ProviderId, ChatRole, UnifiedChatMessage, UnifiedChatRequest, BuiltVendorRequest, ReasoningEffort, CapabilitiesRegistry, ProviderCapabilities, CapabilityRule, SamplingRule, } from './chat-style-transformer';
|
|
2
|
+
export { transformChatStyleToVendorRequest } from './chat-style-transformer';
|
|
3
|
+
export { capabilities } from './capabilities';
|
|
1
4
|
export interface AIRequest {
|
|
2
5
|
messages: Array<{
|
|
3
6
|
role: 'user' | 'assistant' | 'system';
|
|
@@ -22,16 +25,21 @@ export interface AIProvider {
|
|
|
22
25
|
name: string;
|
|
23
26
|
sendRequest(request: AIRequest): Promise<AIResponse>;
|
|
24
27
|
}
|
|
28
|
+
import type { UnifiedChatRequest, CapabilitiesRegistry } from './chat-style-transformer';
|
|
25
29
|
export declare class AIRequestsAdapter {
|
|
26
|
-
private
|
|
30
|
+
private registry;
|
|
27
31
|
private defaultProvider?;
|
|
32
|
+
constructor(registry?: CapabilitiesRegistry);
|
|
33
|
+
transformRequest(request: UnifiedChatRequest): import("./chat-style-transformer").BuiltVendorRequest;
|
|
34
|
+
getProviders(): string[];
|
|
35
|
+
setDefaultProvider(provider: string): void;
|
|
36
|
+
getDefaultProvider(): string | undefined;
|
|
37
|
+
private providers;
|
|
28
38
|
registerProvider(name: string, provider: AIProvider, setAsDefault?: boolean): void;
|
|
29
39
|
sendRequest(request: AIRequest): Promise<AIResponse>;
|
|
30
40
|
sendRequestWithProvider(providerName: string, request: AIRequest): Promise<AIResponse>;
|
|
31
|
-
getProviders(): string[];
|
|
32
|
-
setDefaultProvider(name: string): void;
|
|
33
|
-
getDefaultProvider(): string | undefined;
|
|
34
41
|
}
|
|
35
42
|
export default AIRequestsAdapter;
|
|
36
|
-
export declare function createAIAdapter(): AIRequestsAdapter;
|
|
43
|
+
export declare function createAIAdapter(registry?: CapabilitiesRegistry): AIRequestsAdapter;
|
|
44
|
+
export declare function transformToVendorRequest(request: UnifiedChatRequest, registry?: CapabilitiesRegistry): import("./chat-style-transformer").BuiltVendorRequest;
|
|
37
45
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,UAAU,EACV,QAAQ,EACR,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,YAAY,GACb,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EAAE,iCAAiC,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;QACtC,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;CACtD;AAED,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAIzF,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,eAAe,CAAC,CAAS;gBAErB,QAAQ,GAAE,oBAAmC;IAOzD,gBAAgB,CAAC,OAAO,EAAE,kBAAkB;IAO5C,YAAY,IAAI,MAAM,EAAE;IAOxB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAU1C,kBAAkB,IAAI,MAAM,GAAG,SAAS;IAKxC,OAAO,CAAC,SAAS,CAAsC;IAKvD,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,UAAQ,GAAG,IAAI;IAU1E,WAAW,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IAUpD,uBAAuB,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;CAO7F;AAGD,eAAe,iBAAiB,CAAC;AAGjC,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,oBAAoB,GAAG,iBAAiB,CAElF;AAGD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,CAAC,EAAE,oBAAoB,yDAEpG"}
|
package/dist/index.js
CHANGED
|
@@ -1,10 +1,33 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AIRequestsAdapter = void 0;
|
|
3
|
+
exports.AIRequestsAdapter = exports.capabilities = exports.transformChatStyleToVendorRequest = void 0;
|
|
4
4
|
exports.createAIAdapter = createAIAdapter;
|
|
5
|
+
exports.transformToVendorRequest = transformToVendorRequest;
|
|
6
|
+
var chat_style_transformer_1 = require("./chat-style-transformer");
|
|
7
|
+
Object.defineProperty(exports, "transformChatStyleToVendorRequest", { enumerable: true, get: function () { return chat_style_transformer_1.transformChatStyleToVendorRequest; } });
|
|
8
|
+
var capabilities_1 = require("./capabilities");
|
|
9
|
+
Object.defineProperty(exports, "capabilities", { enumerable: true, get: function () { return capabilities_1.capabilities; } });
|
|
10
|
+
const chat_style_transformer_2 = require("./chat-style-transformer");
|
|
11
|
+
const capabilities_2 = require("./capabilities");
|
|
5
12
|
class AIRequestsAdapter {
|
|
6
|
-
constructor() {
|
|
13
|
+
constructor(registry = capabilities_2.capabilities) {
|
|
7
14
|
this.providers = new Map();
|
|
15
|
+
this.registry = registry;
|
|
16
|
+
}
|
|
17
|
+
transformRequest(request) {
|
|
18
|
+
return (0, chat_style_transformer_2.transformChatStyleToVendorRequest)(request, this.registry);
|
|
19
|
+
}
|
|
20
|
+
getProviders() {
|
|
21
|
+
return Object.keys(this.registry.providers);
|
|
22
|
+
}
|
|
23
|
+
setDefaultProvider(provider) {
|
|
24
|
+
if (!Object.keys(this.registry.providers).includes(provider)) {
|
|
25
|
+
throw new Error(`Provider '${provider}' not found in capabilities registry.`);
|
|
26
|
+
}
|
|
27
|
+
this.defaultProvider = provider;
|
|
28
|
+
}
|
|
29
|
+
getDefaultProvider() {
|
|
30
|
+
return this.defaultProvider;
|
|
8
31
|
}
|
|
9
32
|
registerProvider(name, provider, setAsDefault = false) {
|
|
10
33
|
this.providers.set(name, provider);
|
|
@@ -25,22 +48,13 @@ class AIRequestsAdapter {
|
|
|
25
48
|
}
|
|
26
49
|
return provider.sendRequest(request);
|
|
27
50
|
}
|
|
28
|
-
getProviders() {
|
|
29
|
-
return Array.from(this.providers.keys());
|
|
30
|
-
}
|
|
31
|
-
setDefaultProvider(name) {
|
|
32
|
-
if (!this.providers.has(name)) {
|
|
33
|
-
throw new Error(`Provider '${name}' not found.`);
|
|
34
|
-
}
|
|
35
|
-
this.defaultProvider = name;
|
|
36
|
-
}
|
|
37
|
-
getDefaultProvider() {
|
|
38
|
-
return this.defaultProvider;
|
|
39
|
-
}
|
|
40
51
|
}
|
|
41
52
|
exports.AIRequestsAdapter = AIRequestsAdapter;
|
|
42
53
|
exports.default = AIRequestsAdapter;
|
|
43
|
-
function createAIAdapter() {
|
|
44
|
-
return new AIRequestsAdapter();
|
|
54
|
+
function createAIAdapter(registry) {
|
|
55
|
+
return new AIRequestsAdapter(registry);
|
|
56
|
+
}
|
|
57
|
+
function transformToVendorRequest(request, registry) {
|
|
58
|
+
return (0, chat_style_transformer_2.transformChatStyleToVendorRequest)(request, registry || capabilities_2.capabilities);
|
|
45
59
|
}
|
|
46
60
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAiIA,0CAEC;AAGD,4DAEC;AAxHD,mEAA6E;AAApE,2IAAA,iCAAiC,OAAA;AAC1C,+CAA8C;AAArC,4GAAA,YAAY,OAAA;AA+BrB,qEAA6E;AAC7E,iDAA8C;AAE9C,MAAa,iBAAiB;IAI5B,YAAY,WAAiC,2BAAY;QAoCjD,cAAS,GAA4B,IAAI,GAAG,EAAE,CAAC;QAnCrD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IAKD,gBAAgB,CAAC,OAA2B;QAC1C,OAAO,IAAA,0DAAiC,EAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnE,CAAC;IAKD,YAAY;QACV,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;IAKD,kBAAkB,CAAC,QAAgB;QACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7D,MAAM,IAAI,KAAK,CAAC,aAAa,QAAQ,uCAAuC,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC;IAClC,CAAC;IAKD,kBAAkB;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAQD,gBAAgB,CAAC,IAAY,EAAE,QAAoB,EAAE,YAAY,GAAG,KAAK;QACvE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACnC,IAAI,YAAY,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;IAKD,KAAK,CAAC,WAAW,CAAC,OAAkB;QAClC,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;IAKD,KAAK,CAAC,uBAAuB,CAAC,YAAoB,EAAE,OAAkB;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,aAAa,YAAY,qCAAqC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChI,CAAC;QACD,OAAO,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;CACF;AAxED,8CAwEC;AAGD,kBAAe,iBAAiB,CAAC;AAGjC,SAAgB,eAAe,CAAC,QAA+B;IAC7D,OAAO,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC;AAGD,SAAgB,wBAAwB,CAAC,OAA2B,EAAE,QAA+B;IACnG,OAAO,IAAA,0DAAiC,EAAC,OAAO,EAAE,QAAQ,IAAI,2BAAY,CAAC,CAAC;AAC9E,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai-requests-adapter",
|
|
3
|
-
"version": "1.0
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "A flexible adapter SDK for handling AI API requests across multiple providers",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -32,10 +32,10 @@
|
|
|
32
32
|
},
|
|
33
33
|
"repository": {
|
|
34
34
|
"type": "git",
|
|
35
|
-
"url": "git+https://github.com/
|
|
35
|
+
"url": "git+https://github.com/nx-intelligence/ai-requests-adapter.git"
|
|
36
36
|
},
|
|
37
37
|
"bugs": {
|
|
38
|
-
"url": "https://github.com/
|
|
38
|
+
"url": "https://github.com/nx-intelligence/ai-requests-adapter/issues"
|
|
39
39
|
},
|
|
40
|
-
"homepage": "https://github.com/
|
|
40
|
+
"homepage": "https://github.com/nx-intelligence/ai-requests-adapter#readme"
|
|
41
41
|
}
|