@just-every/ensemble 0.2.226 → 0.2.228

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 (66) hide show
  1. package/README.md +4 -1
  2. package/dist/cjs/data/model_data.cjs +9 -0
  3. package/dist/cjs/data/model_data.d.ts.map +1 -1
  4. package/dist/cjs/data/model_data.js.map +1 -1
  5. package/dist/cjs/model_providers/claude.cjs +4 -6
  6. package/dist/cjs/model_providers/claude.d.ts.map +1 -1
  7. package/dist/cjs/model_providers/claude.js.map +1 -1
  8. package/dist/cjs/model_providers/fal.cjs +75 -22
  9. package/dist/cjs/model_providers/fal.d.ts +3 -0
  10. package/dist/cjs/model_providers/fal.d.ts.map +1 -1
  11. package/dist/cjs/model_providers/fal.js.map +1 -1
  12. package/dist/cjs/model_providers/gemini.cjs +20 -21
  13. package/dist/cjs/model_providers/gemini.d.ts.map +1 -1
  14. package/dist/cjs/model_providers/gemini.js.map +1 -1
  15. package/dist/cjs/model_providers/openai.cjs +21 -53
  16. package/dist/cjs/model_providers/openai.d.ts.map +1 -1
  17. package/dist/cjs/model_providers/openai.js.map +1 -1
  18. package/dist/cjs/model_providers/openai_chat.cjs +21 -52
  19. package/dist/cjs/model_providers/openai_chat.d.ts.map +1 -1
  20. package/dist/cjs/model_providers/openai_chat.js.map +1 -1
  21. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  22. package/dist/cjs/types/api_types.d.ts +1 -1
  23. package/dist/cjs/types/api_types.d.ts.map +1 -1
  24. package/dist/cjs/types/types.d.ts +4 -2
  25. package/dist/cjs/types/types.d.ts.map +1 -1
  26. package/dist/cjs/utils/image_detail.cjs +77 -0
  27. package/dist/cjs/utils/image_detail.d.ts +12 -0
  28. package/dist/cjs/utils/image_detail.d.ts.map +1 -0
  29. package/dist/cjs/utils/image_detail.js.map +1 -0
  30. package/dist/cjs/utils/image_utils.cjs +0 -219
  31. package/dist/cjs/utils/image_utils.d.ts +0 -16
  32. package/dist/cjs/utils/image_utils.d.ts.map +1 -1
  33. package/dist/cjs/utils/image_utils.js.map +1 -1
  34. package/dist/data/model_data.d.ts.map +1 -1
  35. package/dist/data/model_data.js +9 -0
  36. package/dist/data/model_data.js.map +1 -1
  37. package/dist/model_providers/claude.d.ts.map +1 -1
  38. package/dist/model_providers/claude.js +5 -7
  39. package/dist/model_providers/claude.js.map +1 -1
  40. package/dist/model_providers/fal.d.ts +3 -0
  41. package/dist/model_providers/fal.d.ts.map +1 -1
  42. package/dist/model_providers/fal.js +75 -22
  43. package/dist/model_providers/fal.js.map +1 -1
  44. package/dist/model_providers/gemini.d.ts.map +1 -1
  45. package/dist/model_providers/gemini.js +21 -22
  46. package/dist/model_providers/gemini.js.map +1 -1
  47. package/dist/model_providers/openai.d.ts.map +1 -1
  48. package/dist/model_providers/openai.js +22 -54
  49. package/dist/model_providers/openai.js.map +1 -1
  50. package/dist/model_providers/openai_chat.d.ts.map +1 -1
  51. package/dist/model_providers/openai_chat.js +22 -53
  52. package/dist/model_providers/openai_chat.js.map +1 -1
  53. package/dist/tsconfig.tsbuildinfo +1 -1
  54. package/dist/types/api_types.d.ts +1 -1
  55. package/dist/types/api_types.d.ts.map +1 -1
  56. package/dist/types/types.d.ts +4 -2
  57. package/dist/types/types.d.ts.map +1 -1
  58. package/dist/utils/image_detail.d.ts +12 -0
  59. package/dist/utils/image_detail.d.ts.map +1 -0
  60. package/dist/utils/image_detail.js +69 -0
  61. package/dist/utils/image_detail.js.map +1 -0
  62. package/dist/utils/image_utils.d.ts +0 -16
  63. package/dist/utils/image_utils.d.ts.map +1 -1
  64. package/dist/utils/image_utils.js +0 -181
  65. package/dist/utils/image_utils.js.map +1 -1
  66. package/package.json +2 -3
@@ -1,5 +1,6 @@
1
1
  import { BaseModelProvider } from './base_provider.js';
2
2
  import { costTracker } from '../utils/cost_tracker.js';
