@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
@@ -0,0 +1,180 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ClaudeProvider = void 0;
37
+ const base_provider_1 = require("./base.provider");
38
+ /**
39
+ * Anthropic Claude provider implementation
40
+ * Supports text generation with Claude models
41
+ */
42
+ class ClaudeProvider extends base_provider_1.BaseProvider {
43
+ constructor(config) {
44
+ super('claude', config);
45
+ }
46
+ async generateText(request) {
47
+ const startTime = Date.now();
48
+ const requestId = this.generateRequestId();
49
+ try {
50
+ this.validateRequest(request);
51
+ await this.applyRateLimit();
52
+ // Import Anthropic SDK dynamically to avoid requiring it if not used
53
+ const Anthropic = await this.getAnthropicSDK();
54
+ // Use user API key if provided, otherwise platform key
55
+ const apiKey = this.getApiKey(request.userApiKey);
56
+ const client = new Anthropic({ apiKey });
57
+ const messages = [];
58
+ // Add system message if provided
59
+ if (request.systemPrompt) {
60
+ messages.push({ role: 'system', content: request.systemPrompt });
61
+ }
62
+ messages.push({ role: 'user', content: request.prompt });
63
+ const response = await client.messages.create({
64
+ model: request.model,
65
+ messages,
66
+ max_tokens: request.maxTokens || 1000,
67
+ temperature: request.temperature || 0.7,
68
+ stop_sequences: request.stopSequences || []
69
+ });
70
+ const processingTime = Date.now() - startTime;
71
+ const usage = {
72
+ inputTokens: response.usage.input_tokens,
73
+ outputTokens: response.usage.output_tokens,
74
+ totalTokens: response.usage.input_tokens + response.usage.output_tokens,
75
+ estimatedCost: this.calculateCost(response.usage, request.model),
76
+ processingTimeMs: processingTime
77
+ };
78
+ return Object.assign(Object.assign({}, this.createBaseResponse(requestId, usage)), { model: request.model, text: response.content[0].text, finishReason: this.mapFinishReason(response.stop_reason) });
79
+ }
80
+ catch (error) {
81
+ const processingTime = Date.now() - startTime;
82
+ return Object.assign(Object.assign({}, this.handleProviderError(error, requestId, request.model)), { text: '', finishReason: 'error', usage: {
83
+ inputTokens: 0,
84
+ outputTokens: 0,
85
+ totalTokens: 0,
86
+ processingTimeMs: processingTime
87
+ } });
88
+ }
89
+ }
90
+ async analyzeImage(request) {
91
+ const requestId = this.generateRequestId();
92
+ const processingTime = Date.now();
93
+ return Object.assign(Object.assign({}, this.handleProviderError({ message: 'Claude provider does not support image analysis' }, requestId, request.model)), { analysis: {
94
+ description: '',
95
+ detectedObjects: [],
96
+ extractedText: ''
97
+ }, usage: {
98
+ inputTokens: 0,
99
+ outputTokens: 0,
100
+ totalTokens: 0,
101
+ processingTimeMs: Date.now() - processingTime
102
+ } });
103
+ }
104
+ getInfo() {
105
+ return {
106
+ name: 'claude',
107
+ displayName: 'Anthropic Claude',
108
+ availableModels: [
109
+ {
110
+ id: 'claude-3-5-sonnet-20241022',
111
+ displayName: 'Claude 3.5 Sonnet',
112
+ contextWindow: 200000,
113
+ costPer1kTokens: { input: 0.003, output: 0.015 }
114
+ },
115
+ {
116
+ id: 'claude-3-5-haiku-20241022',
117
+ displayName: 'Claude 3.5 Haiku',
118
+ contextWindow: 200000,
119
+ costPer1kTokens: { input: 0.001, output: 0.005 }
120
+ },
121
+ {
122
+ id: 'claude-3-haiku-20240307',
123
+ displayName: 'Claude 3 Haiku',
124
+ contextWindow: 200000,
125
+ costPer1kTokens: { input: 0.00025, output: 0.00125 }
126
+ },
127
+ {
128
+ id: 'claude-3-opus-20240229',
129
+ displayName: 'Claude 3 Opus',
130
+ contextWindow: 200000,
131
+ costPer1kTokens: { input: 0.015, output: 0.075 }
132
+ }
133
+ ],
134
+ supportedFeatures: ['text-generation']
135
+ };
136
+ }
137
+ getApiKeyEnvVar() {
138
+ return 'ANTHROPIC_API_KEY';
139
+ }
140
+ /**
141
+ * Calculate estimated cost based on usage and model
142
+ */
143
+ calculateCost(usage, model) {
144
+ const modelInfo = this.getInfo().availableModels.find((m) => m.id === model);
145
+ if (!(modelInfo === null || modelInfo === void 0 ? void 0 : modelInfo.costPer1kTokens))
146
+ return 0;
147
+ const inputCost = (usage.input_tokens / 1000) * modelInfo.costPer1kTokens.input;
148
+ const outputCost = (usage.output_tokens / 1000) * modelInfo.costPer1kTokens.output;
149
+ return Math.round((inputCost + outputCost) * 100000) / 100000; // Round to 5 decimal places
150
+ }
151
+ /**
152
+ * Map Claude's finish reasons to our standard format
153
+ */
154
+ mapFinishReason(reason) {
155
+ switch (reason) {
156
+ case 'end_turn':
157
+ return 'completed';
158
+ case 'max_tokens':
159
+ return 'length';
160
+ case 'stop_sequence':
161
+ return 'stop';
162
+ default:
163
+ return 'error';
164
+ }
165
+ }
166
+ /**
167
+ * Dynamically import Anthropic SDK
168
+ */
169
+ async getAnthropicSDK() {
170
+ try {
171
+ const module = await Promise.resolve().then(() => __importStar(require('@anthropic-ai/sdk')));
172
+ return module.default || module;
173
+ }
174
+ catch (error) {
175
+ throw new Error('Anthropic SDK not found. Please install @anthropic-ai/sdk: npm install @anthropic-ai/sdk');
176
+ }
177
+ }
178
+ }
179
+ exports.ClaudeProvider = ClaudeProvider;
180
+ //# sourceMappingURL=claude.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude.provider.js","sourceRoot":"","sources":["../../src/providers/claude.provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import { BaseProvider } from './base.provider';
2
+ import { TextGenerationRequest, TextGenerationResponse, ImageAnalysisRequest, ImageAnalysisResponse, ProviderInfo, ProviderConfig } from '../types';
3
+ /**
4
+ * Google Gemini provider implementation
5
+ * Supports Gemini models for text generation and image analysis
6
+ */
7
+ export declare class GeminiProvider 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 tokens and model
15
+ */
16
+ private calculateCost;
17
+ /**
18
+ * Map Gemini's finish reasons to our standard format
19
+ */
20
+ private mapFinishReason;
21
+ /**
22
+ * Get default prompt for image analysis type
23
+ */
24
+ private getDefaultImagePrompt;
25
+ /**
26
+ * Fetch image from URL and convert to base64
27
+ */
28
+ private fetchImageAsBase64;
29
+ /**
30
+ * Dynamically import Google Generative AI SDK
31
+ */
32
+ private getGeminiSDK;
33
+ }
34
+ //# sourceMappingURL=gemini.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.provider.d.ts","sourceRoot":"","sources":["../../src/providers/gemini.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;IA0E7E,YAAY,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAoGjF,OAAO,IAAI,YAAY;IA4BvB,SAAS,CAAC,eAAe,IAAI,MAAM;IAInC;;OAEG;IACH,OAAO,CAAC,aAAa;IAUrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAa7B;;OAEG;YACW,kBAAkB;IAiBhC;;OAEG;YACW,YAAY;CAO3B"}
@@ -0,0 +1,285 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.GeminiProvider = void 0;
37
+ const base_provider_1 = require("./base.provider");
38
+ /**
39
+ * Google Gemini provider implementation
40
+ * Supports Gemini models for text generation and image analysis
41
+ */
42
+ class GeminiProvider extends base_provider_1.BaseProvider {
43
+ constructor(config) {
44
+ super('gemini', config);
45
+ }
46
+ async generateText(request) {
47
+ var _a, _b;
48
+ const startTime = Date.now();
49
+ const requestId = this.generateRequestId();
50
+ try {
51
+ this.validateRequest(request);
52
+ await this.applyRateLimit();
53
+ // Import Google Generative AI SDK dynamically
54
+ const { GoogleGenerativeAI } = await this.getGeminiSDK();
55
+ // Use user API key if provided, otherwise platform key
56
+ const apiKey = this.getApiKey(request.userApiKey);
57
+ const genAI = new GoogleGenerativeAI(apiKey);
58
+ const model = genAI.getGenerativeModel({ model: request.model });
59
+ // Prepare prompt with system instruction if provided
60
+ let fullPrompt = request.prompt;
61
+ if (request.systemPrompt) {
62
+ fullPrompt = `${request.systemPrompt}\n\n${request.prompt}`;
63
+ }
64
+ const generationConfig = {
65
+ maxOutputTokens: request.maxTokens || 1000,
66
+ temperature: request.temperature || 0.7,
67
+ stopSequences: request.stopSequences || []
68
+ };
69
+ const result = await model.generateContent({
70
+ contents: [{ role: 'user', parts: [{ text: fullPrompt }] }],
71
+ generationConfig
72
+ });
73
+ const response = result.response;
74
+ const text = response.text();
75
+ const processingTime = Date.now() - startTime;
76
+ // Gemini usage info is limited, estimate tokens
77
+ const estimatedInputTokens = Math.ceil(fullPrompt.length / 4);
78
+ const estimatedOutputTokens = Math.ceil(text.length / 4);
79
+ const usage = {
80
+ inputTokens: estimatedInputTokens,
81
+ outputTokens: estimatedOutputTokens,
82
+ totalTokens: estimatedInputTokens + estimatedOutputTokens,
83
+ estimatedCost: this.calculateCost(estimatedInputTokens, estimatedOutputTokens, request.model),
84
+ processingTimeMs: processingTime
85
+ };
86
+ return Object.assign(Object.assign({}, this.createBaseResponse(requestId, usage)), { model: request.model, text, finishReason: this.mapFinishReason((_b = (_a = response.candidates) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.finishReason) });
87
+ }
88
+ catch (error) {
89
+ const processingTime = Date.now() - startTime;
90
+ return Object.assign(Object.assign({}, this.handleProviderError(error, requestId, request.model)), { text: '', finishReason: 'error', usage: {
91
+ inputTokens: 0,
92
+ outputTokens: 0,
93
+ totalTokens: 0,
94
+ processingTimeMs: processingTime
95
+ } });
96
+ }
97
+ }
98
+ async analyzeImage(request) {
99
+ const startTime = Date.now();
100
+ const requestId = this.generateRequestId();
101
+ try {
102
+ this.validateRequest(request);
103
+ await this.applyRateLimit();
104
+ // Import Google Generative AI SDK dynamically
105
+ const { GoogleGenerativeAI } = await this.getGeminiSDK();
106
+ // Use user API key if provided, otherwise platform key
107
+ const apiKey = this.getApiKey(request.userApiKey);
108
+ const genAI = new GoogleGenerativeAI(apiKey);
109
+ const model = genAI.getGenerativeModel({ model: request.model });
110
+ const prompt = request.prompt || this.getDefaultImagePrompt(request.analysisType);
111
+ let imagePart;
112
+ if (request.imageUrl) {
113
+ // For image URLs, we need to fetch the image data
114
+ const imageData = await this.fetchImageAsBase64(request.imageUrl);
115
+ imagePart = {
116
+ inlineData: {
117
+ data: imageData,
118
+ mimeType: "image/jpeg"
119
+ }
120
+ };
121
+ }
122
+ else if (request.imageBase64) {
123
+ imagePart = {
124
+ inlineData: {
125
+ data: request.imageBase64,
126
+ mimeType: "image/jpeg"
127
+ }
128
+ };
129
+ }
130
+ else {
131
+ throw new Error('Either imageUrl or imageBase64 is required');
132
+ }
133
+ const result = await model.generateContent({
134
+ contents: [{
135
+ role: 'user',
136
+ parts: [
137
+ { text: prompt },
138
+ imagePart
139
+ ]
140
+ }],
141
+ generationConfig: {
142
+ maxOutputTokens: 1000
143
+ }
144
+ });
145
+ const response = result.response;
146
+ const text = response.text();
147
+ const processingTime = Date.now() - startTime;
148
+ // Estimate tokens for vision requests
149
+ const estimatedInputTokens = Math.ceil(prompt.length / 4) + 500; // Add for image
150
+ const estimatedOutputTokens = Math.ceil(text.length / 4);
151
+ const usage = {
152
+ inputTokens: estimatedInputTokens,
153
+ outputTokens: estimatedOutputTokens,
154
+ totalTokens: estimatedInputTokens + estimatedOutputTokens,
155
+ estimatedCost: this.calculateCost(estimatedInputTokens, estimatedOutputTokens, request.model),
156
+ processingTimeMs: processingTime
157
+ };
158
+ return Object.assign(Object.assign({}, this.createBaseResponse(requestId, usage)), { model: request.model, analysis: {
159
+ description: text,
160
+ confidence: 0.8, // Gemini doesn't provide confidence scores
161
+ detectedObjects: [], // Would need additional processing
162
+ extractedText: request.analysisType === 'text-extraction' ? text : undefined
163
+ } });
164
+ }
165
+ catch (error) {
166
+ const processingTime = Date.now() - startTime;
167
+ return Object.assign(Object.assign({}, this.handleProviderError(error, requestId, request.model)), { analysis: {
168
+ description: '',
169
+ detectedObjects: [],
170
+ extractedText: ''
171
+ }, usage: {
172
+ inputTokens: 0,
173
+ outputTokens: 0,
174
+ totalTokens: 0,
175
+ processingTimeMs: processingTime
176
+ } });
177
+ }
178
+ }
179
+ getInfo() {
180
+ return {
181
+ name: 'gemini',
182
+ displayName: 'Google Gemini',
183
+ availableModels: [
184
+ {
185
+ id: 'gemini-1.5-pro',
186
+ displayName: 'Gemini 1.5 Pro',
187
+ contextWindow: 2000000,
188
+ costPer1kTokens: { input: 0.0035, output: 0.0105 }
189
+ },
190
+ {
191
+ id: 'gemini-1.5-flash',
192
+ displayName: 'Gemini 1.5 Flash',
193
+ contextWindow: 1000000,
194
+ costPer1kTokens: { input: 0.000075, output: 0.0003 }
195
+ },
196
+ {
197
+ id: 'gemini-pro-vision',
198
+ displayName: 'Gemini Pro Vision',
199
+ contextWindow: 16384,
200
+ costPer1kTokens: { input: 0.00025, output: 0.0005 }
201
+ }
202
+ ],
203
+ supportedFeatures: ['text-generation', 'image-analysis']
204
+ };
205
+ }
206
+ getApiKeyEnvVar() {
207
+ return 'GOOGLE_AI_API_KEY';
208
+ }
209
+ /**
210
+ * Calculate estimated cost based on tokens and model
211
+ */
212
+ calculateCost(inputTokens, outputTokens, model) {
213
+ const modelInfo = this.getInfo().availableModels.find((m) => m.id === model);
214
+ if (!(modelInfo === null || modelInfo === void 0 ? void 0 : modelInfo.costPer1kTokens))
215
+ return 0;
216
+ const inputCost = (inputTokens / 1000) * modelInfo.costPer1kTokens.input;
217
+ const outputCost = (outputTokens / 1000) * modelInfo.costPer1kTokens.output;
218
+ return Math.round((inputCost + outputCost) * 100000) / 100000; // Round to 5 decimal places
219
+ }
220
+ /**
221
+ * Map Gemini's finish reasons to our standard format
222
+ */
223
+ mapFinishReason(reason) {
224
+ switch (reason) {
225
+ case 'STOP':
226
+ return 'completed';
227
+ case 'MAX_TOKENS':
228
+ return 'length';
229
+ case 'SAFETY':
230
+ case 'RECITATION':
231
+ return 'stop';
232
+ default:
233
+ return 'error';
234
+ }
235
+ }
236
+ /**
237
+ * Get default prompt for image analysis type
238
+ */
239
+ getDefaultImagePrompt(analysisType) {
240
+ switch (analysisType) {
241
+ case 'product-identification':
242
+ return 'Please identify the product in this image. Describe what it is, any visible brand names, key features, and specifications you can see.';
243
+ case 'text-extraction':
244
+ return 'Please extract all visible text from this image, maintaining the original formatting as much as possible.';
245
+ case 'general-description':
246
+ return 'Please provide a detailed description of what you see in this image.';
247
+ default:
248
+ return 'Please analyze this image and describe what you see.';
249
+ }
250
+ }
251
+ /**
252
+ * Fetch image from URL and convert to base64
253
+ */
254
+ async fetchImageAsBase64(url) {
255
+ try {
256
+ // In Node.js environment
257
+ if (typeof fetch !== 'undefined') {
258
+ const response = await fetch(url);
259
+ const arrayBuffer = await response.arrayBuffer();
260
+ const buffer = Buffer.from(arrayBuffer);
261
+ return buffer.toString('base64');
262
+ }
263
+ else {
264
+ // Fallback for environments without fetch
265
+ throw new Error('Image URL fetching not supported in this environment. Please use base64 instead.');
266
+ }
267
+ }
268
+ catch (error) {
269
+ throw new Error(`Failed to fetch image from URL: ${error}`);
270
+ }
271
+ }
272
+ /**
273
+ * Dynamically import Google Generative AI SDK
274
+ */
275
+ async getGeminiSDK() {
276
+ try {
277
+ return await Promise.resolve().then(() => __importStar(require('@google/generative-ai')));
278
+ }
279
+ catch (error) {
280
+ throw new Error('Google Generative AI SDK not found. Please install @google/generative-ai: npm install @google/generative-ai');
281
+ }
282
+ }
283
+ }
284
+ exports.GeminiProvider = GeminiProvider;
285
+ //# sourceMappingURL=gemini.provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.provider.js","sourceRoot":"","sources":["../../src/providers/gemini.provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { BaseProvider } from './base.provider';
2
+ import { TextGenerationRequest, TextGenerationResponse, ImageAnalysisRequest, ImageAnalysisResponse, ProviderInfo, ProviderConfig } from '../types';
3
+ /**
4
+ * Google Lens provider implementation using Cloud Vision API
5
+ * Specialized for product identification and visual search
6
+ */
7
+ export declare class GoogleLensProvider 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
+ * Build the image request object for Vision API
15
+ */
16
+ private buildImageRequest;
17
+ /**
18
+ * Get the appropriate features for analysis type
19
+ */
20
+ private getAnalysisFeatures;
21
+ /**
22
+ * Parse Vision API results into our standard format
23
+ */
24
+ private parseVisionResult;
25
+ /**
26
+ * Build a description from various Vision API results
27
+ */
28
+ private buildDescription;
29
+ /**
30
+ * Calculate overall confidence from all detections
31
+ */
32
+ private calculateOverallConfidence;
33
+ /**
34
+ * Map Vision API objects to our standard format
35
+ */
36
+ private mapDetectedObjects;
37
+ /**
38
+ * Map Vision API bounding poly to our standard bounding box
39
+ */
40
+ private mapBoundingBox;
41
+ /**
42
+ * Extract product information from product search results
43
+ */
44
+ private extractProductInfo;
45
+ /**
46
+ * Calculate estimated cost based on analysis type
47
+ */
48
+ private calculateCost;
49
+ /**
50
+ * Create Vision client with appropriate authentication
51
+ */
52
+ private createVisionClient;
53
+ /**
54
+ * Dynamically import Google Cloud Vision SDK
55
+ */
56
+ private getVisionSDK;
57
+ }
58
+ //# sourceMappingURL=google-lens.provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"google-lens.provider.d.ts","sourceRoot":"","sources":["../../src/providers/google-lens.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,EAIf,MAAM,UAAU,CAAC;AAElB;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;gBACtC,MAAM,EAAE,cAAc;IAI5B,YAAY,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAqB7E,YAAY,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA+DjF,OAAO,IAAI,YAAY;IA4BvB,SAAS,CAAC,eAAe,IAAI,MAAM;IAInC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAUzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA6B3B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAwCxB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAoBlC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAQ1B;;OAEG;IACH,OAAO,CAAC,cAAc;IAoBtB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoB1B;;OAEG;YACW,YAAY;CAO3B"}