@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,258 @@
|
|
|
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.OpenAIProvider = void 0;
|
|
37
|
+
const base_provider_1 = require("./base.provider");
|
|
38
|
+
/**
|
|
39
|
+
* OpenAI provider implementation
|
|
40
|
+
* Supports GPT models for text generation
|
|
41
|
+
*/
|
|
42
|
+
class OpenAIProvider extends base_provider_1.BaseProvider {
|
|
43
|
+
constructor(config) {
|
|
44
|
+
super('openai', config);
|
|
45
|
+
}
|
|
46
|
+
async generateText(request) {
|
|
47
|
+
var _a, _b, _c, _d;
|
|
48
|
+
const startTime = Date.now();
|
|
49
|
+
const requestId = this.generateRequestId();
|
|
50
|
+
try {
|
|
51
|
+
this.validateRequest(request);
|
|
52
|
+
await this.applyRateLimit();
|
|
53
|
+
// Import OpenAI SDK dynamically
|
|
54
|
+
const OpenAI = await this.getOpenAISDK();
|
|
55
|
+
// Use user API key if provided, otherwise platform key
|
|
56
|
+
const apiKey = this.getApiKey(request.userApiKey);
|
|
57
|
+
const client = new OpenAI({ apiKey });
|
|
58
|
+
const messages = [];
|
|
59
|
+
// Add system message if provided
|
|
60
|
+
if (request.systemPrompt) {
|
|
61
|
+
messages.push({ role: 'system', content: request.systemPrompt });
|
|
62
|
+
}
|
|
63
|
+
messages.push({ role: 'user', content: request.prompt });
|
|
64
|
+
const response = await client.chat.completions.create({
|
|
65
|
+
model: request.model,
|
|
66
|
+
messages,
|
|
67
|
+
max_tokens: request.maxTokens || 1000,
|
|
68
|
+
temperature: request.temperature || 0.7,
|
|
69
|
+
stop: request.stopSequences || undefined
|
|
70
|
+
});
|
|
71
|
+
const processingTime = Date.now() - startTime;
|
|
72
|
+
const choice = response.choices[0];
|
|
73
|
+
const usage = {
|
|
74
|
+
inputTokens: ((_a = response.usage) === null || _a === void 0 ? void 0 : _a.prompt_tokens) || 0,
|
|
75
|
+
outputTokens: ((_b = response.usage) === null || _b === void 0 ? void 0 : _b.completion_tokens) || 0,
|
|
76
|
+
totalTokens: ((_c = response.usage) === null || _c === void 0 ? void 0 : _c.total_tokens) || 0,
|
|
77
|
+
estimatedCost: this.calculateCost(response.usage, request.model),
|
|
78
|
+
processingTimeMs: processingTime
|
|
79
|
+
};
|
|
80
|
+
return Object.assign(Object.assign({}, this.createBaseResponse(requestId, usage)), { model: request.model, text: ((_d = choice.message) === null || _d === void 0 ? void 0 : _d.content) || '', finishReason: this.mapFinishReason(choice.finish_reason) });
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
const processingTime = Date.now() - startTime;
|
|
84
|
+
return Object.assign(Object.assign({}, this.handleProviderError(error, requestId, request.model)), { text: '', finishReason: 'error', usage: {
|
|
85
|
+
inputTokens: 0,
|
|
86
|
+
outputTokens: 0,
|
|
87
|
+
totalTokens: 0,
|
|
88
|
+
processingTimeMs: processingTime
|
|
89
|
+
} });
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async analyzeImage(request) {
|
|
93
|
+
var _a, _b, _c, _d;
|
|
94
|
+
const startTime = Date.now();
|
|
95
|
+
const requestId = this.generateRequestId();
|
|
96
|
+
try {
|
|
97
|
+
this.validateRequest(request);
|
|
98
|
+
await this.applyRateLimit();
|
|
99
|
+
// Import OpenAI SDK dynamically
|
|
100
|
+
const OpenAI = await this.getOpenAISDK();
|
|
101
|
+
// Use user API key if provided, otherwise platform key
|
|
102
|
+
const apiKey = this.getApiKey(request.userApiKey);
|
|
103
|
+
const client = new OpenAI({ apiKey });
|
|
104
|
+
// Prepare image content
|
|
105
|
+
let imageContent;
|
|
106
|
+
if (request.imageUrl) {
|
|
107
|
+
imageContent = {
|
|
108
|
+
type: "image_url",
|
|
109
|
+
image_url: { url: request.imageUrl }
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
else if (request.imageBase64) {
|
|
113
|
+
imageContent = {
|
|
114
|
+
type: "image_url",
|
|
115
|
+
image_url: { url: `data:image/jpeg;base64,${request.imageBase64}` }
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
throw new Error('Either imageUrl or imageBase64 is required');
|
|
120
|
+
}
|
|
121
|
+
const prompt = request.prompt || this.getDefaultImagePrompt(request.analysisType);
|
|
122
|
+
const response = await client.chat.completions.create({
|
|
123
|
+
model: request.model,
|
|
124
|
+
messages: [
|
|
125
|
+
{
|
|
126
|
+
role: "user",
|
|
127
|
+
content: [
|
|
128
|
+
{ type: "text", text: prompt },
|
|
129
|
+
imageContent
|
|
130
|
+
]
|
|
131
|
+
}
|
|
132
|
+
],
|
|
133
|
+
max_tokens: 1000
|
|
134
|
+
});
|
|
135
|
+
const processingTime = Date.now() - startTime;
|
|
136
|
+
const choice = response.choices[0];
|
|
137
|
+
const usage = {
|
|
138
|
+
inputTokens: ((_a = response.usage) === null || _a === void 0 ? void 0 : _a.prompt_tokens) || 0,
|
|
139
|
+
outputTokens: ((_b = response.usage) === null || _b === void 0 ? void 0 : _b.completion_tokens) || 0,
|
|
140
|
+
totalTokens: ((_c = response.usage) === null || _c === void 0 ? void 0 : _c.total_tokens) || 0,
|
|
141
|
+
estimatedCost: this.calculateCost(response.usage, request.model),
|
|
142
|
+
processingTimeMs: processingTime
|
|
143
|
+
};
|
|
144
|
+
return Object.assign(Object.assign({}, this.createBaseResponse(requestId, usage)), { model: request.model, analysis: {
|
|
145
|
+
description: ((_d = choice.message) === null || _d === void 0 ? void 0 : _d.content) || '',
|
|
146
|
+
confidence: 0.8, // OpenAI doesn't provide confidence scores
|
|
147
|
+
detectedObjects: [], // Would need additional processing
|
|
148
|
+
extractedText: '', // Would need OCR-specific prompt
|
|
149
|
+
} });
|
|
150
|
+
}
|
|
151
|
+
catch (error) {
|
|
152
|
+
const processingTime = Date.now() - startTime;
|
|
153
|
+
return Object.assign(Object.assign({}, this.handleProviderError(error, requestId, request.model)), { analysis: {
|
|
154
|
+
description: '',
|
|
155
|
+
detectedObjects: [],
|
|
156
|
+
extractedText: ''
|
|
157
|
+
}, usage: {
|
|
158
|
+
inputTokens: 0,
|
|
159
|
+
outputTokens: 0,
|
|
160
|
+
totalTokens: 0,
|
|
161
|
+
processingTimeMs: processingTime
|
|
162
|
+
} });
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
getInfo() {
|
|
166
|
+
return {
|
|
167
|
+
name: 'openai',
|
|
168
|
+
displayName: 'OpenAI',
|
|
169
|
+
availableModels: [
|
|
170
|
+
{
|
|
171
|
+
id: 'gpt-4o',
|
|
172
|
+
displayName: 'GPT-4o',
|
|
173
|
+
contextWindow: 128000,
|
|
174
|
+
costPer1kTokens: { input: 0.005, output: 0.015 }
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
id: 'gpt-4o-mini',
|
|
178
|
+
displayName: 'GPT-4o Mini',
|
|
179
|
+
contextWindow: 128000,
|
|
180
|
+
costPer1kTokens: { input: 0.00015, output: 0.0006 }
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
id: 'gpt-4-turbo',
|
|
184
|
+
displayName: 'GPT-4 Turbo',
|
|
185
|
+
contextWindow: 128000,
|
|
186
|
+
costPer1kTokens: { input: 0.01, output: 0.03 }
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
id: 'gpt-3.5-turbo',
|
|
190
|
+
displayName: 'GPT-3.5 Turbo',
|
|
191
|
+
contextWindow: 16385,
|
|
192
|
+
costPer1kTokens: { input: 0.0005, output: 0.0015 }
|
|
193
|
+
}
|
|
194
|
+
],
|
|
195
|
+
supportedFeatures: ['text-generation', 'image-analysis']
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
getApiKeyEnvVar() {
|
|
199
|
+
return 'OPENAI_API_KEY';
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Calculate estimated cost based on usage and model
|
|
203
|
+
*/
|
|
204
|
+
calculateCost(usage, model) {
|
|
205
|
+
if (!usage)
|
|
206
|
+
return 0;
|
|
207
|
+
const modelInfo = this.getInfo().availableModels.find((m) => m.id === model);
|
|
208
|
+
if (!(modelInfo === null || modelInfo === void 0 ? void 0 : modelInfo.costPer1kTokens))
|
|
209
|
+
return 0;
|
|
210
|
+
const inputCost = (usage.prompt_tokens / 1000) * modelInfo.costPer1kTokens.input;
|
|
211
|
+
const outputCost = (usage.completion_tokens / 1000) * modelInfo.costPer1kTokens.output;
|
|
212
|
+
return Math.round((inputCost + outputCost) * 100000) / 100000; // Round to 5 decimal places
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Map OpenAI's finish reasons to our standard format
|
|
216
|
+
*/
|
|
217
|
+
mapFinishReason(reason) {
|
|
218
|
+
switch (reason) {
|
|
219
|
+
case 'stop':
|
|
220
|
+
return 'completed';
|
|
221
|
+
case 'length':
|
|
222
|
+
return 'length';
|
|
223
|
+
case 'content_filter':
|
|
224
|
+
return 'stop';
|
|
225
|
+
default:
|
|
226
|
+
return 'error';
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Get default prompt for image analysis type
|
|
231
|
+
*/
|
|
232
|
+
getDefaultImagePrompt(analysisType) {
|
|
233
|
+
switch (analysisType) {
|
|
234
|
+
case 'product-identification':
|
|
235
|
+
return 'Please identify the product in this image. Describe what it is, any visible brand names, and key features.';
|
|
236
|
+
case 'text-extraction':
|
|
237
|
+
return 'Please extract all visible text from this image.';
|
|
238
|
+
case 'general-description':
|
|
239
|
+
return 'Please describe what you see in this image in detail.';
|
|
240
|
+
default:
|
|
241
|
+
return 'Please analyze this image and describe what you see.';
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Dynamically import OpenAI SDK
|
|
246
|
+
*/
|
|
247
|
+
async getOpenAISDK() {
|
|
248
|
+
try {
|
|
249
|
+
const module = await Promise.resolve().then(() => __importStar(require('openai')));
|
|
250
|
+
return module.default || module;
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
throw new Error('OpenAI SDK not found. Please install openai: npm install openai');
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
exports.OpenAIProvider = OpenAIProvider;
|
|
258
|
+
//# sourceMappingURL=openai.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai.provider.js","sourceRoot":"","sources":["../../src/providers/openai.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider configuration interface
|
|
3
|
+
*/
|
|
4
|
+
export interface ProviderConfig {
|
|
5
|
+
name: string;
|
|
6
|
+
enabled: boolean;
|
|
7
|
+
defaultModel: string;
|
|
8
|
+
timeout: number;
|
|
9
|
+
maxRetries: number;
|
|
10
|
+
rateLimits?: {
|
|
11
|
+
requestsPerMinute: number;
|
|
12
|
+
tokensPerMinute: number;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Provider information for client queries
|
|
17
|
+
*/
|
|
18
|
+
export interface ProviderInfo {
|
|
19
|
+
name: string;
|
|
20
|
+
displayName: string;
|
|
21
|
+
availableModels: ModelInfo[];
|
|
22
|
+
supportedFeatures: ('text-generation' | 'image-analysis')[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Model information
|
|
26
|
+
*/
|
|
27
|
+
export interface ModelInfo {
|
|
28
|
+
id: string;
|
|
29
|
+
displayName: string;
|
|
30
|
+
contextWindow: number;
|
|
31
|
+
costPer1kTokens?: {
|
|
32
|
+
input: number;
|
|
33
|
+
output: number;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Detected object in image analysis
|
|
38
|
+
*/
|
|
39
|
+
export interface DetectedObject {
|
|
40
|
+
name: string;
|
|
41
|
+
confidence: number;
|
|
42
|
+
boundingBox?: BoundingBox;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Product information from Google Lens
|
|
46
|
+
*/
|
|
47
|
+
export interface ProductInfo {
|
|
48
|
+
name?: string;
|
|
49
|
+
brand?: string;
|
|
50
|
+
description?: string;
|
|
51
|
+
price?: string;
|
|
52
|
+
availability?: string;
|
|
53
|
+
urls?: string[];
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Bounding box coordinates
|
|
57
|
+
*/
|
|
58
|
+
export interface BoundingBox {
|
|
59
|
+
x: number;
|
|
60
|
+
y: number;
|
|
61
|
+
width: number;
|
|
62
|
+
height: number;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=providers.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.types.d.ts","sourceRoot":"","sources":["../../src/providers/providers.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE;QACX,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,SAAS,EAAE,CAAC;IAC7B,iBAAiB,EAAE,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,EAAE,CAAC;CAC7D;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"providers.types.js","sourceRoot":"","sources":["../../src/providers/providers.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { DetectedObject, ProductInfo } from './providers/providers.types';
|
|
2
|
+
/**
|
|
3
|
+
* Base request interface for all LLM operations
|
|
4
|
+
*/
|
|
5
|
+
export interface BaseRequest {
|
|
6
|
+
provider: string;
|
|
7
|
+
model: string;
|
|
8
|
+
userApiKey?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Text generation request
|
|
12
|
+
*/
|
|
13
|
+
export interface TextGenerationRequest extends BaseRequest {
|
|
14
|
+
prompt: string;
|
|
15
|
+
maxTokens?: number;
|
|
16
|
+
temperature?: number;
|
|
17
|
+
systemPrompt?: string;
|
|
18
|
+
stopSequences?: string[];
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Image analysis request
|
|
22
|
+
*/
|
|
23
|
+
export interface ImageAnalysisRequest extends BaseRequest {
|
|
24
|
+
imageUrl?: string;
|
|
25
|
+
imageBase64?: string;
|
|
26
|
+
analysisType: 'product-identification' | 'general-description' | 'text-extraction';
|
|
27
|
+
prompt?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Usage metrics for cost tracking
|
|
31
|
+
*/
|
|
32
|
+
export interface UsageMetrics {
|
|
33
|
+
inputTokens: number;
|
|
34
|
+
outputTokens: number;
|
|
35
|
+
totalTokens: number;
|
|
36
|
+
estimatedCost?: number;
|
|
37
|
+
processingTimeMs: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Base response interface
|
|
41
|
+
*/
|
|
42
|
+
export interface BaseResponse {
|
|
43
|
+
success: boolean;
|
|
44
|
+
error?: string;
|
|
45
|
+
usage: UsageMetrics;
|
|
46
|
+
provider: string;
|
|
47
|
+
model: string;
|
|
48
|
+
requestId: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Text generation response
|
|
52
|
+
*/
|
|
53
|
+
export interface TextGenerationResponse extends BaseResponse {
|
|
54
|
+
text: string;
|
|
55
|
+
finishReason: 'completed' | 'length' | 'stop' | 'error';
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Image analysis response
|
|
59
|
+
*/
|
|
60
|
+
export interface ImageAnalysisResponse extends BaseResponse {
|
|
61
|
+
analysis: {
|
|
62
|
+
description: string;
|
|
63
|
+
confidence?: number;
|
|
64
|
+
detectedObjects?: DetectedObject[];
|
|
65
|
+
extractedText?: string;
|
|
66
|
+
productInfo?: ProductInfo;
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=requests.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requests.types.d.ts","sourceRoot":"","sources":["../src/requests.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1E;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAqB,SAAQ,WAAW;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,wBAAwB,GAAG,qBAAqB,GAAG,iBAAiB,CAAC;IACnF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,YAAY;IAC1D,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;CACzD;AAED;;GAEG;AACH,MAAM,WAAW,qBAAsB,SAAQ,YAAY;IACzD,QAAQ,EAAE;QACR,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;QACnC,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,WAAW,CAAC,EAAE,WAAW,CAAC;KAC3B,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requests.types.js","sourceRoot":"","sources":["../src/requests.types.ts"],"names":[],"mappings":""}
|
package/lib/types.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,kBAAkB,CAAC;AAGjC,cAAc,6BAA6B,CAAC"}
|
package/lib/types.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Central types file for LLM Connector
|
|
4
|
+
* Re-exports all types from request and provider type files
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
18
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
// Re-export all request/response types
|
|
22
|
+
__exportStar(require("./requests.types"), exports);
|
|
23
|
+
// Re-export all provider types
|
|
24
|
+
__exportStar(require("./providers/providers.types"), exports);
|
|
25
|
+
//# sourceMappingURL=types.js.map
|
package/lib/types.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,uCAAuC;AACvC,mDAAiC;AAEjC,+BAA+B;AAC/B,8DAA4C"}
|
package/package.json
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@xbg.solutions/utils-llm-connector",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "LLM integration with OpenAI, Claude, and Gemini",
|
|
5
|
+
"main": "lib/index.js",
|
|
6
|
+
"types": "lib/index.d.ts",
|
|
7
|
+
"files": [
|
|
8
|
+
"lib"
|
|
9
|
+
],
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"build:watch": "tsc --watch",
|
|
13
|
+
"clean": "rm -rf lib",
|
|
14
|
+
"prepublishOnly": "npm run build"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@xbg/utils-logger": "^1.0.0",
|
|
18
|
+
"axios": "^1.6.2"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@types/node": "^20.11.0",
|
|
22
|
+
"typescript": "^5.3.3"
|
|
23
|
+
},
|
|
24
|
+
"engines": {
|
|
25
|
+
"node": "22"
|
|
26
|
+
},
|
|
27
|
+
"publishConfig": {
|
|
28
|
+
"access": "public"
|
|
29
|
+
}
|
|
30
|
+
}
|