ai.matey.backend 0.2.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 (159) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/index.js +60 -0
  3. package/dist/cjs/index.js.map +1 -0
  4. package/dist/cjs/providers/ai21.js +331 -0
  5. package/dist/cjs/providers/ai21.js.map +1 -0
  6. package/dist/cjs/providers/anthropic.js +664 -0
  7. package/dist/cjs/providers/anthropic.js.map +1 -0
  8. package/dist/cjs/providers/anyscale.js +338 -0
  9. package/dist/cjs/providers/anyscale.js.map +1 -0
  10. package/dist/cjs/providers/aws-bedrock.js +374 -0
  11. package/dist/cjs/providers/aws-bedrock.js.map +1 -0
  12. package/dist/cjs/providers/azure-openai.js +406 -0
  13. package/dist/cjs/providers/azure-openai.js.map +1 -0
  14. package/dist/cjs/providers/cerebras.js +356 -0
  15. package/dist/cjs/providers/cerebras.js.map +1 -0
  16. package/dist/cjs/providers/cloudflare.js +359 -0
  17. package/dist/cjs/providers/cloudflare.js.map +1 -0
  18. package/dist/cjs/providers/cohere.js +368 -0
  19. package/dist/cjs/providers/cohere.js.map +1 -0
  20. package/dist/cjs/providers/deepinfra.js +343 -0
  21. package/dist/cjs/providers/deepinfra.js.map +1 -0
  22. package/dist/cjs/providers/deepseek.js +104 -0
  23. package/dist/cjs/providers/deepseek.js.map +1 -0
  24. package/dist/cjs/providers/fireworks.js +363 -0
  25. package/dist/cjs/providers/fireworks.js.map +1 -0
  26. package/dist/cjs/providers/gemini.js +292 -0
  27. package/dist/cjs/providers/gemini.js.map +1 -0
  28. package/dist/cjs/providers/groq.js +143 -0
  29. package/dist/cjs/providers/groq.js.map +1 -0
  30. package/dist/cjs/providers/huggingface.js +392 -0
  31. package/dist/cjs/providers/huggingface.js.map +1 -0
  32. package/dist/cjs/providers/lmstudio.js +144 -0
  33. package/dist/cjs/providers/lmstudio.js.map +1 -0
  34. package/dist/cjs/providers/mistral.js +288 -0
  35. package/dist/cjs/providers/mistral.js.map +1 -0
  36. package/dist/cjs/providers/nvidia.js +167 -0
  37. package/dist/cjs/providers/nvidia.js.map +1 -0
  38. package/dist/cjs/providers/ollama.js +257 -0
  39. package/dist/cjs/providers/ollama.js.map +1 -0
  40. package/dist/cjs/providers/openai.js +640 -0
  41. package/dist/cjs/providers/openai.js.map +1 -0
  42. package/dist/cjs/providers/openrouter.js +379 -0
  43. package/dist/cjs/providers/openrouter.js.map +1 -0
  44. package/dist/cjs/providers/perplexity.js +372 -0
  45. package/dist/cjs/providers/perplexity.js.map +1 -0
  46. package/dist/cjs/providers/replicate.js +340 -0
  47. package/dist/cjs/providers/replicate.js.map +1 -0
  48. package/dist/cjs/providers/together-ai.js +341 -0
  49. package/dist/cjs/providers/together-ai.js.map +1 -0
  50. package/dist/cjs/providers/xai.js +339 -0
  51. package/dist/cjs/providers/xai.js.map +1 -0
  52. package/dist/cjs/shared.js +279 -0
  53. package/dist/cjs/shared.js.map +1 -0
  54. package/dist/esm/index.js +44 -0
  55. package/dist/esm/index.js.map +1 -0
  56. package/dist/esm/providers/ai21.js +327 -0
  57. package/dist/esm/providers/ai21.js.map +1 -0
  58. package/dist/esm/providers/anthropic.js +660 -0
  59. package/dist/esm/providers/anthropic.js.map +1 -0
  60. package/dist/esm/providers/anyscale.js +334 -0
  61. package/dist/esm/providers/anyscale.js.map +1 -0
  62. package/dist/esm/providers/aws-bedrock.js +370 -0
  63. package/dist/esm/providers/aws-bedrock.js.map +1 -0
  64. package/dist/esm/providers/azure-openai.js +402 -0
  65. package/dist/esm/providers/azure-openai.js.map +1 -0
  66. package/dist/esm/providers/cerebras.js +352 -0
  67. package/dist/esm/providers/cerebras.js.map +1 -0
  68. package/dist/esm/providers/cloudflare.js +355 -0
  69. package/dist/esm/providers/cloudflare.js.map +1 -0
  70. package/dist/esm/providers/cohere.js +364 -0
  71. package/dist/esm/providers/cohere.js.map +1 -0
  72. package/dist/esm/providers/deepinfra.js +339 -0
  73. package/dist/esm/providers/deepinfra.js.map +1 -0
  74. package/dist/esm/providers/deepseek.js +99 -0
  75. package/dist/esm/providers/deepseek.js.map +1 -0
  76. package/dist/esm/providers/fireworks.js +359 -0
  77. package/dist/esm/providers/fireworks.js.map +1 -0
  78. package/dist/esm/providers/gemini.js +288 -0
  79. package/dist/esm/providers/gemini.js.map +1 -0
  80. package/dist/esm/providers/groq.js +138 -0
  81. package/dist/esm/providers/groq.js.map +1 -0
  82. package/dist/esm/providers/huggingface.js +387 -0
  83. package/dist/esm/providers/huggingface.js.map +1 -0
  84. package/dist/esm/providers/lmstudio.js +139 -0
  85. package/dist/esm/providers/lmstudio.js.map +1 -0
  86. package/dist/esm/providers/mistral.js +284 -0
  87. package/dist/esm/providers/mistral.js.map +1 -0
  88. package/dist/esm/providers/nvidia.js +162 -0
  89. package/dist/esm/providers/nvidia.js.map +1 -0
  90. package/dist/esm/providers/ollama.js +253 -0
  91. package/dist/esm/providers/ollama.js.map +1 -0
  92. package/dist/esm/providers/openai.js +636 -0
  93. package/dist/esm/providers/openai.js.map +1 -0
  94. package/dist/esm/providers/openrouter.js +375 -0
  95. package/dist/esm/providers/openrouter.js.map +1 -0
  96. package/dist/esm/providers/perplexity.js +368 -0
  97. package/dist/esm/providers/perplexity.js.map +1 -0
  98. package/dist/esm/providers/replicate.js +336 -0
  99. package/dist/esm/providers/replicate.js.map +1 -0
  100. package/dist/esm/providers/together-ai.js +337 -0
  101. package/dist/esm/providers/together-ai.js.map +1 -0
  102. package/dist/esm/providers/xai.js +335 -0
  103. package/dist/esm/providers/xai.js.map +1 -0
  104. package/dist/esm/shared.js +272 -0
  105. package/dist/esm/shared.js.map +1 -0
  106. package/dist/types/index.d.ts +38 -0
  107. package/dist/types/index.d.ts.map +1 -0
  108. package/dist/types/providers/ai21.d.ts +106 -0
  109. package/dist/types/providers/ai21.d.ts.map +1 -0
  110. package/dist/types/providers/anthropic.d.ts +194 -0
  111. package/dist/types/providers/anthropic.d.ts.map +1 -0
  112. package/dist/types/providers/anyscale.d.ts +109 -0
  113. package/dist/types/providers/anyscale.d.ts.map +1 -0
  114. package/dist/types/providers/aws-bedrock.d.ts +152 -0
  115. package/dist/types/providers/aws-bedrock.d.ts.map +1 -0
  116. package/dist/types/providers/azure-openai.d.ts +142 -0
  117. package/dist/types/providers/azure-openai.d.ts.map +1 -0
  118. package/dist/types/providers/cerebras.d.ts +130 -0
  119. package/dist/types/providers/cerebras.d.ts.map +1 -0
  120. package/dist/types/providers/cloudflare.d.ts +125 -0
  121. package/dist/types/providers/cloudflare.d.ts.map +1 -0
  122. package/dist/types/providers/cohere.d.ts +114 -0
  123. package/dist/types/providers/cohere.d.ts.map +1 -0
  124. package/dist/types/providers/deepinfra.d.ts +118 -0
  125. package/dist/types/providers/deepinfra.d.ts.map +1 -0
  126. package/dist/types/providers/deepseek.d.ts +68 -0
  127. package/dist/types/providers/deepseek.d.ts.map +1 -0
  128. package/dist/types/providers/fireworks.d.ts +127 -0
  129. package/dist/types/providers/fireworks.d.ts.map +1 -0
  130. package/dist/types/providers/gemini.d.ts +71 -0
  131. package/dist/types/providers/gemini.d.ts.map +1 -0
  132. package/dist/types/providers/groq.d.ts +83 -0
  133. package/dist/types/providers/groq.d.ts.map +1 -0
  134. package/dist/types/providers/huggingface.d.ts +154 -0
  135. package/dist/types/providers/huggingface.d.ts.map +1 -0
  136. package/dist/types/providers/lmstudio.d.ts +88 -0
  137. package/dist/types/providers/lmstudio.d.ts.map +1 -0
  138. package/dist/types/providers/mistral.d.ts +65 -0
  139. package/dist/types/providers/mistral.d.ts.map +1 -0
  140. package/dist/types/providers/nvidia.d.ts +100 -0
  141. package/dist/types/providers/nvidia.d.ts.map +1 -0
  142. package/dist/types/providers/ollama.d.ts +59 -0
  143. package/dist/types/providers/ollama.d.ts.map +1 -0
  144. package/dist/types/providers/openai.d.ts +205 -0
  145. package/dist/types/providers/openai.d.ts.map +1 -0
  146. package/dist/types/providers/openrouter.d.ts +135 -0
  147. package/dist/types/providers/openrouter.d.ts.map +1 -0
  148. package/dist/types/providers/perplexity.d.ts +116 -0
  149. package/dist/types/providers/perplexity.d.ts.map +1 -0
  150. package/dist/types/providers/replicate.d.ts +91 -0
  151. package/dist/types/providers/replicate.d.ts.map +1 -0
  152. package/dist/types/providers/together-ai.d.ts +118 -0
  153. package/dist/types/providers/together-ai.d.ts.map +1 -0
  154. package/dist/types/providers/xai.d.ts +119 -0
  155. package/dist/types/providers/xai.d.ts.map +1 -0
  156. package/dist/types/shared.d.ts +116 -0
  157. package/dist/types/shared.d.ts.map +1 -0
  158. package/package.json +327 -0
  159. package/readme.md +86 -0