3
+ import { normalizeImageDataUrl } from '../utils/image_utils.js';
3
4
  import { log_llm_error, log_llm_request, log_llm_response } from '../utils/llm_logger.js';
4
5
  function mapImageSize(size) {
5
6
  if (!size)
@@ -24,6 +25,9 @@ export class FALProvider extends BaseModelProvider {
24
25
  }
25
26
  endpointFor(model) {
26
27
  const m = model.toLowerCase();
28
+ if (m === 'fal-ai/ideogram/remove-background' || m === 'ideogram-remove-background') {
29
+ return { path: 'fal-ai/ideogram/remove-background', bodyMode: 'remove-background' };
30
+ }
27
31
  if (m.startsWith('recraft'))
28
32
  return { path: 'fal-ai/recraft/v3/text-to-image', bodyMode: 'top' };
29
33
  if (m.includes('runway') || m.includes('gen4'))
@@ -36,6 +40,69 @@ export class FALProvider extends BaseModelProvider {
36
40
  return { path: 'fal-ai/flux-pro/kontext', bodyMode: 'top' };
37
41
  return { path: 'fal-ai/flux/schnell', bodyMode: 'top' };
38
42
  }
43
+ imageUrlForRemoveBackground(opts) {
44
+ const sourceImages = opts.source_images;
45
+ if (!sourceImages) {
46
+ throw new Error('fal-ai/ideogram/remove-background requires exactly one source image.');
47
+ }
48
+ const rawImages = Array.isArray(sourceImages) ? sourceImages : [sourceImages];
49
+ if (rawImages.length !== 1) {
50
+ throw new Error('fal-ai/ideogram/remove-background supports exactly one source image per request.');
51
+ }
52
+ const rawImage = rawImages[0];
53
+ const normalized = typeof rawImage === 'string'
54
+ ? normalizeImageDataUrl({ data: rawImage })
55
+ : normalizeImageDataUrl({ data: rawImage.data });
56
+ const imageUrl = normalized.url || normalized.dataUrl;
57
+ if (!imageUrl ||
58
+ (!imageUrl.startsWith('http://') && !imageUrl.startsWith('https://') && !imageUrl.startsWith('data:image/'))) {
59
+ throw new Error('fal-ai/ideogram/remove-background expects the source image to be a public URL or a data:image/... base64 URI.');
60
+ }
61
+ return imageUrl;
62
+ }
63
+ buildBody(prompt, bodyMode, opts) {
64
+ if (bodyMode === 'remove-background') {
65
+ const body = {
66
+ image_url: this.imageUrlForRemoveBackground(opts),
67
+ };
68
+ if (opts?.response_format === 'b64_json') {
69
+ body.sync_mode = true;
70
+ }
71
+ return body;
72
+ }
73
+ const size = mapImageSize(opts.size);
74
+ const bodyInput = bodyMode === 'top' ? { prompt } : { input: { prompt } };
75
+ if (size) {
76
+ if (bodyMode === 'top')
77
+ bodyInput.image_size = size;
78
+ else
79
+ bodyInput.input.image_size = size;
80
+ }
81
+ if (opts?.response_format === 'b64_json') {
82
+ if (bodyMode === 'top')
83
+ bodyInput.sync_mode = true;
84
+ else
85
+ bodyInput.input.sync_mode = true;
86
+ }
87
+ return bodyInput;
88
+ }
89
+ extractImages(data) {
90
+ const images = [];
91
+ const addImage = (candidate) => {
92
+ if (typeof candidate === 'string' && candidate.length > 0) {
93
+ images.push(candidate);
94
+ }
95
+ else if (candidate?.url) {
96
+ images.push(candidate.url);
97
+ }
98
+ };
99
+ const arr = data?.images || data?.output?.images || [];
100
+ for (const im of arr)
101
+ addImage(im);
102
+ addImage(data?.image);
103
+ addImage(data?.url);
104
+ return images;
105
+ }
39
106
  async createImage(prompt, model, agent, opts = {}) {
40
107
  const falKey = process.env.FAL_KEY;
41
108
  const requestId = log_llm_request(agent.agent_id || 'default', 'fal', model, { prompt, opts }, new Date());
@@ -43,20 +110,7 @@ export class FALProvider extends BaseModelProvider {
43
110
  if (!falKey)
44
111
  throw new Error('FAL_KEY is not set');
45
112
  const { path, bodyMode } = this.endpointFor(model);
46
- const size = mapImageSize(opts.size);
47
- const bodyInput = bodyMode === 'top' ? { prompt } : { input: { prompt } };
48
- if (size) {
49
- if (bodyMode === 'top')
50
- bodyInput.image_size = size;
51
- else
52
- bodyInput.input.image_size = size;
53
- }
54
- if (opts?.response_format === 'b64_json') {
55
- if (bodyMode === 'top')
56
- bodyInput.sync_mode = true;
57
- else
58
- bodyInput.input.sync_mode = true;
59
- }
113
+ const bodyInput = this.buildBody(prompt, bodyMode, opts);
60
114
  const res = await fetch(`https://fal.run/${path}`, {
61
115
  method: 'POST',
62
116
  headers: {
@@ -68,16 +122,15 @@ export class FALProvider extends BaseModelProvider {
68
122
  if (!res.ok)
69
123
  throw new Error(`FAL request failed: ${res.status} ${await res.text()}`);
70
124
  const data = await res.json();
71
- const images = [];
72
- const arr = data?.images || data?.output?.images || [];
73
- for (const im of arr)
74
- if (im?.url)
75
- images.push(im.url);
76
- if (!images.length && data?.url)
77
- images.push(data.url);
125
+ const images = this.extractImages(data);
78
126
  if (!images.length)
79
127
  throw new Error('FAL: no image url in response');
80
- costTracker.addUsage({ model, image_count: images.length, request_id: opts?.request_id, metadata: { source: 'fal' } });
128
+ costTracker.addUsage({
129
+ model,
130
+ image_count: images.length,
131
+ request_id: opts?.request_id,
132
+ metadata: { source: 'fal' },
133
+ });
81
134
  return images;
82
135
  }
83
136
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"fal.js","sourceRoot":"","sources":["../../model_providers/fal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fal.js","sourceRoot":"","sources":["../../model_providers/fal.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../model_providers/gemini.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EAGH,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,mBAAmB,EAInB,mBAAmB,EAEnB,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,WAAW,EAOd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AA6NvD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAO1D;AAmCD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzD;AAmaD,qBAAa,cAAe,SAAQ,iBAAiB;IACjD,OAAO,CAAC,OAAO,CAAC,CAAc;IAC9B,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,MAAM,CAAC,EAAE,MAAM;IAS3B,OAAO,KAAK,MAAM,GAejB;IASK,eAAe,CACjB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EACxB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,EACtB,IAAI,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC;YAmKlB,2BAA2B;IA+BnC,oBAAoB,CACvB,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,EACtB,SAAS,CAAC,EAAE,MAAM,GACnB,cAAc,CAAC,mBAAmB,CAAC;IAigBhC,WAAW,CACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,EACtB,IAAI,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,MAAM,EAAE,CAAC;IAkhBpB,OAAO,CAAC,YAAY;IAmCd,WAAW,CACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,EACtB,IAAI,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC;IAgMpD,OAAO,CAAC,gBAAgB;IA6DjB,mBAAmB,CACtB,KAAK,EAAE,wBAAwB,EAC/B,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,iBAAiB,GACzB,cAAc,CAAC,kBAAkB,CAAC;IA6S/B,iBAAiB,CACnB,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,WAAW,CAAC;CAyB1B;AAyfD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
1
+ {"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../model_providers/gemini.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EAGH,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,mBAAmB,EAInB,mBAAmB,EAEnB,iBAAiB,EACjB,wBAAwB,EACxB,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,WAAW,EAOd,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AA6NvD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAO1D;AAmCD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzD;AAyZD,qBAAa,cAAe,SAAQ,iBAAiB;IACjD,OAAO,CAAC,OAAO,CAAC,CAAc;IAC9B,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,MAAM,CAAC,EAAE,MAAM;IAS3B,OAAO,KAAK,MAAM,GAejB;IASK,eAAe,CACjB,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,EACxB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,EACtB,IAAI,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC;YAmKlB,2BAA2B;IA+BnC,oBAAoB,CACvB,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,EACtB,SAAS,CAAC,EAAE,MAAM,GACnB,cAAc,CAAC,mBAAmB,CAAC;IAsgBhC,WAAW,CACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,EACtB,IAAI,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,MAAM,EAAE,CAAC;IAohBpB,OAAO,CAAC,YAAY;IAmCd,WAAW,CACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,EACtB,IAAI,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC;IAgMpD,OAAO,CAAC,gBAAgB;IA6DjB,mBAAmB,CACtB,KAAK,EAAE,wBAAwB,EAC/B,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,iBAAiB,GACzB,cAAc,CAAC,kBAAkB,CAAC;IA6S/B,iBAAiB,CACnB,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,WAAW,CAAC;CAyB1B;AAyfD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
@@ -4,7 +4,8 @@ import { BaseModelProvider } from './base_provider.js';
4
4
  import { costTracker } from '../utils/cost_tracker.js';
5
5
  import { log_llm_error, log_llm_request, log_llm_response } from '../utils/llm_logger.js';
6
6
  import { isPaused } from '../utils/pause_controller.js';
7
- import { appendMessageWithImage, normalizeImageDataUrl, resizeAndTruncateForGemini, } from '../utils/image_utils.js';
7
+ import { appendMessageWithImage, normalizeImageDataUrl, } from '../utils/image_utils.js';
8
+ import { chooseImageDetailFromInput, mapGeminiMediaResolution } from '../utils/image_detail.js';
8
9
  import { hasEventHandler } from '../utils/event_controller.js';
9
10
  import { truncateLargeValues } from '../utils/truncate_utils.js';
10
11
  function convertParameterToGeminiFormat(param) {
@@ -277,9 +278,8 @@ function mergeImageMetadata(target, source) {
277
278
  }
278
279
  async function addImagesToInput(input, images, source) {
279
280
  for (const [image_id, imageData] of Object.entries(images)) {
280
- const processedImageData = await resizeAndTruncateForGemini(imageData);
281
- const mimeType = getImageMimeType(processedImageData);
282
- const cleanedImageData = cleanBase64Data(processedImageData);
281
+ const mimeType = getImageMimeType(imageData);
282
+ const cleanedImageData = cleanBase64Data(imageData);
283
283
  input.push({
284
284
  role: 'user',
285
285
  parts: [
@@ -443,24 +443,12 @@ async function convertToGeminiContents(model, messages) {
443
443
  if (match) {
444
444
  const mimeType = match[1];
445
445
  const base64Data = match[2];
446
- const processedData = await resizeAndTruncateForGemini(imageUrl);
447
- const processedMatch = processedData.match(/^data:([^;]+);base64,(.+)$/);
448
- if (processedMatch) {
449
- parts.push({
450
- inlineData: {
451
- mimeType: processedMatch[1],
452
- data: processedMatch[2],
453
- },
454
- });
455
- }
456
- else {
457
- parts.push({
458
- inlineData: {
459
- mimeType: mimeType,
460
- data: base64Data,
461
- },
462
- });
463
- }
446
+ parts.push({
447
+ inlineData: {
448
+ mimeType: mimeType,
449
+ data: base64Data,
450
+ },
451
+ });
464
452
  }
465
453
  }
466
454
  else if (imageUrl.startsWith('http://') || imageUrl.startsWith('https://')) {
@@ -559,6 +547,10 @@ const GEMINI_3_PRO_IMAGE_DIMENSION_PRESETS = {
559
547
  '5504x3072': { ar: '16:9', imageSize: '4K' },
560
548
  '6336x2688': { ar: '21:9', imageSize: '4K' },
561
549
  };
550
+ function toGeminiMediaResolution(detail) {
551
+ const mapped = mapGeminiMediaResolution(detail);
552
+ return mapped ? MediaResolution[mapped] : undefined;
553
+ }
562
554
  export class GeminiProvider extends BaseModelProvider {
563
555
  _client;
564
556
  apiKey;
@@ -712,6 +704,7 @@ export class GeminiProvider extends BaseModelProvider {
712
704
  };
713
705
  const chunks = [];
714
706
  try {
707
+ const requestedImageDetail = chooseImageDetailFromInput(messages);
715
708
  const contents = await convertToGeminiContents(model, messages);
716
709
  if (contents.length === 0) {
717
710
  console.warn('Gemini API Warning: No valid content found in messages after conversion. Adding default message.');
@@ -796,6 +789,10 @@ export class GeminiProvider extends BaseModelProvider {
796
789
  if (agent.abortSignal) {
797
790
  config.abortSignal = agent.abortSignal;
798
791
  }
792
+ const mediaResolution = toGeminiMediaResolution(requestedImageDetail);
793
+ if (mediaResolution) {
794
+ config.mediaResolution = mediaResolution;
795
+ }
799
796
  let hasGoogleWebSearch = false;
800
797
  let hasCodeExecutionTool = false;
801
798
  let functionDeclarations = [];
@@ -1220,6 +1217,7 @@ export class GeminiProvider extends BaseModelProvider {
1220
1217
  }
1221
1218
  : undefined;
1222
1219
  const perImageCost = this.getImageCost(model, imageSize);
1220
+ const sourceImageMediaResolution = toGeminiMediaResolution(opts?.detail);
1223
1221
  const makeOne = async () => {
1224
1222
  const requestParams = {
1225
1223
  model,
@@ -1279,6 +1277,7 @@ export class GeminiProvider extends BaseModelProvider {
1279
1277
  config: {
1280
1278
  responseModalities: [Modality.IMAGE],
1281
1279
  ...(Object.keys(imageConfig).length ? { imageConfig } : {}),
1280
+ ...(sourceImageMediaResolution ? { mediaResolution: sourceImageMediaResolution } : {}),
1282
1281
  ...(googleSearchTool ? { tools: [googleSearchTool] } : {}),
1283
1282
  ...(Object.keys(thinkingConfig).length ? { thinkingConfig: thinkingConfig } : {}),
1284
1283
  },