ugly-app 0.1.123 → 0.1.124

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.
@@ -1,2 +1,2 @@
1
- export declare const CLI_VERSION = "0.1.123";
1
+ export declare const CLI_VERSION = "0.1.124";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.123";
2
+ export const CLI_VERSION = "0.1.124";
3
3
  //# sourceMappingURL=version.js.map
@@ -2,7 +2,7 @@ import type { ImageGenModel } from '../../shared/ImageGen.js';
2
2
  import type { ImageGenBase } from './ImageGenBase.js';
3
3
  /**
4
4
  * Create an ImageGen instance for the given clean model name.
5
- * Automatically selects the best available provider based on priority.
5
+ * Automatically selects providers in priority order and falls back on failure.
6
6
  *
7
7
  * @param model - Clean model name (e.g. 'flux_1_dev', 'seedream', 'nano_banana')
8
8
  * @param priority - 'cheap' (default) selects cheapest provider; 'fast' selects lowest latency
@@ -1 +1 @@
1
- {"version":3,"file":"ImageGenFactory.d.ts","sourceRoot":"","sources":["../../../src/server/ai/ImageGenFactory.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,aAAa,EAGd,MAAM,0BAA0B,CAAC;AAKlC,OAAO,KAAK,EACV,YAAY,EAGb,MAAM,mBAAmB,CAAC;AA8G3B;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EACpB,QAAQ,GAAE,MAAM,GAAG,OAAiB,GACnC,YAAY,CAgBd"}
1
+ {"version":3,"file":"ImageGenFactory.d.ts","sourceRoot":"","sources":["../../../src/server/ai/ImageGenFactory.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,aAAa,EAGd,MAAM,0BAA0B,CAAC;AAKlC,OAAO,KAAK,EACV,YAAY,EAGb,MAAM,mBAAmB,CAAC;AAkI3B;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,aAAa,EACpB,QAAQ,GAAE,MAAM,GAAG,OAAiB,GACnC,YAAY,CAGd"}
@@ -43,7 +43,7 @@ const providerMap = {
43
43
  kie: kieImageProvider,
44
44
  wavespeed: wavespeedImageProvider,
45
45
  };
46
- function selectOffering(model, priority) {
46
+ function selectOfferings(model, priority) {
47
47
  const offerings = imageGenMultiProviderModels[model];
48
48
  if (!offerings || offerings.length === 0) {
49
49
  throw new Error(`[ImageGenFactory] No providers configured for model ${model}`);
@@ -54,18 +54,19 @@ function selectOffering(model, priority) {
54
54
  }
55
55
  if (priority === 'fast') {
56
56
  const tierOrder = { fast: 0, standard: 1, slow: 2 };
57
- const sorted = [...available].sort((a, b) => tierOrder[a.latencyTier] - tierOrder[b.latencyTier]);
58
- return sorted[0];
57
+ return [...available].sort((a, b) => tierOrder[a.latencyTier] - tierOrder[b.latencyTier]);
59
58
  }
60
- // 'cheap': first entry (array is ordered cheapest first)
61
- return available[0];
59
+ // 'cheap': array is already ordered cheapest first
60
+ return available;
62
61
  }
63
62
  class ImageGenImpl {
64
- provider;
63
+ offerings;
65
64
  model;
66
- constructor(provider, model) {
67
- this.provider = provider;
65
+ priority;
66
+ constructor(offerings, model, priority) {
67
+ this.offerings = offerings;
68
68
  this.model = model;
69
+ this.priority = priority;
69
70
  }
70
71
  async generate(input) {
71
72
  if (input.images?.some(Boolean)) {
@@ -75,40 +76,49 @@ class ImageGenImpl {
75
76
  const prompt = input.negativePrompt
76
77
  ? `${input.prompt} --no ${input.negativePrompt}`
77
78
  : input.prompt;
78
- const imageUrl = await this.provider.generate(prompt, {
79
- width,
80
- height,
81
- model: this.model,
82
- });
83
- const base64 = await urlToBase64(imageUrl);
84
- return {
85
- type: 'base64',
86
- base64,
87
- mime: 'image/jpeg',
88
- width,
89
- height,
90
- };
79
+ let lastError;
80
+ for (const offering of this.offerings) {
81
+ const provider = providerMap[offering.provider];
82
+ if (!provider)
83
+ continue;
84
+ try {
85
+ console.log('[ImageGenFactory] Trying provider', {
86
+ model: this.model,
87
+ provider: offering.provider,
88
+ providerModel: offering.providerModel,
89
+ reason: this.priority === 'fast' ? 'fastest_available' : 'cheapest_available',
90
+ });
91
+ const imageUrl = await provider.generate(prompt, {
92
+ width,
93
+ height,
94
+ model: this.model,
95
+ });
96
+ const base64 = await urlToBase64(imageUrl);
97
+ return {
98
+ type: 'base64',
99
+ base64,
100
+ mime: 'image/jpeg',
101
+ width,
102
+ height,
103
+ };
104
+ }
105
+ catch (err) {
106
+ lastError = err;
107
+ console.error(`[ImageGenFactory] Provider ${offering.provider} failed for ${this.model}, trying next`, lastError.message);
108
+ }
109
+ }
110
+ throw lastError ?? new Error(`[ImageGenFactory] All providers failed for ${this.model}`);
91
111
  }
92
112
  }
93
113
  /**
94
114
  * Create an ImageGen instance for the given clean model name.
95
- * Automatically selects the best available provider based on priority.
115
+ * Automatically selects providers in priority order and falls back on failure.
96
116
  *
97
117
  * @param model - Clean model name (e.g. 'flux_1_dev', 'seedream', 'nano_banana')
98
118
  * @param priority - 'cheap' (default) selects cheapest provider; 'fast' selects lowest latency
99
119
  */
