@miragari/client 0.1.0

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/LICENSE ADDED
@@ -0,0 +1 @@
1
+ SEE LICENSE IN ../../LICENSE
package/README.md ADDED
@@ -0,0 +1,22 @@
1
+ # @miragari/client
2
+
3
+ Stateless client SDK for routing media generation requests across provider
4
+ plugins.
5
+
6
+ ## Install
7
+
8
+ ```bash
9
+ npm install @miragari/client
10
+ ```
11
+
12
+ ## Example
13
+
14
+ ```ts
15
+ import { MediaRouter } from "@miragari/client"
16
+ ```
17
+
18
+ Most users should prefer `@miragari/providers`, which ships the built-in
19
+ provider plugins and `createMediaRouter()` convenience factory.
20
+
21
+ Project docs and end-to-end examples live in the repository root:
22
+ [mediaRouter](https://github.com/Zehight/mediaRouter).
@@ -0,0 +1,49 @@
1
+ import { type GenerationJob, type GenerationRequest, type GenerationResult, type MediaRouterError, type ModelDefinition, type PartialFailureMode, type ProviderRuntimeContext } from "@miragari/core";
2
+ import type { NormalizedImageGenerationRequest } from "./normalize.js";
3
+ export type BatchRunOptions = {
4
+ maxConcurrency?: number;
5
+ partialFailure?: PartialFailureMode;
6
+ batch?: {
7
+ maxConcurrency?: number;
8
+ partialFailure?: PartialFailureMode;
9
+ };
10
+ };
11
+ export type NormalizeRouterError = (error: unknown, runtime: ProviderRuntimeContext, request?: GenerationRequest, job?: GenerationJob) => MediaRouterError;
12
+ export type BatchProviderRuntime = {
13
+ providerId: string;
14
+ runtime: ProviderRuntimeContext;
15
+ };
16
+ export type ResolveBatchProvider = (provider: string) => BatchProviderRuntime;
17
+ export declare function shouldSplitImages(request: NormalizedImageGenerationRequest, model: ModelDefinition): boolean;
18
+ export declare function createSplitImageJob(input: {
19
+ request: NormalizedImageGenerationRequest;
20
+ options?: BatchRunOptions;
21
+ resolveProvider: ResolveBatchProvider;
22
+ createChild: (request: NormalizedImageGenerationRequest, options?: BatchRunOptions) => Promise<GenerationJob>;
23
+ normalizeError: NormalizeRouterError;
24
+ }): Promise<GenerationJob>;
25
+ export declare function cancelBatchJob(input: {
26
+ job: GenerationJob;
27
+ resolveProvider: ResolveBatchProvider;
28
+ normalizeError: NormalizeRouterError;
29
+ }): Promise<void>;
30
+ export declare function statusBatchJob(input: {
31
+ job: GenerationJob;
32
+ statusChild: (job: GenerationJob) => Promise<GenerationJob>;
33
+ normalizeStatusJob: (job: GenerationJob) => GenerationJob;
34
+ normalizeError: NormalizeRouterError;
35
+ }): Promise<GenerationJob>;
36
+ export declare function withBatchResult(job: GenerationJob): GenerationJob;
37
+ export declare function reduceBatchTerminalJob(input: {
38
+ job: GenerationJob;
39
+ children: GenerationJob[];
40
+ partialFailure: PartialFailureMode;
41
+ completedAt?: string;
42
+ failureMessage?: string;
43
+ }): GenerationJob;
44
+ export declare function createBatchResult(input: {
45
+ job: GenerationJob;
46
+ children: GenerationJob[];
47
+ completedAt?: string;
48
+ }): GenerationResult | undefined;
49
+ //# sourceMappingURL=batch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../src/batch.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC5B,MAAM,gBAAgB,CAAA;AAEvB,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,gBAAgB,CAAA;AAGtE,MAAM,MAAM,eAAe,GAAG;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,cAAc,CAAC,EAAE,kBAAkB,CAAA;IACnC,KAAK,CAAC,EAAE;QACN,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,cAAc,CAAC,EAAE,kBAAkB,CAAA;KACpC,CAAA;CACF,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,CACjC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,sBAAsB,EAC/B,OAAO,CAAC,EAAE,iBAAiB,EAC3B,GAAG,CAAC,EAAE,aAAa,KAChB,gBAAgB,CAAA;AAErB,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE,sBAAsB,CAAA;CAChC,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,oBAAoB,CAAA;AAE7E,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,gCAAgC,EACzC,KAAK,EAAE,eAAe,GACrB,OAAO,CAKT;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,OAAO,EAAE,gCAAgC,CAAA;IACzC,OAAO,CAAC,EAAE,eAAe,CAAA;IACzB,eAAe,EAAE,oBAAoB,CAAA;IACrC,WAAW,EAAE,CACX,OAAO,EAAE,gCAAgC,EACzC,OAAO,CAAC,EAAE,eAAe,KACtB,OAAO,CAAC,aAAa,CAAC,CAAA;IAC3B,cAAc,EAAE,oBAAoB,CAAA;CACrC,GAAG,OAAO,CAAC,aAAa,CAAC,CAqDzB;AAUD,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,GAAG,EAAE,aAAa,CAAA;IAClB,eAAe,EAAE,oBAAoB,CAAA;IACrC,cAAc,EAAE,oBAAoB,CAAA;CACrC,GAAG,OAAO,CAAC,IAAI,CAAC,CA6ChB;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,GAAG,EAAE,aAAa,CAAA;IAClB,WAAW,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;IAC3D,kBAAkB,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,aAAa,CAAA;IACzD,cAAc,EAAE,oBAAoB,CAAA;CACrC,GAAG,OAAO,CAAC,aAAa,CAAC,CA6BzB;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,GAAG,aAAa,CAQjE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAC5C,GAAG,EAAE,aAAa,CAAA;IAClB,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,cAAc,EAAE,kBAAkB,CAAA;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,GAAG,aAAa,CAkChB;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,GAAG,EAAE,aAAa,CAAA;IAClB,QAAQ,EAAE,aAAa,EAAE,CAAA;IACzB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,GAAG,gBAAgB,GAAG,SAAS,CA2B/B"}
package/dist/batch.js ADDED
@@ -0,0 +1,219 @@
1
+ import { MediaRouterException, createId, createMediaRouterError, normalizeMediaRouterError, } from "@miragari/core";
2
+ import { mapWithConcurrency } from "./concurrency.js";
3
+ import { normalizeTerminalJob } from "./terminal.js";
4
+ export function shouldSplitImages(request, model) {
5
+ const count = request.options?.count ?? 1;
6
+ const countCapability = model.capabilities?.count;
7
+ const nativeMax = countCapability?.max ?? 1;
8
+ return count > nativeMax && countCapability?.strategy === "split";
9
+ }
10
+ export async function createSplitImageJob(input) {
11
+ const { request, options, resolveProvider, createChild, normalizeError } = input;
12
+ const count = request.options?.count ?? 1;
13
+ const maxConcurrency = Math.min(batchMaxConcurrency(options) ?? count, count);
14
+ const partialFailure = batchPartialFailure(options);
15
+ const attempts = Array.from({ length: count }, (_, index) => index);
16
+ const { providerId, runtime } = resolveProvider(request.provider);
17
+ const children = await mapWithConcurrency(attempts, maxConcurrency, async (index) => {
18
+ const seed = request.options?.seed == null ? undefined : request.options.seed + index;
19
+ const childRequest = {
20
+ ...request,
21
+ type: "image",
22
+ options: {
23
+ ...request.options,
24
+ count: 1,
25
+ seed,
26
+ },
27
+ };
28
+ try {
29
+ return await createChild(childRequest, options);
30
+ }
31
+ catch (error) {
32
+ if (partialFailure !== "return-successful")
33
+ throw error;
34
+ return {
35
+ id: createId("mr_job"),
36
+ type: "image",
37
+ provider: request.provider,
38
+ providerId,
39
+ model: request.model,
40
+ status: "failed",
41
+ error: normalizeError(error, runtime, childRequest),
42
+ createdAt: new Date().toISOString(),
43
+ };
44
+ }
45
+ });
46
+ const batch = {
47
+ id: createId("mr_batch"),
48
+ type: "image",
49
+ provider: request.provider,
50
+ providerId,
51
+ model: request.model,
52
+ status: "running",
53
+ children,
54
+ providerState: { partialFailure },
55
+ createdAt: new Date().toISOString(),
56
+ };
57
+ return reduceBatchTerminalJob({
58
+ job: batch,
59
+ children,
60
+ partialFailure,
61
+ });
62
+ }
63
+ function batchMaxConcurrency(options) {
64
+ return options?.batch?.maxConcurrency ?? options?.maxConcurrency;
65
+ }
66
+ function batchPartialFailure(options) {
67
+ return options?.batch?.partialFailure ?? options?.partialFailure ?? "fail";
68
+ }
69
+ export async function cancelBatchJob(input) {
70
+ const { job, resolveProvider, normalizeError } = input;
71
+ const cancellable = (job.children ?? []).filter((child) => child.status === "queued" || child.status === "running");
72
+ const settled = await Promise.all(cancellable.map(async (child) => {
73
+ if (!child.providerJobId) {
74
+ return createMediaRouterError("PROVIDER_ERROR", "Batch child is missing providerJobId for cancellation", {
75
+ provider: child.provider,
76
+ model: child.model,
77
+ raw: child,
78
+ });
79
+ }
80
+ let runtime;
81
+ try {
82
+ runtime = resolveProvider(child.provider).runtime;
83
+ if (!runtime.plugin.driver.cancel) {
84
+ return createMediaRouterError("BAD_REQUEST", "Provider does not support cancellation", {
85
+ provider: child.provider,
86
+ model: child.model,
87
+ raw: child,
88
+ });
89
+ }
90
+ await runtime.plugin.driver.cancel({ ...runtime, job: child });
91
+ return undefined;
92
+ }
93
+ catch (error) {
94
+ return normalizeBatchChildError(error, child, runtime, normalizeError);
95
+ }
96
+ }));
97
+ const failures = settled.filter((error) => Boolean(error));
98
+ if (failures.length) {
99
+ throw new MediaRouterException(createMediaRouterError("PROVIDER_ERROR", "Failed to cancel batch children", {
100
+ provider: job.provider,
101
+ model: job.model,
102
+ raw: failures,
103
+ }));
104
+ }
105
+ }
106
+ export async function statusBatchJob(input) {
107
+ const { job, statusChild, normalizeStatusJob } = input;
108
+ const partialFailure = job.providerState?.partialFailure === "return-successful";
109
+ const children = await Promise.all((job.children ?? []).map((child) => child.status === "running" || child.status === "queued"
110
+ ? statusChild(child).catch((error) => {
111
+ const normalized = normalizeBatchChildError(error, child, undefined, input.normalizeError);
112
+ if (!partialFailure)
113
+ throw new MediaRouterException(normalized);
114
+ return {
115
+ ...child,
116
+ status: "failed",
117
+ error: normalized,
118
+ updatedAt: new Date().toISOString(),
119
+ };
120
+ })
121
+ : Promise.resolve(normalizeStatusJob(child))));
122
+ return reduceBatchTerminalJob({
123
+ job,
124
+ children,
125
+ partialFailure: partialFailure ? "return-successful" : "fail",
126
+ });
127
+ }
128
+ export function withBatchResult(job) {
129
+ const result = createBatchResult({
130
+ job,
131
+ children: job.children ?? [],
132
+ completedAt: job.updatedAt,
133
+ });
134
+ if (!result)
135
+ return job;
136
+ return { ...job, result };
137
+ }
138
+ export function reduceBatchTerminalJob(input) {
139
+ const normalizedChildren = input.children.map((child) => normalizeTerminalJob(child));
140
+ const hasRunning = normalizedChildren.some((child) => child.status === "running" || child.status === "queued");
141
+ const hasSucceeded = normalizedChildren.some(hasBatchResult);
142
+ const hasFailed = normalizedChildren.some((child) => child.status === "failed" || child.status === "cancelled");
143
+ const status = hasRunning
144
+ ? "running"
145
+ : hasSucceeded && (input.partialFailure === "return-successful" || !hasFailed)
146
+ ? "succeeded"
147
+ : "failed";
148
+ const updatedAt = input.completedAt ?? new Date().toISOString();
149
+ const nextJob = {
150
+ ...input.job,
151
+ status,
152
+ children: normalizedChildren,
153
+ error: status === "failed"
154
+ ? createMediaRouterError("PROVIDER_ERROR", input.failureMessage ?? "Batch generation failed", {
155
+ provider: input.job.provider,
156
+ model: input.job.model,
157
+ raw: normalizedChildren,
158
+ })
159
+ : undefined,
160
+ updatedAt,
161
+ };
162
+ return status === "succeeded" ? withBatchResult(nextJob) : nextJob;
163
+ }
164
+ export function createBatchResult(input) {
165
+ const successful = input.children.filter(hasBatchResult);
166
+ if (successful.length === 0)
167
+ return undefined;
168
+ const completedAt = input.completedAt ?? new Date().toISOString();
169
+ const { job } = input;
170
+ const assets = successful.flatMap((child) => child.result?.assets ?? []);
171
+ return {
172
+ id: `${job.id}_result`,
173
+ jobId: job.id,
174
+ type: job.type,
175
+ provider: job.provider,
176
+ providerId: job.providerId,
177
+ model: job.model,
178
+ status: "succeeded",
179
+ asset: assets[0],
180
+ assets,
181
+ children: input.children.map((child) => ({
182
+ jobId: child.id,
183
+ providerJobId: child.providerJobId,
184
+ status: child.status,
185
+ error: child.error,
186
+ })),
187
+ timings: {
188
+ createdAt: job.createdAt ?? completedAt,
189
+ completedAt,
190
+ },
191
+ };
192
+ }
193
+ function hasBatchResult(job) {
194
+ return job.status === "succeeded" && Boolean(job.result);
195
+ }
196
+ function normalizeBatchChildError(error, child, runtime, normalizeError) {
197
+ const fallback = { provider: child.provider, model: child.model };
198
+ const normalized = normalizeMediaRouterError(error, fallback);
199
+ if (normalized)
200
+ return normalized;
201
+ if (runtime && normalizeError)
202
+ return normalizeError(error, runtime, undefined, child);
203
+ return createMediaRouterError("UNKNOWN", errorMessage(error), {
204
+ ...fallback,
205
+ raw: error,
206
+ });
207
+ }
208
+ function errorMessage(error) {
209
+ if (error instanceof Error)
210
+ return error.message;
211
+ if (typeof error === "object" &&
212
+ error &&
213
+ "message" in error &&
214
+ typeof error.message === "string") {
215
+ return error.message;
216
+ }
217
+ return "Unknown provider error";
218
+ }
219
+ //# sourceMappingURL=batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batch.js","sourceRoot":"","sources":["../src/batch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function mapWithConcurrency<T, R>(items: T[], concurrency: number, mapper: (item: T, index: number) => Promise<R>): Promise<R[]>;
2
+ //# sourceMappingURL=concurrency.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concurrency.d.ts","sourceRoot":"","sources":["../src/concurrency.ts"],"names":[],"mappings":"AAAA,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAC3C,KAAK,EAAE,CAAC,EAAE,EACV,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,GAC7C,OAAO,CAAC,CAAC,EAAE,CAAC,CAed"}
@@ -0,0 +1,15 @@
1
+ export async function mapWithConcurrency(items, concurrency, mapper) {
2
+ const results = [];
3
+ let nextIndex = 0;
4
+ async function worker() {
5
+ while (nextIndex < items.length) {
6
+ const current = nextIndex;
7
+ nextIndex += 1;
8
+ results[current] = await mapper(items[current], current);
9
+ }
10
+ }
11
+ const workerCount = Math.min(Math.max(concurrency, 1), items.length);
12
+ await Promise.all(Array.from({ length: workerCount }, () => worker()));
13
+ return results;
14
+ }
15
+ //# sourceMappingURL=concurrency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concurrency.js","sourceRoot":"","sources":["../src/concurrency.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,KAAU,EACV,WAAmB,EACnB,MAA8C;IAE9C,MAAM,OAAO,GAAQ,EAAE,CAAA;IACvB,IAAI,SAAS,GAAG,CAAC,CAAA;IAEjB,KAAK,UAAU,MAAM;QACnB,OAAO,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,SAAS,CAAA;YACzB,SAAS,IAAI,CAAC,CAAA;YACd,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAM,EAAE,OAAO,CAAC,CAAA;QAC/D,CAAC;IACH,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;IACpE,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtE,OAAO,OAAO,CAAA;AAChB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from "./media-router.js";
2
+ export * from "./normalize.js";
3
+ export * from "./registry.js";
4
+ export * from "./wait.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export * from "./media-router.js";
2
+ export * from "./normalize.js";
3
+ export * from "./registry.js";
4
+ export * from "./wait.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,WAAW,CAAA"}
@@ -0,0 +1,89 @@
1
+ import { type GenerationJob, type GenerationResult, type PartialFailureMode, type ProviderPlugin } from "@miragari/core";
2
+ import { type AudioGenerationInput, type GenerationInput, type ImageGenerationInput, type MediaRouterDefaultSlot, type MediaRouterDefaults, type Model3DGenerationInput, type VideoGenerationInput } from "./normalize.js";
3
+ import { type ProviderInstanceInput } from "./registry.js";
4
+ import { type WaitOptions } from "./wait.js";
5
+ export type MediaRouterOptions = {
6
+ plugins: Record<string, ProviderPlugin>;
7
+ providers: Record<string, ProviderInstanceInput>;
8
+ defaults?: MediaRouterDefaults;
9
+ fetch?: typeof fetch;
10
+ };
11
+ export type RunOptions = WaitOptions & {
12
+ dimensionMode?: "nearest" | "strict";
13
+ profile?: string;
14
+ defaults?: MediaRouterDefaults;
15
+ provider?: MediaRouterDefaults["provider"];
16
+ model?: MediaRouterDefaults["model"];
17
+ profiles?: MediaRouterDefaults["profiles"];
18
+ image?: MediaRouterDefaultSlot;
19
+ video?: MediaRouterDefaultSlot;
20
+ audio?: MediaRouterDefaultSlot;
21
+ model3d?: MediaRouterDefaultSlot;
22
+ maxConcurrency?: number;
23
+ partialFailure?: PartialFailureMode;
24
+ batch?: {
25
+ maxConcurrency?: number;
26
+ partialFailure?: PartialFailureMode;
27
+ };
28
+ };
29
+ export declare class MediaRouter {
30
+ private readonly registry;
31
+ private readonly defaults;
32
+ constructor(options: MediaRouterOptions);
33
+ profile(profile: string): ProfiledMediaRouter;
34
+ create(input: GenerationInput, options?: RunOptions): Promise<GenerationJob>;
35
+ private createMedia;
36
+ private createNormalized;
37
+ private executePrepared;
38
+ createImage(input: ImageGenerationInput, options?: RunOptions): Promise<GenerationJob>;
39
+ createVideo(input: VideoGenerationInput, options?: RunOptions): Promise<GenerationJob>;
40
+ createAudio(input: AudioGenerationInput, options?: RunOptions): Promise<GenerationJob>;
41
+ createModel3D(input: Model3DGenerationInput, options?: RunOptions): Promise<GenerationJob>;
42
+ status(job: GenerationJob): Promise<GenerationJob>;
43
+ cancel(job: GenerationJob): Promise<void>;
44
+ wait(job: GenerationJob, options?: WaitOptions): Promise<GenerationResult>;
45
+ generate(input: GenerationInput, options?: RunOptions): Promise<GenerationResult>;
46
+ private generateMedia;
47
+ generateImage(input: ImageGenerationInput, options?: RunOptions): Promise<GenerationResult>;
48
+ generateVideo(input: VideoGenerationInput, options?: RunOptions): Promise<GenerationResult>;
49
+ generateAudio(input: AudioGenerationInput, options?: RunOptions): Promise<GenerationResult>;
50
+ generateModel3D(input: Model3DGenerationInput, options?: RunOptions): Promise<GenerationResult>;
51
+ private createSplitImageJob;
52
+ private normalizeStatusJob;
53
+ private cancelBatchJob;
54
+ private statusBatchJob;
55
+ private resolveBatchProvider;
56
+ private normalizeInput;
57
+ private validateResolvedDefaultProvider;
58
+ private defaultsFor;
59
+ private applyRunProfile;
60
+ private prepare;
61
+ private applyDefaults;
62
+ private normalizeError;
63
+ private validateRunOptions;
64
+ private resolveProfileBinding;
65
+ private profileStringField;
66
+ }
67
+ export declare class ProfiledMediaRouter {
68
+ private readonly router;
69
+ readonly profile: string;
70
+ private readonly stringField;
71
+ constructor(router: MediaRouter, profile: string, stringField: "prompt" | "text");
72
+ create(input: GenerationInput, options?: RunOptions): Promise<GenerationJob>;
73
+ createImage(input: ImageGenerationInput, options?: RunOptions): Promise<GenerationJob>;
74
+ createVideo(input: VideoGenerationInput, options?: RunOptions): Promise<GenerationJob>;
75
+ createAudio(input: AudioGenerationInput, options?: RunOptions): Promise<GenerationJob>;
76
+ createModel3D(input: Model3DGenerationInput, options?: RunOptions): Promise<GenerationJob>;
77
+ generate(input: GenerationInput, options?: RunOptions): Promise<GenerationResult>;
78
+ generateImage(input: ImageGenerationInput, options?: RunOptions): Promise<GenerationResult>;
79
+ generateVideo(input: VideoGenerationInput, options?: RunOptions): Promise<GenerationResult>;
80
+ generateAudio(input: AudioGenerationInput, options?: RunOptions): Promise<GenerationResult>;
81
+ generateModel3D(input: Model3DGenerationInput, options?: RunOptions): Promise<GenerationResult>;
82
+ status(job: GenerationJob): Promise<GenerationJob>;
83
+ wait(job: GenerationJob, options?: WaitOptions): Promise<GenerationResult>;
84
+ cancel(job: GenerationJob): Promise<void>;
85
+ private createMedia;
86
+ private generateMedia;
87
+ private stringFieldFor;
88
+ }
89
+ //# sourceMappingURL=media-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-router.d.ts","sourceRoot":"","sources":["../src/media-router.ts"],"names":[],"mappings":"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"}