@hypercli.com/sdk 2026.4.13-3 → 2026.4.13-4

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 (97) hide show
  1. package/dist/agent.d.ts +350 -0
  2. package/dist/agent.d.ts.map +1 -0
  3. package/dist/agent.js +620 -0
  4. package/dist/agent.js.map +1 -0
  5. package/dist/agents.d.ts +433 -0
  6. package/dist/agents.d.ts.map +1 -0
  7. package/dist/agents.js +1140 -0
  8. package/dist/agents.js.map +1 -0
  9. package/dist/billing.d.ts +72 -0
  10. package/dist/billing.d.ts.map +1 -0
  11. package/dist/billing.js +93 -0
  12. package/dist/billing.js.map +1 -0
  13. package/dist/browser.d.ts +25 -0
  14. package/dist/browser.d.ts.map +1 -0
  15. package/dist/browser.js +33 -0
  16. package/dist/browser.js.map +1 -0
  17. package/dist/client.d.ts +67 -0
  18. package/dist/client.d.ts.map +1 -0
  19. package/dist/client.js +100 -0
  20. package/dist/client.js.map +1 -0
  21. package/dist/config.d.ts +46 -0
  22. package/dist/config.d.ts.map +1 -0
  23. package/dist/config.js +235 -0
  24. package/dist/config.js.map +1 -0
  25. package/dist/errors.d.ts +9 -0
  26. package/dist/errors.d.ts.map +1 -0
  27. package/dist/errors.js +15 -0
  28. package/dist/errors.js.map +1 -0
  29. package/dist/files.d.ts +60 -0
  30. package/dist/files.d.ts.map +1 -0
  31. package/dist/files.js +128 -0
  32. package/dist/files.js.map +1 -0
  33. package/dist/gateway.d.ts +2 -0
  34. package/dist/gateway.d.ts.map +1 -0
  35. package/dist/gateway.js +2 -0
  36. package/dist/gateway.js.map +1 -0
  37. package/dist/http.d.ts +42 -0
  38. package/dist/http.d.ts.map +1 -0
  39. package/dist/http.js +238 -0
  40. package/dist/http.js.map +1 -0
  41. package/dist/index.d.ts +26 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +42 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/instances.d.ts +94 -0
  46. package/dist/instances.d.ts.map +1 -0
  47. package/dist/instances.js +197 -0
  48. package/dist/instances.js.map +1 -0
  49. package/dist/job/base.d.ts +80 -0
  50. package/dist/job/base.d.ts.map +1 -0
  51. package/dist/job/base.js +200 -0
  52. package/dist/job/base.js.map +1 -0
  53. package/dist/job/comfyui.d.ts +75 -0
  54. package/dist/job/comfyui.d.ts.map +1 -0
  55. package/dist/job/comfyui.js +454 -0
  56. package/dist/job/comfyui.js.map +1 -0
  57. package/dist/job/gradio.d.ts +48 -0
  58. package/dist/job/gradio.d.ts.map +1 -0
  59. package/dist/job/gradio.js +90 -0
  60. package/dist/job/gradio.js.map +1 -0
  61. package/dist/jobs.d.ts +153 -0
  62. package/dist/jobs.d.ts.map +1 -0
  63. package/dist/jobs.js +352 -0
  64. package/dist/jobs.js.map +1 -0
  65. package/dist/keys.d.ts +83 -0
  66. package/dist/keys.d.ts.map +1 -0
  67. package/dist/keys.js +69 -0
  68. package/dist/keys.js.map +1 -0
  69. package/dist/logs.d.ts +54 -0
  70. package/dist/logs.d.ts.map +1 -0
  71. package/dist/logs.js +256 -0
  72. package/dist/logs.js.map +1 -0
  73. package/dist/models.d.ts +15 -0
  74. package/dist/models.d.ts.map +1 -0
  75. package/dist/models.js +19 -0
  76. package/dist/models.js.map +1 -0
  77. package/dist/openclaw/gateway.d.ts +269 -0
  78. package/dist/openclaw/gateway.d.ts.map +1 -0
  79. package/dist/openclaw/gateway.js +2021 -0
  80. package/dist/openclaw/gateway.js.map +1 -0
  81. package/dist/renders.d.ts +187 -0
  82. package/dist/renders.d.ts.map +1 -0
  83. package/dist/renders.js +360 -0
  84. package/dist/renders.js.map +1 -0
  85. package/dist/user.d.ts +49 -0
  86. package/dist/user.d.ts.map +1 -0
  87. package/dist/user.js +57 -0
  88. package/dist/user.js.map +1 -0
  89. package/dist/voice.d.ts +31 -0
  90. package/dist/voice.d.ts.map +1 -0
  91. package/dist/voice.js +36 -0
  92. package/dist/voice.js.map +1 -0
  93. package/dist/x402.d.ts +79 -0
  94. package/dist/x402.d.ts.map +1 -0
  95. package/dist/x402.js +295 -0
  96. package/dist/x402.js.map +1 -0
  97. package/package.json +2 -1
