@ai-orchestration/core 0.2.0 → 0.4.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.
Files changed (185) hide show
  1. package/README.md +16 -0
  2. package/dist/cjs/core/errors.d.ts +21 -0
  3. package/dist/cjs/core/errors.d.ts.map +1 -0
  4. package/dist/cjs/core/errors.js +40 -0
  5. package/dist/cjs/core/errors.js.map +1 -0
  6. package/dist/cjs/core/interfaces.d.ts +170 -0
  7. package/dist/cjs/core/interfaces.d.ts.map +1 -0
  8. package/dist/cjs/core/interfaces.js +6 -0
  9. package/dist/cjs/core/interfaces.js.map +1 -0
  10. package/dist/cjs/core/metrics.d.ts +161 -0
  11. package/dist/cjs/core/metrics.d.ts.map +1 -0
  12. package/dist/cjs/core/metrics.js +282 -0
  13. package/dist/cjs/core/metrics.js.map +1 -0
  14. package/dist/cjs/core/orchestrator.d.ts +102 -0
  15. package/dist/cjs/core/orchestrator.d.ts.map +1 -0
  16. package/dist/cjs/core/orchestrator.js +493 -0
  17. package/dist/cjs/core/orchestrator.js.map +1 -0
  18. package/dist/cjs/core/types.d.ts +238 -0
  19. package/dist/cjs/core/types.d.ts.map +1 -0
  20. package/dist/cjs/core/types.js +6 -0
  21. package/dist/cjs/core/types.js.map +1 -0
  22. package/dist/cjs/factory/index.d.ts +14 -0
  23. package/dist/cjs/factory/index.d.ts.map +1 -0
  24. package/dist/cjs/factory/index.js +219 -0
  25. package/dist/cjs/factory/index.js.map +1 -0
  26. package/dist/cjs/index.d.ts +16 -0
  27. package/dist/cjs/index.d.ts.map +1 -0
  28. package/dist/cjs/index.js +38 -0
  29. package/dist/cjs/index.js.map +1 -0
  30. package/dist/cjs/providers/base.d.ts +30 -0
  31. package/dist/cjs/providers/base.d.ts.map +1 -0
  32. package/dist/cjs/providers/base.js +35 -0
  33. package/dist/cjs/providers/base.js.map +1 -0
  34. package/dist/cjs/providers/cerebras.d.ts +26 -0
  35. package/dist/cjs/providers/cerebras.d.ts.map +1 -0
  36. package/dist/cjs/providers/cerebras.js +228 -0
  37. package/dist/cjs/providers/cerebras.js.map +1 -0
  38. package/dist/cjs/providers/gemini.d.ts +26 -0
  39. package/dist/cjs/providers/gemini.d.ts.map +1 -0
  40. package/dist/cjs/providers/gemini.js +225 -0
  41. package/dist/cjs/providers/gemini.js.map +1 -0
  42. package/dist/cjs/providers/groq.d.ts +26 -0
  43. package/dist/cjs/providers/groq.d.ts.map +1 -0
  44. package/dist/cjs/providers/groq.js +286 -0
  45. package/dist/cjs/providers/groq.js.map +1 -0
  46. package/dist/cjs/providers/index.d.ts +17 -0
  47. package/dist/cjs/providers/index.d.ts.map +1 -0
  48. package/dist/cjs/providers/index.js +21 -0
  49. package/dist/cjs/providers/index.js.map +1 -0
  50. package/dist/cjs/providers/local.d.ts +27 -0
  51. package/dist/cjs/providers/local.d.ts.map +1 -0
  52. package/dist/cjs/providers/local.js +249 -0
  53. package/dist/cjs/providers/local.js.map +1 -0
  54. package/dist/cjs/providers/openai.d.ts +50 -0
  55. package/dist/cjs/providers/openai.d.ts.map +1 -0
  56. package/dist/cjs/providers/openai.js +313 -0
  57. package/dist/cjs/providers/openai.js.map +1 -0
  58. package/dist/cjs/providers/openrouter.d.ts +48 -0
  59. package/dist/cjs/providers/openrouter.d.ts.map +1 -0
  60. package/dist/cjs/providers/openrouter.js +251 -0
  61. package/dist/cjs/providers/openrouter.js.map +1 -0
  62. package/dist/cjs/strategies/base.d.ts +16 -0
  63. package/dist/cjs/strategies/base.d.ts.map +1 -0
  64. package/dist/cjs/strategies/base.js +25 -0
  65. package/dist/cjs/strategies/base.js.map +1 -0
  66. package/dist/cjs/strategies/fallback.d.ts +14 -0
  67. package/dist/cjs/strategies/fallback.d.ts.map +1 -0
  68. package/dist/cjs/strategies/fallback.js +32 -0
  69. package/dist/cjs/strategies/fallback.js.map +1 -0
  70. package/dist/cjs/strategies/health-aware.d.ts +20 -0
  71. package/dist/cjs/strategies/health-aware.d.ts.map +1 -0
  72. package/dist/cjs/strategies/health-aware.js +108 -0
  73. package/dist/cjs/strategies/health-aware.js.map +1 -0
  74. package/dist/cjs/strategies/index.d.ts +14 -0
  75. package/dist/cjs/strategies/index.d.ts.map +1 -0
  76. package/dist/cjs/strategies/index.js +19 -0
  77. package/dist/cjs/strategies/index.js.map +1 -0
  78. package/dist/cjs/strategies/priority.d.ts +18 -0
  79. package/dist/cjs/strategies/priority.d.ts.map +1 -0
  80. package/dist/cjs/strategies/priority.js +39 -0
  81. package/dist/cjs/strategies/priority.js.map +1 -0
  82. package/dist/cjs/strategies/round-robin.d.ts +10 -0
  83. package/dist/cjs/strategies/round-robin.d.ts.map +1 -0
  84. package/dist/cjs/strategies/round-robin.js +28 -0
  85. package/dist/cjs/strategies/round-robin.js.map +1 -0
  86. package/dist/cjs/strategies/weighted.d.ts +20 -0
  87. package/dist/cjs/strategies/weighted.d.ts.map +1 -0
  88. package/dist/cjs/strategies/weighted.js +61 -0
  89. package/dist/cjs/strategies/weighted.js.map +1 -0
  90. package/dist/esm/core/errors.d.ts +21 -0
  91. package/dist/esm/core/errors.d.ts.map +1 -0
  92. package/dist/esm/core/errors.js +33 -0
  93. package/dist/esm/core/errors.js.map +1 -0
  94. package/dist/esm/core/interfaces.d.ts +170 -0
  95. package/dist/esm/core/interfaces.d.ts.map +1 -0
  96. package/dist/esm/core/interfaces.js +5 -0
  97. package/dist/esm/core/interfaces.js.map +1 -0
  98. package/dist/esm/core/metrics.d.ts +161 -0
  99. package/dist/esm/core/metrics.d.ts.map +1 -0
  100. package/dist/esm/core/metrics.js +278 -0
  101. package/dist/esm/core/metrics.js.map +1 -0
  102. package/dist/esm/core/orchestrator.d.ts +102 -0
  103. package/dist/esm/core/orchestrator.d.ts.map +1 -0
  104. package/dist/esm/core/orchestrator.js +489 -0
  105. package/dist/esm/core/orchestrator.js.map +1 -0
  106. package/dist/esm/core/types.d.ts +238 -0
  107. package/dist/esm/core/types.d.ts.map +1 -0
  108. package/dist/esm/core/types.js +5 -0
  109. package/dist/esm/core/types.js.map +1 -0
  110. package/dist/esm/factory/index.d.ts +14 -0
  111. package/dist/esm/factory/index.d.ts.map +1 -0
  112. package/dist/esm/factory/index.js +215 -0
  113. package/dist/esm/factory/index.js.map +1 -0
  114. package/dist/esm/index.d.ts +16 -0
  115. package/dist/esm/index.d.ts.map +1 -0
  116. package/dist/esm/index.js +16 -0
  117. package/dist/esm/index.js.map +1 -0
  118. package/dist/esm/providers/base.d.ts +30 -0
  119. package/dist/esm/providers/base.d.ts.map +1 -0
  120. package/dist/esm/providers/base.js +31 -0
  121. package/dist/esm/providers/base.js.map +1 -0
  122. package/dist/esm/providers/cerebras.d.ts +26 -0
  123. package/dist/esm/providers/cerebras.d.ts.map +1 -0
  124. package/dist/esm/providers/cerebras.js +224 -0
  125. package/dist/esm/providers/cerebras.js.map +1 -0
  126. package/dist/esm/providers/gemini.d.ts +26 -0
  127. package/dist/esm/providers/gemini.d.ts.map +1 -0
  128. package/dist/esm/providers/gemini.js +221 -0
  129. package/dist/esm/providers/gemini.js.map +1 -0
  130. package/dist/esm/providers/groq.d.ts +26 -0
  131. package/dist/esm/providers/groq.d.ts.map +1 -0
  132. package/dist/esm/providers/groq.js +282 -0
  133. package/dist/esm/providers/groq.js.map +1 -0
  134. package/dist/esm/providers/index.d.ts +17 -0
  135. package/dist/esm/providers/index.d.ts.map +1 -0
  136. package/dist/esm/providers/index.js +11 -0
  137. package/dist/esm/providers/index.js.map +1 -0
  138. package/dist/esm/providers/local.d.ts +27 -0
  139. package/dist/esm/providers/local.d.ts.map +1 -0
  140. package/dist/esm/providers/local.js +245 -0
  141. package/dist/esm/providers/local.js.map +1 -0
  142. package/dist/esm/providers/openai.d.ts +50 -0
  143. package/dist/esm/providers/openai.d.ts.map +1 -0
  144. package/dist/esm/providers/openai.js +309 -0
  145. package/dist/esm/providers/openai.js.map +1 -0
  146. package/dist/esm/providers/openrouter.d.ts +48 -0
  147. package/dist/esm/providers/openrouter.d.ts.map +1 -0
  148. package/dist/esm/providers/openrouter.js +247 -0
  149. package/dist/esm/providers/openrouter.js.map +1 -0
  150. package/dist/esm/strategies/base.d.ts +16 -0
  151. package/dist/esm/strategies/base.d.ts.map +1 -0
  152. package/dist/esm/strategies/base.js +21 -0
  153. package/dist/esm/strategies/base.js.map +1 -0
  154. package/dist/esm/strategies/fallback.d.ts +14 -0
  155. package/dist/esm/strategies/fallback.d.ts.map +1 -0
  156. package/dist/esm/strategies/fallback.js +28 -0
  157. package/dist/esm/strategies/fallback.js.map +1 -0
  158. package/dist/esm/strategies/health-aware.d.ts +20 -0
  159. package/dist/esm/strategies/health-aware.d.ts.map +1 -0
  160. package/dist/esm/strategies/health-aware.js +104 -0
  161. package/dist/esm/strategies/health-aware.js.map +1 -0
  162. package/dist/esm/strategies/index.d.ts +14 -0
  163. package/dist/esm/strategies/index.d.ts.map +1 -0
  164. package/dist/esm/strategies/index.js +10 -0
  165. package/dist/esm/strategies/index.js.map +1 -0
  166. package/dist/esm/strategies/priority.d.ts +18 -0
  167. package/dist/esm/strategies/priority.d.ts.map +1 -0
  168. package/dist/esm/strategies/priority.js +35 -0
  169. package/dist/esm/strategies/priority.js.map +1 -0
  170. package/dist/esm/strategies/round-robin.d.ts +10 -0
  171. package/dist/esm/strategies/round-robin.d.ts.map +1 -0
  172. package/dist/esm/strategies/round-robin.js +24 -0
  173. package/dist/esm/strategies/round-robin.js.map +1 -0
  174. package/dist/esm/strategies/weighted.d.ts +20 -0
  175. package/dist/esm/strategies/weighted.d.ts.map +1 -0
  176. package/dist/esm/strategies/weighted.js +57 -0
  177. package/dist/esm/strategies/weighted.js.map +1 -0
  178. package/docs/CHANGELOG.md +33 -0
  179. package/examples/README.md +76 -0
  180. package/examples/image-generation.ts +182 -0
  181. package/examples/images.ts +261 -0
  182. package/examples/metrics.ts +2 -0
  183. package/package.json +18 -7
  184. package/tsconfig.cjs.json +10 -0
  185. package/tsconfig.esm.json +10 -0
