@xbg.solutions/utils-llm-connector 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.
Files changed (45) hide show
  1. package/lib/index.d.ts +16 -0
  2. package/lib/index.d.ts.map +1 -0
  3. package/lib/index.js +54 -0
  4. package/lib/index.js.map +1 -0
  5. package/lib/llm-connector.d.ts +67 -0
  6. package/lib/llm-connector.d.ts.map +1 -0
  7. package/lib/llm-connector.js +206 -0
  8. package/lib/llm-connector.js.map +1 -0
  9. package/lib/providers/base.provider.d.ts +51 -0
  10. package/lib/providers/base.provider.d.ts.map +1 -0
  11. package/lib/providers/base.provider.js +106 -0
  12. package/lib/providers/base.provider.js.map +1 -0
  13. package/lib/providers/claude.provider.d.ts +26 -0
  14. package/lib/providers/claude.provider.d.ts.map +1 -0
  15. package/lib/providers/claude.provider.js +180 -0
  16. package/lib/providers/claude.provider.js.map +1 -0
  17. package/lib/providers/gemini.provider.d.ts +34 -0
  18. package/lib/providers/gemini.provider.d.ts.map +1 -0
  19. package/lib/providers/gemini.provider.js +285 -0
  20. package/lib/providers/gemini.provider.js.map +1 -0
  21. package/lib/providers/google-lens.provider.d.ts +58 -0
  22. package/lib/providers/google-lens.provider.d.ts.map +1 -0
  23. package/lib/providers/google-lens.provider.js +354 -0
  24. package/lib/providers/google-lens.provider.js.map +1 -0
  25. package/lib/providers/index.d.ts +6 -0
  26. package/lib/providers/index.d.ts.map +1 -0
  27. package/lib/providers/index.js +16 -0
  28. package/lib/providers/index.js.map +1 -0
  29. package/lib/providers/openai.provider.d.ts +30 -0
  30. package/lib/providers/openai.provider.d.ts.map +1 -0
  31. package/lib/providers/openai.provider.js +258 -0
  32. package/lib/providers/openai.provider.js.map +1 -0
  33. package/lib/providers/providers.types.d.ts +64 -0
  34. package/lib/providers/providers.types.d.ts.map +1 -0
  35. package/lib/providers/providers.types.js +3 -0
  36. package/lib/providers/providers.types.js.map +1 -0
  37. package/lib/requests.types.d.ts +69 -0
  38. package/lib/requests.types.d.ts.map +1 -0
  39. package/lib/requests.types.js +3 -0
  40. package/lib/requests.types.js.map +1 -0
  41. package/lib/types.d.ts +7 -0
  42. package/lib/types.d.ts.map +1 -0
  43. package/lib/types.js +25 -0
  44. package/lib/types.js.map +1 -0
  45. package/package.json +30 -0
