llmjs2 1.0.1 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +39 -436
  2. package/grapes.jpg +0 -0
  3. package/index.d.ts +43 -0
  4. package/index.js +465 -0
  5. package/package.json +7 -47
  6. package/spec.txt +73 -0
  7. package/test-generate-tools-suite.js +100 -0
  8. package/test-generate-tools.js +57 -0
  9. package/test-generate.js +31 -0
  10. package/test.js +33 -0
  11. package/LICENSE +0 -21
  12. package/dist/agent.d.ts +0 -80
  13. package/dist/agent.d.ts.map +0 -1
  14. package/dist/agent.js +0 -199
  15. package/dist/agent.js.map +0 -1
  16. package/dist/index.d.ts +0 -74
  17. package/dist/index.d.ts.map +0 -1
  18. package/dist/index.js +0 -191
  19. package/dist/index.js.map +0 -1
  20. package/dist/providers/base.d.ts +0 -58
  21. package/dist/providers/base.d.ts.map +0 -1
  22. package/dist/providers/base.js +0 -149
  23. package/dist/providers/base.js.map +0 -1
  24. package/dist/providers/index.d.ts +0 -8
  25. package/dist/providers/index.d.ts.map +0 -1
  26. package/dist/providers/index.js +0 -7
  27. package/dist/providers/index.js.map +0 -1
  28. package/dist/providers/ollama.d.ts +0 -42
  29. package/dist/providers/ollama.d.ts.map +0 -1
  30. package/dist/providers/ollama.js +0 -260
  31. package/dist/providers/ollama.js.map +0 -1
  32. package/dist/providers/openai.d.ts +0 -38
  33. package/dist/providers/openai.d.ts.map +0 -1
  34. package/dist/providers/openai.js +0 -322
  35. package/dist/providers/openai.js.map +0 -1
  36. package/dist/types.d.ts +0 -191
  37. package/dist/types.d.ts.map +0 -1
  38. package/dist/types.js +0 -6
  39. package/dist/types.js.map +0 -1
  40. package/src/agent.ts +0 -295
  41. package/src/index.ts +0 -268
  42. package/src/providers/base.ts +0 -216
  43. package/src/providers/index.ts +0 -8
  44. package/src/providers/ollama.ts +0 -429
  45. package/src/providers/openai.ts +0 -521
  46. package/src/types.ts +0 -243
