llmjs2 0.0.2 → 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.
@@ -0,0 +1,289 @@
1
+ /**
2
+ * OpenAI provider implementation
3
+ */
4
+ import https from 'https';
5
+ import http from 'http';
6
+ import { URL } from 'url';
7
+ import { BaseProvider, validateCompletionRequest, withRetry, LLMError, } from './base.js';
8
+ /**
9
+ * OpenAI Provider implementation
10
+ */
11
+ export class OpenAIProvider extends BaseProvider {
12
+ constructor(config) {
13
+ super(config);
14
+ this.baseUrl = 'https://api.openai.com/v1';
15
+ if (!config.apiKey) {
16
+ throw new Error('OpenAI API key is required');
17
+ }
18
+ this.apiKey = config.apiKey;
19
+ if (config.baseUrl) {
20
+ this.baseUrl = config.baseUrl;
21
+ }
22
+ }
23
+ /**
24
+ * Parse model string (e.g., 'openai/gpt-4' -> 'gpt-4')
25
+ */
26
+ parseModel(model) {
27
+ if (model.startsWith('openai/')) {
28
+ return model.slice(7); // Remove 'openai/' prefix
29
+ }
30
+ return model;
31
+ }
32
+ /**
33
+ * Validate configuration
34
+ */
35
+ async validate() {
36
+ try {
37
+ // Make a simple request to verify API key
38
+ await this.makeRequest('/models', 'GET');
39
+ this.logger('info', 'OpenAI API validation successful');
40
+ }
41
+ catch (error) {
42
+ throw new LLMError(`OpenAI validation failed: ${error instanceof Error ? error.message : String(error)}`, 'VALIDATION_FAILED');
43
+ }
44
+ }
45
+ /**
46
+ * Create a completion
47
+ */
48
+ async complete(request) {
49
+ validateCompletionRequest(request);
50
+ const model = this.parseModel(request.model);
51
+ return withRetry(async () => {
52
+ const openaiRequest = {
53
+ model,
54
+ messages: request.messages.map((msg) => ({
55
+ role: msg.role,
56
+ content: msg.content,
57
+ })),
58
+ };
59
+ // Add optional parameters
60
+ if (request.maxTokens)
61
+ openaiRequest.max_tokens = request.maxTokens;
62
+ if (request.temperature !== undefined)
63
+ openaiRequest.temperature = request.temperature;
64
+ if (request.topP !== undefined)
65
+ openaiRequest.top_p = request.topP;
66
+ if (request.frequencyPenalty !== undefined)
67
+ openaiRequest.frequency_penalty = request.frequencyPenalty;
68
+ if (request.presencePenalty !== undefined)
69
+ openaiRequest.presence_penalty = request.presencePenalty;
70
+ if (request.stop)
71
+ openaiRequest.stop = request.stop;
72
+ if (request.tools)
73
+ openaiRequest.tools = request.tools;
74
+ if (request.toolChoice)
75
+ openaiRequest.tool_choice = request.toolChoice;
76
+ this.logger('debug', 'OpenAI completion request', {
77
+ model,
78
+ messageCount: request.messages.length,
79
+ });
80
+ const response = await this.makeRequest('/chat/completions', 'POST', openaiRequest, request);
81
+ if (!response.choices || response.choices.length === 0) {
82
+ throw new LLMError('No choices in OpenAI response', 'NO_CHOICES');
83
+ }
84
+ const choice = response.choices[0];
85
+ const message = choice.message;
86
+ if (!message) {
87
+ throw new LLMError('No message in OpenAI response choice', 'NO_MESSAGE');
88
+ }
89
+ const result = {
90
+ content: message.content || '',
91
+ model: response.model,
92
+ stopReason: choice.finish_reason,
93
+ raw: response,
94
+ };
95
+ if (response.usage) {
96
+ result.usage = {
97
+ promptTokens: response.usage.prompt_tokens,
98
+ completionTokens: response.usage.completion_tokens,
99
+ totalTokens: response.usage.total_tokens,
100
+ };
101
+ }
102
+ if (message.tool_calls && message.tool_calls.length > 0) {
103
+ result.toolCalls = message.tool_calls.map((call) => ({
104
+ id: call.id,
105
+ name: call.function.name,
106
+ arguments: JSON.parse(call.function.arguments),
107
+ }));
108
+ }
109
+ this.logger('debug', 'OpenAI completion response', {
110
+ model: response.model,
111
+ tokens: response.usage?.total_tokens,
112
+ });
113
+ return result;
114
+ }, this.getRetryConfig(request));
115
+ }
116
+ /**
117
+ * Stream completion
118
+ */
119
+ async *completeStream(request) {
120
+ validateCompletionRequest(request);
121
+ const model = this.parseModel(request.model);
122
+ const openaiRequest = {
123
+ model,
124
+ stream: true,
125
+ messages: request.messages.map((msg) => ({
126
+ role: msg.role,
127
+ content: msg.content,
128
+ })),
129
+ };
130
+ if (request.maxTokens)
131
+ openaiRequest.max_tokens = request.maxTokens;
132
+ if (request.temperature !== undefined)
133
+ openaiRequest.temperature = request.temperature;
134
+ if (request.topP !== undefined)
135
+ openaiRequest.top_p = request.topP;
136
+ if (request.frequencyPenalty !== undefined)
137
+ openaiRequest.frequency_penalty = request.frequencyPenalty;
138
+ if (request.presencePenalty !== undefined)
139
+ openaiRequest.presence_penalty = request.presencePenalty;
140
+ if (request.stop)
141
+ openaiRequest.stop = request.stop;
142
+ if (request.tools)
143
+ openaiRequest.tools = request.tools;
144
+ if (request.toolChoice)
145
+ openaiRequest.tool_choice = request.toolChoice;
146
+ this.logger('debug', 'OpenAI stream request', { model });
147
+ const stream = await this.makeStreamRequest('/chat/completions', 'POST', openaiRequest, request);
148
+ for await (const chunk of stream) {
149
+ if (chunk.choices && chunk.choices.length > 0) {
150
+ const choice = chunk.choices[0];
151
+ if (choice.delta?.content) {
152
+ yield {
153
+ delta: choice.delta.content,
154
+ stopReason: choice.finish_reason,
155
+ };
156
+ }
157
+ }
158
+ }
159
+ }
160
+ /**
161
+ * Make HTTP request to OpenAI API
162
+ */
163
+ makeRequest(path, method = 'POST', body, request) {
164
+ return new Promise((resolve, reject) => {
165
+ const url = new URL(path, this.baseUrl);
166
+ const timeout = this.getTimeout(request);
167
+ const requestOptions = {
168
+ method,
169
+ headers: {
170
+ 'Content-Type': 'application/json',
171
+ Authorization: `Bearer ${this.apiKey}`,
172
+ ...this.getHeaders(request),
173
+ },
174
+ timeout,
175
+ };
176
+ const protocol = this.baseUrl.startsWith('https') ? https : http;
177
+ const req = protocol.request(url, requestOptions, (res) => {
178
+ let data = '';
179
+ res.on('data', (chunk) => {
180
+ data += chunk;
181
+ });
182
+ res.on('end', () => {
183
+ if (!res.statusCode || res.statusCode >= 400) {
184
+ try {
185
+ const errorData = JSON.parse(data);
186
+ reject(new LLMError(errorData.error?.message || 'OpenAI API error', errorData.error?.code, res.statusCode, errorData, res.statusCode === 429 ||
187
+ res.statusCode === 502 ||
188
+ res.statusCode === 503));
189
+ }
190
+ catch {
191
+ reject(new LLMError(`OpenAI API error: ${data}`, 'API_ERROR', res.statusCode, null, false));
192
+ }
193
+ }
194
+ else {
195
+ try {
196
+ resolve(JSON.parse(data));
197
+ }
198
+ catch (error) {
199
+ reject(new LLMError('Failed to parse OpenAI response', 'PARSE_ERROR', undefined, { data }));
200
+ }
201
+ }
202
+ });
203
+ });
204
+ req.on('error', (error) => {
205
+ reject(new LLMError(`OpenAI request failed: ${error.message}`, 'REQUEST_FAILED', undefined, { error: error.message }, true));
206
+ });
207
+ if (body) {
208
+ req.write(JSON.stringify(body));
209
+ }
210
+ req.end();
211
+ });
212
+ }
213
+ /**
214
+ * Stream HTTP request
215
+ */
216
+ makeStreamRequest(path, method = 'POST', body, request) {
217
+ const self = this;
218
+ return {
219
+ async *[Symbol.asyncIterator]() {
220
+ const url = new URL(path, self.baseUrl);
221
+ const timeout = self.getTimeout(request);
222
+ const requestOptions = {
223
+ method,
224
+ headers: {
225
+ 'Content-Type': 'application/json',
226
+ Authorization: `Bearer ${self.apiKey}`,
227
+ ...self.getHeaders(request),
228
+ },
229
+ timeout,
230
+ };
231
+ const protocol = self.baseUrl.startsWith('https') ? https : http;
232
+ const chunks = [];
233
+ await new Promise((resolve, reject) => {
234
+ const req = protocol.request(url, requestOptions, (res) => {
235
+ if (!res.statusCode || res.statusCode >= 400) {
236
+ let errorData = '';
237
+ res.on('data', (chunk) => {
238
+ errorData += chunk;
239
+ });
240
+ res.on('end', () => {
241
+ reject(new LLMError(`OpenAI stream error: ${errorData}`, 'STREAM_ERROR', res.statusCode));
242
+ });
243
+ return;
244
+ }
245
+ let buffer = '';
246
+ res.on('data', (chunk) => {
247
+ buffer += chunk.toString();
248
+ const lines = buffer.split('\n');
249
+ buffer = lines[lines.length - 1];
250
+ for (let i = 0; i < lines.length - 1; i++) {
251
+ const line = lines[i].trim();
252
+ if (!line || line === '[DONE]')
253
+ continue;
254
+ if (line.startsWith('data: ')) {
255
+ try {
256
+ const data = JSON.parse(line.slice(6));
257
+ chunks.push(data);
258
+ }
259
+ catch (error) {
260
+ // Ignore parse errors in stream
261
+ }
262
+ }
263
+ }
264
+ });
265
+ res.on('end', () => {
266
+ resolve();
267
+ });
268
+ });
269
+ req.on('error', (error) => {
270
+ reject(new LLMError(`OpenAI stream request failed: ${error.message}`, 'REQUEST_FAILED', undefined, { error: error.message }, true));
271
+ });
272
+ req.on('timeout', () => {
273
+ req.destroy();
274
+ reject(new LLMError('OpenAI stream request timeout', 'TIMEOUT', undefined, null, true));
275
+ });
276
+ if (body) {
277
+ req.write(JSON.stringify(body));
278
+ }
279
+ req.end();
280
+ });
281
+ // Yield collected chunks
282
+ for (const chunk of chunks) {
283
+ yield chunk;
284
+ }
285
+ },
286
+ };
287
+ }
288
+ }
289
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Unified type definitions for llmjs2
3
+ * Enterprise-grade LLM abstraction layer supporting OpenAI and Ollama
4
+ */
5
+ /**
6
+ * Supported LLM providers
7
+ */
8
+ export type ProviderType = 'openai' | 'ollama';
9
+ /**
10
+ * Role of a message in a conversation
11
+ */
12
+ export type MessageRole = 'system' | 'user' | 'assistant';
13
+ /**
14
+ * A single message in a conversation
15
+ */
16
+ export interface Message {
17
+ role: MessageRole;
18
+ content: string;
19
+ }
20
+ /**
21
+ * Tool/function definition for function calling
22
+ */
23
+ export interface Tool {
24
+ type: 'function';
25
+ function: {
26
+ name: string;
27
+ description?: string;
28
+ parameters?: Record<string, unknown>;
29
+ };
30
+ }
31
+ /**
32
+ * Configuration for a completion request
33
+ */
34
+ export interface CompletionRequest {
35
+ /** Model identifier (e.g., 'openai/gpt-4', 'ollama/mistral') */
36
+ model: string;
37
+ /** API key or authentication token */
38
+ apiKey?: string;
39
+ /** Base URL for the API (mainly for Ollama) */
40
+ baseUrl?: string;
41
+ /** Messages for the completion */
42
+ messages: Message[];
43
+ /** Maximum tokens to generate */
44
+ maxTokens?: number;
45
+ /** Sampling temperature (0-2 for OpenAI, typically 0-1) */
46
+ temperature?: number;
47
+ /** Top-p (nucleus sampling) */
48
+ topP?: number;
49
+ /** Top-k sampling parameter */
50
+ topK?: number;
51
+ /** Frequency penalty (-2 to 2 for OpenAI) */
52
+ frequencyPenalty?: number;
53
+ /** Presence penalty (-2 to 2 for OpenAI) */
54
+ presencePenalty?: number;
55
+ /** Stop sequences */
56
+ stop?: string[];
57
+ /** Available tools for function calling */
58
+ tools?: Tool[];
59
+ /** Force tool usage */
60
+ toolChoice?: 'auto' | 'required' | string;
61
+ /** Custom headers to send with requests */
62
+ headers?: Record<string, string>;
63
+ /** Request timeout in milliseconds */
64
+ timeout?: number;
65
+ /** Retry configuration */
66
+ retry?: {
67
+ maxRetries?: number;
68
+ backoffMultiplier?: number;
69
+ initialDelayMs?: number;
70
+ };
71
+ }
72
+ /**
73
+ * Completion response
74
+ */
75
+ export interface CompletionResponse {
76
+ /** Generated text content */
77
+ content: string;
78
+ /** The model used */
79
+ model: string;
80
+ /** Stop reason */
81
+ stopReason?: 'stop_sequence' | 'length' | 'tool_calls' | 'end_turn' | string;
82
+ /** Total tokens used (if available) */
83
+ usage?: {
84
+ promptTokens?: number;
85
+ completionTokens?: number;
86
+ totalTokens?: number;
87
+ };
88
+ /** Raw provider response for advanced use cases */
89
+ raw?: unknown;
90
+ /** Finish reason from provider */
91
+ finishReason?: string;
92
+ /** Tool calls if function calling was used */
93
+ toolCalls?: Array<{
94
+ id?: string;
95
+ name: string;
96
+ arguments: Record<string, unknown>;
97
+ }>;
98
+ }
99
+ /**
100
+ * Streaming completion chunk
101
+ */
102
+ export interface CompletionChunk {
103
+ /** Delta content */
104
+ delta: string;
105
+ /** Stop reason if stream ended */
106
+ stopReason?: string;
107
+ /** Usage at end of stream */
108
+ usage?: {
109
+ promptTokens?: number;
110
+ completionTokens?: number;
111
+ totalTokens?: number;
112
+ };
113
+ }
114
+ /**
115
+ * Provider configuration options
116
+ */
117
+ export interface ProviderConfig {
118
+ /** Provider type */
119
+ type: ProviderType;
120
+ /** API key */
121
+ apiKey?: string;
122
+ /** Base URL for API */
123
+ baseUrl?: string;
124
+ /** Default model */
125
+ model?: string;
126
+ /** Request timeout */
127
+ timeout?: number;
128
+ /** Retry configuration */
129
+ retry?: {
130
+ maxRetries?: number;
131
+ backoffMultiplier?: number;
132
+ initialDelayMs?: number;
133
+ };
134
+ /** Custom headers */
135
+ headers?: Record<string, string>;
136
+ }
137
+ /**
138
+ * Error response from provider
139
+ */
140
+ export interface ProviderError extends Error {
141
+ name: string;
142
+ message: string;
143
+ code?: string;
144
+ statusCode?: number;
145
+ details?: unknown;
146
+ retryable?: boolean;
147
+ }
148
+ /**
149
+ * Provider interface that all providers must implement
150
+ */
151
+ export interface IProvider {
152
+ /** Create a completion request */
153
+ complete(request: CompletionRequest): Promise<CompletionResponse>;
154
+ /** Stream a completion request */
155
+ completeStream(request: CompletionRequest): AsyncIterable<CompletionChunk>;
156
+ /** Validate that the configuration is correct */
157
+ validate(): Promise<void>;
158
+ /** Parse model string (e.g., 'openai/gpt-4' -> 'gpt-4') */
159
+ parseModel(model: string): string;
160
+ /** Enable or disable debug mode */
161
+ setDebug(debug: boolean): void;
162
+ /** Set custom logger function */
163
+ setLogger(logger: (level: string, message: string, data?: unknown) => void): void;
164
+ }
165
+ /**
166
+ * Global completion options
167
+ */
168
+ export interface CompletionOptions {
169
+ /** Enable request logging for debugging */
170
+ debug?: boolean;
171
+ /** Custom logger function */
172
+ logger?: (level: string, message: string, data?: unknown) => void;
173
+ /** Global timeout override */
174
+ globalTimeout?: number;
175
+ /** Retry configuration override */
176
+ globalRetry?: {
177
+ maxRetries?: number;
178
+ backoffMultiplier?: number;
179
+ initialDelayMs?: number;
180
+ };
181
+ }
182
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Unified type definitions for llmjs2
3
+ * Enterprise-grade LLM abstraction layer supporting OpenAI and Ollama
4
+ */
5
+ export {};
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
package/package.json CHANGED
@@ -1,21 +1,55 @@
1
1
  {
2
2
  "name": "llmjs2",
3
- "version": "0.0.2",
4
- "description": "A very lightweight llm library for building small or personal AI",
5
- "main": "llmjs.js",
3
+ "version": "1.0.0",
4
+ "description": "LLM abstraction layer for Node.js. Unified API for OpenAI and Ollama with error handling and retry logic.",
5
+ "main": "dist/dex.js",
6
+ "types": "dist/index.d.ts",
6
7
  "type": "module",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
7
14
  "keywords": [
8
- "llmjs",
9
15
  "llm",
10
- "llmjs2"
16
+ "llmjs2",
17
+ "openai",
18
+ "ollama",
19
+ "ai",
20
+ "machine-learning",
21
+ "abstraction",
22
+ "unified-api"
11
23
  ],
12
24
  "author": "littlellmjs",
13
- "files": [
14
- "llmjs.js",
15
- "README.md"
16
- ],
17
25
  "license": "MIT",
26
+ "files": [
27
+ "dist",
28
+ "src",
29
+ "README.md",
30
+ "LICENSE"
31
+ ],
18
32
  "engines": {
19
33
  "node": ">=16.0.0"
20
- }
34
+ },
35
+ "scripts": {
36
+ "build": "tsc",
37
+ "build:watch": "tsc --watch",
38
+ "clean": "rm -rf dist",
39
+ "test": "node --test test.js",
40
+ "test:watch": "node --watch test.js",
41
+ "prepublishOnly": "npm run build && npm run test"
42
+ },
43
+ "devDependencies": {
44
+ "@types/node": "^20.10.0",
45
+ "typescript": "^5.9.3"
46
+ },
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "https://github.com/littlellmjs/llmjs2"
50
+ },
51
+ "bugs": {
52
+ "url": "https://github.com/littlellmjs/llmjs2/issues"
53
+ },
54
+ "homepage": "https://github.com/littlellmjs/llmjs2#readme"
21
55
  }