@just-every/ensemble 0.2.159 → 0.2.161

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 (132) hide show
  1. package/README.md +37 -1
  2. package/dist/cjs/core/ensemble_image.cjs +92 -6
  3. package/dist/cjs/core/ensemble_image.d.ts +2 -2
  4. package/dist/cjs/core/ensemble_image.d.ts.map +1 -1
  5. package/dist/cjs/core/ensemble_image.js.map +1 -1
  6. package/dist/cjs/data/model_data.cjs +185 -1
  7. package/dist/cjs/data/model_data.d.ts.map +1 -1
  8. package/dist/cjs/data/model_data.js.map +1 -1
  9. package/dist/cjs/model_providers/bytedance.cjs +202 -0
  10. package/dist/cjs/model_providers/bytedance.d.ts +9 -0
  11. package/dist/cjs/model_providers/bytedance.d.ts.map +1 -0
  12. package/dist/cjs/model_providers/bytedance.js.map +1 -0
  13. package/dist/cjs/model_providers/fal.cjs +97 -0
  14. package/dist/cjs/model_providers/fal.d.ts +10 -0
  15. package/dist/cjs/model_providers/fal.d.ts.map +1 -0
  16. package/dist/cjs/model_providers/fal.js.map +1 -0
  17. package/dist/cjs/model_providers/fireworks.cjs +193 -0
  18. package/dist/cjs/model_providers/fireworks.d.ts +12 -0
  19. package/dist/cjs/model_providers/fireworks.d.ts.map +1 -0
  20. package/dist/cjs/model_providers/fireworks.js.map +1 -0
  21. package/dist/cjs/model_providers/gemini.cjs +136 -5
  22. package/dist/cjs/model_providers/gemini.d.ts.map +1 -1
  23. package/dist/cjs/model_providers/gemini.js.map +1 -1
  24. package/dist/cjs/model_providers/ideogram.cjs +136 -0
  25. package/dist/cjs/model_providers/ideogram.d.ts +9 -0
  26. package/dist/cjs/model_providers/ideogram.d.ts.map +1 -0
  27. package/dist/cjs/model_providers/ideogram.js.map +1 -0
  28. package/dist/cjs/model_providers/luma.cjs +150 -0
  29. package/dist/cjs/model_providers/luma.d.ts +9 -0
  30. package/dist/cjs/model_providers/luma.d.ts.map +1 -0
  31. package/dist/cjs/model_providers/luma.js.map +1 -0
  32. package/dist/cjs/model_providers/midjourney.cjs +134 -0
  33. package/dist/cjs/model_providers/midjourney.d.ts +9 -0
  34. package/dist/cjs/model_providers/midjourney.d.ts.map +1 -0
  35. package/dist/cjs/model_providers/midjourney.js.map +1 -0
  36. package/dist/cjs/model_providers/model_provider.cjs +60 -0
  37. package/dist/cjs/model_providers/model_provider.d.ts.map +1 -1
  38. package/dist/cjs/model_providers/model_provider.js.map +1 -1
  39. package/dist/cjs/model_providers/openai.cjs +24 -14
  40. package/dist/cjs/model_providers/openai.d.ts.map +1 -1
  41. package/dist/cjs/model_providers/openai.js.map +1 -1
  42. package/dist/cjs/model_providers/runway.cjs +145 -0
  43. package/dist/cjs/model_providers/runway.d.ts +9 -0
  44. package/dist/cjs/model_providers/runway.d.ts.map +1 -0
  45. package/dist/cjs/model_providers/runway.js.map +1 -0
  46. package/dist/cjs/model_providers/stability.cjs +130 -0
  47. package/dist/cjs/model_providers/stability.d.ts +10 -0
  48. package/dist/cjs/model_providers/stability.d.ts.map +1 -0
  49. package/dist/cjs/model_providers/stability.js.map +1 -0
  50. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  51. package/dist/cjs/types/types.d.ts +11 -3
  52. package/dist/cjs/types/types.d.ts.map +1 -1
  53. package/dist/cjs/utils/cost_tracker.cjs +3 -0
  54. package/dist/cjs/utils/cost_tracker.d.ts +1 -0
  55. package/dist/cjs/utils/cost_tracker.d.ts.map +1 -1
  56. package/dist/cjs/utils/cost_tracker.js.map +1 -1
  57. package/dist/cjs/utils/ensemble_result.d.ts +1 -1
  58. package/dist/cjs/utils/ensemble_result.d.ts.map +1 -1
  59. package/dist/cjs/utils/fetch_with_timeout.cjs +28 -0
  60. package/dist/cjs/utils/fetch_with_timeout.d.ts +2 -0
  61. package/dist/cjs/utils/fetch_with_timeout.d.ts.map +1 -0
  62. package/dist/cjs/utils/fetch_with_timeout.js.map +1 -0
  63. package/dist/cjs/utils/image_utils.cjs +23 -0
  64. package/dist/cjs/utils/image_utils.d.ts +5 -0
  65. package/dist/cjs/utils/image_utils.d.ts.map +1 -1
  66. package/dist/cjs/utils/image_utils.js.map +1 -1
  67. package/dist/core/ensemble_image.d.ts +2 -2
  68. package/dist/core/ensemble_image.d.ts.map +1 -1
  69. package/dist/core/ensemble_image.js +59 -6
  70. package/dist/core/ensemble_image.js.map +1 -1
  71. package/dist/data/model_data.d.ts.map +1 -1
  72. package/dist/data/model_data.js +185 -1
  73. package/dist/data/model_data.js.map +1 -1
  74. package/dist/model_providers/bytedance.d.ts +9 -0
  75. package/dist/model_providers/bytedance.d.ts.map +1 -0
  76. package/dist/model_providers/bytedance.js +198 -0
  77. package/dist/model_providers/bytedance.js.map +1 -0
  78. package/dist/model_providers/fal.d.ts +10 -0
  79. package/dist/model_providers/fal.d.ts.map +1 -0
  80. package/dist/model_providers/fal.js +93 -0
  81. package/dist/model_providers/fal.js.map +1 -0
  82. package/dist/model_providers/fireworks.d.ts +12 -0
  83. package/dist/model_providers/fireworks.d.ts.map +1 -0
  84. package/dist/model_providers/fireworks.js +189 -0
  85. package/dist/model_providers/fireworks.js.map +1 -0
  86. package/dist/model_providers/gemini.d.ts.map +1 -1
  87. package/dist/model_providers/gemini.js +136 -5
  88. package/dist/model_providers/gemini.js.map +1 -1
  89. package/dist/model_providers/ideogram.d.ts +9 -0
  90. package/dist/model_providers/ideogram.d.ts.map +1 -0
  91. package/dist/model_providers/ideogram.js +132 -0
  92. package/dist/model_providers/ideogram.js.map +1 -0
  93. package/dist/model_providers/luma.d.ts +9 -0
  94. package/dist/model_providers/luma.d.ts.map +1 -0
  95. package/dist/model_providers/luma.js +146 -0
  96. package/dist/model_providers/luma.js.map +1 -0
  97. package/dist/model_providers/midjourney.d.ts +9 -0
  98. package/dist/model_providers/midjourney.d.ts.map +1 -0
  99. package/dist/model_providers/midjourney.js +130 -0
  100. package/dist/model_providers/midjourney.js.map +1 -0
  101. package/dist/model_providers/model_provider.d.ts.map +1 -1
  102. package/dist/model_providers/model_provider.js +60 -0
  103. package/dist/model_providers/model_provider.js.map +1 -1
  104. package/dist/model_providers/openai.d.ts.map +1 -1
  105. package/dist/model_providers/openai.js +24 -14
  106. package/dist/model_providers/openai.js.map +1 -1
  107. package/dist/model_providers/runway.d.ts +9 -0
  108. package/dist/model_providers/runway.d.ts.map +1 -0
  109. package/dist/model_providers/runway.js +141 -0
  110. package/dist/model_providers/runway.js.map +1 -0
  111. package/dist/model_providers/stability.d.ts +10 -0
  112. package/dist/model_providers/stability.d.ts.map +1 -0
  113. package/dist/model_providers/stability.js +126 -0
  114. package/dist/model_providers/stability.js.map +1 -0
  115. package/dist/tsconfig.tsbuildinfo +1 -1
  116. package/dist/types/types.d.ts +11 -3
  117. package/dist/types/types.d.ts.map +1 -1
  118. package/dist/utils/cost_tracker.d.ts +1 -0
  119. package/dist/utils/cost_tracker.d.ts.map +1 -1
  120. package/dist/utils/cost_tracker.js +3 -0
  121. package/dist/utils/cost_tracker.js.map +1 -1
  122. package/dist/utils/ensemble_result.d.ts +1 -1
  123. package/dist/utils/ensemble_result.d.ts.map +1 -1
  124. package/dist/utils/fetch_with_timeout.d.ts +2 -0
  125. package/dist/utils/fetch_with_timeout.d.ts.map +1 -0
  126. package/dist/utils/fetch_with_timeout.js +25 -0
  127. package/dist/utils/fetch_with_timeout.js.map +1 -0
  128. package/dist/utils/image_utils.d.ts +5 -0
  129. package/dist/utils/image_utils.d.ts.map +1 -1
  130. package/dist/utils/image_utils.js +22 -0
  131. package/dist/utils/image_utils.js.map +1 -1
  132. package/package.json +121 -114
