@neta-art/generation 0.1.9 → 0.1.11
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/README.md +15 -1
- package/dist/{builtins-CcfifHB4.js → builtins-BvtiQicj.mjs} +28 -14
- package/dist/builtins-BvtiQicj.mjs.map +1 -0
- package/dist/{builtins-CWEB_GK4.d.ts → builtins-H7pH9ppJ.d.mts} +11 -4
- package/dist/builtins-H7pH9ppJ.d.mts.map +1 -0
- package/dist/{builtins.d.ts → builtins.d.mts} +1 -1
- package/dist/{builtins.js → builtins.mjs} +2 -3
- package/dist/cli/{index.js → index.mjs} +5 -6
- package/dist/cli/index.mjs.map +1 -0
- package/dist/{export-config--lWA-0gu.js → export-config-C_kTxv5h.mjs} +110 -110
- package/dist/export-config-C_kTxv5h.mjs.map +1 -0
- package/dist/{index.d.ts → index.d.mts} +4 -4
- package/dist/index.d.mts.map +1 -0
- package/dist/{index.js → index.mjs} +3 -4
- package/models/seedance-2-0-fast.yaml +7 -2
- package/models/seedance-2-0.yaml +7 -2
- package/package.json +20 -18
- package/dist/builtins-CWEB_GK4.d.ts.map +0 -1
- package/dist/builtins-CcfifHB4.js.map +0 -1
- package/dist/cli/index.js.map +0 -1
- package/dist/export-config--lWA-0gu.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- /package/dist/cli/{index.d.ts → index.d.mts} +0 -0
package/README.md
CHANGED
|
@@ -31,6 +31,20 @@ const output = await client.generate({
|
|
|
31
31
|
console.log(output);
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
+
Use `generateResult` when you need observed request metadata:
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
const result = await client.generateResult({
|
|
38
|
+
model: "gpt-image-2",
|
|
39
|
+
content: [{ type: "text", text: "a small red toy robot on a white desk" }],
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
console.log(result.content);
|
|
43
|
+
console.log(result.requestId, result.cost);
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
`requestId` maps to the response body's top-level `request_id`. `cost` maps to the official request price in `usage.cost`.
|
|
47
|
+
|
|
34
48
|
`baseUrl` defaults to `https://router.neta.art`. Pass a different endpoint when needed:
|
|
35
49
|
|
|
36
50
|
```ts
|
|
@@ -216,7 +230,7 @@ const output = await client.generate({
|
|
|
216
230
|
parameters: {
|
|
217
231
|
duration: 5,
|
|
218
232
|
resolution: "720p",
|
|
219
|
-
|
|
233
|
+
ratio: "16:9",
|
|
220
234
|
},
|
|
221
235
|
});
|
|
222
236
|
```
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
//#region src/types.ts
|
|
2
|
-
const MODEL_SCHEMA = "neta.generation.model.v1";
|
|
3
|
-
|
|
4
|
-
//#endregion
|
|
5
1
|
//#region src/utils.ts
|
|
6
2
|
function cloneJson(value) {
|
|
7
3
|
return JSON.parse(JSON.stringify(value));
|
|
@@ -19,7 +15,9 @@ function compactObject(value) {
|
|
|
19
15
|
for (const key of Object.keys(value)) if (value[key] === void 0) delete value[key];
|
|
20
16
|
return value;
|
|
21
17
|
}
|
|
22
|
-
|
|
18
|
+
//#endregion
|
|
19
|
+
//#region src/types.ts
|
|
20
|
+
const MODEL_SCHEMA = "neta.generation.model.v1";
|
|
23
21
|
//#endregion
|
|
24
22
|
//#region src/builtins.ts
|
|
25
23
|
const imageSizeParameters = {
|
|
@@ -121,7 +119,7 @@ const noobxlImageToImageParameters = {
|
|
|
121
119
|
description: "IP-Adapter face weight. The provider default is 0.6 when a face reference is supplied."
|
|
122
120
|
}
|
|
123
121
|
};
|
|
124
|
-
function
|
|
122
|
+
function seedanceVideoParameters(defaults) {
|
|
125
123
|
return {
|
|
126
124
|
duration: {
|
|
127
125
|
type: "integer",
|
|
@@ -143,7 +141,7 @@ function videoParameters(defaults) {
|
|
|
143
141
|
],
|
|
144
142
|
description: "Output video resolution."
|
|
145
143
|
},
|
|
146
|
-
|
|
144
|
+
ratio: {
|
|
147
145
|
type: "string",
|
|
148
146
|
optional: true,
|
|
149
147
|
default: "16:9",
|
|
@@ -160,6 +158,22 @@ function videoParameters(defaults) {
|
|
|
160
158
|
],
|
|
161
159
|
description: "Output aspect ratio. Use adaptive to let the model choose."
|
|
162
160
|
},
|
|
161
|
+
aspect_ratio: {
|
|
162
|
+
type: "string",
|
|
163
|
+
optional: true,
|
|
164
|
+
enum: [
|
|
165
|
+
"16:9",
|
|
166
|
+
"9:16",
|
|
167
|
+
"1:1",
|
|
168
|
+
"4:3",
|
|
169
|
+
"3:2",
|
|
170
|
+
"2:3",
|
|
171
|
+
"3:4",
|
|
172
|
+
"21:9",
|
|
173
|
+
"adaptive"
|
|
174
|
+
],
|
|
175
|
+
description: "Deprecated alias for ratio."
|
|
176
|
+
},
|
|
163
177
|
fps: {
|
|
164
178
|
type: "integer",
|
|
165
179
|
optional: true,
|
|
@@ -1128,7 +1142,7 @@ const builtinModels = [
|
|
|
1128
1142
|
description: "Optional public URL reference video input. Use meta.role as reference_video."
|
|
1129
1143
|
}
|
|
1130
1144
|
] },
|
|
1131
|
-
parameters:
|
|
1145
|
+
parameters: seedanceVideoParameters({
|
|
1132
1146
|
resolution: "1080p",
|
|
1133
1147
|
maxWait: 900
|
|
1134
1148
|
}),
|
|
@@ -1143,7 +1157,7 @@ const builtinModels = [
|
|
|
1143
1157
|
parameters: {
|
|
1144
1158
|
duration: 5,
|
|
1145
1159
|
resolution: "1080p",
|
|
1146
|
-
|
|
1160
|
+
ratio: "16:9"
|
|
1147
1161
|
}
|
|
1148
1162
|
}
|
|
1149
1163
|
}]
|
|
@@ -1185,7 +1199,7 @@ const builtinModels = [
|
|
|
1185
1199
|
description: "Optional public URL reference video input. Use meta.role as reference_video."
|
|
1186
1200
|
}
|
|
1187
1201
|
] },
|
|
1188
|
-
parameters:
|
|
1202
|
+
parameters: seedanceVideoParameters({
|
|
1189
1203
|
resolution: "720p",
|
|
1190
1204
|
maxWait: 600
|
|
1191
1205
|
}),
|
|
@@ -1200,7 +1214,7 @@ const builtinModels = [
|
|
|
1200
1214
|
parameters: {
|
|
1201
1215
|
duration: 5,
|
|
1202
1216
|
resolution: "720p",
|
|
1203
|
-
|
|
1217
|
+
ratio: "16:9"
|
|
1204
1218
|
}
|
|
1205
1219
|
}
|
|
1206
1220
|
}]
|
|
@@ -1214,7 +1228,7 @@ function getBuiltinGenerationModel(model) {
|
|
|
1214
1228
|
function listBuiltinGenerationModels() {
|
|
1215
1229
|
return cloneJson(builtinModels);
|
|
1216
1230
|
}
|
|
1217
|
-
|
|
1218
1231
|
//#endregion
|
|
1219
|
-
export {
|
|
1220
|
-
|
|
1232
|
+
export { cloneJson as a, getBlockMeta as c, MODEL_SCHEMA as i, slugifyFileName as l, getBuiltinGenerationModel as n, compactArray as o, listBuiltinGenerationModels as r, compactObject as s, builtinGenerationModels as t };
|
|
1233
|
+
|
|
1234
|
+
//# sourceMappingURL=builtins-BvtiQicj.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtins-BvtiQicj.mjs","names":[],"sources":["../src/utils.ts","../src/types.ts","../src/builtins.ts"],"sourcesContent":["import type { GenerationContentBlock } from \"./types.js\";\n\nexport function cloneJson<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nexport function slugifyFileName(value: string): string {\n return (\n value\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9._-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\") || \"model\"\n );\n}\n\nexport function getBlockMeta(block: GenerationContentBlock): Record<string, unknown> | undefined {\n return \"meta\" in block ? block.meta : undefined;\n}\n\nexport function compactArray<T>(values: T[]): T[] | undefined {\n return values.length > 0 ? values : undefined;\n}\n\nexport function compactObject<T extends Record<string, unknown>>(value: T): T {\n for (const key of Object.keys(value)) if (value[key] === undefined) delete value[key];\n return value;\n}\n","export const MODEL_SCHEMA = \"neta.generation.model.v1\" as const;\n\nexport type GenerationSource = { type: \"url\"; url: string } | { type: \"base64\"; mediaType: string; data: string };\n\nexport type GenerationContentBlockMeta = Record<string, unknown>;\n\nexport type GenerationContentBlock =\n | { type: \"text\"; text: string; meta?: GenerationContentBlockMeta }\n | { type: \"image\"; source: GenerationSource; meta?: GenerationContentBlockMeta }\n | { type: \"video\"; source: GenerationSource; meta?: GenerationContentBlockMeta }\n | { type: \"audio\"; source: GenerationSource; meta?: GenerationContentBlockMeta };\n\nexport type GenerationResult = {\n content: GenerationContentBlock[];\n requestId?: string;\n cost?: number;\n};\n\nexport type GenerationContentSpec = {\n type: \"text\" | \"image\" | \"video\" | \"audio\";\n required?: boolean;\n min?: number;\n max?: number;\n sources?: Array<GenerationSource[\"type\"]>;\n roles?: string[];\n roleRequired?: boolean;\n merge?: \"newline\" | \"space\" | \"concat\";\n meta?: Record<string, unknown>;\n description?: string;\n};\n\nexport type GenerationParameterSpec =\n | {\n type: \"string\";\n optional?: boolean;\n default?: string;\n enum?: string[];\n description?: string;\n examples?: string[];\n }\n | {\n type: \"number\";\n optional?: boolean;\n default?: number;\n min?: number;\n max?: number;\n description?: string;\n examples?: number[];\n }\n | {\n type: \"integer\";\n optional?: boolean;\n default?: number;\n min?: number;\n max?: number;\n description?: string;\n examples?: number[];\n }\n | {\n type: \"boolean\";\n optional?: boolean;\n default?: boolean;\n description?: string;\n examples?: boolean[];\n };\n\nexport type GenerationMetaFieldSpec =\n | GenerationParameterSpec\n | { type: \"object\"; optional?: boolean; description?: string };\n\nexport type GenerationMetaTaskVariantSpec = {\n description?: string;\n required?: string[];\n requiredContent?: Array<GenerationContentSpec[\"type\"]>;\n sendTask?: boolean;\n};\n\nexport type GenerationMetaSpec = {\n fields?: Record<string, GenerationMetaFieldSpec>;\n taskField?: string;\n taskVariants?: Record<string, GenerationMetaTaskVariantSpec>;\n};\n\nexport type GenerationModelDeclaration = {\n schema: typeof MODEL_SCHEMA;\n model: string;\n title?: string;\n description?: string;\n allowUnknownParameters?: boolean;\n adapter: {\n type: string;\n } & Record<string, unknown>;\n content: {\n input: GenerationContentSpec[];\n };\n parameters?: Record<string, GenerationParameterSpec>;\n meta?: GenerationMetaSpec;\n examples?: Array<{\n title?: string;\n request: GenerateRequest;\n }>;\n};\n\nexport type GenerateRequest = {\n model: string;\n content: GenerationContentBlock[];\n parameters?: Record<string, unknown>;\n meta?: Record<string, unknown>;\n /** @deprecated Use meta. */\n metadata?: Record<string, unknown>;\n apiKey?: string;\n baseUrl?: string;\n};\n\nexport type ResolvedGenerationRequest = {\n declaration: GenerationModelDeclaration;\n request: GenerateRequest;\n parameters: Record<string, unknown>;\n meta: Record<string, unknown>;\n};\n\nexport type GenerationSourceResolver = (source: GenerationSource) => Promise<string> | string;\n\nexport type GenerationDebugEvent =\n | {\n type: \"request\";\n url: string;\n method: string;\n headers: Record<string, string>;\n body?: unknown;\n }\n | {\n type: \"response\";\n url: string;\n status: number;\n statusText: string;\n headers: Record<string, string>;\n trace: Record<string, string>;\n elapsedMs: number;\n body?: unknown;\n };\n\nexport type GenerationDebugLogger = (event: GenerationDebugEvent) => void;\n\nexport type GenerationDebugOptions = {\n enabled?: boolean;\n includeSensitive?: boolean;\n includeResponseBody?: boolean;\n logger?: GenerationDebugLogger;\n};\n\nexport type GenerationDebugConfig = GenerationDebugOptions & {\n enabled: boolean;\n includeSensitive: boolean;\n includeResponseBody: boolean;\n logger: GenerationDebugLogger;\n};\n\nexport type GenerationAdapterContext = {\n apiKey: string;\n baseUrl: string;\n fetch: typeof fetch;\n resolveSource: GenerationSourceResolver;\n};\n\nexport type GenerationAdapterInput = ResolvedGenerationRequest & {\n context: GenerationAdapterContext;\n};\n\nexport type GenerationAdapter = (input: GenerationAdapterInput) => Promise<GenerationContentBlock[]>;\n\nexport type CreateGenerationClientOptions = {\n apiKey?: string;\n baseUrl?: string;\n models?: GenerationModelDeclaration[];\n includeBuiltinModels?: boolean;\n fetch?: typeof fetch;\n sourceResolver?: GenerationSourceResolver;\n adapters?: Record<string, GenerationAdapter>;\n debug?: boolean | GenerationDebugOptions;\n};\n\nexport type GenerationClient = {\n generate(request: GenerateRequest): Promise<GenerationContentBlock[]>;\n validate(request: GenerateRequest): ResolvedGenerationRequest;\n listModels(): GenerationModelDeclaration[];\n getModel(model: string): GenerationModelDeclaration | null;\n stringifyModelConfig(model: string, options?: { format?: \"yaml\" | \"json\" }): string;\n exportModelConfig(model: string, filePath: string): Promise<void>;\n exportModelConfigs(directory: string): Promise<void>;\n};\n\nexport type GenerationClientWithResult = GenerationClient & {\n generateResult(request: GenerateRequest): Promise<GenerationResult>;\n};\n","import type { GenerationModelDeclaration } from \"./types.js\";\nimport { MODEL_SCHEMA } from \"./types.js\";\nimport { cloneJson } from \"./utils.js\";\n\nconst imageSizeParameters = {\n size: {\n type: \"string\",\n optional: true,\n default: \"1024x1024\",\n description: \"Output image size.\",\n examples: [\"auto\", \"1024x1024\", \"1536x1024\", \"1024x1536\", \"2048x2048\", \"2048x1152\", \"3840x2160\", \"2160x3840\"],\n },\n quality: {\n type: \"string\",\n optional: true,\n default: \"auto\",\n enum: [\"auto\", \"low\", \"medium\", \"high\"],\n description: \"Image quality.\",\n },\n} satisfies GenerationModelDeclaration[\"parameters\"];\n\nconst zImageTurboParameters = {\n size: {\n type: \"string\",\n optional: true,\n default: \"1024*1024\",\n enum: [\"1024*1024\", \"1536*1024\", \"1024*1536\", \"2048*2048\"],\n description: \"Output image size.\",\n },\n} satisfies GenerationModelDeclaration[\"parameters\"];\n\nconst qwenImageEditParameters = {\n size: {\n type: \"string\",\n optional: true,\n default: \"1024x1024\",\n description: \"Output image size.\",\n examples: [\"1024x1024\", \"768x1024\", \"1024x768\"],\n },\n} satisfies GenerationModelDeclaration[\"parameters\"];\n\nconst noobxlImageParameters = {\n size: {\n type: \"string\",\n optional: true,\n default: \"1024x1024\",\n description: \"Output image size as WIDTHxHEIGHT.\",\n examples: [\"1024x1024\", \"768x1024\", \"1024x768\"],\n },\n negative_prompt: {\n type: \"string\",\n optional: true,\n description: \"Content to avoid in generated images.\",\n },\n seed: {\n type: \"integer\",\n optional: true,\n min: 0,\n description: \"Random seed for reproducibility.\",\n },\n} satisfies GenerationModelDeclaration[\"parameters\"];\n\nconst noobxlImageToImageParameters = {\n ...noobxlImageParameters,\n controlnet_weight: {\n type: \"number\",\n optional: true,\n min: 0,\n max: 2,\n description: \"ControlNet tile weight. The provider default is 0.8.\",\n },\n ipadapter_face_image_ref: {\n type: \"string\",\n optional: true,\n description: \"Optional face reference image URL for IP-Adapter.\",\n },\n ipadapter_face_weight: {\n type: \"number\",\n optional: true,\n min: 0,\n max: 2,\n description: \"IP-Adapter face weight. The provider default is 0.6 when a face reference is supplied.\",\n },\n} satisfies GenerationModelDeclaration[\"parameters\"];\n\nfunction seedanceVideoParameters(defaults: { resolution: string; maxWait: number }) {\n return {\n duration: {\n type: \"integer\",\n optional: true,\n default: 5,\n min: 4,\n max: 15,\n description: \"Video duration in seconds.\",\n },\n resolution: {\n type: \"string\",\n optional: true,\n default: defaults.resolution,\n enum: [\"480p\", \"720p\", \"1080p\", \"2K\"],\n description: \"Output video resolution.\",\n },\n ratio: {\n type: \"string\",\n optional: true,\n default: \"16:9\",\n enum: [\"16:9\", \"9:16\", \"1:1\", \"4:3\", \"3:2\", \"2:3\", \"3:4\", \"21:9\", \"adaptive\"],\n description: \"Output aspect ratio. Use adaptive to let the model choose.\",\n },\n aspect_ratio: {\n type: \"string\",\n optional: true,\n enum: [\"16:9\", \"9:16\", \"1:1\", \"4:3\", \"3:2\", \"2:3\", \"3:4\", \"21:9\", \"adaptive\"],\n description: \"Deprecated alias for ratio.\",\n },\n fps: { type: \"integer\", optional: true, default: 30, min: 1, max: 60, description: \"Frames per second.\" },\n seed: { type: \"integer\", optional: true, description: \"Random seed for reproducibility.\" },\n generate_audio: { type: \"boolean\", optional: true, default: true, description: \"Generate synchronized audio.\" },\n return_last_frame: {\n type: \"boolean\",\n optional: true,\n default: true,\n description: \"Return the last frame as an image for chaining video segments.\",\n },\n camera_fixed: {\n type: \"boolean\",\n optional: true,\n default: false,\n description: \"Fix camera position when supported.\",\n },\n watermark: { type: \"boolean\", optional: true, default: false, description: \"Add AI Generated watermark.\" },\n poll_interval: {\n type: \"integer\",\n optional: true,\n default: 2,\n min: 1,\n max: 30,\n description: \"Seconds between task status checks.\",\n },\n max_wait: {\n type: \"integer\",\n optional: true,\n default: defaults.maxWait,\n min: 30,\n max: 1800,\n description: \"Maximum seconds to wait for task completion.\",\n },\n } satisfies GenerationModelDeclaration[\"parameters\"];\n}\n\nfunction klingVideoParameters(options: {\n maxDuration: number;\n negativePrompt?: boolean;\n seed?: boolean;\n sound?: boolean;\n}) {\n const parameters: GenerationModelDeclaration[\"parameters\"] = {\n duration: {\n type: \"integer\",\n optional: true,\n default: 5,\n min: 5,\n max: options.maxDuration,\n description: \"Video duration in seconds.\",\n },\n aspect_ratio: {\n type: \"string\",\n optional: true,\n default: \"16:9\",\n enum: [\"16:9\", \"9:16\", \"1:1\"],\n description: \"Output aspect ratio.\",\n },\n mode: {\n type: \"string\",\n optional: true,\n default: \"std\",\n enum: [\"std\", \"pro\"],\n description: \"Kling generation mode.\",\n },\n cfg_scale: {\n type: \"number\",\n optional: true,\n default: 0.5,\n min: 0,\n max: 1,\n description: \"Prompt adherence scale.\",\n },\n poll_interval: {\n type: \"integer\",\n optional: true,\n default: 5,\n min: 1,\n max: 30,\n description: \"Seconds between task status checks.\",\n },\n max_wait: {\n type: \"integer\",\n optional: true,\n default: 900,\n min: 30,\n max: 1800,\n description: \"Maximum seconds to wait for task completion.\",\n },\n };\n if (options.negativePrompt) {\n parameters.negative_prompt = {\n type: \"string\",\n optional: true,\n description: \"Negative prompt.\",\n };\n }\n if (options.seed) {\n parameters.seed = {\n type: \"integer\",\n optional: true,\n description: \"Random seed for reproducibility.\",\n };\n }\n if (options.sound) {\n parameters.sound = {\n type: \"string\",\n optional: true,\n enum: [\"on\", \"off\"],\n description: \"Enable or disable generated sound when supported.\",\n };\n }\n return parameters;\n}\n\nconst sunoTaskParameters = {\n poll_interval: {\n type: \"integer\",\n optional: true,\n default: 5,\n min: 1,\n max: 60,\n description: \"Seconds between task status checks.\",\n },\n max_wait: {\n type: \"integer\",\n optional: true,\n default: 600,\n min: 30,\n max: 3600,\n description: \"Maximum seconds to wait for task completion.\",\n },\n} satisfies GenerationModelDeclaration[\"parameters\"];\n\nconst sunoCommonMetaFields = {\n title: { type: \"string\", optional: true, description: \"Suno song title.\" },\n tags: { type: \"string\", optional: true, description: \"Comma-separated Suno music style tags.\" },\n gpt_description_prompt: { type: \"string\", optional: true, description: \"Suno inspiration-mode prompt.\" },\n negative_tags: { type: \"string\", optional: true, description: \"Styles to avoid.\" },\n generation_type: { type: \"string\", optional: true, description: \"Suno generation type.\" },\n make_instrumental: { type: \"boolean\", optional: true, default: false, description: \"Generate instrumental music.\" },\n metadata: { type: \"object\", optional: true, description: \"Suno provider metadata payload.\" },\n metadata_params: {\n type: \"object\",\n optional: true,\n description: \"Suno task-specific metadata payload.\",\n },\n} satisfies NonNullable<GenerationModelDeclaration[\"meta\"]>[\"fields\"];\n\nconst sunoTaskVariants = {\n extend: { required: [\"continue_clip_id\"] },\n upload_extend: { required: [\"continue_clip_id\"] },\n infill: { required: [\"continue_clip_id\", \"metadata_params\"] },\n fixed_infill: { required: [\"continue_clip_id\", \"metadata_params\"] },\n infill_intro: { required: [\"continue_clip_id\", \"metadata_params\"] },\n infill_outro: { required: [\"continue_clip_id\", \"metadata_params\"] },\n cover_infill: { required: [\"continue_clip_id\", \"metadata_params\"] },\n cover_extend: { required: [\"continue_clip_id\"] },\n artist_infill: { required: [\"continue_clip_id\", \"metadata_params\"] },\n artist_consistency: { required: [\"persona_id\", \"artist_clip_id\"] },\n cover: { required: [\"task_id\", \"continue_clip_id\"] },\n image_to_song: { requiredContent: [\"image\"], required: [\"metadata_params\"] },\n video_to_song: { requiredContent: [\"video\"], required: [\"metadata_params\"] },\n concat: { required: [\"clip_id\"] },\n sound: { required: [\"metadata_params\"] },\n underpainting: { required: [\"metadata_params\"] },\n overpainting: { required: [\"metadata_params\"] },\n remaster: { required: [\"metadata_params\"] },\n vox: { required: [\"artist_clip_id\"] },\n chop_sample_condition: { required: [\"metadata_params\"] },\n mashup_condition: { required: [\"metadata_params\"] },\n playlist_condition: { required: [\"metadata_params\"] },\n} satisfies NonNullable<GenerationModelDeclaration[\"meta\"]>[\"taskVariants\"];\n\nfunction sunoContentInput(\n options: { text?: \"required\" | \"optional\" | \"none\"; audio?: boolean; image?: boolean; video?: boolean } = {},\n): GenerationModelDeclaration[\"content\"][\"input\"] {\n const input: GenerationModelDeclaration[\"content\"][\"input\"] = [];\n if (options.text !== \"none\") {\n input.push({\n type: \"text\",\n required: options.text === \"required\",\n max: 16,\n merge: \"newline\",\n description:\n \"Prompt text. The adapter maps merged text to the operation's text field when that field is not provided.\",\n });\n }\n if (options.audio) {\n input.push({\n type: \"audio\",\n required: true,\n max: 1,\n sources: [\"url\", \"base64\"],\n description: \"Reference audio.\",\n });\n }\n if (options.image) {\n input.push({\n type: \"image\",\n required: true,\n max: 1,\n sources: [\"url\", \"base64\"],\n description: \"Reference image.\",\n });\n }\n if (options.video) {\n input.push({\n type: \"video\",\n required: true,\n max: 1,\n sources: [\"url\", \"base64\"],\n description: \"Reference video.\",\n });\n }\n return input;\n}\n\nconst sunoVersions = [\n { model: \"suno_music_chirp_fenix\", title: \"Suno Music Chirp Fenix v5.5\", mv: \"chirp-fenix\" },\n] as const;\n\nconst sunoMusicExample = {\n title: \"Music generation\",\n request: {\n model: \"suno_music_chirp_fenix\",\n content: [{ type: \"text\", text: \"uplifting cinematic pop with warm piano and clear chorus\" }],\n meta: {\n title: \"Warm Horizon\",\n tags: \"cinematic pop, warm piano\",\n make_instrumental: false,\n },\n },\n} satisfies NonNullable<GenerationModelDeclaration[\"examples\"]>[number];\n\nfunction sunoVersionModel(version: (typeof sunoVersions)[number]): GenerationModelDeclaration {\n return {\n schema: MODEL_SCHEMA,\n model: version.model,\n title: version.title,\n description: \"Suno text-to-music model with a fixed Suno model version.\",\n adapter: { type: \"suno.tasks\", operation: \"music\", payload: { mv: version.mv } },\n content: {\n input: sunoContentInput({ text: \"required\" }),\n },\n parameters: sunoTaskParameters,\n meta: {\n fields: sunoCommonMetaFields,\n },\n ...(version.model === \"suno_music_chirp_fenix\" ? { examples: [sunoMusicExample] } : {}),\n };\n}\n\nfunction sunoTaskModel(options: {\n model: string;\n title: string;\n description: string;\n task: string;\n mv?: string;\n content?: Parameters<typeof sunoContentInput>[0];\n fields?: NonNullable<GenerationModelDeclaration[\"meta\"]>[\"fields\"];\n examples?: GenerationModelDeclaration[\"examples\"];\n}): GenerationModelDeclaration {\n return {\n schema: MODEL_SCHEMA,\n model: options.model,\n title: options.title,\n description: options.description,\n adapter: {\n type: \"suno.tasks\",\n operation: \"music\",\n task: options.task,\n payload: { mv: options.mv ?? \"chirp-v5\" },\n },\n content: {\n input: sunoContentInput(options.content ?? { text: \"optional\" }),\n },\n parameters: sunoTaskParameters,\n meta: {\n fields: {\n ...sunoCommonMetaFields,\n ...options.fields,\n },\n taskVariants: sunoTaskVariants,\n },\n ...(options.examples ? { examples: options.examples } : {}),\n };\n}\n\nconst sunoModels = [\n ...sunoVersions.map(sunoVersionModel),\n {\n schema: MODEL_SCHEMA,\n model: \"suno_style_tags\",\n title: \"Suno Style Tags\",\n description: \"Suno style tag upsampling model.\",\n adapter: { type: \"suno.tasks\", operation: \"upsample_tags\" },\n content: {\n input: sunoContentInput({ text: \"required\" }),\n },\n },\n {\n schema: MODEL_SCHEMA,\n model: \"suno_upload_audio\",\n title: \"Suno Upload Audio\",\n description: \"Suno reference-audio upload model.\",\n adapter: { type: \"suno.tasks\", operation: \"upload_audio\", defaults: { name: \"reference-audio\", timeout: 120 } },\n content: {\n input: sunoContentInput({ text: \"none\", audio: true }),\n },\n parameters: sunoTaskParameters,\n meta: {\n fields: {\n name: { type: \"string\", optional: true, description: \"Upload name.\" },\n timeout: { type: \"integer\", optional: true, description: \"Upload timeout in seconds.\" },\n },\n },\n },\n sunoTaskModel({\n model: \"suno_image_to_song_chirp_v5\",\n title: \"Suno Image to Song Chirp v5.0\",\n description: \"Suno image-to-song task with a fixed chirp-v5 engine.\",\n task: \"image_to_song\",\n content: { text: \"optional\", image: true },\n fields: {\n metadata_params: { type: \"object\", description: \"Image-to-song metadata payload.\" },\n },\n }),\n sunoTaskModel({\n model: \"suno_video_to_song_chirp_v5\",\n title: \"Suno Video to Song Chirp v5.0\",\n description: \"Suno video-to-song task with a fixed chirp-v5 engine.\",\n task: \"video_to_song\",\n content: { text: \"optional\", video: true },\n fields: {\n metadata_params: { type: \"object\", description: \"Video-to-song metadata payload.\" },\n },\n }),\n sunoTaskModel({\n model: \"suno_sound_chirp_v5\",\n title: \"Suno Sound Chirp v5.0\",\n description: \"Suno sound-effect generation task with a fixed chirp-v5 engine.\",\n task: \"sound\",\n content: { text: \"optional\" },\n fields: {\n metadata_params: { type: \"object\", description: \"Sound task metadata payload.\" },\n },\n }),\n sunoTaskModel({\n model: \"suno_cover_chirp_v5\",\n title: \"Suno Cover Chirp v5.0\",\n description: \"Suno cover task with a fixed chirp-v5 engine.\",\n task: \"cover\",\n content: { text: \"optional\" },\n fields: {\n cover_clip_id: { type: \"string\", description: \"Clip id to cover.\" },\n task_id: { type: \"string\", description: \"Source Suno task id used for cover routing.\" },\n continue_clip_id: { type: \"string\", description: \"Source clip id used for cover generation.\" },\n continue_at: { type: \"number\", optional: true, description: \"Source clip continuation position in seconds.\" },\n },\n }),\n sunoTaskModel({\n model: \"suno_infill_chirp_v5\",\n title: \"Suno Infill Chirp v5.0\",\n description: \"Suno local edit task with a fixed chirp-v5 engine.\",\n task: \"infill\",\n content: { text: \"optional\" },\n fields: {\n continue_clip_id: { type: \"string\", description: \"Clip id to edit.\" },\n metadata_params: { type: \"object\", description: \"Infill timing and replacement metadata.\" },\n },\n }),\n sunoTaskModel({\n model: \"suno_vox_chirp_v5\",\n title: \"Suno Vox Chirp v5.0\",\n description: \"Suno hum-to-song task with a fixed chirp-v5 engine.\",\n task: \"vox\",\n content: { text: \"optional\" },\n fields: {\n artist_clip_id: { type: \"string\", description: \"Reference hum or vocal clip id.\" },\n },\n }),\n] satisfies GenerationModelDeclaration[];\n\nconst builtinModels = [\n {\n schema: MODEL_SCHEMA,\n model: \"gpt-image-2\",\n title: \"GPT Image 2\",\n description:\n \"Image generation model with optional reference images. Good for photorealistic scenes, detailed images, and image editing with references.\",\n adapter: { type: \"openai.images\" },\n content: {\n input: [\n { type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Prompt text.\" },\n {\n type: \"image\",\n required: false,\n max: 16,\n sources: [\"url\", \"base64\"],\n description: \"Optional reference images.\",\n },\n ],\n },\n parameters: imageSizeParameters,\n examples: [\n {\n title: \"Basic image\",\n request: {\n model: \"gpt-image-2\",\n content: [{ type: \"text\", text: \"a cyberpunk cat in neon rain\" }],\n parameters: { size: \"1024x1024\", quality: \"auto\" },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"z-image-turbo\",\n title: \"Z-Image Turbo\",\n description:\n \"Fast text-to-image generation through Neta Router. Z-Image Turbo accepts prompt text only; it does not support reference images.\",\n adapter: { type: \"openai.images\" },\n content: {\n input: [{ type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Prompt text.\" }],\n },\n parameters: zImageTurboParameters,\n examples: [\n {\n title: \"Text to image\",\n request: {\n model: \"z-image-turbo\",\n content: [\n { type: \"text\", text: \"a clean product-style image of a small red toy robot standing on a white desk\" },\n ],\n parameters: { size: \"1024*1024\" },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"qwen-image-edit\",\n title: \"Qwen Image Edit\",\n description: \"Neta Qwen image editing with one source image URL and an edit instruction.\",\n adapter: { type: \"openai.imageEdits\" },\n content: {\n input: [\n { type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Edit instruction.\" },\n {\n type: \"image\",\n required: true,\n min: 1,\n max: 1,\n sources: [\"url\"],\n description: \"Source image URL to edit.\",\n },\n ],\n },\n parameters: qwenImageEditParameters,\n examples: [\n {\n title: \"Edit image\",\n request: {\n model: \"qwen-image-edit\",\n content: [\n { type: \"text\", text: \"change the background to a clean white studio backdrop\" },\n { type: \"image\", source: { type: \"url\", url: \"https://example.com/input.png\" } },\n ],\n parameters: { size: \"1024x1024\" },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"gemini-3.1-flash-image-preview\",\n title: \"Gemini 3.1 Flash Image Preview\",\n description:\n \"Gemini image generation and editing model. Good for text rendering, infographics, style transfer, and iterative image editing with references.\",\n adapter: { type: \"gemini.generateContent\" },\n content: {\n input: [\n { type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Prompt text.\" },\n {\n type: \"image\",\n required: false,\n max: 14,\n sources: [\"url\", \"base64\"],\n description: \"Optional reference images.\",\n },\n ],\n },\n parameters: {\n aspect_ratio: {\n type: \"string\",\n optional: true,\n default: \"1:1\",\n enum: [\"1:1\", \"16:9\", \"4:3\", \"3:2\", \"3:4\", \"2:3\", \"9:16\", \"5:4\", \"4:5\", \"21:9\", \"1:4\", \"4:1\", \"1:8\", \"8:1\"],\n description: \"Output aspect ratio.\",\n },\n image_size: {\n type: \"string\",\n optional: true,\n default: \"2K\",\n enum: [\"512\", \"1K\", \"2K\", \"4K\"],\n description: \"Output image resolution.\",\n },\n },\n examples: [\n {\n title: \"Basic image\",\n request: {\n model: \"gemini-3.1-flash-image-preview\",\n content: [\n { type: \"text\", text: \"a vibrant infographic explaining photosynthesis with clear readable labels\" },\n ],\n parameters: { aspect_ratio: \"16:9\", image_size: \"1K\" },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"kling-text-to-video\",\n title: \"Kling Text To Video\",\n description: \"Kling latest text-to-video generation through Neta Router.\",\n adapter: { type: \"kling.videoGenerations\" },\n content: {\n input: [{ type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Video prompt.\" }],\n },\n parameters: klingVideoParameters({ maxDuration: 10, negativePrompt: true, seed: true }),\n examples: [\n {\n title: \"Text to video\",\n request: {\n model: \"kling-text-to-video\",\n content: [{ type: \"text\", text: \"a small paper boat floating on calm water, cinematic motion\" }],\n parameters: { duration: 5, aspect_ratio: \"16:9\", mode: \"std\" },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"kling-image-to-video\",\n title: \"Kling Image To Video\",\n description: \"Kling latest image-to-video generation through Neta Router.\",\n adapter: { type: \"kling.videoGenerations\" },\n content: {\n input: [\n { type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Video prompt.\" },\n {\n type: \"image\",\n required: false,\n max: 2,\n sources: [\"url\", \"base64\"],\n description:\n \"First frame and optional tail frame image input. Provider-native image input may be passed in meta.\",\n },\n ],\n },\n parameters: klingVideoParameters({ maxDuration: 10, negativePrompt: true, seed: true }),\n examples: [\n {\n title: \"Image to video\",\n request: {\n model: \"kling-image-to-video\",\n content: [\n { type: \"text\", text: \"gently turn toward the camera with soft natural motion\" },\n { type: \"image\", source: { type: \"url\", url: \"https://example.com/input.png\" } },\n ],\n parameters: { duration: 5, aspect_ratio: \"16:9\" },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"kling-omni-video\",\n title: \"Kling Omni Video\",\n description: \"Kling latest Omni-Video generation through Neta Router.\",\n adapter: { type: \"kling.videoGenerations\" },\n content: {\n input: [\n {\n type: \"text\",\n required: false,\n max: 16,\n merge: \"newline\",\n description: \"Optional video prompt. Use Kling Omni placeholders such as <<<image_1>>> with image_list.\",\n },\n {\n type: \"image\",\n required: false,\n max: 2,\n sources: [\"url\", \"base64\"],\n description: \"Optional simple image input. Provider-native Omni media arrays belong in request meta.\",\n },\n ],\n },\n parameters: klingVideoParameters({ maxDuration: 15, sound: true }),\n meta: {\n fields: {\n multi_shot: {\n type: \"boolean\",\n optional: true,\n description: \"Enable Kling Omni multi-shot mode.\",\n },\n shot_type: {\n type: \"string\",\n optional: true,\n description: \"Kling Omni shot type.\",\n },\n },\n },\n examples: [\n {\n title: \"Omni text to video\",\n request: {\n model: \"kling-omni-video\",\n content: [{ type: \"text\", text: \"a small paper boat floating on calm water, cinematic motion\" }],\n parameters: { duration: 5, aspect_ratio: \"16:9\", mode: \"std\" },\n },\n },\n {\n title: \"Omni image to video\",\n request: {\n model: \"kling-omni-video\",\n content: [{ type: \"text\", text: \"<<<image_1>>> gently turns toward the camera with soft natural motion\" }],\n parameters: { duration: 5, aspect_ratio: \"16:9\" },\n meta: {\n image_list: [{ image_url: \"https://example.com/input.png\", type: \"first_frame\" }],\n },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"kling-multi-image-to-video\",\n title: \"Kling Multi-Image Reference To Video\",\n description: \"Kling latest multi-image reference video generation through Neta Router.\",\n adapter: { type: \"kling.videoGenerations\" },\n content: {\n input: [\n { type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Video prompt.\" },\n {\n type: \"image\",\n required: false,\n max: 4,\n sources: [\"url\", \"base64\"],\n description: \"Reference image inputs. Provider-native image_list input may be passed in meta.\",\n },\n ],\n },\n parameters: klingVideoParameters({ maxDuration: 10, negativePrompt: true, seed: true }),\n examples: [\n {\n title: \"Multi-image reference to video\",\n request: {\n model: \"kling-multi-image-to-video\",\n content: [\n { type: \"text\", text: \"combine the references into one cinematic shot\" },\n { type: \"image\", source: { type: \"url\", url: \"https://example.com/reference-1.png\" } },\n { type: \"image\", source: { type: \"url\", url: \"https://example.com/reference-2.png\" } },\n ],\n parameters: { duration: 5, aspect_ratio: \"16:9\" },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"noobxl-t2i-onediff\",\n title: \"NoobXL T2I OneDiff\",\n description: \"NoobXL text-to-image model.\",\n allowUnknownParameters: true,\n adapter: { type: \"openai.images\" },\n content: {\n input: [{ type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Prompt text.\" }],\n },\n parameters: noobxlImageParameters,\n examples: [\n {\n title: \"Text to image\",\n request: {\n model: \"noobxl-t2i-onediff\",\n content: [{ type: \"text\", text: \"anime key visual, luminous city at night, crisp linework\" }],\n parameters: { size: \"1024x1024\", negative_prompt: \"low quality, blurry\" },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"noobxl-i2i-ipa-onediff\",\n title: \"NoobXL I2I IPA OneDiff\",\n description: \"NoobXL image-to-image model with optional face reference controls.\",\n allowUnknownParameters: true,\n adapter: { type: \"openai.images\" },\n content: {\n input: [\n { type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Prompt text.\" },\n {\n type: \"image\",\n required: true,\n min: 1,\n max: 1,\n sources: [\"url\", \"base64\"],\n description: \"Single source image.\",\n },\n ],\n },\n parameters: noobxlImageToImageParameters,\n examples: [\n {\n title: \"Image to image\",\n request: {\n model: \"noobxl-i2i-ipa-onediff\",\n content: [\n { type: \"text\", text: \"keep the character identity, redraw as a polished anime illustration\" },\n { type: \"image\", source: { type: \"url\", url: \"https://example.com/reference.png\" } },\n ],\n parameters: { size: \"1024x1024\", controlnet_weight: 0.8 },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"birefnet-general\",\n title: \"BiRefNet General\",\n description: \"BiRefNet single-image segmentation and background removal model.\",\n adapter: { type: \"openai.images\" },\n content: {\n input: [\n {\n type: \"image\",\n required: true,\n min: 1,\n max: 1,\n sources: [\"url\", \"base64\"],\n description: \"Single source image.\",\n },\n ],\n },\n examples: [\n {\n title: \"Remove background\",\n request: {\n model: \"birefnet-general\",\n content: [{ type: \"image\", source: { type: \"url\", url: \"https://example.com/portrait.png\" } }],\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"seedance-2-0\",\n title: \"Seedance 2.0\",\n description: \"Higher quality Ark video generation model for final production outputs.\",\n adapter: { type: \"ark.videoGenerations\" },\n content: {\n input: [\n { type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Video prompt.\" },\n {\n type: \"image\",\n required: false,\n max: 9,\n sources: [\"url\"],\n roles: [\"first_frame\", \"last_frame\", \"reference_image\"],\n description: \"Optional public URL image input. Use meta.role as first_frame, last_frame, or reference_image.\",\n },\n {\n type: \"video\",\n required: false,\n max: 1,\n sources: [\"url\"],\n roles: [\"reference_video\"],\n roleRequired: true,\n description: \"Optional public URL reference video input. Use meta.role as reference_video.\",\n },\n ],\n },\n parameters: seedanceVideoParameters({ resolution: \"1080p\", maxWait: 900 }),\n examples: [\n {\n title: \"Text to video\",\n request: {\n model: \"seedance-2-0\",\n content: [\n {\n type: \"text\",\n text: \"a cat playing piano in a cozy jazz club, cinematic lighting, smooth camera movement\",\n },\n ],\n parameters: { duration: 5, resolution: \"1080p\", ratio: \"16:9\" },\n },\n },\n ],\n },\n {\n schema: MODEL_SCHEMA,\n model: \"seedance-2-0-fast\",\n title: \"Seedance 2.0 Fast\",\n description:\n \"Fast Ark video generation model for drafts, rapid iteration, text-to-video, image-to-video, and reference-guided video generation.\",\n adapter: { type: \"ark.videoGenerations\" },\n content: {\n input: [\n { type: \"text\", required: true, min: 1, max: 16, merge: \"newline\", description: \"Video prompt.\" },\n {\n type: \"image\",\n required: false,\n max: 9,\n sources: [\"url\"],\n roles: [\"first_frame\", \"last_frame\", \"reference_image\"],\n description: \"Optional public URL image input. Use meta.role as first_frame, last_frame, or reference_image.\",\n },\n {\n type: \"video\",\n required: false,\n max: 1,\n sources: [\"url\"],\n roles: [\"reference_video\"],\n roleRequired: true,\n description: \"Optional public URL reference video input. Use meta.role as reference_video.\",\n },\n ],\n },\n parameters: seedanceVideoParameters({ resolution: \"720p\", maxWait: 600 }),\n examples: [\n {\n title: \"Text to video\",\n request: {\n model: \"seedance-2-0-fast\",\n content: [\n {\n type: \"text\",\n text: \"a cat playing piano in a cozy jazz club, cinematic lighting, smooth camera movement\",\n },\n ],\n parameters: { duration: 5, resolution: \"720p\", ratio: \"16:9\" },\n },\n },\n ],\n },\n ...sunoModels,\n] satisfies GenerationModelDeclaration[];\n\nexport const builtinGenerationModels: GenerationModelDeclaration[] = cloneJson(builtinModels);\n\nexport function getBuiltinGenerationModel(model: string): GenerationModelDeclaration | null {\n return cloneJson(builtinModels.find((declaration) => declaration.model === model) ?? null);\n}\n\nexport function listBuiltinGenerationModels(): GenerationModelDeclaration[] {\n return cloneJson(builtinModels);\n}\n"],"mappings":"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"}
|
|
@@ -26,6 +26,11 @@ type GenerationContentBlock = {
|
|
|
26
26
|
source: GenerationSource;
|
|
27
27
|
meta?: GenerationContentBlockMeta;
|
|
28
28
|
};
|
|
29
|
+
type GenerationResult = {
|
|
30
|
+
content: GenerationContentBlock[];
|
|
31
|
+
requestId?: string;
|
|
32
|
+
cost?: number;
|
|
33
|
+
};
|
|
29
34
|
type GenerationContentSpec = {
|
|
30
35
|
type: "text" | "image" | "video" | "audio";
|
|
31
36
|
required?: boolean;
|
|
@@ -107,8 +112,7 @@ type GenerateRequest = {
|
|
|
107
112
|
model: string;
|
|
108
113
|
content: GenerationContentBlock[];
|
|
109
114
|
parameters?: Record<string, unknown>;
|
|
110
|
-
meta?: Record<string, unknown>;
|
|
111
|
-
/** @deprecated Use meta. */
|
|
115
|
+
meta?: Record<string, unknown>; /** @deprecated Use meta. */
|
|
112
116
|
metadata?: Record<string, unknown>;
|
|
113
117
|
apiKey?: string;
|
|
114
118
|
baseUrl?: string;
|
|
@@ -180,11 +184,14 @@ type GenerationClient = {
|
|
|
180
184
|
exportModelConfig(model: string, filePath: string): Promise<void>;
|
|
181
185
|
exportModelConfigs(directory: string): Promise<void>;
|
|
182
186
|
};
|
|
187
|
+
type GenerationClientWithResult = GenerationClient & {
|
|
188
|
+
generateResult(request: GenerateRequest): Promise<GenerationResult>;
|
|
189
|
+
};
|
|
183
190
|
//#endregion
|
|
184
191
|
//#region src/builtins.d.ts
|
|
185
192
|
declare const builtinGenerationModels: GenerationModelDeclaration[];
|
|
186
193
|
declare function getBuiltinGenerationModel(model: string): GenerationModelDeclaration | null;
|
|
187
194
|
declare function listBuiltinGenerationModels(): GenerationModelDeclaration[];
|
|
188
195
|
//#endregion
|
|
189
|
-
export {
|
|
190
|
-
//# sourceMappingURL=builtins-
|
|
196
|
+
export { GenerationResult as C, ResolvedGenerationRequest as D, MODEL_SCHEMA as E, GenerationParameterSpec as S, GenerationSourceResolver as T, GenerationDebugOptions as _, GenerateRequest as a, GenerationMetaTaskVariantSpec as b, GenerationAdapterInput as c, GenerationContentBlock as d, GenerationContentBlockMeta as f, GenerationDebugLogger as g, GenerationDebugEvent as h, CreateGenerationClientOptions as i, GenerationClient as l, GenerationDebugConfig as m, getBuiltinGenerationModel as n, GenerationAdapter as o, GenerationContentSpec as p, listBuiltinGenerationModels as r, GenerationAdapterContext as s, builtinGenerationModels as t, GenerationClientWithResult as u, GenerationMetaFieldSpec as v, GenerationSource as w, GenerationModelDeclaration as x, GenerationMetaSpec as y };
|
|
197
|
+
//# sourceMappingURL=builtins-H7pH9ppJ.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtins-H7pH9ppJ.d.mts","names":[],"sources":["../src/types.ts","../src/builtins.ts"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as getBuiltinGenerationModel, r as listBuiltinGenerationModels, t as builtinGenerationModels } from "./builtins-
|
|
1
|
+
import { n as getBuiltinGenerationModel, r as listBuiltinGenerationModels, t as builtinGenerationModels } from "./builtins-H7pH9ppJ.mjs";
|
|
2
2
|
export { builtinGenerationModels, getBuiltinGenerationModel, listBuiltinGenerationModels };
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import { n as getBuiltinGenerationModel, r as listBuiltinGenerationModels, t as builtinGenerationModels } from "./builtins-
|
|
2
|
-
|
|
3
|
-
export { builtinGenerationModels, getBuiltinGenerationModel, listBuiltinGenerationModels };
|
|
1
|
+
import { n as getBuiltinGenerationModel, r as listBuiltinGenerationModels, t as builtinGenerationModels } from "./builtins-BvtiQicj.mjs";
|
|
2
|
+
export { builtinGenerationModels, getBuiltinGenerationModel, listBuiltinGenerationModels };
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { h as stringifyGenerationModelDeclaration, i as createGenerationClient, n as exportBuiltinModelConfigs, t as exportBuiltinModelConfig } from "../export-config-C_kTxv5h.mjs";
|
|
3
|
+
import { r as listBuiltinGenerationModels } from "../builtins-BvtiQicj.mjs";
|
|
4
4
|
import { mkdir, writeFile } from "node:fs/promises";
|
|
5
5
|
import { dirname, join } from "node:path";
|
|
6
|
-
|
|
7
6
|
//#region src/cli/index.ts
|
|
8
7
|
function usage() {
|
|
9
8
|
console.log(`neta-generation
|
|
@@ -141,7 +140,7 @@ main().catch((error) => {
|
|
|
141
140
|
console.error(error instanceof Error ? error.message : String(error));
|
|
142
141
|
process.exit(1);
|
|
143
142
|
});
|
|
144
|
-
|
|
145
143
|
//#endregion
|
|
146
|
-
export {
|
|
147
|
-
|
|
144
|
+
export {};
|
|
145
|
+
|
|
146
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/cli/index.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { listBuiltinGenerationModels } from \"../builtins.js\";\nimport { createGenerationClient } from \"../client.js\";\nimport { stringifyGenerationModelDeclaration } from \"../config.js\";\nimport { exportBuiltinModelConfig, exportBuiltinModelConfigs } from \"../export-config.js\";\nimport type { GenerationContentBlock } from \"../types.js\";\n\nfunction usage(): never {\n console.log(`neta-generation\n\nUsage:\n neta-generation generate <model> --prompt <text> [--param key=value] [--image-url <url>] [--out <directory>] [--debug] [--debug-sensitive] [--no-debug-response-body]\n neta-generation models list\n neta-generation models export <model> --out <file>\n neta-generation models export-all --out <directory>\n\nEnvironment:\n NETA_ROUTER_API_KEY API key used by generate\n`);\n process.exit(1);\n}\n\nfunction readOption(args: string[], name: string): string | null {\n const index = args.indexOf(name);\n if (index < 0) return null;\n return args[index + 1] ?? null;\n}\n\nfunction readOptions(args: string[], name: string): string[] {\n const values: string[] = [];\n for (let index = 0; index < args.length; index += 1) {\n const value = args[index + 1];\n if (args[index] === name && value) values.push(value);\n }\n return values;\n}\n\nfunction hasFlag(args: string[], name: string): boolean {\n return args.includes(name);\n}\n\nfunction parseParameterValue(raw: string): unknown {\n if (raw.startsWith(\"json:\")) return JSON.parse(raw.slice(5));\n if (raw === \"true\") return true;\n if (raw === \"false\") return false;\n return raw;\n}\n\nfunction parseParameter(value: string): [string, unknown] {\n const separator = value.indexOf(\"=\");\n if (separator <= 0) throw new Error(`Invalid --param value: ${value}`);\n return [value.slice(0, separator), parseParameterValue(value.slice(separator + 1))];\n}\n\nfunction outputSummary(block: GenerationContentBlock): unknown {\n if (block.type === \"text\") return block;\n return {\n type: block.type,\n source:\n block.source.type === \"url\"\n ? block.source\n : {\n type: \"base64\",\n mediaType: block.source.mediaType,\n bytes: Buffer.byteLength(block.source.data, \"base64\"),\n },\n meta: block.meta,\n };\n}\n\nasync function writeOutputFiles(directory: string, output: GenerationContentBlock[]): Promise<void> {\n await mkdir(directory, { recursive: true });\n await Promise.all(\n output.map(async (block, index) => {\n if (\n (block.type !== \"image\" && block.type !== \"video\" && block.type !== \"audio\") ||\n block.source.type !== \"base64\"\n ) {\n return;\n }\n const extension = block.source.mediaType.split(\"/\")[1]?.split(\"+\")[0] || block.type;\n await writeFile(\n join(directory, `${String(index + 1).padStart(2, \"0\")}.${extension}`),\n Buffer.from(block.source.data, \"base64\"),\n );\n }),\n );\n}\n\nasync function main() {\n const args = process.argv.slice(2);\n if (args[0] === \"generate\") {\n const model = args[1];\n const prompt = readOption(args, \"--prompt\");\n const apiKey = process.env.NETA_ROUTER_API_KEY;\n if (!model || !prompt || !apiKey) usage();\n\n const outputDirectory = readOption(args, \"--out\");\n const content: GenerationContentBlock[] = [\n { type: \"text\", text: prompt },\n ...readOptions(args, \"--image-url\").map((url) => ({\n type: \"image\" as const,\n source: { type: \"url\" as const, url },\n })),\n ];\n const parameters = Object.fromEntries(readOptions(args, \"--param\").map(parseParameter));\n const baseUrl = readOption(args, \"--base-url\");\n const debug = hasFlag(args, \"--debug\")\n ? {\n enabled: true,\n includeSensitive: hasFlag(args, \"--debug-sensitive\"),\n includeResponseBody: !hasFlag(args, \"--no-debug-response-body\"),\n }\n : undefined;\n const client = createGenerationClient({\n apiKey,\n ...(baseUrl ? { baseUrl } : {}),\n ...(debug ? { debug } : {}),\n });\n const output = await client.generate({ model, content, parameters });\n if (outputDirectory) await writeOutputFiles(outputDirectory, output);\n console.log(JSON.stringify(output.map(outputSummary), null, 2));\n return;\n }\n\n if (args[0] !== \"models\") usage();\n\n switch (args[1]) {\n case \"list\": {\n for (const model of listBuiltinGenerationModels()) console.log(model.model);\n return;\n }\n case \"export\": {\n const model = args[2];\n const out = readOption(args, \"--out\");\n if (!model || !out) usage();\n await mkdir(dirname(out), { recursive: true });\n await exportBuiltinModelConfig(model, out);\n console.log(out);\n return;\n }\n case \"export-all\": {\n const out = readOption(args, \"--out\");\n if (!out) usage();\n await exportBuiltinModelConfigs(out);\n console.log(out);\n return;\n }\n case \"dump\": {\n const out = readOption(args, \"--out\");\n const models = listBuiltinGenerationModels();\n if (out) {\n await mkdir(out, { recursive: true });\n await Promise.all(\n models.map((model) =>\n writeFile(join(out, `${model.model}.yaml`), stringifyGenerationModelDeclaration(model)),\n ),\n );\n }\n return;\n }\n default:\n usage();\n }\n}\n\nmain().catch((error) => {\n console.error(error instanceof Error ? error.message : String(error));\n process.exit(1);\n});\n"],"mappings":"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"}
|