ai-requests-adapter 1.0.0 → 2.0.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  # AI Requests Adapter
2
2
 
3
- A flexible and extensible SDK for handling AI API requests across multiple providers. This adapter provides a unified interface for interacting with different AI services, making it easy to switch between providers or use multiple providers in the same application.
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 { AIRequestsAdapter, createAIAdapter } from 'ai-requests-adapter';
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
- // Send a request
23
- const response = await adapter.sendRequest({
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
- model: 'gpt-3.5-turbo',
28
- temperature: 0.7
24
+ max_tokens: 200,
25
+ reasoning: { effort: 'medium' },
26
+ temperature: 0.2
29
27
  });
30
28
 
31
- console.log(response.content);
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
- ### AIRequestsAdapter
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
- The main class for managing AI providers and sending requests.
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
- #### Methods
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
- - `registerProvider(name: string, provider: AIProvider, setAsDefault?: boolean)`: Register an AI provider
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
- ### Interfaces
77
+ #### `UnifiedChatRequest`
50
78
 
51
- #### AIRequest
79
+ The single input format your gateway accepts:
52
80
 
53
81
  ```typescript
54
- interface AIRequest {
82
+ type UnifiedChatRequest = {
83
+ provider: 'openai' | 'anthropic' | 'google' | 'xai';
84
+ model: string;
55
85
  messages: Array<{
56
- role: 'user' | 'assistant' | 'system';
86
+ role: 'system' | 'developer' | 'user' | 'assistant';
57
87
  content: string;
58
88
  }>;
59
- model?: string;
89
+
90
+ // Chat-style config (snake_case primary, camelCase accepted):
60
91
  temperature?: number;
61
- maxTokens?: number;
62
- [key: string]: any; // Allow additional provider-specific options
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
- #### AIResponse
108
+ ### OpenAI Examples
109
+
110
+ #### GPT-5.2 with Responses API
67
111
 
68
112
  ```typescript
69
- interface AIResponse {
70
- content: string;
71
- model: string;
72
- usage?: {
73
- promptTokens?: number;
74
- completionTokens?: number;
75
- totalTokens?: number;
76
- };
77
- metadata?: Record<string, any>;
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
- #### AIProvider
140
+ #### GPT-4-Turbo with Chat Completions API
82
141
 
83
142
  ```typescript
84
- interface AIProvider {
85
- name: string;
86
- sendRequest(request: AIRequest): Promise<AIResponse>;
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
- ## Implementing a Provider
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
- To integrate with a specific AI provider, implement the `AIProvider` interface:
175
+ ### Built-in Registry
93
176
 
94
177
  ```typescript
95
- import { AIProvider, AIRequest, AIResponse } from 'ai-requests-adapter';
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
- // Register the provider
131
- const adapter = createAIAdapter();
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
- ## Advanced Usage
136
-
137
- ### Multiple Providers
184
+ ### Custom Registry
138
185
 
139
186
  ```typescript
140
- const adapter = createAIAdapter();
141
-
142
- // Register multiple providers
143
- adapter.registerProvider('openai', openAIProvider);
144
- adapter.registerProvider('anthropic', anthropicProvider, true); // Set as default
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
- // Use specific provider
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
- ### Switching Providers Dynamically
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.registerProvider('anthropic', anthropicProvider);
225
+ const response = await adapter.sendRequest(request);
226
+ ```
157
227
 
158
- // Switch default provider
159
- adapter.setDefaultProvider('anthropic');
228
+ ## Integration Example
160
229
 
161
- // All subsequent requests use anthropic
162
- const response = await adapter.sendRequest(request);
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! Please feel free to submit a Pull Request.
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,3 @@
1
+ import type { CapabilitiesRegistry } from './chat-style-transformer';
2
+ export declare const capabilities: CapabilitiesRegistry;
3
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -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":"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"}
@@ -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":"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"}
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 providers;
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,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,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,eAAe,CAAC,CAAS;IAKjC,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;IAW5F,YAAY,IAAI,MAAM,EAAE;IAOxB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAUtC,kBAAkB,IAAI,MAAM,GAAG,SAAS;CAGzC;AAGD,eAAe,iBAAiB,CAAC;AAGjC,wBAAgB,eAAe,IAAI,iBAAiB,CAEnD"}
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":";;;AA2FA,0CAEC;AAlED,MAAa,iBAAiB;IAA9B;QACU,cAAS,GAA4B,IAAI,GAAG,EAAE,CAAC;IAyDzD,CAAC;IAnDC,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;IAKD,YAAY;QACV,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAKD,kBAAkB,CAAC,IAAY;QAC7B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,cAAc,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;IAC9B,CAAC;IAKD,kBAAkB;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;CACF;AA1DD,8CA0DC;AAGD,kBAAe,iBAAiB,CAAC;AAGjC,SAAgB,eAAe;IAC7B,OAAO,IAAI,iBAAiB,EAAE,CAAC;AACjC,CAAC"}
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.0",
3
+ "version": "2.0.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/yourusername/ai-requests-adapter.git"
35
+ "url": "git+https://github.com/nx-intelligence/ai-requests-adapter.git"
36
36
  },
37
37
  "bugs": {
38
- "url": "https://github.com/yourusername/ai-requests-adapter/issues"
38
+ "url": "https://github.com/nx-intelligence/ai-requests-adapter/issues"
39
39
  },
40
- "homepage": "https://github.com/yourusername/ai-requests-adapter#readme"
40
+ "homepage": "https://github.com/nx-intelligence/ai-requests-adapter#readme"
41
41
  }