@sogni-ai/sogni-client 4.2.0-alpha.21 → 4.2.0-alpha.22
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/CHANGELOG.md +7 -0
- package/CLAUDE.md +7 -0
- package/README.md +45 -25
- package/dist/Chat/ChatTools.js +30 -16
- package/dist/Chat/ChatTools.js.map +1 -1
- package/dist/Chat/hostedToolValidation.generated.d.ts +46 -0
- package/dist/Chat/hostedToolValidation.generated.js +306 -0
- package/dist/Chat/hostedToolValidation.generated.js.map +1 -0
- package/dist/Chat/index.d.ts +41 -1
- package/dist/Chat/index.js +166 -2
- package/dist/Chat/index.js.map +1 -1
- package/dist/Chat/modelRouting.d.ts +8 -26
- package/dist/Chat/modelRouting.js +11 -106
- package/dist/Chat/modelRouting.js.map +1 -1
- package/dist/Chat/sogniHostedTools.generated.json +1285 -283
- package/dist/Chat/tools.d.ts +52 -3
- package/dist/Chat/tools.js +80 -27
- package/dist/Chat/tools.js.map +1 -1
- package/dist/Chat/types.d.ts +119 -3
- package/dist/CreativeWorkflows/index.d.ts +1 -7
- package/dist/CreativeWorkflows/index.js +23 -21
- package/dist/CreativeWorkflows/index.js.map +1 -1
- package/dist/CreativeWorkflows/types.d.ts +27 -33
- package/dist/index.d.ts +19 -4
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/Cache.js +6 -1
- package/dist/lib/Cache.js.map +1 -1
- package/dist-esm/Account/CurrentAccount.js +59 -0
- package/dist-esm/Account/CurrentAccount.js.map +1 -0
- package/dist-esm/Account/index.js +543 -0
- package/dist-esm/Account/index.js.map +1 -0
- package/dist-esm/Account/types.js +2 -0
- package/dist-esm/Account/types.js.map +1 -0
- package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/ChannelCoordinator.js +327 -0
- package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/ChannelCoordinator.js.map +1 -0
- package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/index.js +222 -0
- package/dist-esm/ApiClient/WebSocketClient/BrowserWebSocketClient/index.js.map +1 -0
- package/dist-esm/ApiClient/WebSocketClient/ErrorCode.js +15 -0
- package/dist-esm/ApiClient/WebSocketClient/ErrorCode.js.map +1 -0
- package/dist-esm/ApiClient/WebSocketClient/eventSubscriptions.js +35 -0
- package/dist-esm/ApiClient/WebSocketClient/eventSubscriptions.js.map +1 -0
- package/dist-esm/ApiClient/WebSocketClient/events.js +2 -0
- package/dist-esm/ApiClient/WebSocketClient/events.js.map +1 -0
- package/dist-esm/ApiClient/WebSocketClient/index.js +221 -0
- package/dist-esm/ApiClient/WebSocketClient/index.js.map +1 -0
- package/dist-esm/ApiClient/WebSocketClient/messages.js +2 -0
- package/dist-esm/ApiClient/WebSocketClient/messages.js.map +1 -0
- package/dist-esm/ApiClient/WebSocketClient/types.js +2 -0
- package/dist-esm/ApiClient/WebSocketClient/types.js.map +1 -0
- package/dist-esm/ApiClient/events.js +2 -0
- package/dist-esm/ApiClient/events.js.map +1 -0
- package/dist-esm/ApiClient/index.js +120 -0
- package/dist-esm/ApiClient/index.js.map +1 -0
- package/dist-esm/ApiGroup.js +10 -0
- package/dist-esm/ApiGroup.js.map +1 -0
- package/dist-esm/Chat/ChatStream.js +181 -0
- package/dist-esm/Chat/ChatStream.js.map +1 -0
- package/dist-esm/Chat/ChatTools.js +562 -0
- package/dist-esm/Chat/ChatTools.js.map +1 -0
- package/dist-esm/Chat/hostedToolValidation.generated.js +301 -0
- package/dist-esm/Chat/hostedToolValidation.generated.js.map +1 -0
- package/dist-esm/Chat/index.js +598 -0
- package/dist-esm/Chat/index.js.map +1 -0
- package/dist-esm/Chat/modelRouting.js +326 -0
- package/dist-esm/Chat/modelRouting.js.map +1 -0
- package/dist-esm/Chat/sogniHostedTools.generated.json +1531 -0
- package/dist-esm/Chat/tools.js +149 -0
- package/dist-esm/Chat/tools.js.map +1 -0
- package/dist-esm/Chat/types.js +2 -0
- package/dist-esm/Chat/types.js.map +1 -0
- package/dist-esm/CreativeWorkflows/index.js +256 -0
- package/dist-esm/CreativeWorkflows/index.js.map +1 -0
- package/dist-esm/CreativeWorkflows/types.js +2 -0
- package/dist-esm/CreativeWorkflows/types.js.map +1 -0
- package/dist-esm/Projects/Job.js +391 -0
- package/dist-esm/Projects/Job.js.map +1 -0
- package/dist-esm/Projects/Project.js +295 -0
- package/dist-esm/Projects/Project.js.map +1 -0
- package/dist-esm/Projects/createJobRequestMessage.js +528 -0
- package/dist-esm/Projects/createJobRequestMessage.js.map +1 -0
- package/dist-esm/Projects/index.js +1309 -0
- package/dist-esm/Projects/index.js.map +1 -0
- package/dist-esm/Projects/types/ComfySamplerParams.js +2 -0
- package/dist-esm/Projects/types/ComfySamplerParams.js.map +1 -0
- package/dist-esm/Projects/types/ControlNetParams.js +2 -0
- package/dist-esm/Projects/types/ControlNetParams.js.map +1 -0
- package/dist-esm/Projects/types/EstimationResponse.js +2 -0
- package/dist-esm/Projects/types/EstimationResponse.js.map +1 -0
- package/dist-esm/Projects/types/ModelOptions.js +89 -0
- package/dist-esm/Projects/types/ModelOptions.js.map +1 -0
- package/dist-esm/Projects/types/ModelTiersRaw.js +13 -0
- package/dist-esm/Projects/types/ModelTiersRaw.js.map +1 -0
- package/dist-esm/Projects/types/RawProject.js +2 -0
- package/dist-esm/Projects/types/RawProject.js.map +1 -0
- package/dist-esm/Projects/types/events.js +2 -0
- package/dist-esm/Projects/types/events.js.map +1 -0
- package/dist-esm/Projects/types/index.js +10 -0
- package/dist-esm/Projects/types/index.js.map +1 -0
- package/dist-esm/Projects/utils/index.js +229 -0
- package/dist-esm/Projects/utils/index.js.map +1 -0
- package/dist-esm/Projects/utils/samplers.js +36 -0
- package/dist-esm/Projects/utils/samplers.js.map +1 -0
- package/dist-esm/Projects/utils/scheduler.js +27 -0
- package/dist-esm/Projects/utils/scheduler.js.map +1 -0
- package/dist-esm/Stats/index.js +20 -0
- package/dist-esm/Stats/index.js.map +1 -0
- package/dist-esm/Stats/types.js +2 -0
- package/dist-esm/Stats/types.js.map +1 -0
- package/dist-esm/events.js +2 -0
- package/dist-esm/events.js.map +1 -0
- package/dist-esm/index.js +144 -0
- package/dist-esm/index.js.map +1 -0
- package/dist-esm/lib/AuthManager/ApiKeyAuthManager.js +58 -0
- package/dist-esm/lib/AuthManager/ApiKeyAuthManager.js.map +1 -0
- package/dist-esm/lib/AuthManager/AuthManagerBase.js +9 -0
- package/dist-esm/lib/AuthManager/AuthManagerBase.js.map +1 -0
- package/dist-esm/lib/AuthManager/CookieAuthManager.js +48 -0
- package/dist-esm/lib/AuthManager/CookieAuthManager.js.map +1 -0
- package/dist-esm/lib/AuthManager/TokenAuthManager.js +186 -0
- package/dist-esm/lib/AuthManager/TokenAuthManager.js.map +1 -0
- package/dist-esm/lib/AuthManager/index.js +5 -0
- package/dist-esm/lib/AuthManager/index.js.map +1 -0
- package/dist-esm/lib/Cache.js +32 -0
- package/dist-esm/lib/Cache.js.map +1 -0
- package/dist-esm/lib/DataEntity.js +30 -0
- package/dist-esm/lib/DataEntity.js.map +1 -0
- package/dist-esm/lib/DefaultLogger.js +32 -0
- package/dist-esm/lib/DefaultLogger.js.map +1 -0
- package/dist-esm/lib/EIP712Helper.js +37 -0
- package/dist-esm/lib/EIP712Helper.js.map +1 -0
- package/dist-esm/lib/RestClient.js +90 -0
- package/dist-esm/lib/RestClient.js.map +1 -0
- package/dist-esm/lib/TypedEventEmitter.js +68 -0
- package/dist-esm/lib/TypedEventEmitter.js.map +1 -0
- package/dist-esm/lib/base64.js +18 -0
- package/dist-esm/lib/base64.js.map +1 -0
- package/dist-esm/lib/getUUID.js +7 -0
- package/dist-esm/lib/getUUID.js.map +1 -0
- package/dist-esm/lib/isNodejs.js +3 -0
- package/dist-esm/lib/isNodejs.js.map +1 -0
- package/dist-esm/lib/mediaValidation.js +277 -0
- package/dist-esm/lib/mediaValidation.js.map +1 -0
- package/dist-esm/lib/utils/index.js +30 -0
- package/dist-esm/lib/utils/index.js.map +1 -0
- package/dist-esm/lib/validation.js +138 -0
- package/dist-esm/lib/validation.js.map +1 -0
- package/dist-esm/package.json +3 -0
- package/dist-esm/types/ErrorData.js +2 -0
- package/dist-esm/types/ErrorData.js.map +1 -0
- package/dist-esm/types/json.js +2 -0
- package/dist-esm/types/json.js.map +1 -0
- package/dist-esm/types/token.js +2 -0
- package/dist-esm/types/token.js.map +1 -0
- package/dist-esm/version.js +3 -0
- package/dist-esm/version.js.map +1 -0
- package/llms-full.txt +11 -20
- package/llms.txt +9 -18
- package/package.json +21 -5
- package/src/Chat/ChatTools.ts +36 -16
- package/src/Chat/hostedToolValidation.generated.ts +453 -0
- package/src/Chat/index.ts +198 -3
- package/src/Chat/modelRouting.ts +26 -150
- package/src/Chat/sogniHostedTools.generated.json +1285 -283
- package/src/Chat/tools.ts +106 -41
- package/src/Chat/types.ts +131 -3
- package/src/CreativeWorkflows/index.ts +22 -41
- package/src/CreativeWorkflows/types.ts +69 -42
- package/src/index.ts +33 -12
- package/src/lib/Cache.ts +8 -1
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import DataEntity from '../lib/DataEntity';
|
|
11
|
+
import getUUID from '../lib/getUUID';
|
|
12
|
+
import { getEnhacementStrength } from './utils';
|
|
13
|
+
import has from 'lodash/has';
|
|
14
|
+
export const enhancementDefaults = {
|
|
15
|
+
network: 'fast',
|
|
16
|
+
modelId: 'flux1-schnell-fp8',
|
|
17
|
+
positivePrompt: '',
|
|
18
|
+
negativePrompt: '',
|
|
19
|
+
stylePrompt: '',
|
|
20
|
+
startingImageStrength: 0.5,
|
|
21
|
+
steps: 5,
|
|
22
|
+
guidance: 1,
|
|
23
|
+
numberOfMedia: 1,
|
|
24
|
+
numberOfPreviews: 0
|
|
25
|
+
};
|
|
26
|
+
const JOB_STATUS_MAP = {
|
|
27
|
+
created: 'pending',
|
|
28
|
+
queued: 'pending',
|
|
29
|
+
assigned: 'initiating',
|
|
30
|
+
initiatingModel: 'initiating',
|
|
31
|
+
jobStarted: 'processing',
|
|
32
|
+
jobProgress: 'processing',
|
|
33
|
+
jobCompleted: 'completed',
|
|
34
|
+
jobError: 'failed'
|
|
35
|
+
};
|
|
36
|
+
function clampProgress(value) {
|
|
37
|
+
return Math.max(0, Math.min(100, Math.round(value)));
|
|
38
|
+
}
|
|
39
|
+
function normalizeProgressPercent(value) {
|
|
40
|
+
if (typeof value !== 'number' || !Number.isFinite(value))
|
|
41
|
+
return undefined;
|
|
42
|
+
return clampProgress(value >= 0 && value <= 1 ? value * 100 : value);
|
|
43
|
+
}
|
|
44
|
+
function directResultUrlFromRawJob(rawJob) {
|
|
45
|
+
const legacy = rawJob;
|
|
46
|
+
return (rawJob.resultUrl ||
|
|
47
|
+
legacy.imageUrl ||
|
|
48
|
+
legacy.imageFile ||
|
|
49
|
+
legacy.videoUrl ||
|
|
50
|
+
legacy.videoFile ||
|
|
51
|
+
null);
|
|
52
|
+
}
|
|
53
|
+
function etaProgressPercent(startedAt, eta) {
|
|
54
|
+
if (!startedAt || !eta)
|
|
55
|
+
return undefined;
|
|
56
|
+
const totalMs = eta.getTime() - startedAt.getTime();
|
|
57
|
+
if (!Number.isFinite(totalMs) || totalMs <= 0)
|
|
58
|
+
return undefined;
|
|
59
|
+
const elapsedMs = Date.now() - startedAt.getTime();
|
|
60
|
+
if (!Number.isFinite(elapsedMs) || elapsedMs <= 0)
|
|
61
|
+
return 1;
|
|
62
|
+
return Math.max(1, Math.min(95, Math.round((elapsedMs / totalMs) * 100)));
|
|
63
|
+
}
|
|
64
|
+
class Job extends DataEntity {
|
|
65
|
+
static fromRaw(rawProject, rawJob, options) {
|
|
66
|
+
return new Job({
|
|
67
|
+
id: rawJob.imgID || getUUID(),
|
|
68
|
+
projectId: rawProject.id,
|
|
69
|
+
status: JOB_STATUS_MAP[rawJob.status],
|
|
70
|
+
step: rawJob.performedSteps,
|
|
71
|
+
stepCount: rawProject.stepCount,
|
|
72
|
+
workerName: rawJob.worker.name,
|
|
73
|
+
seed: rawJob.seedUsed,
|
|
74
|
+
isNSFW: rawJob.triggeredNSFWFilter,
|
|
75
|
+
resultUrl: directResultUrlFromRawJob(rawJob)
|
|
76
|
+
}, options);
|
|
77
|
+
}
|
|
78
|
+
constructor(data, options) {
|
|
79
|
+
super(data);
|
|
80
|
+
this._enhancementProject = null;
|
|
81
|
+
this._api = options.api;
|
|
82
|
+
this._logger = options.logger;
|
|
83
|
+
this._project = options.project;
|
|
84
|
+
this.on('updated', this.handleUpdated.bind(this));
|
|
85
|
+
this.handleEnhancementUpdate = this.handleEnhancementUpdate.bind(this);
|
|
86
|
+
}
|
|
87
|
+
get id() {
|
|
88
|
+
return this.data.id;
|
|
89
|
+
}
|
|
90
|
+
get projectId() {
|
|
91
|
+
return this.data.projectId;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Current status of the job.
|
|
95
|
+
*/
|
|
96
|
+
get status() {
|
|
97
|
+
return this.data.status;
|
|
98
|
+
}
|
|
99
|
+
get finished() {
|
|
100
|
+
return ['completed', 'failed', 'canceled'].includes(this.status);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Progress of the job in percentage (0-100).
|
|
104
|
+
*/
|
|
105
|
+
get progress() {
|
|
106
|
+
var _a;
|
|
107
|
+
if (this.status === 'completed')
|
|
108
|
+
return 100;
|
|
109
|
+
const externalProgress = normalizeProgressPercent(this.data.externalProgress);
|
|
110
|
+
if (externalProgress !== undefined)
|
|
111
|
+
return externalProgress;
|
|
112
|
+
if (this.data.stepCount > 0) {
|
|
113
|
+
return clampProgress((this.data.step / this.data.stepCount) * 100);
|
|
114
|
+
}
|
|
115
|
+
return (_a = etaProgressPercent(this.data.etaStartedAt, this.data.eta)) !== null && _a !== void 0 ? _a : 0;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Current step of the job.
|
|
119
|
+
*/
|
|
120
|
+
get step() {
|
|
121
|
+
return this.data.step;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Total number of steps that worker will perform.
|
|
125
|
+
*/
|
|
126
|
+
get stepCount() {
|
|
127
|
+
return this.data.stepCount;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Seed used to generate the image. This property is only available when the job is completed.
|
|
131
|
+
*/
|
|
132
|
+
get seed() {
|
|
133
|
+
return this.data.seed;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Last preview image URL generated by the worker.
|
|
137
|
+
*/
|
|
138
|
+
get previewUrl() {
|
|
139
|
+
return this.data.previewUrl;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* URL to the result image, could be null if the job was canceled or triggered NSFW filter while
|
|
143
|
+
* it was not disabled explicitly.
|
|
144
|
+
*/
|
|
145
|
+
get resultUrl() {
|
|
146
|
+
return this.data.resultUrl;
|
|
147
|
+
}
|
|
148
|
+
get imageUrl() {
|
|
149
|
+
return this.data.resultUrl || this.data.previewUrl;
|
|
150
|
+
}
|
|
151
|
+
get error() {
|
|
152
|
+
return this.data.error;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Whether this job has a result media file available for download.
|
|
156
|
+
* Returns true if completed and not NSFW filtered.
|
|
157
|
+
*/
|
|
158
|
+
get hasResultMedia() {
|
|
159
|
+
return this.status === 'completed' && !this.isNSFW;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Media type produced by this job's model
|
|
163
|
+
*/
|
|
164
|
+
get type() {
|
|
165
|
+
if (this._api.isVideoModelId(this._project.params.modelId))
|
|
166
|
+
return 'video';
|
|
167
|
+
if (this._api.isAudioModelId(this._project.params.modelId))
|
|
168
|
+
return 'audio';
|
|
169
|
+
return 'image';
|
|
170
|
+
}
|
|
171
|
+
get enhancedImage() {
|
|
172
|
+
if (!this._enhancementProject) {
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
const project = this._enhancementProject;
|
|
176
|
+
const job = project.jobs[0];
|
|
177
|
+
return {
|
|
178
|
+
status: project.status,
|
|
179
|
+
progress: project.progress,
|
|
180
|
+
result: (job === null || job === void 0 ? void 0 : job.resultUrl) || null,
|
|
181
|
+
error: project.error,
|
|
182
|
+
getResultUrl: () => job === null || job === void 0 ? void 0 : job.getResultUrl()
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Get the MIME content type for audio downloads based on the project's output format.
|
|
187
|
+
*/
|
|
188
|
+
get _audioContentType() {
|
|
189
|
+
const format = this._project.params.outputFormat;
|
|
190
|
+
switch (format) {
|
|
191
|
+
case 'flac':
|
|
192
|
+
return 'audio/flac';
|
|
193
|
+
case 'wav':
|
|
194
|
+
return 'audio/wav';
|
|
195
|
+
default:
|
|
196
|
+
return 'audio/mpeg';
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Get the MIME content type for image downloads based on the project's output format.
|
|
201
|
+
*/
|
|
202
|
+
get _imageContentType() {
|
|
203
|
+
const format = this._project.params.outputFormat;
|
|
204
|
+
switch (format) {
|
|
205
|
+
case 'jpg':
|
|
206
|
+
case 'jpeg':
|
|
207
|
+
return 'image/jpeg';
|
|
208
|
+
case 'webp':
|
|
209
|
+
return 'image/webp';
|
|
210
|
+
case 'png':
|
|
211
|
+
return 'image/png';
|
|
212
|
+
default:
|
|
213
|
+
return undefined;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Get the result URL of the job. This method will make a request to the API to get signed URL.
|
|
218
|
+
* IMPORTANT: URL expires after 30 minutes, so make sure to download the result as soon as possible.
|
|
219
|
+
* For video jobs, this returns a video URL. For image jobs, this returns an image URL.
|
|
220
|
+
*/
|
|
221
|
+
getResultUrl() {
|
|
222
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
223
|
+
if (this.data.resultUrl) {
|
|
224
|
+
return this.data.resultUrl;
|
|
225
|
+
}
|
|
226
|
+
if (this.data.status !== 'completed') {
|
|
227
|
+
throw new Error('Job is not completed yet');
|
|
228
|
+
}
|
|
229
|
+
let url;
|
|
230
|
+
if (this.type === 'video' || this.type === 'audio') {
|
|
231
|
+
url = yield this._api.mediaDownloadUrl(Object.assign({ jobId: this.projectId, id: this.id, type: 'complete' }, (this.type === 'audio' ? { contentType: this._audioContentType } : {})));
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
url = yield this._api.downloadUrl(Object.assign({ jobId: this.projectId, imageId: this.id, type: 'complete' }, (this._imageContentType ? { contentType: this._imageContentType } : {})));
|
|
235
|
+
}
|
|
236
|
+
this._update({ resultUrl: url });
|
|
237
|
+
return url;
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Whether the image is NSFW or not. Only makes sense if job is completed.
|
|
242
|
+
* If NSFW filter is disabled, this property will always be false.
|
|
243
|
+
* If NSFW filter is enabled and the image is NSFW, image will not be available for download.
|
|
244
|
+
*/
|
|
245
|
+
get isNSFW() {
|
|
246
|
+
return !!this.data.isNSFW;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Name of the worker that is processing this job.
|
|
250
|
+
*/
|
|
251
|
+
get workerName() {
|
|
252
|
+
return this.data.workerName;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Estimated time remaining in seconds for long-running jobs (e.g., video generation).
|
|
256
|
+
* Only available for ComfyUI-based workers during inference.
|
|
257
|
+
* Returns undefined if no ETA has been received.
|
|
258
|
+
* @deprecated Use `timeLeft` instead.
|
|
259
|
+
*/
|
|
260
|
+
get etaSeconds() {
|
|
261
|
+
return this.data.etaSeconds;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Estimate completion time of the job.
|
|
265
|
+
* Only available for ComfyUI-based workers during inference.
|
|
266
|
+
* Is useful when data is persisted
|
|
267
|
+
* Returns undefined if no ETA has been received.
|
|
268
|
+
*/
|
|
269
|
+
get eta() {
|
|
270
|
+
return this.data.eta;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Syncs the job data with the data received from the REST API.
|
|
274
|
+
* @internal
|
|
275
|
+
* @param data
|
|
276
|
+
*/
|
|
277
|
+
_syncWithRestData(data) {
|
|
278
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
279
|
+
var _a;
|
|
280
|
+
const directResultUrl = directResultUrlFromRawJob(data);
|
|
281
|
+
const delta = {
|
|
282
|
+
step: data.performedSteps,
|
|
283
|
+
workerName: (_a = data.worker) === null || _a === void 0 ? void 0 : _a.name,
|
|
284
|
+
seed: data.seedUsed,
|
|
285
|
+
isNSFW: data.triggeredNSFWFilter
|
|
286
|
+
};
|
|
287
|
+
if (JOB_STATUS_MAP[data.status]) {
|
|
288
|
+
delta.status = JOB_STATUS_MAP[data.status];
|
|
289
|
+
}
|
|
290
|
+
if (!this.data.resultUrl && directResultUrl) {
|
|
291
|
+
delta.resultUrl = directResultUrl;
|
|
292
|
+
}
|
|
293
|
+
if (!this.data.resultUrl &&
|
|
294
|
+
!delta.resultUrl &&
|
|
295
|
+
delta.status === 'completed' &&
|
|
296
|
+
!data.triggeredNSFWFilter) {
|
|
297
|
+
try {
|
|
298
|
+
if (this.type === 'video' || this.type === 'audio') {
|
|
299
|
+
delta.resultUrl = yield this._api.mediaDownloadUrl(Object.assign({ jobId: this.projectId, id: this.id, type: 'complete' }, (this.type === 'audio' ? { contentType: this._audioContentType } : {})));
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
delta.resultUrl = yield this._api.downloadUrl(Object.assign({ jobId: this.projectId, imageId: this.id, type: 'complete' }, (this._imageContentType ? { contentType: this._imageContentType } : {})));
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
catch (error) {
|
|
306
|
+
this._logger.error(error);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
this._update(delta);
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Updates the job data with the provided delta.
|
|
314
|
+
* @internal
|
|
315
|
+
* @param delta
|
|
316
|
+
*/
|
|
317
|
+
_update(delta) {
|
|
318
|
+
if (has(delta, 'eta')) {
|
|
319
|
+
// Keeping etaSeconds for backwards compatibility
|
|
320
|
+
if (delta.eta) {
|
|
321
|
+
delta.etaSeconds = Math.round((delta.eta.getTime() - Date.now()) / 1000);
|
|
322
|
+
if (!this.data.etaStartedAt && !delta.etaStartedAt) {
|
|
323
|
+
delta.etaStartedAt = new Date();
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
super._update(delta);
|
|
328
|
+
}
|
|
329
|
+
handleUpdated(keys) {
|
|
330
|
+
if (keys.includes('step') ||
|
|
331
|
+
keys.includes('stepCount') ||
|
|
332
|
+
keys.includes('externalProgress') ||
|
|
333
|
+
keys.includes('eta')) {
|
|
334
|
+
this.emit('progress', this.progress);
|
|
335
|
+
}
|
|
336
|
+
if (keys.includes('status') && this.status === 'completed') {
|
|
337
|
+
this.emit('completed', this.resultUrl);
|
|
338
|
+
}
|
|
339
|
+
if (keys.includes('status') && this.status === 'failed') {
|
|
340
|
+
this.emit('failed', this.data.error);
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
handleEnhancementUpdate() {
|
|
344
|
+
this.emit('updated', ['enhancedImage']);
|
|
345
|
+
}
|
|
346
|
+
getResultData() {
|
|
347
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
348
|
+
if (!this.hasResultMedia) {
|
|
349
|
+
throw new Error('No result media available');
|
|
350
|
+
}
|
|
351
|
+
const url = yield this.getResultUrl();
|
|
352
|
+
const response = yield fetch(url);
|
|
353
|
+
if (!response.ok) {
|
|
354
|
+
throw new Error(`Failed to fetch image: ${response.statusText}`);
|
|
355
|
+
}
|
|
356
|
+
return response.blob();
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* Enhance the image using the Flux model. This method will create a new project with the
|
|
361
|
+
* enhancement parameters and use the result image of the current job as the starting image.
|
|
362
|
+
* @param strength - how much freedom the model has to change the image.
|
|
363
|
+
* @param overrides - optional parameters to override original prompt, style or token type.
|
|
364
|
+
*/
|
|
365
|
+
enhance(strength_1) {
|
|
366
|
+
return __awaiter(this, arguments, void 0, function* (strength, overrides = {}) {
|
|
367
|
+
const parentProjectParams = this._project.params;
|
|
368
|
+
if (parentProjectParams.type !== 'image') {
|
|
369
|
+
throw new Error('Enhancement is only available for images');
|
|
370
|
+
}
|
|
371
|
+
if (this.status !== 'completed') {
|
|
372
|
+
throw new Error('Job is not completed yet');
|
|
373
|
+
}
|
|
374
|
+
if (this.isNSFW) {
|
|
375
|
+
throw new Error('Job did not pass NSFW filter');
|
|
376
|
+
}
|
|
377
|
+
if (this._enhancementProject) {
|
|
378
|
+
this._enhancementProject.off('updated', this.handleEnhancementUpdate);
|
|
379
|
+
this._enhancementProject = null;
|
|
380
|
+
}
|
|
381
|
+
const imageData = yield this.getResultData();
|
|
382
|
+
const project = yield this._api.create(Object.assign(Object.assign({ type: 'image' }, enhancementDefaults), { positivePrompt: overrides.positivePrompt || this._project.params.positivePrompt, stylePrompt: overrides.stylePrompt || this._project.params.stylePrompt, tokenType: overrides.tokenType || this._project.params.tokenType, seed: this.seed || this._project.params.seed, startingImage: imageData, startingImageStrength: 1 - getEnhacementStrength(strength), sizePreset: parentProjectParams.sizePreset }));
|
|
383
|
+
this._enhancementProject = project;
|
|
384
|
+
this._enhancementProject.on('updated', this.handleEnhancementUpdate);
|
|
385
|
+
const images = yield project.waitForCompletion();
|
|
386
|
+
return images[0];
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
export default Job;
|
|
391
|
+
//# sourceMappingURL=Job.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Job.js","sourceRoot":"","sources":["../../src/Projects/Job.ts"],"names":[],"mappings":"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"}
|