package/lib/index.d.ts ADDED
@@ -0,0 +1,16 @@
1
+ import { LLMConnector } from './llm-connector';
2
+ export { LLMConnector };
3
+ export * from './types';
4
+ export * from './providers';
5
+ /**
6
+ * Get the default LLM connector instance
7
+ * Uses project configuration if available, otherwise falls back to environment-based config
8
+ */
9
+ export declare function getLLMConnector(): LLMConnector;
10
+ /**
11
+ * Singleton instance for convenience
12
+ * This will use the project configuration automatically
13
+ */
14
+ export declare const llmConnector: LLMConnector;
15
+ export default llmConnector;
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,CAAC;AAGxB,cAAc,SAAS,CAAC;AAGxB,cAAc,aAAa,CAAC;AAK5B;;;GAGG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAa9C;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,cAAoB,CAAC;AAG9C,eAAe,YAAY,CAAC"}
package/lib/index.js ADDED
@@ -0,0 +1,54 @@
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
+ exports.llmConnector = exports.LLMConnector = void 0;
18
+ exports.getLLMConnector = getLLMConnector;
19
+ // Main connector class
20
+ const llm_connector_1 = require("./llm-connector");
21
+ Object.defineProperty(exports, "LLMConnector", { enumerable: true, get: function () { return llm_connector_1.LLMConnector; } });
22
+ // Types
23
+ __exportStar(require("./types"), exports);
24
+ // Providers (for advanced usage)
25
+ __exportStar(require("./providers"), exports);
26
+ // Create singleton instance with project config
27
+ let defaultConnector = null;
28
+ /**
29
+ * Get the default LLM connector instance
30
+ * Uses project configuration if available, otherwise falls back to environment-based config
31
+ */
32
+ function getLLMConnector() {
33
+ if (!defaultConnector) {
34
+ try {
35
+ // Try to import project-specific configuration
36
+ const { PROVIDER_CONFIGS } = require('../../config/llm-providers.config');
37
+ defaultConnector = new llm_connector_1.LLMConnector(PROVIDER_CONFIGS);
38
+ }
39
+ catch (error) {
40
+ // Fall back to default configuration if project config not found
41
+ console.warn('Project LLM configuration not found, using default configuration');
42
+ defaultConnector = new llm_connector_1.LLMConnector();
43
+ }
44
+ }
45
+ return defaultConnector;
46
+ }
47
+ /**
48
+ * Singleton instance for convenience
49
+ * This will use the project configuration automatically
50
+ */
51
+ exports.llmConnector = getLLMConnector();
52
+ // Re-export for convenience
53
+ exports.default = exports.llmConnector;
54
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAiBA,0CAaC;AA9BD,uBAAuB;AACvB,mDAA+C;AACtC,6FADA,4BAAY,OACA;AAErB,QAAQ;AACR,0CAAwB;AAExB,iCAAiC;AACjC,8CAA4B;AAE5B,gDAAgD;AAChD,IAAI,gBAAgB,GAAwB,IAAI,CAAC;AAEjD;;;GAGG;AACH,SAAgB,eAAe;IAC7B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,+CAA+C;YAC/C,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,mCAAmC,CAAC,CAAC;YAC1E,gBAAgB,GAAG,IAAI,4BAAY,CAAC,gBAAgB,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,iEAAiE;YACjE,OAAO,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;YACjF,gBAAgB,GAAG,IAAI,4BAAY,EAAE,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACU,QAAA,YAAY,GAAG,eAAe,EAAE,CAAC;AAE9C,4BAA4B;AAC5B,kBAAe,oBAAY,CAAC"}
@@ -0,0 +1,67 @@
1
+ import { TextGenerationRequest, TextGenerationResponse, ImageAnalysisRequest, ImageAnalysisResponse, ProviderInfo, ProviderConfig } from './types';
2
+ /**
3
+ * Main LLM Connector class that orchestrates multiple providers
4
+ * Provides a unified interface for text generation and image analysis
5
+ */
6
+ export declare class LLMConnector {
7
+ private providers;
8
+ private config;
9
+ constructor(config?: Record<string, ProviderConfig>);
10
+ /**
11
+ * Generate text completion using specified provider
12
+ */
13
+ generateText(request: TextGenerationRequest): Promise<TextGenerationResponse>;
14
+ /**
15
+ * Analyze image content using specified provider
16
+ */
17
+ analyzeImage(request: ImageAnalysisRequest): Promise<ImageAnalysisResponse>;
18
+ /**
19
+ * Get information about all available providers
20
+ */
21
+ getAvailableProviders(): ProviderInfo[];
22
+ /**
23
+ * Get information about a specific provider
24
+ */
25
+ getProviderInfo(providerName: string): ProviderInfo;
26
+ /**
27
+ * Check if a provider supports a specific feature
28
+ */
29
+ supportsFeature(providerName: string, feature: 'text-generation' | 'image-analysis'): boolean;
30
+ /**
31
+ * Get enabled provider names
32
+ */
33
+ getEnabledProviders(): string[];
34
+ /**
35
+ * Get provider configuration
36
+ */
37
+ getProviderConfig(providerName: string): ProviderConfig | undefined;
38
+ /**
39
+ * Update provider configuration (runtime reconfiguration)
40
+ */
41
+ updateProviderConfig(providerName: string, newConfig: Partial<ProviderConfig>): void;
42
+ /**
43
+ * Add a new provider dynamically
44
+ */
45
+ addProvider(name: string, config: ProviderConfig): void;
46
+ /**
47
+ * Remove a provider
48
+ */
49
+ removeProvider(providerName: string): void;
50
+ /**
51
+ * Get a provider instance
52
+ */
53
+ private getProvider;
54
+ /**
55
+ * Initialize all enabled providers
56
+ */
57
+ private initializeProviders;
58
+ /**
59
+ * Initialize a single provider
60
+ */
61
+ private initializeProvider;
62
+ /**
63
+ * Get default configuration (fallback when no config provided)
64
+ */
65
+ private getDefaultConfig;
66
+ }
67
+ //# sourceMappingURL=llm-connector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-connector.d.ts","sourceRoot":"","sources":["../src/llm-connector.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,YAAY,EACZ,cAAc,EACf,MAAM,SAAS,CAAC;AAUjB;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAA4B;IAC7C,OAAO,CAAC,MAAM,CAAiC;gBAEnC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC;IAcnD;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAUnF;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAUjF;;OAEG;IACH,qBAAqB,IAAI,YAAY,EAAE;IAIvC;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY;IAKnD;;OAEG;IACH,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,GAAG,OAAO;IAU7F;;OAEG;IACH,mBAAmB,IAAI,MAAM,EAAE;IAM/B;;OAEG;IACH,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAInE;;OAEG;IACH,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IAkBpF;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI;IAOvD;;OAEG;IACH,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAK1C;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAgB3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoB1B;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAiCzB"}
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LLMConnector = void 0;
4
+ const providers_1 = require("./providers");
5
+ /**
6
+ * Main LLM Connector class that orchestrates multiple providers
7
+ * Provides a unified interface for text generation and image analysis
8
+ */
9
+ class LLMConnector {
10
+ constructor(config) {
11
+ this.providers = new Map();
12
+ // Use provided config or import default config
13
+ if (config) {
14
+ this.config = config;
15
+ }
16
+ else {
17
+ // Import default config dynamically to avoid circular dependencies
18
+ this.config = this.getDefaultConfig();
19
+ }
20
+ this.initializeProviders();
21
+ }
22
+ /**
23
+ * Generate text completion using specified provider
24
+ */
25
+ async generateText(request) {
26
+ const provider = this.getProvider(request.provider);
27
+ if (!this.supportsFeature(request.provider, 'text-generation')) {
28
+ throw new Error(`Provider '${request.provider}' does not support text generation`);
29
+ }
30
+ return await provider.generateText(request);
31
+ }
32
+ /**
33
+ * Analyze image content using specified provider
34
+ */
35
+ async analyzeImage(request) {
36
+ const provider = this.getProvider(request.provider);
37
+ if (!this.supportsFeature(request.provider, 'image-analysis')) {
38
+ throw new Error(`Provider '${request.provider}' does not support image analysis`);
39
+ }
40
+ return await provider.analyzeImage(request);
41
+ }
42
+ /**
43
+ * Get information about all available providers
44
+ */
45
+ getAvailableProviders() {
46
+ return Array.from(this.providers.values()).map(provider => provider.getInfo());
47
+ }
48
+ /**
49
+ * Get information about a specific provider
50
+ */
51
+ getProviderInfo(providerName) {
52
+ const provider = this.getProvider(providerName);
53
+ return provider.getInfo();
54
+ }
55
+ /**
56
+ * Check if a provider supports a specific feature
57
+ */
58
+ supportsFeature(providerName, feature) {
59
+ try {
60
+ const provider = this.getProvider(providerName);
61
+ const info = provider.getInfo();
62
+ return info.supportedFeatures.includes(feature);
63
+ }
64
+ catch (error) {
65
+ return false;
66
+ }
67
+ }
68
+ /**
69
+ * Get enabled provider names
70
+ */
71
+ getEnabledProviders() {
72
+ return Object.entries(this.config)
73
+ .filter(([, config]) => config.enabled)
74
+ .map(([name]) => name);
75
+ }
76
+ /**
77
+ * Get provider configuration
78
+ */
79
+ getProviderConfig(providerName) {
80
+ return this.config[providerName];
81
+ }
82
+ /**
83
+ * Update provider configuration (runtime reconfiguration)
84
+ */
85
+ updateProviderConfig(providerName, newConfig) {
86
+ const currentConfig = this.config[providerName];
87
+ if (!currentConfig) {
88
+ throw new Error(`Provider '${providerName}' not found in configuration`);
89
+ }
90
+ // Update config
91
+ this.config[providerName] = Object.assign(Object.assign({}, currentConfig), newConfig);
92
+ // Reinitialize provider if it exists and is still enabled
93
+ if (this.config[providerName].enabled) {
94
+ this.initializeProvider(providerName, this.config[providerName]);
95
+ }
96
+ else {
97
+ // Remove provider if disabled
98
+ this.providers.delete(providerName);
99
+ }
100
+ }
101
+ /**
102
+ * Add a new provider dynamically
103
+ */
104
+ addProvider(name, config) {
105
+ this.config[name] = config;
106
+ if (config.enabled) {
107
+ this.initializeProvider(name, config);
108
+ }
109
+ }
110
+ /**
111
+ * Remove a provider
112
+ */
113
+ removeProvider(providerName) {
114
+ this.providers.delete(providerName);
115
+ delete this.config[providerName];
116
+ }
117
+ /**
118
+ * Get a provider instance
119
+ */
120
+ getProvider(providerName) {
121
+ const provider = this.providers.get(providerName);
122
+ if (!provider) {
123
+ const availableProviders = Array.from(this.providers.keys()).join(', ');
124
+ throw new Error(`Provider '${providerName}' not found or not enabled. Available providers: ${availableProviders}`);
125
+ }
126
+ return provider;
127
+ }
128
+ /**
129
+ * Initialize all enabled providers
130
+ */
131
+ initializeProviders() {
132
+ Object.entries(this.config).forEach(([name, config]) => {
133
+ if (config.enabled) {
134
+ try {
135
+ this.initializeProvider(name, config);
136
+ }
137
+ catch (error) {
138
+ console.warn(`Failed to initialize provider '${name}':`, error);
139
+ }
140
+ }
141
+ });
142
+ if (this.providers.size === 0) {
143
+ console.warn('No LLM providers were successfully initialized');
144
+ }
145
+ }
146
+ /**
147
+ * Initialize a single provider
148
+ */
149
+ initializeProvider(name, config) {
150
+ switch (name) {
151
+ case 'claude':
152
+ this.providers.set(name, new providers_1.ClaudeProvider(config));
153
+ break;
154
+ case 'openai':
155
+ this.providers.set(name, new providers_1.OpenAIProvider(config));
156
+ break;
157
+ case 'gemini':
158
+ this.providers.set(name, new providers_1.GeminiProvider(config));
159
+ break;
160
+ case 'google-lens':
161
+ this.providers.set(name, new providers_1.GoogleLensProvider(config));
162
+ break;
163
+ default:
164
+ console.warn(`Unknown provider: ${name}. Skipping initialization.`);
165
+ break;
166
+ }
167
+ }
168
+ /**
169
+ * Get default configuration (fallback when no config provided)
170
+ */
171
+ getDefaultConfig() {
172
+ // Minimal default configuration
173
+ return {
174
+ claude: {
175
+ name: 'claude',
176
+ enabled: !!process.env.ANTHROPIC_API_KEY,
177
+ defaultModel: 'claude-3-5-sonnet-20241022',
178
+ timeout: 30000,
179
+ maxRetries: 2
180
+ },
181
+ openai: {
182
+ name: 'openai',
183
+ enabled: !!process.env.OPENAI_API_KEY,
184
+ defaultModel: 'gpt-4o',
185
+ timeout: 30000,
186
+ maxRetries: 2
187
+ },
188
+ gemini: {
189
+ name: 'gemini',
190
+ enabled: !!process.env.GOOGLE_AI_API_KEY,
191
+ defaultModel: 'gemini-1.5-pro',
192
+ timeout: 30000,
193
+ maxRetries: 2
194
+ },
195
+ 'google-lens': {
196
+ name: 'google-lens',
197
+ enabled: !!process.env.GOOGLE_CLOUD_API_KEY || !!process.env.GOOGLE_APPLICATION_CREDENTIALS,
198
+ defaultModel: 'vision-product-search',
199
+ timeout: 15000,
200
+ maxRetries: 1
201
+ }
202
+ };
203
+ }
204
+ }
205
+ exports.LLMConnector = LLMConnector;
206
+ //# sourceMappingURL=llm-connector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-connector.js","sourceRoot":"","sources":["../src/llm-connector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { TextGenerationRequest, TextGenerationResponse, ImageAnalysisRequest, ImageAnalysisResponse, BaseResponse, UsageMetrics, ProviderInfo, ProviderConfig } from '../types';
2
+ /**
3
+ * Abstract base class for all LLM providers
4
+ * Provides common functionality and enforces consistent interface
5
+ */
6
+ export declare abstract class BaseProvider {
7
+ protected name: string;
8
+ protected config: ProviderConfig;
9
+ constructor(name: string, config: ProviderConfig);
10
+ /**
11
+ * Generate text completion
12
+ */
13
+ abstract generateText(request: TextGenerationRequest): Promise<TextGenerationResponse>;
14
+ /**
15
+ * Analyze image content
16
+ */
17
+ abstract analyzeImage(request: ImageAnalysisRequest): Promise<ImageAnalysisResponse>;
18
+ /**
19
+ * Get provider information
20
+ */
21
+ abstract getInfo(): ProviderInfo;
22
+ /**
23
+ * Get API key - user provided or environment variable
24
+ */
25
+ protected getApiKey(userProvidedKey?: string): string;
26
+ /**
27
+ * Get the environment variable name for this provider's API key
28
+ */
29
+ protected abstract getApiKeyEnvVar(): string;
30
+ /**
31
+ * Create a standardized base response
32
+ */
33
+ protected createBaseResponse(requestId: string, usage: UsageMetrics): BaseResponse;
34
+ /**
35
+ * Generate a unique request ID for tracking
36
+ */
37
+ protected generateRequestId(): string;
38
+ /**
39
+ * Handle provider-specific errors with common error mapping
40
+ */
41
+ protected handleProviderError(error: any, requestId: string, model: string): BaseResponse;
42
+ /**
43
+ * Validate request before processing
44
+ */
45
+ protected validateRequest(request: TextGenerationRequest | ImageAnalysisRequest): void;
46
+ /**
47
+ * Apply rate limiting if configured
48
+ */
49
+ protected applyRateLimit(): Promise<void>;
50
+ }
51
+ //# sourceMappingURL=base.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.provider.d.ts","sourceRoot":"","sources":["../../src/providers/base.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,cAAc,EACf,MAAM,UAAU,CAAC;AAElB;;;GAGG;AACH,8BAAsB,YAAY;IAChC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,MAAM,EAAE,cAAc,CAAC;gBAErB,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc;IAKhD;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAEtF;;OAEG;IACH,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAEpF;;OAEG;IACH,QAAQ,CAAC,OAAO,IAAI,YAAY;IAEhC;;OAEG;IACH,SAAS,CAAC,SAAS,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM;IAarD;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,eAAe,IAAI,MAAM;IAE5C;;OAEG;IACH,SAAS,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,YAAY;IAUlF;;OAEG;IACH,SAAS,CAAC,iBAAiB,IAAI,MAAM;IAIrC;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY;IA4BzF;;OAEG;IACH,SAAS,CAAC,eAAe,CAAC,OAAO,EAAE,qBAAqB,GAAG,oBAAoB,GAAG,IAAI;IAqBtF;;OAEG;cACa,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CAOhD"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseProvider = void 0;
4
+ /**
5
+ * Abstract base class for all LLM providers
6
+ * Provides common functionality and enforces consistent interface
7
+ */
8
+ class BaseProvider {
9
+ constructor(name, config) {
10
+ this.name = name;
11
+ this.config = config;
12
+ }
13
+ /**
14
+ * Get API key - user provided or environment variable
15
+ */
16
+ getApiKey(userProvidedKey) {
17
+ // Use user-provided key if available, otherwise platform key
18
+ if (userProvidedKey) {
19
+ return userProvidedKey;
20
+ }
21
+ const envKey = process.env[this.getApiKeyEnvVar()];
22
+ if (!envKey) {
23
+ throw new Error(`API key not found for provider '${this.name}'. Set ${this.getApiKeyEnvVar()} environment variable.`);
24
+ }
25
+ return envKey;
26
+ }
27
+ /**
28
+ * Create a standardized base response
29
+ */
30
+ createBaseResponse(requestId, usage) {
31
+ return {
32
+ success: true,
33
+ usage,
34
+ provider: this.name,
35
+ model: '', // Will be set by concrete implementation
36
+ requestId
37
+ };
38
+ }
39
+ /**
40
+ * Generate a unique request ID for tracking
41
+ */
42
+ generateRequestId() {
43
+ return `${this.name}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
44
+ }
45
+ /**
46
+ * Handle provider-specific errors with common error mapping
47
+ */
48
+ handleProviderError(error, requestId, model) {
49
+ const errorMap = {
50
+ 'rate_limit_exceeded': 'Rate limit exceeded for provider',
51
+ 'invalid_api_key': 'Invalid API key provided',
52
+ 'quota_exceeded': 'API quota exceeded',
53
+ 'model_not_found': 'Requested model not available',
54
+ 'timeout': 'Request timeout',
55
+ 'insufficient_quota': 'Insufficient API quota',
56
+ 'invalid_request': 'Invalid request format'
57
+ };
58
+ const mappedError = errorMap[error.code] || error.message || 'Unknown provider error';
59
+ return {
60
+ success: false,
61
+ error: mappedError,
62
+ usage: {
63
+ inputTokens: 0,
64
+ outputTokens: 0,
65
+ totalTokens: 0,
66
+ processingTimeMs: 0
67
+ },
68
+ provider: this.name,
69
+ model,
70
+ requestId
71
+ };
72
+ }
73
+ /**
74
+ * Validate request before processing
75
+ */
76
+ validateRequest(request) {
77
+ var _a;
78
+ if (!request.provider || request.provider !== this.name) {
79
+ throw new Error(`Invalid provider. Expected '${this.name}', got '${request.provider}'`);
80
+ }
81
+ if (!request.model) {
82
+ throw new Error('Model is required');
83
+ }
84
+ // Type-specific validation
85
+ if ('prompt' in request && !((_a = request.prompt) === null || _a === void 0 ? void 0 : _a.trim())) {
86
+ throw new Error('Prompt is required for text generation');
87
+ }
88
+ if ('imageUrl' in request || 'imageBase64' in request) {
89
+ if (!request.imageUrl && !request.imageBase64) {
90
+ throw new Error('Either imageUrl or imageBase64 is required for image analysis');
91
+ }
92
+ }
93
+ }
94
+ /**
95
+ * Apply rate limiting if configured
96
+ */
97
+ async applyRateLimit() {
98
+ if (this.config.rateLimits) {
99
+ // Basic rate limiting implementation
100
+ // In production, this would use Redis or similar for distributed rate limiting
101
+ console.log(`Rate limits configured for ${this.name}:`, this.config.rateLimits);
102
+ }
103
+ }
104
+ }
105
+ exports.BaseProvider = BaseProvider;
106
+ //# sourceMappingURL=base.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.provider.js","sourceRoot":"","sources":["../../src/providers/base.provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { BaseProvider } from './base.provider';
2
+ import { TextGenerationRequest, TextGenerationResponse, ImageAnalysisRequest, ImageAnalysisResponse, ProviderInfo, ProviderConfig } from '../types';
3
+ /**
4
+ * Anthropic Claude provider implementation
5
+ * Supports text generation with Claude models
6
+ */
7
+ export declare class ClaudeProvider extends BaseProvider {
8
+ constructor(config: ProviderConfig);
9
+ generateText(request: TextGenerationRequest): Promise<TextGenerationResponse>;
10
+ analyzeImage(request: ImageAnalysisRequest): Promise<ImageAnalysisResponse>;
11
+ getInfo(): ProviderInfo;
12
+ protected getApiKeyEnvVar(): string;
13
+ /**
14
+ * Calculate estimated cost based on usage and model
15
+ */
16
+ private calculateCost;
17
+ /**
18
+ * Map Claude's finish reasons to our standard format
19
+ */
20
+ private mapFinishReason;
21
+ /**
22
+ * Dynamically import Anthropic SDK
23
+ */
24
+ private getAnthropicSDK;
25
+ }
26
+ //# sourceMappingURL=claude.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.provider.d.ts","sourceRoot":"","sources":["../../src/providers/claude.provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EAErB,YAAY,EACZ,cAAc,EACf,MAAM,UAAU,CAAC;AAElB;;;GAGG;AACH,qBAAa,cAAe,SAAQ,YAAY;gBAClC,MAAM,EAAE,cAAc;IAI5B,YAAY,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAiE7E,YAAY,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAwBjF,OAAO,IAAI,YAAY;IAkCvB,SAAS,CAAC,eAAe,IAAI,MAAM;IAInC;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;YACW,eAAe;CAQ9B"}