ai-requests-adapter 1.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 ADDED
@@ -0,0 +1,171 @@
1
+ # AI Requests Adapter
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.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install ai-requests-adapter
9
+ ```
10
+
11
+ ## Quick Start
12
+
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);
21
+
22
+ // Send a request
23
+ const response = await adapter.sendRequest({
24
+ messages: [
25
+ { role: 'user', content: 'Hello, how are you?' }
26
+ ],
27
+ model: 'gpt-3.5-turbo',
28
+ temperature: 0.7
29
+ });
30
+
31
+ console.log(response.content);
32
+ ```
33
+
34
+ ## API Reference
35
+
36
+ ### AIRequestsAdapter
37
+
38
+ The main class for managing AI providers and sending requests.
39
+
40
+ #### Methods
41
+
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
48
+
49
+ ### Interfaces
50
+
51
+ #### AIRequest
52
+
53
+ ```typescript
54
+ interface AIRequest {
55
+ messages: Array<{
56
+ role: 'user' | 'assistant' | 'system';
57
+ content: string;
58
+ }>;
59
+ model?: string;
60
+ temperature?: number;
61
+ maxTokens?: number;
62
+ [key: string]: any; // Allow additional provider-specific options
63
+ }
64
+ ```
65
+
66
+ #### AIResponse
67
+
68
+ ```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>;
78
+ }
79
+ ```
80
+
81
+ #### AIProvider
82
+
83
+ ```typescript
84
+ interface AIProvider {
85
+ name: string;
86
+ sendRequest(request: AIRequest): Promise<AIResponse>;
87
+ }
88
+ ```
89
+
90
+ ## Implementing a Provider
91
+
92
+ To integrate with a specific AI provider, implement the `AIProvider` interface:
93
+
94
+ ```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
+ }
129
+
130
+ // Register the provider
131
+ const adapter = createAIAdapter();
132
+ adapter.registerProvider('openai', new OpenAIProvider());
133
+ ```
134
+
135
+ ## Advanced Usage
136
+
137
+ ### Multiple Providers
138
+
139
+ ```typescript
140
+ const adapter = createAIAdapter();
141
+
142
+ // Register multiple providers
143
+ adapter.registerProvider('openai', openAIProvider);
144
+ adapter.registerProvider('anthropic', anthropicProvider, true); // Set as default
145
+
146
+ // Use specific provider
147
+ const openAIResponse = await adapter.sendRequestWithProvider('openai', request);
148
+ const anthropicResponse = await adapter.sendRequest(request); // Uses default (anthropic)
149
+ ```
150
+
151
+ ### Switching Providers Dynamically
152
+
153
+ ```typescript
154
+ const adapter = createAIAdapter();
155
+ adapter.registerProvider('openai', openAIProvider);
156
+ adapter.registerProvider('anthropic', anthropicProvider);
157
+
158
+ // Switch default provider
159
+ adapter.setDefaultProvider('anthropic');
160
+
161
+ // All subsequent requests use anthropic
162
+ const response = await adapter.sendRequest(request);
163
+ ```
164
+
165
+ ## Contributing
166
+
167
+ Contributions are welcome! Please feel free to submit a Pull Request.
168
+
169
+ ## License
170
+
171
+ MIT
@@ -0,0 +1,37 @@
1
+ export interface AIRequest {
2
+ messages: Array<{
3
+ role: 'user' | 'assistant' | 'system';
4
+ content: string;
5
+ }>;
6
+ model?: string;
7
+ temperature?: number;
8
+ maxTokens?: number;
9
+ [key: string]: any;
10
+ }
11
+ export interface AIResponse {
12
+ content: string;
13
+ model: string;
14
+ usage?: {
15
+ promptTokens?: number;
16
+ completionTokens?: number;
17
+ totalTokens?: number;
18
+ };
19
+ metadata?: Record<string, any>;
20
+ }
21
+ export interface AIProvider {
22
+ name: string;
23
+ sendRequest(request: AIRequest): Promise<AIResponse>;
24
+ }
25
+ export declare class AIRequestsAdapter {
26
+ private providers;
27
+ private defaultProvider?;
28
+ registerProvider(name: string, provider: AIProvider, setAsDefault?: boolean): void;
29
+ sendRequest(request: AIRequest): Promise<AIResponse>;
30
+ sendRequestWithProvider(providerName: string, request: AIRequest): Promise<AIResponse>;
31
+ getProviders(): string[];
32
+ setDefaultProvider(name: string): void;
33
+ getDefaultProvider(): string | undefined;
34
+ }
35
+ export default AIRequestsAdapter;
36
+ export declare function createAIAdapter(): AIRequestsAdapter;
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
package/dist/index.js ADDED
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AIRequestsAdapter = void 0;
4
+ exports.createAIAdapter = createAIAdapter;
5
+ class AIRequestsAdapter {
6
+ constructor() {
7
+ this.providers = new Map();
8
+ }
9
+ registerProvider(name, provider, setAsDefault = false) {
10
+ this.providers.set(name, provider);
11
+ if (setAsDefault || !this.defaultProvider) {
12
+ this.defaultProvider = name;
13
+ }
14
+ }
15
+ async sendRequest(request) {
16
+ if (!this.defaultProvider) {
17
+ throw new Error('No default provider set. Register a provider first.');
18
+ }
19
+ return this.sendRequestWithProvider(this.defaultProvider, request);
20
+ }
21
+ async sendRequestWithProvider(providerName, request) {
22
+ const provider = this.providers.get(providerName);
23
+ if (!provider) {
24
+ throw new Error(`Provider '${providerName}' not found. Available providers: ${Array.from(this.providers.keys()).join(', ')}`);
25
+ }
26
+ return provider.sendRequest(request);
27
+ }
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
+ }
41
+ exports.AIRequestsAdapter = AIRequestsAdapter;
42
+ exports.default = AIRequestsAdapter;
43
+ function createAIAdapter() {
44
+ return new AIRequestsAdapter();
45
+ }
46
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "ai-requests-adapter",
3
+ "version": "1.0.0",
4
+ "description": "A flexible adapter SDK for handling AI API requests across multiple providers",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "prepublishOnly": "npm run build",
13
+ "test": "echo \"Error: no test specified\" && exit 1"
14
+ },
15
+ "keywords": [
16
+ "ai",
17
+ "api",
18
+ "adapter",
19
+ "requests",
20
+ "openai",
21
+ "anthropic",
22
+ "sdk"
23
+ ],
24
+ "author": "Your Name",
25
+ "license": "MIT",
26
+ "devDependencies": {
27
+ "typescript": "^5.0.0",
28
+ "@types/node": "^20.0.0"
29
+ },
30
+ "engines": {
31
+ "node": ">=14.0.0"
32
+ },
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "git+https://github.com/yourusername/ai-requests-adapter.git"
36
+ },
37
+ "bugs": {
38
+ "url": "https://github.com/yourusername/ai-requests-adapter/issues"
39
+ },
40
+ "homepage": "https://github.com/yourusername/ai-requests-adapter#readme"
41
+ }