@@ -1,260 +0,0 @@
1
- /**
2
- * Ollama provider implementation
3
- */
4
- import { URL } from 'url';
5
- import { BaseProvider, validateCompletionRequest, withRetry, LLMError, } from './base.js';
6
- /**
7
- * Ollama Provider implementation
8
- */
9
- export class OllamaProvider extends BaseProvider {
10
- constructor(config) {
11
- super(config);
12
- this.baseUrl = 'https://ollama.com';
13
- // Get API key from config or env variable
14
- const apiKey = config.apiKey || process.env.OLLAMA_CLOUD_API_KEY;
15
- if (apiKey) {
16
- this.apiKey = apiKey;
17
- // Default to Ollama Cloud for API key-based requests
18
- if (!config.baseUrl) {
19
- this.baseUrl = 'https://ollama.com';
20
- }
21
- else {
22
- this.baseUrl = config.baseUrl;
23
- }
24
- }
25
- else {
26
- // Local Ollama setup
27
- if (config.baseUrl) {
28
- this.baseUrl = config.baseUrl;
29
- }
30
- }
31
- }
32
- /**
33
- * Parse model string (e.g., 'ollama/mistral' -> 'mistral')
34
- */
35
- parseModel(model) {
36
- if (model.startsWith('ollama/')) {
37
- return model.slice(7); // Remove 'ollama/' prefix
38
- }
39
- return model;
40
- }
41
- /**
42
- * Validate configuration
43
- */
44
- async validate() {
45
- try {
46
- // Make a simple request to verify Ollama is running
47
- const response = await this.makeRequest('/api/tags', 'GET');
48
- if (!Array.isArray(response.models)) {
49
- throw new Error('Invalid Ollama response format');
50
- }
51
- this.logger('info', 'Ollama API validation successful');
52
- }
53
- catch (error) {
54
- throw new LLMError(`Ollama validation failed: ${error instanceof Error ? error.message : String(error)}`, 'VALIDATION_FAILED', undefined, null, true);
55
- }
56
- }
57
- /**
58
- * Create a completion
59
- */
60
- async complete(request) {
61
- validateCompletionRequest(request);
62
- const model = this.parseModel(request.model);
63
- return withRetry(async () => {
64
- const ollamaRequest = {
65
- model,
66
- stream: false,
67
- messages: request.messages.map((msg) => ({
68
- role: msg.role,
69
- content: msg.content,
70
- })),
71
- };
72
- this.logger('debug', 'Ollama completion request', {
73
- model,
74
- messageCount: request.messages.length,
75
- });
76
- // Use non-streaming request for complete()
77
- const response = await this.makeRequest('/api/chat', 'POST', ollamaRequest, request);
78
- const fullResponse = response.message?.content || '';
79
- const result = {
80
- content: fullResponse,
81
- model: model,
82
- stopReason: 'stop_sequence',
83
- raw: response,
84
- };
85
- this.logger('debug', 'Ollama completion response', {
86
- model,
87
- contentLength: fullResponse.length,
88
- });
89
- return result;
90
- }, this.getRetryConfig(request));
91
- }
92
- /**
93
- * Stream completion
94
- */
95
- async *completeStream(request) {
96
- validateCompletionRequest(request);
97
- const model = this.parseModel(request.model);
98
- const ollamaRequest = {
99
- model,
100
- stream: true,
101
- messages: request.messages.map((msg) => ({
102
- role: msg.role,
103
- content: msg.content,
104
- })),
105
- };
106
- this.logger('debug', 'Ollama stream request', { model });
107
- const chunks = await this.streamCompletion(ollamaRequest, request);
108
- for await (const chunk of chunks) {
109
- if (chunk.message?.content) {
110
- yield {
111
- delta: chunk.message.content,
112
- stopReason: chunk.done ? 'stop_sequence' : undefined,
113
- };
114
- }
115
- }
116
- }
117
- /**
118
- * Internal stream completion handler
119
- */
120
- async *streamCompletion(body, request) {
121
- const stream = await this.makeStreamRequest('/api/chat', 'POST', body, request);
122
- for await (const chunk of stream) {
123
- yield chunk;
124
- }
125
- }
126
- /**
127
- * Make HTTP request to Ollama API using fetch
128
- */
129
- async makeRequest(path, method = 'POST', body, request) {
130
- const url = new URL(path, this.baseUrl).toString();
131
- const timeout = this.getTimeout(request);
132
- const headers = {
133
- 'Content-Type': 'application/json',
134
- ...this.getHeaders(request),
135
- };
136
- if (this.apiKey) {
137
- headers['Authorization'] = `Bearer ${this.apiKey}`;
138
- }
139
- this.logger('info', '=== Ollama Request ===', {
140
- url,
141
- method,
142
- headers,
143
- body: JSON.stringify(body),
144
- });
145
- try {
146
- const controller = new AbortController();
147
- const timeoutId = setTimeout(() => controller.abort(), timeout);
148
- const response = await fetch(url, {
149
- method,
150
- headers,
151
- body: body ? JSON.stringify(body) : undefined,
152
- signal: controller.signal,
153
- });
154
- clearTimeout(timeoutId);
155
- if (!response.ok) {
156
- const errorText = await response.text();
157
- throw new LLMError(`Ollama API error: ${errorText}`, 'API_ERROR', response.status, null, response.status === 503 || response.status === 502);
158
- }
159
- const data = await response.json();
160
- return data;
161
- }
162
- catch (error) {
163
- if (error instanceof LLMError) {
164
- throw error;
165
- }
166
- if (error instanceof Error &&
167
- error.name === 'AbortError') {
168
- throw new LLMError('Ollama request timeout', 'TIMEOUT', undefined, null, true);
169
- }
170
- throw new LLMError(`Ollama request failed: ${error instanceof Error ? error.message : String(error)}`, 'REQUEST_FAILED', undefined, { error: error instanceof Error ? error.message : String(error) }, true);
171
- }
172
- }
173
- /**
174
- * Stream HTTP request using fetch
175
- */
176
- makeStreamRequest(path, method = 'POST', body, request) {
177
- const self = this;
178
- return {
179
- async *[Symbol.asyncIterator]() {
180
- const url = new URL(path, self.baseUrl).toString();
181
- const timeout = self.getTimeout(request);
182
- const headers = {
183
- 'Content-Type': 'application/json',
184
- ...self.getHeaders(request),
185
- };
186
- if (self.apiKey) {
187
- headers['Authorization'] = `Bearer ${self.apiKey}`;
188
- }
189
- self.logger('debug', 'Ollama stream request', {
190
- url,
191
- method,
192
- headers,
193
- body: JSON.stringify(body),
194
- });
195
- try {
196
- const controller = new AbortController();
197
- const timeoutId = setTimeout(() => controller.abort(), timeout);
198
- const response = await fetch(url, {
199
- method,
200
- headers,
201
- body: body ? JSON.stringify(body) : undefined,
202
- signal: controller.signal,
203
- });
204
- clearTimeout(timeoutId);
205
- if (!response.ok) {
206
- const errorText = await response.text();
207
- throw new LLMError(`Ollama stream error: ${errorText}`, 'STREAM_ERROR', response.status);
208
- }
209
- const reader = response.body?.getReader();
210
- if (!reader) {
211
- throw new LLMError('No response body', 'STREAM_ERROR', undefined);
212
- }
213
- const decoder = new TextDecoder();
214
- let buffer = '';
215
- while (true) {
216
- const { done, value } = await reader.read();
217
- if (done)
218
- break;
219
- buffer += decoder.decode(value, { stream: true });
220
- const lines = buffer.split('\n');
221
- buffer = lines[lines.length - 1];
222
- for (let i = 0; i < lines.length - 1; i++) {
223
- const line = lines[i].trim();
224
- if (!line)
225
- continue;
226
- try {
227
- const chunk = JSON.parse(line);
228
- yield chunk;
229
- }
230
- catch (error) {
231
- // Ignore parse errors in stream
232
- }
233
- }
234
- }
235
- // Process any remaining data in buffer
236
- if (buffer.trim()) {
237
- try {
238
- const chunk = JSON.parse(buffer);
239
- yield chunk;
240
- }
241
- catch (error) {
242
- // Ignore parse errors
243
- }
244
- }
245
- }
246
- catch (error) {
247
- if (error instanceof LLMError) {
248
- throw error;
249
- }
250
- if (error instanceof Error &&
251
- error.name === 'AbortError') {
252
- throw new LLMError('Ollama stream request timeout', 'TIMEOUT', undefined, null, true);
253
- }
254
- throw new LLMError(`Ollama stream request failed: ${error instanceof Error ? error.message : String(error)}`, 'REQUEST_FAILED', undefined, { error: error instanceof Error ? error.message : String(error) }, true);
255
- }
256
- },
257
- };
258
- }
259
- }
260
- //# sourceMappingURL=ollama.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../src/providers/ollama.ts"],"names":[],"mappings":"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"}
@@ -1,38 +0,0 @@
1
- /**
2
- * OpenAI provider implementation
3
- */
4
- import { CompletionRequest, CompletionResponse, CompletionChunk, ProviderConfig } from '../types.js';
5
- import { BaseProvider } from './base.js';
6
- /**
7
- * OpenAI Provider implementation
8
- */
9
- export declare class OpenAIProvider extends BaseProvider {
10
- private apiKey;
11
- private baseUrl;
12
- constructor(config: ProviderConfig);
13
- /**
14
- * Parse model string (e.g., 'openai/gpt-4' -> 'gpt-4')
15
- */
16
- parseModel(model: string): string;
17
- /**
18
- * Validate configuration
19
- */
20
- validate(): Promise<void>;
21
- /**
22
- * Create a completion
23
- */
24
- complete(request: CompletionRequest): Promise<CompletionResponse>;
25
- /**
26
- * Stream completion
27
- */
28
- completeStream(request: CompletionRequest): AsyncIterable<CompletionChunk>;
29
- /**
30
- * Make HTTP request to OpenAI API
31
- */
32
- private makeRequest;
33
- /**
34
- * Stream HTTP request
35
- */
36
- private makeStreamRequest;
37
- }
38
- //# sourceMappingURL=openai.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,YAAY,EAIb,MAAM,WAAW,CAAC;AAwEnB;;GAEG;AACH,qBAAa,cAAe,SAAQ,YAAY;IAC9C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAuC;gBAE1C,MAAM,EAAE,cAAc;IAclC;;OAEG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAOjC;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAa/B;;OAEG;IACG,QAAQ,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoGvE;;OAEG;IACI,cAAc,CACnB,OAAO,EAAE,iBAAiB,GACzB,aAAa,CAAC,eAAe,CAAC;IAsEjC;;OAEG;IACH,OAAO,CAAC,WAAW;IAsFnB;;OAEG;IACH,OAAO,CAAC,iBAAiB;CAgH1B"}
@@ -1,322 +0,0 @@
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.map((tool) => {
74
- const finalName = 'function' in tool && tool.function?.name ? tool.function.name : tool.name;
75
- const finalDescription = 'function' in tool && tool.function?.description ? tool.function.description : tool.description;
76
- const finalParameters = 'function' in tool && tool.function?.parameters ? tool.function.parameters : tool.parameters;
77
- return {
78
- type: 'function',
79
- function: {
80
- name: finalName,
81
- description: finalDescription,
82
- parameters: finalParameters,
83
- },
84
- };
85
- });
86
- }
87
- if (request.toolChoice)
88
- openaiRequest.tool_choice = request.toolChoice;
89
- this.logger('debug', 'OpenAI completion request', {
90
- model,
91
- messageCount: request.messages.length,
92
- });
93
- const response = await this.makeRequest('/chat/completions', 'POST', openaiRequest, request);
94
- if (!response.choices || response.choices.length === 0) {
95
- throw new LLMError('No choices in OpenAI response', 'NO_CHOICES');
96
- }
97
- const choice = response.choices[0];
98
- const message = choice.message;
99
- if (!message) {
100
- throw new LLMError('No message in OpenAI response choice', 'NO_MESSAGE');
101
- }
102
- const result = {
103
- content: message.content || '',
104
- model: response.model,
105
- stopReason: choice.finish_reason,
106
- raw: response,
107
- };
108
- if (response.usage) {
109
- result.usage = {
110
- promptTokens: response.usage.prompt_tokens,
111
- completionTokens: response.usage.completion_tokens,
112
- totalTokens: response.usage.total_tokens,
113
- };
114
- }
115
- if (message.tool_calls && message.tool_calls.length > 0) {
116
- result.toolCalls = message.tool_calls.map((call) => ({
117
- id: call.id,
118
- name: call.function.name,
119
- arguments: JSON.parse(call.function.arguments),
120
- }));
121
- }
122
- this.logger('debug', 'OpenAI completion response', {
123
- model: response.model,
124
- tokens: response.usage?.total_tokens,
125
- });
126
- return result;
127
- }, this.getRetryConfig(request));
128
- }
129
- /**
130
- * Stream completion
131
- */
132
- async *completeStream(request) {
133
- validateCompletionRequest(request);
134
- const model = this.parseModel(request.model);
135
- const openaiRequest = {
136
- model,
137
- stream: true,
138
- messages: request.messages.map((msg) => ({
139
- role: msg.role,
140
- content: msg.content,
141
- })),
142
- };
143
- if (request.maxTokens)
144
- openaiRequest.max_tokens = request.maxTokens;
145
- if (request.temperature !== undefined)
146
- openaiRequest.temperature = request.temperature;
147
- if (request.topP !== undefined)
148
- openaiRequest.top_p = request.topP;
149
- if (request.frequencyPenalty !== undefined)
150
- openaiRequest.frequency_penalty = request.frequencyPenalty;
151
- if (request.presencePenalty !== undefined)
152
- openaiRequest.presence_penalty = request.presencePenalty;
153
- if (request.stop)
154
- openaiRequest.stop = request.stop;
155
- if (request.tools) {
156
- openaiRequest.tools = request.tools.map((tool) => {
157
- if ('function' in tool && tool.function?.name) {
158
- return {
159
- type: 'function',
160
- function: {
161
- name: tool.function.name,
162
- description: tool.function.description,
163
- parameters: tool.function.parameters,
164
- },
165
- };
166
- }
167
- return {
168
- type: 'function',
169
- function: {
170
- name: tool.name,
171
- description: tool.description,
172
- parameters: tool.parameters,
173
- },
174
- };
175
- });
176
- }
177
- if (request.toolChoice)
178
- openaiRequest.tool_choice = request.toolChoice;
179
- this.logger('debug', 'OpenAI stream request', { model });
180
- const stream = await this.makeStreamRequest('/chat/completions', 'POST', openaiRequest, request);
181
- for await (const chunk of stream) {
182
- if (chunk.choices && chunk.choices.length > 0) {
183
- const choice = chunk.choices[0];
184
- if (choice.delta?.content) {
185
- yield {
186
- delta: choice.delta.content,
187
- stopReason: choice.finish_reason,
188
- };
189
- }
190
- }
191
- }
192
- }
193
- /**
194
- * Make HTTP request to OpenAI API
195
- */
196
- makeRequest(path, method = 'POST', body, request) {
197
- return new Promise((resolve, reject) => {
198
- const url = new URL(path, this.baseUrl);
199
- const timeout = this.getTimeout(request);
200
- const requestOptions = {
201
- method,
202
- headers: {
203
- 'Content-Type': 'application/json',
204
- Authorization: `Bearer ${this.apiKey}`,
205
- ...this.getHeaders(request),
206
- },
207
- timeout,
208
- };
209
- const protocol = this.baseUrl.startsWith('https') ? https : http;
210
- const req = protocol.request(url, requestOptions, (res) => {
211
- let data = '';
212
- res.on('data', (chunk) => {
213
- data += chunk;
214
- });
215
- res.on('end', () => {
216
- if (!res.statusCode || res.statusCode >= 400) {
217
- try {
218
- const errorData = JSON.parse(data);
219
- reject(new LLMError(errorData.error?.message || 'OpenAI API error', errorData.error?.code, res.statusCode, errorData, res.statusCode === 429 ||
220
- res.statusCode === 502 ||
221
- res.statusCode === 503));
222
- }
223
- catch {
224
- reject(new LLMError(`OpenAI API error: ${data}`, 'API_ERROR', res.statusCode, null, false));
225
- }
226
- }
227
- else {
228
- try {
229
- resolve(JSON.parse(data));
230
- }
231
- catch (error) {
232
- reject(new LLMError('Failed to parse OpenAI response', 'PARSE_ERROR', undefined, { data }));
233
- }
234
- }
235
- });
236
- });
237
- req.on('error', (error) => {
238
- reject(new LLMError(`OpenAI request failed: ${error.message}`, 'REQUEST_FAILED', undefined, { error: error.message }, true));
239
- });
240
- if (body) {
241
- req.write(JSON.stringify(body));
242
- }
243
- req.end();
244
- });
245
- }
246
- /**
247
- * Stream HTTP request
248
- */
249
- makeStreamRequest(path, method = 'POST', body, request) {
250
- const self = this;
251
- return {
252
- async *[Symbol.asyncIterator]() {
253
- const url = new URL(path, self.baseUrl);
254
- const timeout = self.getTimeout(request);
255
- const requestOptions = {
256
- method,
257
- headers: {
258
- 'Content-Type': 'application/json',
259
- Authorization: `Bearer ${self.apiKey}`,
260
- ...self.getHeaders(request),
261
- },
262
- timeout,
263
- };
264
- const protocol = self.baseUrl.startsWith('https') ? https : http;
265
- const chunks = [];
266
- await new Promise((resolve, reject) => {
267
- const req = protocol.request(url, requestOptions, (res) => {
268
- if (!res.statusCode || res.statusCode >= 400) {
269
- let errorData = '';
270
- res.on('data', (chunk) => {
271
- errorData += chunk;
272
- });
273
- res.on('end', () => {
274
- reject(new LLMError(`OpenAI stream error: ${errorData}`, 'STREAM_ERROR', res.statusCode));
275
- });
276
- return;
277
- }
278
- let buffer = '';
279
- res.on('data', (chunk) => {
280
- buffer += chunk.toString();
281
- const lines = buffer.split('\n');
282
- buffer = lines[lines.length - 1];
283
- for (let i = 0; i < lines.length - 1; i++) {
284
- const line = lines[i].trim();
285
- if (!line || line === '[DONE]')
286
- continue;
287
- if (line.startsWith('data: ')) {
288
- try {
289
- const data = JSON.parse(line.slice(6));
290
- chunks.push(data);
291
- }
292
- catch (error) {
293
- // Ignore parse errors in stream
294
- }
295
- }
296
- }
297
- });
298
- res.on('end', () => {
299
- resolve();
300
- });
301
- });
302
- req.on('error', (error) => {
303
- reject(new LLMError(`OpenAI stream request failed: ${error.message}`, 'REQUEST_FAILED', undefined, { error: error.message }, true));
304
- });
305
- req.on('timeout', () => {
306
- req.destroy();
307
- reject(new LLMError('OpenAI stream request timeout', 'TIMEOUT', undefined, null, true));
308
- });
309
- if (body) {
310
- req.write(JSON.stringify(body));
311
- }
312
- req.end();
313
- });
314
- // Yield collected chunks
315
- for (const chunk of chunks) {
316
- yield chunk;
317
- }
318
- },
319
- };
320
- }
321
- }
322
- //# sourceMappingURL=openai.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/providers/openai.ts"],"names":[],"mappings":"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"}