@@ -0,0 +1,454 @@
1
+ import { BaseJob } from './base.js';
2
+ import { COMFYUI_IMAGE } from '../config.js';
3
+ import { readFileSync } from 'fs';
4
+ import { basename } from 'path';
5
+ // Default object_info for offline workflow conversion
6
+ export const DEFAULT_OBJECT_INFO = {
7
+ // Text encoders
8
+ CLIPTextEncode: {
9
+ input: { required: { clip: ['CLIP'], text: ['STRING', { multiline: true }] }, optional: {} },
10
+ input_order: { required: ['clip', 'text'], optional: [] },
11
+ },
12
+ CLIPLoader: {
13
+ input: { required: { clip_name: [['model.safetensors'], {}], type: [['stable_diffusion', 'wan'], {}], device: [['default', 'cpu'], {}] }, optional: {} },
14
+ input_order: { required: ['clip_name', 'type', 'device'], optional: [] },
15
+ },
16
+ // Samplers
17
+ KSampler: {
18
+ input: {
19
+ required: {
20
+ model: ['MODEL'], positive: ['CONDITIONING'], negative: ['CONDITIONING'], latent_image: ['LATENT'],
21
+ seed: ['INT', { default: 0 }], steps: ['INT', { default: 20 }], cfg: ['FLOAT', { default: 8.0 }],
22
+ sampler_name: [['euler', 'euler_ancestral', 'dpm_2'], {}], scheduler: [['normal', 'karras', 'simple'], {}],
23
+ denoise: ['FLOAT', { default: 1.0 }],
24
+ },
25
+ optional: {},
26
+ },
27
+ input_order: { required: ['model', 'positive', 'negative', 'latent_image', 'seed', 'steps', 'cfg', 'sampler_name', 'scheduler', 'denoise'], optional: [] },
28
+ },
29
+ // Latent generators
30
+ EmptyLatentImage: {
31
+ input: { required: { width: ['INT', {}], height: ['INT', {}], batch_size: ['INT', {}] }, optional: {} },
32
+ input_order: { required: ['width', 'height', 'batch_size'], optional: [] },
33
+ },
34
+ // Model loaders
35
+ UNETLoader: {
36
+ input: { required: { unet_name: [['model.safetensors'], {}], weight_dtype: [['default', 'fp8_e4m3fn'], {}] }, optional: {} },
37
+ input_order: { required: ['unet_name', 'weight_dtype'], optional: [] },
38
+ },
39
+ VAELoader: {
40
+ input: { required: { vae_name: [['vae.safetensors'], {}] }, optional: {} },
41
+ input_order: { required: ['vae_name'], optional: [] },
42
+ },
43
+ CheckpointLoaderSimple: {
44
+ input: { required: { ckpt_name: [['model.safetensors'], {}] }, optional: {} },
45
+ input_order: { required: ['ckpt_name'], optional: [] },
46
+ },
47
+ // Video/Image processing
48
+ VAEDecode: {
49
+ input: { required: { samples: ['LATENT'], vae: ['VAE'] }, optional: {} },
50
+ input_order: { required: ['samples', 'vae'], optional: [] },
51
+ },
52
+ // Save nodes
53
+ SaveImage: {
54
+ input: { required: { images: ['IMAGE'], filename_prefix: ['STRING', {}] }, optional: {} },
55
+ input_order: { required: ['images', 'filename_prefix'], optional: [] },
56
+ },
57
+ // Input loaders
58
+ LoadImage: {
59
+ input: { required: { image: ['STRING', {}] }, optional: {} },
60
+ input_order: { required: ['image'], optional: [] },
61
+ },
62
+ LoadAudio: {
63
+ input: { required: { audio: ['STRING', {}] }, optional: {} },
64
+ input_order: { required: ['audio'], optional: [] },
65
+ },
66
+ };
67
+ /**
68
+ * Find nodes in API-format workflow by class_type and optional title pattern
69
+ */
70
+ export function findNodes(workflow, classType, titleContains) {
71
+ const results = [];
72
+ for (const [nodeId, node] of Object.entries(workflow)) {
73
+ if (node.class_type === classType) {
74
+ if (!titleContains) {
75
+ results.push([nodeId, node]);
76
+ }
77
+ else {
78
+ const title = node._meta?.title || '';
79
+ if (title.toLowerCase().includes(titleContains.toLowerCase())) {
80
+ results.push([nodeId, node]);
81
+ }
82
+ }
83
+ }
84
+ }
85
+ return results;
86
+ }
87
+ /**
88
+ * Find first node matching class_type and optional title pattern
89
+ */
90
+ export function findNode(workflow, classType, titleContains) {
91
+ const nodes = findNodes(workflow, classType, titleContains);
92
+ return nodes.length > 0 ? nodes[0] : [null, null];
93
+ }
94
+ /**
95
+ * Apply parameters to workflow nodes
96
+ */
97
+ export function applyParams(workflow, params) {
98
+ const clipTypes = ['CLIPTextEncode', 'CLIPTextEncodeFlux', 'CLIPTextEncodeSD3', 'TextEncodeQwenImageEditPlus'];
99
+ // Helper to find first matching node from a list of types
100
+ const findFirst = (types, title) => {
101
+ for (const t of types) {
102
+ const result = findNode(workflow, t, title);
103
+ if (result[0])
104
+ return result;
105
+ }
106
+ return [null, null];
107
+ };
108
+ // Positive prompt
109
+ if (params.prompt) {
110
+ let [_nodeId, node] = findNode(workflow, 'TextEncodeQwenImageEditPlus', 'Positive');
111
+ if (node) {
112
+ node.inputs.prompt = params.prompt;
113
+ }
114
+ else {
115
+ [_nodeId, node] = findFirst(clipTypes, 'Positive');
116
+ if (!node) {
117
+ for (const t of clipTypes) {
118
+ const nodes = findNodes(workflow, t);
119
+ if (nodes.length > 0) {
120
+ [_nodeId, node] = nodes[0];
121
+ break;
122
+ }
123
+ }
124
+ }
125
+ if (node) {
126
+ node.inputs.text = params.prompt;
127
+ }
128
+ }
129
+ }
130
+ // Negative prompt
131
+ if (params.negative) {
132
+ let [_nodeId, node] = findNode(workflow, 'TextEncodeQwenImageEditPlus', 'Negative');
133
+ if (node) {
134
+ node.inputs.prompt = params.negative;
135
+ }
136
+ else {
137
+ [_nodeId, node] = findFirst(clipTypes, 'Negative');
138
+ if (node) {
139
+ node.inputs.text = params.negative;
140
+ }
141
+ }
142
+ }
143
+ // Width/Height/Length
144
+ if (params.width || params.height || params.length) {
145
+ const latentTypes = [
146
+ 'EmptySD3LatentImage', 'EmptyFlux2LatentImage', 'EmptyLatentImage',
147
+ 'EmptyHunyuanLatentVideo', 'EmptyMochiLatentVideo', 'EmptyLTXVLatentVideo',
148
+ 'WanImageToVideo', 'WanStartEndFrames', 'WanHuMoImageToVideo',
149
+ ];
150
+ const [_nodeId, node] = findFirst(latentTypes);
151
+ if (node) {
152
+ if (params.width)
153
+ node.inputs.width = params.width;
154
+ if (params.height)
155
+ node.inputs.height = params.height;
156
+ if (params.length)
157
+ node.inputs.length = params.length;
158
+ }
159
+ }
160
+ // Seed
161
+ if (params.seed !== undefined) {
162
+ const [_nodeId, node] = findNode(workflow, 'KSampler');
163
+ if (node) {
164
+ node.inputs.seed = params.seed;
165
+ }
166
+ else {
167
+ const advancedNodes = findNodes(workflow, 'KSamplerAdvanced');
168
+ let targetNode = null;
169
+ for (const [_nid, n] of advancedNodes) {
170
+ if (n.inputs.add_noise === 'enable') {
171
+ targetNode = n;
172
+ break;
173
+ }
174
+ }
175
+ if (!targetNode && advancedNodes.length > 0) {
176
+ targetNode = advancedNodes[0][1];
177
+ }
178
+ if (targetNode) {
179
+ targetNode.inputs.noise_seed = params.seed;
180
+ }
181
+ }
182
+ }
183
+ // Steps
184
+ if (params.steps !== undefined) {
185
+ const [_nodeId, node] = findFirst(['KSampler', 'KSamplerAdvanced', 'SamplerCustom', 'SamplerCustomAdvanced']);
186
+ if (node) {
187
+ node.inputs.steps = params.steps;
188
+ }
189
+ }
190
+ // CFG
191
+ if (params.cfg !== undefined) {
192
+ const [_nodeId, node] = findFirst(['KSampler', 'KSamplerAdvanced', 'SamplerCustom', 'SamplerCustomAdvanced']);
193
+ if (node) {
194
+ node.inputs.cfg = params.cfg;
195
+ }
196
+ }
197
+ // Filename prefix
198
+ if (params.filename_prefix) {
199
+ const [_nodeId, node] = findFirst(['SaveImage', 'SaveVideo', 'SaveAnimatedWEBP', 'SaveAnimatedPNG']);
200
+ if (node) {
201
+ node.inputs.filename_prefix = params.filename_prefix;
202
+ }
203
+ }
204
+ // Node-specific params
205
+ if (params.nodes) {
206
+ for (const [nodeId, values] of Object.entries(params.nodes)) {
207
+ const node = workflow[nodeId];
208
+ if (!node)
209
+ continue;
210
+ const nodeType = node.class_type || '';
211
+ for (const [key, value] of Object.entries(values)) {
212
+ if (key === 'image' && nodeType === 'LoadImage') {
213
+ node.inputs.image = value;
214
+ }
215
+ else if (key === 'audio' && nodeType === 'LoadAudio') {
216
+ node.inputs.audio = value;
217
+ }
218
+ else if (key === 'text' && nodeType.includes('Text')) {
219
+ node.inputs.text = value;
220
+ }
221
+ else {
222
+ node.inputs[key] = value;
223
+ }
224
+ }
225
+ }
226
+ }
227
+ return workflow;
228
+ }
229
+ /**
230
+ * Convert ComfyUI graph format to API format
231
+ */
232
+ export function graphToApi(graph, objectInfo, _debug = false) {
233
+ if (!objectInfo) {
234
+ objectInfo = DEFAULT_OBJECT_INFO;
235
+ }
236
+ const api = {};
237
+ const nodesById = {};
238
+ const links = {};
239
+ // Build lookups
240
+ for (const node of graph.nodes || []) {
241
+ nodesById[node.id] = node;
242
+ }
243
+ for (const link of graph.links || []) {
244
+ const [linkId, fromNode, fromSlot] = link;
245
+ links[linkId] = [fromNode, fromSlot];
246
+ }
247
+ // Convert nodes
248
+ for (const node of graph.nodes || []) {
249
+ const nodeId = String(node.id);
250
+ const classType = node.type;
251
+ if (!classType || ['Note', 'Reroute', 'MarkdownNote'].includes(classType)) {
252
+ continue;
253
+ }
254
+ if ([2, 4].includes(node.mode)) {
255
+ continue; // Skip muted/bypassed
256
+ }
257
+ const info = objectInfo[classType] || {};
258
+ const inputs = {};
259
+ // Map connections
260
+ const connectedInputs = new Set();
261
+ for (const inp of node.inputs || []) {
262
+ const linkId = inp.link;
263
+ if (linkId !== null && links[linkId]) {
264
+ const [fromNode, fromSlot] = links[linkId];
265
+ inputs[inp.name] = [String(fromNode), fromSlot];
266
+ connectedInputs.add(inp.name);
267
+ }
268
+ }
269
+ // Map widget values
270
+ const inputOrder = [
271
+ ...(info.input_order?.required || []),
272
+ ...(info.input_order?.optional || []),
273
+ ];
274
+ const widgets = node.widgets_values || [];
275
+ let wIdx = 0;
276
+ for (const name of inputOrder) {
277
+ if (connectedInputs.has(name))
278
+ continue;
279
+ if (wIdx < widgets.length) {
280
+ inputs[name] = widgets[wIdx];
281
+ wIdx++;
282
+ }
283
+ }
284
+ api[nodeId] = {
285
+ class_type: classType,
286
+ inputs,
287
+ _meta: { title: node.title || classType },
288
+ };
289
+ }
290
+ return api;
291
+ }
292
+ /**
293
+ * Apply graph modes (enable/disable nodes)
294
+ */
295
+ export function applyGraphModes(graph, nodesConfig) {
296
+ const nodesById = {};
297
+ for (const node of graph.nodes || []) {
298
+ nodesById[String(node.id)] = node;
299
+ }
300
+ for (const [nodeId, config] of Object.entries(nodesConfig)) {
301
+ const node = nodesById[nodeId];
302
+ if (!node)
303
+ continue;
304
+ if ('mode' in config) {
305
+ node.mode = config.mode;
306
+ }
307
+ else if ('enabled' in config) {
308
+ node.mode = config.enabled ? 0 : 4;
309
+ }
310
+ }
311
+ return graph;
312
+ }
313
+ /**
314
+ * ComfyUI-specific job with workflow execution helpers
315
+ */
316
+ export class ComfyUIJob extends BaseJob {
317
+ static DEFAULT_IMAGE = COMFYUI_IMAGE;
318
+ static DEFAULT_GPU_TYPE = 'l40s';
319
+ static HEALTH_ENDPOINT = '/system_stats';
320
+ static COMFYUI_PORT = 8188;
321
+ _objectInfo = null;
322
+ _jobToken = null;
323
+ _useLb;
324
+ useAuth;
325
+ template = null;
326
+ constructor(client, job, template, useLb = false, useAuth = false) {
327
+ super(client, job);
328
+ this.template = template || null;
329
+ this._useLb = useLb;
330
+ this.useAuth = useAuth;
331
+ }
332
+ get useLb() {
333
+ return this._useLb;
334
+ }
335
+ set useLb(value) {
336
+ this._useLb = value;
337
+ this._baseUrl = null;
338
+ }
339
+ get baseUrl() {
340
+ if (!this._baseUrl && this.hostname) {
341
+ if (this._useLb) {
342
+ this._baseUrl = `https://${this.hostname}`;
343
+ }
344
+ else {
345
+ this._baseUrl = `http://${this.hostname}:${ComfyUIJob.COMFYUI_PORT}`;
346
+ }
347
+ }
348
+ return this._baseUrl || '';
349
+ }
350
+ get authHeaders() {
351
+ if (this.useAuth) {
352
+ if (!this._jobToken) {
353
+ throw new Error('Job token not loaded. Call await job.jobToken() first.');
354
+ }
355
+ return { 'Authorization': `Bearer ${this._jobToken}` };
356
+ }
357
+ return { 'Authorization': `Bearer ${this.client.apiKey}` };
358
+ }
359
+ async jobToken() {
360
+ if (!this._jobToken) {
361
+ this._jobToken = await this.client.jobs.token(this.jobId);
362
+ }
363
+ return this._jobToken;
364
+ }
365
+ /**
366
+ * Create a new ComfyUI job configured for a specific template
367
+ */
368
+ static async createForTemplate(client, template, options = {}) {
369
+ const { gpuType, gpuCount = 1, runtime = 3600, lb, auth = false, ...kwargs } = options;
370
+ const env = kwargs.env || {};
371
+ env.COMFYUI_TEMPLATES = template;
372
+ const ports = {};
373
+ if (lb) {
374
+ ports.lb = lb;
375
+ }
376
+ else {
377
+ ports[String(ComfyUIJob.COMFYUI_PORT)] = ComfyUIJob.COMFYUI_PORT;
378
+ }
379
+ const job = await client.jobs.create({
380
+ image: ComfyUIJob.DEFAULT_IMAGE,
381
+ gpuType: gpuType || ComfyUIJob.DEFAULT_GPU_TYPE,
382
+ gpuCount,
383
+ runtime,
384
+ env,
385
+ ports,
386
+ auth,
387
+ ...kwargs,
388
+ });
389
+ return new ComfyUIJob(client, job, template, Boolean(lb), auth);
390
+ }
391
+ /**
392
+ * Get object_info from ComfyUI (cached)
393
+ */
394
+ async getObjectInfo(refresh = false) {
395
+ if (this._objectInfo === null || refresh) {
396
+ const response = await fetch(`${this.baseUrl}/object_info`, {
397
+ headers: this.authHeaders,
398
+ });
399
+ if (!response.ok) {
400
+ throw new Error(`Failed to get object_info: ${response.statusText}`);
401
+ }
402
+ this._objectInfo = (await response.json());
403
+ }
404
+ return this._objectInfo;
405
+ }
406
+ /**
407
+ * Convert graph format workflow to API format
408
+ */
409
+ async convertWorkflow(graph, debug = false) {
410
+ const objectInfo = await this.getObjectInfo();
411
+ return graphToApi(graph, objectInfo, debug);
412
+ }
413
+ /**
414
+ * Upload image to ComfyUI server
415
+ */
416
+ async uploadImage(filePath, filename) {
417
+ const content = readFileSync(filePath);
418
+ const fname = filename || basename(filePath);
419
+ const formData = new FormData();
420
+ const blob = new Blob([content], { type: 'image/png' });
421
+ formData.append('image', blob, fname);
422
+ const response = await fetch(`${this.baseUrl}/upload/image`, {
423
+ method: 'POST',
424
+ headers: this.authHeaders,
425
+ body: formData,
426
+ });
427
+ if (!response.ok) {
428
+ throw new Error(`Failed to upload image: ${response.statusText}`);
429
+ }
430
+ const data = await response.json();
431
+ return data.name || fname;
432
+ }
433
+ /**
434
+ * Upload audio to ComfyUI server
435
+ */
436
+ async uploadAudio(filePath, filename) {
437
+ const content = readFileSync(filePath);
438
+ const fname = filename || basename(filePath);
439
+ const formData = new FormData();
440
+ const blob = new Blob([content], { type: 'audio/mpeg' });
441
+ formData.append('image', blob, fname); // ComfyUI uses /upload/image for all files
442
+ const response = await fetch(`${this.baseUrl}/upload/image`, {
443
+ method: 'POST',
444
+ headers: this.authHeaders,
445
+ body: formData,
446
+ });
447
+ if (!response.ok) {
448
+ throw new Error(`Failed to upload audio: ${response.statusText}`);
449
+ }
450
+ const data = await response.json();
451
+ return data.name || fname;
452
+ }
453
+ }
454
+ //# sourceMappingURL=comfyui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comfyui.js","sourceRoot":"","sources":["../../src/job/comfyui.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Gradio job helpers for GPU workloads running Gradio-based services
3
+ */
4
+ import type { HyperCLI } from '../client.js';
5
+ import type { Job } from '../jobs.js';
6
+ import { BaseJob } from './base.js';
7
+ export interface GradioJobOptions {
8
+ image: string;
9
+ gpuType?: string;
10
+ gpuCount?: number;
11
+ runtime?: number;
12
+ lb?: number;
13
+ auth?: boolean;
14
+ [key: string]: any;
15
+ }
16
+ /**
17
+ * Gradio-specific job with service connection helpers
18
+ */
19
+ export declare class GradioJob extends BaseJob {
20
+ static DEFAULT_GPU_TYPE: string;
21
+ static HEALTH_ENDPOINT: string;
22
+ static HEALTH_TIMEOUT: number;
23
+ static GRADIO_PORT: number;
24
+ private _useLb;
25
+ useAuth: boolean;
26
+ private _jobToken;
27
+ constructor(client: HyperCLI, job: Job, useLb?: boolean, useAuth?: boolean);
28
+ get useLb(): boolean;
29
+ set useLb(value: boolean);
30
+ get baseUrl(): string;
31
+ get authHeaders(): Record<string, string>;
32
+ /**
33
+ * Get the job-specific bearer token for Gradio API auth
34
+ */
35
+ jobToken(): Promise<string>;
36
+ /**
37
+ * Create a new Gradio job for a specific Docker image
38
+ */
39
+ static createForService(client: HyperCLI, options: GradioJobOptions): Promise<GradioJob>;
40
+ /**
41
+ * Connect to this Gradio instance using gradio_client
42
+ *
43
+ * Note: Requires `gradio_client` package to be installed separately.
44
+ * This is a placeholder - actual implementation would use gradio_client.
45
+ */
46
+ connect(): Promise<any>;
47
+ }
48
+ //# sourceMappingURL=gradio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gradio.d.ts","sourceRoot":"","sources":["../../src/job/gradio.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,SAAU,SAAQ,OAAO;IACpC,OAAgB,gBAAgB,SAAQ;IACxC,OAAgB,eAAe,SAAO;IACtC,OAAgB,cAAc,SAAS;IACvC,MAAM,CAAC,WAAW,SAAQ;IAE1B,OAAO,CAAC,MAAM,CAAU;IACjB,OAAO,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,SAAS,CAAuB;gBAGtC,MAAM,EAAE,QAAQ,EAChB,GAAG,EAAE,GAAG,EACR,KAAK,GAAE,OAAe,EACtB,OAAO,GAAE,OAAe;IAO1B,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,EAGvB;IAED,IAAa,OAAO,IAAI,MAAM,CAS7B;IAED,IAAa,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CASjD;IAED;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC;IAOjC;;OAEG;WACU,gBAAgB,CAC3B,MAAM,EAAE,QAAQ,EAChB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,SAAS,CAAC;IAiCrB;;;;;OAKG;IACG,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC;CAM9B"}
@@ -0,0 +1,90 @@
1
+ import { BaseJob } from './base.js';
2
+ /**
3
+ * Gradio-specific job with service connection helpers
4
+ */
5
+ export class GradioJob extends BaseJob {
6
+ static DEFAULT_GPU_TYPE = 'l4';
7
+ static HEALTH_ENDPOINT = '/';
8
+ static HEALTH_TIMEOUT = 10000;
9
+ static GRADIO_PORT = 7860;
10
+ _useLb;
11
+ useAuth;
12
+ _jobToken = null;
13
+ constructor(client, job, useLb = false, useAuth = false) {
14
+ super(client, job);
15
+ this._useLb = useLb;
16
+ this.useAuth = useAuth;
17
+ }
18
+ get useLb() {
19
+ return this._useLb;
20
+ }
21
+ set useLb(value) {
22
+ this._useLb = value;
23
+ this._baseUrl = null;
24
+ }
25
+ get baseUrl() {
26
+ if (!this._baseUrl && this.hostname) {
27
+ if (this._useLb) {
28
+ this._baseUrl = `https://${this.hostname}`;
29
+ }
30
+ else {
31
+ this._baseUrl = `http://${this.hostname}:${GradioJob.GRADIO_PORT}`;
32
+ }
33
+ }
34
+ return this._baseUrl || '';
35
+ }
36
+ get authHeaders() {
37
+ if (this.useAuth) {
38
+ if (!this._jobToken) {
39
+ // Note: This is async, but authHeaders is sync - need to call jobToken() first
40
+ throw new Error('Job token not loaded. Call await job.jobToken() first.');
41
+ }
42
+ return { 'Authorization': `Bearer ${this._jobToken}` };
43
+ }
44
+ return super.authHeaders;
45
+ }
46
+ /**
47
+ * Get the job-specific bearer token for Gradio API auth
48
+ */
49
+ async jobToken() {
50
+ if (!this._jobToken) {
51
+ this._jobToken = await this.client.jobs.token(this.jobId);
52
+ }
53
+ return this._jobToken;
54
+ }
55
+ /**
56
+ * Create a new Gradio job for a specific Docker image
57
+ */
58
+ static async createForService(client, options) {
59
+ const { image, gpuType, gpuCount = 1, runtime = 3600, lb, auth = true, ...kwargs } = options;
60
+ const actualLb = lb ?? GradioJob.GRADIO_PORT;
61
+ const ports = {};
62
+ if (actualLb) {
63
+ ports.lb = actualLb;
64
+ }
65
+ else {
66
+ ports[String(GradioJob.GRADIO_PORT)] = GradioJob.GRADIO_PORT;
67
+ }
68
+ const job = await client.jobs.create({
69
+ image,
70
+ gpuType: gpuType || this.DEFAULT_GPU_TYPE,
71
+ gpuCount,
72
+ runtime,
73
+ ports,
74
+ auth,
75
+ ...kwargs,
76
+ });
77
+ return new GradioJob(client, job, Boolean(actualLb), auth);
78
+ }
79
+ /**
80
+ * Connect to this Gradio instance using gradio_client
81
+ *
82
+ * Note: Requires `gradio_client` package to be installed separately.
83
+ * This is a placeholder - actual implementation would use gradio_client.
84
+ */
85
+ async connect() {
86
+ throw new Error('Gradio client not available in TypeScript. ' +
87
+ 'Use the REST API directly or implement a client.');
88
+ }
89
+ }
90
+ //# sourceMappingURL=gradio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gradio.js","sourceRoot":"","sources":["../../src/job/gradio.ts"],"names":[],"mappings":"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"}