@@ -0,0 +1,93 @@
1
+ import { BaseModelProvider } from './base_provider.js';
2
+ import { costTracker } from '../utils/cost_tracker.js';
3
+ import { log_llm_error, log_llm_request, log_llm_response } from '../utils/llm_logger.js';
4
+ function mapImageSize(size) {
5
+ if (!size)
6
+ return undefined;
7
+ const s = String(size);
8
+ if (s === 'square')
9
+ return 'square_hd';
10
+ if (s === '1024x1024')
11
+ return 'square_hd';
12
+ if (s === 'landscape' || s === '1792x1024' || s === '1536x1024')
13
+ return 'landscape_16_9';
14
+ if (s === 'portrait' || s === '1024x1792' || s === '1024x1536')
15
+ return 'portrait_16_9';
16
+ return undefined;
17
+ }
18
+ export class FALProvider extends BaseModelProvider {
19
+ constructor() {
20
+ super('fal');
21
+ }
22
+ async *createResponseStream() {
23
+ throw new Error('FAL provider does not support text streaming');
24
+ }
25
+ endpointFor(model) {
26
+ const m = model.toLowerCase();
27
+ if (m.startsWith('recraft'))
28
+ return { path: 'fal-ai/recraft/v3/text-to-image', bodyMode: 'top' };
29
+ if (m.includes('runway') || m.includes('gen4'))
30
+ return { path: 'runwayml/gen4-image', bodyMode: 'input' };
31
+ if (m.includes('schnell'))
32
+ return { path: 'fal-ai/flux/schnell', bodyMode: 'top' };
33
+ if (m.includes('dev'))
34
+ return { path: 'fal-ai/flux/dev', bodyMode: 'top' };
35
+ if (m.includes('kontext') || m.includes('pro'))
36
+ return { path: 'fal-ai/flux-pro/kontext', bodyMode: 'top' };
37
+ return { path: 'fal-ai/flux/schnell', bodyMode: 'top' };
38
+ }
39
+ async createImage(prompt, model, agent, opts = {}) {
40
+ const falKey = process.env.FAL_KEY;
41
+ const requestId = log_llm_request(agent.agent_id || 'default', 'fal', model, { prompt, opts }, new Date());
42
+ try {
43
+ if (!falKey)
44
+ throw new Error('FAL_KEY is not set');
45
+ 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
+ }
60
+ const res = await fetch(`https://fal.run/${path}`, {
61
+ method: 'POST',
62
+ headers: {
63
+ 'Content-Type': 'application/json',
64
+ Authorization: `Key ${falKey}`,
65
+ },
66
+ body: JSON.stringify(bodyInput),
67
+ });
68
+ if (!res.ok)
69
+ throw new Error(`FAL request failed: ${res.status} ${await res.text()}`);
70
+ 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);
78
+ if (!images.length)
79
+ 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' } });
81
+ return images;
82
+ }
83
+ catch (err) {
84
+ log_llm_error(requestId, err);
85
+ throw err;
86
+ }
87
+ finally {
88
+ log_llm_response(requestId, { ok: true });
89
+ }
90
+ }
91
+ }
92
+ export const falProvider = new FALProvider();
93
+ //# sourceMappingURL=fal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fal.js","sourceRoot":"","sources":["../../model_providers/fal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAK1F,SAAS,YAAY,CAAC,IAAkC;IACpD,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,CAAC,KAAK,QAAQ;QAAE,OAAO,WAAW,CAAC;IACvC,IAAI,CAAC,KAAK,WAAW;QAAE,OAAO,WAAW,CAAC;IAC1C,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,WAAW;QAAE,OAAO,gBAAgB,CAAC;IACzF,IAAI,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,WAAW;QAAE,OAAO,eAAe,CAAC;IACvF,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,MAAM,OAAO,WAAY,SAAQ,iBAAiB;IAC9C;QACI,KAAK,CAAC,KAAY,CAAC,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,CAAC,oBAAoB;QACvB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACpE,CAAC;IAEO,WAAW,CAAC,KAAa;QAC7B,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAC9B,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,iCAAiC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACjG,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAE1G,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QACnF,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC3E,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,yBAAyB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC5G,OAAO,EAAE,IAAI,EAAE,qBAAqB,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,KAAa,EAAE,KAAsB,EAAE,OAA4B,EAAE;QACnG,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;QACnC,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,QAAQ,IAAI,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAC3G,IAAI,CAAC;YACD,IAAI,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACnD,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACnD,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,MAAM,SAAS,GAAQ,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC;YAC/E,IAAI,IAAI,EAAE,CAAC;gBACP,IAAI,QAAQ,KAAK,KAAK;oBAAE,SAAS,CAAC,UAAU,GAAG,IAAI,CAAC;;oBAC/C,SAAS,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;YAC3C,CAAC;YACD,IAAI,IAAI,EAAE,eAAe,KAAK,UAAU,EAAE,CAAC;gBACvC,IAAI,QAAQ,KAAK,KAAK;oBAAE,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC;;oBAC9C,SAAS,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;YAC1C,CAAC;YAED,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,mBAAmB,IAAI,EAAE,EAAE;gBAC/C,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACL,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,OAAO,MAAM,EAAE;iBACjC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;aAClC,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,CAAC,MAAM,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACtF,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAa,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,IAAI,EAAE,MAAM,IAAI,IAAI,EAAE,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC;YACvD,KAAK,MAAM,EAAE,IAAI,GAAG;gBAAE,IAAI,EAAE,EAAE,GAAG;oBAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,EAAE,GAAG;gBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACvD,IAAI,CAAC,MAAM,CAAC,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACrE,WAAW,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YACvH,OAAO,MAAM,CAAC;QAClB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,aAAa,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;YAC9B,MAAM,GAAG,CAAC;QACd,CAAC;gBAAS,CAAC;YACP,gBAAgB,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC;IACL,CAAC;CACJ;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { BaseModelProvider } from './base_provider.js';
2
+ import type { AgentDefinition, ImageGenerationOpts, ProviderStreamEvent } from '../types/types.js';
3
+ export declare class FireworksProvider extends BaseModelProvider {
4
+ constructor();
5
+ createResponseStream(): AsyncGenerator<ProviderStreamEvent>;
6
+ private isKontext;
7
+ private fireworksModelId;
8
+ createImage(prompt: string, model: string, agent: AgentDefinition, opts?: ImageGenerationOpts): Promise<string[]>;
9
+ private fallbackToFAL;
10
+ }
11
+ export declare const fireworksProvider: FireworksProvider;
12
+ //# sourceMappingURL=fireworks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fireworks.d.ts","sourceRoot":"","sources":["../../model_providers/fireworks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAoBnG,qBAAa,iBAAkB,SAAQ,iBAAiB;;IAK7C,oBAAoB,IAAI,cAAc,CAAC,mBAAmB,CAAC;IAIlE,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,gBAAgB;IAUlB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,GAAE,mBAAwB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAgH7G,aAAa;CA8B9B;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
@@ -0,0 +1,189 @@
1
+ import { BaseModelProvider } from './base_provider.js';
2
+ import { costTracker } from '../utils/cost_tracker.js';
3
+ import { fetchWithTimeout } from '../utils/fetch_with_timeout.js';
4
+ import { log_llm_error, log_llm_request, log_llm_response } from '../utils/llm_logger.js';
5
+ const FW_BASE = 'https://api.fireworks.ai';
6
+ function mapAspect(size) {
7
+ if (!size)
8
+ return undefined;
9
+ const s = String(size);
10
+ if (s === 'square' || s === '1024x1024' || s === '512x512' || s === '256x256')
11
+ return '1:1';
12
+ if (s === 'landscape' || s === '1792x1024' || s === '1536x1024')
13
+ return '16:9';
14
+ if (s === 'portrait' || s === '1024x1792' || s === '1024x1536')
15
+ return '9:16';
16
+ return undefined;
17
+ }
18
+ export class FireworksProvider extends BaseModelProvider {
19
+ constructor() {
20
+ super('fireworks');
21
+ }
22
+ async *createResponseStream() {
23
+ throw new Error('Fireworks provider does not support text streaming');
24
+ }
25
+ isKontext(model) {
26
+ return model.includes('kontext');
27
+ }
28
+ fireworksModelId(model) {
29
+ const m = model.toLowerCase();
30
+ if (m.includes('kontext') && m.includes('max'))
31
+ return 'flux-kontext-max';
32
+ if (m.includes('kontext'))
33
+ return 'flux-kontext-pro';
34
+ if (m.includes('pro'))
35
+ return 'flux-pro-1.1';
36
+ if (m.includes('schnell'))
37
+ return 'flux-schnell';
38
+ return model;
39
+ }
40
+ async createImage(prompt, model, agent, opts = {}) {
41
+ const apiKey = process.env.FIREWORKS_API_KEY;
42
+ const falKey = process.env.FAL_KEY;
43
+ const requestId = log_llm_request(agent.agent_id || 'default', 'fireworks', model, { prompt, opts }, new Date());
44
+ try {
45
+ if (!apiKey)
46
+ throw new Error('FIREWORKS_API_KEY is not set');
47
+ const aspect_ratio = mapAspect(opts.size);
48
+ const modelId = this.fireworksModelId(model);
49
+ if (this.isKontext(modelId)) {
50
+ const createUrl = `${FW_BASE}/inference/v1/workflows/accounts/fireworks/models/${modelId}`;
51
+ let input_image;
52
+ if (opts?.source_images) {
53
+ const s = Array.isArray(opts.source_images) ? opts.source_images[0] : opts.source_images;
54
+ const v = typeof s === 'string' ? s : s?.data || s;
55
+ if (typeof v === 'string')
56
+ input_image = v;
57
+ }
58
+ const res = await fetchWithTimeout(createUrl, {
59
+ method: 'POST',
60
+ headers: {
61
+ 'Content-Type': 'application/json',
62
+ Authorization: `Bearer ${apiKey}`,
63
+ },
64
+ body: JSON.stringify({ prompt, aspect_ratio: aspect_ratio, output_format: 'png', ...(input_image ? { input_image } : {}) }),
65
+ }, 60000);
66
+ if (!res.ok) {
67
+ if ((res.status === 401 || res.status === 403) && falKey) {
68
+ return this.fallbackToFAL(prompt, modelId, opts);
69
+ }
70
+ throw new Error(`Fireworks Kontext create failed: ${res.status} ${await res.text()}`);
71
+ }
72
+ const data = await res.json();
73
+ const id = data.request_id || data.id;
74
+ if (!id)
75
+ throw new Error('Fireworks Kontext: missing request id');
76
+ const pollUrl = `${FW_BASE}/inference/v1/workflows/accounts/fireworks/models/${modelId}/get_result`;
77
+ const started = Date.now();
78
+ const timeoutMs = 240000;
79
+ while (true) {
80
+ const r = await fetchWithTimeout(pollUrl, {
81
+ method: 'POST',
82
+ headers: {
83
+ 'Content-Type': 'application/json',
84
+ Authorization: `Bearer ${apiKey}`,
85
+ },
86
+ body: JSON.stringify({ id }),
87
+ }, 60000);
88
+ if (!r.ok)
89
+ throw new Error(`Fireworks Kontext poll failed: ${r.status} ${await r.text()}`);
90
+ const out = await r.json();
91
+ const status = String(out.status || '').toLowerCase();
92
+ if (status.includes('ready') || status === 'succeeded' || status === 'completed') {
93
+ const urls = [];
94
+ if (Array.isArray(out.result?.images)) {
95
+ for (const im of out.result.images)
96
+ if (im?.url)
97
+ urls.push(im.url);
98
+ }
99
+ if (out.result?.image?.url)
100
+ urls.push(out.result.image.url);
101
+ if (out.result?.url)
102
+ urls.push(out.result.url);
103
+ if (out.result?.sample)
104
+ urls.push(out.result.sample);
105
+ if (!urls.length && out.result?.image_base64) {
106
+ urls.push(`data:image/png;base64,${out.result.image_base64}`);
107
+ }
108
+ if (!urls.length && typeof out.result === 'string' && /^https?:\/\//.test(out.result)) {
109
+ urls.push(out.result);
110
+ }
111
+ if (!urls.length)
112
+ throw new Error('Fireworks Kontext: no image result found');
113
+ costTracker.addUsage({ model, image_count: urls.length, request_id: opts?.request_id, metadata: { source: 'fireworks', model: modelId } });
114
+ return urls;
115
+ }
116
+ if (status.includes('error') || status.includes('failed')) {
117
+ throw new Error(`Fireworks Kontext failed: ${status}`);
118
+ }
119
+ if (Date.now() - started > timeoutMs)
120
+ throw new Error('Fireworks Kontext timed out');
121
+ await new Promise(r2 => setTimeout(r2, 1500));
122
+ }
123
+ }
124
+ try {
125
+ return await this.createImage(prompt, 'flux-kontext-pro', agent, opts);
126
+ }
127
+ catch (e) {
128
+ if (falKey)
129
+ return this.fallbackToFAL(prompt, model, opts);
130
+ throw e;
131
+ }
132
+ }
133
+ catch (err) {
134
+ log_llm_error(requestId, err);
135
+ if (process.env.FAL_KEY) {
136
+ try {
137
+ const urls = await this.fallbackToFAL(prompt, model, opts);
138
+ log_llm_response(requestId, { ok: true, fallback: 'fal' });
139
+ return urls;
140
+ }
141
+ catch (_) {
142
+ }
143
+ }
144
+ throw err;
145
+ }
146
+ finally {
147
+ log_llm_response(requestId, { ok: true });
148
+ }
149
+ }
150
+ async fallbackToFAL(prompt, model, opts = {}) {
151
+ const lower = model.toLowerCase();
152
+ let endpoint = '';
153
+ if (lower.includes('schnell'))
154
+ endpoint = 'fal-ai/flux/schnell';
155
+ else if (lower.includes('dev'))
156
+ endpoint = 'fal-ai/flux/dev';
157
+ else if (lower.includes('pro') || lower.includes('kontext'))
158
+ endpoint = 'fal-ai/flux-pro/kontext';
159
+ else
160
+ endpoint = 'fal-ai/flux/schnell';
161
+ const res = await fetch(`https://fal.run/${endpoint}`, {
162
+ method: 'POST',
163
+ headers: {
164
+ 'Content-Type': 'application/json',
165
+ Authorization: `Key ${process.env.FAL_KEY}`,
166
+ },
167
+ body: JSON.stringify({
168
+ prompt,
169
+ input: { prompt },
170
+ }),
171
+ });
172
+ if (!res.ok)
173
+ throw new Error(`FAL fallback failed: ${res.status} ${await res.text()}`);
174
+ const data = await res.json();
175
+ const images = [];
176
+ const arr = data?.images || data?.output?.images || [];
177
+ for (const im of arr)
178
+ if (im?.url)
179
+ images.push(im.url);
180
+ if (!images.length && data?.url)
181
+ images.push(data.url);
182
+ if (!images.length)
183
+ throw new Error('FAL fallback: no image url');
184
+ costTracker.addUsage({ model, image_count: images.length, request_id: opts?.request_id, metadata: { source: 'fal-fallback' } });
185
+ return images;
186
+ }
187
+ }
188
+ export const fireworksProvider = new FireworksProvider();
189
+ //# sourceMappingURL=fireworks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fireworks.js","sourceRoot":"","sources":["../../model_providers/fireworks.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,EACnB,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;AAyNvD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAO1D;AAKD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzD;AAsKD,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,GAcjB;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;IAqbhC,WAAW,CACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,EACtB,IAAI,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,MAAM,EAAE,CAAC;IA+FpB,OAAO,CAAC,YAAY;IAmBd,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,EACnB,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;AAyNvD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAO1D;AAKD,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEzD;AAsKD,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,GAcjB;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;IAqbhC,WAAW,CACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,eAAe,EACtB,IAAI,CAAC,EAAE,mBAAmB,GAC3B,OAAO,CAAC,MAAM,EAAE,CAAC;IAkPpB,OAAO,CAAC,YAAY;IAwBd,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"}
@@ -779,16 +779,143 @@ export class GeminiProvider extends BaseModelProvider {
779
779
  const requestId = `req_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;
780
780
  let finalRequestId = requestId;
781
781
  try {
782
- model = model || 'imagen-3.0-generate-002';
782
+ model = model || 'gemini-2.5-flash-image-preview';
783
783
  const numberOfImages = opts?.n || 1;
784
784
  let aspectRatio = '1:1';
785
- if (opts?.size === 'landscape') {
785
+ if (opts?.size === 'landscape')
786
786
  aspectRatio = '16:9';
787
- }
788
- else if (opts?.size === 'portrait') {
787
+ else if (opts?.size === 'portrait')
789
788
  aspectRatio = '9:16';
790
- }
791
789
  console.log(`[Gemini] Generating ${numberOfImages} image(s) with model ${model}, prompt: "${prompt.substring(0, 100)}${prompt.length > 100 ? '...' : ''}"`);
790
+ if (model.includes('gemini-2.5-flash-image-preview')) {
791
+ const constraints = [];
792
+ const sizeMap = {
793
+ square: { ar: '1:1', px: '1024x1024' },
794
+ landscape: { ar: '16:9' },
795
+ portrait: { ar: '9:16' },
796
+ '256x256': { ar: '1:1', px: '256x256' },
797
+ '512x512': { ar: '1:1', px: '512x512' },
798
+ '1024x1024': { ar: '1:1', px: '1024x1024' },
799
+ '1536x1024': { ar: '3:2', px: '1536x1024' },
800
+ '1024x1536': { ar: '2:3', px: '1024x1536' },
801
+ '1792x1024': { ar: '16:9', px: '1792x1024' },
802
+ '1024x1792': { ar: '9:16', px: '1024x1792' },
803
+ };
804
+ const sm = opts?.size ? sizeMap[String(opts.size)] : undefined;
805
+ if (sm?.ar)
806
+ constraints.push(`Aspect ratio: ${sm.ar}.`);
807
+ if (sm?.px)
808
+ constraints.push(`Target size: ${sm.px} pixels (approximate).`);
809
+ if (opts?.style)
810
+ constraints.push(`Style: ${opts.style}.`);
811
+ if (opts?.background)
812
+ constraints.push(`Background: ${opts.background} (use transparency if supported).`);
813
+ const constraintText = constraints.length
814
+ ? `\n\nImage constraints (please prioritize):\n- ${constraints.join('\n- ')}`
815
+ : '';
816
+ const makeOne = async () => {
817
+ const requestParams = {
818
+ model,
819
+ contents: [
820
+ {
821
+ role: 'user',
822
+ parts: [
823
+ ...(Array.isArray(opts?.source_images)
824
+ ? opts.source_images
825
+ .map((img) => typeof img === 'string' ? { _src: img } : img)
826
+ .map((it) => {
827
+ const src = it?.data || it?._src || it;
828
+ if (typeof src !== 'string')
829
+ return null;
830
+ if (src.startsWith('data:')) {
831
+ const m = /^data:([^;]+);base64,(.+)$/i.exec(src);
832
+ if (!m)
833
+ return null;
834
+ return {
835
+ inlineData: {
836
+ mimeType: m[1] || 'image/png',
837
+ data: m[2],
838
+ },
839
+ };
840
+ }
841
+ return {
842
+ fileData: {
843
+ mimeType: 'image/*',
844
+ fileUri: src,
845
+ },
846
+ };
847
+ })
848
+ .filter(Boolean)
849
+ : typeof opts?.source_images === 'string'
850
+ ? [
851
+ (() => {
852
+ const s = String(opts?.source_images);
853
+ if (s.startsWith('data:')) {
854
+ const m = /^data:([^;]+);base64,(.+)$/i.exec(s);
855
+ return m
856
+ ? { inlineData: { mimeType: m[1] || 'image/png', data: m[2] } }
857
+ : null;
858
+ }
859
+ return { fileData: { mimeType: 'image/*', fileUri: s } };
860
+ })(),
861
+ ].filter(Boolean)
862
+ : []),
863
+ { text: `${prompt}${constraintText}` },
864
+ ],
865
+ },
866
+ ],
867
+ config: {
868
+ responseModalities: [Modality.IMAGE, Modality.TEXT],
869
+ },
870
+ };
871
+ const loggedRequestId = log_llm_request(agent.agent_id || 'default', 'gemini', model, requestParams, new Date(), requestId, agent.tags);
872
+ finalRequestId = loggedRequestId;
873
+ const response = await this.client.models.generateContentStream(requestParams);
874
+ const images = [];
875
+ for await (const chunk of response) {
876
+ if (!chunk.candidates)
877
+ continue;
878
+ for (const cand of chunk.candidates) {
879
+ const parts = cand.content?.parts || [];
880
+ for (const part of parts) {
881
+ if (part.inlineData?.data) {
882
+ const mime = part.inlineData.mimeType || 'image/png';
883
+ images.push(`data:${mime};base64,${part.inlineData.data}`);
884
+ }
885
+ }
886
+ }
887
+ }
888
+ if (images.length > 0) {
889
+ costTracker.addUsage({
890
+ model,
891
+ image_count: images.length,
892
+ request_id: opts?.request_id,
893
+ metadata: { cost_per_image: this.getImageCost(model) },
894
+ });
895
+ }
896
+ return images;
897
+ };
898
+ const allImages = [];
899
+ const calls = Math.max(1, numberOfImages);
900
+ for (let i = 0; i < calls; i++) {
901
+ const imgs = await makeOne();
902
+ for (const img of imgs) {
903
+ if (allImages.length < numberOfImages)
904
+ allImages.push(img);
905
+ }
906
+ if (allImages.length >= numberOfImages)
907
+ break;
908
+ }
909
+ if (allImages.length === 0) {
910
+ throw new Error('No images returned from Gemini 2.5 Flash Image model');
911
+ }
912
+ log_llm_response(finalRequestId, {
913
+ model,
914
+ image_count: allImages.length,
915
+ cost: allImages.length * this.getImageCost(model),
916
+ });
917
+ return allImages;
918
+ }
792
919
  const requestParams = {
793
920
  model,
794
921
  prompt,
@@ -813,6 +940,7 @@ export class GeminiProvider extends BaseModelProvider {
813
940
  costTracker.addUsage({
814
941
  model,
815
942
  image_count: images.length,
943
+ request_id: opts?.request_id,
816
944
  metadata: {
817
945
  aspect_ratio: aspectRatio,
818
946
  cost_per_image: perImageCost,
@@ -837,6 +965,9 @@ export class GeminiProvider extends BaseModelProvider {
837
965
  }
838
966
  }
839
967
  getImageCost(model) {
968
+ if (model.includes('gemini-2.5-flash-image-preview')) {
969
+ return 0.039;
970
+ }
840
971
  if (model.includes('imagen-3')) {
841
972
  return 0.04;
842
973
  }