@just-every/ensemble 0.2.160 → 0.2.162
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.
- package/README.md +45 -1
- package/dist/cjs/core/ensemble_image.cjs +92 -6
- package/dist/cjs/core/ensemble_image.d.ts +2 -2
- package/dist/cjs/core/ensemble_image.d.ts.map +1 -1
- package/dist/cjs/core/ensemble_image.js.map +1 -1
- package/dist/cjs/data/model_data.cjs +668 -94
- package/dist/cjs/data/model_data.d.ts.map +1 -1
- package/dist/cjs/data/model_data.js.map +1 -1
- package/dist/cjs/model_providers/bytedance.cjs +202 -0
- package/dist/cjs/model_providers/bytedance.d.ts +9 -0
- package/dist/cjs/model_providers/bytedance.d.ts.map +1 -0
- package/dist/cjs/model_providers/bytedance.js.map +1 -0
- package/dist/cjs/model_providers/fal.cjs +97 -0
- package/dist/cjs/model_providers/fal.d.ts +10 -0
- package/dist/cjs/model_providers/fal.d.ts.map +1 -0
- package/dist/cjs/model_providers/fal.js.map +1 -0
- package/dist/cjs/model_providers/fireworks.cjs +193 -0
- package/dist/cjs/model_providers/fireworks.d.ts +12 -0
- package/dist/cjs/model_providers/fireworks.d.ts.map +1 -0
- package/dist/cjs/model_providers/fireworks.js.map +1 -0
- package/dist/cjs/model_providers/gemini.cjs +141 -7
- package/dist/cjs/model_providers/gemini.d.ts.map +1 -1
- package/dist/cjs/model_providers/gemini.js.map +1 -1
- package/dist/cjs/model_providers/ideogram.cjs +136 -0
- package/dist/cjs/model_providers/ideogram.d.ts +9 -0
- package/dist/cjs/model_providers/ideogram.d.ts.map +1 -0
- package/dist/cjs/model_providers/ideogram.js.map +1 -0
- package/dist/cjs/model_providers/luma.cjs +150 -0
- package/dist/cjs/model_providers/luma.d.ts +9 -0
- package/dist/cjs/model_providers/luma.d.ts.map +1 -0
- package/dist/cjs/model_providers/luma.js.map +1 -0
- package/dist/cjs/model_providers/midjourney.cjs +134 -0
- package/dist/cjs/model_providers/midjourney.d.ts +9 -0
- package/dist/cjs/model_providers/midjourney.d.ts.map +1 -0
- package/dist/cjs/model_providers/midjourney.js.map +1 -0
- package/dist/cjs/model_providers/model_provider.cjs +60 -0
- package/dist/cjs/model_providers/model_provider.d.ts.map +1 -1
- package/dist/cjs/model_providers/model_provider.js.map +1 -1
- package/dist/cjs/model_providers/openai.cjs +24 -14
- package/dist/cjs/model_providers/openai.d.ts.map +1 -1
- package/dist/cjs/model_providers/openai.js.map +1 -1
- package/dist/cjs/model_providers/runway.cjs +145 -0
- package/dist/cjs/model_providers/runway.d.ts +9 -0
- package/dist/cjs/model_providers/runway.d.ts.map +1 -0
- package/dist/cjs/model_providers/runway.js.map +1 -0
- package/dist/cjs/model_providers/stability.cjs +130 -0
- package/dist/cjs/model_providers/stability.d.ts +10 -0
- package/dist/cjs/model_providers/stability.d.ts.map +1 -0
- package/dist/cjs/model_providers/stability.js.map +1 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/cjs/types/types.d.ts +11 -3
- package/dist/cjs/types/types.d.ts.map +1 -1
- package/dist/cjs/utils/cost_tracker.cjs +3 -0
- package/dist/cjs/utils/cost_tracker.d.ts +1 -0
- package/dist/cjs/utils/cost_tracker.d.ts.map +1 -1
- package/dist/cjs/utils/cost_tracker.js.map +1 -1
- package/dist/cjs/utils/ensemble_result.d.ts +1 -1
- package/dist/cjs/utils/ensemble_result.d.ts.map +1 -1
- package/dist/cjs/utils/fetch_with_timeout.cjs +28 -0
- package/dist/cjs/utils/fetch_with_timeout.d.ts +2 -0
- package/dist/cjs/utils/fetch_with_timeout.d.ts.map +1 -0
- package/dist/cjs/utils/fetch_with_timeout.js.map +1 -0
- package/dist/cjs/utils/image_utils.cjs +23 -0
- package/dist/cjs/utils/image_utils.d.ts +5 -0
- package/dist/cjs/utils/image_utils.d.ts.map +1 -1
- package/dist/cjs/utils/image_utils.js.map +1 -1
- package/dist/core/ensemble_image.d.ts +2 -2
- package/dist/core/ensemble_image.d.ts.map +1 -1
- package/dist/core/ensemble_image.js +59 -6
- package/dist/core/ensemble_image.js.map +1 -1
- package/dist/data/model_data.d.ts.map +1 -1
- package/dist/data/model_data.js +668 -94
- package/dist/data/model_data.js.map +1 -1
- package/dist/model_providers/bytedance.d.ts +9 -0
- package/dist/model_providers/bytedance.d.ts.map +1 -0
- package/dist/model_providers/bytedance.js +198 -0
- package/dist/model_providers/bytedance.js.map +1 -0
- package/dist/model_providers/fal.d.ts +10 -0
- package/dist/model_providers/fal.d.ts.map +1 -0
- package/dist/model_providers/fal.js +93 -0
- package/dist/model_providers/fal.js.map +1 -0
- package/dist/model_providers/fireworks.d.ts +12 -0
- package/dist/model_providers/fireworks.d.ts.map +1 -0
- package/dist/model_providers/fireworks.js +189 -0
- package/dist/model_providers/fireworks.js.map +1 -0
- package/dist/model_providers/gemini.d.ts.map +1 -1
- package/dist/model_providers/gemini.js +141 -7
- package/dist/model_providers/gemini.js.map +1 -1
- package/dist/model_providers/ideogram.d.ts +9 -0
- package/dist/model_providers/ideogram.d.ts.map +1 -0
- package/dist/model_providers/ideogram.js +132 -0
- package/dist/model_providers/ideogram.js.map +1 -0
- package/dist/model_providers/luma.d.ts +9 -0
- package/dist/model_providers/luma.d.ts.map +1 -0
- package/dist/model_providers/luma.js +146 -0
- package/dist/model_providers/luma.js.map +1 -0
- package/dist/model_providers/midjourney.d.ts +9 -0
- package/dist/model_providers/midjourney.d.ts.map +1 -0
- package/dist/model_providers/midjourney.js +130 -0
- package/dist/model_providers/midjourney.js.map +1 -0
- package/dist/model_providers/model_provider.d.ts.map +1 -1
- package/dist/model_providers/model_provider.js +60 -0
- package/dist/model_providers/model_provider.js.map +1 -1
- package/dist/model_providers/openai.d.ts.map +1 -1
- package/dist/model_providers/openai.js +24 -14
- package/dist/model_providers/openai.js.map +1 -1
- package/dist/model_providers/runway.d.ts +9 -0
- package/dist/model_providers/runway.d.ts.map +1 -0
- package/dist/model_providers/runway.js +141 -0
- package/dist/model_providers/runway.js.map +1 -0
- package/dist/model_providers/stability.d.ts +10 -0
- package/dist/model_providers/stability.d.ts.map +1 -0
- package/dist/model_providers/stability.js +126 -0
- package/dist/model_providers/stability.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types/types.d.ts +11 -3
- package/dist/types/types.d.ts.map +1 -1
- package/dist/utils/cost_tracker.d.ts +1 -0
- package/dist/utils/cost_tracker.d.ts.map +1 -1
- package/dist/utils/cost_tracker.js +3 -0
- package/dist/utils/cost_tracker.js.map +1 -1
- package/dist/utils/ensemble_result.d.ts +1 -1
- package/dist/utils/ensemble_result.d.ts.map +1 -1
- package/dist/utils/fetch_with_timeout.d.ts +2 -0
- package/dist/utils/fetch_with_timeout.d.ts.map +1 -0
- package/dist/utils/fetch_with_timeout.js +25 -0
- package/dist/utils/fetch_with_timeout.js.map +1 -0
- package/dist/utils/image_utils.d.ts +5 -0
- package/dist/utils/image_utils.d.ts.map +1 -1
- package/dist/utils/image_utils.js +22 -0
- package/dist/utils/image_utils.js.map +1 -1
- package/package.json +122 -114
package/README.md
CHANGED
|
@@ -34,6 +34,14 @@ See the [demo README](demo/README.md) for detailed information about each demo.
|
|
|
34
34
|
- 📊 **Cost & Quota Tracking** - Built-in usage monitoring and cost calculation
|
|
35
35
|
- 🎯 **Smart Result Processing** - Automatic summarization and truncation for long outputs
|
|
36
36
|
|
|
37
|
+
## Model Updates (Nov 2025)
|
|
38
|
+
- OpenAI: GPT-5.1 (base + Codex, Codex-Mini, Codex-Max*), GPT-5/4.1/4o lines retained
|
|
39
|
+
- Anthropic: Claude 4.5 (Sonnet/Haiku, incl. 1M context) and Claude Opus 4.1
|
|
40
|
+
- Google: Gemini 3 (Pro/Flash/Ultra) and refreshed Gemini 2.5 pricing incl. image/TTS/native-audio
|
|
41
|
+
- xAI: Grok 4.1 Fast and Grok 4 Fast with tiered pricing; updated Grok 4/3/mini variants
|
|
42
|
+
|
|
43
|
+
*Codex-Max pricing reflects current published rates and may change when OpenAI finalizes API pricing.
|
|
44
|
+
|
|
37
45
|
## Installation
|
|
38
46
|
|
|
39
47
|
```bash
|
|
@@ -218,6 +226,16 @@ for await (const event of ensembleVoice('Long text...', {
|
|
|
218
226
|
**Supported Voice Models:**
|
|
219
227
|
- OpenAI: `tts-1`, `tts-1-hd`
|
|
220
228
|
- Google Gemini: `gemini-2.5-flash-preview-tts`, `gemini-2.5-pro-preview-tts`
|
|
229
|
+
|
|
230
|
+
### Image generation
|
|
231
|
+
|
|
232
|
+
Use OpenAI GPT-Image-1 or Google Gemini 2.5 Flash Image (Preview):
|
|
233
|
+
|
|
234
|
+
```ts
|
|
235
|
+
import { ensembleImage } from '@just-every/ensemble';
|
|
236
|
+
|
|
237
|
+
const images = await ensembleImage('A serene lake at dawn', { model: 'gemini-2.5-flash-image-preview' }, { size: 'portrait' });
|
|
238
|
+
```
|
|
221
239
|
- ElevenLabs: `eleven_multilingual_v2`, `eleven_turbo_v2_5`
|
|
222
240
|
|
|
223
241
|
## Development
|
|
@@ -239,6 +257,32 @@ npm run docs
|
|
|
239
257
|
npm run lint
|
|
240
258
|
```
|
|
241
259
|
|
|
260
|
+
Additional image providers
|
|
261
|
+
|
|
262
|
+
New providers added
|
|
263
|
+
- Fireworks AI (FLUX family: Kontext/Pro/Schnell) – async APIs with result polling. Docs: Fireworks Image API.
|
|
264
|
+
- Stability AI (Stable Image Ultra/SDXL) – REST v2beta endpoints supporting text-to-image and image-to-image.
|
|
265
|
+
- Runway Gen-4 Image – via FAL.ai.
|
|
266
|
+
- Recraft v3 – via FAL.ai (supports text-to-vector and vector-style outputs).
|
|
267
|
+
|
|
268
|
+
Environment
|
|
269
|
+
```
|
|
270
|
+
FIREWORKS_API_KEY=your_key
|
|
271
|
+
STABILITY_API_KEY=your_key
|
|
272
|
+
FAL_KEY=your_key
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
Fallbacks
|
|
276
|
+
- If Fireworks returns 401/403 or is not configured, requests for Flux-family models automatically fall back to FAL.ai equivalents when `FAL_KEY` is set.
|
|
277
|
+
|
|
278
|
+
- Luma Photon (official): set `LUMA_API_KEY` and use `luma-photon-1` or `luma-photon-flash-1`.
|
|
279
|
+
- Ideogram 3.0 (official): set `IDEOGRAM_API_KEY` and use `ideogram-3.0`.
|
|
280
|
+
- Midjourney v7 (3rd-party): set `MIDJOURNEY_API_KEY` (or `KIE_API_KEY`) and optional `MJ_API_BASE`; use `midjourney-v7`.
|
|
281
|
+
|
|
282
|
+
Notes
|
|
283
|
+
- Gemini Flash Image does not expose hard size/AR controls; we add soft prompt hints and return the image unchanged.
|
|
284
|
+
- Luma Photon and Ideogram return URLs; we pass them through without altering pixels.
|
|
285
|
+
|
|
242
286
|
## Architecture
|
|
243
287
|
|
|
244
288
|
Ensemble provides a unified interface across multiple LLM providers:
|
|
@@ -277,4 +321,4 @@ Contributions are welcome! Please:
|
|
|
277
321
|
|
|
278
322
|
## License
|
|
279
323
|
|
|
280
|
-
MIT
|
|
324
|
+
MIT
|
|
@@ -1,13 +1,99 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.ensembleImage = ensembleImage;
|
|
37
|
+
const node_crypto_1 = require("node:crypto");
|
|
4
38
|
const model_provider_js_1 = require("../model_providers/model_provider.cjs");
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
39
|
+
function ensembleImage(prompt, agent, options = {}) {
|
|
40
|
+
const run = async () => {
|
|
41
|
+
const model = await (0, model_provider_js_1.getModelFromAgent)(agent, 'image_generation');
|
|
42
|
+
const provider = (0, model_provider_js_1.getModelProvider)(model);
|
|
43
|
+
if (!provider.createImage)
|
|
44
|
+
throw new Error(`Provider for model ${model} does not support image generation`);
|
|
45
|
+
return provider.createImage(prompt, model, agent, options);
|
|
46
|
+
};
|
|
47
|
+
if (!options.stream) {
|
|
48
|
+
return run();
|
|
10
49
|
}
|
|
11
|
-
|
|
50
|
+
const self = async function* () {
|
|
51
|
+
const request_id = options.request_id || (0, node_crypto_1.randomUUID)();
|
|
52
|
+
options = { ...options, request_id };
|
|
53
|
+
const { costTracker } = await Promise.resolve().then(() => __importStar(require("../utils/cost_tracker.cjs")));
|
|
54
|
+
yield { type: 'image_start', request_id, timestamp: new Date().toISOString() };
|
|
55
|
+
const handler = (usage) => {
|
|
56
|
+
if (usage?.request_id === request_id) {
|
|
57
|
+
const ev = { type: 'cost_update', usage, request_id, timestamp: new Date().toISOString() };
|
|
58
|
+
iterator.push(ev);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const iterator = {
|
|
62
|
+
queue: [],
|
|
63
|
+
push(e) { this.queue.push(e); },
|
|
64
|
+
};
|
|
65
|
+
costTracker.onAddUsage(handler);
|
|
66
|
+
try {
|
|
67
|
+
const images = await run();
|
|
68
|
+
while (iterator.queue.length)
|
|
69
|
+
yield iterator.queue.shift();
|
|
70
|
+
let idx = 0;
|
|
71
|
+
for (const img of images) {
|
|
72
|
+
const isUrl = typeof img === 'string' && /^https?:\/\//i.test(img);
|
|
73
|
+
const ev = {
|
|
74
|
+
type: 'file_complete',
|
|
75
|
+
request_id,
|
|
76
|
+
message_id: `${request_id}_img_${idx}`,
|
|
77
|
+
data_format: isUrl ? 'url' : 'base64',
|
|
78
|
+
data: img,
|
|
79
|
+
timestamp: new Date().toISOString(),
|
|
80
|
+
};
|
|
81
|
+
yield ev;
|
|
82
|
+
while (iterator.queue.length)
|
|
83
|
+
yield iterator.queue.shift();
|
|
84
|
+
idx++;
|
|
85
|
+
}
|
|
86
|
+
yield { type: 'image_complete', request_id, timestamp: new Date().toISOString() };
|
|
87
|
+
while (iterator.queue.length)
|
|
88
|
+
yield iterator.queue.shift();
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
yield { type: 'error', request_id, error: String(error?.message || error) };
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
costTracker.offAddUsage(handler);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
return self();
|
|
12
98
|
}
|
|
13
99
|
//# sourceMappingURL=ensemble_image.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type { AgentDefinition, ImageGenerationOpts } from "../types/types.cjs";
|
|
2
|
-
export declare function ensembleImage(prompt: string, agent: AgentDefinition, options?: ImageGenerationOpts): Promise<string[]>;
|
|
1
|
+
import type { AgentDefinition, ImageGenerationOpts, ProviderStreamEvent } from "../types/types.cjs";
|
|
2
|
+
export declare function ensembleImage(prompt: string, agent: AgentDefinition, options?: ImageGenerationOpts): Promise<string[]> | AsyncGenerator<ProviderStreamEvent>;
|
|
3
3
|
//# sourceMappingURL=ensemble_image.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensemble_image.d.ts","sourceRoot":"","sources":["../../../core/ensemble_image.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ensemble_image.d.ts","sourceRoot":"","sources":["../../../core/ensemble_image.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAwBnG,wBAAgB,aAAa,CACzB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,eAAe,EACtB,OAAO,GAAE,mBAAwB,GAClC,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,cAAc,CAAC,mBAAmB,CAAC,CAwEzD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensemble_image.js","sourceRoot":"","sources":["../../../core/ensemble_image.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ensemble_image.js","sourceRoot":"","sources":["../../../core/ensemble_image.ts"],"names":[],"mappings":"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"}
|