genai-lite 0.4.3 → 0.5.1

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 (50) hide show
  1. package/README.md +377 -16
  2. package/dist/adapters/image/ElectronDiffusionAdapter.d.ts +10 -0
  3. package/dist/adapters/image/ElectronDiffusionAdapter.js +11 -0
  4. package/dist/adapters/image/GenaiElectronImageAdapter.d.ts +69 -0
  5. package/dist/adapters/image/GenaiElectronImageAdapter.js +273 -0
  6. package/dist/adapters/image/MockImageAdapter.d.ts +23 -0
  7. package/dist/adapters/image/MockImageAdapter.js +55 -0
  8. package/dist/adapters/image/OpenAIImageAdapter.d.ts +62 -0
  9. package/dist/adapters/image/OpenAIImageAdapter.js +303 -0
  10. package/dist/config/image-presets.json +212 -0
  11. package/dist/config/llm-presets.json +326 -0
  12. package/dist/image/ImageService.d.ts +53 -0
  13. package/dist/image/ImageService.js +199 -0
  14. package/dist/image/config.d.ts +48 -0
  15. package/dist/image/config.js +221 -0
  16. package/dist/image/services/ImageAdapterRegistry.d.ts +61 -0
  17. package/dist/image/services/ImageAdapterRegistry.js +95 -0
  18. package/dist/image/services/ImageModelResolver.d.ts +26 -0
  19. package/dist/image/services/ImageModelResolver.js +98 -0
  20. package/dist/image/services/ImagePresetManager.d.ts +27 -0
  21. package/dist/image/services/ImagePresetManager.js +52 -0
  22. package/dist/image/services/ImageRequestValidator.d.ts +37 -0
  23. package/dist/image/services/ImageRequestValidator.js +133 -0
  24. package/dist/image/services/ImageSettingsResolver.d.ts +25 -0
  25. package/dist/image/services/ImageSettingsResolver.js +76 -0
  26. package/dist/index.d.ts +4 -2
  27. package/dist/index.js +5 -1
  28. package/dist/llm/LLMService.d.ts +3 -4
  29. package/dist/llm/LLMService.js +14 -4
  30. package/dist/llm/clients/AnthropicClientAdapter.js +2 -2
  31. package/dist/llm/clients/GeminiClientAdapter.js +2 -2
  32. package/dist/llm/clients/LlamaCppClientAdapter.d.ts +1 -1
  33. package/dist/llm/clients/LlamaCppClientAdapter.js +3 -3
  34. package/dist/llm/clients/OpenAIClientAdapter.js +2 -2
  35. package/dist/llm/config.js +4 -28
  36. package/dist/llm/services/ModelResolver.d.ts +6 -4
  37. package/dist/providers/fromEnvironment.d.ts +5 -1
  38. package/dist/providers/fromEnvironment.js +29 -4
  39. package/dist/shared/adapters/errorUtils.d.ts +26 -0
  40. package/dist/shared/adapters/errorUtils.js +107 -0
  41. package/dist/shared/services/AdapterRegistry.d.ts +89 -0
  42. package/dist/shared/services/AdapterRegistry.js +144 -0
  43. package/dist/shared/services/PresetManager.d.ts +33 -0
  44. package/dist/shared/services/PresetManager.js +56 -0
  45. package/dist/types/image.d.ts +399 -0
  46. package/dist/types/image.js +8 -0
  47. package/dist/types.d.ts +6 -0
  48. package/package.json +3 -2
  49. package/src/config/image-presets.json +212 -0
  50. /package/src/config/{presets.json → llm-presets.json} +0 -0