100
120
  export function imageGenCreate(model, priority = 'cheap') {
101
- const offering = selectOffering(model, priority);
102
- const provider = providerMap[offering.provider];
103
- if (!provider) {
104
- throw new Error(`[ImageGenFactory] Unknown provider ${offering.provider}`);
105
- }
106
- console.log('[ImageGenFactory] Selected provider', {
107
- model,
108
- provider: offering.provider,
109
- providerModel: offering.providerModel,
110
- reason: priority === 'fast' ? 'fastest_available' : 'cheapest_available',
111
- });
112
- return new ImageGenImpl(provider, model);
121
+ const offerings = selectOfferings(model, priority);
122
+ return new ImageGenImpl(offerings, model, priority);
113
123
  }
114
124
  //# sourceMappingURL=ImageGenFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ImageGenFactory.js","sourceRoot":"","sources":["../../../src/server/ai/ImageGenFactory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ImageGenFactory.js","sourceRoot":"","sources":["../../../src/server/ai/ImageGenFactory.ts"],"names":[],"mappings":"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"}
@@ -239,7 +239,7 @@ export const imageGenMultiProviderModels = {
239
239
  {
240
240
  provider: 'together',
241
241
  providerModel: 'together_flux_schnell',
242
- available: true,
242
+ available: false, // Together moved FLUX.1-schnell to dedicated endpoints only (2026-03)
243
243
  latencyTier: 'fast',
244
244
  },
245
245
  {
@@ -253,13 +253,13 @@ export const imageGenMultiProviderModels = {
253
253
  {
254
254
  provider: 'together',
255
255
  providerModel: 'together_flux_dev',
256
- available: true,
256
+ available: false, // Together moved FLUX.1-dev to dedicated endpoints only (2026-03)
257
257
  latencyTier: 'fast',
258
258
  },
259
259
  {
260
260
  provider: 'fireworks',
261
261
  providerModel: 'fireworks_flux_dev',
262
- available: true,
262
+ available: false, // Fireworks image gen routes through Together API, same issue
263
263
  latencyTier: 'fast',
264
264
  },
265
265
  {
@@ -1 +1 @@
1
- {"version":3,"file":"ImageGen.js","sourceRoot":"","sources":["../../src/shared/ImageGen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ImageGen.js","sourceRoot":"","sources":["../../src/shared/ImageGen.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ugly-app",
3
- "version": "0.1.123",
3
+ "version": "0.1.124",
4
4
  "type": "module",
5
5
  "main": "./dist/server/index.js",
6
6
  "exports": {
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by prebuild — do not edit manually
2
- export const CLI_VERSION = "0.1.123";
2
+ export const CLI_VERSION = "0.1.124";
@@ -62,10 +62,10 @@ const providerMap: Record<string, ImageGenProvider> = {
62
62
  wavespeed: wavespeedImageProvider,
63
63
  };
64
64
 
65
- function selectOffering(
65
+ function selectOfferings(
66
66
  model: ImageGenModel,
67
67
  priority: 'fast' | 'cheap',
68
- ): ImageGenProviderOffering {
68
+ ): ImageGenProviderOffering[] {
69
69
  const offerings = imageGenMultiProviderModels[model];
70
70
  if (!offerings || offerings.length === 0) {
71
71
  throw new Error(`[ImageGenFactory] No providers configured for model ${model}`);
@@ -78,20 +78,20 @@ function selectOffering(
78
78
 
79
79
  if (priority === 'fast') {
80
80
  const tierOrder: Record<ImageGenLatencyTier, number> = { fast: 0, standard: 1, slow: 2 };
81
- const sorted = [...available].sort(
81
+ return [...available].sort(
82
82
  (a, b) => tierOrder[a.latencyTier] - tierOrder[b.latencyTier],
83
83
  );
84
- return sorted[0];
85
84
  }
86
85
 
87
- // 'cheap': first entry (array is ordered cheapest first)
88
- return available[0];
86
+ // 'cheap': array is already ordered cheapest first
87
+ return available;
89
88
  }
90
89
 
91
90
  class ImageGenImpl implements ImageGenBase {
92
91
  constructor(
93
- private readonly provider: ImageGenProvider,
92
+ private readonly offerings: ImageGenProviderOffering[],
94
93
  private readonly model: ImageGenModel,
94
+ private readonly priority: 'fast' | 'cheap',
95
95
  ) {}
96
96
 
97
97
  async generate(
@@ -108,26 +108,46 @@ class ImageGenImpl implements ImageGenBase {
108
108
  ? `${input.prompt} --no ${input.negativePrompt}`
109
109
  : input.prompt;
110
110
 
111
- const imageUrl = await this.provider.generate(prompt, {
112
- width,
113
- height,
114
- model: this.model,
115
- });
116
- const base64 = await urlToBase64(imageUrl);
117
-
118
- return {
119
- type: 'base64',
120
- base64,
121
- mime: 'image/jpeg',
122
- width,
123
- height,
124
- };
111
+ let lastError: Error | undefined;
112
+ for (const offering of this.offerings) {
113
+ const provider = providerMap[offering.provider];
114
+ if (!provider) continue;
115
+
116
+ try {
117
+ console.log('[ImageGenFactory] Trying provider', {
118
+ model: this.model,
119
+ provider: offering.provider,
120
+ providerModel: offering.providerModel,
121
+ reason: this.priority === 'fast' ? 'fastest_available' : 'cheapest_available',
122
+ });
123
+
124
+ const imageUrl = await provider.generate(prompt, {
125
+ width,
126
+ height,
127
+ model: this.model,
128
+ });
129
+ const base64 = await urlToBase64(imageUrl);
130
+
131
+ return {
132
+ type: 'base64',
133
+ base64,
134
+ mime: 'image/jpeg',
135
+ width,
136
+ height,
137
+ };
138
+ } catch (err) {
139
+ lastError = err as Error;
140
+ console.error(`[ImageGenFactory] Provider ${offering.provider} failed for ${this.model}, trying next`, lastError.message);
141
+ }
142
+ }
143
+
144
+ throw lastError ?? new Error(`[ImageGenFactory] All providers failed for ${this.model}`);
125
145
  }
126
146
  }
127
147
 
128
148
  /**
129
149
  * Create an ImageGen instance for the given clean model name.
130
- * Automatically selects the best available provider based on priority.
150
+ * Automatically selects providers in priority order and falls back on failure.
131
151
  *
132
152
  * @param model - Clean model name (e.g. 'flux_1_dev', 'seedream', 'nano_banana')
133
153
  * @param priority - 'cheap' (default) selects cheapest provider; 'fast' selects lowest latency
@@ -136,19 +156,6 @@ export function imageGenCreate(
136
156
  model: ImageGenModel,
137
157
  priority: 'fast' | 'cheap' = 'cheap',
138
158
  ): ImageGenBase {
139
- const offering = selectOffering(model, priority);
140
- const provider = providerMap[offering.provider];
141
-
142
- if (!provider) {
143
- throw new Error(`[ImageGenFactory] Unknown provider ${offering.provider}`);
144
- }
145
-
146
- console.log('[ImageGenFactory] Selected provider', {
147
- model,
148
- provider: offering.provider,
149
- providerModel: offering.providerModel,
150
- reason: priority === 'fast' ? 'fastest_available' : 'cheapest_available',
151
- });
152
-
153
- return new ImageGenImpl(provider, model);
159
+ const offerings = selectOfferings(model, priority);
160
+ return new ImageGenImpl(offerings, model, priority);
154
161
  }
@@ -361,7 +361,7 @@ export const imageGenMultiProviderModels: Record<
361
361
  {
362
362
  provider: 'together',
363
363
  providerModel: 'together_flux_schnell',
364
- available: true,
364
+ available: false, // Together moved FLUX.1-schnell to dedicated endpoints only (2026-03)
365
365
  latencyTier: 'fast',
366
366
  },
367
367
  {
@@ -375,13 +375,13 @@ export const imageGenMultiProviderModels: Record<
375
375
  {
376
376
  provider: 'together',
377
377
  providerModel: 'together_flux_dev',
378
- available: true,
378
+ available: false, // Together moved FLUX.1-dev to dedicated endpoints only (2026-03)
379
379
  latencyTier: 'fast',
380
380
  },
381
381
  {
382
382
  provider: 'fireworks',
383
383
  providerModel: 'fireworks_flux_dev',
384
- available: true,
384
+ available: false, // Fireworks image gen routes through Together API, same issue
385
385
  latencyTier: 'fast',
386
386
  },
387
387
  {