@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.
- package/lib/index.d.ts +16 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +54 -0
- package/lib/index.js.map +1 -0
- package/lib/llm-connector.d.ts +67 -0
- package/lib/llm-connector.d.ts.map +1 -0
- package/lib/llm-connector.js +206 -0
- package/lib/llm-connector.js.map +1 -0
- package/lib/providers/base.provider.d.ts +51 -0
- package/lib/providers/base.provider.d.ts.map +1 -0
- package/lib/providers/base.provider.js +106 -0
- package/lib/providers/base.provider.js.map +1 -0
- package/lib/providers/claude.provider.d.ts +26 -0
- package/lib/providers/claude.provider.d.ts.map +1 -0
- package/lib/providers/claude.provider.js +180 -0
- package/lib/providers/claude.provider.js.map +1 -0
- package/lib/providers/gemini.provider.d.ts +34 -0
- package/lib/providers/gemini.provider.d.ts.map +1 -0
- package/lib/providers/gemini.provider.js +285 -0
- package/lib/providers/gemini.provider.js.map +1 -0
- package/lib/providers/google-lens.provider.d.ts +58 -0
- package/lib/providers/google-lens.provider.d.ts.map +1 -0
- package/lib/providers/google-lens.provider.js +354 -0
- package/lib/providers/google-lens.provider.js.map +1 -0
- package/lib/providers/index.d.ts +6 -0
- package/lib/providers/index.d.ts.map +1 -0
- package/lib/providers/index.js +16 -0
- package/lib/providers/index.js.map +1 -0
- package/lib/providers/openai.provider.d.ts +30 -0
- package/lib/providers/openai.provider.d.ts.map +1 -0
- package/lib/providers/openai.provider.js +258 -0
- package/lib/providers/openai.provider.js.map +1 -0
- package/lib/providers/providers.types.d.ts +64 -0
- package/lib/providers/providers.types.d.ts.map +1 -0
- package/lib/providers/providers.types.js +3 -0
- package/lib/providers/providers.types.js.map +1 -0
- package/lib/requests.types.d.ts +69 -0
- package/lib/requests.types.d.ts.map +1 -0
- package/lib/requests.types.js +3 -0
- package/lib/requests.types.js.map +1 -0
- package/lib/types.d.ts +7 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +25 -0
- package/lib/types.js.map +1 -0
- 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"}
|