@@ -0,0 +1,221 @@
1
+ "use strict";
2
+ /**
3
+ * Configuration for image generation providers and models
4
+ *
5
+ * This file defines:
6
+ * - Supported image providers
7
+ * - Default models for each provider
8
+ * - Provider capabilities
9
+ * - Adapter configurations (base URLs, timeouts, etc.)
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.IMAGE_ADAPTER_CONFIGS = exports.SUPPORTED_IMAGE_PROVIDERS = void 0;
13
+ exports.getImageProviderById = getImageProviderById;
14
+ exports.getImageModelsByProvider = getImageModelsByProvider;
15
+ exports.getImageModelInfo = getImageModelInfo;
16
+ exports.getImageProviderCapabilities = getImageProviderCapabilities;
17
+ /**
18
+ * Supported image generation providers
19
+ */
20
+ exports.SUPPORTED_IMAGE_PROVIDERS = [
21
+ {
22
+ id: 'openai-images',
23
+ displayName: 'OpenAI Images',
24
+ description: 'DALL-E and GPT-Image models from OpenAI',
25
+ capabilities: {
26
+ supportsMultipleImages: true,
27
+ supportsB64Json: true,
28
+ supportsHostedUrls: true,
29
+ supportsProgressEvents: false,
30
+ supportsNegativePrompt: false,
31
+ defaultModelId: 'gpt-image-1-mini',
32
+ },
33
+ models: [
34
+ {
35
+ id: 'gpt-image-1-mini',
36
+ providerId: 'openai-images',
37
+ displayName: 'GPT-Image 1 Mini',
38
+ description: 'Fast and efficient image generation with GPT-Image (32K char prompts, supports transparency, webp/jpeg output)',
39
+ capabilities: {
40
+ supportsMultipleImages: true,
41
+ supportsB64Json: true,
42
+ supportsHostedUrls: false, // gpt-image-1 always returns base64
43
+ supportsProgressEvents: false,
44
+ supportsNegativePrompt: false,
45
+ defaultModelId: 'gpt-image-1-mini',
46
+ },
47
+ defaultSettings: {
48
+ width: 1024,
49
+ height: 1024,
50
+ quality: 'auto',
51
+ responseFormat: 'buffer',
52
+ openai: {
53
+ outputFormat: 'png',
54
+ background: 'auto',
55
+ moderation: 'auto',
56
+ },
57
+ },
58
+ },
59
+ {
60
+ id: 'gpt-image-1',
61
+ providerId: 'openai-images',
62
+ displayName: 'GPT-Image 1',
63
+ description: 'Most advanced OpenAI image model with highest quality (32K char prompts, supports transparency, compression control)',
64
+ capabilities: {
65
+ supportsMultipleImages: true,
66
+ supportsB64Json: true,
67
+ supportsHostedUrls: false, // gpt-image-1 always returns base64
68
+ supportsProgressEvents: false,
69
+ supportsNegativePrompt: false,
70
+ defaultModelId: 'gpt-image-1',
71
+ },
72
+ defaultSettings: {
73
+ width: 1024,
74
+ height: 1024,
75
+ quality: 'auto',
76
+ responseFormat: 'buffer',
77
+ openai: {
78
+ outputFormat: 'png',
79
+ background: 'auto',
80
+ moderation: 'auto',
81
+ },
82
+ },
83
+ },
84
+ {
85
+ id: 'dall-e-3',
86
+ providerId: 'openai-images',
87
+ displayName: 'DALL-E 3',
88
+ description: 'High-quality DALL-E model with improved prompt adherence (4K char prompts, only n=1)',
89
+ capabilities: {
90
+ supportsMultipleImages: false, // dall-e-3 only supports n=1
91
+ supportsB64Json: true,
92
+ supportsHostedUrls: true,
93
+ supportsProgressEvents: false,
94
+ supportsNegativePrompt: false,
95
+ defaultModelId: 'dall-e-3',
96
+ },
97
+ defaultSettings: {
98
+ width: 1024,
99
+ height: 1024,
100
+ quality: 'standard',
101
+ style: 'vivid',
102
+ responseFormat: 'buffer',
103
+ },
104
+ },
105
+ {
106
+ id: 'dall-e-2',
107
+ providerId: 'openai-images',
108
+ displayName: 'DALL-E 2',
109
+ description: 'Previous generation DALL-E model (1K char prompts)',
110
+ capabilities: {
111
+ supportsMultipleImages: true,
112
+ supportsB64Json: true,
113
+ supportsHostedUrls: true,
114
+ supportsProgressEvents: false,
115
+ supportsNegativePrompt: false,
116
+ defaultModelId: 'dall-e-2',
117
+ },
118
+ defaultSettings: {
119
+ width: 1024,
120
+ height: 1024,
121
+ quality: 'standard',
122
+ responseFormat: 'buffer',
123
+ },
124
+ },
125
+ ],
126
+ },
127
+ {
128
+ id: 'genai-electron-images',
129
+ displayName: 'Local Diffusion (genai-electron)',
130
+ description: 'Local stable-diffusion models via genai-electron wrapper',
131
+ capabilities: {
132
+ supportsMultipleImages: true,
133
+ supportsB64Json: true,
134
+ supportsHostedUrls: false,
135
+ supportsProgressEvents: true,
136
+ supportsNegativePrompt: true,
137
+ defaultModelId: 'stable-diffusion',
138
+ },
139
+ models: [
140
+ {
141
+ id: 'stable-diffusion',
142
+ providerId: 'genai-electron-images',
143
+ displayName: 'Stable Diffusion',
144
+ description: 'High-quality local diffusion model',
145
+ capabilities: {
146
+ supportsMultipleImages: true,
147
+ supportsB64Json: true,
148
+ supportsHostedUrls: false,
149
+ supportsProgressEvents: true,
150
+ supportsNegativePrompt: true,
151
+ defaultModelId: 'stable-diffusion',
152
+ },
153
+ defaultSettings: {
154
+ width: 512,
155
+ height: 512,
156
+ responseFormat: 'buffer',
157
+ diffusion: {
158
+ steps: 20,
159
+ cfgScale: 7.5,
160
+ sampler: 'dpm++2m',
161
+ },
162
+ },
163
+ },
164
+ ],
165
+ },
166
+ ];
167
+ /**
168
+ * Adapter configurations for each provider
169
+ * These define base URLs and other adapter-specific settings
170
+ */
171
+ exports.IMAGE_ADAPTER_CONFIGS = {
172
+ 'openai-images': {
173
+ baseURL: process.env.OPENAI_API_BASE_URL || 'https://api.openai.com/v1',
174
+ timeout: 60000, // 60 seconds for image generation
175
+ },
176
+ 'genai-electron-images': {
177
+ baseURL: process.env.GENAI_ELECTRON_IMAGE_BASE_URL || 'http://localhost:8081',
178
+ timeout: 120000, // 120 seconds for local diffusion
179
+ checkHealth: false, // Optional health checks
180
+ },
181
+ };
182
+ /**
183
+ * Gets provider information by ID
184
+ *
185
+ * @param providerId - The provider ID to look up
186
+ * @returns Provider information or null if not found
187
+ */
188
+ function getImageProviderById(providerId) {
189
+ return exports.SUPPORTED_IMAGE_PROVIDERS.find(p => p.id === providerId) || null;
190
+ }
191
+ /**
192
+ * Gets all models for a specific provider
193
+ *
194
+ * @param providerId - The provider ID
195
+ * @returns Array of model information
196
+ */
197
+ function getImageModelsByProvider(providerId) {
198
+ const provider = getImageProviderById(providerId);
199
+ return provider?.models || [];
200
+ }
201
+ /**
202
+ * Gets model information by provider and model ID
203
+ *
204
+ * @param providerId - The provider ID
205
+ * @param modelId - The model ID
206
+ * @returns Model information or null if not found
207
+ */
208
+ function getImageModelInfo(providerId, modelId) {
209
+ const models = getImageModelsByProvider(providerId);
210
+ return models.find(m => m.id === modelId) || null;
211
+ }
212
+ /**
213
+ * Gets default capabilities for a provider
214
+ *
215
+ * @param providerId - The provider ID
216
+ * @returns Provider capabilities or null if not found
217
+ */
218
+ function getImageProviderCapabilities(providerId) {
219
+ const provider = getImageProviderById(providerId);
220
+ return provider?.capabilities || null;
221
+ }
@@ -0,0 +1,61 @@
1
+ import type { ImageProviderId } from '../../types/image';
2
+ import type { ImageProviderAdapter } from '../../types/image';
3
+ /**
4
+ * Information about a registered adapter
5
+ */
6
+ export interface AdapterInfo {
7
+ providerId: ImageProviderId;
8
+ hasAdapter: boolean;
9
+ adapterInfo?: {
10
+ name: string;
11
+ };
12
+ }
13
+ /**
14
+ * Summary of provider availability
15
+ */
16
+ export interface ProviderSummary {
17
+ totalProviders: number;
18
+ providersWithAdapters: number;
19
+ availableProviders: string[];
20
+ unavailableProviders: string[];
21
+ }
22
+ /**
23
+ * Registry for managing image provider adapters
24
+ */
25
+ export declare class ImageAdapterRegistry {
26
+ private imageAdapters;
27
+ private mockImageAdapter;
28
+ constructor();
29
+ /**
30
+ * Initializes adapters for all supported providers
31
+ * Note: In Phase 3, we're only setting up the registry structure.
32
+ * Real adapters (OpenAI, Electron) will be added in Phases 4-5.
33
+ */
34
+ private initializeAdapters;
35
+ /**
36
+ * Registers an image adapter for a specific provider
37
+ *
38
+ * @param providerId - The provider ID
39
+ * @param adapter - The adapter implementation
40
+ */
41
+ registerAdapter(providerId: ImageProviderId, adapter: ImageProviderAdapter): void;
42
+ /**
43
+ * Gets the appropriate adapter for a provider
44
+ *
45
+ * @param providerId - The provider ID
46
+ * @returns The adapter to use
47
+ */
48
+ getAdapter(providerId: ImageProviderId): ImageProviderAdapter;
49
+ /**
50
+ * Gets information about registered adapters
51
+ *
52
+ * @returns Map of provider IDs to adapter info
53
+ */
54
+ getRegisteredAdapters(): Map<ImageProviderId, AdapterInfo>;
55
+ /**
56
+ * Gets a summary of available providers and their adapter status
57
+ *
58
+ * @returns Summary of provider availability
59
+ */
60
+ getProviderSummary(): ProviderSummary;
61
+ }
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ImageAdapterRegistry = void 0;
4
+ const MockImageAdapter_1 = require("../../adapters/image/MockImageAdapter");
5
+ const config_1 = require("../config");
6
+ /**
7
+ * Registry for managing image provider adapters
8
+ */
9
+ class ImageAdapterRegistry {
10
+ constructor() {
11
+ this.imageAdapters = new Map();
12
+ this.mockImageAdapter = new MockImageAdapter_1.MockImageAdapter();
13
+ this.initializeAdapters();
14
+ }
15
+ /**
16
+ * Initializes adapters for all supported providers
17
+ * Note: In Phase 3, we're only setting up the registry structure.
18
+ * Real adapters (OpenAI, Electron) will be added in Phases 4-5.
19
+ */
20
+ initializeAdapters() {
21
+ console.log('ImageAdapterRegistry: Initializing image adapters');
22
+ // For Phase 3, we don't have real adapter implementations yet
23
+ // They will be added in Phase 4 (OpenAI) and Phase 5 (Electron)
24
+ // For now, all providers will use the mock adapter as fallback
25
+ console.log(`ImageAdapterRegistry: Registry initialized. Real adapters will be added in Phases 4-5. ` +
26
+ `Currently using mock adapter as fallback for all providers.`);
27
+ }
28
+ /**
29
+ * Registers an image adapter for a specific provider
30
+ *
31
+ * @param providerId - The provider ID
32
+ * @param adapter - The adapter implementation
33
+ */
34
+ registerAdapter(providerId, adapter) {
35
+ this.imageAdapters.set(providerId, adapter);
36
+ console.log(`ImageAdapterRegistry: Registered adapter for provider: ${providerId}`);
37
+ }
38
+ /**
39
+ * Gets the appropriate adapter for a provider
40
+ *
41
+ * @param providerId - The provider ID
42
+ * @returns The adapter to use
43
+ */
44
+ getAdapter(providerId) {
45
+ // Check for registered real adapters first
46
+ const registeredAdapter = this.imageAdapters.get(providerId);
47
+ if (registeredAdapter) {
48
+ console.log(`ImageAdapterRegistry: Using registered adapter for provider: ${providerId}`);
49
+ return registeredAdapter;
50
+ }
51
+ // Fall back to mock adapter for unsupported providers
52
+ console.log(`ImageAdapterRegistry: No real adapter found for ${providerId}, using mock adapter`);
53
+ return this.mockImageAdapter;
54
+ }
55
+ /**
56
+ * Gets information about registered adapters
57
+ *
58
+ * @returns Map of provider IDs to adapter info
59
+ */
60
+ getRegisteredAdapters() {
61
+ const adapterInfo = new Map();
62
+ for (const [providerId, adapter] of this.imageAdapters.entries()) {
63
+ adapterInfo.set(providerId, {
64
+ providerId,
65
+ hasAdapter: true,
66
+ adapterInfo: { name: adapter.id },
67
+ });
68
+ }
69
+ return adapterInfo;
70
+ }
71
+ /**
72
+ * Gets a summary of available providers and their adapter status
73
+ *
74
+ * @returns Summary of provider availability
75
+ */
76
+ getProviderSummary() {
77
+ const availableProviders = [];
78
+ const unavailableProviders = [];
79
+ for (const provider of config_1.SUPPORTED_IMAGE_PROVIDERS) {
80
+ if (this.imageAdapters.has(provider.id)) {
81
+ availableProviders.push(provider.id);
82
+ }
83
+ else {
84
+ unavailableProviders.push(provider.id);
85
+ }
86
+ }
87
+ return {
88
+ totalProviders: config_1.SUPPORTED_IMAGE_PROVIDERS.length,
89
+ providersWithAdapters: availableProviders.length,
90
+ availableProviders,
91
+ unavailableProviders,
92
+ };
93
+ }
94
+ }
95
+ exports.ImageAdapterRegistry = ImageAdapterRegistry;
@@ -0,0 +1,26 @@
1
+ import type { ImageProviderId, ImageGenerationRequest, ImageGenerationRequestWithPreset, ImageModelInfo, ImageGenerationSettings, ImageFailureResponse, ImagePreset } from '../../types/image';
2
+ import { PresetManager } from '../../shared/services/PresetManager';
3
+ /**
4
+ * Result of model resolution
5
+ */
6
+ export interface ModelResolutionResult {
7
+ providerId?: ImageProviderId;
8
+ modelId?: string;
9
+ modelInfo?: ImageModelInfo;
10
+ settings?: ImageGenerationSettings;
11
+ error?: ImageFailureResponse;
12
+ }
13
+ /**
14
+ * Resolves model information from presets or direct IDs
15
+ */
16
+ export declare class ImageModelResolver {
17
+ private presetManager;
18
+ constructor(presetManager: PresetManager<ImagePreset>);
19
+ /**
20
+ * Resolves model information from a request
21
+ *
22
+ * @param request - The request (with preset or direct IDs)
23
+ * @returns Resolution result
24
+ */
25
+ resolve(request: ImageGenerationRequest | ImageGenerationRequestWithPreset): ModelResolutionResult;
26
+ }
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ImageModelResolver = void 0;
4
+ const config_1 = require("../config");
5
+ /**
6
+ * Resolves model information from presets or direct IDs
7
+ */
8
+ class ImageModelResolver {
9
+ constructor(presetManager) {
10
+ this.presetManager = presetManager;
11
+ }
12
+ /**
13
+ * Resolves model information from a request
14
+ *
15
+ * @param request - The request (with preset or direct IDs)
16
+ * @returns Resolution result
17
+ */
18
+ resolve(request) {
19
+ const reqWithPreset = request;
20
+ // Check if using preset
21
+ if (reqWithPreset.presetId) {
22
+ const preset = this.presetManager.resolvePreset(reqWithPreset.presetId);
23
+ if (!preset) {
24
+ return {
25
+ error: {
26
+ object: 'error',
27
+ providerId: 'unknown',
28
+ error: {
29
+ message: `Preset not found: ${reqWithPreset.presetId}`,
30
+ code: 'PRESET_NOT_FOUND',
31
+ type: 'validation_error',
32
+ param: 'presetId',
33
+ },
34
+ },
35
+ };
36
+ }
37
+ // Get model info
38
+ const modelInfo = (0, config_1.getImageModelInfo)(preset.providerId, preset.modelId);
39
+ if (!modelInfo) {
40
+ return {
41
+ error: {
42
+ object: 'error',
43
+ providerId: preset.providerId,
44
+ modelId: preset.modelId,
45
+ error: {
46
+ message: `Model not found: ${preset.modelId} for provider ${preset.providerId}`,
47
+ code: 'MODEL_NOT_FOUND',
48
+ type: 'validation_error',
49
+ },
50
+ },
51
+ };
52
+ }
53
+ return {
54
+ providerId: preset.providerId,
55
+ modelId: preset.modelId,
56
+ modelInfo,
57
+ settings: preset.settings,
58
+ };
59
+ }
60
+ // Using direct provider ID and model ID
61
+ const reqDirect = request;
62
+ if (!reqDirect.providerId || !reqDirect.modelId) {
63
+ return {
64
+ error: {
65
+ object: 'error',
66
+ providerId: reqDirect.providerId || 'unknown',
67
+ modelId: reqDirect.modelId,
68
+ error: {
69
+ message: 'Either presetId or both providerId and modelId must be specified',
70
+ code: 'MISSING_MODEL_INFO',
71
+ type: 'validation_error',
72
+ },
73
+ },
74
+ };
75
+ }
76
+ const modelInfo = (0, config_1.getImageModelInfo)(reqDirect.providerId, reqDirect.modelId);
77
+ if (!modelInfo) {
78
+ return {
79
+ error: {
80
+ object: 'error',
81
+ providerId: reqDirect.providerId,
82
+ modelId: reqDirect.modelId,
83
+ error: {
84
+ message: `Model not found: ${reqDirect.modelId} for provider ${reqDirect.providerId}`,
85
+ code: 'MODEL_NOT_FOUND',
86
+ type: 'validation_error',
87
+ },
88
+ },
89
+ };
90
+ }
91
+ return {
92
+ providerId: reqDirect.providerId,
93
+ modelId: reqDirect.modelId,
94
+ modelInfo,
95
+ };
96
+ }
97
+ }
98
+ exports.ImageModelResolver = ImageModelResolver;
@@ -0,0 +1,27 @@
1
+ import type { ImagePreset } from "../../types/image";
2
+ /**
3
+ * Defines how custom image presets interact with the default presets.
4
+ * 'replace': Use only the custom presets provided. The default set is ignored.
5
+ * 'extend': Use the default presets, and add/override them with the custom presets. This is the default behavior.
6
+ */
7
+ export type PresetMode = 'replace' | 'extend';
8
+ /**
9
+ * Manages image generation presets including loading, merging, and resolution
10
+ */
11
+ export declare class ImagePresetManager {
12
+ private presets;
13
+ constructor(customPresets?: ImagePreset[], mode?: PresetMode);
14
+ /**
15
+ * Gets all configured image presets
16
+ *
17
+ * @returns Array of image presets
18
+ */
19
+ getPresets(): ImagePreset[];
20
+ /**
21
+ * Resolves a preset by ID
22
+ *
23
+ * @param presetId - The preset ID to resolve
24
+ * @returns The preset if found, null otherwise
25
+ */
26
+ resolvePreset(presetId: string): ImagePreset | null;
27
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ImagePresetManager = void 0;
7
+ const image_presets_json_1 = __importDefault(require("../../config/image-presets.json"));
8
+ // Type assertion for the imported JSON
9
+ const defaultImagePresets = image_presets_json_1.default;
10
+ /**
11
+ * Manages image generation presets including loading, merging, and resolution
12
+ */
13
+ class ImagePresetManager {
14
+ constructor(customPresets = [], mode = 'extend') {
15
+ // Initialize presets based on mode
16
+ const finalPresets = new Map();
17
+ if (mode === 'replace') {
18
+ // Replace Mode: Only use custom presets.
19
+ for (const preset of customPresets) {
20
+ finalPresets.set(preset.id, preset);
21
+ }
22
+ }
23
+ else {
24
+ // Extend Mode: Load defaults first, then add/override.
25
+ for (const preset of defaultImagePresets) {
26
+ finalPresets.set(preset.id, preset);
27
+ }
28
+ for (const preset of customPresets) {
29
+ finalPresets.set(preset.id, preset);
30
+ }
31
+ }
32
+ this.presets = Array.from(finalPresets.values());
33
+ }
34
+ /**
35
+ * Gets all configured image presets
36
+ *
37
+ * @returns Array of image presets
38
+ */
39
+ getPresets() {
40
+ return [...this.presets]; // Return a copy to prevent external modification
41
+ }
42
+ /**
43
+ * Resolves a preset by ID
44
+ *
45
+ * @param presetId - The preset ID to resolve
46
+ * @returns The preset if found, null otherwise
47
+ */
48
+ resolvePreset(presetId) {
49
+ return this.presets.find(p => p.id === presetId) || null;
50
+ }
51
+ }
52
+ exports.ImagePresetManager = ImagePresetManager;
@@ -0,0 +1,37 @@
1
+ import type { ImageGenerationRequest, ImageFailureResponse } from '../../types/image';
2
+ /**
3
+ * Validates image generation requests
4
+ */
5
+ export declare class ImageRequestValidator {
6
+ /**
7
+ * Validates the basic structure of an image generation request
8
+ *
9
+ * @param request - The request to validate
10
+ * @returns null if valid, ImageFailureResponse if invalid
11
+ */
12
+ validateRequestStructure(request: ImageGenerationRequest): ImageFailureResponse | null;
13
+ /**
14
+ * Validates the count parameter
15
+ *
16
+ * @param request - The request containing the count
17
+ * @returns null if valid, ImageFailureResponse if invalid
18
+ */
19
+ private validateCount;
20
+ /**
21
+ * Validates settings
22
+ *
23
+ * @param request - The request containing the settings
24
+ * @returns null if valid, ImageFailureResponse if invalid
25
+ */
26
+ private validateSettings;
27
+ /**
28
+ * Creates a validation error response
29
+ *
30
+ * @param request - The original request
31
+ * @param message - Error message
32
+ * @param code - Error code
33
+ * @param param - Parameter that caused the error
34
+ * @returns ImageFailureResponse
35
+ */
36
+ private createValidationError;
37
+ }