@lapage/llm-service 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/README.md +137 -0
- package/dist/client.d.ts +29 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +66 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +5 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +76 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/mappers.d.ts +20 -0
- package/dist/mappers.d.ts.map +1 -0
- package/dist/mappers.js +138 -0
- package/dist/mappers.js.map +1 -0
- package/dist/service.d.ts +34 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +351 -0
- package/dist/service.js.map +1 -0
- package/dist/types.d.ts +62 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +56 -0
package/README.md
ADDED
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# @lapage/llm-service
|
|
2
|
+
|
|
3
|
+
Unified TypeScript service wrapper for OpenAI, Claude, and Gemini APIs.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- One service interface for multiple providers.
|
|
8
|
+
- Chat completion and streaming support.
|
|
9
|
+
- Embeddings support across OpenAI and Gemini.
|
|
10
|
+
- OpenAI-only helpers for images, moderation, and transcription.
|
|
11
|
+
- Consistent response shape with error handling.
|
|
12
|
+
|
|
13
|
+
## Installation
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install @lapage/llm-service
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Quick Start
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
import { LLMService } from '@lapage/llm-service';
|
|
23
|
+
|
|
24
|
+
const service = new LLMService({
|
|
25
|
+
provider: 'openai',
|
|
26
|
+
apiKey: process.env.OPENAI_API_KEY!,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
const result = await service.createChatCompletion([
|
|
30
|
+
{ role: 'system', content: 'You are a helpful assistant.' },
|
|
31
|
+
{ role: 'user', content: 'Write one sentence about TypeScript.' },
|
|
32
|
+
]);
|
|
33
|
+
|
|
34
|
+
if (result.success) {
|
|
35
|
+
console.log(result.content);
|
|
36
|
+
} else {
|
|
37
|
+
console.error(result.error);
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Provider Helpers
|
|
42
|
+
|
|
43
|
+
```ts
|
|
44
|
+
import {
|
|
45
|
+
OpenAIService,
|
|
46
|
+
ClaudeService,
|
|
47
|
+
GeminiService,
|
|
48
|
+
createOpenAIService,
|
|
49
|
+
createClaudeService,
|
|
50
|
+
createGeminiService,
|
|
51
|
+
} from '@lapage/llm-service';
|
|
52
|
+
|
|
53
|
+
const openai = new OpenAIService(process.env.OPENAI_API_KEY!);
|
|
54
|
+
const claude = createClaudeService(process.env.ANTHROPIC_API_KEY!);
|
|
55
|
+
const gemini = new GeminiService(process.env.GEMINI_API_KEY!);
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## API
|
|
59
|
+
|
|
60
|
+
### LLMService Constructor
|
|
61
|
+
|
|
62
|
+
```ts
|
|
63
|
+
new LLMService(configOrApiKey, organization?)
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
You can pass either:
|
|
67
|
+
|
|
68
|
+
- apiKey string (defaults provider to openai)
|
|
69
|
+
- options object:
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
interface LLMServiceOptions {
|
|
73
|
+
provider?: 'openai' | 'claude' | 'gemini';
|
|
74
|
+
apiKey: string;
|
|
75
|
+
organization?: string;
|
|
76
|
+
baseURL?: string;
|
|
77
|
+
timeout?: number;
|
|
78
|
+
maxRetries?: number;
|
|
79
|
+
apiVersion?: string;
|
|
80
|
+
vertexAI?: boolean;
|
|
81
|
+
project?: string;
|
|
82
|
+
location?: string;
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Methods
|
|
87
|
+
|
|
88
|
+
- createChatCompletion(messages, model?, temperature?, maxTokens?)
|
|
89
|
+
- createChatCompletionStream(messages, model?, temperature?, maxTokens?)
|
|
90
|
+
- createEmbeddings(input, model?)
|
|
91
|
+
- generateImage(prompt, n?, size?, quality?)
|
|
92
|
+
- createModeration(input)
|
|
93
|
+
- createTranscription(audioFilePath, options?)
|
|
94
|
+
|
|
95
|
+
All methods return:
|
|
96
|
+
|
|
97
|
+
```ts
|
|
98
|
+
interface LLMServiceResponse<T> {
|
|
99
|
+
success: boolean;
|
|
100
|
+
data?: T;
|
|
101
|
+
content?: string;
|
|
102
|
+
stream?: AsyncIterable<unknown>;
|
|
103
|
+
images?: unknown[];
|
|
104
|
+
results?: unknown[];
|
|
105
|
+
error?: {
|
|
106
|
+
status?: number;
|
|
107
|
+
type?: string;
|
|
108
|
+
message: string;
|
|
109
|
+
requestId?: string;
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Provider Notes
|
|
115
|
+
|
|
116
|
+
- OpenAI: supports all methods.
|
|
117
|
+
- Claude: supports chat and stream. Embeddings/images/moderation/transcription return unsupported operation errors.
|
|
118
|
+
- Gemini: supports chat, stream, and embeddings. Images/moderation/transcription return unsupported operation errors.
|
|
119
|
+
- Default model aliases are mapped by provider for convenience:
|
|
120
|
+
- chat default gpt-4o-mini maps to claude-sonnet-4-5 and gemini-2.5-flash
|
|
121
|
+
- stream default gpt-4o maps to claude-sonnet-4-5 and gemini-2.5-flash
|
|
122
|
+
- embeddings default text-embedding-3-small maps to text-embedding-004 on gemini
|
|
123
|
+
|
|
124
|
+
## Streaming Example
|
|
125
|
+
|
|
126
|
+
```ts
|
|
127
|
+
const streamResult = await service.createChatCompletionStream([
|
|
128
|
+
{ role: 'user', content: 'Stream a short explanation of recursion.' },
|
|
129
|
+
]);
|
|
130
|
+
|
|
131
|
+
if (streamResult.success && streamResult.stream) {
|
|
132
|
+
for await (const chunk of streamResult.stream) {
|
|
133
|
+
console.log(chunk);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export * from './types';
|
|
2
|
+
export { LLMService } from './service';
|
|
3
|
+
import { LLMService } from './service';
|
|
4
|
+
import type { LLMServiceOptions } from './types';
|
|
5
|
+
export declare class OpenAIService extends LLMService {
|
|
6
|
+
constructor(apiKey: string, organization?: string);
|
|
7
|
+
}
|
|
8
|
+
export declare class ClaudeService extends LLMService {
|
|
9
|
+
constructor(apiKey: string, baseURL?: string);
|
|
10
|
+
}
|
|
11
|
+
export declare class GeminiService extends LLMService {
|
|
12
|
+
constructor(apiKey: string, baseURL?: string);
|
|
13
|
+
}
|
|
14
|
+
export declare const createLLMService: (configOrApiKey: string | LLMServiceOptions, organization?: string) => LLMService;
|
|
15
|
+
export declare const createOpenAIService: (apiKey: string, organization?: string) => OpenAIService;
|
|
16
|
+
export declare const createClaudeService: (apiKey: string, baseURL?: string) => ClaudeService;
|
|
17
|
+
export declare const createGeminiService: (apiKey: string, baseURL?: string) => GeminiService;
|
|
18
|
+
declare const _default: {
|
|
19
|
+
LLMService: typeof LLMService;
|
|
20
|
+
createLLMService: (configOrApiKey: string | LLMServiceOptions, organization?: string) => LLMService;
|
|
21
|
+
OpenAIService: typeof OpenAIService;
|
|
22
|
+
createOpenAIService: (apiKey: string, organization?: string) => OpenAIService;
|
|
23
|
+
ClaudeService: typeof ClaudeService;
|
|
24
|
+
createClaudeService: (apiKey: string, baseURL?: string) => ClaudeService;
|
|
25
|
+
GeminiService: typeof GeminiService;
|
|
26
|
+
createGeminiService: (apiKey: string, baseURL?: string) => GeminiService;
|
|
27
|
+
};
|
|
28
|
+
export default _default;
|
|
29
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../client.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEjD,qBAAa,aAAc,SAAQ,UAAU;gBAC/B,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;CAGlD;AAED,qBAAa,aAAc,SAAQ,UAAU;gBAC/B,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAG7C;AAED,qBAAa,aAAc,SAAQ,UAAU;gBAC/B,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM;CAG7C;AAED,eAAO,MAAM,gBAAgB,GAC3B,gBAAgB,MAAM,GAAG,iBAAiB,EAC1C,eAAe,MAAM,KACpB,UAEF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,MAAM,EACd,eAAe,MAAM,KACpB,aAEF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,MAAM,EACd,UAAU,MAAM,KACf,aAEF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,MAAM,EACd,UAAU,MAAM,KACf,aAEF,CAAC;;;uCAzBgB,MAAM,GAAG,iBAAiB,iBAC3B,MAAM,KACpB,UAAU;;kCAKH,MAAM,iBACC,MAAM,KACpB,aAAa;;kCAKN,MAAM,YACJ,MAAM,KACf,aAAa;;kCAKN,MAAM,YACJ,MAAM,KACf,aAAa;;AAIhB,wBASE"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
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.createGeminiService = exports.createClaudeService = exports.createOpenAIService = exports.createLLMService = exports.GeminiService = exports.ClaudeService = exports.OpenAIService = exports.LLMService = void 0;
|
|
18
|
+
__exportStar(require("./types"), exports);
|
|
19
|
+
var service_1 = require("./service");
|
|
20
|
+
Object.defineProperty(exports, "LLMService", { enumerable: true, get: function () { return service_1.LLMService; } });
|
|
21
|
+
const service_2 = require("./service");
|
|
22
|
+
class OpenAIService extends service_2.LLMService {
|
|
23
|
+
constructor(apiKey, organization) {
|
|
24
|
+
super({ provider: 'openai', apiKey, organization });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.OpenAIService = OpenAIService;
|
|
28
|
+
class ClaudeService extends service_2.LLMService {
|
|
29
|
+
constructor(apiKey, baseURL) {
|
|
30
|
+
super({ provider: 'claude', apiKey, baseURL });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.ClaudeService = ClaudeService;
|
|
34
|
+
class GeminiService extends service_2.LLMService {
|
|
35
|
+
constructor(apiKey, baseURL) {
|
|
36
|
+
super({ provider: 'gemini', apiKey, baseURL });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.GeminiService = GeminiService;
|
|
40
|
+
const createLLMService = (configOrApiKey, organization) => {
|
|
41
|
+
return new service_2.LLMService(configOrApiKey, organization);
|
|
42
|
+
};
|
|
43
|
+
exports.createLLMService = createLLMService;
|
|
44
|
+
const createOpenAIService = (apiKey, organization) => {
|
|
45
|
+
return new OpenAIService(apiKey, organization);
|
|
46
|
+
};
|
|
47
|
+
exports.createOpenAIService = createOpenAIService;
|
|
48
|
+
const createClaudeService = (apiKey, baseURL) => {
|
|
49
|
+
return new ClaudeService(apiKey, baseURL);
|
|
50
|
+
};
|
|
51
|
+
exports.createClaudeService = createClaudeService;
|
|
52
|
+
const createGeminiService = (apiKey, baseURL) => {
|
|
53
|
+
return new GeminiService(apiKey, baseURL);
|
|
54
|
+
};
|
|
55
|
+
exports.createGeminiService = createGeminiService;
|
|
56
|
+
exports.default = {
|
|
57
|
+
LLMService: service_2.LLMService,
|
|
58
|
+
createLLMService: exports.createLLMService,
|
|
59
|
+
OpenAIService,
|
|
60
|
+
createOpenAIService: exports.createOpenAIService,
|
|
61
|
+
ClaudeService,
|
|
62
|
+
createClaudeService: exports.createClaudeService,
|
|
63
|
+
GeminiService,
|
|
64
|
+
createGeminiService: exports.createGeminiService,
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,qCAAuC;AAA9B,qGAAA,UAAU,OAAA;AAEnB,uCAAuC;AAGvC,MAAa,aAAc,SAAQ,oBAAU;IAC3C,YAAY,MAAc,EAAE,YAAqB;QAC/C,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IACtD,CAAC;CACF;AAJD,sCAIC;AAED,MAAa,aAAc,SAAQ,oBAAU;IAC3C,YAAY,MAAc,EAAE,OAAgB;QAC1C,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;CACF;AAJD,sCAIC;AAED,MAAa,aAAc,SAAQ,oBAAU;IAC3C,YAAY,MAAc,EAAE,OAAgB;QAC1C,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;CACF;AAJD,sCAIC;AAEM,MAAM,gBAAgB,GAAG,CAC9B,cAA0C,EAC1C,YAAqB,EACT,EAAE;IACd,OAAO,IAAI,oBAAU,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;AACtD,CAAC,CAAC;AALW,QAAA,gBAAgB,oBAK3B;AAEK,MAAM,mBAAmB,GAAG,CACjC,MAAc,EACd,YAAqB,EACN,EAAE;IACjB,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AACjD,CAAC,CAAC;AALW,QAAA,mBAAmB,uBAK9B;AAEK,MAAM,mBAAmB,GAAG,CACjC,MAAc,EACd,OAAgB,EACD,EAAE;IACjB,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC,CAAC;AALW,QAAA,mBAAmB,uBAK9B;AAEK,MAAM,mBAAmB,GAAG,CACjC,MAAc,EACd,OAAgB,EACD,EAAE;IACjB,OAAO,IAAI,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC,CAAC;AALW,QAAA,mBAAmB,uBAK9B;AAEF,kBAAe;IACb,UAAU,EAAV,oBAAU;IACV,gBAAgB,EAAhB,wBAAgB;IAChB,aAAa;IACb,mBAAmB,EAAnB,2BAAmB;IACnB,aAAa;IACb,mBAAmB,EAAnB,2BAAmB;IACnB,aAAa;IACb,mBAAmB,EAAnB,2BAAmB;CACpB,CAAC"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { LLMServiceResponse } from './types';
|
|
2
|
+
export declare const extractRequestId: (headers: Headers | undefined) => string | undefined;
|
|
3
|
+
export declare const buildErrorResponse: (error: unknown) => LLMServiceResponse<never>;
|
|
4
|
+
export declare const unsupportedOperationResponse: (provider: string, operation: string) => LLMServiceResponse<never>;
|
|
5
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../errors.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,eAAO,MAAM,gBAAgB,GAC3B,SAAS,OAAO,GAAG,SAAS,KAC3B,MAAM,GAAG,SAMX,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,OAAO,OAAO,KACb,kBAAkB,CAAC,KAAK,CAoD1B,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACvC,UAAU,MAAM,EAChB,WAAW,MAAM,KAChB,kBAAkB,CAAC,KAAK,CAO1B,CAAC"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.unsupportedOperationResponse = exports.buildErrorResponse = exports.extractRequestId = void 0;
|
|
7
|
+
const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
|
|
8
|
+
const genai_1 = require("@google/genai");
|
|
9
|
+
const openai_1 = __importDefault(require("openai"));
|
|
10
|
+
const extractRequestId = (headers) => {
|
|
11
|
+
if (!headers) {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
return headers.get('request-id') ?? headers.get('x-request-id') ?? undefined;
|
|
15
|
+
};
|
|
16
|
+
exports.extractRequestId = extractRequestId;
|
|
17
|
+
const buildErrorResponse = (error) => {
|
|
18
|
+
if (error instanceof openai_1.default.APIError) {
|
|
19
|
+
return {
|
|
20
|
+
success: false,
|
|
21
|
+
error: {
|
|
22
|
+
status: error.status,
|
|
23
|
+
type: error.name,
|
|
24
|
+
message: error.message,
|
|
25
|
+
requestId: error.requestID ?? undefined,
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
if (error instanceof sdk_1.default.APIError) {
|
|
30
|
+
return {
|
|
31
|
+
success: false,
|
|
32
|
+
error: {
|
|
33
|
+
status: error.status,
|
|
34
|
+
type: error.name,
|
|
35
|
+
message: error.message,
|
|
36
|
+
requestId: error.requestID ?? (0, exports.extractRequestId)(error.headers),
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
if (error instanceof genai_1.ApiError) {
|
|
41
|
+
return {
|
|
42
|
+
success: false,
|
|
43
|
+
error: {
|
|
44
|
+
status: error.status,
|
|
45
|
+
type: error.name,
|
|
46
|
+
message: error.message,
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (error instanceof Error) {
|
|
51
|
+
return {
|
|
52
|
+
success: false,
|
|
53
|
+
error: {
|
|
54
|
+
type: error.name,
|
|
55
|
+
message: error.message,
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
success: false,
|
|
61
|
+
error: {
|
|
62
|
+
message: 'Unknown error',
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
exports.buildErrorResponse = buildErrorResponse;
|
|
67
|
+
const unsupportedOperationResponse = (provider, operation) => {
|
|
68
|
+
return {
|
|
69
|
+
success: false,
|
|
70
|
+
error: {
|
|
71
|
+
message: `${operation} is not supported for provider: ${provider}`,
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
exports.unsupportedOperationResponse = unsupportedOperationResponse;
|
|
76
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../errors.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA0C;AAC1C,yCAA2D;AAC3D,oDAA4B;AAGrB,MAAM,gBAAgB,GAAG,CAC9B,OAA4B,EACR,EAAE;IACtB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,SAAS,CAAC;AAC/E,CAAC,CAAC;AARW,QAAA,gBAAgB,oBAQ3B;AAEK,MAAM,kBAAkB,GAAG,CAChC,KAAc,EACa,EAAE;IAC7B,IAAI,KAAK,YAAY,gBAAM,CAAC,QAAQ,EAAE,CAAC;QACrC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACL,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,SAAS;aACxC;SACF,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,YAAY,aAAS,CAAC,QAAQ,EAAE,CAAC;QACxC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACL,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAA,wBAAgB,EAAC,KAAK,CAAC,OAAO,CAAC;aAC9D;SACF,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,YAAY,gBAAc,EAAE,CAAC;QACpC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACL,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB;SACF,CAAC;IACJ,CAAC;IAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,OAAO,EAAE,KAAK;QACd,KAAK,EAAE;YACL,OAAO,EAAE,eAAe;SACzB;KACF,CAAC;AACJ,CAAC,CAAC;AAtDW,QAAA,kBAAkB,sBAsD7B;AAEK,MAAM,4BAA4B,GAAG,CAC1C,QAAgB,EAChB,SAAiB,EACU,EAAE;IAC7B,OAAO;QACL,OAAO,EAAE,KAAK;QACd,KAAK,EAAE;YACL,OAAO,EAAE,GAAG,SAAS,mCAAmC,QAAQ,EAAE;SACnE;KACF,CAAC;AACJ,CAAC,CAAC;AAVW,QAAA,4BAA4B,gCAUvC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./client"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAAyB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { MessageParam as AnthropicMessageParam } from '@anthropic-ai/sdk/resources/messages/messages';
|
|
2
|
+
import type { Content as GeminiContent, EmbedContentResponse as GeminiEmbedContentResponse } from '@google/genai';
|
|
3
|
+
import type { ChatCompletionMessageParam } from 'openai/resources/chat/completions';
|
|
4
|
+
import type { GeminiOpenAICompatibleEmbedding, LLMMessage, ParsedMessageInput } from './types';
|
|
5
|
+
export declare const parseMessages: (messages: LLMMessage[]) => ParsedMessageInput;
|
|
6
|
+
export declare const normalizeMessageContent: (message: LLMMessage) => string;
|
|
7
|
+
export declare const toOpenAIMessages: (messages: LLMMessage[]) => ChatCompletionMessageParam[];
|
|
8
|
+
export declare const toClaudeMessages: (messages: LLMMessage[]) => {
|
|
9
|
+
system: string | undefined;
|
|
10
|
+
messages: AnthropicMessageParam[];
|
|
11
|
+
};
|
|
12
|
+
export declare const toGeminiMessages: (messages: LLMMessage[]) => {
|
|
13
|
+
systemInstruction: string | undefined;
|
|
14
|
+
contents: GeminiContent[];
|
|
15
|
+
};
|
|
16
|
+
export declare const resolveChatModel: (provider: string, model: string) => string;
|
|
17
|
+
export declare const resolveStreamModel: (provider: string, model: string) => string;
|
|
18
|
+
export declare const resolveEmbeddingModel: (provider: string, model: string) => string;
|
|
19
|
+
export declare const normalizeGeminiEmbeddings: (response: GeminiEmbedContentResponse, model: string) => GeminiOpenAICompatibleEmbedding;
|
|
20
|
+
//# sourceMappingURL=mappers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mappers.d.ts","sourceRoot":"","sources":["../mappers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,IAAI,qBAAqB,EAAE,MAAM,+CAA+C,CAAC;AAC3G,OAAO,KAAK,EACV,OAAO,IAAI,aAAa,EACxB,oBAAoB,IAAI,0BAA0B,EAEnD,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAEpF,OAAO,KAAK,EACV,+BAA+B,EAC/B,UAAU,EACV,kBAAkB,EACnB,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,aAAa,GAAI,UAAU,UAAU,EAAE,KAAG,kBActD,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,SAAS,UAAU,KAAG,MAc7D,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,UAAU,UAAU,EAAE,KACrB,0BAA0B,EAe5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,UAAU,UAAU,EAAE;;;CAiCtD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,UAAU,UAAU,EAAE;;;CAyBtD,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,EAAE,OAAO,MAAM,KAAG,MAUlE,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,UAAU,MAAM,EAAE,OAAO,MAAM,KAAG,MAUpE,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,UAAU,MAAM,EAChB,OAAO,MAAM,KACZ,MAMF,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,UAAU,0BAA0B,EACpC,OAAO,MAAM,KACZ,+BAcF,CAAC"}
|
package/dist/mappers.js
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeGeminiEmbeddings = exports.resolveEmbeddingModel = exports.resolveStreamModel = exports.resolveChatModel = exports.toGeminiMessages = exports.toClaudeMessages = exports.toOpenAIMessages = exports.normalizeMessageContent = exports.parseMessages = void 0;
|
|
4
|
+
const parseMessages = (messages) => {
|
|
5
|
+
const system = [];
|
|
6
|
+
const chat = [];
|
|
7
|
+
for (const message of messages) {
|
|
8
|
+
if (message.role === 'system') {
|
|
9
|
+
system.push((0, exports.normalizeMessageContent)(message));
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
chat.push(message);
|
|
13
|
+
}
|
|
14
|
+
return { system, chat };
|
|
15
|
+
};
|
|
16
|
+
exports.parseMessages = parseMessages;
|
|
17
|
+
const normalizeMessageContent = (message) => {
|
|
18
|
+
if (typeof message.content === 'string') {
|
|
19
|
+
return message.content;
|
|
20
|
+
}
|
|
21
|
+
return message.content
|
|
22
|
+
.map((part) => {
|
|
23
|
+
const maybeText = part['text'];
|
|
24
|
+
if (typeof maybeText === 'string') {
|
|
25
|
+
return maybeText;
|
|
26
|
+
}
|
|
27
|
+
return JSON.stringify(part);
|
|
28
|
+
})
|
|
29
|
+
.join('\n');
|
|
30
|
+
};
|
|
31
|
+
exports.normalizeMessageContent = normalizeMessageContent;
|
|
32
|
+
const toOpenAIMessages = (messages) => {
|
|
33
|
+
return messages.map((message) => {
|
|
34
|
+
if ((message.role === 'function' || message.role === 'tool') &&
|
|
35
|
+
!message.name) {
|
|
36
|
+
throw new Error(`${message.role} message requires a name property`);
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
role: message.role,
|
|
40
|
+
content: (0, exports.normalizeMessageContent)(message),
|
|
41
|
+
name: message.name,
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
};
|
|
45
|
+
exports.toOpenAIMessages = toOpenAIMessages;
|
|
46
|
+
const toClaudeMessages = (messages) => {
|
|
47
|
+
const parsed = (0, exports.parseMessages)(messages);
|
|
48
|
+
const claudeMessages = parsed.chat.map((message) => {
|
|
49
|
+
const content = (0, exports.normalizeMessageContent)(message);
|
|
50
|
+
if (message.role === 'assistant') {
|
|
51
|
+
return {
|
|
52
|
+
role: 'assistant',
|
|
53
|
+
content,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
if (message.role === 'function' || message.role === 'tool') {
|
|
57
|
+
const prefixed = message.name
|
|
58
|
+
? `[${message.role}:${message.name}] ${content}`
|
|
59
|
+
: `[${message.role}] ${content}`;
|
|
60
|
+
return {
|
|
61
|
+
role: 'user',
|
|
62
|
+
content: prefixed,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
role: 'user',
|
|
67
|
+
content,
|
|
68
|
+
};
|
|
69
|
+
});
|
|
70
|
+
return {
|
|
71
|
+
system: parsed.system.length > 0 ? parsed.system.join('\n\n') : undefined,
|
|
72
|
+
messages: claudeMessages,
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
exports.toClaudeMessages = toClaudeMessages;
|
|
76
|
+
const toGeminiMessages = (messages) => {
|
|
77
|
+
const parsed = (0, exports.parseMessages)(messages);
|
|
78
|
+
const contents = parsed.chat.map((message) => {
|
|
79
|
+
const text = (0, exports.normalizeMessageContent)(message);
|
|
80
|
+
const part = {
|
|
81
|
+
text: message.role === 'function' || message.role === 'tool'
|
|
82
|
+
? message.name
|
|
83
|
+
? `[${message.role}:${message.name}] ${text}`
|
|
84
|
+
: `[${message.role}] ${text}`
|
|
85
|
+
: text,
|
|
86
|
+
};
|
|
87
|
+
return {
|
|
88
|
+
role: message.role === 'assistant' ? 'model' : 'user',
|
|
89
|
+
parts: [part],
|
|
90
|
+
};
|
|
91
|
+
});
|
|
92
|
+
return {
|
|
93
|
+
systemInstruction: parsed.system.length > 0 ? parsed.system.join('\n\n') : undefined,
|
|
94
|
+
contents,
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
exports.toGeminiMessages = toGeminiMessages;
|
|
98
|
+
const resolveChatModel = (provider, model) => {
|
|
99
|
+
if (provider === 'claude' && model === 'gpt-4o-mini') {
|
|
100
|
+
return 'claude-sonnet-4-5';
|
|
101
|
+
}
|
|
102
|
+
if (provider === 'gemini' && model === 'gpt-4o-mini') {
|
|
103
|
+
return 'gemini-2.5-flash';
|
|
104
|
+
}
|
|
105
|
+
return model;
|
|
106
|
+
};
|
|
107
|
+
exports.resolveChatModel = resolveChatModel;
|
|
108
|
+
const resolveStreamModel = (provider, model) => {
|
|
109
|
+
if (provider === 'claude' && model === 'gpt-4o') {
|
|
110
|
+
return 'claude-sonnet-4-5';
|
|
111
|
+
}
|
|
112
|
+
if (provider === 'gemini' && model === 'gpt-4o') {
|
|
113
|
+
return 'gemini-2.5-flash';
|
|
114
|
+
}
|
|
115
|
+
return model;
|
|
116
|
+
};
|
|
117
|
+
exports.resolveStreamModel = resolveStreamModel;
|
|
118
|
+
const resolveEmbeddingModel = (provider, model) => {
|
|
119
|
+
if (provider === 'gemini' && model === 'text-embedding-3-small') {
|
|
120
|
+
return 'text-embedding-004';
|
|
121
|
+
}
|
|
122
|
+
return model;
|
|
123
|
+
};
|
|
124
|
+
exports.resolveEmbeddingModel = resolveEmbeddingModel;
|
|
125
|
+
const normalizeGeminiEmbeddings = (response, model) => {
|
|
126
|
+
const data = (response.embeddings ?? []).map((embedding, index) => ({
|
|
127
|
+
object: 'embedding',
|
|
128
|
+
embedding: embedding.values ?? [],
|
|
129
|
+
index,
|
|
130
|
+
}));
|
|
131
|
+
return {
|
|
132
|
+
object: 'list',
|
|
133
|
+
model,
|
|
134
|
+
data,
|
|
135
|
+
};
|
|
136
|
+
};
|
|
137
|
+
exports.normalizeGeminiEmbeddings = normalizeGeminiEmbeddings;
|
|
138
|
+
//# sourceMappingURL=mappers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mappers.js","sourceRoot":"","sources":["../mappers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { LLMChatCompletionData, LLMChatStream, LLMEmbeddingData, LLMImageData, LLMMessage, LLMModerationData, LLMProvider, LLMServiceOptions, LLMServiceResponse, LLMTranscriptionData } from './types';
|
|
2
|
+
export declare class LLMService {
|
|
3
|
+
readonly provider: LLMProvider;
|
|
4
|
+
private readonly apiKey;
|
|
5
|
+
private readonly organization?;
|
|
6
|
+
private readonly baseURL?;
|
|
7
|
+
private readonly timeout;
|
|
8
|
+
private readonly maxRetries;
|
|
9
|
+
private readonly apiVersion?;
|
|
10
|
+
private readonly vertexAI;
|
|
11
|
+
private readonly project?;
|
|
12
|
+
private readonly location?;
|
|
13
|
+
private readonly openAIClient?;
|
|
14
|
+
private readonly anthropicClient?;
|
|
15
|
+
private readonly geminiClient?;
|
|
16
|
+
constructor(configOrApiKey: string | LLMServiceOptions, organization?: string);
|
|
17
|
+
private normalizeConfig;
|
|
18
|
+
private ensureOpenAIClient;
|
|
19
|
+
private ensureAnthropicClient;
|
|
20
|
+
private ensureGeminiClient;
|
|
21
|
+
createChatCompletion(messages: LLMMessage[], model?: string, temperature?: number, maxTokens?: number): Promise<LLMServiceResponse<LLMChatCompletionData>>;
|
|
22
|
+
createChatCompletionStream(messages: LLMMessage[], model?: string, temperature?: number, maxTokens?: number): Promise<LLMServiceResponse<LLMChatStream>>;
|
|
23
|
+
generateImage(prompt: string, n?: number, size?: '1024x1024' | '512x512' | '256x256' | '1792x1024' | '1024x1792', quality?: 'standard' | 'hd'): Promise<LLMServiceResponse<LLMImageData>>;
|
|
24
|
+
createEmbeddings(input: string | string[], model?: string): Promise<LLMServiceResponse<LLMEmbeddingData>>;
|
|
25
|
+
createModeration(input: string | string[]): Promise<LLMServiceResponse<LLMModerationData>>;
|
|
26
|
+
createTranscription(audioFilePath: string, options?: {
|
|
27
|
+
model?: string;
|
|
28
|
+
language?: string;
|
|
29
|
+
prompt?: string;
|
|
30
|
+
responseFormat?: 'json' | 'text' | 'srt' | 'verbose_json' | 'vtt';
|
|
31
|
+
temperature?: number;
|
|
32
|
+
}): Promise<LLMServiceResponse<LLMTranscriptionData>>;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../service.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EACV,qBAAqB,EACrB,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAEjB,qBAAa,UAAU;IACrB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAS;IAEnC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAY;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAc;gBAG1C,cAAc,EAAE,MAAM,GAAG,iBAAiB,EAC1C,YAAY,CAAC,EAAE,MAAM;IAiDvB,OAAO,CAAC,eAAe;IAsCvB,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,kBAAkB;IAOpB,oBAAoB,CACxB,QAAQ,EAAE,UAAU,EAAE,EACtB,KAAK,GAAE,MAAsB,EAC7B,WAAW,GAAE,MAAU,EACvB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,CAAC;IAqE/C,0BAA0B,CAC9B,QAAQ,EAAE,UAAU,EAAE,EACtB,KAAK,GAAE,MAAiB,EACxB,WAAW,GAAE,MAAU,EACvB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IAkEvC,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,CAAC,GAAE,MAAU,EACb,IAAI,GACA,WAAW,GACX,SAAS,GACT,SAAS,GACT,WAAW,GACX,WAAyB,EAC7B,OAAO,GAAE,UAAU,GAAG,IAAiB,GACtC,OAAO,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAyBtC,gBAAgB,CACpB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EACxB,KAAK,GAAE,MAAiC,GACvC,OAAO,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;IAuC1C,gBAAgB,CACpB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GACvB,OAAO,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,CAAC;IAsB3C,mBAAmB,CACvB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE;QACR,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,cAAc,GAAG,KAAK,CAAC;QAClE,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GACA,OAAO,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;CAoCrD"}
|
package/dist/service.js
ADDED
|
@@ -0,0 +1,351 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.LLMService = void 0;
|
|
40
|
+
const sdk_1 = __importDefault(require("@anthropic-ai/sdk"));
|
|
41
|
+
const genai_1 = require("@google/genai");
|
|
42
|
+
const openai_1 = __importDefault(require("openai"));
|
|
43
|
+
const errors_1 = require("./errors");
|
|
44
|
+
const mappers_1 = require("./mappers");
|
|
45
|
+
class LLMService {
|
|
46
|
+
constructor(configOrApiKey, organization) {
|
|
47
|
+
const config = this.normalizeConfig(configOrApiKey, organization);
|
|
48
|
+
this.provider = config.provider;
|
|
49
|
+
this.apiKey = config.apiKey;
|
|
50
|
+
this.organization = config.organization;
|
|
51
|
+
this.baseURL = config.baseURL;
|
|
52
|
+
this.timeout = config.timeout;
|
|
53
|
+
this.maxRetries = config.maxRetries;
|
|
54
|
+
this.apiVersion = config.apiVersion;
|
|
55
|
+
this.vertexAI = config.vertexAI;
|
|
56
|
+
this.project = config.project;
|
|
57
|
+
this.location = config.location;
|
|
58
|
+
if (this.provider === 'openai') {
|
|
59
|
+
this.openAIClient = new openai_1.default({
|
|
60
|
+
apiKey: this.apiKey,
|
|
61
|
+
organization: this.organization,
|
|
62
|
+
baseURL: this.baseURL,
|
|
63
|
+
timeout: this.timeout,
|
|
64
|
+
maxRetries: this.maxRetries,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
if (this.provider === 'claude') {
|
|
68
|
+
this.anthropicClient = new sdk_1.default({
|
|
69
|
+
apiKey: this.apiKey,
|
|
70
|
+
baseURL: this.baseURL,
|
|
71
|
+
timeout: this.timeout,
|
|
72
|
+
maxRetries: this.maxRetries,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
if (this.provider === 'gemini') {
|
|
76
|
+
this.geminiClient = new genai_1.GoogleGenAI({
|
|
77
|
+
apiKey: this.vertexAI ? undefined : this.apiKey,
|
|
78
|
+
vertexai: this.vertexAI,
|
|
79
|
+
project: this.project,
|
|
80
|
+
location: this.location,
|
|
81
|
+
apiVersion: this.apiVersion,
|
|
82
|
+
httpOptions: {
|
|
83
|
+
baseUrl: this.baseURL,
|
|
84
|
+
timeout: this.timeout,
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
normalizeConfig(configOrApiKey, organization) {
|
|
90
|
+
if (typeof configOrApiKey === 'string') {
|
|
91
|
+
return {
|
|
92
|
+
provider: 'openai',
|
|
93
|
+
apiKey: configOrApiKey,
|
|
94
|
+
organization,
|
|
95
|
+
timeout: 30000,
|
|
96
|
+
maxRetries: 3,
|
|
97
|
+
vertexAI: false,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
return {
|
|
101
|
+
provider: configOrApiKey.provider ?? 'openai',
|
|
102
|
+
apiKey: configOrApiKey.apiKey,
|
|
103
|
+
organization: configOrApiKey.organization,
|
|
104
|
+
baseURL: configOrApiKey.baseURL,
|
|
105
|
+
timeout: configOrApiKey.timeout ?? 30000,
|
|
106
|
+
maxRetries: configOrApiKey.maxRetries ?? 3,
|
|
107
|
+
apiVersion: configOrApiKey.apiVersion,
|
|
108
|
+
vertexAI: configOrApiKey.vertexAI ?? false,
|
|
109
|
+
project: configOrApiKey.project,
|
|
110
|
+
location: configOrApiKey.location,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
ensureOpenAIClient() {
|
|
114
|
+
if (!this.openAIClient) {
|
|
115
|
+
throw new Error('OpenAI client is not initialized for this provider');
|
|
116
|
+
}
|
|
117
|
+
return this.openAIClient;
|
|
118
|
+
}
|
|
119
|
+
ensureAnthropicClient() {
|
|
120
|
+
if (!this.anthropicClient) {
|
|
121
|
+
throw new Error('Anthropic client is not initialized for this provider');
|
|
122
|
+
}
|
|
123
|
+
return this.anthropicClient;
|
|
124
|
+
}
|
|
125
|
+
ensureGeminiClient() {
|
|
126
|
+
if (!this.geminiClient) {
|
|
127
|
+
throw new Error('Gemini client is not initialized for this provider');
|
|
128
|
+
}
|
|
129
|
+
return this.geminiClient;
|
|
130
|
+
}
|
|
131
|
+
async createChatCompletion(messages, model = 'gpt-4o-mini', temperature = 1, maxTokens) {
|
|
132
|
+
try {
|
|
133
|
+
const resolvedModel = (0, mappers_1.resolveChatModel)(this.provider, model);
|
|
134
|
+
if (this.provider === 'openai') {
|
|
135
|
+
const client = this.ensureOpenAIClient();
|
|
136
|
+
const formattedMessages = (0, mappers_1.toOpenAIMessages)(messages);
|
|
137
|
+
const response = await client.chat.completions.create({
|
|
138
|
+
model: resolvedModel,
|
|
139
|
+
messages: formattedMessages,
|
|
140
|
+
temperature,
|
|
141
|
+
max_tokens: maxTokens,
|
|
142
|
+
});
|
|
143
|
+
return {
|
|
144
|
+
success: true,
|
|
145
|
+
data: response,
|
|
146
|
+
content: response.choices[0]?.message.content ?? '',
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
if (this.provider === 'claude') {
|
|
150
|
+
const client = this.ensureAnthropicClient();
|
|
151
|
+
const payload = (0, mappers_1.toClaudeMessages)(messages);
|
|
152
|
+
const response = await client.messages.create({
|
|
153
|
+
model: resolvedModel,
|
|
154
|
+
messages: payload.messages,
|
|
155
|
+
system: payload.system,
|
|
156
|
+
temperature,
|
|
157
|
+
max_tokens: maxTokens ?? 1024,
|
|
158
|
+
});
|
|
159
|
+
const content = response.content
|
|
160
|
+
.filter((block) => block.type === 'text')
|
|
161
|
+
.map((block) => block.text)
|
|
162
|
+
.join('');
|
|
163
|
+
return {
|
|
164
|
+
success: true,
|
|
165
|
+
data: response,
|
|
166
|
+
content,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
const client = this.ensureGeminiClient();
|
|
170
|
+
const payload = (0, mappers_1.toGeminiMessages)(messages);
|
|
171
|
+
const response = await client.models.generateContent({
|
|
172
|
+
model: resolvedModel,
|
|
173
|
+
contents: payload.contents,
|
|
174
|
+
config: {
|
|
175
|
+
systemInstruction: payload.systemInstruction,
|
|
176
|
+
temperature,
|
|
177
|
+
maxOutputTokens: maxTokens,
|
|
178
|
+
},
|
|
179
|
+
});
|
|
180
|
+
return {
|
|
181
|
+
success: true,
|
|
182
|
+
data: response,
|
|
183
|
+
content: response.text ?? '',
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
return (0, errors_1.buildErrorResponse)(error);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
async createChatCompletionStream(messages, model = 'gpt-4o', temperature = 1, maxTokens) {
|
|
191
|
+
try {
|
|
192
|
+
const resolvedModel = (0, mappers_1.resolveStreamModel)(this.provider, model);
|
|
193
|
+
if (this.provider === 'openai') {
|
|
194
|
+
const client = this.ensureOpenAIClient();
|
|
195
|
+
const formattedMessages = (0, mappers_1.toOpenAIMessages)(messages);
|
|
196
|
+
const stream = await client.chat.completions.create({
|
|
197
|
+
model: resolvedModel,
|
|
198
|
+
messages: formattedMessages,
|
|
199
|
+
temperature,
|
|
200
|
+
max_tokens: maxTokens,
|
|
201
|
+
stream: true,
|
|
202
|
+
});
|
|
203
|
+
return {
|
|
204
|
+
success: true,
|
|
205
|
+
data: stream,
|
|
206
|
+
stream,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
if (this.provider === 'claude') {
|
|
210
|
+
const client = this.ensureAnthropicClient();
|
|
211
|
+
const payload = (0, mappers_1.toClaudeMessages)(messages);
|
|
212
|
+
const stream = await client.messages.create({
|
|
213
|
+
model: resolvedModel,
|
|
214
|
+
messages: payload.messages,
|
|
215
|
+
system: payload.system,
|
|
216
|
+
temperature,
|
|
217
|
+
max_tokens: maxTokens ?? 1024,
|
|
218
|
+
stream: true,
|
|
219
|
+
});
|
|
220
|
+
return {
|
|
221
|
+
success: true,
|
|
222
|
+
data: stream,
|
|
223
|
+
stream,
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
const client = this.ensureGeminiClient();
|
|
227
|
+
const payload = (0, mappers_1.toGeminiMessages)(messages);
|
|
228
|
+
const stream = await client.models.generateContentStream({
|
|
229
|
+
model: resolvedModel,
|
|
230
|
+
contents: payload.contents,
|
|
231
|
+
config: {
|
|
232
|
+
systemInstruction: payload.systemInstruction,
|
|
233
|
+
temperature,
|
|
234
|
+
maxOutputTokens: maxTokens,
|
|
235
|
+
},
|
|
236
|
+
});
|
|
237
|
+
return {
|
|
238
|
+
success: true,
|
|
239
|
+
data: stream,
|
|
240
|
+
stream,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
return (0, errors_1.buildErrorResponse)(error);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
async generateImage(prompt, n = 1, size = '1024x1024', quality = 'standard') {
|
|
248
|
+
try {
|
|
249
|
+
if (this.provider !== 'openai') {
|
|
250
|
+
return (0, errors_1.unsupportedOperationResponse)(this.provider, 'generateImage');
|
|
251
|
+
}
|
|
252
|
+
const client = this.ensureOpenAIClient();
|
|
253
|
+
const response = await client.images.generate({
|
|
254
|
+
prompt,
|
|
255
|
+
n,
|
|
256
|
+
size,
|
|
257
|
+
quality,
|
|
258
|
+
});
|
|
259
|
+
return {
|
|
260
|
+
success: true,
|
|
261
|
+
data: response,
|
|
262
|
+
images: response.data,
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
catch (error) {
|
|
266
|
+
return (0, errors_1.buildErrorResponse)(error);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
async createEmbeddings(input, model = 'text-embedding-3-small') {
|
|
270
|
+
try {
|
|
271
|
+
const resolvedModel = (0, mappers_1.resolveEmbeddingModel)(this.provider, model);
|
|
272
|
+
if (this.provider === 'openai') {
|
|
273
|
+
const client = this.ensureOpenAIClient();
|
|
274
|
+
const response = await client.embeddings.create({
|
|
275
|
+
model: resolvedModel,
|
|
276
|
+
input,
|
|
277
|
+
});
|
|
278
|
+
return {
|
|
279
|
+
success: true,
|
|
280
|
+
data: response,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
if (this.provider === 'claude') {
|
|
284
|
+
return (0, errors_1.unsupportedOperationResponse)(this.provider, 'createEmbeddings');
|
|
285
|
+
}
|
|
286
|
+
const client = this.ensureGeminiClient();
|
|
287
|
+
const values = Array.isArray(input) ? input : [input];
|
|
288
|
+
const response = await client.models.embedContent({
|
|
289
|
+
model: resolvedModel,
|
|
290
|
+
contents: values,
|
|
291
|
+
});
|
|
292
|
+
return {
|
|
293
|
+
success: true,
|
|
294
|
+
data: (0, mappers_1.normalizeGeminiEmbeddings)(response, resolvedModel),
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
catch (error) {
|
|
298
|
+
return (0, errors_1.buildErrorResponse)(error);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
async createModeration(input) {
|
|
302
|
+
try {
|
|
303
|
+
if (this.provider !== 'openai') {
|
|
304
|
+
return (0, errors_1.unsupportedOperationResponse)(this.provider, 'createModeration');
|
|
305
|
+
}
|
|
306
|
+
const client = this.ensureOpenAIClient();
|
|
307
|
+
const response = await client.moderations.create({
|
|
308
|
+
input,
|
|
309
|
+
});
|
|
310
|
+
return {
|
|
311
|
+
success: true,
|
|
312
|
+
data: response,
|
|
313
|
+
results: response.results,
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
catch (error) {
|
|
317
|
+
return (0, errors_1.buildErrorResponse)(error);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
async createTranscription(audioFilePath, options) {
|
|
321
|
+
try {
|
|
322
|
+
if (this.provider !== 'openai') {
|
|
323
|
+
return (0, errors_1.unsupportedOperationResponse)(this.provider, 'createTranscription');
|
|
324
|
+
}
|
|
325
|
+
const client = this.ensureOpenAIClient();
|
|
326
|
+
const fs = await Promise.resolve().then(() => __importStar(require('fs')));
|
|
327
|
+
const file = fs.createReadStream(audioFilePath);
|
|
328
|
+
const request = {
|
|
329
|
+
file,
|
|
330
|
+
model: options?.model ?? 'whisper-1',
|
|
331
|
+
language: options?.language,
|
|
332
|
+
prompt: options?.prompt,
|
|
333
|
+
response_format: options?.responseFormat,
|
|
334
|
+
temperature: options?.temperature,
|
|
335
|
+
};
|
|
336
|
+
const response = await client.audio.transcriptions.create(request);
|
|
337
|
+
return {
|
|
338
|
+
success: true,
|
|
339
|
+
data: response,
|
|
340
|
+
content: typeof response === 'object' && 'text' in response
|
|
341
|
+
? response.text
|
|
342
|
+
: String(response),
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
catch (error) {
|
|
346
|
+
return (0, errors_1.buildErrorResponse)(error);
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
exports.LLMService = LLMService;
|
|
351
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../service.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { Message as AnthropicMessage } from '@anthropic-ai/sdk/resources/messages/messages';
|
|
2
|
+
import type { Stream as AnthropicStream } from '@anthropic-ai/sdk/streaming';
|
|
3
|
+
import type { GenerateContentResponse as GeminiGenerateContentResponse } from '@google/genai';
|
|
4
|
+
import type { ChatCompletion, ChatCompletionChunk } from 'openai/resources/chat/completions';
|
|
5
|
+
import type { CreateEmbeddingResponse, Embedding } from 'openai/resources/embeddings';
|
|
6
|
+
import type { ImagesResponse } from 'openai/resources/images';
|
|
7
|
+
import type { ModerationCreateResponse } from 'openai/resources/moderations';
|
|
8
|
+
import type { Transcription } from 'openai/resources/audio/transcriptions';
|
|
9
|
+
import type { Stream as OpenAIStream } from 'openai/streaming';
|
|
10
|
+
export type LLMProvider = 'openai' | 'claude' | 'gemini';
|
|
11
|
+
export type LLMMessageRole = 'system' | 'user' | 'assistant' | 'function' | 'tool';
|
|
12
|
+
export interface LLMMessage {
|
|
13
|
+
role: LLMMessageRole;
|
|
14
|
+
content: string | Array<Record<string, unknown>>;
|
|
15
|
+
name?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface LLMError {
|
|
18
|
+
status?: number;
|
|
19
|
+
type?: string;
|
|
20
|
+
message: string;
|
|
21
|
+
requestId?: string;
|
|
22
|
+
}
|
|
23
|
+
export interface LLMServiceResponse<T> {
|
|
24
|
+
success: boolean;
|
|
25
|
+
data?: T;
|
|
26
|
+
content?: string;
|
|
27
|
+
stream?: AsyncIterable<unknown>;
|
|
28
|
+
images?: unknown[];
|
|
29
|
+
results?: unknown[];
|
|
30
|
+
error?: LLMError;
|
|
31
|
+
}
|
|
32
|
+
export interface LLMServiceOptions {
|
|
33
|
+
provider?: LLMProvider;
|
|
34
|
+
apiKey: string;
|
|
35
|
+
organization?: string;
|
|
36
|
+
baseURL?: string;
|
|
37
|
+
timeout?: number;
|
|
38
|
+
maxRetries?: number;
|
|
39
|
+
apiVersion?: string;
|
|
40
|
+
vertexAI?: boolean;
|
|
41
|
+
project?: string;
|
|
42
|
+
location?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface GeminiOpenAICompatibleEmbedding {
|
|
45
|
+
object: 'list';
|
|
46
|
+
model: string;
|
|
47
|
+
data: Array<Embedding>;
|
|
48
|
+
}
|
|
49
|
+
export interface ParsedMessageInput {
|
|
50
|
+
system: string[];
|
|
51
|
+
chat: LLMMessage[];
|
|
52
|
+
}
|
|
53
|
+
export type LLMChatCompletionData = ChatCompletion | AnthropicMessage | GeminiGenerateContentResponse;
|
|
54
|
+
export type LLMChatStream = OpenAIStream<ChatCompletionChunk> | AnthropicStream<import('@anthropic-ai/sdk/resources/messages/messages').RawMessageStreamEvent> | AsyncGenerator<GeminiGenerateContentResponse>;
|
|
55
|
+
export type LLMEmbeddingData = CreateEmbeddingResponse | GeminiOpenAICompatibleEmbedding;
|
|
56
|
+
export type LLMImageData = ImagesResponse;
|
|
57
|
+
export type LLMModerationData = ModerationCreateResponse;
|
|
58
|
+
export type LLMTranscriptionData = Transcription;
|
|
59
|
+
export type OpenAIMessageRole = LLMMessageRole;
|
|
60
|
+
export type OpenAIMessage = LLMMessage;
|
|
61
|
+
export type OpenAIServiceResponse<T> = LLMServiceResponse<T>;
|
|
62
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@lapage/llm-service",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Unified TypeScript service wrapper for OpenAI, Claude, and Gemini APIs",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"llm",
|
|
7
|
+
"openai",
|
|
8
|
+
"claude",
|
|
9
|
+
"gemini",
|
|
10
|
+
"ai",
|
|
11
|
+
"typescript"
|
|
12
|
+
],
|
|
13
|
+
"author": "Huy Lan",
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "git+https://github.com/zhuylanz/LLMService.git"
|
|
18
|
+
},
|
|
19
|
+
"bugs": {
|
|
20
|
+
"url": "https://github.com/zhuylanz/LLMService/issues"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://github.com/zhuylanz/LLMService#readme",
|
|
23
|
+
"type": "commonjs",
|
|
24
|
+
"main": "dist/index.js",
|
|
25
|
+
"types": "dist/index.d.ts",
|
|
26
|
+
"exports": {
|
|
27
|
+
".": {
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
|
+
"default": "./dist/index.js"
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
"files": [
|
|
33
|
+
"dist",
|
|
34
|
+
"README.md"
|
|
35
|
+
],
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=18"
|
|
38
|
+
},
|
|
39
|
+
"publishConfig": {
|
|
40
|
+
"access": "public"
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "rm -rf dist && tsc -p tsconfig.json",
|
|
44
|
+
"typecheck": "tsc --noEmit",
|
|
45
|
+
"prepublishOnly": "npm run build",
|
|
46
|
+
"test": "echo \"No tests configured\""
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@anthropic-ai/sdk": "^0.71.0",
|
|
50
|
+
"@google/genai": "^1.24.0",
|
|
51
|
+
"openai": "^5.20.1"
|
|
52
|
+
},
|
|
53
|
+
"devDependencies": {
|
|
54
|
+
"typescript": "^5.8.3"
|
|
55
|
+
}
|
|
56
|
+
}
|