@@ -0,0 +1,640 @@
1
+ "use strict";
2
+ /**
3
+ * OpenAI Backend Adapter
4
+ *
5
+ * Adapts Universal IR to OpenAI Chat Completions API.
6
+ * Handles OpenAI's in-messages system message strategy and 0-2 temperature range.
7
+ *
8
+ * @module
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.OpenAIBackendAdapter = void 0;
12
+ const ai_matey_errors_1 = require("ai.matey.errors");
13
+ const ai_matey_utils_1 = require("ai.matey.utils");
14
+ const ai_matey_utils_2 = require("ai.matey.utils");
15
+ const ai_matey_utils_3 = require("ai.matey.utils");
16
+ const shared_js_1 = require("../shared.js");
17
+ // ============================================================================
18
+ // OpenAI Backend Adapter
19
+ // ============================================================================
20
+ /**
21
+ * Backend adapter for OpenAI Chat Completions API.
22
+ */
23
+ class OpenAIBackendAdapter {
24
+ metadata;
25
+ config;
26
+ baseURL;
27
+ modelCache;
28
+ /**
29
+ * Create a new OpenAI backend adapter.
30
+ *
31
+ * @param config Backend adapter configuration
32
+ * @param metadataOverride Optional metadata to override defaults (used by subclasses)
33
+ */
34
+ constructor(config, metadataOverride) {
35
+ this.config = config;
36
+ this.baseURL = config.baseURL || 'https://api.openai.com/v1';
37
+ this.modelCache = (0, ai_matey_utils_2.getModelCache)(config.modelsCacheScope || 'global');
38
+ // Default OpenAI metadata
39
+ const defaultMetadata = {
40
+ name: 'openai-backend',
41
+ version: '1.0.0',
42
+ provider: 'OpenAI',
43
+ capabilities: {
44
+ streaming: true,
45
+ multiModal: true,
46
+ tools: true,
47
+ maxContextTokens: 128000,
48
+ systemMessageStrategy: 'in-messages',
49
+ supportsMultipleSystemMessages: false, // OpenAI prefers single system message
50
+ supportsTemperature: true,
51
+ supportsTopP: true,
52
+ supportsTopK: false,
53
+ supportsSeed: true,
54
+ supportsFrequencyPenalty: true,
55
+ supportsPresencePenalty: true,
56
+ maxStopSequences: 4,
57
+ },
58
+ config: {
59
+ baseURL: this.baseURL,
60
+ },
61
+ };
62
+ // Apply metadata overrides if provided (for subclasses)
63
+ this.metadata = metadataOverride
64
+ ? {
65
+ ...defaultMetadata,
66
+ ...metadataOverride,
67
+ capabilities: {
68
+ ...defaultMetadata.capabilities,
69
+ ...metadataOverride.capabilities,
70
+ },
71
+ config: {
72
+ ...defaultMetadata.config,
73
+ ...metadataOverride.config,
74
+ },
75
+ }
76
+ : defaultMetadata;
77
+ }
78
+ /**
79
+ * Execute non-streaming chat completion request.
80
+ */
81
+ async execute(request, signal) {
82
+ try {
83
+ // Convert IR to OpenAI format
84
+ const openaiRequest = this.fromIR(request);
85
+ // Make HTTP request
86
+ const startTime = Date.now();
87
+ const response = await this.makeRequest(openaiRequest, signal);
88
+ // Convert response to IR
89
+ const irResponse = this.toIR(response, request, Date.now() - startTime);
90
+ return irResponse;
91
+ }
92
+ catch (error) {
93
+ // Re-throw adapter errors
94
+ if (error instanceof ai_matey_errors_1.AdapterConversionError ||
95
+ error instanceof ai_matey_errors_1.NetworkError ||
96
+ error instanceof ai_matey_errors_1.ProviderError) {
97
+ throw error;
98
+ }
99
+ // Wrap unknown errors
100
+ throw new ai_matey_errors_1.ProviderError({
101
+ code: ai_matey_errors_1.ErrorCode.PROVIDER_ERROR,
102
+ message: `OpenAI request failed: ${error instanceof Error ? error.message : String(error)}`,
103
+ isRetryable: true,
104
+ provenance: {
105
+ backend: this.metadata.name,
106
+ },
107
+ cause: error instanceof Error ? error : undefined,
108
+ });
109
+ }
110
+ }
111
+ /**
112
+ * Execute streaming chat completion request.
113
+ */
114
+ async *executeStream(request, signal) {
115
+ try {
116
+ // Convert IR to OpenAI format
117
+ const openaiRequest = this.fromIR(request);
118
+ openaiRequest.stream = true;
119
+ // Get effective streaming configuration
120
+ const streamingConfig = (0, ai_matey_utils_3.mergeStreamingConfig)(this.config.streaming);
121
+ const effectiveMode = (0, ai_matey_utils_3.getEffectiveStreamMode)(request.streamMode, undefined, streamingConfig);
122
+ const includeBoth = streamingConfig.includeBoth || effectiveMode === 'accumulated';
123
+ // Make streaming HTTP request
124
+ const response = await fetch(`${this.baseURL}/chat/completions`, {
125
+ method: 'POST',
126
+ headers: this.getHeaders(),
127
+ body: JSON.stringify(openaiRequest),
128
+ signal,
129
+ });
130
+ if (!response.ok) {
131
+ const errorBody = await response.text();
132
+ throw (0, ai_matey_errors_1.createErrorFromHttpResponse)(response.status, response.statusText, errorBody, {
133
+ backend: this.metadata.name,
134
+ });
135
+ }
136
+ if (!response.body) {
137
+ throw new ai_matey_errors_1.StreamError({
138
+ code: ai_matey_errors_1.ErrorCode.STREAM_INTERRUPTED,
139
+ message: 'Response body is null',
140
+ provenance: {
141
+ backend: this.metadata.name,
142
+ },
143
+ });
144
+ }
145
+ // Parse SSE stream
146
+ let sequence = 0;
147
+ let contentBuffer = '';
148
+ let finishReasonReceived;
149
+ let usage;
150
+ // Yield start chunk
151
+ yield {
152
+ type: 'start',
153
+ sequence: sequence++,
154
+ metadata: {
155
+ ...request.metadata,
156
+ provenance: {
157
+ ...request.metadata.provenance,
158
+ backend: this.metadata.name,
159
+ },
160
+ },
161
+ };
162
+ // Read stream
163
+ const reader = response.body.getReader();
164
+ const decoder = new TextDecoder();
165
+ let buffer = '';
166
+ try {
167
+ while (true) {
168
+ const { done, value } = await reader.read();
169
+ if (done) {
170
+ break;
171
+ }
172
+ buffer += decoder.decode(value, { stream: true });
173
+ const lines = buffer.split('\n');
174
+ buffer = lines.pop() || '';
175
+ for (const line of lines) {
176
+ // Skip empty lines
177
+ if (!line.trim()) {
178
+ continue;
179
+ }
180
+ if (line.startsWith('data: ')) {
181
+ const data = line.slice(6).trim();
182
+ if (data === '[DONE]') {
183
+ // Stream complete - yield done chunk if not already sent
184
+ if (!finishReasonReceived) {
185
+ const message = {
186
+ role: 'assistant',
187
+ content: contentBuffer,
188
+ };
189
+ yield {
190
+ type: 'done',
191
+ sequence: sequence++,
192
+ finishReason: 'stop',
193
+ usage,
194
+ message,
195
+ };
196
+ }
197
+ continue;
198
+ }
199
+ try {
200
+ const chunk = JSON.parse(data);
201
+ // Validate chunk structure
202
+ if (!chunk.choices || chunk.choices.length === 0) {
203
+ console.warn('Invalid chunk structure: no choices', chunk);
204
+ continue;
205
+ }
206
+ const choice = chunk.choices[0];
207
+ if (!choice) {
208
+ continue;
209
+ }
210
+ // Content delta
211
+ if (choice.delta.content) {
212
+ contentBuffer += choice.delta.content;
213
+ // Build content chunk with optional accumulated field
214
+ const contentChunk = {
215
+ type: 'content',
216
+ sequence: sequence++,
217
+ delta: choice.delta.content,
218
+ role: 'assistant',
219
+ };
220
+ // Add accumulated field if configured
221
+ if (includeBoth) {
222
+ contentChunk.accumulated = contentBuffer;
223
+ }
224
+ yield contentChunk;
225
+ }
226
+ // Tool calls delta (not implemented yet - Phase 5)
227
+ if (choice.delta.tool_calls) {
228
+ // TODO: Handle tool call deltas in Phase 5
229
+ console.warn('Tool calls delta received but not yet implemented');
230
+ }
231
+ // Finish reason
232
+ if (choice.finish_reason && !finishReasonReceived) {
233
+ finishReasonReceived = this.mapFinishReason(choice.finish_reason);
234
+ // Build final message
235
+ const message = {
236
+ role: 'assistant',
237
+ content: contentBuffer,
238
+ };
239
+ yield {
240
+ type: 'done',
241
+ sequence: sequence++,
242
+ finishReason: finishReasonReceived,
243
+ usage,
244
+ message,
245
+ };
246
+ }
247
+ }
248
+ catch (parseError) {
249
+ // Log parse errors but continue streaming
250
+ console.warn('Failed to parse SSE chunk:', data, parseError);
251
+ continue;
252
+ }
253
+ }
254
+ else if (line.startsWith('event:')) {
255
+ // OpenAI doesn't typically use event: lines, but handle them
256
+ const eventType = line.slice(6).trim();
257
+ if (eventType === 'error') {
258
+ // Error event type
259
+ console.warn('Error event type detected');
260
+ }
261
+ }
262
+ }
263
+ }
264
+ // If stream ended without finish_reason, yield a done chunk
265
+ if (!finishReasonReceived) {
266
+ const message = {
267
+ role: 'assistant',
268
+ content: contentBuffer,
269
+ };
270
+ yield {
271
+ type: 'done',
272
+ sequence: sequence++,
273
+ finishReason: 'stop',
274
+ usage,
275
+ message,
276
+ };
277
+ }
278
+ }
279
+ finally {
280
+ reader.releaseLock();
281
+ }
282
+ }
283
+ catch (error) {
284
+ // Yield error chunk
285
+ yield {
286
+ type: 'error',
287
+ sequence: 0,
288
+ error: {
289
+ code: error instanceof Error ? error.name : 'UNKNOWN_ERROR',
290
+ message: error instanceof Error ? error.message : String(error),
291
+ },
292
+ };
293
+ }
294
+ }
295
+ /**
296
+ * Health check to verify OpenAI API is accessible.
297
+ */
298
+ async healthCheck() {
299
+ try {
300
+ const response = await fetch(`${this.baseURL}/models`, {
301
+ method: 'GET',
302
+ headers: this.getHeaders(),
303
+ signal: AbortSignal.timeout(5000),
304
+ });
305
+ return response.ok;
306
+ }
307
+ catch {
308
+ return false;
309
+ }
310
+ }
311
+ /**
312
+ * Estimate cost for a request (rough heuristic).
313
+ */
314
+ estimateCost(request) {
315
+ // Use shared token estimation utility
316
+ const estimatedInputTokens = (0, shared_js_1.estimateTokens)(request);
317
+ // Rough cost: $0.01 per 1000 tokens (varies by model)
318
+ return Promise.resolve((estimatedInputTokens / 1000) * 0.01);
319
+ }
320
+ /**
321
+ * List available models from OpenAI.
322
+ *
323
+ * This method supports three sources:
324
+ * 1. Static config (config.models) - highest priority
325
+ * 2. Cache (if enabled and not expired)
326
+ * 3. Remote API (/v1/models endpoint)
327
+ */
328
+ async listModels(options) {
329
+ try {
330
+ // 1. Check static config override first
331
+ if (this.config.models && !options?.forceRefresh) {
332
+ return (0, shared_js_1.buildStaticResult)(this.config.models, 'openai');
333
+ }
334
+ // 2. Check cache
335
+ if (this.config.cacheModels !== false && !options?.forceRefresh) {
336
+ const cached = this.modelCache.get(this.metadata.name);
337
+ if (cached) {
338
+ return (0, shared_js_1.applyModelFilter)(cached, options?.filter);
339
+ }
340
+ }
341
+ // 3. Fetch from OpenAI API
342
+ const endpoint = this.config.modelsEndpoint || `${this.baseURL}/models`;
343
+ const response = await fetch(endpoint, {
344
+ method: 'GET',
345
+ headers: this.getHeaders(),
346
+ signal: AbortSignal.timeout(this.config.timeout || 30000),
347
+ });
348
+ if (!response.ok) {
349
+ throw (0, ai_matey_errors_1.createErrorFromHttpResponse)(response.status, response.statusText, await response.text(), {
350
+ backend: this.metadata.name,
351
+ });
352
+ }
353
+ const data = (await response.json());
354
+ // 4. Transform to AIModel format
355
+ const models = data.data.map((model) => this.transformOpenAIModel(model));
356
+ // 5. Build result
357
+ const result = {
358
+ models,
359
+ source: 'remote',
360
+ fetchedAt: Date.now(),
361
+ isComplete: true,
362
+ };
363
+ // 6. Cache the result
364
+ if (this.config.cacheModels !== false) {
365
+ const ttl = this.config.modelsCacheTTL || 3600000; // 1 hour default
366
+ this.modelCache.set(this.metadata.name, result, ttl);
367
+ }
368
+ // 7. Apply filter if requested
369
+ return (0, shared_js_1.applyModelFilter)(result, options?.filter);
370
+ }
371
+ catch (error) {
372
+ // If we have a cached result, return it as fallback
373
+ if (!options?.forceRefresh) {
374
+ const cached = this.modelCache.get(this.metadata.name);
375
+ if (cached) {
376
+ return cached;
377
+ }
378
+ }
379
+ // Re-throw known errors
380
+ if (error instanceof ai_matey_errors_1.ProviderError || error instanceof ai_matey_errors_1.NetworkError) {
381
+ throw error;
382
+ }
383
+ // Wrap unknown errors
384
+ throw new ai_matey_errors_1.ProviderError({
385
+ code: ai_matey_errors_1.ErrorCode.PROVIDER_ERROR,
386
+ message: `Failed to list OpenAI models: ${error instanceof Error ? error.message : String(error)}`,
387
+ isRetryable: true,
388
+ provenance: {
389
+ backend: this.metadata.name,
390
+ },
391
+ cause: error instanceof Error ? error : undefined,
392
+ });
393
+ }
394
+ }
395
+ /**
396
+ * Invalidate the cached model list.
397
+ *
398
+ * Forces the next listModels() call to fetch fresh data from the API
399
+ * (unless static models are configured).
400
+ *
401
+ * @returns This adapter for method chaining
402
+ */
403
+ invalidateModelCache() {
404
+ this.modelCache.invalidate(this.metadata.name);
405
+ return this;
406
+ }
407
+ // ==========================================================================
408
+ // Private Helper Methods
409
+ // ==========================================================================
410
+ /**
411
+ * Convert IR request to OpenAI format.
412
+ *
413
+ * Public method for testing and debugging - see what will be sent to OpenAI.
414
+ */
415
+ fromIR(request) {
416
+ try {
417
+ // Normalize system messages (OpenAI uses in-messages strategy)
418
+ const { messages } = (0, ai_matey_utils_1.normalizeSystemMessages)(request.messages, this.metadata.capabilities.systemMessageStrategy, this.metadata.capabilities.supportsMultipleSystemMessages);
419
+ // Convert messages
420
+ const openaiMessages = messages.map((msg) => this.convertMessageToOpenAI(msg));
421
+ // Build OpenAI request
422
+ const openaiRequest = {
423
+ model: request.parameters?.model || this.config.defaultModel || 'gpt-3.5-turbo',
424
+ messages: openaiMessages,
425
+ temperature: request.parameters?.temperature,
426
+ max_tokens: request.parameters?.maxTokens,
427
+ top_p: request.parameters?.topP,
428
+ frequency_penalty: request.parameters?.frequencyPenalty,
429
+ presence_penalty: request.parameters?.presencePenalty,
430
+ stop: request.parameters?.stopSequences ? [...request.parameters.stopSequences] : undefined,
431
+ stream: request.stream,
432
+ user: request.parameters?.user,
433
+ seed: request.parameters?.seed,
434
+ };
435
+ return openaiRequest;
436
+ }
437
+ catch (error) {
438
+ throw new ai_matey_errors_1.AdapterConversionError({
439
+ code: ai_matey_errors_1.ErrorCode.ADAPTER_CONVERSION_ERROR,
440
+ message: `Failed to convert IR to OpenAI format: ${error instanceof Error ? error.message : String(error)}`,
441
+ provenance: {
442
+ backend: this.metadata.name,
443
+ },
444
+ cause: error instanceof Error ? error : undefined,
445
+ });
446
+ }
447
+ }
448
+ /**
449
+ * Convert OpenAI response to IR format.
450
+ *
451
+ * Public method for testing and debugging - parse OpenAI responses manually.
452
+ */
453
+ toIR(response, originalRequest, latencyMs) {
454
+ try {
455
+ const choice = response.choices[0];
456
+ if (!choice) {
457
+ throw new Error('No choices in OpenAI response');
458
+ }
459
+ // Convert message
460
+ const message = {
461
+ role: 'assistant',
462
+ content: this.convertMessageContentFromOpenAI(choice.message.content),
463
+ };
464
+ // Map finish reason
465
+ const finishReason = this.mapFinishReason(choice.finish_reason || 'stop');
466
+ // Build IR response
467
+ const irResponse = {
468
+ message,
469
+ finishReason,
470
+ usage: response.usage
471
+ ? {
472
+ promptTokens: response.usage.prompt_tokens,
473
+ completionTokens: response.usage.completion_tokens,
474
+ totalTokens: response.usage.total_tokens,
475
+ }
476
+ : undefined,
477
+ metadata: {
478
+ ...originalRequest.metadata,
479
+ providerResponseId: response.id,
480
+ provenance: {
481
+ ...originalRequest.metadata.provenance,
482
+ backend: this.metadata.name,
483
+ },
484
+ custom: {
485
+ ...originalRequest.metadata.custom,
486
+ openaiResponseId: response.id,
487
+ latencyMs,
488
+ },
489
+ },
490
+ raw: response,
491
+ };
492
+ return irResponse;
493
+ }
494
+ catch (error) {
495
+ throw new ai_matey_errors_1.AdapterConversionError({
496
+ code: ai_matey_errors_1.ErrorCode.ADAPTER_CONVERSION_ERROR,
497
+ message: `Failed to convert OpenAI response to IR: ${error instanceof Error ? error.message : String(error)}`,
498
+ provenance: {
499
+ backend: this.metadata.name,
500
+ },
501
+ cause: error instanceof Error ? error : undefined,
502
+ });
503
+ }
504
+ }
505
+ /**
506
+ * Convert IR message to OpenAI message.
507
+ */
508
+ convertMessageToOpenAI(message) {
509
+ // Convert content
510
+ let content;
511
+ if (typeof message.content === 'string') {
512
+ content = message.content;
513
+ }
514
+ else {
515
+ // Convert content blocks
516
+ content = message.content.map((block) => {
517
+ switch (block.type) {
518
+ case 'text':
519
+ return { type: 'text', text: block.text };
520
+ case 'image':
521
+ if (block.source.type === 'url') {
522
+ return {
523
+ type: 'image_url',
524
+ image_url: { url: block.source.url },
525
+ };
526
+ }
527
+ else {
528
+ // Convert base64 to data URL
529
+ const dataUrl = `data:${block.source.mediaType};base64,${block.source.data}`;
530
+ return {
531
+ type: 'image_url',
532
+ image_url: { url: dataUrl },
533
+ };
534
+ }
535
+ default:
536
+ // Fallback to text for unsupported types
537
+ return { type: 'text', text: JSON.stringify(block) };
538
+ }
539
+ });
540
+ }
541
+ return {
542
+ role: message.role,
543
+ content,
544
+ name: message.name,
545
+ };
546
+ }
547
+ /**
548
+ * Convert OpenAI message content to string.
549
+ */
550
+ convertMessageContentFromOpenAI(content) {
551
+ if (typeof content === 'string') {
552
+ return content;
553
+ }
554
+ // Extract text from content blocks
555
+ return content
556
+ .map((block) => {
557
+ if (block.type === 'text') {
558
+ return block.text;
559
+ }
560
+ return '';
561
+ })
562
+ .join('');
563
+ }
564
+ /**
565
+ * Map OpenAI finish reason to IR finish reason.
566
+ */
567
+ mapFinishReason(finishReason) {
568
+ switch (finishReason) {
569
+ case 'stop':
570
+ return 'stop';
571
+ case 'length':
572
+ return 'length';
573
+ case 'tool_calls':
574
+ return 'tool_calls';
575
+ case 'content_filter':
576
+ return 'content_filter';
577
+ default:
578
+ return 'stop';
579
+ }
580
+ }
581
+ /**
582
+ * Make HTTP request to OpenAI API.
583
+ */
584
+ async makeRequest(request, signal) {
585
+ try {
586
+ const response = await fetch(`${this.baseURL}/chat/completions`, {
587
+ method: 'POST',
588
+ headers: this.getHeaders(),
589
+ body: JSON.stringify(request),
590
+ signal,
591
+ });
592
+ if (!response.ok) {
593
+ const errorBody = await response.text();
594
+ throw (0, ai_matey_errors_1.createErrorFromHttpResponse)(response.status, response.statusText, errorBody, {
595
+ backend: this.metadata.name,
596
+ });
597
+ }
598
+ const data = (await response.json());
599
+ return data;
600
+ }
601
+ catch (error) {
602
+ if (error instanceof TypeError && error.message.includes('fetch')) {
603
+ throw new ai_matey_errors_1.NetworkError({
604
+ code: ai_matey_errors_1.ErrorCode.NETWORK_ERROR,
605
+ message: `Network request failed: ${error.message}`,
606
+ provenance: {
607
+ backend: this.metadata.name,
608
+ },
609
+ cause: error,
610
+ });
611
+ }
612
+ throw error;
613
+ }
614
+ }
615
+ /**
616
+ * Get HTTP headers for OpenAI API requests.
617
+ */
618
+ getHeaders() {
619
+ return {
620
+ 'Content-Type': 'application/json',
621
+ Authorization: `Bearer ${this.config.apiKey}`,
622
+ ...this.config.headers,
623
+ };
624
+ }
625
+ /**
626
+ * Transform OpenAI model object to AIModel.
627
+ */
628
+ transformOpenAIModel(model) {
629
+ return {
630
+ id: model.id,
631
+ name: model.id, // OpenAI doesn't provide separate display names
632
+ created: new Date(model.created * 1000).toISOString(),
633
+ ownedBy: model.owned_by,
634
+ // Note: OpenAI /models endpoint doesn't include capability info
635
+ // This would need to be enriched from a static mapping if needed
636
+ };
637
+ }
638
+ }
639
+ exports.OpenAIBackendAdapter = OpenAIBackendAdapter;
640
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../src/providers/openai.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAYH,qDAOyB;AACzB,mDAAyD;AACzD,mDAA+C;AAC/C,mDAA8E;AAC9E,4CAKsB;AAoHtB,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E;;GAEG;AACH,MAAa,oBAAoB;IACtB,QAAQ,CAAkB;IAChB,MAAM,CAAuB;IAC7B,OAAO,CAAS;IAClB,UAAU,CAAmC;IAE9D;;;;;OAKG;IACH,YAAY,MAA4B,EAAE,gBAA2C;QACnF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,2BAA2B,CAAC;QAC7D,IAAI,CAAC,UAAU,GAAG,IAAA,8BAAa,EAAC,MAAM,CAAC,gBAAgB,IAAI,QAAQ,CAAC,CAAC;QAErE,0BAA0B;QAC1B,MAAM,eAAe,GAAoB;YACvC,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,QAAQ;YAClB,YAAY,EAAE;gBACZ,SAAS,EAAE,IAAI;gBACf,UAAU,EAAE,IAAI;gBAChB,KAAK,EAAE,IAAI;gBACX,gBAAgB,EAAE,MAAM;gBACxB,qBAAqB,EAAE,aAAa;gBACpC,8BAA8B,EAAE,KAAK,EAAE,uCAAuC;gBAC9E,mBAAmB,EAAE,IAAI;gBACzB,YAAY,EAAE,IAAI;gBAClB,YAAY,EAAE,KAAK;gBACnB,YAAY,EAAE,IAAI;gBAClB,wBAAwB,EAAE,IAAI;gBAC9B,uBAAuB,EAAE,IAAI;gBAC7B,gBAAgB,EAAE,CAAC;aACpB;YACD,MAAM,EAAE;gBACN,OAAO,EAAE,IAAI,CAAC,OAAO;aACtB;SACF,CAAC;QAEF,wDAAwD;QACxD,IAAI,CAAC,QAAQ,GAAG,gBAAgB;YAC9B,CAAC,CAAC;gBACE,GAAG,eAAe;gBAClB,GAAG,gBAAgB;gBACnB,YAAY,EAAE;oBACZ,GAAG,eAAe,CAAC,YAAY;oBAC/B,GAAG,gBAAgB,CAAC,YAAY;iBACjC;gBACD,MAAM,EAAE;oBACN,GAAG,eAAe,CAAC,MAAM;oBACzB,GAAG,gBAAgB,CAAC,MAAM;iBAC3B;aACF;YACH,CAAC,CAAC,eAAe,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,OAAsB,EAAE,MAAoB;QACxD,IAAI,CAAC;YACH,8BAA8B;YAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAE3C,oBAAoB;YACpB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAE/D,yBAAyB;YACzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC;YAExE,OAAO,UAAU,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,0BAA0B;YAC1B,IACE,KAAK,YAAY,wCAAsB;gBACvC,KAAK,YAAY,8BAAY;gBAC7B,KAAK,YAAY,+BAAa,EAC9B,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;YAED,sBAAsB;YACtB,MAAM,IAAI,+BAAa,CAAC;gBACtB,IAAI,EAAE,2BAAS,CAAC,cAAc;gBAC9B,OAAO,EAAE,0BAA0B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC3F,WAAW,EAAE,IAAI;gBACjB,UAAU,EAAE;oBACV,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;iBAC5B;gBACD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aAClD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,CAAC,aAAa,CAAC,OAAsB,EAAE,MAAoB;QAC/D,IAAI,CAAC;YACH,8BAA8B;YAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAC3C,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC;YAE5B,wCAAwC;YACxC,MAAM,eAAe,GAAG,IAAA,qCAAoB,EAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACpE,MAAM,aAAa,GAAG,IAAA,uCAAsB,EAAC,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;YAC7F,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,IAAI,aAAa,KAAK,aAAa,CAAC;YAEnF,8BAA8B;YAC9B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,mBAAmB,EAAE;gBAC/D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;gBAC1B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;gBACnC,MAAM;aACP,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,IAAA,6CAA2B,EAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE;oBACjF,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;iBAC5B,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnB,MAAM,IAAI,6BAAW,CAAC;oBACpB,IAAI,EAAE,2BAAS,CAAC,kBAAkB;oBAClC,OAAO,EAAE,uBAAuB;oBAChC,UAAU,EAAE;wBACV,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;qBAC5B;iBACF,CAAC,CAAC;YACL,CAAC;YAED,mBAAmB;YACnB,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,IAAI,aAAa,GAAG,EAAE,CAAC;YAEvB,IAAI,oBAAqD,CAAC;YAC1D,IAAI,KAES,CAAC;YAEd,oBAAoB;YACpB,MAAM;gBACJ,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,QAAQ,EAAE;gBACpB,QAAQ,EAAE;oBACR,GAAG,OAAO,CAAC,QAAQ;oBACnB,UAAU,EAAE;wBACV,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU;wBAC9B,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;qBAC5B;iBACF;aACe,CAAC;YAEnB,cAAc;YACd,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACzC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;YAClC,IAAI,MAAM,GAAG,EAAE,CAAC;YAEhB,IAAI,CAAC;gBACH,OAAO,IAAI,EAAE,CAAC;oBACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;oBAC5C,IAAI,IAAI,EAAE,CAAC;wBACT,MAAM;oBACR,CAAC;oBAED,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;oBAClD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACjC,MAAM,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;oBAE3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;wBACzB,mBAAmB;wBACnB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;4BACjB,SAAS;wBACX,CAAC;wBAED,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;4BAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;4BAElC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gCACtB,yDAAyD;gCACzD,IAAI,CAAC,oBAAoB,EAAE,CAAC;oCAC1B,MAAM,OAAO,GAAc;wCACzB,IAAI,EAAE,WAAW;wCACjB,OAAO,EAAE,aAAa;qCACvB,CAAC;oCAEF,MAAM;wCACJ,IAAI,EAAE,MAAM;wCACZ,QAAQ,EAAE,QAAQ,EAAE;wCACpB,YAAY,EAAE,MAAM;wCACpB,KAAK;wCACL,OAAO;qCACS,CAAC;gCACrB,CAAC;gCACD,SAAS;4BACX,CAAC;4BAED,IAAI,CAAC;gCACH,MAAM,KAAK,GAAsB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gCAElD,2BAA2B;gCAC3B,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oCACjD,OAAO,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;oCAC3D,SAAS;gCACX,CAAC;gCAED,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gCAChC,IAAI,CAAC,MAAM,EAAE,CAAC;oCACZ,SAAS;gCACX,CAAC;gCAED,gBAAgB;gCAChB,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;oCACzB,aAAa,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC;oCAEtC,sDAAsD;oCACtD,MAAM,YAAY,GAAkB;wCAClC,IAAI,EAAE,SAAS;wCACf,QAAQ,EAAE,QAAQ,EAAE;wCACpB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO;wCAC3B,IAAI,EAAE,WAAW;qCAClB,CAAC;oCAEF,sCAAsC;oCACtC,IAAI,WAAW,EAAE,CAAC;wCACf,YAAoB,CAAC,WAAW,GAAG,aAAa,CAAC;oCACpD,CAAC;oCAED,MAAM,YAAY,CAAC;gCACrB,CAAC;gCAED,mDAAmD;gCACnD,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;oCAC5B,2CAA2C;oCAC3C,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;gCACpE,CAAC;gCAED,gBAAgB;gCAChB,IAAI,MAAM,CAAC,aAAa,IAAI,CAAC,oBAAoB,EAAE,CAAC;oCAClD,oBAAoB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;oCAElE,sBAAsB;oCACtB,MAAM,OAAO,GAAc;wCACzB,IAAI,EAAE,WAAW;wCACjB,OAAO,EAAE,aAAa;qCACvB,CAAC;oCAEF,MAAM;wCACJ,IAAI,EAAE,MAAM;wCACZ,QAAQ,EAAE,QAAQ,EAAE;wCACpB,YAAY,EAAE,oBAAoB;wCAClC,KAAK;wCACL,OAAO;qCACS,CAAC;gCACrB,CAAC;4BACH,CAAC;4BAAC,OAAO,UAAU,EAAE,CAAC;gCACpB,0CAA0C;gCAC1C,OAAO,CAAC,IAAI,CAAC,4BAA4B,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;gCAC7D,SAAS;4BACX,CAAC;wBACH,CAAC;6BAAM,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;4BACrC,6DAA6D;4BAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;4BACvC,IAAI,SAAS,KAAK,OAAO,EAAE,CAAC;gCAC1B,mBAAmB;gCACnB,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;4BAC5C,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,4DAA4D;gBAC5D,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC1B,MAAM,OAAO,GAAc;wBACzB,IAAI,EAAE,WAAW;wBACjB,OAAO,EAAE,aAAa;qBACvB,CAAC;oBAEF,MAAM;wBACJ,IAAI,EAAE,MAAM;wBACZ,QAAQ,EAAE,QAAQ,EAAE;wBACpB,YAAY,EAAE,MAAM;wBACpB,KAAK;wBACL,OAAO;qBACS,CAAC;gBACrB,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oBAAoB;YACpB,MAAM;gBACJ,IAAI,EAAE,OAAO;gBACb,QAAQ,EAAE,CAAC;gBACX,KAAK,EAAE;oBACL,IAAI,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe;oBAC3D,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAChE;aACe,CAAC;QACrB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,SAAS,EAAE;gBACrD,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;gBAC1B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC;aAClC,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,EAAE,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,OAAsB;QACjC,sCAAsC;QACtC,MAAM,oBAAoB,GAAG,IAAA,0BAAc,EAAC,OAAO,CAAC,CAAC;QACrD,sDAAsD;QACtD,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,oBAAoB,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC/D,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,UAAU,CAAC,OAA2B;QAC1C,IAAI,CAAC;YACH,wCAAwC;YACxC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;gBACjD,OAAO,IAAA,6BAAiB,EAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YACzD,CAAC;YAED,iBAAiB;YACjB,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,KAAK,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;gBAChE,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACvD,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,IAAA,4BAAgB,EAAC,MAAM,EAAE,OAAO,EAAE,MAA+B,CAAC,CAAC;gBAC5E,CAAC;YACH,CAAC;YAED,2BAA2B;YAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,GAAG,IAAI,CAAC,OAAO,SAAS,CAAC;YACxE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;gBACrC,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;gBAC1B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC;aAC1D,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAA,6CAA2B,EAC/B,QAAQ,CAAC,MAAM,EACf,QAAQ,CAAC,UAAU,EACnB,MAAM,QAAQ,CAAC,IAAI,EAAE,EACrB;oBACE,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;iBAC5B,CACF,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAyB,CAAC;YAE7D,iCAAiC;YACjC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;YAE1E,kBAAkB;YAClB,MAAM,MAAM,GAAqB;gBAC/B,MAAM;gBACN,MAAM,EAAE,QAAQ;gBAChB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;gBACrB,UAAU,EAAE,IAAI;aACjB,CAAC;YAEF,sBAAsB;YACtB,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;gBACtC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,IAAI,OAAO,CAAC,CAAC,iBAAiB;gBACpE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;YACvD,CAAC;YAED,+BAA+B;YAC/B,OAAO,IAAA,4BAAgB,EAAC,MAAM,EAAE,OAAO,EAAE,MAA+B,CAAC,CAAC;QAC5E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,oDAAoD;YACpD,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;gBAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACvD,IAAI,MAAM,EAAE,CAAC;oBACX,OAAO,MAAM,CAAC;gBAChB,CAAC;YACH,CAAC;YAED,wBAAwB;YACxB,IAAI,KAAK,YAAY,+BAAa,IAAI,KAAK,YAAY,8BAAY,EAAE,CAAC;gBACpE,MAAM,KAAK,CAAC;YACd,CAAC;YAED,sBAAsB;YACtB,MAAM,IAAI,+BAAa,CAAC;gBACtB,IAAI,EAAE,2BAAS,CAAC,cAAc;gBAC9B,OAAO,EAAE,iCAAiC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBAClG,WAAW,EAAE,IAAI;gBACjB,UAAU,EAAE;oBACV,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;iBAC5B;gBACD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aAClD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;;;;OAOG;IACH,oBAAoB;QAClB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,6EAA6E;IAC7E,yBAAyB;IACzB,6EAA6E;IAE7E;;;;OAIG;IACI,MAAM,CAAC,OAAsB;QAClC,IAAI,CAAC;YACH,+DAA+D;YAC/D,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,wCAAuB,EAC1C,OAAO,CAAC,QAAQ,EAChB,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,qBAAqB,EAChD,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,8BAA8B,CAC1D,CAAC;YAEF,mBAAmB;YACnB,MAAM,cAAc,GAAoB,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC3D,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,CACjC,CAAC;YAEF,uBAAuB;YACvB,MAAM,aAAa,GAAkB;gBACnC,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,eAAe;gBAC/E,QAAQ,EAAE,cAAc;gBACxB,WAAW,EAAE,OAAO,CAAC,UAAU,EAAE,WAAW;gBAC5C,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,SAAS;gBACzC,KAAK,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI;gBAC/B,iBAAiB,EAAE,OAAO,CAAC,UAAU,EAAE,gBAAgB;gBACvD,gBAAgB,EAAE,OAAO,CAAC,UAAU,EAAE,eAAe;gBACrD,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC3F,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI;gBAC9B,IAAI,EAAE,OAAO,CAAC,UAAU,EAAE,IAAI;aAC/B,CAAC;YAEF,OAAO,aAAa,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,wCAAsB,CAAC;gBAC/B,IAAI,EAAE,2BAAS,CAAC,wBAAwB;gBACxC,OAAO,EAAE,0CAA0C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC3G,UAAU,EAAE;oBACV,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;iBAC5B;gBACD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aAClD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;;OAIG;IACI,IAAI,CACT,QAAwB,EACxB,eAA8B,EAC9B,SAAiB;QAEjB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YACnC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACnD,CAAC;YAED,kBAAkB;YAClB,MAAM,OAAO,GAAc;gBACzB,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,IAAI,CAAC,+BAA+B,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;aACtE,CAAC;YAEF,oBAAoB;YACpB,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,CAAC;YAE1E,oBAAoB;YACpB,MAAM,UAAU,GAAmB;gBACjC,OAAO;gBACP,YAAY;gBACZ,KAAK,EAAE,QAAQ,CAAC,KAAK;oBACnB,CAAC,CAAC;wBACE,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,aAAa;wBAC1C,gBAAgB,EAAE,QAAQ,CAAC,KAAK,CAAC,iBAAiB;wBAClD,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,YAAY;qBACzC;oBACH,CAAC,CAAC,SAAS;gBACb,QAAQ,EAAE;oBACR,GAAG,eAAe,CAAC,QAAQ;oBAC3B,kBAAkB,EAAE,QAAQ,CAAC,EAAE;oBAC/B,UAAU,EAAE;wBACV,GAAG,eAAe,CAAC,QAAQ,CAAC,UAAU;wBACtC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;qBAC5B;oBACD,MAAM,EAAE;wBACN,GAAG,eAAe,CAAC,QAAQ,CAAC,MAAM;wBAClC,gBAAgB,EAAE,QAAQ,CAAC,EAAE;wBAC7B,SAAS;qBACV;iBACF;gBACD,GAAG,EAAE,QAA8C;aACpD,CAAC;YAEF,OAAO,UAAU,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,wCAAsB,CAAC;gBAC/B,IAAI,EAAE,2BAAS,CAAC,wBAAwB;gBACxC,OAAO,EAAE,4CAA4C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;gBAC7G,UAAU,EAAE;oBACV,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;iBAC5B;gBACD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;aAClD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,sBAAsB,CAAC,OAAkB;QAC/C,kBAAkB;QAClB,IAAI,OAA6B,CAAC;QAElC,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACxC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,yBAAyB;YACzB,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBACtC,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,KAAK,MAAM;wBACT,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;oBAE5C,KAAK,OAAO;wBACV,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;4BAChC,OAAO;gCACL,IAAI,EAAE,WAAW;gCACjB,SAAS,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE;6BACrC,CAAC;wBACJ,CAAC;6BAAM,CAAC;4BACN,6BAA6B;4BAC7B,MAAM,OAAO,GAAG,QAAQ,KAAK,CAAC,MAAM,CAAC,SAAS,WAAW,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;4BAC7E,OAAO;gCACL,IAAI,EAAE,WAAW;gCACjB,SAAS,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE;6BAC5B,CAAC;wBACJ,CAAC;oBAEH;wBACE,yCAAyC;wBACzC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzD,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,IAAgD;YAC9D,OAAO;YACP,IAAI,EAAE,OAAO,CAAC,IAAI;SACnB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,+BAA+B,CAAC,OAA6B;QACnE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,OAAO,CAAC;QACjB,CAAC;QAED,mCAAmC;QACnC,OAAO,OAAO;aACX,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACb,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,OAAO,KAAK,CAAC,IAAI,CAAC;YACpB,CAAC;YACD,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;aACD,IAAI,CAAC,EAAE,CAAC,CAAC;IACd,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,YAA2B;QACjD,QAAQ,YAAY,EAAE,CAAC;YACrB,KAAK,MAAM;gBACT,OAAO,MAAM,CAAC;YAChB,KAAK,QAAQ;gBACX,OAAO,QAAQ,CAAC;YAClB,KAAK,YAAY;gBACf,OAAO,YAAY,CAAC;YACtB,KAAK,gBAAgB;gBACnB,OAAO,gBAAgB,CAAC;YAC1B;gBACE,OAAO,MAAM,CAAC;QAClB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW,CAAC,OAAsB,EAAE,MAAoB;QACpE,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,mBAAmB,EAAE;gBAC/D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,IAAI,CAAC,UAAU,EAAE;gBAC1B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;gBAC7B,MAAM;aACP,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,MAAM,IAAA,6CAA2B,EAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE;oBACjF,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;iBAC5B,CAAC,CAAC;YACL,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAmB,CAAC;YACvD,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClE,MAAM,IAAI,8BAAY,CAAC;oBACrB,IAAI,EAAE,2BAAS,CAAC,aAAa;oBAC7B,OAAO,EAAE,2BAA2B,KAAK,CAAC,OAAO,EAAE;oBACnD,UAAU,EAAE;wBACV,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;qBAC5B;oBACD,KAAK,EAAE,KAAK;iBACb,CAAC,CAAC;YACL,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACK,UAAU;QAChB,OAAO;YACL,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAC7C,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO;SACvB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,oBAAoB,CAAC,KAAkB;QAC7C,OAAO;YACL,EAAE,EAAE,KAAK,CAAC,EAAE;YACZ,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,gDAAgD;YAChE,OAAO,EAAE,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;YACrD,OAAO,EAAE,KAAK,CAAC,QAAQ;YACvB,gEAAgE;YAChE,iEAAiE;SAClE,CAAC;IACJ,CAAC;CACF;AAvrBD,oDAurBC"}