@mate-academy/llm-gateway 1.0.3 → 1.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 +377 -0
- package/dist/LLMService.constants.js +1 -16
- package/dist/LLMService.entity.js +1 -38
- package/dist/LLMService.factory.js +1 -71
- package/dist/LLMService.typedefs.js +1 -36
- package/dist/functional.utils.js +1 -9
- package/dist/index.js +1 -23
- package/dist/providers/GoogleGenerativeAI/GoogleGenerativeAI.constants.js +1 -99
- package/dist/providers/GoogleGenerativeAI/GoogleGenerativeAI.constants.js.map +1 -1
- package/dist/providers/GoogleGenerativeAI/GoogleGenerativeAI.entity.js +1 -42
- package/dist/providers/GoogleGenerativeAI/GoogleGenerativeAI.typedefs.js +1 -19
- package/dist/providers/GoogleGenerativeAI/GoogleGenerativeAIService.factory.js +1 -17
- package/dist/providers/GoogleGenerativeAI/GoogleGenerativeAIService.factory.js.map +1 -1
- package/dist/providers/GoogleGenerativeAI/index.js +1 -22
- package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAIAssistance.service.js +1 -211
- package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAIAssistance.service.js.map +1 -1
- package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAICompletion.service.js +1 -50
- package/dist/providers/GoogleGenerativeAI/services/GoogleGenerativeAICompletion.service.js.map +1 -1
- package/dist/providers/GoogleGenerativeAI/services/index.js +1 -19
- package/dist/providers/OpenAI/OpenAI.constants.js +1 -44
- package/dist/providers/OpenAI/OpenAI.constants.js.map +1 -1
- package/dist/providers/OpenAI/OpenAI.entity.js +1 -15
- package/dist/providers/OpenAI/OpenAI.typedefs.js +1 -14
- package/dist/providers/OpenAI/OpenAIService.factory.js +1 -17
- package/dist/providers/OpenAI/OpenAIService.factory.js.map +1 -1
- package/dist/providers/OpenAI/index.js +1 -22
- package/dist/providers/OpenAI/services/OpenAIAssistance.service.js +1 -200
- package/dist/providers/OpenAI/services/OpenAIAssistance.service.js.map +1 -1
- package/dist/providers/OpenAI/services/OpenAICompletion.service.js +1 -52
- package/dist/providers/OpenAI/services/OpenAICompletion.service.js.map +1 -1
- package/dist/providers/OpenAI/services/index.js +1 -19
- package/dist/providers/index.js +1 -19
- package/dist/services/LLMAssistanceService.abstract.js +1 -12
- package/dist/services/LLMAssistanceService.abstract.js.map +1 -1
- package/dist/services/LLMBaseService.abstract.js +1 -27
- package/dist/services/LLMBaseService.abstract.js.map +1 -1
- package/dist/services/LLMCompletionService.abstract.js +1 -12
- package/dist/services/LLMCompletionService.abstract.js.map +1 -1
- package/dist/services/LLMServicePurposeFactory.abstract.js +1 -7
- package/dist/services/index.js +1 -21
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -173,6 +173,383 @@ Supports both completion and assistance APIs. For more information, see [OpenAI
|
|
|
173
173
|
|
|
174
174
|
Supports completion API through Google's Generative AI models. For more information, see [Google Generative AI documentation](https://ai.google.dev/docs).
|
|
175
175
|
|
|
176
|
+
## Developer Guide: Adding a New Provider
|
|
177
|
+
|
|
178
|
+
To add support for a new LLM provider, follow these steps:
|
|
179
|
+
|
|
180
|
+
### 1. Create Provider Directory Structure
|
|
181
|
+
|
|
182
|
+
Create a new directory in `src/providers` with your provider name, following the established pattern:
|
|
183
|
+
|
|
184
|
+
```
|
|
185
|
+
src/providers/YourProvider/
|
|
186
|
+
├── index.ts # Entry point for provider exports
|
|
187
|
+
├── YourProvider.constants.ts # Provider-specific constants
|
|
188
|
+
├── YourProvider.entity.ts # Provider-specific entity
|
|
189
|
+
├── YourProvider.typedefs.ts # TypeScript definitions
|
|
190
|
+
├── YourProviderService.factory.ts # Factory for your provider's services
|
|
191
|
+
└── services/ # Provider service implementations
|
|
192
|
+
├── index.ts
|
|
193
|
+
├── YourProviderCompletionService.ts
|
|
194
|
+
└── YourProviderAssistanceService.ts
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
### 2. Add Provider to LLM Providers Enum
|
|
198
|
+
|
|
199
|
+
Update the LLM providers enum in `src/LLMService.typedefs.ts`:
|
|
200
|
+
|
|
201
|
+
```typescript
|
|
202
|
+
export enum LLMProviders {
|
|
203
|
+
OpenAI = 'openai',
|
|
204
|
+
GoogleGenerativeAI = 'google',
|
|
205
|
+
YourProvider = 'your-provider-id',
|
|
206
|
+
}
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### 3. Define Provider-Specific Types
|
|
210
|
+
|
|
211
|
+
Create type definitions in `src/providers/YourProvider/YourProvider.typedefs.ts`:
|
|
212
|
+
|
|
213
|
+
```typescript
|
|
214
|
+
// Define model names as an enum for type safety
|
|
215
|
+
export enum YourProviderModelNames {
|
|
216
|
+
MODEL_ONE = 'model-one',
|
|
217
|
+
MODEL_TWO = 'model-extended',
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Define message roles if applicable
|
|
221
|
+
export enum YourProviderRoles {
|
|
222
|
+
User = 'user',
|
|
223
|
+
Assistant = 'assistant',
|
|
224
|
+
System = 'system',
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// Add any other provider-specific enums or interfaces
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Then ensure your provider is properly integrated in the main type system by updating the necessary type mappings in `src/LLMService.typedefs.ts`:
|
|
231
|
+
|
|
232
|
+
```typescript
|
|
233
|
+
// Add import for your provider's types
|
|
234
|
+
import { type YourProviderModelNames } from './providers/YourProvider/YourProvider.typedefs';
|
|
235
|
+
|
|
236
|
+
// Update the LLMProviders enum
|
|
237
|
+
export enum LLMProviders {
|
|
238
|
+
OpenAI = 'OpenAI',
|
|
239
|
+
GoogleGenerativeAI = 'GoogleGenerativeAI',
|
|
240
|
+
YourProvider = 'YourProvider',
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// Update LLMInstances type mapping
|
|
244
|
+
export type LLMInstances = {
|
|
245
|
+
// ...existing code...
|
|
246
|
+
[LLMProviders.YourProvider]: YourProviderClient; // Your provider's client type
|
|
247
|
+
};
|
|
248
|
+
|
|
249
|
+
// Update LLMInstanceOptions type mapping
|
|
250
|
+
export type LLMInstanceOptions = {
|
|
251
|
+
// ...existing code...
|
|
252
|
+
[LLMProviders.YourProvider]: {
|
|
253
|
+
apiKey: string;
|
|
254
|
+
// Add other provider-specific options
|
|
255
|
+
};
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
// Update LLMModelName type mapping
|
|
259
|
+
export type LLMModelName = {
|
|
260
|
+
// ...existing code...
|
|
261
|
+
[LLMProviders.YourProvider]: YourProviderModelNames;
|
|
262
|
+
};
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### 4. Implement Provider Constants
|
|
266
|
+
|
|
267
|
+
Define constants in `src/providers/YourProvider/YourProvider.constants.ts`:
|
|
268
|
+
|
|
269
|
+
```typescript
|
|
270
|
+
import {
|
|
271
|
+
type LLMProviderAvailableModels,
|
|
272
|
+
type LLMProviderModelsByPurpose,
|
|
273
|
+
type LLMProviders,
|
|
274
|
+
LLMPurposes,
|
|
275
|
+
type LLMServiceBuilder,
|
|
276
|
+
} from '../../LLMService.typedefs';
|
|
277
|
+
import { YourProviderModelNames } from './YourProvider.typedefs';
|
|
278
|
+
import {
|
|
279
|
+
YourProviderAssistanceService,
|
|
280
|
+
YourProviderCompletionService,
|
|
281
|
+
} from './services';
|
|
282
|
+
import { pick } from '../../functional.utils';
|
|
283
|
+
|
|
284
|
+
// Define available models with their capabilities and configurations
|
|
285
|
+
const YOUR_PROVIDER_AVAILABLE_MODELS: LLMProviderAvailableModels<
|
|
286
|
+
LLMProviders.YourProvider
|
|
287
|
+
> = {
|
|
288
|
+
[YourProviderModelNames.MODEL_ONE]: {
|
|
289
|
+
name: YourProviderModelNames.MODEL_ONE,
|
|
290
|
+
limits: {
|
|
291
|
+
maxInputTokens: 8_000,
|
|
292
|
+
maxOutputTokens: 2_000,
|
|
293
|
+
},
|
|
294
|
+
config: {
|
|
295
|
+
temperature: 0.2,
|
|
296
|
+
},
|
|
297
|
+
},
|
|
298
|
+
[YourProviderModelNames.MODEL_TWO]: {
|
|
299
|
+
name: YourProviderModelNames.MODEL_TWO,
|
|
300
|
+
limits: {
|
|
301
|
+
maxInputTokens: 16_000,
|
|
302
|
+
maxOutputTokens: 4_000,
|
|
303
|
+
},
|
|
304
|
+
config: {
|
|
305
|
+
temperature: 0.2,
|
|
306
|
+
},
|
|
307
|
+
},
|
|
308
|
+
};
|
|
309
|
+
|
|
310
|
+
// Specify which models are available for each purpose
|
|
311
|
+
export const YOUR_PROVIDER_MODELS: LLMProviderModelsByPurpose<
|
|
312
|
+
LLMPurposes,
|
|
313
|
+
LLMProviders.YourProvider
|
|
314
|
+
> = {
|
|
315
|
+
[LLMPurposes.Completion]: pick(
|
|
316
|
+
YOUR_PROVIDER_AVAILABLE_MODELS,
|
|
317
|
+
[
|
|
318
|
+
YourProviderModelNames.MODEL_ONE,
|
|
319
|
+
YourProviderModelNames.MODEL_TWO,
|
|
320
|
+
],
|
|
321
|
+
),
|
|
322
|
+
[LLMPurposes.Assistance]: pick(
|
|
323
|
+
YOUR_PROVIDER_AVAILABLE_MODELS,
|
|
324
|
+
[
|
|
325
|
+
YourProviderModelNames.MODEL_TWO, // Only MODEL_TWO supports assistance
|
|
326
|
+
],
|
|
327
|
+
),
|
|
328
|
+
};
|
|
329
|
+
|
|
330
|
+
// Define service builders for each LLM purpose
|
|
331
|
+
export const YOUR_PROVIDER_SERVICE_BUILDERS: {
|
|
332
|
+
[purpose in LLMPurposes]: (
|
|
333
|
+
LLMServiceBuilder<LLMProviders.YourProvider, purpose> | null
|
|
334
|
+
)
|
|
335
|
+
} = {
|
|
336
|
+
[LLMPurposes.Completion]: (logger, options) => (
|
|
337
|
+
new YourProviderCompletionService(logger, options)
|
|
338
|
+
),
|
|
339
|
+
[LLMPurposes.Assistance]: (logger, options) => (
|
|
340
|
+
new YourProviderAssistanceService(logger, options)
|
|
341
|
+
),
|
|
342
|
+
};
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### 5. Implement Provider Entity (if needed)
|
|
346
|
+
|
|
347
|
+
Create the entity class in `src/providers/YourProvider/YourProvider.entity.ts`:
|
|
348
|
+
|
|
349
|
+
```typescript
|
|
350
|
+
export class YourProviderEntity {
|
|
351
|
+
// Implement provider-specific methods
|
|
352
|
+
}
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
### 6. Implement Service Classes
|
|
356
|
+
|
|
357
|
+
Create service implementations in the `services` directory:
|
|
358
|
+
|
|
359
|
+
**CompletionService (src/providers/YourProvider/services/YourProviderCompletionService.ts)**:
|
|
360
|
+
|
|
361
|
+
```typescript
|
|
362
|
+
import { Logger } from '../../../LLMService.typedefs';
|
|
363
|
+
import { LLMCompletionService } from '../../../services/LLMCompletionService.abstract';
|
|
364
|
+
import { CompletionParams, CompletionResult, LLMProviders } from '../../../LLMService.typedefs';
|
|
365
|
+
import { YourProviderEntity } from '../YourProvider.entity';
|
|
366
|
+
|
|
367
|
+
export class YourProviderCompletionService extends LLMCompletionService<LLMProviders.YourProvider> {
|
|
368
|
+
constructor(
|
|
369
|
+
logger: Logger,
|
|
370
|
+
private readonly providerEntity: YourProviderEntity,
|
|
371
|
+
) {
|
|
372
|
+
super(logger);
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
async complete(params: CompletionParams): Promise<CompletionResult> {
|
|
376
|
+
this.logger.info('Starting completion with YourProvider', { params });
|
|
377
|
+
|
|
378
|
+
try {
|
|
379
|
+
// Implement provider-specific completion logic
|
|
380
|
+
|
|
381
|
+
return {
|
|
382
|
+
text: 'Completed text',
|
|
383
|
+
// Include other required fields
|
|
384
|
+
};
|
|
385
|
+
} catch (error) {
|
|
386
|
+
this.logger.error('Error in YourProvider completion', { error });
|
|
387
|
+
throw error;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
**AssistanceService (if applicable)**:
|
|
394
|
+
|
|
395
|
+
```typescript
|
|
396
|
+
import { Logger } from '../../../LLMService.typedefs';
|
|
397
|
+
import { LLMAssistanceService } from '../../../services/LLMAssistanceService.abstract';
|
|
398
|
+
import {
|
|
399
|
+
AssistantParams,
|
|
400
|
+
ThreadParams,
|
|
401
|
+
MessageParams,
|
|
402
|
+
LLMProviders
|
|
403
|
+
} from '../../../LLMService.typedefs';
|
|
404
|
+
import { YourProviderEntity } from '../YourProvider.entity';
|
|
405
|
+
|
|
406
|
+
export class YourProviderAssistanceService extends LLMAssistanceService<LLMProviders.YourProvider> {
|
|
407
|
+
constructor(
|
|
408
|
+
logger: Logger,
|
|
409
|
+
private readonly providerEntity: YourProviderEntity,
|
|
410
|
+
) {
|
|
411
|
+
super(logger);
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
// Implement required assistance methods
|
|
415
|
+
}
|
|
416
|
+
```
|
|
417
|
+
|
|
418
|
+
### 7. Create Service Factory
|
|
419
|
+
|
|
420
|
+
First, define service builders in `src/providers/YourProvider/YourProvider.constants.ts`:
|
|
421
|
+
|
|
422
|
+
```typescript
|
|
423
|
+
import {
|
|
424
|
+
LLMPurposes,
|
|
425
|
+
type LLMServiceBuilder,
|
|
426
|
+
} from '../../LLMService.typedefs';
|
|
427
|
+
import {
|
|
428
|
+
YourProviderAssistanceService,
|
|
429
|
+
YourProviderCompletionService,
|
|
430
|
+
} from './services';
|
|
431
|
+
|
|
432
|
+
export const YOUR_PROVIDER_SERVICE_BUILDERS: {
|
|
433
|
+
[purpose in LLMPurposes]: (
|
|
434
|
+
LLMServiceBuilder<LLMProviders.YourProvider, purpose> | null
|
|
435
|
+
)
|
|
436
|
+
} = {
|
|
437
|
+
[LLMPurposes.Completion]: (logger, options) => (
|
|
438
|
+
new YourProviderCompletionService(logger, options)
|
|
439
|
+
),
|
|
440
|
+
[LLMPurposes.Assistance]: (logger, options) => (
|
|
441
|
+
new YourProviderAssistanceService(logger, options)
|
|
442
|
+
),
|
|
443
|
+
};
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
Then, implement the service factory in `src/providers/YourProvider/YourProviderService.factory.ts`:
|
|
447
|
+
|
|
448
|
+
```typescript
|
|
449
|
+
import { type Logger } from '@mate-academy/core';
|
|
450
|
+
import {
|
|
451
|
+
type LLMInstanceOptions,
|
|
452
|
+
LLMProviders,
|
|
453
|
+
type LLMPurposes,
|
|
454
|
+
type LLMServiceByPurpose,
|
|
455
|
+
} from '../../LLMService.typedefs';
|
|
456
|
+
import { LLMServicePurposeFactory } from '../../services';
|
|
457
|
+
import { YOUR_PROVIDER_SERVICE_BUILDERS } from './YourProvider.constants';
|
|
458
|
+
|
|
459
|
+
export class YourProviderServiceFactory extends LLMServicePurposeFactory<
|
|
460
|
+
LLMProviders.YourProvider
|
|
461
|
+
> {
|
|
462
|
+
createService<
|
|
463
|
+
Purpose extends LLMPurposes
|
|
464
|
+
>(
|
|
465
|
+
purpose: Purpose,
|
|
466
|
+
logger: Logger,
|
|
467
|
+
options: LLMInstanceOptions[LLMProviders.YourProvider],
|
|
468
|
+
): LLMServiceByPurpose<LLMProviders.YourProvider>[Purpose] {
|
|
469
|
+
const serviceBuilder = YOUR_PROVIDER_SERVICE_BUILDERS[purpose];
|
|
470
|
+
|
|
471
|
+
if (!serviceBuilder) {
|
|
472
|
+
throw new Error(`Purpose [${purpose}] is not supported for [${LLMProviders.YourProvider}] service`);
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
return serviceBuilder(logger, options);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
### 8. Update Entry Point Files
|
|
481
|
+
|
|
482
|
+
Update the provider's `index.ts`:
|
|
483
|
+
|
|
484
|
+
```typescript
|
|
485
|
+
export * from './YourProvider.constants';
|
|
486
|
+
export * from './YourProvider.entity';
|
|
487
|
+
export * from './YourProvider.typedefs';
|
|
488
|
+
export * from './YourProviderService.factory';
|
|
489
|
+
export * from './services';
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
Update the main providers `index.ts` at `src/providers/index.ts`:
|
|
493
|
+
|
|
494
|
+
```typescript
|
|
495
|
+
// ... other providers
|
|
496
|
+
export * from './YourProvider';
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
### 9. Update LLM Service Factory
|
|
500
|
+
|
|
501
|
+
Modify `src/LLMService.factory.ts` to include your new provider:
|
|
502
|
+
|
|
503
|
+
```typescript
|
|
504
|
+
import {
|
|
505
|
+
LLMProviders,
|
|
506
|
+
Logger,
|
|
507
|
+
YourProviderOptions,
|
|
508
|
+
} from './LLMService.typedefs';
|
|
509
|
+
import { YourProviderServiceFactory } from './providers/YourProvider';
|
|
510
|
+
import { YourProviderOptions } from './providers/YourProvider/YourProvider.typedefs';
|
|
511
|
+
|
|
512
|
+
export class LLMServiceFactory {
|
|
513
|
+
static resolveProviderOptions<T extends LLMProviders>(
|
|
514
|
+
provider: T,
|
|
515
|
+
optionsMap: {
|
|
516
|
+
// ... other providers
|
|
517
|
+
[LLMProviders.YourProvider]?: YourProviderOptions;
|
|
518
|
+
},
|
|
519
|
+
) {
|
|
520
|
+
return optionsMap[provider];
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
static getCompletionService<T extends LLMProviders>(
|
|
524
|
+
provider: T,
|
|
525
|
+
logger: Logger,
|
|
526
|
+
options: any,
|
|
527
|
+
) {
|
|
528
|
+
switch (provider) {
|
|
529
|
+
// ... other providers
|
|
530
|
+
case LLMProviders.YourProvider:
|
|
531
|
+
return YourProviderServiceFactory.createCompletionService(logger, options);
|
|
532
|
+
default:
|
|
533
|
+
throw new Error(`Unsupported provider: ${provider}`);
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
static getAssistanceService<T extends LLMProviders>(
|
|
538
|
+
provider: T,
|
|
539
|
+
logger: Logger,
|
|
540
|
+
options: any,
|
|
541
|
+
) {
|
|
542
|
+
switch (provider) {
|
|
543
|
+
// ... other providers
|
|
544
|
+
case LLMProviders.YourProvider:
|
|
545
|
+
return YourProviderServiceFactory.createAssistanceService(logger, options);
|
|
546
|
+
default:
|
|
547
|
+
throw new Error(`Unsupported provider: ${provider}`);
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
```
|
|
552
|
+
|
|
176
553
|
## License
|
|
177
554
|
|
|
178
555
|
[MIT](LICENSE)
|
|
@@ -1,16 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LLM_SERVICE_MODELS = exports.LLM_SERVICE_FACTORIES = void 0;
|
|
4
|
-
const LLMService_typedefs_1 = require("./LLMService.typedefs");
|
|
5
|
-
const providers_1 = require("./providers");
|
|
6
|
-
const GoogleGenerativeAI_constants_1 = require("./providers/GoogleGenerativeAI/GoogleGenerativeAI.constants");
|
|
7
|
-
const OpenAI_constants_1 = require("./providers/OpenAI/OpenAI.constants");
|
|
8
|
-
exports.LLM_SERVICE_FACTORIES = {
|
|
9
|
-
[LLMService_typedefs_1.LLMProviders.OpenAI]: new providers_1.OpenAIServiceFactory(),
|
|
10
|
-
[LLMService_typedefs_1.LLMProviders.GoogleGenerativeAI]: new providers_1.GoogleGenerativeAIServiceFactory(),
|
|
11
|
-
};
|
|
12
|
-
exports.LLM_SERVICE_MODELS = {
|
|
13
|
-
[LLMService_typedefs_1.LLMProviders.OpenAI]: OpenAI_constants_1.OPEN_AI_MODELS,
|
|
14
|
-
[LLMService_typedefs_1.LLMProviders.GoogleGenerativeAI]: GoogleGenerativeAI_constants_1.GOOGLE_AI_MODELS,
|
|
15
|
-
};
|
|
16
|
-
//# sourceMappingURL=LLMService.constants.js.map
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.LLM_SERVICE_MODELS=exports.LLM_SERVICE_FACTORIES=void 0;const LLMService_typedefs_1=require("./LLMService.typedefs"),providers_1=require("./providers"),GoogleGenerativeAI_constants_1=require("./providers/GoogleGenerativeAI/GoogleGenerativeAI.constants"),OpenAI_constants_1=require("./providers/OpenAI/OpenAI.constants");exports.LLM_SERVICE_FACTORIES={[LLMService_typedefs_1.LLMProviders.OpenAI]:new providers_1.OpenAIServiceFactory,[LLMService_typedefs_1.LLMProviders.GoogleGenerativeAI]:new providers_1.GoogleGenerativeAIServiceFactory},exports.LLM_SERVICE_MODELS={[LLMService_typedefs_1.LLMProviders.OpenAI]:OpenAI_constants_1.OPEN_AI_MODELS,[LLMService_typedefs_1.LLMProviders.GoogleGenerativeAI]:GoogleGenerativeAI_constants_1.GOOGLE_AI_MODELS};
|
|
@@ -1,38 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LLMServiceEntity = void 0;
|
|
4
|
-
const LLMService_typedefs_1 = require("./LLMService.typedefs");
|
|
5
|
-
class LLMServiceEntity {
|
|
6
|
-
static countTokensFallback(messages) {
|
|
7
|
-
const message = messages.join('');
|
|
8
|
-
const basicTokens = message.split(/[\s,.;!?(){}[\]<>%&]+/).filter(Boolean);
|
|
9
|
-
const subwordTokens = basicTokens.flatMap((token) => (token.split(/(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|(?<=[a-zA-Z])(?=\d)|(?<=[\d])(?=[a-zA-Z])/)));
|
|
10
|
-
return Promise.resolve(subwordTokens.length);
|
|
11
|
-
}
|
|
12
|
-
static async combineMessagesWithLimit({ modelContext = [], history = [], message, model, countTokensFn = this.countTokensFallback, }) {
|
|
13
|
-
const combinedMessages = [...modelContext];
|
|
14
|
-
if (history[0]) {
|
|
15
|
-
const firstHistoryMessage = history[0];
|
|
16
|
-
combinedMessages.push(firstHistoryMessage);
|
|
17
|
-
}
|
|
18
|
-
const messagesToConsider = [
|
|
19
|
-
{ role: LLMService_typedefs_1.LLMRoles.User, content: message },
|
|
20
|
-
...history.slice(1).reverse(),
|
|
21
|
-
];
|
|
22
|
-
const messages = combinedMessages.map((combinedMessage) => combinedMessage.content);
|
|
23
|
-
let tokenCount = await countTokensFn(messages, model);
|
|
24
|
-
for (const msg of messagesToConsider) {
|
|
25
|
-
const tempTokenCount = tokenCount + (await countTokensFn([msg.content], model));
|
|
26
|
-
if (tempTokenCount <= model.limits.maxInputTokens) {
|
|
27
|
-
combinedMessages.push(msg);
|
|
28
|
-
tokenCount = tempTokenCount;
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
break;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
return combinedMessages;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
exports.LLMServiceEntity = LLMServiceEntity;
|
|
38
|
-
//# sourceMappingURL=LLMService.entity.js.map
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.LLMServiceEntity=void 0;const LLMService_typedefs_1=require("./LLMService.typedefs");class LLMServiceEntity{static countTokensFallback(e){const t=e.join("").split(/[\s,.;!?(){}[\]<>%&]+/).filter(Boolean).flatMap((e=>e.split(/(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|(?<=[a-zA-Z])(?=\d)|(?<=[\d])(?=[a-zA-Z])/)));return Promise.resolve(t.length)}static async combineMessagesWithLimit({modelContext:e=[],history:t=[],message:s,model:o,countTokensFn:i=this.countTokensFallback}){const n=[...e];if(t[0]){const e=t[0];n.push(e)}const c=[{role:LLMService_typedefs_1.LLMRoles.User,content:s},...t.slice(1).reverse()],r=n.map((e=>e.content));let a=await i(r,o);for(const e of c){const t=a+await i([e.content],o);if(!(t<=o.limits.maxInputTokens))break;n.push(e),a=t}return n}}exports.LLMServiceEntity=LLMServiceEntity;
|
|
@@ -1,71 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LLMServiceFactory = void 0;
|
|
4
|
-
const LLMService_typedefs_1 = require("./LLMService.typedefs");
|
|
5
|
-
const LLMService_constants_1 = require("./LLMService.constants");
|
|
6
|
-
class LLMServiceFactory {
|
|
7
|
-
/**
|
|
8
|
-
* Gets a service for the specified LLM purpose and provider
|
|
9
|
-
*
|
|
10
|
-
* @private
|
|
11
|
-
* @static
|
|
12
|
-
* @template Purpose - The purpose of the LLM service (Completion or Assistance)
|
|
13
|
-
* @template Provider - The LLM provider (OpenAI, GoogleGenerativeAI)
|
|
14
|
-
* @param {Purpose} purpose - The purpose of the service
|
|
15
|
-
* @param {Provider} provider - The LLM provider
|
|
16
|
-
* @param {Logger} logger - Logger instance
|
|
17
|
-
* @param {LLMInstanceOptions[Provider]} options - Provider-specific options
|
|
18
|
-
* @returns {LLMServiceByPurpose<Provider>[Purpose]} The LLM service instance
|
|
19
|
-
* @throws {Error} If the provider is not supported
|
|
20
|
-
*/
|
|
21
|
-
static getService(purpose, provider, logger, options) {
|
|
22
|
-
switch (provider) {
|
|
23
|
-
case LLMService_typedefs_1.LLMProviders.OpenAI:
|
|
24
|
-
case LLMService_typedefs_1.LLMProviders.GoogleGenerativeAI:
|
|
25
|
-
return LLMService_constants_1.LLM_SERVICE_FACTORIES[provider]
|
|
26
|
-
.createService(purpose, logger, options);
|
|
27
|
-
default:
|
|
28
|
-
throw new Error(`Provider [${provider}] is not supported`);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Gets a completion service for the specified LLM provider
|
|
33
|
-
*
|
|
34
|
-
* @static
|
|
35
|
-
* @template Provider - The LLM provider type
|
|
36
|
-
* @param {Provider} provider - The LLM provider (OpenAI, GoogleGenerativeAI)
|
|
37
|
-
* @param {Logger} logger - Logger instance
|
|
38
|
-
* @param {LLMInstanceOptions[Provider]} options - Provider-specific options
|
|
39
|
-
* @returns {LLMServiceByPurpose<Provider>[LLMPurposes.Completion]} A completion service instance
|
|
40
|
-
*/
|
|
41
|
-
static getCompletionService(provider, logger, options) {
|
|
42
|
-
return this.getService(LLMService_typedefs_1.LLMPurposes.Completion, provider, logger, options);
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Gets an assistance service for the specified LLM provider
|
|
46
|
-
*
|
|
47
|
-
* @static
|
|
48
|
-
* @template Provider - The LLM provider type
|
|
49
|
-
* @param {Provider} provider - The LLM provider (OpenAI, GoogleGenerativeAI)
|
|
50
|
-
* @param {Logger} logger - Logger instance
|
|
51
|
-
* @param {LLMInstanceOptions[Provider]} options - Provider-specific options
|
|
52
|
-
* @returns {LLMServiceByPurpose<Provider>[LLMPurposes.Assistance]} An assistance service instance
|
|
53
|
-
*/
|
|
54
|
-
static getAssistanceService(provider, logger, options) {
|
|
55
|
-
return this.getService(LLMService_typedefs_1.LLMPurposes.Assistance, provider, logger, options);
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Resolves the options for the specified provider from an options map
|
|
59
|
-
*
|
|
60
|
-
* @static
|
|
61
|
-
* @template Provider - The LLM provider type
|
|
62
|
-
* @param {Provider} provider - The LLM provider to get options for
|
|
63
|
-
* @param {Record<Provider, LLMInstanceOptions[Provider]>} options - Map of provider options
|
|
64
|
-
* @returns {LLMInstanceOptions[Provider]} The options for the specified provider
|
|
65
|
-
*/
|
|
66
|
-
static resolveProviderOptions(provider, options) {
|
|
67
|
-
return options[provider];
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
exports.LLMServiceFactory = LLMServiceFactory;
|
|
71
|
-
//# sourceMappingURL=LLMService.factory.js.map
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.LLMServiceFactory=void 0;const LLMService_typedefs_1=require("./LLMService.typedefs"),LLMService_constants_1=require("./LLMService.constants");class LLMServiceFactory{static getService(e,r,t,s){switch(r){case LLMService_typedefs_1.LLMProviders.OpenAI:case LLMService_typedefs_1.LLMProviders.GoogleGenerativeAI:return LLMService_constants_1.LLM_SERVICE_FACTORIES[r].createService(e,t,s);default:throw new Error(`Provider [${r}] is not supported`)}}static getCompletionService(e,r,t){return this.getService(LLMService_typedefs_1.LLMPurposes.Completion,e,r,t)}static getAssistanceService(e,r,t){return this.getService(LLMService_typedefs_1.LLMPurposes.Assistance,e,r,t)}static resolveProviderOptions(e,r){return r[e]}}exports.LLMServiceFactory=LLMServiceFactory;
|
|
@@ -1,36 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LLMUploadFileMimeTypes = exports.LLMRoles = exports.LLMPurposes = exports.LLMProviders = void 0;
|
|
4
|
-
/**
|
|
5
|
-
* Enum of supported LLM providers.
|
|
6
|
-
*/
|
|
7
|
-
var LLMProviders;
|
|
8
|
-
(function (LLMProviders) {
|
|
9
|
-
LLMProviders["OpenAI"] = "OpenAI";
|
|
10
|
-
LLMProviders["GoogleGenerativeAI"] = "GoogleGenerativeAI";
|
|
11
|
-
})(LLMProviders || (exports.LLMProviders = LLMProviders = {}));
|
|
12
|
-
/**
|
|
13
|
-
* Supported service purposes/types that the LLM gateway provides.
|
|
14
|
-
*/
|
|
15
|
-
var LLMPurposes;
|
|
16
|
-
(function (LLMPurposes) {
|
|
17
|
-
LLMPurposes["Completion"] = "completion";
|
|
18
|
-
LLMPurposes["Assistance"] = "assistance";
|
|
19
|
-
})(LLMPurposes || (exports.LLMPurposes = LLMPurposes = {}));
|
|
20
|
-
/**
|
|
21
|
-
* Roles that can be assigned to messages in an LLM conversation.
|
|
22
|
-
*/
|
|
23
|
-
var LLMRoles;
|
|
24
|
-
(function (LLMRoles) {
|
|
25
|
-
LLMRoles["User"] = "user";
|
|
26
|
-
LLMRoles["Assistant"] = "assistant";
|
|
27
|
-
})(LLMRoles || (exports.LLMRoles = LLMRoles = {}));
|
|
28
|
-
/**
|
|
29
|
-
* Supported MIME types for files that can be uploaded to LLM services.
|
|
30
|
-
*/
|
|
31
|
-
var LLMUploadFileMimeTypes;
|
|
32
|
-
(function (LLMUploadFileMimeTypes) {
|
|
33
|
-
LLMUploadFileMimeTypes["PNG"] = "image/png";
|
|
34
|
-
LLMUploadFileMimeTypes["PLAIN_TEXT"] = "text/plain";
|
|
35
|
-
})(LLMUploadFileMimeTypes || (exports.LLMUploadFileMimeTypes = LLMUploadFileMimeTypes = {}));
|
|
36
|
-
//# sourceMappingURL=LLMService.typedefs.js.map
|
|
1
|
+
"use strict";var LLMProviders,LLMPurposes,LLMRoles,LLMUploadFileMimeTypes;Object.defineProperty(exports,"__esModule",{value:!0}),exports.LLMUploadFileMimeTypes=exports.LLMRoles=exports.LLMPurposes=exports.LLMProviders=void 0,function(e){e.OpenAI="OpenAI",e.GoogleGenerativeAI="GoogleGenerativeAI"}(LLMProviders||(exports.LLMProviders=LLMProviders={})),function(e){e.Completion="completion",e.Assistance="assistance"}(LLMPurposes||(exports.LLMPurposes=LLMPurposes={})),function(e){e.User="user",e.Assistant="assistant"}(LLMRoles||(exports.LLMRoles=LLMRoles={})),function(e){e.PNG="image/png",e.PLAIN_TEXT="text/plain"}(LLMUploadFileMimeTypes||(exports.LLMUploadFileMimeTypes=LLMUploadFileMimeTypes={}));
|
package/dist/functional.utils.js
CHANGED
|
@@ -1,9 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.pick = void 0;
|
|
4
|
-
const pick = (obj, keys) => (keys.reduce((acc, key) => {
|
|
5
|
-
Object.assign(acc, { [key]: obj[key] });
|
|
6
|
-
return acc;
|
|
7
|
-
}, {}));
|
|
8
|
-
exports.pick = pick;
|
|
9
|
-
//# sourceMappingURL=functional.utils.js.map
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.pick=void 0;const pick=(e,c)=>c.reduce(((c,s)=>(Object.assign(c,{[s]:e[s]}),c)),{});exports.pick=pick;
|
package/dist/index.js
CHANGED
|
@@ -1,23 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./LLMService.constants"), exports);
|
|
18
|
-
__exportStar(require("./LLMService.entity"), exports);
|
|
19
|
-
__exportStar(require("./LLMService.factory"), exports);
|
|
20
|
-
__exportStar(require("./LLMService.typedefs"), exports);
|
|
21
|
-
__exportStar(require("./providers"), exports);
|
|
22
|
-
__exportStar(require("./services"), exports);
|
|
23
|
-
//# sourceMappingURL=index.js.map
|
|
1
|
+
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(e,r,t,i){void 0===i&&(i=t);var o=Object.getOwnPropertyDescriptor(r,t);o&&!("get"in o?!r.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,i,o)}:function(e,r,t,i){void 0===i&&(i=t),e[i]=r[t]}),__exportStar=this&&this.__exportStar||function(e,r){for(var t in e)"default"===t||Object.prototype.hasOwnProperty.call(r,t)||__createBinding(r,e,t)};Object.defineProperty(exports,"__esModule",{value:!0}),__exportStar(require("./LLMService.constants"),exports),__exportStar(require("./LLMService.entity"),exports),__exportStar(require("./LLMService.factory"),exports),__exportStar(require("./LLMService.typedefs"),exports),__exportStar(require("./providers"),exports),__exportStar(require("./services"),exports);
|