@@ -0,0 +1,50 @@
1
+ /**
2
+ * OpenAI provider implementation
3
+ * Supports both chat completions and image generation (DALL-E)
4
+ */
5
+ import { BaseProvider } from './base.js';
6
+ import type { ChatMessage, ChatOptions, ChatResponse, ChatChunk, ProviderHealth, ProviderMetadata, ImageGenerationOptions, ImageGenerationResponse } from '../core/types.js';
7
+ export interface OpenAIProviderConfig {
8
+ /** Unique identifier for this provider instance */
9
+ id: string;
10
+ /** OpenAI API key */
11
+ apiKey: string;
12
+ /**
13
+ * Model to use for chat completions (default: 'gpt-3.5-turbo')
14
+ * For image generation, DALL-E 3 is used by default regardless of this setting
15
+ */
16
+ model?: string;
17
+ /** Custom base URL (default: 'https://api.openai.com/v1') */
18
+ baseURL?: string;
19
+ }
20
+ export declare class OpenAIProvider extends BaseProvider {
21
+ readonly id: string;
22
+ readonly metadata: ProviderMetadata;
23
+ private apiKey;
24
+ private model;
25
+ private baseURL;
26
+ constructor(config: OpenAIProviderConfig);
27
+ checkHealth(): Promise<ProviderHealth>;
28
+ /**
29
+ * Perform a chat completion using OpenAI's API
30
+ */
31
+ chat(messages: ChatMessage[], options?: ChatOptions): Promise<ChatResponse>;
32
+ /**
33
+ * Perform a streaming chat completion using OpenAI's API
34
+ */
35
+ chatStream(messages: ChatMessage[], options?: ChatOptions): Promise<ReadableStream<ChatChunk>>;
36
+ /**
37
+ * Generate images from a text prompt using DALL-E models
38
+ */
39
+ generateImage(prompt: string, options?: ImageGenerationOptions): Promise<ImageGenerationResponse>;
40
+ protected formatMessages(messages: ChatMessage[]): unknown;
41
+ /**
42
+ * Parse OpenAI API response into ChatResponse format
43
+ */
44
+ protected parseResponse(response: unknown): ChatResponse;
45
+ /**
46
+ * Parse OpenAI streaming response into ChatChunk stream
47
+ */
48
+ protected parseStream(stream: ReadableStream<unknown>): ReadableStream<ChatChunk>;
49
+ }
50
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../src/providers/openai.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,cAAc,EACd,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EAExB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,oBAAoB;IACnC,mDAAmD;IACnD,EAAE,EAAE,MAAM,CAAC;IACX,qBAAqB;IACrB,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,cAAe,SAAQ,YAAY;IAC9C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,oBAAoB;IAgBlC,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC;IAI5C;;OAEG;IACG,IAAI,CACR,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,YAAY,CAAC;IA8BxB;;OAEG;IACG,UAAU,CACd,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAkCrC;;OAEG;IACG,aAAa,CACjB,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,sBAAsB,GAC/B,OAAO,CAAC,uBAAuB,CAAC;IA8FnC,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO;IAoD1D;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,GAAG,YAAY;IAiCxD;;OAEG;IACH,SAAS,CAAC,WAAW,CACnB,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,GAC9B,cAAc,CAAC,SAAS,CAAC;CAoE7B"}
@@ -0,0 +1,309 @@
1
+ /**
2
+ * OpenAI provider implementation
3
+ * Supports both chat completions and image generation (DALL-E)
4
+ */
5
+ import { BaseProvider } from './base.js';
6
+ export class OpenAIProvider extends BaseProvider {
7
+ constructor(config) {
8
+ super();
9
+ this.id = config.id;
10
+ this.apiKey = config.apiKey;
11
+ this.model = config.model || 'gpt-3.5-turbo';
12
+ this.baseURL = config.baseURL || 'https://api.openai.com/v1';
13
+ this.metadata = {
14
+ id: this.id,
15
+ name: 'OpenAI',
16
+ model: this.model,
17
+ supportsImageGeneration: true,
18
+ capabilities: ['chat', 'image-generation'],
19
+ };
20
+ }
21
+ async checkHealth() {
22
+ return this.defaultHealthCheck();
23
+ }
24
+ /**
25
+ * Perform a chat completion using OpenAI's API
26
+ */
27
+ async chat(messages, options) {
28
+ const response = await fetch(`${this.baseURL}/chat/completions`, {
29
+ method: 'POST',
30
+ headers: {
31
+ 'Content-Type': 'application/json',
32
+ Authorization: `Bearer ${this.apiKey}`,
33
+ },
34
+ body: JSON.stringify({
35
+ model: this.model,
36
+ messages: this.formatMessages(messages),
37
+ temperature: options?.temperature,
38
+ max_tokens: options?.maxTokens,
39
+ top_p: options?.topP,
40
+ stop: options?.stopSequences,
41
+ frequency_penalty: options?.frequencyPenalty,
42
+ presence_penalty: options?.presencePenalty,
43
+ seed: options?.seed !== undefined && options.seed !== null ? options.seed : undefined,
44
+ user: options?.user,
45
+ }),
46
+ });
47
+ if (!response.ok) {
48
+ const error = await response.text();
49
+ throw new Error(`OpenAI API error: ${response.status} ${error}`);
50
+ }
51
+ const data = await response.json();
52
+ return this.parseResponse(data);
53
+ }
54
+ /**
55
+ * Perform a streaming chat completion using OpenAI's API
56
+ */
57
+ async chatStream(messages, options) {
58
+ const response = await fetch(`${this.baseURL}/chat/completions`, {
59
+ method: 'POST',
60
+ headers: {
61
+ 'Content-Type': 'application/json',
62
+ Authorization: `Bearer ${this.apiKey}`,
63
+ },
64
+ body: JSON.stringify({
65
+ model: this.model,
66
+ messages: this.formatMessages(messages),
67
+ stream: true,
68
+ temperature: options?.temperature,
69
+ max_tokens: options?.maxTokens,
70
+ top_p: options?.topP,
71
+ stop: options?.stopSequences,
72
+ frequency_penalty: options?.frequencyPenalty,
73
+ presence_penalty: options?.presencePenalty,
74
+ seed: options?.seed !== undefined && options.seed !== null ? options.seed : undefined,
75
+ user: options?.user,
76
+ }),
77
+ });
78
+ if (!response.ok) {
79
+ const error = await response.text();
80
+ throw new Error(`OpenAI API error: ${response.status} ${error}`);
81
+ }
82
+ if (!response.body) {
83
+ throw new Error('No response body');
84
+ }
85
+ return this.parseStream(response.body);
86
+ }
87
+ /**
88
+ * Generate images from a text prompt using DALL-E models
89
+ */
90
+ async generateImage(prompt, options) {
91
+ // Determine the image generation model to use
92
+ // Default to DALL-E 3, or use configured model if it's a DALL-E model
93
+ let imageModel = 'dall-e-3';
94
+ if (this.model.includes('dall-e-2')) {
95
+ imageModel = 'dall-e-2';
96
+ }
97
+ else if (this.model.includes('dall-e-3')) {
98
+ imageModel = 'dall-e-3';
99
+ }
100
+ // Build request body
101
+ const requestBody = {
102
+ model: imageModel,
103
+ prompt,
104
+ n: options?.n ?? 1,
105
+ size: options?.size || '1024x1024',
106
+ quality: options?.quality || 'standard',
107
+ response_format: options?.responseFormat || 'url',
108
+ };
109
+ // Add style parameter (only supported by DALL-E 3)
110
+ if (options?.style && imageModel === 'dall-e-3') {
111
+ requestBody.style = options.style;
112
+ }
113
+ const timeoutMs = options?.timeout ?? 60000;
114
+ const controller = new AbortController();
115
+ const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
116
+ try {
117
+ const response = await fetch(`${this.baseURL}/images/generations`, {
118
+ method: 'POST',
119
+ headers: {
120
+ 'Content-Type': 'application/json',
121
+ Authorization: `Bearer ${this.apiKey}`,
122
+ },
123
+ body: JSON.stringify(requestBody),
124
+ signal: controller.signal,
125
+ });
126
+ clearTimeout(timeoutId);
127
+ if (!response.ok) {
128
+ const errorText = await response.text();
129
+ let errorMessage = `OpenAI image generation error: ${response.status}`;
130
+ try {
131
+ const errorJson = JSON.parse(errorText);
132
+ errorMessage += ` - ${errorJson.error?.message || errorText}`;
133
+ }
134
+ catch {
135
+ errorMessage += ` - ${errorText}`;
136
+ }
137
+ throw new Error(errorMessage);
138
+ }
139
+ const data = await response.json();
140
+ const images = [];
141
+ if (Array.isArray(data.data)) {
142
+ for (const item of data.data) {
143
+ images.push({
144
+ url: item.url,
145
+ b64Json: item.b64_json,
146
+ revisedPrompt: item.revised_prompt,
147
+ });
148
+ }
149
+ }
150
+ return {
151
+ images,
152
+ model: imageModel,
153
+ usage: {
154
+ imagesGenerated: images.length,
155
+ },
156
+ metadata: {
157
+ created: data.created,
158
+ },
159
+ };
160
+ }
161
+ catch (error) {
162
+ clearTimeout(timeoutId);
163
+ if (error instanceof Error && error.name === 'AbortError') {
164
+ throw new Error('Image generation timeout');
165
+ }
166
+ throw error;
167
+ }
168
+ }
169
+ formatMessages(messages) {
170
+ return messages.map((msg) => {
171
+ // Handle multimodal content (array of ContentPart)
172
+ if (Array.isArray(msg.content)) {
173
+ const content = msg.content.map((part) => {
174
+ if (part.type === 'text') {
175
+ return { type: 'text', text: part.text };
176
+ }
177
+ else if (part.type === 'image') {
178
+ // Extract base64 data and mime type
179
+ let imageData = part.image;
180
+ let mimeType = part.mimeType || 'image/jpeg';
181
+ // Handle data URI format (data:image/jpeg;base64,...)
182
+ if (imageData.startsWith('data:')) {
183
+ const match = imageData.match(/^data:([^;]+);base64,(.+)$/);
184
+ if (match) {
185
+ mimeType = match[1];
186
+ imageData = match[2];
187
+ }
188
+ else {
189
+ const base64Index = imageData.indexOf('base64,');
190
+ if (base64Index !== -1) {
191
+ imageData = imageData.slice(base64Index + 7);
192
+ }
193
+ }
194
+ }
195
+ return {
196
+ type: 'image_url',
197
+ image_url: {
198
+ url: imageData.startsWith('http')
199
+ ? imageData
200
+ : `data:${mimeType};base64,${imageData}`,
201
+ },
202
+ };
203
+ }
204
+ return null;
205
+ }).filter(Boolean);
206
+ return {
207
+ role: msg.role,
208
+ content,
209
+ };
210
+ }
211
+ // Handle simple string content (backward compatibility)
212
+ return {
213
+ role: msg.role,
214
+ content: msg.content,
215
+ };
216
+ });
217
+ }
218
+ /**
219
+ * Parse OpenAI API response into ChatResponse format
220
+ */
221
+ parseResponse(response) {
222
+ const data = response;
223
+ const choice = data.choices?.[0];
224
+ if (!choice?.message?.content) {
225
+ throw new Error('Invalid response format from OpenAI');
226
+ }
227
+ return {
228
+ content: choice.message.content,
229
+ usage: data.usage
230
+ ? {
231
+ promptTokens: data.usage.prompt_tokens ?? 0,
232
+ completionTokens: data.usage.completion_tokens ?? 0,
233
+ totalTokens: data.usage.total_tokens ?? 0,
234
+ }
235
+ : undefined,
236
+ model: data.model,
237
+ finishReason: choice.finish_reason,
238
+ };
239
+ }
240
+ /**
241
+ * Parse OpenAI streaming response into ChatChunk stream
242
+ */
243
+ parseStream(stream) {
244
+ const reader = stream.getReader();
245
+ const decoder = new TextDecoder();
246
+ return new ReadableStream({
247
+ async start(controller) {
248
+ try {
249
+ while (true) {
250
+ const { done, value } = await reader.read();
251
+ if (done) {
252
+ controller.close();
253
+ break;
254
+ }
255
+ const chunk = decoder.decode(value);
256
+ const lines = chunk.split('\n').filter((line) => line.trim());
257
+ for (const line of lines) {
258
+ if (line.startsWith('data: ')) {
259
+ const data = line.slice(6);
260
+ if (data === '[DONE]') {
261
+ controller.close();
262
+ return;
263
+ }
264
+ try {
265
+ const parsed = JSON.parse(data);
266
+ const choice = parsed.choices?.[0];
267
+ const delta = choice?.delta;
268
+ if (delta?.content) {
269
+ controller.enqueue({
270
+ content: delta.content,
271
+ done: false,
272
+ finishReason: choice?.finish_reason,
273
+ });
274
+ }
275
+ if (choice?.finish_reason) {
276
+ controller.enqueue({
277
+ content: '',
278
+ done: true,
279
+ finishReason: choice.finish_reason,
280
+ usage: parsed.usage
281
+ ? {
282
+ promptTokens: parsed.usage.prompt_tokens,
283
+ completionTokens: parsed.usage.completion_tokens,
284
+ totalTokens: parsed.usage.total_tokens,
285
+ }
286
+ : undefined,
287
+ });
288
+ controller.close();
289
+ return;
290
+ }
291
+ }
292
+ catch {
293
+ // Skip invalid JSON
294
+ }
295
+ }
296
+ }
297
+ }
298
+ }
299
+ catch (error) {
300
+ controller.error(error);
301
+ }
302
+ finally {
303
+ reader.releaseLock();
304
+ }
305
+ },
306
+ });
307
+ }
308
+ }
309
+ //# 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,48 @@
1
+ /**
2
+ * OpenRouter provider implementation
3
+ */
4
+ import { BaseProvider } from './base.js';
5
+ import type { ChatMessage, ChatOptions, ChatResponse, ChatChunk, ProviderHealth, ProviderMetadata } from '../core/types.js';
6
+ export interface OpenRouterProviderConfig {
7
+ /** Unique identifier for this provider instance */
8
+ id: string;
9
+ /** OpenRouter API key */
10
+ apiKey: string;
11
+ /** Model to use (default: 'openai/gpt-3.5-turbo') */
12
+ model?: string;
13
+ /** Custom base URL (default: 'https://openrouter.ai/api/v1') */
14
+ baseURL?: string;
15
+ }
16
+ export declare class OpenRouterProvider extends BaseProvider {
17
+ readonly id: string;
18
+ readonly metadata: ProviderMetadata;
19
+ private apiKey;
20
+ private model;
21
+ private baseURL;
22
+ constructor(config: OpenRouterProviderConfig);
23
+ /**
24
+ * Check the health status of the OpenRouter provider
25
+ */
26
+ checkHealth(): Promise<ProviderHealth>;
27
+ /**
28
+ * Perform a chat completion using OpenRouter's API
29
+ */
30
+ chat(messages: ChatMessage[], options?: ChatOptions): Promise<ChatResponse>;
31
+ /**
32
+ * Perform a streaming chat completion using OpenRouter's API
33
+ */
34
+ chatStream(messages: ChatMessage[], options?: ChatOptions): Promise<ReadableStream<ChatChunk>>;
35
+ /**
36
+ * Format messages for OpenRouter API (supports multimodal content)
37
+ */
38
+ protected formatMessages(messages: ChatMessage[]): unknown;
39
+ /**
40
+ * Parse OpenRouter API response into ChatResponse format
41
+ */
42
+ protected parseResponse(response: unknown): ChatResponse;
43
+ /**
44
+ * Parse OpenRouter streaming response into ChatChunk stream
45
+ */
46
+ protected parseStream(stream: ReadableStream<unknown>): ReadableStream<ChatChunk>;
47
+ }
48
+ //# sourceMappingURL=openrouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../../src/providers/openrouter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,cAAc,EACd,gBAAgB,EACjB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,wBAAwB;IACvC,mDAAmD;IACnD,EAAE,EAAE,MAAM,CAAC;IACX,yBAAyB;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,kBAAmB,SAAQ,YAAY;IAClD,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;gBAEZ,MAAM,EAAE,wBAAwB;IAgB5C;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,cAAc,CAAC;IAI5C;;OAEG;IACG,IAAI,CACR,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,YAAY,CAAC;IAqCxB;;OAEG;IACG,UAAU,CACd,QAAQ,EAAE,WAAW,EAAE,EACvB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAyCrC;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO;IAqD1D;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,GAAG,YAAY;IAiCxD;;OAEG;IACH,SAAS,CAAC,WAAW,CACnB,MAAM,EAAE,cAAc,CAAC,OAAO,CAAC,GAC9B,cAAc,CAAC,SAAS,CAAC;CAoE7B"}