bailian-cli-core 1.7.0 → 1.8.1
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/dist/index.d.mts +364 -69
- package/dist/index.mjs +15 -17
- package/package.json +4 -2
package/dist/index.d.mts
CHANGED
|
@@ -195,47 +195,6 @@ interface StreamChunk {
|
|
|
195
195
|
total_tokens: number;
|
|
196
196
|
};
|
|
197
197
|
}
|
|
198
|
-
/**
|
|
199
|
-
* Request body for `tongyi-intent-detect-v3` via the DashScope-native
|
|
200
|
-
* text-generation endpoint. Uses `{ model, input, parameters }` shape —
|
|
201
|
-
* NOT the OpenAI `{ model, messages }` shape.
|
|
202
|
-
*/
|
|
203
|
-
interface DashScopeIntentDetectRequest {
|
|
204
|
-
model: string;
|
|
205
|
-
input: {
|
|
206
|
-
messages: Array<{
|
|
207
|
-
role: "system" | "user" | "assistant";
|
|
208
|
-
content: string;
|
|
209
|
-
}>;
|
|
210
|
-
};
|
|
211
|
-
parameters?: {
|
|
212
|
-
result_format?: "message";
|
|
213
|
-
max_tokens?: number;
|
|
214
|
-
temperature?: number;
|
|
215
|
-
};
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Response envelope from the DashScope-native text-generation endpoint with
|
|
219
|
-
* `result_format: "message"`. The model's output lives under `output.choices`,
|
|
220
|
-
* mirroring the OpenAI shape but nested one level deeper.
|
|
221
|
-
*/
|
|
222
|
-
interface DashScopeIntentDetectResponse {
|
|
223
|
-
output: {
|
|
224
|
-
choices?: Array<{
|
|
225
|
-
finish_reason: string;
|
|
226
|
-
message: {
|
|
227
|
-
role: string;
|
|
228
|
-
content: string;
|
|
229
|
-
};
|
|
230
|
-
}>;
|
|
231
|
-
};
|
|
232
|
-
usage?: {
|
|
233
|
-
total_tokens?: number;
|
|
234
|
-
input_tokens?: number;
|
|
235
|
-
output_tokens?: number;
|
|
236
|
-
};
|
|
237
|
-
request_id: string;
|
|
238
|
-
}
|
|
239
198
|
interface DashScopeImageRequest {
|
|
240
199
|
model: string;
|
|
241
200
|
input: {
|
|
@@ -710,12 +669,6 @@ interface ConfigFile {
|
|
|
710
669
|
/** Alibaba Cloud OpenAPI AccessKey secret from `bl auth login --open-api`. */
|
|
711
670
|
access_key_secret?: string;
|
|
712
671
|
base_url?: string;
|
|
713
|
-
/**
|
|
714
|
-
* Dedicated base URL for the intent-detect model (tongyi-intent-detect-v3).
|
|
715
|
-
* Allows pointing the intent API at a different region/workspace than the
|
|
716
|
-
* main chat endpoint. Falls back to `base_url` when not set.
|
|
717
|
-
*/
|
|
718
|
-
intent_detect_base_url?: string;
|
|
719
672
|
output?: "text" | "json";
|
|
720
673
|
output_dir?: string;
|
|
721
674
|
timeout?: number;
|
|
@@ -748,8 +701,6 @@ interface Identity {
|
|
|
748
701
|
*/
|
|
749
702
|
interface Settings {
|
|
750
703
|
configPath?: string;
|
|
751
|
-
/** Dedicated base URL for intent-detect model; falls back to the model baseUrl at call site. */
|
|
752
|
-
intentDetectBaseUrl?: string;
|
|
753
704
|
output: "text" | "json";
|
|
754
705
|
/**
|
|
755
706
|
* Whether `output` came from an explicit source (flag/env/file) rather than
|
|
@@ -978,6 +929,28 @@ declare class Client {
|
|
|
978
929
|
openApiQueryJson<T extends OpenApiResponse>(opts: ClientOpenApiQueryOpts): Promise<T>;
|
|
979
930
|
}
|
|
980
931
|
//#endregion
|
|
932
|
+
//#region src/types/command-pack-manager.d.ts
|
|
933
|
+
interface CommandPackMutationResult {
|
|
934
|
+
name: string;
|
|
935
|
+
version?: string;
|
|
936
|
+
commands: string[];
|
|
937
|
+
}
|
|
938
|
+
interface CommandPackReport {
|
|
939
|
+
name: string;
|
|
940
|
+
version?: string;
|
|
941
|
+
source: "installed" | "linked";
|
|
942
|
+
status: "loaded" | "failed";
|
|
943
|
+
commands: string[];
|
|
944
|
+
error?: string;
|
|
945
|
+
}
|
|
946
|
+
/** Product-bound Command Pack management surface injected by the CLI runtime. */
|
|
947
|
+
interface CommandPackManager {
|
|
948
|
+
install(spec: string): Promise<CommandPackMutationResult>;
|
|
949
|
+
link(path: string): Promise<CommandPackMutationResult>;
|
|
950
|
+
list(): Promise<CommandPackReport[]>;
|
|
951
|
+
remove(name: string): Promise<void>;
|
|
952
|
+
}
|
|
953
|
+
//#endregion
|
|
981
954
|
//#region src/types/command.d.ts
|
|
982
955
|
/** A presence flag: `--quiet`. No value; absent → false. */
|
|
983
956
|
interface SwitchFlag {
|
|
@@ -1138,10 +1111,12 @@ interface CommandContext<F extends FlagsDef = FlagsDef> {
|
|
|
1138
1111
|
flags: ParsedFlags<F>;
|
|
1139
1112
|
/** Network surface; the credential for the command's `auth` is pre-injected. */
|
|
1140
1113
|
client: Client;
|
|
1141
|
-
/**
|
|
1142
|
-
configStore
|
|
1143
|
-
/**
|
|
1144
|
-
authStore
|
|
1114
|
+
/** 配置持久化能力;lint 限定 commands/config/** 使用。 */
|
|
1115
|
+
configStore: ConfigStore;
|
|
1116
|
+
/** 鉴权持久化能力;lint 限定 commands/auth/** 使用。 */
|
|
1117
|
+
authStore: AuthStore;
|
|
1118
|
+
/** Command Pack 管理能力;lint 限定 commands/plugin/** 使用。 */
|
|
1119
|
+
commandPacks: CommandPackManager;
|
|
1145
1120
|
}
|
|
1146
1121
|
/**
|
|
1147
1122
|
* A command. Generic over its flags `F` so `run`/`validate` receive precisely
|
|
@@ -1283,6 +1258,11 @@ declare function callConsoleGateway(target: ConsoleGatewayTarget, timeoutSec: nu
|
|
|
1283
1258
|
}: ConsoleGatewayRequest): Promise<unknown>;
|
|
1284
1259
|
//#endregion
|
|
1285
1260
|
//#region src/console/models.d.ts
|
|
1261
|
+
declare const MODEL_LIST_API = "zeldaHttp.dashscopeModel./zelda/api/v1/modelCenter/listFoundationModels";
|
|
1262
|
+
declare const PREDICT_CONFIG_API = "zeldaEasy.bmp.modelPredictRpcService.getPredictParamConfig";
|
|
1263
|
+
type ConsoleCall = (api: string, data: Record<string, unknown>) => Promise<unknown>;
|
|
1264
|
+
/** Unwrap the DataV2 double-envelope that console gateway returns. */
|
|
1265
|
+
declare function unwrapResponse(result: Record<string, unknown>): Record<string, unknown>;
|
|
1286
1266
|
interface ModelListParams {
|
|
1287
1267
|
pageNo?: number;
|
|
1288
1268
|
pageSize?: number;
|
|
@@ -1295,7 +1275,69 @@ interface ModelListResult {
|
|
|
1295
1275
|
models: Record<string, unknown>[];
|
|
1296
1276
|
}
|
|
1297
1277
|
/** Page the console model-list API. `call` makes the gateway request (e.g. `client.console`). */
|
|
1298
|
-
declare function fetchModelList(call:
|
|
1278
|
+
declare function fetchModelList(call: ConsoleCall, params?: ModelListParams): Promise<ModelListResult>;
|
|
1279
|
+
interface ModelPriceInfo {
|
|
1280
|
+
type?: string;
|
|
1281
|
+
priceUnit?: string;
|
|
1282
|
+
price?: string | number;
|
|
1283
|
+
[key: string]: unknown;
|
|
1284
|
+
}
|
|
1285
|
+
interface ModelGroupItem {
|
|
1286
|
+
model: string;
|
|
1287
|
+
name: string;
|
|
1288
|
+
description?: string;
|
|
1289
|
+
shortDescription?: string;
|
|
1290
|
+
provider?: string;
|
|
1291
|
+
capabilities?: string[];
|
|
1292
|
+
features?: string[];
|
|
1293
|
+
contextWindow?: number;
|
|
1294
|
+
maxOutputTokens?: number;
|
|
1295
|
+
maxInputTokens?: number;
|
|
1296
|
+
inferenceMetadata?: Record<string, unknown>;
|
|
1297
|
+
prices?: ModelPriceInfo[];
|
|
1298
|
+
qpmInfo?: Record<string, Record<string, unknown>>;
|
|
1299
|
+
docUrl?: string;
|
|
1300
|
+
versionTag?: string;
|
|
1301
|
+
openSource?: boolean;
|
|
1302
|
+
category?: string;
|
|
1303
|
+
predictConfig?: PredictConfigEntry[];
|
|
1304
|
+
[key: string]: unknown;
|
|
1305
|
+
}
|
|
1306
|
+
interface ModelGroup {
|
|
1307
|
+
model: string;
|
|
1308
|
+
name: string;
|
|
1309
|
+
description?: string;
|
|
1310
|
+
updateAt?: string;
|
|
1311
|
+
items: ModelGroupItem[];
|
|
1312
|
+
[key: string]: unknown;
|
|
1313
|
+
}
|
|
1314
|
+
interface ModelGroupParams {
|
|
1315
|
+
pageNo?: number;
|
|
1316
|
+
pageSize?: number;
|
|
1317
|
+
name?: string;
|
|
1318
|
+
providers?: string[];
|
|
1319
|
+
capabilities?: string[];
|
|
1320
|
+
features?: string[];
|
|
1321
|
+
contextWindows?: string[];
|
|
1322
|
+
querySampleCode?: boolean;
|
|
1323
|
+
}
|
|
1324
|
+
interface ModelGroupResult {
|
|
1325
|
+
total: number;
|
|
1326
|
+
groups: ModelGroup[];
|
|
1327
|
+
}
|
|
1328
|
+
/** Fetch model families with optional filters and query flags. */
|
|
1329
|
+
declare function fetchModelGroups(call: ConsoleCall, params?: ModelGroupParams): Promise<ModelGroupResult>;
|
|
1330
|
+
/** Fetch a single model family with all detail flags enabled. */
|
|
1331
|
+
declare function fetchModelDetail(call: ConsoleCall, modelKey: string): Promise<ModelGroup | null>;
|
|
1332
|
+
interface PredictConfigEntry {
|
|
1333
|
+
name: string;
|
|
1334
|
+
key: string;
|
|
1335
|
+
default?: unknown;
|
|
1336
|
+
tip?: string;
|
|
1337
|
+
range?: unknown;
|
|
1338
|
+
}
|
|
1339
|
+
/** Fetch the input parameter schema for a specific model. */
|
|
1340
|
+
declare function fetchPredictConfig(call: ConsoleCall, modelId: string): Promise<PredictConfigEntry[] | null>;
|
|
1299
1341
|
//#endregion
|
|
1300
1342
|
//#region src/config/paths.d.ts
|
|
1301
1343
|
declare function getConfigDir(): string;
|
|
@@ -1499,9 +1541,15 @@ interface ValidateOpts {
|
|
|
1499
1541
|
* platform ten minutes in.
|
|
1500
1542
|
*/
|
|
1501
1543
|
schema?: DatasetSchema;
|
|
1544
|
+
/**
|
|
1545
|
+
* Model identifier (`--model`) forwarded for schema-agnostic cross-checks —
|
|
1546
|
+
* e.g. the video validator uses it to verify a `kf2v` model is paired with
|
|
1547
|
+
* first+last-frame data. Optional: absent for bare file-id flows.
|
|
1548
|
+
*/
|
|
1549
|
+
model?: string;
|
|
1502
1550
|
}
|
|
1503
1551
|
/** The schemas a `.jsonl` record can be validated against. */
|
|
1504
|
-
type DatasetSchema = "chatml" | "dpo" | "cpt";
|
|
1552
|
+
type DatasetSchema = "chatml" | "dpo" | "cpt" | "tts" | "image" | "video";
|
|
1505
1553
|
type ValidationSeverity = "error" | "warning";
|
|
1506
1554
|
interface ValidationIssue {
|
|
1507
1555
|
severity: ValidationSeverity;
|
|
@@ -1541,6 +1589,78 @@ interface ValidatorSpec {
|
|
|
1541
1589
|
validate(filePath: string, opts: ValidateOpts): Promise<ValidationResult>;
|
|
1542
1590
|
}
|
|
1543
1591
|
//#endregion
|
|
1592
|
+
//#region src/finetune/profiles/types.d.ts
|
|
1593
|
+
/**
|
|
1594
|
+
* Data modality detected by the inspector from file content.
|
|
1595
|
+
*
|
|
1596
|
+
* The inspector peeks at the first record of a JSONL or the `data.jsonl` inside
|
|
1597
|
+
* a ZIP to determine what kind of data the file carries. This is orthogonal to
|
|
1598
|
+
* the training type — `sft-lora` accepts both `.jsonl` (text) and `.zip`
|
|
1599
|
+
* (audio / image / video).
|
|
1600
|
+
*
|
|
1601
|
+
* `"image-i2i"` is a subtype of `"image"` — the first record contains an
|
|
1602
|
+
* `input_img` field (image-to-image). `"video-kf2v"` is a subtype of `"video"`
|
|
1603
|
+
* — the first record contains a `last_frame_path` field (first+last-frame video,
|
|
1604
|
+
* Wan kf2v). Profiles can branch on subtypes to adjust hyper-parameter defaults
|
|
1605
|
+
* or cross-check the chosen `--model`. Callers that don't care about a subtype
|
|
1606
|
+
* can normalise `"image-i2i"` → `"image"` and `"video-kf2v"` → `"video"`.
|
|
1607
|
+
*/
|
|
1608
|
+
type DataModality = "text" | "audio" | "image" | "image-i2i" | "video" | "video-kf2v";
|
|
1609
|
+
/**
|
|
1610
|
+
* A training profile. One per `--training-type` CLI value.
|
|
1611
|
+
*
|
|
1612
|
+
* The profile owns all modality-specific branching internally — callers
|
|
1613
|
+
* (`create.ts`) interact with it through a uniform interface and never need
|
|
1614
|
+
* to know whether the data is text, audio, or something else.
|
|
1615
|
+
*/
|
|
1616
|
+
interface TrainingProfile {
|
|
1617
|
+
/** CLI vocabulary: the value users pass to `--training-type`. */
|
|
1618
|
+
clientTrainingType: string;
|
|
1619
|
+
/** Server `training_type` for the POST /fine-tunes request body. */
|
|
1620
|
+
serverTrainingType: string;
|
|
1621
|
+
/** File extensions this profile accepts (lower-case, with dot). */
|
|
1622
|
+
acceptedExtensions: string[];
|
|
1623
|
+
/**
|
|
1624
|
+
* Validate the training data file. The profile internally routes to the
|
|
1625
|
+
* correct validator based on `modality` (detected by the data inspector).
|
|
1626
|
+
*/
|
|
1627
|
+
validate(filePath: string, modality: DataModality, opts: ValidateOpts): Promise<ValidationResult>;
|
|
1628
|
+
/**
|
|
1629
|
+
* Build the `hyper_parameters` object for the API request. Merges user-supplied
|
|
1630
|
+
* flags with modality-specific defaults (e.g. audio TTS uses `lm_max_epoch` /
|
|
1631
|
+
* `fm_max_epoch`, text SFT uses `n_epochs` / `batch_size`).
|
|
1632
|
+
*/
|
|
1633
|
+
resolveHyperParameters(modality: DataModality, flags: Record<string, unknown>): Record<string, unknown>;
|
|
1634
|
+
/**
|
|
1635
|
+
* Whether a specific pre-flight gate should be skipped for the given modality.
|
|
1636
|
+
* Common gates: `"batch_size"` (samples must exceed batch_size), etc.
|
|
1637
|
+
* Audio TTS skips the batch-size gate (no batch_size hyper-parameter).
|
|
1638
|
+
*/
|
|
1639
|
+
shouldSkipGate(gate: string, modality: DataModality): boolean;
|
|
1640
|
+
/**
|
|
1641
|
+
* Whether the model-capability pre-flight check should be skipped.
|
|
1642
|
+
* Audio models (e.g. cosyvoice-v3-flash) report `supports.sft = false` in
|
|
1643
|
+
* `listFoundationModels` but the API accepts `efficient_sft` — the check
|
|
1644
|
+
* would incorrectly block the submission.
|
|
1645
|
+
*/
|
|
1646
|
+
shouldSkipCapabilityCheck(modality: DataModality): boolean;
|
|
1647
|
+
}
|
|
1648
|
+
//#endregion
|
|
1649
|
+
//#region src/dataset/inspect.d.ts
|
|
1650
|
+
/**
|
|
1651
|
+
* Inspect a file and return its data modality.
|
|
1652
|
+
*
|
|
1653
|
+
* `.jsonl` → read the first non-blank line, parse JSON, check fields.
|
|
1654
|
+
* `.zip` → locate `data.jsonl` inside the archive, read its first line.
|
|
1655
|
+
*
|
|
1656
|
+
* Image data returns `"image"` (T2I) or `"image-i2i"` (I2I, first record
|
|
1657
|
+
* has `input_img`). Callers that don't distinguish can normalise to `"image"`.
|
|
1658
|
+
*
|
|
1659
|
+
* Throws USAGE if the file extension is not `.jsonl` or `.zip`, or if the
|
|
1660
|
+
* content cannot be parsed.
|
|
1661
|
+
*/
|
|
1662
|
+
declare function detectModality(filePath: string): Promise<DataModality>;
|
|
1663
|
+
//#endregion
|
|
1544
1664
|
//#region src/dataset/validate/registry.d.ts
|
|
1545
1665
|
/** Lookup the validator that handles a given file extension. */
|
|
1546
1666
|
declare function pickValidator(filePath: string): ValidatorSpec;
|
|
@@ -1564,6 +1684,12 @@ declare function listSupportedFormats(): {
|
|
|
1564
1684
|
* raises the cap or differentiates per-purpose limits.
|
|
1565
1685
|
*/
|
|
1566
1686
|
declare const MAX_DATASET_BYTES: number;
|
|
1687
|
+
/**
|
|
1688
|
+
* Image / video ZIP size cap — 1 GB per the platform docs (vs 300 MB for
|
|
1689
|
+
* text / audio). Used by `bl dataset upload` for media schemas and by the
|
|
1690
|
+
* `sft-lora` training profile for image / video validation.
|
|
1691
|
+
*/
|
|
1692
|
+
declare const MAX_MEDIA_ZIP_BYTES: number;
|
|
1567
1693
|
/**
|
|
1568
1694
|
* Parse a `--schema` CLI value into a `DatasetSchema` (or `undefined` for
|
|
1569
1695
|
* auto-detect). Single source of truth for the schema vocabulary so `dataset
|
|
@@ -1804,7 +1930,7 @@ declare function listCheckpoints(client: Client, jobId: string, signal?: AbortSi
|
|
|
1804
1930
|
* GET /api/v1/fine-tunes/{job_id}/export/{checkpoint}?model_name={name}
|
|
1805
1931
|
*
|
|
1806
1932
|
* Publishes a training checkpoint as a deployable model — required before
|
|
1807
|
-
* `
|
|
1933
|
+
* `deploy <modality> create` can target it. The platform may auto-export the best
|
|
1808
1934
|
* checkpoint on SUCCEEDED, but explicit export is the canonical path.
|
|
1809
1935
|
*/
|
|
1810
1936
|
declare function exportCheckpoint(client: Client, jobId: string, checkpoint: string, modelName: string, signal?: AbortSignal): Promise<ExportCheckpointResponse>;
|
|
@@ -1874,8 +2000,6 @@ interface ModelCapability {
|
|
|
1874
2000
|
}
|
|
1875
2001
|
/** True when `value` is one of the accepted CLI training types. */
|
|
1876
2002
|
declare function isTrainingTypeCli(value: string): value is TrainingTypeCli;
|
|
1877
|
-
/** Map a CLI training type to the server `training_type` for the request body. */
|
|
1878
|
-
declare function toServerTrainingType(value: TrainingTypeCli): string;
|
|
1879
2003
|
/** The (method, variant) pair a CLI training type resolves to. */
|
|
1880
2004
|
declare function trainingTypeMethodVariant(value: TrainingTypeCli): {
|
|
1881
2005
|
method: string;
|
|
@@ -1949,6 +2073,12 @@ interface BatchSizeGateResult {
|
|
|
1949
2073
|
*/
|
|
1950
2074
|
declare function preflightBatchSizeGate(input: BatchSizeGateInput): BatchSizeGateResult;
|
|
1951
2075
|
//#endregion
|
|
2076
|
+
//#region src/finetune/profiles/registry.d.ts
|
|
2077
|
+
/** Look up a profile by its CLI training-type name. Throws USAGE if unknown. */
|
|
2078
|
+
declare function getProfile(clientTrainingType: string): TrainingProfile;
|
|
2079
|
+
/** All registered CLI training-type names (for help text / whitelisting). */
|
|
2080
|
+
declare function listTrainingTypes(): string[];
|
|
2081
|
+
//#endregion
|
|
1952
2082
|
//#region src/deploy/types.d.ts
|
|
1953
2083
|
/**
|
|
1954
2084
|
* Model-deployment API types.
|
|
@@ -2067,8 +2197,8 @@ interface CreateDeploymentRequest {
|
|
|
2067
2197
|
plan: string;
|
|
2068
2198
|
/** Required by API even for token-billed (lora) plans where it is ignored — CLI injects 1. */
|
|
2069
2199
|
capacity?: number;
|
|
2070
|
-
/**
|
|
2071
|
-
|
|
2200
|
+
/** Deploy spec id (e.g. "MU1", "dps-..."), sent as `deploy_spec` in POST body. */
|
|
2201
|
+
deploy_spec?: string;
|
|
2072
2202
|
/**
|
|
2073
2203
|
* PTU capacity (provisioned throughput limits). Only effective when
|
|
2074
2204
|
* `plan === "ptu"`. The doc says this defaults to 10000/1000 when omitted,
|
|
@@ -2076,9 +2206,27 @@ interface CreateDeploymentRequest {
|
|
|
2076
2206
|
* info"), so the CLI treats it as required for ptu.
|
|
2077
2207
|
*/
|
|
2078
2208
|
ptu_capacity?: PtuCapacity;
|
|
2209
|
+
/**
|
|
2210
|
+
* AIGC generation config for fine-tuned Wan video (i2v/kf2v) LoRA deployments.
|
|
2211
|
+
* Ignored by non-video plans. See `AigcConfig`.
|
|
2212
|
+
*/
|
|
2213
|
+
aigc_config?: AigcConfig;
|
|
2079
2214
|
/** Future-compat: arbitrary additional fields are forwarded as-is. */
|
|
2080
2215
|
[k: string]: unknown;
|
|
2081
2216
|
}
|
|
2217
|
+
/**
|
|
2218
|
+
* AIGC generation config — used when deploying fine-tuned Wan video (i2v/kf2v)
|
|
2219
|
+
* LoRA models. Controls how prompts are applied at inference time:
|
|
2220
|
+
* - use_input_prompt=false: ignore the caller's prompt, use the preset
|
|
2221
|
+
* `prompt` template instead (the common LoRA case).
|
|
2222
|
+
* - use_input_prompt=true: honor the caller's prompt.
|
|
2223
|
+
* `lora_prompt_default` is the default trigger-word phrase appended for the LoRA.
|
|
2224
|
+
*/
|
|
2225
|
+
interface AigcConfig {
|
|
2226
|
+
use_input_prompt?: boolean;
|
|
2227
|
+
prompt?: string;
|
|
2228
|
+
lora_prompt_default?: string;
|
|
2229
|
+
}
|
|
2082
2230
|
/** PTU throughput limits — only used when `plan === "ptu"`. */
|
|
2083
2231
|
interface PtuCapacity {
|
|
2084
2232
|
/** Max input tokens per minute (all models). */
|
|
@@ -2219,6 +2367,156 @@ declare function scaleDeployment(client: Client, deployedModel: string, body: Sc
|
|
|
2219
2367
|
*/
|
|
2220
2368
|
declare function updateDeployment(client: Client, deployedModel: string, body: UpdateDeploymentRequest, signal?: AbortSignal): Promise<UpdateDeploymentResponse>;
|
|
2221
2369
|
//#endregion
|
|
2370
|
+
//#region src/deploy/constants.d.ts
|
|
2371
|
+
/**
|
|
2372
|
+
* Deploy-domain constants — billing plans, billing methods and template
|
|
2373
|
+
* charge types. Centralised here so no `deploy` command carries a magic
|
|
2374
|
+
* string for these server-contract values.
|
|
2375
|
+
*/
|
|
2376
|
+
/** Billing plan (`--plan` value, matches the server's deployment plan). */
|
|
2377
|
+
declare const DEPLOY_PLAN: {
|
|
2378
|
+
/** Token-billed; the CLI default. */readonly LORA: "lora"; /** Token-billed, provisioned throughput. */
|
|
2379
|
+
readonly PTU: "ptu"; /** Model-unit-billed. */
|
|
2380
|
+
readonly MU: "mu";
|
|
2381
|
+
};
|
|
2382
|
+
type DeployPlan = (typeof DEPLOY_PLAN)[keyof typeof DEPLOY_PLAN];
|
|
2383
|
+
/** CLI default plan when `--plan` is omitted. */
|
|
2384
|
+
declare const DEFAULT_DEPLOY_PLAN: DeployPlan;
|
|
2385
|
+
/** Deployment target modality — fixes the default plan when `--plan` is omitted. */
|
|
2386
|
+
type DeployModality = "text" | "audio" | "image";
|
|
2387
|
+
/**
|
|
2388
|
+
* Default plan per modality when `--plan` is omitted.
|
|
2389
|
+
*
|
|
2390
|
+
* The contract differs by modality (verified against the DashScope docs):
|
|
2391
|
+
* - text / image LoRA outputs deploy Token-billed (`lora`) — the image
|
|
2392
|
+
* fine-tune guide's deploy example uses `plan: "lora"`.
|
|
2393
|
+
* - CosyVoice (audio TTS) outputs deploy model-unit-billed (`mu`) — the
|
|
2394
|
+
* speech-synthesis guide fixes `plan: "mu"` and requires deploy_spec /
|
|
2395
|
+
* capacity / billing_method (all auto-picked by the mu strategy).
|
|
2396
|
+
*/
|
|
2397
|
+
declare function defaultDeployPlan(modality: DeployModality): DeployPlan;
|
|
2398
|
+
/** Billing method (`billing_method`, plan=mu only). */
|
|
2399
|
+
declare const BILLING_METHOD: {
|
|
2400
|
+
/** Post-paid (currently the only server-supported value). */readonly POST_PAY: "POST_PAY"; /** Pre-paid. */
|
|
2401
|
+
readonly PRE_PAY: "PRE_PAY";
|
|
2402
|
+
};
|
|
2403
|
+
type BillingMethod = (typeof BILLING_METHOD)[keyof typeof BILLING_METHOD];
|
|
2404
|
+
/** Default billing method for plan=mu when `--billing-method` is omitted. */
|
|
2405
|
+
declare const DEFAULT_BILLING_METHOD: BillingMethod;
|
|
2406
|
+
/** Template charge type (`charge_type`) returned by the deployable-models catalog. */
|
|
2407
|
+
declare const CHARGE_TYPE: {
|
|
2408
|
+
readonly POST_PAID: "post_paid";
|
|
2409
|
+
readonly PRE_PAID: "pre_paid";
|
|
2410
|
+
};
|
|
2411
|
+
type ChargeType = (typeof CHARGE_TYPE)[keyof typeof CHARGE_TYPE];
|
|
2412
|
+
//#endregion
|
|
2413
|
+
//#region src/deploy/plans.d.ts
|
|
2414
|
+
/** Plan-relevant subset of `deploy <modality> create` flags (parsed flags satisfy this shape). */
|
|
2415
|
+
interface CreatePlanFlags {
|
|
2416
|
+
plan?: string;
|
|
2417
|
+
deploySpec?: string;
|
|
2418
|
+
capacity?: number;
|
|
2419
|
+
billingMethod?: string;
|
|
2420
|
+
inputTpm?: number;
|
|
2421
|
+
outputTpm?: number;
|
|
2422
|
+
thinkingOutputTpm?: number;
|
|
2423
|
+
}
|
|
2424
|
+
interface PlanContext {
|
|
2425
|
+
client: Client;
|
|
2426
|
+
/** True in --dry-run: strategies must skip side-effecting catalog lookups. */
|
|
2427
|
+
dryRun: boolean;
|
|
2428
|
+
/** CLI bin name, for usage hints in error messages. */
|
|
2429
|
+
binName: string;
|
|
2430
|
+
flags: CreatePlanFlags;
|
|
2431
|
+
/** Underlying model identifier (`--model`). */
|
|
2432
|
+
model: string;
|
|
2433
|
+
/** Console display name (`--name`). */
|
|
2434
|
+
name: string;
|
|
2435
|
+
}
|
|
2436
|
+
interface PlanResolved {
|
|
2437
|
+
/**
|
|
2438
|
+
* Plan-specific fields to merge into the request body. The shared envelope
|
|
2439
|
+
* (`{model_name, name, plan}`) is added by the caller.
|
|
2440
|
+
*/
|
|
2441
|
+
body: Record<string, unknown>;
|
|
2442
|
+
}
|
|
2443
|
+
interface PlanStrategy {
|
|
2444
|
+
/** Plan id, matches `--plan` CLI value. */
|
|
2445
|
+
name: string;
|
|
2446
|
+
/** Returns an error message when required flags are missing; undefined to pass. */
|
|
2447
|
+
validateFlags(flags: CreatePlanFlags): string | undefined;
|
|
2448
|
+
/**
|
|
2449
|
+
* Resolve plan-specific bits to a body fragment. May call into the API
|
|
2450
|
+
* (e.g. mu auto-picks a template from the deployable-models catalog).
|
|
2451
|
+
*/
|
|
2452
|
+
resolve(ctx: PlanContext): Promise<PlanResolved>;
|
|
2453
|
+
}
|
|
2454
|
+
/**
|
|
2455
|
+
* Registry of supported plans. Adding a new plan = one entry here. The
|
|
2456
|
+
* catalog lists some additional plan names (e.g. `ptu_v2`) that are NOT
|
|
2457
|
+
* accepted by the create endpoint, so the dispatcher in the command will
|
|
2458
|
+
* reject anything outside this table with a clear USAGE error.
|
|
2459
|
+
*/
|
|
2460
|
+
declare const STRATEGIES: Record<string, PlanStrategy>;
|
|
2461
|
+
/** Throws USAGE if `plan` is not in the strategy table. */
|
|
2462
|
+
declare function pickPlanStrategy(plan: string): PlanStrategy;
|
|
2463
|
+
//#endregion
|
|
2464
|
+
//#region src/types/command-pack.d.ts
|
|
2465
|
+
/** Current Command Pack protocol version understood by this release. */
|
|
2466
|
+
declare const COMMAND_PACK_API_VERSION: 1;
|
|
2467
|
+
/** `package.json#bailianCli` metadata for a Command Pack package. */
|
|
2468
|
+
interface CommandPackMeta {
|
|
2469
|
+
type: "command-pack";
|
|
2470
|
+
apiVersion: number;
|
|
2471
|
+
/** ESM entry path relative to the package root. */
|
|
2472
|
+
entry: string;
|
|
2473
|
+
/** Optional minimum compatible bailian-cli version. */
|
|
2474
|
+
minCliVersion?: string;
|
|
2475
|
+
}
|
|
2476
|
+
/** Explicit credential delegation surface available only to trusted Command Packs. */
|
|
2477
|
+
interface CommandPackCredentials {
|
|
2478
|
+
apiKey(): ApiKeyCredential;
|
|
2479
|
+
}
|
|
2480
|
+
interface CommandPackOutputOptions {
|
|
2481
|
+
/** Custom text-mode representation; JSON mode always serializes the primary data. */
|
|
2482
|
+
text?: string;
|
|
2483
|
+
}
|
|
2484
|
+
/** Stable stdout surface supplied by the host. */
|
|
2485
|
+
interface CommandPackOutput {
|
|
2486
|
+
result(data: unknown, options?: CommandPackOutputOptions): void;
|
|
2487
|
+
line(value: string): void;
|
|
2488
|
+
write(chunk: string): void;
|
|
2489
|
+
}
|
|
2490
|
+
interface CommandPackErrorOptions {
|
|
2491
|
+
hint?: string;
|
|
2492
|
+
cause?: unknown;
|
|
2493
|
+
}
|
|
2494
|
+
/** Host-native semantic error factories; throw the returned Error. */
|
|
2495
|
+
interface CommandPackErrors {
|
|
2496
|
+
general(message: string, options?: CommandPackErrorOptions): Error;
|
|
2497
|
+
usage(message: string, hint?: string): Error;
|
|
2498
|
+
timeout(message?: string, options?: CommandPackErrorOptions): Error;
|
|
2499
|
+
}
|
|
2500
|
+
/** Stable API 1 execution context. It deliberately contains no raw credentials. */
|
|
2501
|
+
interface CommandPackContext<F extends FlagsDef = FlagsDef> {
|
|
2502
|
+
identity: Identity;
|
|
2503
|
+
settings: Settings;
|
|
2504
|
+
flags: ParsedFlags<F>;
|
|
2505
|
+
client: Client;
|
|
2506
|
+
output: CommandPackOutput;
|
|
2507
|
+
errors: CommandPackErrors;
|
|
2508
|
+
}
|
|
2509
|
+
/** Privileged context available only when product policy grants raw API-key access. */
|
|
2510
|
+
type CommandPackApiKeyContext<F extends FlagsDef = FlagsDef> = CommandPackContext<F> & {
|
|
2511
|
+
credentials: CommandPackCredentials;
|
|
2512
|
+
};
|
|
2513
|
+
/** Command shape exported by an API 1 Command Pack. */
|
|
2514
|
+
interface CommandPackCommand<F extends FlagsDef = FlagsDef, C extends CommandPackContext<F> = CommandPackContext<F>> extends Omit<Command<F>, "run"> {
|
|
2515
|
+
run(ctx: C): Promise<void>;
|
|
2516
|
+
}
|
|
2517
|
+
/** A Command Pack explicitly maps product command paths to command implementations. */
|
|
2518
|
+
type CommandPack = Record<string, CommandPackCommand<any, any>>;
|
|
2519
|
+
//#endregion
|
|
2222
2520
|
//#region src/utils/filename.d.ts
|
|
2223
2521
|
declare function generateFilename(prefix: string, prompt: string): string;
|
|
2224
2522
|
//#endregion
|
|
@@ -2493,16 +2791,13 @@ declare const SEMANTIC_TOP_K = 20;
|
|
|
2493
2791
|
/**
|
|
2494
2792
|
* Analyze the user's input to produce an IntentProfile.
|
|
2495
2793
|
*
|
|
2496
|
-
*
|
|
2497
|
-
*
|
|
2498
|
-
*
|
|
2794
|
+
* Calls `qwen3.6-flash` via the OpenAI-compatible chat endpoint to extract
|
|
2795
|
+
* structured intent fields: taskSummary, modalities, capabilities, budget,
|
|
2796
|
+
* qualityPreference, modelPreference (mode/targets/excludes), and more.
|
|
2499
2797
|
*
|
|
2500
|
-
*
|
|
2501
|
-
* the extraction model fills everything else.
|
|
2798
|
+
* On failure, degrades gracefully to DEFAULT_INTENT with confidence 0.
|
|
2502
2799
|
*/
|
|
2503
|
-
declare function analyzeIntent(client: Client, input: string
|
|
2504
|
-
intentDetectBaseUrl?: string;
|
|
2505
|
-
}): Promise<IntentProfile>;
|
|
2800
|
+
declare function analyzeIntent(client: Client, input: string): Promise<IntentProfile>;
|
|
2506
2801
|
//#endregion
|
|
2507
2802
|
//#region src/advisor/recall.d.ts
|
|
2508
2803
|
interface ScoredCandidate {
|
|
@@ -2535,4 +2830,4 @@ interface ModelSource {
|
|
|
2535
2830
|
load(): Promise<ModelProfile[]>;
|
|
2536
2831
|
}
|
|
2537
2832
|
//#endregion
|
|
2538
|
-
export { ASYNC_FLAG, AcsQueryParams, AcsSignConfig, AnyCommand, type ApiErrorBody, ApiKeyCredential, AppCompletionRequest, AppCompletionResponse, AppStreamChunk, AuthPersistPatch, AuthRequirement, AuthState, AuthStore, BAILIAN_HOST, BailianError, BatchSizeGateInput, BatchSizeGateResult, Budget, Budgets, CHANNEL, CONCURRENT_FLAG, CONSOLE_AUTH_FLAGS, CancelFineTuneResponse, Capabilities, Capability, ChatChoice, ChatMessage, ChatMessageContent, ChatRequest, ChatResponse, ChatResponseFormat, ChatTool, Client, ClientOpenApiQueryOpts, ClientRequestOpts, Command, Complexities, Complexity, ConfigFile, ConfigStore, ConsoleCredential, ConsoleGatewayRequest, ConsoleSite, ContextNeed, ContextNeeds, CreateDeploymentRequest, CreateDeploymentResponse, CreateFineTuneRequest, CreateFineTuneResponse, CredentialSource, DEFAULT_TRAINING_TYPE, DOCS_HOSTS, DashScopeASRRequest, DashScopeASRTaskResult, DashScopeAsyncResponse, DashScopeImageRequest, DashScopeImageSyncResponse,
|
|
2833
|
+
export { ASYNC_FLAG, AcsQueryParams, AcsSignConfig, AigcConfig, AnyCommand, type ApiErrorBody, ApiKeyCredential, AppCompletionRequest, AppCompletionResponse, AppStreamChunk, AuthPersistPatch, AuthRequirement, AuthState, AuthStore, BAILIAN_HOST, BILLING_METHOD, BailianError, BatchSizeGateInput, BatchSizeGateResult, BillingMethod, Budget, Budgets, CHANNEL, CHARGE_TYPE, COMMAND_PACK_API_VERSION, CONCURRENT_FLAG, CONSOLE_AUTH_FLAGS, CancelFineTuneResponse, Capabilities, Capability, ChargeType, ChatChoice, ChatMessage, ChatMessageContent, ChatRequest, ChatResponse, ChatResponseFormat, ChatTool, Client, ClientOpenApiQueryOpts, ClientRequestOpts, Command, CommandContext, CommandPack, CommandPackApiKeyContext, CommandPackCommand, CommandPackContext, CommandPackCredentials, CommandPackErrorOptions, CommandPackErrors, CommandPackManager, CommandPackMeta, CommandPackMutationResult, CommandPackOutput, CommandPackOutputOptions, CommandPackReport, Complexities, Complexity, ConfigFile, ConfigStore, ConsoleCredential, ConsoleGatewayRequest, ConsoleSite, ContextNeed, ContextNeeds, CreateDeploymentRequest, CreateDeploymentResponse, CreateFineTuneRequest, CreateFineTuneResponse, CreatePlanFlags, CredentialSource, DEFAULT_BILLING_METHOD, DEFAULT_DEPLOY_PLAN, DEFAULT_TRAINING_TYPE, DEPLOY_PLAN, DOCS_HOSTS, DashScopeASRRequest, DashScopeASRTaskResult, DashScopeAsyncResponse, DashScopeImageRequest, DashScopeImageSyncResponse, DashScopeKnowledgeRetrieveRequest, DashScopeKnowledgeRetrieveResponse, DashScopeTTSRequest, DashScopeTTSResponse, DashScopeTTSStreamChunk, DashScopeTaskResponse, DashScopeVideoEditRequest, DashScopeVideoRefRequest, DashScopeVideoRequest, type DataModality, DatasetDeleteResponse, DatasetFile, DatasetGetResponse, DatasetListParams, DatasetListResponse, DatasetSchema, DatasetUploadParams, DatasetUploadResponse, DeleteDeploymentResponse, DeleteFineTuneResponse, DeployModality, DeployPlan, DeployableModel, DeployableTemplate, Deployment, ExitCode, ExportCheckpointResponse, Feature, Features, FineTuneCheckpoint, FineTuneHyperParameters, FineTuneJob, FineTuneLogEntry, FlagDef, FlagsDef, GLOBAL_FLAGS, GetDeploymentResponse, GetFineTuneLogsParams, GetFineTuneLogsResponse, GetFineTuneResponse, GetModelsOptions, INSUFFICIENT_SAMPLES_CODE, Identity, IntentProfile, IntentSegment, KnowledgeChatContentPart, KnowledgeChatMessage, KnowledgeChatRequest, KnowledgeChatStreamChunk, KnowledgeSearchRequest, KnowledgeSearchResponse, ListCheckpointsResponse, ListDeployableModelsParams, ListDeployableModelsResponse, ListDeploymentsParams, ListDeploymentsResponse, ListFineTunesParams, ListFineTunesResponse, MAX_DATASET_BYTES, MAX_MEDIA_ZIP_BYTES, MODEL_AUTH_FLAGS, MODEL_LIST_API, McpClient, McpTool, McpToolResult, MemoryAddRequest, MemoryAddResponse, MemoryMessage, MemoryNode, MemoryNodeListResponse, MemoryNodeUpdateRequest, MemorySearchRequest, MemorySearchResponse, Modalities, Modality, ModelCapability, ModelCategories, ModelCategory, ModelGroup, ModelGroupItem, ModelGroupParams, ModelGroupResult, ModelListParams, ModelListResult, ModelPreference, ModelPrice, ModelPriceInfo, ModelProfile, ModelSource, OPENAPI_AUTH_FLAGS, OpenApiCredential, OutputFormat, PREDICT_CONFIG_API, ParsedFlags, PipelineResult, PipelineStep, PlanContext, PlanResolved, PlanStrategy, PredictConfigEntry, PreferenceMode, ProfileAttribute, ProfileSchemaCreateRequest, ProfileSchemaCreateResponse, PtuCapacity, QpmLimit, QualityPreference, QualityPreferences, REGIONS, RecommendOptions, RecommendResult, RecommendedModel, Region, RequestOpts, ResolutionSources, SEMANTIC_TOP_K, SOURCE_CONFIG, STRATEGIES, ScaleDeploymentRequest, ScaleDeploymentResponse, ScoredCandidate, ServerSentEvent, Settings, SingleResult, SourceFlags, StreamChoice, StreamChunk, TAGS, TRAINING_TYPES_CLI, TRAINING_TYPE_MAP, TrackingEvent, type TrainingProfile, TrainingTypeCli, UpdateDeploymentRequest, UpdateDeploymentResponse, UsageError, UserProfileResponse, ValidateOpts, ValidationIssue, ValidationResult, ValidationSeverity, ValidationStats, ValidatorSpec, analyzeIntent, appCompletionPath, bailianMcpPath, buildAcsCanonicalQuery, buildDocLink, buildSettings, buildSources, callConsoleGateway, cancelFineTune, chatPath, createDeployment, createFineTune, createTrackingEvent, credentialFlagDefs, defaultDeployPlan, defineCommand, deleteDataset, deleteDeployment, deleteFineTune, describeAuthState, detectModality, detectOutputFormat, effectiveConsoleGatewayConfig, ensureConfigDir, exportCheckpoint, fetchModelCapability, fetchModelDetail, fetchModelGroups, fetchModelList, fetchPredictConfig, flushTelemetry, formatErrorJson, formatIssue, formatJson, formatOutput, formatText, generateFilename, getConfigDir, getConfigPath, getCredentialsPath, getDataset, getDeployment, getFineTune, getFineTuneLogs, getModels, getProfile, imagePath, imageSyncPath, isLocalFile, isSemanticAvailable, isTrainingTypeCli, knowledgeChatEndpoint, knowledgeRetrievePath, knowledgeSearchEndpoint, listCheckpoints, listDatasets, listDeployableModels, listDeployments, listFineTunes, listSupportedFormats, listSupportedTrainingTypes, listTrainingTypes, localSink, makeAuthStore, makeConfigStore, mapApiError, maskToken, mcpWebSearchPath, memoryAddPath, memoryListPath, memoryNodePath, memorySearchPath, modelSupportsTrainingType, parseBooleanValue, parseConfigFile, parseDatasetSchemaFlag, parseOptionalBooleanValue, parseSSE, pickPlanStrategy, pickValidator, preflightBatchSizeGate, profileSchemaPath, rankModels, readConfigFile, recallCandidates, recallSemantic, registerValidator, remoteSink, request, requestJson, resolveApiKey, resolveBooleanFlag, resolveConsole, resolveFileUrl, resolveModelBaseUrl, resolveOpenApi, resolveOutputDir, resolveWatermark, scaleDeployment, signAcsRequest, speechRecognizePath, speechSynthesizePath, stripUndefined, taskPath, trackCommandExecution, trackingHeaders, trainingTypeMethodVariant, unwrapResponse, updateDeployment, uploadDataset, uploadFile, userProfilePath, validateDataset, videoGeneratePath, writeConfigFile };
|
package/dist/index.mjs
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import{createRequire as e}from"node:module";import{appendFileSync as t,createReadStream as n,
|
|
2
|
-
`,{mode:384}),
|
|
1
|
+
import{createRequire as e}from"node:module";import{appendFileSync as t,createReadStream as n,createWriteStream as r,existsSync as i,mkdirSync as a,readFileSync as o,renameSync as s,rmSync as c,statSync as l,unlinkSync as u,writeFileSync as d}from"fs";import{homedir as f,tmpdir as p}from"os";import{basename as m,extname as h,join as g}from"path";import{stringify as _}from"yaml";import{createHash as v,createHmac as y,randomBytes as ee,randomUUID as te}from"crypto";import{Readable as ne}from"stream";import{createInterface as b}from"readline";import{pipeline as re}from"stream/promises";import*as ie from"yauzl";import{cpSync as x,existsSync as S,mkdirSync as C,readFileSync as w,readdirSync as ae,writeFileSync as oe}from"node:fs";import{dirname as T,join as E}from"node:path";import{fileURLToPath as se}from"node:url";var ce=Object.create,D=Object.defineProperty,le=Object.getOwnPropertyDescriptor,ue=Object.getOwnPropertyNames,O=Object.getPrototypeOf,de=Object.prototype.hasOwnProperty,fe=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),k=(e,t,n,r)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var i=ue(t),a=0,o=i.length,s;a<o;a++)s=i[a],!de.call(e,s)&&s!==n&&D(e,s,{get:(e=>t[e]).bind(null,s),enumerable:!(r=le(t,s))||r.enumerable});return e},A=(e,t,n)=>(n=e==null?{}:ce(O(e)),k(t||!e||!e.__esModule?D(n,`default`,{value:e,enumerable:!0}):n,e)),j=e(import.meta.url);const M={SUCCESS:0,GENERAL:1,USAGE:2,AUTH:3,QUOTA:4,TIMEOUT:5,NETWORK:6,CONTENT_FILTER:10};var N=class extends Error{exitCode;hint;api;constructor(e,t=M.GENERAL,n,r){super(e,r?.cause===void 0?void 0:{cause:r.cause}),this.name=`BailianError`,this.exitCode=t,this.hint=n,this.api=r?.api}toJSON(){let e=me(this.cause);return{error:{code:this.exitCode,message:this.message,...this.hint?{hint:this.hint}:{},...this.api?.httpStatus===void 0?{}:{http_status:this.api.httpStatus},...this.api?.apiCode?{api_code:this.api.apiCode}:{},...this.api?.requestId?{request_id:this.api.requestId}:{},...e?{cause:e}:{}}}}},pe=class extends N{constructor(e,t){super(e,M.USAGE,t),this.name=`UsageError`}};function me(e){if(e!=null){if(e instanceof Error){let t={message:e.message},n=e.code;return n&&(t.code=n),t}if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return{message:String(e)};try{return{message:JSON.stringify(e)}}catch{return}}}function he(e,t,n){let r=t.error?.message||t.message||`HTTP ${e}`,i=t.error?.type??t.code,a=typeof i==`string`?i:typeof i==`number`?String(i):void 0;return new N(r,M.GENERAL,void 0,{api:{httpStatus:e,apiCode:a,requestId:t.request_id}})}const ge={cn:`https://dashscope.aliyuncs.com`,us:`https://dashscope-us.aliyuncs.com`,intl:`https://dashscope-intl.aliyuncs.com`},_e={cn:`https://help.aliyun.com/zh/model-studio`,us:`https://help.aliyun.com/zh/model-studio`,intl:`https://help.aliyun.com/zh/model-studio`},ve=`https://bailian.cn-beijing.aliyuncs.com`,ye=new Set([`text`,`json`]),be=new Set([`domestic`,`international`]);function xe(e){try{let t=new URL(e);return t.protocol===`http:`||t.protocol===`https:`}catch{return!1}}function Se(e){if(!e||typeof e!=`object`||Array.isArray(e))return{};let t=e,n={};return typeof t.api_key==`string`&&(n.api_key=t.api_key),typeof t.access_token==`string`&&t.access_token.length>0?n.access_token=t.access_token:typeof t.accessToken==`string`&&t.accessToken.length>0&&(n.access_token=t.accessToken),typeof t.access_key_id==`string`&&t.access_key_id.length>0?n.access_key_id=t.access_key_id:typeof t.openapi_access_key_id==`string`&&t.openapi_access_key_id.length>0&&(n.access_key_id=t.openapi_access_key_id),typeof t.access_key_secret==`string`&&t.access_key_secret.length>0?n.access_key_secret=t.access_key_secret:typeof t.openapi_access_key_secret==`string`&&t.openapi_access_key_secret.length>0&&(n.access_key_secret=t.openapi_access_key_secret),typeof t.base_url==`string`&&xe(t.base_url)&&(n.base_url=t.base_url),typeof t.output==`string`&&ye.has(t.output)&&(n.output=t.output),typeof t.output_dir==`string`&&t.output_dir.length>0&&(n.output_dir=t.output_dir),typeof t.timeout==`number`&&t.timeout>0&&(n.timeout=t.timeout),typeof t.default_text_model==`string`&&t.default_text_model.length>0&&(n.default_text_model=t.default_text_model),typeof t.default_video_model==`string`&&t.default_video_model.length>0&&(n.default_video_model=t.default_video_model),typeof t.default_image_model==`string`&&t.default_image_model.length>0&&(n.default_image_model=t.default_image_model),typeof t.default_speech_model==`string`&&t.default_speech_model.length>0&&(n.default_speech_model=t.default_speech_model),typeof t.default_omni_model==`string`&&t.default_omni_model.length>0&&(n.default_omni_model=t.default_omni_model),typeof t.workspace_id==`string`&&t.workspace_id.length>0&&(n.workspace_id=t.workspace_id),typeof t.console_site==`string`&&be.has(t.console_site)&&(n.console_site=t.console_site),typeof t.console_region==`string`&&t.console_region.length>0&&(n.console_region=t.console_region),typeof t.console_switch_agent==`number`&&t.console_switch_agent>0&&(n.console_switch_agent=t.console_switch_agent),typeof t.telemetry==`boolean`&&(n.telemetry=t.telemetry),n}function Ce(e){return e.flags.baseUrl||e.env.DASHSCOPE_BASE_URL||e.file.base_url||ge.cn}function we(e){let t=Ce(e);if(e.flags.apiKey)return{token:e.flags.apiKey,baseUrl:t,source:`flag`};let n=e.env.DASHSCOPE_API_KEY?.trim();if(n)return{token:n,baseUrl:t,source:`env`};if(e.file.api_key)return{token:e.file.api_key,baseUrl:t,source:`config`};throw new N(`No API key found.`,M.AUTH,"Set DASHSCOPE_API_KEY, pass --api-key, or run `bl auth login`.")}function Te(e){let t=e.file.access_token?.trim();if(!t)throw new N(`No console access token found.`,M.AUTH,"Run `bl auth login --console`.");return{token:t,region:e.flags.consoleRegion||e.file.console_region||`cn-beijing`,site:e.flags.consoleSite||e.file.console_site||`domestic`,switchAgent:e.flags.consoleSwitchAgent||e.file.console_switch_agent||void 0,source:`config`}}function Ee(e){let t=De(`flag`,e.flags.accessKeyId,e.flags.accessKeySecret,e.flags.accessKeyId!==void 0||e.flags.accessKeySecret!==void 0);if(t)return t;let n=De(`env`,e.env.ALIBABA_CLOUD_ACCESS_KEY_ID,e.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET,!!(Oe(e.env.ALIBABA_CLOUD_ACCESS_KEY_ID)||Oe(e.env.ALIBABA_CLOUD_ACCESS_KEY_SECRET)));if(n)return n;let r=De(`config`,e.file.access_key_id,e.file.access_key_secret,!!(e.file.access_key_id||e.file.access_key_secret));if(r)return r;throw new N(`No OpenAPI AK/SK credentials found.`,M.AUTH,"Set ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET, pass --access-key-id and --access-key-secret, or run `bl auth login --open-api`.")}function De(e,t,n,r){if(!r)return;let i=Oe(t),a=Oe(n);if(!i||!a)throw new N(`Incomplete OpenAPI AK/SK credentials found.`,M.AUTH,ke(e));return{accessKeyId:i,accessKeySecret:a,source:e}}function Oe(e){return e?.trim()||void 0}function ke(e){return e===`flag`?`Pass both --access-key-id and --access-key-secret, or remove the partial flags to use env/config credentials.`:e===`env`?`Set both ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET, or unset the partial env vars to use config credentials.`:"Run `bl auth login --open-api --access-key-id <id> --access-key-secret <secret>` again to save a complete pair."}function Ae(e){let t={};try{t.apiKey=we(e)}catch{}try{t.console=Te(e)}catch{}try{t.openapi=Ee(e)}catch{}return t}function P(){return process.env.BAILIAN_CONFIG_DIR?process.env.BAILIAN_CONFIG_DIR:g(f(),`.bailian`)}function F(){return g(P(),`config.json`)}function je(){return g(P(),`credentials.json`)}async function Me(){let e=P(),t=await import(`fs/promises`);await t.mkdir(e,{recursive:!0,mode:448});try{await t.chmod(e,448)}catch{}}function Ne(e){return _(e).replace(/\n$/,``)}function Pe(e){return JSON.stringify(e,null,2)}function Fe(e,t,n){return JSON.stringify({error:{code:e,message:t,...n?{hint:n}:{}}},null,2)}function Ie(e){return e===`json`||e===`text`?e:`text`}function Le(e,t){switch(t){case`json`:return Pe(e);case`text`:return Ne(e)}}function I(){let e=F();if(!i(e))return{};try{return Se(JSON.parse(o(e,`utf-8`)))}catch(e){let t=e;return(t instanceof SyntaxError||t.message.includes(`JSON`))&&console.warn(`Warning: config file is corrupted; using defaults.`),{}}}async function L(e){await Me();let t=F(),n=t+`.tmp`;d(n,JSON.stringify(e,null,2)+`
|
|
2
|
+
`,{mode:384}),s(n,t)}function Re(e){return{flags:e,file:I(),env:process.env}}function ze(e){let{flags:t,file:n,env:r}=e,i=r.DASHSCOPE_TIMEOUT?Number(r.DASHSCOPE_TIMEOUT):void 0,a=i!==void 0&&Number.isFinite(i)&&i>0?i:void 0,o=t.timeout??a??n.timeout??300;if(!Number.isFinite(o)||o<=0)throw new N(`Timeout must be a positive finite number.`,M.USAGE);return{configPath:F(),output:Ie(t.output||r.DASHSCOPE_OUTPUT||n.output),outputExplicit:!!(t.output||r.DASHSCOPE_OUTPUT||n.output),outputDir:n.output_dir||void 0,timeout:o,defaultTextModel:n.default_text_model,defaultVideoModel:n.default_video_model,defaultImageModel:n.default_image_model,defaultSpeechModel:n.default_speech_model,defaultOmniModel:n.default_omni_model,workspaceId:t.workspaceId||r.BAILIAN_WORKSPACE_ID||n.workspace_id||void 0,consoleRegion:t.consoleRegion||n.console_region||void 0,consoleSite:t.consoleSite||n.console_site||void 0,consoleSwitchAgent:t.consoleSwitchAgent||n.console_switch_agent||void 0,verbose:t.verbose||r.DASHSCOPE_VERBOSE===`1`,quiet:t.quiet||!1,dryRun:t.dryRun||!1,telemetry:r.DO_NOT_TRACK===`1`?!1:n.telemetry??!0}}const Be={console:[`access_token`],openapi:[`access_key_id`,`access_key_secret`],all:[`api_key`,`access_token`,`access_key_id`,`access_key_secret`]};function Ve(e){return{describe:()=>Ae(e),stored(){let e=I();return{apiKey:!!e.api_key,console:!!e.access_token,openapi:!!(e.access_key_id||e.access_key_secret)}},resolveBaseUrl:()=>Ce(e),async login(e){let t=I();for(let[n,r]of Object.entries(e))r!==void 0&&(t[n]=r);await L(t)},async logout(e){let t=I(),n=Be[e];if(!n.some(e=>t[e]!==void 0))return!1;for(let e of n)delete t[e];return await L(t),!0}}}function He(){return`/compatible-mode/v1/chat/completions`}function Ue(){return`/api/v1/services/aigc/image-generation/generation`}function We(){return`/api/v1/services/aigc/multimodal-generation/generation`}function Ge(){return`/api/v1/services/aigc/video-generation/video-synthesis`}function Ke(e){return`/api/v1/tasks/${encodeURIComponent(e)}`}function qe(e){return`/api/v1/apps/${encodeURIComponent(e)}/completion`}function Je(){return`/api/v2/apps/memory/add`}function Ye(){return`/api/v2/apps/memory/memory_nodes/search`}function Xe(){return`/api/v2/apps/memory/memory_nodes`}function Ze(e){return`/api/v2/apps/memory/memory_nodes/${encodeURIComponent(e)}`}function Qe(){return`/api/v1/services/audio/tts/SpeechSynthesizer`}function $e(){return`/api/v1/services/audio/asr/transcription`}function et(){return`/api/v2/apps/memory/profile_schemas`}function tt(e){return`/api/v2/apps/memory/profile_schemas/${encodeURIComponent(e)}/profiles`}function nt(){return`/api/v1/indices/rag/index/retrieve`}function rt(e){return`https://${e}.cn-beijing.maas.aliyuncs.com/api/v1/indices/knowledge/search`}function it(e){return`https://${e}.cn-beijing.maas.aliyuncs.com/api/v2/apps/knowledge/chat`}function at(){return`/api/v1/mcps/WebSearch/mcp`}function ot(){return`/compatible-mode/v1/files`}function st(){return`/api/v1/files`}function ct(e){return`/api/v1/files/${encodeURIComponent(e)}`}function lt(){return`/api/v1/fine-tunes`}function ut(e){return`/api/v1/fine-tunes/${encodeURIComponent(e)}`}function dt(e){return`/api/v1/fine-tunes/${encodeURIComponent(e)}/cancel`}function ft(e){return`/api/v1/fine-tunes/${encodeURIComponent(e)}/logs`}function pt(e){return`/api/v1/fine-tunes/${encodeURIComponent(e)}/checkpoints`}function mt(e,t){return`/api/v1/fine-tunes/${encodeURIComponent(e)}/export/${encodeURIComponent(t)}`}function ht(){return`/api/v1/deployments`}function gt(e){return`/api/v1/deployments/${encodeURIComponent(e)}`}function _t(e){return`/api/v1/deployments/${encodeURIComponent(e)}/scale`}function vt(e){return`/api/v1/deployments/${encodeURIComponent(e)}/update`}function yt(){return`/api/v1/deployments/models`}const bt=`bailian-cli`,xt={t1:`public`,t2:``},St=JSON.stringify({channel:bt,tags:xt});function R(){return{"x-dashscope-source-config":St}}function Ct(e){return e.length>8?`${e.slice(0,4)}...${e.slice(-4)}`:`***`}function wt(e){return typeof e!=`object`||!e||e instanceof FormData?!1:JSON.stringify(e).includes(`oss://`)}async function Tt(e,t){let n=typeof FormData<`u`&&t.body instanceof FormData,r={"User-Agent":`${e.identity.clientName}/${e.identity.version}`,...R(),...t.headers};if(!n&&!r[`Content-Type`]&&(r[`Content-Type`]=`application/json`),t.async&&(r[`X-DashScope-Async`]=`enable`),wt(t.body)&&(r[`X-DashScope-OssResourceResolve`]=`enable`),e.settings.verbose){console.error(`> ${t.method??`GET`} ${t.url}`);let e=r.Authorization;e&&console.error(`> Auth: ${Ct(e.replace(/^Bearer /,``))}`),console.error(`> x-dashscope-source-config: ${St}`)}let i=Et((t.timeout??e.settings.timeout)*1e3,t.signal),a=await fetch(t.url,{method:t.method??`GET`,headers:r,body:t.body?n?t.body:JSON.stringify(t.body):void 0,signal:i.signal}).finally(i.cleanup);if(e.settings.verbose){console.error(`< ${a.status} ${a.statusText}`);let e=a.headers.get(`x-request-id`);e&&console.error(`request_id: ${e}`)}if(!a.ok){let e={};try{e=await a.json()}catch{}throw he(a.status,e,t.url)}return a}function Et(e,t){let n=new AbortController,r=setTimeout(()=>n.abort(),e),i=()=>n.abort(t?.reason),a=()=>{clearTimeout(r),t?.removeEventListener(`abort`,i)};return t?.aborted?i():t?.addEventListener(`abort`,i,{once:!0}),n.signal.addEventListener(`abort`,a,{once:!0}),{signal:n.signal,cleanup:a}}async function Dt(e,t){let n=await Tt(e,t),r;try{r=await n.json()}catch{throw new N(`API returned non-JSON response (${n.headers.get(`content-type`)||`unknown type`}). Server may be experiencing issues.`,M.GENERAL)}if(r.code&&typeof r.code==`string`&&r.code!==`200`&&r.code!==`Success`)throw he(200,{error:{message:r.message,type:r.code}},t.url);return r}function Ot(e){let t=[];for(let[n,r]of Object.entries(e))if(!(r===void 0||r===``))if(Array.isArray(r))for(let e=0;e<r.length;e++){let i=r[e];i!==``&&t.push([`${n}.${e+1}`,i])}else t.push([n,r]);return t.sort(([e],[t])=>e<t?-1:+(e>t)),t.map(([e,t])=>`${At(e)}=${At(t)}`).join(`&`)}function kt(e){let t=e.method??`POST`,n=new Date().toISOString().replace(/\.\d{3}Z$/,`Z`),r=te(),i=jt(e.body),a={host:e.host,"x-acs-action":e.action,"x-acs-version":e.version,"x-acs-date":n,"x-acs-signature-nonce":r,"x-acs-content-sha256":i,"content-type":`application/json`},o=Object.keys(a).filter(e=>e===`host`||e===`content-type`||e.startsWith(`x-acs-`)).sort(),s=o.map(e=>`${e}:${a[e]}`).join(`
|
|
3
3
|
`)+`
|
|
4
4
|
`,c=o.join(`;`),l=e.queryString??``,u=[t,e.pathname,l,s,c,i].join(`
|
|
5
|
-
`),d=`ACS3-HMAC-SHA256`,f=`${d}\n${
|
|
6
|
-
`);r=o.pop()||``;let s={};for(let e of o){if(e===``){s.data!==void 0&&(yield{data:s.data,event:s.event,id:s.id}),s={};continue}if(e.startsWith(`:`))continue;let t=e.indexOf(`:`);if(t===-1)continue;let n=e.slice(0,t),r=e.slice(t+1).trimStart();switch(n){case`data`:if(s.data=s.data===void 0?r:`${s.data}\n${r}`,s.data.length>i)throw new A(`SSE event exceeded the maximum buffer size.`,k.GENERAL);break;case`event`:s.event=r;break;case`id`:s.id=r;break}}}if(r.trim()&&r.includes(`data:`)){let e=r.indexOf(`:`);e!==-1&&(yield{data:r.slice(e+1).trimStart()})}}finally{t.releaseLock()}}async function Wt(e,t={}){let{pageNo:n=1,pageSize:r=50,name:i=``,providers:a=[],capabilities:o=[]}=t,s=await e(`zeldaHttp.dashscopeModel./zelda/api/v1/modelCenter/listFoundationModels`,{input:{pageNo:n,pageSize:r,name:i,providers:a,inferenceProviders:[],features:[],group:!0,capabilities:o,contextWindows:[]}}),c=s?.data?.DataV2?.data??s?.data??{},l=c?.data?.total??c?.total??0,u=c?.data?.list??c?.list??[],d=[];for(let e of u)if(e.items?.length)for(let t of e.items)d.push(t);else d.push(e);return{total:l,models:d}}function Gt(){return{read:()=>F(),async write(e){let t=F();for(let[n,r]of Object.entries(e))r===void 0?delete t[n]:t[n]=r;await I(t)},async unset(e){let t=F();for(let n of e)delete t[n];await I(t)},get path(){return P()}}}async function Kt(e,t){let{filePath:r,purpose:i=`fine-tune`,signal:a}=t,o=s(r),c=d(r),l=v.toWeb(n(r)),u=await new Response(l).blob(),f=new FormData;f.append(`file`,u,c),f.append(`purpose`,i);let p=await e.requestJson({path:nt(),method:`POST`,body:f,signal:a});if(p.id)return{file_id:p.id,name:p.filename??c,size:p.bytes??o.size,purpose:p.purpose??i,gmt_create:p.created_at?new Date(p.created_at*1e3).toISOString():void 0};let m=p.data?.failed_uploads;if(Array.isArray(m)&&m.length>0){let e=m[0]??{};throw new A(`Dataset upload failed${e.code?` [${e.code}]`:``}: ${e.message??`no message returned`}`,k.GENERAL,`Server reported failure for ${c}. Re-run with --verbose to see the raw response.`)}throw new A(`Dataset upload of ${c} returned no file_id (HTTP 200 with empty payload).`,k.GENERAL,`The platform accepted the request but did not allocate a file_id. Retry the upload; if it recurs, contact platform support with the request id.`)}async function qt(e,t={}){let n=new URLSearchParams;t.pageNo!==void 0&&n.set(`page_no`,String(t.pageNo)),t.pageSize!==void 0&&n.set(`page_size`,String(t.pageSize)),t.purpose&&n.set(`purpose`,t.purpose);let r=rt(),i=n.toString()?`${r}?${n.toString()}`:r;return e.requestJson({path:i,method:`GET`,signal:t.signal})}async function Jt(e,t,n){return e.requestJson({path:it(t),method:`GET`,signal:n})}async function Yt(e,t,n){let r=await e.request({path:it(t),method:`DELETE`,signal:n});try{return await r.json()}catch{return{data:{deleted:!0,file_id:t}}}}const Xt=300*1024*1024;function Zt(e,t=Xt){if(!r(e))throw new A(`File not found: ${e}`,k.USAGE);let n=s(e);if(!n.isFile())throw new A(`Not a regular file: ${e}`,k.USAGE);if(n.size===0)throw new A(`File is empty: ${e}`,k.USAGE);if(n.size>t)throw new A(`File too large: ${(n.size/(1024*1024)).toFixed(1)}MB exceeds the ${(t/(1024*1024)).toFixed(0)}MB dataset upload cap.`,k.USAGE);return{bytes:n.size,ext:f(e).toLowerCase()}}function z(e,t,n,r={}){return{severity:e,code:t,message:n,...r}}function Qt(e){if(e===void 0||e.trim()===``)return;let t=e.trim();if(t===`chatml`||t===`dpo`||t===`cpt`)return t;throw new A(`Unsupported --schema "${e}". Supported: chatml, dpo, cpt.`,k.USAGE,`Omit --schema to auto-detect per record (chosen/rejected → DPO, text → CPT, else ChatML).`)}function $t(e,t=50,n=100,r=10){if(e<=0)return[];if(e<=t+r)return Array.from({length:e},(e,t)=>t+1);let i=new Set;for(let n=1;n<=Math.min(t,e);n++)i.add(n);for(let t=0;t<r;t++)i.add(e-t);let a=Math.max(1,Math.ceil(e/n));for(let n=t+1;n<=e-r;n+=a)i.add(n);return[...i].filter(t=>t>=1&&t<=e).sort((e,t)=>e-t)}const en=new Set([`system`,`user`,`assistant`]);function tn(e,t,n){let r=[];if(typeof e!=`object`||!e||Array.isArray(e))return r.push(z(`error`,`MESSAGE_NOT_OBJECT`,`Message must be an object.`,{line:t,path:n})),r;let i=e,a=i.role,o=i.content;return(typeof a!=`string`||!en.has(a))&&r.push(z(`error`,`INVALID_ROLE`,`Invalid role "${String(a)}". Expected one of: system, user, assistant.`,{line:t,path:`${n}.role`})),typeof o!=`string`&&r.push(z(`error`,`INVALID_CONTENT`,`"content" must be a string (got ${typeof o}).`,{line:t,path:`${n}.content`})),r}function nn(e,t){let n=[],r=e.messages;if(!Array.isArray(r))return n.push(z(`error`,`MISSING_MESSAGES`,`Required field "messages" is missing or not an array.`,{line:t,path:`messages`})),n;if(r.length===0)return n.push(z(`error`,`EMPTY_MESSAGES`,`"messages" must contain at least one entry.`,{line:t,path:`messages`})),n;let i=!1,a;for(let e=0;e<r.length;e++){let o=r[e],s=`messages[${e}]`;n.push(...tn(o,t,s));let c=o?.role;c===`system`&&(e!==0&&n.push(z(`warning`,`SYSTEM_NOT_FIRST`,`"system" message should appear at index 0; found at index ${e}.`,{line:t,path:`${s}.role`})),i=!0),a===c&&(c===`user`||c===`assistant`)&&n.push(z(`warning`,`ROLE_NOT_ALTERNATING`,`Consecutive ${c} messages — user/assistant turns should typically alternate.`,{line:t,path:`${s}.role`})),typeof c==`string`&&(a=c)}return r.some(e=>e.role===`user`)||n.push(z(`warning`,`NO_USER_ROLE`,`No "user" message found in this sample.`,{line:t,path:`messages`})),i&&r.length===1&&n.push(z(`warning`,`SYSTEM_ONLY`,`Sample only contains a "system" message.`,{line:t,path:`messages`})),n}const rn={name:`chatml`,detect:()=>!0,inspect:nn};function an(e,t){let n=[];if(!(`text`in e))return n.push(z(`error`,`MISSING_TEXT`,`Required field "text" is missing.`,{line:t,path:`text`})),n;let r=e.text;return typeof r==`string`?(r.trim().length===0&&n.push(z(`error`,`EMPTY_TEXT`,`"text" must not be empty / whitespace-only.`,{line:t,path:`text`})),n):(n.push(z(`error`,`INVALID_TEXT`,`"text" must be a string (got ${typeof r}).`,{line:t,path:`text`})),n)}const on={name:`cpt`,detect:e=>`text`in e&&!(`messages`in e),inspect:an};function sn(e,t){let n=nn(e,t),r=e.messages;if(!Array.isArray(r)||r.length===0)return n;let i=`chosen`in e,a=`rejected`in e;if(i||n.push(z(`error`,`MISSING_CHOSEN`,`DPO record is missing the "chosen" preference.`,{line:t,path:`chosen`})),a||n.push(z(`error`,`MISSING_REJECTED`,`DPO record is missing the "rejected" preference.`,{line:t,path:`rejected`})),i){n.push(...tn(e.chosen,t,`chosen`));let r=e.chosen?.role;typeof r==`string`&&r!==`assistant`&&n.push(z(`warning`,`PREFERENCE_ROLE_NOT_ASSISTANT`,`"chosen" role should be "assistant" (got "${r}").`,{line:t,path:`chosen.role`}))}if(a){n.push(...tn(e.rejected,t,`rejected`));let r=e.rejected?.role;typeof r==`string`&&r!==`assistant`&&n.push(z(`warning`,`PREFERENCE_ROLE_NOT_ASSISTANT`,`"rejected" role should be "assistant" (got "${r}").`,{line:t,path:`rejected.role`}))}return n}const cn=[{name:`dpo`,detect:e=>`chosen`in e||`rejected`in e,inspect:sn},on,rn];function ln(e,t){return t===void 0?cn.find(t=>t.detect(e))??rn:cn.find(e=>e.name===t)||rn}async function un(e,t){let r=y({input:n(e,{encoding:`utf8`}),crlfDelay:1/0}),i=[],a=0,o=0;for await(let e of r){if(t?.aborted)break;a++;let n=e.trim();if(n.length===0){o++;continue}i.length>=20||(n[0]!==`{`||n[n.length-1]!==`}`)&&i.push(z(`error`,`MALFORMED_LINE`,`Line does not start with '{' and end with '}'. JSONL requires one minified JSON object per line — pretty-printed JSON or arrays are not accepted here.`,{line:a}))}return{totalLines:a,blankLines:o,issues:i}}async function dn(e,t,r,i,a){let o=r?null:new Set($t(t)),s=[],c=0,l=y({input:n(e,{encoding:`utf8`}),crlfDelay:1/0}),u=0;for await(let e of l){if(a?.aborted)break;if(u++,o&&!o.has(u))continue;let t=e.trim();if(t.length===0||(c++,s.length>=30))continue;let n;try{n=JSON.parse(t)}catch(e){s.push(z(`error`,`MALFORMED_JSON`,`JSON.parse failed: ${e.message}`,{line:u}));continue}s.push(...fn(n,u,i))}return{sampled:c,issues:s}}function fn(e,t,n){if(typeof e!=`object`||!e||Array.isArray(e))return[z(`error`,`RECORD_NOT_OBJECT`,`Each line must be a JSON object, got ${Array.isArray(e)?`array`:typeof e}.`,{line:t})];let r=e;return ln(r,n).inspect(r,t)}const B=[{format:`jsonl`,extensions:[`.jsonl`],async validate(e,t){let n=Date.now(),r=await un(e,t.signal);if(r.totalLines===0||r.totalLines===r.blankLines)return{valid:!1,format:`jsonl`,filePath:e,errors:[z(`error`,`EMPTY_FILE`,`File contains no non-blank lines.`)],warnings:[],stats:{totalRecords:0,sampledRecords:0,durationMs:Date.now()-n}};if(r.issues.length>0)return{valid:!1,format:`jsonl`,filePath:e,errors:r.issues,warnings:[],stats:{totalRecords:r.totalLines-r.blankLines,sampledRecords:0,durationMs:Date.now()-n}};let i=await dn(e,r.totalLines,!!t.fullValidate,t.schema,t.signal),a=i.issues.filter(e=>e.severity===`error`),o=i.issues.filter(e=>e.severity===`warning`);return{valid:a.length===0,format:`jsonl`,filePath:e,errors:a,warnings:o,stats:{totalRecords:r.totalLines-r.blankLines,sampledRecords:i.sampled,durationMs:Date.now()-n}}}}];function pn(e){let t=f(e).toLowerCase(),n=B.find(e=>e.extensions.includes(t));if(!n){let e=B.flatMap(e=>e.extensions).join(`, `);throw new A(`Unsupported dataset format "${t||`(none)`}". Supported: ${e}`,k.USAGE,`Convert your data to one of the supported formats and re-run.`)}return n}function mn(e){B.some(t=>t.format===e.format)||B.push(e)}async function hn(e,t={}){let{bytes:n}=Zt(e,t.maxBytes??314572800),r=await pn(e).validate(e,t);return r.stats.bytes===void 0&&(r.stats.bytes=n),r}function gn(){return B.map(e=>({format:e.format,extensions:[...e.extensions]}))}function _n(e){let t=[];e.line!==void 0&&t.push(`line ${e.line}`),e.path&&t.push(e.path);let n=t.length?` [${t.join(` · `)}]`:``;return` ${e.severity.toUpperCase()} ${e.code}${n}: ${e.message}`}async function vn(e,t,n){return e.requestJson({path:at(),method:`POST`,body:t,signal:n})}async function yn(e,t={}){let n=new URLSearchParams;t.pageNo!==void 0&&n.set(`page_no`,String(t.pageNo)),t.pageSize!==void 0&&n.set(`page_size`,String(t.pageSize)),t.status&&n.set(`status`,t.status);let r=at(),i=n.toString()?`${r}?${n.toString()}`:r;return e.requestJson({path:i,method:`GET`,signal:t.signal})}async function bn(e,t,n){return e.requestJson({path:ot(t),method:`GET`,signal:n})}async function xn(e,t,n){return e.requestJson({path:st(t),method:`POST`,signal:n})}async function Sn(e,t,n){return e.requestJson({path:ot(t),method:`DELETE`,signal:n})}async function Cn(e,t,n={}){let r=new URLSearchParams;n.pageNo!==void 0&&r.set(`page_no`,String(n.pageNo)),n.pageSize!==void 0&&r.set(`page_size`,String(n.pageSize));let i=ct(t),a=r.toString()?`${i}?${r.toString()}`:i;return e.requestJson({path:a,method:`GET`,signal:n.signal})}async function wn(e,t,n){return e.requestJson({path:lt(t),method:`GET`,signal:n})}async function Tn(e,t,n,r,i){let a=new URLSearchParams;return a.set(`model_name`,r),e.requestJson({path:`${ut(t,n)}?${a.toString()}`,method:`GET`,signal:i})}const V={sft:{server:`sft`,method:`sft`,variant:`full`},"sft-lora":{server:`efficient_sft`,method:`sft`,variant:`lora`},dpo:{server:`dpo_full`,method:`dpo`,variant:`full`},"dpo-lora":{server:`dpo_lora`,method:`dpo`,variant:`lora`},cpt:{server:`cpt`,method:`cpt`,variant:`full`}},En=Object.keys(V),Dn=`sft-lora`;function On(e){return e in V}function kn(e){return V[e].server}function An(e){let{method:t,variant:n}=V[e];return{method:t,variant:n}}function jn(e,t){if(!e)return!1;let{method:n,variant:r}=V[t];if(e.supports?.[n]!==!0)return!1;let i=e.trainingTypes?.[n];return Array.isArray(i)&&i.includes(r)}function Mn(e){return e?En.filter(t=>jn(e,t)):[]}async function Nn(e,t){let n=Bt(e);return(await Wt((t,r)=>R({region:n.consoleRegion,site:n.consoleSite,switchAgent:n.consoleSwitchAgent},e.timeout,{api:t,data:r}),{name:t,pageSize:20})).models.find(e=>e.model===t)??null}const Pn=`INSUFFICIENT_SAMPLES`;function Fn(e){let{recordCount:t,batchSize:n}=e;return t>n?{ok:!0}:{ok:!1,issue:{severity:`error`,code:Pn,message:`Training dataset has ${t} sample(s), which is not greater than batch_size (${n}).`},hint:[`The platform requires the number of training samples to exceed batch_size.`,`Options:`,` • add more data (recommended: comfortably more than batch_size, since the`,` platform also holds back a default 0.9 train split),`,` • lower --batch-size (server clamps to a minimum of 8).`].join(`
|
|
7
|
-
`)}}async function In(e,t,n){return e.requestJson({path:dt(),method:`POST`,body:t,signal:n})}async function Ln(e,t={}){let n=new URLSearchParams;t.pageNo!==void 0&&n.set(`page_no`,String(t.pageNo)),t.pageSize!==void 0&&n.set(`page_size`,String(t.pageSize)),t.status&&n.set(`status`,t.status);let r=dt(),i=n.toString()?`${r}?${n.toString()}`:r;return e.requestJson({path:i,method:`GET`,signal:t.signal})}async function Rn(e,t,n){return e.requestJson({path:ft(t),method:`GET`,signal:n})}async function zn(e,t,n){return e.requestJson({path:ft(t),method:`DELETE`,signal:n})}async function Bn(e,t={}){let n=new URLSearchParams;t.pageNo!==void 0&&n.set(`page_no`,String(t.pageNo)),t.pageSize!==void 0&&n.set(`page_size`,String(t.pageSize)),t.version&&n.set(`version`,t.version),t.modelSource&&n.set(`model_source`,t.modelSource);let r=ht(),i=n.toString()?`${r}?${n.toString()}`:r;return e.requestJson({path:i,method:`GET`,signal:t.signal})}async function Vn(e,t,n,r){return e.requestJson({path:pt(t),method:`PUT`,body:n,signal:r})}async function Hn(e,t,n,r){return e.requestJson({path:mt(t),method:`PUT`,body:n,signal:r})}const Un={output:{type:`string`,valueHint:`<format>`,description:`Output format: text, json`},timeout:{type:`number`,valueHint:`<seconds>`,description:`Request timeout`},quiet:{type:`switch`,description:`Suppress non-essential output`},verbose:{type:`switch`,description:`Print HTTP request/response details`},dryRun:{type:`switch`,description:`Dry run mode`},help:{type:`switch`,description:`Show help`},version:{type:`switch`,description:`Print version`}},Wn={concurrent:{type:`number`,valueHint:`<n>`,description:`Run N parallel requests (default: 1)`}},Gn={async:{type:`switch`,description:`Return async task id without waiting`}},Kn={apiKey:{type:`string`,valueHint:`<key>`,description:`API key`},baseUrl:{type:`string`,valueHint:`<url>`,description:`API base URL`}},qn={consoleRegion:{type:`string`,valueHint:`<region>`,description:`Console gateway region (e.g. cn-beijing, ap-southeast-1)`},consoleSite:{type:`string`,valueHint:`<site>`,description:`Console site: domestic, international`},consoleSwitchAgent:{type:`number`,valueHint:`<uid>`,description:`Switch agent UID for delegated access`},workspaceId:{type:`string`,valueHint:`<id>`,description:`Workspace ID (env: BAILIAN_WORKSPACE_ID)`}},Jn={accessKeyId:{type:`string`,valueHint:`<key>`,description:`Alibaba Cloud Access Key ID (env: ALIBABA_CLOUD_ACCESS_KEY_ID)`},accessKeySecret:{type:`string`,valueHint:`<key>`,description:`Alibaba Cloud Access Key Secret (env: ALIBABA_CLOUD_ACCESS_KEY_SECRET)`}};function Yn(e){return e.auth===`apiKey`?Kn:e.auth===`console`?qn:e.auth===`openapi`?Jn:{}}function Xn(e){return e}function Zn(e,t){return e.normalize(`NFKC`).replace(/[\\/:*?"<>|]/g,`_`).replace(/\s+/g,`_`).replace(/_+/g,`_`).replace(/^_+|_+$/g,``)||t}function Qn(e,t){return`${Zn(e||`image`,`image`)}_${Zn((t||``).substring(0,20),`untitled`)}_${Date.now()}`}const $n=()=>p(u(),`bailian-output`);function er(e,t){let n=t?.flagDir||e.outputDir||$n(),a=t?.subDir?p(n,t.subDir):n;return r(a)||i(a,{recursive:!0}),a}function tr(e){for(let t of Object.keys(e))e[t]===void 0&&delete e[t];return e}function nr(e,t=`boolean`){if(typeof e==`boolean`)return e;if(typeof e==`string`){let t=e.trim().toLowerCase();if(t===`true`)return!0;if(t===`false`)return!1}throw new A(`Invalid ${t} value "${String(e)}". Use true or false.`,k.USAGE)}function rr(e,t=`boolean`){if(e!=null)return nr(e,t)}function ir(e,t,n=`boolean`){let r=rr(e,n);return r===void 0?t:r}function ar(e){return rr(e,`watermark`)??!0}function or(e){let t={command:e.command,timestamp:new Date().toISOString(),durationMs:e.durationMs,success:e.success,cliVersion:e.cliVersion,nodeVersion:process.version,os:process.platform};return e.authMethod&&(t.authMethod=e.authMethod),!e.success&&e.error&&(e.error.message&&(t.errorMessage=e.error.message),e.error.httpStatus!==void 0&&(t.httpStatus=e.error.httpStatus),e.error.requestId&&(t.requestId=e.error.requestId)),e.params&&Object.keys(e.params).length>0&&(t.params=e.params),t}function sr(e){if(e==null)return;let t=typeof e==`string`?e:JSON.stringify(e);return t.length<=500?t:t.slice(0,500)}function cr(e){let{command:t,params:n,...r}=e,i={et:`EXP`,ext:r,c1:n,c2:e.success?`success`:`failure`};return e.httpStatus!==void 0&&(i.c3=String(e.httpStatus)),e.errorMessage&&(i.c4=sr(e.errorMessage)),e.requestId&&(i.c5=e.requestId),i}let H;function lr(){return H||(process.env.NODE_ENV===`development`?(H=`dev`,H):(H=import.meta.url.includes(`/node_modules/`)?`prod`:`dev`,H))}var ur=D(((e,t)=>{t.exports=(function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){typeof Symbol<`u`&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:`Module`}),Object.defineProperty(e,`__esModule`,{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t||4&t&&typeof e==`object`&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,`default`,{enumerable:!0,value:e}),2&t&&typeof e!=`string`)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,`a`,t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=``,n(n.s=8)})([function(e,t){e.exports=O(`os`)},function(e,t){e.exports=globalThis.fetch},function(e,t,n){e.exports=n(6)},function(e,t){e.exports=O(`dns`)},function(e,t){e.exports=O(`util`)},function(e,t){e.exports=O(`crypto`)},function(e,t,n){Object.defineProperty(t,Symbol.toStringTag,{value:`Module`});let r=n(7),i=(e,t)=>{t.appName=`BaiduSpider`,t.appVersion=e.value,t.deviceBrand=`Baidu`,t.deviceType=`bot`,t.platform=`other`},a=(e,t)=>{t.appName=`360 Spider`,t.appVersion=e.value,t.deviceBrand=`360`,t.deviceType=`bot`,t.platform=`other`},o=(e,t)=>{t.appName=`BingBot`,t.appVersion=e.value,t.deviceBrand=`Microsoft`,t.deviceType=`bot`,t.platform=`other`},s=(e,t)=>{t.appName=`Googlebot`,t.appVersion=e.value,t.deviceBrand=`Google`,t.deviceType=`bot`,t.platform=`other`},c=(e,t)=>{t.appName=`YandexBot`,t.appVersion=e.value,t.deviceBrand=`Yandex`,t.deviceType=`bot`,t.platform=`other`},l=(e,t)=>{e.getPreviousNTokens(3)===`Sogou web spider`&&(t.deviceBrand=`Sogou.com`,t.appName=`SogouSpider`),t.appVersion=e.value,t.deviceType=`bot`},u=(e,t)=>{t.appName=`DataproviderBot`,t.appVersion=e.value,t.deviceBrand=`Dataprovider.com`,t.deviceType=`bot`,t.platform=`other`},d=(e,t)=>{t.appName=`AhrefsBot`,t.appVersion=e.value,t.deviceBrand=`Ahrefs`,t.deviceType=`bot`,t.platform=`other`},f=(e,t)=>{t.appName=`BitSightBot`,t.appVersion=e.value,t.deviceBrand=`Bitsight`,t.deviceType=`bot`,t.platform=`other`},p=(e,t)=>{t.appName=`oBot`,t.appVersion=e.value,t.deviceBrand=`IBM`,t.deviceType=`bot`,t.platform=`other`},m=(e,t)=>{t.appName=`Cincraw`,t.appVersion=e.value,t.deviceBrand=`CINC`,t.deviceType=`bot`,t.platform=`other`},h=(e,t)=>{t.appName=`DingTalkBot`,t.appVersion=e.value,t.deviceBrand=`Alibaba`,t.deviceType=`bot`,t.platform=`other`},g=(e,t)=>{t.appName=`YisouSpider`,t.appVersion=e.value,t.deviceBrand=`Alibaba`,t.deviceType=`bot`,t.platform=`other`},_=(e,t)=>{t.appName=`ByteSpider`,t.appVersion=e.value,t.deviceBrand=`ByteDance`,t.deviceType=`bot`,t.platform=`other`},v=(e,t)=>{t.appName=`HeadlineCrawler`,t.appVersion=e.value,t.deviceBrand=`Headline.com`,t.deviceType=`bot`,t.platform=`other`},y=(e,t)=>{t.appName=`BitDiscoveryBot`,t.appVersion=e.value,t.deviceBrand=`Tenable`,t.deviceType=`bot`,t.platform=`other`},b=(e,t)=>{e.getPreviousNTokens(4)===`Screaming Frog SEO Spider`&&(t.deviceBrand=`Screaming Frog`,t.appName=`Screaming Frog`),t.appVersion=e.value,t.deviceType=`bot`},x=(e,t)=>{t.appName=`Ai2Bot`,t.appVersion=e.value,t.deviceBrand=`Ai2`,t.deviceType=`bot`,t.platform=`other`},ee=(e,t)=>{t.appName=`DianjingAdSpider`,t.appVersion=e.value,t.deviceBrand=`Dianjing`,t.deviceType=`bot`,t.platform=`other`},S=(e,t)=>{t.appName=`BaiduSpider`,t.appVersion=e.value,t.deviceBrand=`Baidu`,t.deviceType=`bot`,t.platform=`other`},C=(e,t)=>{t.appName=`360 Spider`,t.appVersion=e.value,t.deviceBrand=`360`,t.deviceType=`bot`,t.platform=`other`},te=(e,t)=>{t.appName=`BingBot`,t.appVersion=e.value,t.deviceBrand=`Microsoft`,t.deviceType=`bot`,t.platform=`other`},w=(e,t)=>{t.appName=`Googlebot`,t.appVersion=e.value,t.deviceBrand=`Google`,t.deviceType=`bot`,t.platform=`other`},T=(e,t)=>{t.appName=`YandexBot`,t.appVersion=e.value,t.deviceBrand=`Yandex`,t.deviceType=`bot`,t.platform=`other`},E=(e,t)=>{e.getPreviousNTokens(3)===`Sogou web spider`&&(t.deviceBrand=`Sogou.com`,t.appName=`SogouSpider`),t.appVersion=e.value,t.deviceType=`bot`},ne=(e,t)=>{t.appName=`DataproviderBot`,t.appVersion=e.value,t.deviceBrand=`Dataprovider.com`,t.deviceType=`bot`,t.platform=`other`},re=(e,t)=>{t.appName=`AhrefsBot`,t.appVersion=e.value,t.deviceBrand=`Ahrefs`,t.deviceType=`bot`,t.platform=`other`},ie=(e,t)=>{t.appName=`BitSightBot`,t.appVersion=e.value,t.deviceBrand=`Bitsight`,t.deviceType=`bot`,t.platform=`other`},ae=(e,t)=>{t.appName=`oBot`,t.appVersion=e.value,t.deviceBrand=`IBM`,t.deviceType=`bot`,t.platform=`other`},oe=(e,t)=>{t.appName=`Cincraw`,t.appVersion=e.value,t.deviceBrand=`CINC`,t.deviceType=`bot`,t.platform=`other`},se=(e,t)=>{t.appName=`DingTalkBot`,t.appVersion=e.value,t.deviceBrand=`Alibaba`,t.deviceType=`bot`,t.platform=`other`},D=(e,t)=>{t.appName=`YisouSpider`,t.appVersion=e.value,t.deviceBrand=`Alibaba`,t.deviceType=`bot`,t.platform=`other`},ce=(e,t)=>{t.appName=`ByteSpider`,t.appVersion=e.value,t.deviceBrand=`ByteDance`,t.deviceType=`bot`,t.platform=`other`},le=(e,t)=>{t.appName=`HeadlineCrawler`,t.appVersion=e.value,t.deviceBrand=`Headline.com`,t.deviceType=`bot`,t.platform=`other`},O=(e,t)=>{t.appName=`BitDiscoveryBot`,t.appVersion=e.value,t.deviceBrand=`Tenable`,t.deviceType=`bot`,t.platform=`other`},k=(e,t)=>{e.getPreviousNTokens(4)===`Screaming Frog SEO Spider`&&(t.deviceBrand=`Screaming Frog`,t.appName=`Screaming Frog`),t.appVersion=e.value,t.deviceType=`bot`},A=(e,t)=>{t.appName=`Ai2Bot`,t.appVersion=e.value,t.deviceBrand=`Ai2`,t.deviceType=`bot`,t.platform=`other`},ue=(e,t)=>{t.appName=`DianjingAdSpider`,t.appVersion=e.value,t.deviceBrand=`Dianjing`,t.deviceType=`bot`,t.platform=`other`},j=new Map,M=new Map;j.set(`Baiduspider-render`,i),j.set(`Baiduspider+`,i),j.set(`Baiduspider-image+`,i),j.set(`360Spider`,a),j.set(`360Spider-Image`,a),j.set(`bingbot`,o),j.set(`Googlebot`,s),j.set(`YandexRenderResourcesBot`,c),j.set(`spider`,l),j.set(`Dataprovider.com`,u),j.set(`AhrefsBot`,d),j.set(`BitSightBot`,f),j.set(`oBot`,p),j.set(`Cincraw`,m),j.set(`DingTalkBot-LinkService`,h),j.set(`YisouSpider`,g),j.set(`Bytespider`,_),j.set(`ev-crawler`,v),j.set(`bitdiscovery`,y),j.set(`Spider`,b),j.set(`Ai2Bot-Dolma`,x),j.set(`dianjing_ad_spider`,ee),M.set(`Baiduspider-render`,S),M.set(`Baiduspider+`,S),M.set(`Baiduspider-image+`,S),M.set(`360Spider`,C),M.set(`360Spider-Image`,C),M.set(`bingbot`,te),M.set(`Googlebot`,w),M.set(`YandexRenderResourcesBot`,T),M.set(`spider`,E),M.set(`Dataprovider.com`,ne),M.set(`AhrefsBot`,re),M.set(`BitSightBot`,ie),M.set(`oBot`,ae),M.set(`Cincraw`,oe),M.set(`DingTalkBot-LinkService`,se),M.set(`YisouSpider`,D),M.set(`Bytespider`,ce),M.set(`ev-crawler`,le),M.set(`bitdiscovery`,O),M.set(`Spider`,k),M.set(`Ai2Bot-Dolma`,A),M.set(`dianjing_ad_spider`,ue);let de={productHandlerMap:j,commentHandlerMap:M,getSpecialProductHandler:()=>null,getSpecialCommentHandler:()=>null,getDefaultModelHandler:()=>null};t.isBot=function(e){let t=r.createUAInfo();return r.runTask(e,t,de),t.deviceType===`bot`}},function(e,t){function n(e){let t=[],n={parent:e,tokens:t,get firstToken(){return t.length===0?null:t[0]},getNewToken(r){let i=(function(){let e=[],t=[],n=[],r=null,i=null,a=null,o=!0,s=!0,c=!0,l=null,u={get key(){return o&&=(r=e.join(``),!1),r},get value(){return s&&=(i=t.join(``),!1),i},get originValue(){return c&&=(a=n.join(``),!1),a},previousToken:null,properties:null,appendKey(t){e.push(t),o=!0},appendValue(e){t.push(e===`_`?`.`:e),n.push(e),s=!0,c=!0,l=null},getSplitValue(e){if(l===null){let e=u.value;l=e===``?[]:e.split(`/`)}return e>=0&&e<l.length?l[e]:null},getPreviousNTokens(e){let t=[],n=u;for(let r=0;r<e;r++){if(n==null)return null;t.unshift(n.key),n=n.previousToken}return t.join(` `)}};return u})();return t.push(i),i.previousToken=r===void 0?t.length>1?t[t.length-2]:null:r,e&&(e.properties=n),i},getLastToken:()=>t.length===0?null:t[t.length-1],getFirstToken:()=>t.length===0?null:t[0],isEmpty:()=>t.length===0};return n}function r(){return{appName:null,appVersion:null,browserName:null,browserVersion:null,engineName:null,engineVersion:null,deviceBrand:null,deviceModel:null,deviceType:`mobile`,osName:null,osVersion:null,platform:`web`,tokenGroup:n(null)}}let i=new Set(` ;,"'`.split(``)),a=new Set(`/=:`.split(``)),o=new Set([`Mozilla`,`AppleWebKit`,`Safari`,`Opera`,`Dalvik`,`com.ss.android.ugc.aweme`]);function s(e){return e.length===1&&i.has(e)}function c(e){return e.length===1&&a.has(e)}function l(e,t,n,r){if(e==null)return;let i=t.parent,a=e.key,s=null;if(i!=null){let e=i.key;o.has(e)?(s=r.commentHandlerMap.get(a)??null,s??=r.getSpecialCommentHandler(a),s==null&&a.endsWith(` Build`)&&(s=r.getDefaultModelHandler())):s=r.productHandlerMap.get(a)??r.getSpecialProductHandler(a)}else s=r.productHandlerMap.get(a)??r.getSpecialProductHandler(a);if(s!=null)try{s(e,n)}catch{}}function u(e,t,r){if(e==null)throw Error(`input can not be null`);return(function e(t,r,i,a,o){let u,d=null,f=null,p=!1,m=t.length,h=r>0?t[r-1]:`\0`;for(u=r;u<m;u++){let g=t[u];if(s(g)){let e=h!==`\0`&&s(h);if(!p&&r>0&&g===` `&&!e){let e=u+1;if(e<m){let n=t[e];/\d/.test(n)||n===`-`?p=!0:f?.appendKey(g)}else f?.appendKey(g)}else f!=null&&(d=f,f=null);h=g}else if(g===`(`){if(h===`(`){h=g;continue}let r=u;u=e(t,u+1,n(i.getLastToken()),a,o),f!=null&&(d=f,f=null),h=t[r]}else{if(g===`)`){if(r===0){h=g;continue}break}f??(l(i.getLastToken(),i,a,o),f=i.getNewToken(d),p=!1),c(g)?(p&&f.appendValue(g),p=!0):p?f.appendValue(g):f.appendKey(g),h=g}}return l(i.getLastToken(),i,a,o),u})(e,0,t.tokenGroup,t,r),t}Object.defineProperty(t,`DEFAULT_MODEL_HANDLER_KEY`,{enumerable:!0,get:function(){return`DEFAULT_MODEL_HANDLER`}}),Object.defineProperty(t,`createUAInfo`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(t,`runTask`,{enumerable:!0,get:function(){return u}})},function(e,t,n){n.r(t);var r=n(0),i=n.n(r),a=n(1),o=n.n(a);n(2);function s(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:20,t=arguments.length>1?arguments[1]:void 0;return t||=``,e?s(--e,`0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz`.charAt(Math.floor(60*Math.random()))+t):t}function c(e,t){for(var n in t)e[n]=t[n];return e}function l(e){return Object.prototype.toString.call(e)===`[object Object]`}function u(e){return typeof Promise<`u`&&e instanceof Promise}var d=Object.freeze({__aesBeforeSkip:1}),f=function(e){var t=Object.prototype.toString.call(e);if(t===`[object String]`&&e||t===`[object Number]`||t===`[object Boolean]`)return e;if(t===`[object Object]`||t===`[object Array]`)try{return JSON.stringify(e)}catch{}},p=function(e){var t={};for(var n in e){var r=e[n];r!==void 0&&(t[n]=f(r))}return t},m=function(e){var t=[];for(var n in e){var r=f(e[n]);r!==void 0&&t.push(`${n}=${encodeURIComponent(r)}`)}return t.join(`&`)};function h(e){return(e.requiredFields||[]).concat([`pid`]).some(function(t){return e[t]===void 0})}function g(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:``,t=arguments.length>1?arguments[1]:void 0;typeof console<`u`&&console.warn(`日志解析报错,埋点将被丢弃 => ${e}`,t)}var _=`AEM_TRACKER_UNIQUE_PVID`,v=typeof globalThis<`u`&&globalThis?globalThis:typeof window<`u`&&window?window:typeof global<`u`&&global?global:typeof self<`u`&&self?self:(console.error(`Unable to locate global object in current environment`),{});function y(e){this._queue=[],this._reqQueue=[],this._plugins={},this._subscribers={onConfigUpdated:[]},this._timeout=0,this._config={sdk_version:`3.3.18`,set pv_id(e){v[_]=e},get pv_id(){return v[_]||(v[_]=s()),v[_]},timezone_offset:new Date().getTimezoneOffset()},e&&(this._config=c(this._config,e))}y.prototype={constructor:y,_sendAll:function(){if(this._timeout&&=(clearTimeout(this._timeout),0),this._queue.length){var e,t=this._config.maxUrlLength||3e4,n=this._getSendConfig();try{e=this._processData(this._queue,n)}catch{}if(e&&e.length<t)return this._queue=[],void this.send(e);for(var r,i=[];this._queue.length;){i.push(this._queue.shift());try{r=this._processData(i,n)}catch(e){var a=i.pop();g(e.message,a);continue}if(r.length>t){i.length>1&&(this._queue.unshift(i.pop()),r=this._processData(i,n));break}}r&&this.send(r),this._queue.length&&this._sendAll()}},_send:function(e,t){var n=this;if(!1===t){var r;try{r=this._processData([e])}catch(t){g(t.message,e)}r&&this.send(r)}else{this._queue.push(e);var i=this._config.mergeRequestInterval||500;this._timeout||=setTimeout(function(){n._sendAll()},i)}},_getSendConfig:function(){var e={},t=this._config;for(var n in t)n!==`requiredFields`&&n!==`maxUrlLength`&&n!==`queueGlobalName`&&n!==`debug`&&n!==`excludeCrawlers`&&n!==`collectClientHints`&&n.indexOf(`plugin`)!==0&&t[n]!==``&&t[n]!==null&&t[n]!==void 0&&(e[n]=f(t[n]));return e},_processData:function(e,t){t||=this._getSendConfig();var n=m(t);return n+=`&msg=`+encodeURIComponent(e.map(function(e){return m(e)}).join(`|`))},setConfig:function(e,t){var n=this,r={};t===void 0?r=e:r[e]=t;var i=!(function e(t,n){if(t===void 0||n===void 0||!l(t)||!l(n))return!1;for(var r in t)if(l(t[r])){if(!e(t[r],n[r]))return!1}else if(t[r]!==n[r])return!1;return!0})(r,this._config),a=function(){if(i){for(var e in r)l(r[e])?n._config[e]=c(n._config[e]||{},r[e]):n._config[e]=r[e];n._execSubscribe(`onConfigUpdated`,[r,n._config])}};this._reqQueue.length?(a(),h(this._config)||(this._reqQueue.forEach(function(e){n._send.apply(n,e)}),this._reqQueue=[])):(i&&this._sendAll(),a())},getConfig:function(e){return e?this._config[e]:this._config},updatePVID:(function(e,t){if(typeof e!=`function`)throw TypeError(`Expected a function`);t=typeof t==`number`&&t>=0?t:100;var n=null;return function(){if(n===null){var r=this,i=Array.prototype.slice.call(arguments);n=setTimeout(function(){n=null},t),e.apply(r,i)}}})(function(){v[_]=s()},200),log:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};e&&(t.ts=t.ts||new Date().getTime(),t.type=e,this._print(`log`,e,t),t=p(t),h(this._config)?this._reqQueue.length<1e3&&this._reqQueue.push([t,n.combo]):this._send(t,n.combo))},before:function(e,t){var n=this;return function(){var r=arguments,i=t.apply(n,r);i!==d&&(u(i)?i.then(function(t){t!==d&&e.apply(n,t||r)}):e.apply(n,i||r))}},after:function(e,t){var n=this;return function(){var r=arguments;e.apply(n,r),t.apply(n,r)}},use:function(e,t){var n=this;return Object.prototype.toString.call(e)===`[object Array]`?e.map(function(e){if(Object.prototype.toString.call(e)===`[object Array]`){var t=e[0],r=e[1];return n._plugins[t]||(n._plugins[t]=new t(n,r))}return n._plugins[e]||(n._plugins[e]=new e(n))}):this._plugins[e]||(this._plugins[e]=new e(this,t))},_print:function(){this._config.debug&&typeof console<`u`&&console.log.apply(console,arguments)},onConfigUpdated:function(e){this._subscribers.onConfigUpdated&&this._subscribers.onConfigUpdated.push(e)},_execSubscribe:function(e,t){this._subscribers[e]&&this._subscribers[e].forEach(function(e){e.apply(this,t)})}};var b=y,x=n(3),ee=n.n(x),S=n(4),C=n(5),te=n.n(C);function w(e){return(w=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e})(e)}function T(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function E(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?T(Object(n),!0).forEach(function(t){ne(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):T(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function ne(e,t,n){return(t=(function(e){var t=(function(e,t){if(w(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(w(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)})(e,`string`);return w(t)==`symbol`?t:t+``})(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function re(e,t){var n=typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(!n){if(Array.isArray(e)||(n=ae(e))||t&&e&&typeof e.length==`number`){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw TypeError(`Invalid attempt to iterate non-iterable instance.
|
|
8
|
-
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||n.return==null||n.return()}finally{if(s)throw a}}}}function
|
|
9
|
-
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)})()}function
|
|
10
|
-
`,{mode:384})}catch{}}async function
|
|
11
|
-
`).filter(Boolean),n=[];for(let e of t)try{let t=
|
|
5
|
+
`),d=`ACS3-HMAC-SHA256`,f=`${d}\n${jt(u)}`,p=Mt(e.accessKeySecret,f);return a.authorization=`${d} Credential=${e.accessKeyId},SignedHeaders=${c},Signature=${p}`,a}function At(e){return encodeURIComponent(e).replace(/[!'()*]/g,e=>`%${e.charCodeAt(0).toString(16).toUpperCase()}`)}function jt(e){return v(`sha256`).update(e,`utf8`).digest(`hex`)}function Mt(e,t){return y(`sha256`,e).update(t,`utf8`).digest(`hex`)}const Nt=`${ge.cn}/api/v1/uploads`;async function Pt(e,t,n){let r=`${Nt}?action=getPolicy&model=${encodeURIComponent(t)}`,i=zt(15e3,n),a=await fetch(r,{headers:{Authorization:`Bearer ${e}`,"Content-Type":`application/json`,...R()},signal:i.signal}).finally(i.cleanup);if(!a.ok){let e=await a.text().catch(()=>``);throw new N(`Failed to get upload policy (HTTP ${a.status}): ${e}`,M.GENERAL)}return(await a.json()).data}async function Ft(e,t,n){let r=m(t),i=`${e.upload_dir}/${r}`,a=o(t),s=new FormData;s.append(`OSSAccessKeyId`,e.oss_access_key_id),s.append(`Signature`,e.signature),s.append(`policy`,e.policy),s.append(`x-oss-object-acl`,e.x_oss_object_acl),s.append(`x-oss-forbid-overwrite`,e.x_oss_forbid_overwrite),s.append(`key`,i),s.append(`success_action_status`,`200`),s.append(`file`,new Blob([a]),r);let c=zt(12e4,n),l=await fetch(e.upload_host,{method:`POST`,headers:{...R()},body:s,signal:c.signal}).finally(c.cleanup);if(!l.ok){let e=await l.text().catch(()=>``);throw new N(`Failed to upload file to OSS (HTTP ${l.status}): ${e}`,M.GENERAL)}return`oss://${i}`}async function It(e){let{apiKey:t,model:n,filePath:r,signal:a}=e;if(!i(r))throw new N(`File not found: ${r}`,M.USAGE);if(!l(r).isFile())throw new N(`Not a file: ${r}`,M.USAGE);return Ft(await Pt(t,n,a),r,a)}function Lt(e){return e.startsWith(`http://`)||e.startsWith(`https://`)||e.startsWith(`oss://`)||e.startsWith(`data:`)?!1:i(e)}async function Rt(e,t,n,r={}){return Lt(e)?It({apiKey:t,model:n,filePath:e,signal:r.signal}):e}function zt(e,t){let n=new AbortController,r=setTimeout(()=>n.abort(),e),i=()=>n.abort(t?.reason),a=()=>{clearTimeout(r),t?.removeEventListener(`abort`,i)};return t?.aborted?i():t?.addEventListener(`abort`,i,{once:!0}),n.signal.addEventListener(`abort`,a,{once:!0}),{signal:n.signal,cleanup:a}}function Bt(e){return`/api/v1/mcps/${e}/mcp`}var Vt=class{url;sessionId;nextId=1;deps;authToken;constructor(e,t,n){this.deps=e,this.url=t,this.authToken=n}async initialize(){if(!this.authToken)throw new N(`This command needs a model-domain API key.`,M.AUTH);let e=await this.rpc(`initialize`,{protocolVersion:`2025-03-26`,capabilities:{},clientInfo:{name:this.deps.identity.clientName,version:this.deps.identity.version}});this.deps.settings.verbose&&(console.error(`[MCP] Session initialized: ${this.sessionId??`no session`}`),console.error(`[MCP] Server: ${JSON.stringify(e)}`)),await this.notify(`notifications/initialized`)}async listTools(){return(await this.rpc(`tools/list`)).tools||[]}async callTool(e,t){return await this.rpc(`tools/call`,{name:e,arguments:t})}async rpc(e,t){let n={jsonrpc:`2.0`,id:this.nextId++,method:e,...t?{params:t}:{}},r=await(await this.send(n)).json();if(r.error)throw new N(`MCP error (${r.error.code}): ${r.error.message}`,M.GENERAL);return r.result}async notify(e,t){let n={jsonrpc:`2.0`,method:e,...t?{params:t}:{}};await this.send(n)}async send(e){let t={"Content-Type":`application/json`,Accept:`application/json, text/event-stream`,"User-Agent":`${this.deps.identity.clientName}/${this.deps.identity.version}`,...R()};this.authToken&&(t.Authorization=`Bearer ${this.authToken}`),this.sessionId&&(t[`Mcp-Session-Id`]=this.sessionId),this.deps.settings.verbose&&(console.error(`> POST ${this.url}`),console.error(`> Method: ${e.method}`));let n=this.deps.settings.timeout*1e3,r=await fetch(this.url,{method:`POST`,headers:t,body:JSON.stringify(e),signal:AbortSignal.timeout(n)});this.deps.settings.verbose&&console.error(`< ${r.status} ${r.statusText}`);let i=r.headers.get(`Mcp-Session-Id`)||r.headers.get(`mcp-session-id`);if(i&&(this.sessionId=i),!r.ok){let e=`MCP request failed: ${r.status} ${r.statusText}`;try{let t=await r.text();t&&(e+=` - ${t.slice(0,500)}`)}catch{}throw new N(e,M.GENERAL)}return r}};const Ht={"cn-beijing":{domestic:{csGateway:`bailian-cs.console.aliyun.com`,action:`BroadScopeAspnGateway`},international:{csGateway:`bailian-cs.console.alibabacloud.com`,action:`BroadScopeAspnGateway`}},"ap-southeast-1":{domestic:{csGateway:`modelstudio-cs.console.aliyun.com`,action:`IntlBroadScopeAspnGateway`},international:{csGateway:`bailian-singapore-cs.alibabacloud.com`,action:`IntlBroadScopeAspnGateway`}}};function Ut(e,t){return Ht[e]?.[t]??Ht[`cn-beijing`][t]}function Wt(e){let t=e.consoleRegion??`cn-beijing`,n=e.consoleSite??`domestic`,r=e.consoleSwitchAgent;return r==null?{consoleRegion:t,consoleSite:n}:{consoleRegion:t,consoleSite:n,consoleSwitchAgent:r}}function Gt(e,t,n){return JSON.stringify({Api:e,V:`1.0`,Data:{...t,cornerstoneParam:{protocol:`V2`,console:`ONE_CONSOLE`,productCode:`p_efm`,consoleSite:`BAILIAN_ALIYUN`,...n==null?{}:{switchAgent:n},...typeof t.cornerstoneParam==`object`&&t.cornerstoneParam!==null?t.cornerstoneParam:{}}}})}async function Kt(e,t,{api:n,data:r}){let i=Ut(e.region,e.site),a=`https://${i.csGateway}`,o=i.action,s=Gt(n,r,e.switchAgent),c=new URLSearchParams({params:s,region:e.region}),l=t*1e3,u={Accept:`*/*`,"Content-Type":`application/x-www-form-urlencoded`};e.token&&(u.Authorization=`Bearer ${e.token}`);let d=await fetch(`${a}/cli/api.json?action=${o}&product=sfm_bailian&api=${encodeURIComponent(n)}`,{method:`POST`,headers:u,body:c.toString(),signal:AbortSignal.timeout(l)});if(!d.ok){let e=await d.text().catch(()=>``);throw new N(`Console CLI gateway failed: HTTP ${d.status} ${d.statusText}`,M.GENERAL,e.slice(0,500))}let f=await d.json(),p=f.data;if(p?.success===!1&&p.errorCode){let e=p.errorCode,t=typeof e==`string`?e:JSON.stringify(e),n=t.includes(`NotLogined`),r=typeof p.errorMsg==`string`?p.errorMsg:void 0;throw new N(n?`Console session is not logged in or has expired.`:`Console gateway error: ${t}`,n?M.AUTH:M.GENERAL,n?"Run `bl auth login --console` to sign in or refresh your console session.":r&&r!==t?r:void 0)}return f}var qt=class{constructor(e){this.deps=e}get http(){return{identity:this.deps.identity,settings:this.deps.settings}}requireApi(){if(!this.deps.apiCred)throw new N(`This command needs a model-domain API key.`,M.AUTH);return this.deps.apiCred}requireOpenApi(){if(!this.deps.openApiCred)throw new N(`This command needs Alibaba Cloud OpenAPI AK/SK credentials.`,M.AUTH);return this.deps.openApiCred}get baseUrl(){return this.deps.apiCred?.baseUrl??this.deps.baseUrl}url(e){return this.baseUrl+e}toOpts({path:e,...t}){let n=this.requireApi();return{...t,url:/^https?:\/\//.test(e)?e:n.baseUrl+e,headers:{...t.headers,Authorization:`Bearer ${n.token}`}}}request(e){return Tt(this.http,this.toOpts(e))}requestJson(e){return Dt(this.http,this.toOpts(e))}uploadFile(e,t,n={}){return Lt(e)?Rt(e,this.requireApi().token,t,n):Promise.resolve(e)}mcp(e){let t=/^https?:\/\//.test(e)?e:this.requireApi().baseUrl+e;return new Vt(this.http,t,this.deps.apiCred?.token)}console(e,t){if(!this.deps.consoleCred)throw new N(`This command needs a console access token.`,M.AUTH);return Kt(this.deps.consoleCred,this.deps.settings.timeout,{api:e,data:t})}async openApiQueryJson(e){let t=this.requireOpenApi(),n=Ot(e.queryParams),r=`https://${e.host}${e.path}${n?`?${n}`:``}`,i=kt({accessKeyId:t.accessKeyId,accessKeySecret:t.accessKeySecret,action:e.action,version:e.version,body:``,host:e.host,pathname:e.path,method:e.method,queryString:n});this.deps.settings.verbose&&(process.stderr.write(`> ${e.method} ${r}\n`),process.stderr.write(`> AK: ${Ct(t.accessKeyId)}\n`));let a=this.deps.settings.timeout*1e3,o=await fetch(r,{method:e.method,headers:{...i,...R()},signal:AbortSignal.timeout(a)});this.deps.settings.verbose&&process.stderr.write(`< ${o.status} ${o.statusText}\n`);let s=await o.json();if(!o.ok||s.Success===!1)throw new N(`${s.Code||o.status} - ${s.Message||o.statusText}`,M.GENERAL);return s}};async function*Jt(e){let t=e.body?.getReader();if(!t)return;let n=new TextDecoder,r=``,i=16*1024*1024;try{for(;;){let{done:e,value:a}=await t.read();if(e)break;if(r+=n.decode(a,{stream:!0}),r.length>i)throw new N(`SSE stream exceeded the maximum buffer size.`,M.GENERAL);let o=r.split(`
|
|
6
|
+
`);r=o.pop()||``;let s={};for(let e of o){if(e===``){s.data!==void 0&&(yield{data:s.data,event:s.event,id:s.id}),s={};continue}if(e.startsWith(`:`))continue;let t=e.indexOf(`:`);if(t===-1)continue;let n=e.slice(0,t),r=e.slice(t+1).trimStart();switch(n){case`data`:if(s.data=s.data===void 0?r:`${s.data}\n${r}`,s.data.length>i)throw new N(`SSE event exceeded the maximum buffer size.`,M.GENERAL);break;case`event`:s.event=r;break;case`id`:s.id=r;break}}}if(r.trim()&&r.includes(`data:`)){let e=r.indexOf(`:`);e!==-1&&(yield{data:r.slice(e+1).trimStart()})}}finally{t.releaseLock()}}const Yt=`zeldaHttp.dashscopeModel./zelda/api/v1/modelCenter/listFoundationModels`,Xt=`zeldaEasy.bmp.modelPredictRpcService.getPredictParamConfig`;function Zt(e){let t=e.data;if(!t)return e;let n=t.DataV2;if(n){let e=n.data;return e?.data??e??n}return t.data??t}async function Qt(e,t={}){let{pageNo:n=1,pageSize:r=50,name:i=``,providers:a=[],capabilities:o=[]}=t,s=Zt(await e(Yt,{input:{pageNo:n,pageSize:r,name:i,providers:a,inferenceProviders:[],features:[],group:!0,capabilities:o,contextWindows:[]}})),c=s.total??0,l=s.list??[],u=[];for(let e of l){let t=e.items;if(t?.length)for(let e of t)u.push(e);else u.push(e)}return{total:c,models:u}}async function $t(e,t={}){let{pageNo:n=1,pageSize:r=50,name:i=``,providers:a=[],capabilities:o=[],features:s=[],contextWindows:c=[],querySampleCode:l}=t,u={pageNo:n,pageSize:r,name:i,providers:a,inferenceProviders:[],features:s,group:!0,capabilities:o,contextWindows:c,queryPermissions:!0,queryApplyStatus:!0,queryActivationStatus:!0,queryPrice:!0,queryQpmInfo:!0,supports:{inference:!0}};l&&(u.querySampleCode=!0);let d=Zt(await e(Yt,{input:u}));return{total:d.total??0,groups:d.list??[]}}async function en(e,t){return(Zt(await e(`zeldaHttp.dashscopeModel./zelda/api/v1/modelCenter/listFoundationModels`,{input:{pageNo:1,pageSize:50,group:!0,model:t,querySampleCode:!0,queryGroupByModel:!0,queryWorkspaceLimit:!0,queryPrice:!0,queryQuota:!1,queryQpmInfo:!0,queryApplyStatus:!0,queryPermissions:!0,queryActivationStatus:!0}})).list??[])[0]??null}const tn=[`name`,`key`,`default`,`tip`,`range`];function nn(e){return e.map(e=>{let t={};for(let n of tn)e[n]!==void 0&&(t[n]=e[n]);return t})}async function rn(e,t){let n=(await e(Xt,{modelId:t})).predictConfig;if(!n)return null;if(typeof n==`string`)try{let e=JSON.parse(n);return Array.isArray(e)?nn(e):null}catch{return null}return Array.isArray(n)?nn(n):null}function an(){return{read:()=>I(),async write(e){let t=I();for(let[n,r]of Object.entries(e))r===void 0?delete t[n]:t[n]=r;await L(t)},async unset(e){let t=I();for(let n of e)delete t[n];await L(t)},get path(){return F()}}}async function on(e,t){let{filePath:r,purpose:i=`fine-tune`,signal:a}=t,o=l(r),s=m(r),c=ne.toWeb(n(r)),u=await new Response(c).blob(),d=new FormData;d.append(`file`,u,s),d.append(`purpose`,i);let f=await e.requestJson({path:ot(),method:`POST`,body:d,signal:a});if(f.id)return{file_id:f.id,name:f.filename??s,size:f.bytes??o.size,purpose:f.purpose??i,gmt_create:f.created_at?new Date(f.created_at*1e3).toISOString():void 0};let p=f.data?.failed_uploads;if(Array.isArray(p)&&p.length>0){let e=p[0]??{};throw new N(`Dataset upload failed${e.code?` [${e.code}]`:``}: ${e.message??`no message returned`}`,M.GENERAL,`Server reported failure for ${s}. Re-run with --verbose to see the raw response.`)}throw new N(`Dataset upload of ${s} returned no file_id (HTTP 200 with empty payload).`,M.GENERAL,`The platform accepted the request but did not allocate a file_id. Retry the upload; if it recurs, contact platform support with the request id.`)}async function sn(e,t={}){let n=new URLSearchParams;t.pageNo!==void 0&&n.set(`page_no`,String(t.pageNo)),t.pageSize!==void 0&&n.set(`page_size`,String(t.pageSize)),t.purpose&&n.set(`purpose`,t.purpose);let r=st(),i=n.toString()?`${r}?${n.toString()}`:r;return e.requestJson({path:i,method:`GET`,signal:t.signal})}async function cn(e,t,n){return e.requestJson({path:ct(t),method:`GET`,signal:n})}async function ln(e,t,n){let r=await e.request({path:ct(t),method:`DELETE`,signal:n});try{return await r.json()}catch{return{data:{deleted:!0,file_id:t}}}}const un=300*1024*1024,dn=1024*1024*1024;function fn(e,t=un){if(!i(e))throw new N(`File not found: ${e}`,M.USAGE);let n=l(e);if(!n.isFile())throw new N(`Not a regular file: ${e}`,M.USAGE);if(n.size===0)throw new N(`File is empty: ${e}`,M.USAGE);if(n.size>t)throw new N(`File too large: ${(n.size/(1024*1024)).toFixed(1)}MB exceeds the ${(t/(1024*1024)).toFixed(0)}MB dataset upload cap.`,M.USAGE);return{bytes:n.size,ext:h(e).toLowerCase()}}function z(e,t,n,r={}){return{severity:e,code:t,message:n,...r}}function pn(e){if(e===void 0||e.trim()===``)return;let t=e.trim();if(t===`chatml`||t===`dpo`||t===`cpt`||t===`tts`||t===`image`||t===`video`)return t;throw new N(`Unsupported --schema "${e}". Supported: chatml, dpo, cpt, tts, image.`,M.USAGE,`Omit --schema to auto-detect per record (chosen/rejected → DPO, text → CPT, wav_fn → TTS, img_path → image, else ChatML).`)}function mn(e,t=50,n=100,r=10){if(e<=0)return[];if(e<=t+r)return Array.from({length:e},(e,t)=>t+1);let i=new Set;for(let n=1;n<=Math.min(t,e);n++)i.add(n);for(let t=0;t<r;t++)i.add(e-t);let a=Math.max(1,Math.ceil(e/n));for(let n=t+1;n<=e-r;n+=a)i.add(n);return[...i].filter(t=>t>=1&&t<=e).sort((e,t)=>e-t)}const hn=new Set([`system`,`user`,`assistant`]);function gn(e,t,n){let r=[];if(typeof e!=`object`||!e||Array.isArray(e))return r.push(z(`error`,`MESSAGE_NOT_OBJECT`,`Message must be an object.`,{line:t,path:n})),r;let i=e,a=i.role,o=i.content;return(typeof a!=`string`||!hn.has(a))&&r.push(z(`error`,`INVALID_ROLE`,`Invalid role "${String(a)}". Expected one of: system, user, assistant.`,{line:t,path:`${n}.role`})),typeof o!=`string`&&r.push(z(`error`,`INVALID_CONTENT`,`"content" must be a string (got ${typeof o}).`,{line:t,path:`${n}.content`})),r}function _n(e,t){let n=[],r=e.messages;if(!Array.isArray(r))return n.push(z(`error`,`MISSING_MESSAGES`,`Required field "messages" is missing or not an array.`,{line:t,path:`messages`})),n;if(r.length===0)return n.push(z(`error`,`EMPTY_MESSAGES`,`"messages" must contain at least one entry.`,{line:t,path:`messages`})),n;let i=!1,a;for(let e=0;e<r.length;e++){let o=r[e],s=`messages[${e}]`;n.push(...gn(o,t,s));let c=o?.role;c===`system`&&(e!==0&&n.push(z(`warning`,`SYSTEM_NOT_FIRST`,`"system" message should appear at index 0; found at index ${e}.`,{line:t,path:`${s}.role`})),i=!0),a===c&&(c===`user`||c===`assistant`)&&n.push(z(`warning`,`ROLE_NOT_ALTERNATING`,`Consecutive ${c} messages — user/assistant turns should typically alternate.`,{line:t,path:`${s}.role`})),typeof c==`string`&&(a=c)}return r.some(e=>e.role===`user`)||n.push(z(`warning`,`NO_USER_ROLE`,`No "user" message found in this sample.`,{line:t,path:`messages`})),i&&r.length===1&&n.push(z(`warning`,`SYSTEM_ONLY`,`Sample only contains a "system" message.`,{line:t,path:`messages`})),n}const vn={name:`chatml`,detect:()=>!0,inspect:_n};function yn(e,t){let n=[];if(!(`text`in e))return n.push(z(`error`,`MISSING_TEXT`,`Required field "text" is missing.`,{line:t,path:`text`})),n;let r=e.text;return typeof r==`string`?(r.trim().length===0&&n.push(z(`error`,`EMPTY_TEXT`,`"text" must not be empty / whitespace-only.`,{line:t,path:`text`})),n):(n.push(z(`error`,`INVALID_TEXT`,`"text" must be a string (got ${typeof r}).`,{line:t,path:`text`})),n)}const bn={name:`cpt`,detect:e=>`text`in e&&!(`messages`in e),inspect:yn};function xn(e,t){let n=_n(e,t),r=e.messages;if(!Array.isArray(r)||r.length===0)return n;let i=`chosen`in e,a=`rejected`in e;if(i||n.push(z(`error`,`MISSING_CHOSEN`,`DPO record is missing the "chosen" preference.`,{line:t,path:`chosen`})),a||n.push(z(`error`,`MISSING_REJECTED`,`DPO record is missing the "rejected" preference.`,{line:t,path:`rejected`})),i){n.push(...gn(e.chosen,t,`chosen`));let r=e.chosen?.role;typeof r==`string`&&r!==`assistant`&&n.push(z(`warning`,`PREFERENCE_ROLE_NOT_ASSISTANT`,`"chosen" role should be "assistant" (got "${r}").`,{line:t,path:`chosen.role`}))}if(a){n.push(...gn(e.rejected,t,`rejected`));let r=e.rejected?.role;typeof r==`string`&&r!==`assistant`&&n.push(z(`warning`,`PREFERENCE_ROLE_NOT_ASSISTANT`,`"rejected" role should be "assistant" (got "${r}").`,{line:t,path:`rejected.role`}))}return n}const Sn={name:`dpo`,detect:e=>`chosen`in e||`rejected`in e,inspect:xn};function Cn(e,t){let n=[];if(!(`wav_fn`in e))n.push(z(`error`,`MISSING_WAV_FN`,`Required field "wav_fn" is missing.`,{line:t,path:`wav_fn`}));else{let r=e.wav_fn;if(typeof r!=`string`)n.push(z(`error`,`INVALID_WAV_FN`,`"wav_fn" must be a string (got ${typeof r}).`,{line:t,path:`wav_fn`}));else if(r.trim().length===0)n.push(z(`error`,`EMPTY_WAV_FN`,`"wav_fn" must not be empty.`,{line:t,path:`wav_fn`}));else{r.startsWith(`train/`)||n.push(z(`error`,`WAV_FN_PREFIX`,`"wav_fn" must start with "train/" (got "${r}").`,{line:t,path:`wav_fn`}));let e=r.lastIndexOf(`.`),i=e>=0?r.slice(e).toLowerCase():``;i!==`.wav`&&n.push(z(`error`,`INVALID_AUDIO_EXT`,`"wav_fn" must reference a .wav file (got "${i||`(none)`}"). CosyVoice training audio must be WAV.`,{line:t,path:`wav_fn`}))}}if(!(`text`in e))n.push(z(`error`,`MISSING_TEXT`,`Required field "text" is missing.`,{line:t,path:`text`}));else{let r=e.text;typeof r==`string`?r.trim().length===0&&n.push(z(`error`,`EMPTY_TEXT`,`"text" must not be empty / whitespace-only.`,{line:t,path:`text`})):n.push(z(`error`,`INVALID_TEXT`,`"text" must be a string (got ${typeof r}).`,{line:t,path:`text`}))}return n}const wn={name:`tts`,detect:e=>`wav_fn`in e,inspect:Cn},B=new Set([`.png`,`.jpg`,`.jpeg`,`.bmp`,`.webp`,`.tiff`]);function Tn(e){let t=e.lastIndexOf(`.`);return t>=0?e.slice(t).toLowerCase():``}function En(e){return/^[\x20-\x7E]+$/.test(e)}function Dn(e,t){let n=[];if(!(`prompt`in e))n.push(z(`error`,`MISSING_PROMPT`,`Required field "prompt" is missing.`,{line:t,path:`prompt`}));else{let r=e.prompt;typeof r==`string`?r.trim().length===0&&n.push(z(`error`,`EMPTY_PROMPT`,`"prompt" must not be empty / whitespace-only.`,{line:t,path:`prompt`})):n.push(z(`error`,`INVALID_PROMPT`,`"prompt" must be a string (got ${typeof r}).`,{line:t,path:`prompt`}))}if(!(`img_path`in e))n.push(z(`error`,`MISSING_IMG_PATH`,`Required field "img_path" is missing.`,{line:t,path:`img_path`}));else{let r=e.img_path;if(typeof r!=`string`)n.push(z(`error`,`INVALID_IMG_PATH`,`"img_path" must be a string (got ${typeof r}).`,{line:t,path:`img_path`}));else if(r.trim().length===0)n.push(z(`error`,`EMPTY_IMG_PATH`,`"img_path" must not be empty.`,{line:t,path:`img_path`}));else{let e=Tn(r);B.has(e)||n.push(z(`warning`,`UNUSUAL_IMAGE_EXT`,`"img_path" points to a non-standard image extension "${e||`(none)`}". Expected one of: ${[...B].join(`, `)}.`,{line:t,path:`img_path`})),En(r)||n.push(z(`error`,`NON_ASCII_IMG_PATH`,`"img_path" must contain only ASCII characters (English filenames required). Got: "${r}".`,{line:t,path:`img_path`}))}}if(`input_img`in e){let r=e.input_img;if(typeof r!=`string`)n.push(z(`error`,`INVALID_INPUT_IMG`,`"input_img" must be a string (got ${typeof r}).`,{line:t,path:`input_img`}));else if(r.trim().length===0)n.push(z(`error`,`EMPTY_INPUT_IMG`,`"input_img" must not be empty.`,{line:t,path:`input_img`}));else{let e=Tn(r);B.has(e)||n.push(z(`warning`,`UNUSUAL_INPUT_IMG_EXT`,`"input_img" points to a non-standard image extension "${e||`(none)`}". Expected one of: ${[...B].join(`, `)}.`,{line:t,path:`input_img`})),En(r)||n.push(z(`error`,`NON_ASCII_INPUT_IMG`,`"input_img" must contain only ASCII characters (English filenames required). Got: "${r}".`,{line:t,path:`input_img`}))}}return n}const On={name:`image`,detect:e=>`img_path`in e,inspect:Dn},kn=new Set([`.png`,`.jpg`,`.jpeg`,`.bmp`,`.webp`]),An=new Set([`.mp4`,`.mov`]);function jn(e){let t=e.lastIndexOf(`.`);return t>=0?e.slice(t).toLowerCase():``}function Mn(e){return/^[\x20-\x7E]+$/.test(e)}function Nn(e,t,n,r,i,a){if(!(n in t)){r&&e.push(z(`error`,`MISSING_FIELD`,`Required field "${n}" is missing.`,{line:a,path:n}));return}let o=t[n];if(typeof o!=`string`){e.push(z(`error`,`INVALID_FIELD`,`"${n}" must be a string (got ${typeof o}).`,{line:a,path:n}));return}if(o.trim().length===0){e.push(z(`error`,`EMPTY_FIELD`,`"${n}" must not be empty.`,{line:a,path:n}));return}let s=jn(o);i.has(s)||e.push(z(`warning`,`UNUSUAL_MEDIA_EXT`,`"${n}" points to a non-standard extension "${s||`(none)`}". Expected one of: ${[...i].join(`, `)}.`,{line:a,path:n})),Mn(o)||e.push(z(`error`,`NON_ASCII_PATH`,`"${n}" must contain only ASCII characters (English filenames required). Got: "${o}".`,{line:a,path:n}))}function Pn(e,t){let n=[];if(!(`prompt`in e))n.push(z(`error`,`MISSING_PROMPT`,`Required field "prompt" is missing.`,{line:t,path:`prompt`}));else{let r=e.prompt;typeof r==`string`?r.trim().length===0&&n.push(z(`error`,`EMPTY_PROMPT`,`"prompt" must not be empty / whitespace-only.`,{line:t,path:`prompt`})):n.push(z(`error`,`INVALID_PROMPT`,`"prompt" must be a string (got ${typeof r}).`,{line:t,path:`prompt`}))}return Nn(n,e,`first_frame_path`,!0,kn,t),Nn(n,e,`last_frame_path`,!1,kn,t),Nn(n,e,`video_path`,!1,An,t),n}const Fn=[wn,On,{name:`video`,detect:e=>`first_frame_path`in e||`video_path`in e,inspect:Pn},Sn,bn,vn];function In(e,t){return t===void 0?Fn.find(t=>t.detect(e))??vn:Fn.find(e=>e.name===t)||vn}async function Ln(e,t){let r=b({input:n(e,{encoding:`utf8`}),crlfDelay:1/0}),i=[],a=0,o=0;for await(let e of r){if(t?.aborted)break;a++;let n=e.trim();if(n.length===0){o++;continue}i.length>=20||(n[0]!==`{`||n[n.length-1]!==`}`)&&i.push(z(`error`,`MALFORMED_LINE`,`Line does not start with '{' and end with '}'. JSONL requires one minified JSON object per line — pretty-printed JSON or arrays are not accepted here.`,{line:a}))}return{totalLines:a,blankLines:o,issues:i}}async function Rn(e,t,r,i,a){let o=r?null:new Set(mn(t)),s=[],c=0,l=b({input:n(e,{encoding:`utf8`}),crlfDelay:1/0}),u=0;for await(let e of l){if(a?.aborted)break;if(u++,o&&!o.has(u))continue;let t=e.trim();if(t.length===0||(c++,s.length>=30))continue;let n;try{n=JSON.parse(t)}catch(e){s.push(z(`error`,`MALFORMED_JSON`,`JSON.parse failed: ${e.message}`,{line:u}));continue}s.push(...zn(n,u,i))}return{sampled:c,issues:s}}function zn(e,t,n){if(typeof e!=`object`||!e||Array.isArray(e))return[z(`error`,`RECORD_NOT_OBJECT`,`Each line must be a JSON object, got ${Array.isArray(e)?`array`:typeof e}.`,{line:t})];let r=e;return In(r,n).inspect(r,t)}const Bn={format:`jsonl`,extensions:[`.jsonl`],async validate(e,t){let n=Date.now(),r=await Ln(e,t.signal);if(r.totalLines===0||r.totalLines===r.blankLines)return{valid:!1,format:`jsonl`,filePath:e,errors:[z(`error`,`EMPTY_FILE`,`File contains no non-blank lines.`)],warnings:[],stats:{totalRecords:0,sampledRecords:0,durationMs:Date.now()-n}};if(r.issues.length>0)return{valid:!1,format:`jsonl`,filePath:e,errors:r.issues,warnings:[],stats:{totalRecords:r.totalLines-r.blankLines,sampledRecords:0,durationMs:Date.now()-n}};let i=await Rn(e,r.totalLines,!!t.fullValidate,t.schema,t.signal),a=i.issues.filter(e=>e.severity===`error`),o=i.issues.filter(e=>e.severity===`warning`);return{valid:a.length===0,format:`jsonl`,filePath:e,errors:a,warnings:o,stats:{totalRecords:r.totalLines-r.blankLines,sampledRecords:i.sampled,durationMs:Date.now()-n}}}};function Vn(e,t){return new Promise((n,r)=>{ie.open(e,{lazyEntries:!0},(e,i)=>{if(e||!i){r(Error(`Failed to open ZIP: ${e?.message??`unknown error`}`));return}i.readEntry(),i.on(`entry`,e=>{let r=e.fileName.replace(/\\/g,`/`);r===t||r.endsWith(`/${t}`)?n({entry:e,zipfile:i}):i.readEntry()}),i.on(`end`,()=>{i.close(),r(Error(`Entry "${t}" not found in ZIP`))}),i.on(`error`,r)})})}function Hn(e){return new Promise((t,n)=>{ie.open(e,{lazyEntries:!0},(e,r)=>{if(e||!r){n(Error(`Failed to open ZIP: ${e?.message??`unknown error`}`));return}let i=[];r.readEntry(),r.on(`entry`,e=>{i.push(e.fileName.replace(/\\/g,`/`)),r.readEntry()}),r.on(`end`,()=>{r.close(),t(i)}),r.on(`error`,n)})})}async function Un(e,t,n){let{entry:i,zipfile:a}=await Vn(e,t);return new Promise((e,t)=>{a.openReadStream(i,(i,o)=>{if(i||!o){a.close(),t(i??Error(`Failed to open entry stream`));return}re(o,r(n)).then(()=>{a.close(),e()}).catch(e=>{a.close(),t(e)})})})}async function Wn(e,t=100){let r=b({input:n(e,{encoding:`utf8`}),crlfDelay:1/0}),i=[],a=0;for await(let e of r){if(a++,i.length>=t)continue;let n=e.trim();if(n.length!==0)try{let e=JSON.parse(n);typeof e.wav_fn==`string`&&i.push(e.wav_fn),typeof e.img_path==`string`&&i.push(e.img_path),typeof e.input_img==`string`&&i.push(e.input_img),typeof e.first_frame_path==`string`&&i.push(e.first_frame_path),typeof e.last_frame_path==`string`&&i.push(e.last_frame_path),typeof e.video_path==`string`&&i.push(e.video_path),typeof e.image_fn==`string`&&i.push(e.image_fn),typeof e.video_fn==`string`&&i.push(e.video_fn)}catch{}}return{refs:i,totalLines:a}}const Gn={format:`zip`,extensions:[`.zip`],async validate(e,t){let n=Date.now(),r=[],i=[],o;try{o=await Hn(e)}catch(t){return{valid:!1,format:`zip`,filePath:e,errors:[z(`error`,`ZIP_OPEN_FAILED`,`Could not open ZIP archive: ${t.message}`)],warnings:[],stats:{durationMs:Date.now()-n}}}if(o.length===0)return{valid:!1,format:`zip`,filePath:e,errors:[z(`error`,`ZIP_EMPTY`,`ZIP archive contains no entries.`)],warnings:[],stats:{durationMs:Date.now()-n}};let s=o.some(e=>e===`data.jsonl`||e.endsWith(`/data.jsonl`));s||r.push(z(`error`,`MISSING_DATA_JSONL`,`ZIP archive must contain "data.jsonl" at the root. This file maps media files (e.g. .wav) to their labels.`));let l=t.schema===`image`,u=t.schema===`video`,d=o.some(e=>e===`train/`||e.startsWith(`train/`)),f=o.some(e=>e.toLowerCase().endsWith(`.wav`));if(!d&&!l&&!u&&f&&i.push(z(`warning`,`NO_TRAIN_DIR`,`No "train/" directory found in the ZIP. Media files are typically placed under "train/" and referenced as "train/xxx.wav" in data.jsonl.`)),l){let e=o.filter(e=>{if(e===`data.jsonl`||e.endsWith(`/data.jsonl`)||e.endsWith(`/`))return!1;let t=e.lastIndexOf(`.`),n=t>=0?e.slice(t).toLowerCase():``;return B.has(n)});e.length<25&&r.push(z(`error`,`INSUFFICIENT_IMAGES`,`Found ${e.length} image(s) in ZIP, but image generation fine-tuning requires at least 25 images (50+ recommended).`))}if(!s)return{valid:!1,format:`zip`,filePath:e,errors:r,warnings:i,stats:{totalRecords:o.length,durationMs:Date.now()-n}};let m=o.find(e=>e===`data.jsonl`||e.endsWith(`/data.jsonl`)),h=g(p(),`bl-zip-${ee(6).toString(`hex`)}`);a(h,{recursive:!0});let _=g(h,`data.jsonl`);try{await Un(e,m,_)}catch(t){return r.push(z(`error`,`EXTRACT_FAILED`,`Failed to extract "data.jsonl" from ZIP: ${t.message}`)),c(h,{recursive:!0,force:!0}),{valid:!1,format:`zip`,filePath:e,errors:r,warnings:i,stats:{durationMs:Date.now()-n}}}let v=await Bn.validate(_,t);if(r.push(...v.errors),i.push(...v.warnings),v.valid){let{refs:e}=await Wn(_),t=new Set(o),n=m.lastIndexOf(`/`),i=n>=0?m.slice(0,n+1):``,a=[];for(let n of e){let e=n.replace(/^\.\//,``);t.has(e)||t.has(i+e)||a.push(n)}if(a.length>0){let e=a.slice(0,5).join(`, `),t=a.length>5?` (and ${a.length-5} more)`:``;r.push(z(`error`,`DANGLING_MEDIA_REFS`,`${a.length} media file(s) referenced in data.jsonl not found in ZIP: ${e}${t}`))}}return c(h,{recursive:!0,force:!0}),{valid:r.length===0,format:`zip`,filePath:e,errors:r,warnings:i,stats:{totalRecords:v.stats.totalRecords??o.length,sampledRecords:v.stats.sampledRecords,durationMs:Date.now()-n}}}};async function Kn(e){let t=h(e).toLowerCase();if(t===`.jsonl`)return qn(e);if(t===`.zip`)return Jn(e);throw new N(`Cannot inspect file with extension "${t}". Expected .jsonl or .zip.`,M.USAGE)}async function qn(e){let t=await Xn(e);if(!t)throw new N(`JSONL file is empty or contains only blank lines: ${e}`,M.USAGE);let n=Yn(t);return n===`unknown`?`text`:n}async function Jn(e){let t=await Zn(e,`data.jsonl`);if(!t)throw new N(`ZIP archive does not contain "data.jsonl" or it is empty: ${e}`,M.USAGE,`Audio training data must be a ZIP with data.jsonl at the root and a train/ subfolder.`);let n=Yn(t);if(n===`unknown`)throw new N(`ZIP data.jsonl does not match any supported media format (expected wav_fn / img_path / first_frame_path / video_path): ${e}`,M.USAGE,`ZIP archives are for audio/image/video training data. For text data, use a .jsonl file instead.`);return n}function Yn(e){let t;try{t=JSON.parse(e)}catch{throw new N(`Failed to parse first JSON record for modality detection: ${e.slice(0,120)}`,M.USAGE)}if(typeof t!=`object`||!t||Array.isArray(t))throw new N(`Expected a JSON object as the first record, got ${Array.isArray(t)?`array`:typeof t}.`,M.USAGE);return`wav_fn`in t?`audio`:`img_path`in t?`input_img`in t?`image-i2i`:`image`:`first_frame_path`in t||`video_path`in t?`last_frame_path`in t?`video-kf2v`:`video`:`unknown`}function Xn(e){return new Promise((t,r)=>{let i=n(e,{encoding:`utf8`}),a=b({input:i,crlfDelay:1/0}),o=!1;a.on(`line`,e=>{if(o)return;let n=e.trim();n.length!==0&&(o=!0,a.close(),i.destroy(),t(n))}),a.on(`close`,()=>{o||t(null)}),a.on(`error`,r),i.on(`error`,r)})}function Zn(e,t){return Vn(e,t).then(({entry:e,zipfile:n})=>new Promise((r,i)=>{n.openReadStream(e,(e,a)=>{if(e||!a){n.close(),i(new N(`Failed to read "${t}" from ZIP: ${e?.message}`,M.USAGE));return}let o=b({input:a,crlfDelay:1/0}),s=!1;o.on(`line`,e=>{if(s)return;let t=e.trim();t.length!==0&&(s=!0,o.close(),a.destroy(),n.close(),r(t))}),o.on(`close`,()=>{s||(n.close(),r(null))}),o.on(`error`,e=>{n.close(),i(e)})})})).catch(e=>{if(e instanceof Error&&e.message.includes(`not found in ZIP`))return null;throw e})}const V=[Bn,Gn];function Qn(e){let t=h(e).toLowerCase(),n=V.find(e=>e.extensions.includes(t));if(!n){let e=V.flatMap(e=>e.extensions).join(`, `);throw new N(`Unsupported dataset format "${t||`(none)`}". Supported: ${e}`,M.USAGE,`Convert your data to one of the supported formats and re-run.`)}return n}function $n(e){V.some(t=>t.format===e.format)||V.push(e)}async function H(e,t={}){let{bytes:n}=fn(e,t.maxBytes??314572800),r=await Qn(e).validate(e,t);return r.stats.bytes===void 0&&(r.stats.bytes=n),r}function er(){return V.map(e=>({format:e.format,extensions:[...e.extensions]}))}function tr(e){let t=[];e.line!==void 0&&t.push(`line ${e.line}`),e.path&&t.push(e.path);let n=t.length?` [${t.join(` · `)}]`:``;return` ${e.severity.toUpperCase()} ${e.code}${n}: ${e.message}`}async function nr(e,t,n){return e.requestJson({path:lt(),method:`POST`,body:t,signal:n})}async function rr(e,t={}){let n=new URLSearchParams;t.pageNo!==void 0&&n.set(`page_no`,String(t.pageNo)),t.pageSize!==void 0&&n.set(`page_size`,String(t.pageSize)),t.status&&n.set(`status`,t.status);let r=lt(),i=n.toString()?`${r}?${n.toString()}`:r;return e.requestJson({path:i,method:`GET`,signal:t.signal})}async function ir(e,t,n){return e.requestJson({path:ut(t),method:`GET`,signal:n})}async function ar(e,t,n){return e.requestJson({path:dt(t),method:`POST`,signal:n})}async function or(e,t,n){return e.requestJson({path:ut(t),method:`DELETE`,signal:n})}async function sr(e,t,n={}){let r=new URLSearchParams;n.pageNo!==void 0&&r.set(`page_no`,String(n.pageNo)),n.pageSize!==void 0&&r.set(`page_size`,String(n.pageSize));let i=ft(t),a=r.toString()?`${i}?${r.toString()}`:i;return e.requestJson({path:a,method:`GET`,signal:n.signal})}async function cr(e,t,n){return e.requestJson({path:pt(t),method:`GET`,signal:n})}async function lr(e,t,n,r,i){let a=new URLSearchParams;return a.set(`model_name`,r),e.requestJson({path:`${mt(t,n)}?${a.toString()}`,method:`GET`,signal:i})}const U={sft:{server:`sft`,method:`sft`,variant:`full`},"sft-lora":{server:`efficient_sft`,method:`sft`,variant:`lora`},dpo:{server:`dpo_full`,method:`dpo`,variant:`full`},"dpo-lora":{server:`dpo_lora`,method:`dpo`,variant:`lora`},cpt:{server:`cpt`,method:`cpt`,variant:`full`}},ur=Object.keys(U),dr=`sft-lora`;function fr(e){return e in U}function pr(e){let{method:t,variant:n}=U[e];return{method:t,variant:n}}function mr(e,t){if(!e)return!1;let{method:n,variant:r}=U[t];if(e.supports?.[n]!==!0)return!1;let i=e.trainingTypes?.[n];return Array.isArray(i)&&i.includes(r)}function hr(e){return e?ur.filter(t=>mr(e,t)):[]}async function gr(e,t){let n=Wt(e);return(await Qt((t,r)=>Kt({region:n.consoleRegion,site:n.consoleSite,switchAgent:n.consoleSwitchAgent},e.timeout,{api:t,data:r}),{name:t,pageSize:20})).models.find(e=>e.model===t)??null}const _r=`INSUFFICIENT_SAMPLES`;function vr(e){let{recordCount:t,batchSize:n}=e;return t>n?{ok:!0}:{ok:!1,issue:{severity:`error`,code:_r,message:`Training dataset has ${t} sample(s), which is not greater than batch_size (${n}).`},hint:[`The platform requires the number of training samples to exceed batch_size.`,`Options:`,` • add more data (recommended: comfortably more than batch_size, since the`,` platform also holds back a default 0.9 train split),`,` • lower --batch-size (server clamps to a minimum of 8).`].join(`
|
|
7
|
+
`)}}function yr(e){let t={};if(t.n_epochs=e.nEpochs===void 0?3:e.nEpochs,e.learningRate!==void 0&&(t.learning_rate=e.learningRate),e.maxLength!==void 0&&(t.max_length=e.maxLength),e.batchSize!==void 0){let n=e.batchSize;n<8&&(n=8),n>1024&&(n=1024),t.batch_size=n}return t}function br(e,t,n){return{clientTrainingType:e,serverTrainingType:t,acceptedExtensions:[`.jsonl`],async validate(e,t,r){return H(e,{...r,schema:n})},resolveHyperParameters(e,t){return yr(t)},shouldSkipGate(e,t){return!1},shouldSkipCapabilityCheck(e){return!1}}}const xr=br(`sft`,`sft`,`chatml`),Sr={lm_max_epoch:60,lm_step:5,lm_num:3,lm_batch_size:1e3,fm_max_epoch:100,fm_step:10,fm_num:3,fm_batch_size:2e3},Cr={learning_rate:`3e-5`,max_steps:800,eval_steps:200,max_token_length:`1k`,gradient_clip:.5,weight_decay:.02,max_pixels:`2k`,val_img_size:`2k`,generation_type:`t2i`,lora_rank:32,save_total_limit:10,split:.9},wr={...Cr,max_pixels:`1k`,val_img_size:`1k`,generation_type:`i2i`},Tr={n_epochs:400,learning_rate:`2e-5`,split:.9,max_split_val_dataset_sample:5,eval_epochs:50,save_total_limit:10,lora_rank:32,lora_alpha:32};function Er(e){return e===`image`||e===`image-i2i`}function Dr(e){return e===`video`||e===`video-kf2v`}function Or(e){return typeof e==`string`&&/wan2\.5/i.test(e)}const kr=[xr,{clientTrainingType:`sft-lora`,serverTrainingType:`efficient_sft`,acceptedExtensions:[`.jsonl`,`.zip`],async validate(e,t,n){if(t===`audio`)return H(e,{...n,schema:`tts`});if(Er(t))return H(e,{...n,schema:`image`,maxBytes:dn});if(Dr(t)){let r=await H(e,{...n,schema:`video`,maxBytes:dn});if(typeof n.model==`string`&&n.model.length>0){let e=/kf2v/i.test(n.model),i=t===`video-kf2v`;e&&!i?r.errors.push(z(`error`,`KF2V_DATA_MISMATCH`,`Model "${n.model}" is a first+last-frame (kf2v) model but the data has no "last_frame_path". kf2v training data must include a last frame per record.`)):!e&&i&&r.warnings.push(z(`warning`,`I2V_LAST_FRAME_IGNORED`,`Model "${n.model}" is a first-frame (i2v) model but the data includes "last_frame_path"; the last frame will be ignored during training.`))}return r.valid=r.errors.length===0,r}return H(e,{...n,schema:`chatml`})},resolveHyperParameters(e,t){if(e===`audio`)return{...Sr};if(Er(e)){let n={...e===`image-i2i`?wr:Cr};return t.learningRate!==void 0&&(n.learning_rate=t.learningRate),n}if(Dr(e)){let e=Or(t.model),n={...Tr,batch_size:4,max_pixels:e?36864:262144};return t.nEpochs!==void 0&&(n.n_epochs=t.nEpochs),t.learningRate!==void 0&&(n.learning_rate=t.learningRate),n}return yr(t)},shouldSkipGate(e,t){return!!((t===`audio`||Er(t)||Dr(t))&&e===`batch_size`)},shouldSkipCapabilityCheck(e){return e===`audio`||Er(e)||Dr(e)}},br(`dpo`,`dpo_full`,`dpo`),br(`dpo-lora`,`dpo_lora`,`dpo`),br(`cpt`,`cpt`,`cpt`)];function Ar(e){let t=kr.find(t=>t.clientTrainingType===e);if(!t){let t=kr.map(e=>e.clientTrainingType).join(`, `);throw new N(`Unknown training type "${e}".`,M.USAGE,`Supported training types: ${t}.`)}return t}function jr(){return kr.map(e=>e.clientTrainingType)}async function Mr(e,t,n){return e.requestJson({path:ht(),method:`POST`,body:t,signal:n})}async function Nr(e,t={}){let n=new URLSearchParams;t.pageNo!==void 0&&n.set(`page_no`,String(t.pageNo)),t.pageSize!==void 0&&n.set(`page_size`,String(t.pageSize)),t.status&&n.set(`status`,t.status);let r=ht(),i=n.toString()?`${r}?${n.toString()}`:r;return e.requestJson({path:i,method:`GET`,signal:t.signal})}async function Pr(e,t,n){return e.requestJson({path:gt(t),method:`GET`,signal:n})}async function Fr(e,t,n){return e.requestJson({path:gt(t),method:`DELETE`,signal:n})}async function Ir(e,t={}){let n=new URLSearchParams;t.pageNo!==void 0&&n.set(`page_no`,String(t.pageNo)),t.pageSize!==void 0&&n.set(`page_size`,String(t.pageSize)),t.version&&n.set(`version`,t.version),t.modelSource&&n.set(`model_source`,t.modelSource);let r=yt(),i=n.toString()?`${r}?${n.toString()}`:r;return e.requestJson({path:i,method:`GET`,signal:t.signal})}async function Lr(e,t,n,r){return e.requestJson({path:_t(t),method:`PUT`,body:n,signal:r})}async function Rr(e,t,n,r){return e.requestJson({path:vt(t),method:`PUT`,body:n,signal:r})}const W={LORA:`lora`,PTU:`ptu`,MU:`mu`},zr=W.LORA;function Br(e){return e===`audio`?W.MU:zr}const Vr={POST_PAY:`POST_PAY`,PRE_PAY:`PRE_PAY`},Hr=Vr.POST_PAY,Ur={POST_PAID:`post_paid`,PRE_PAID:`pre_paid`},Wr={name:W.LORA,validateFlags(){},async resolve(){return{body:{capacity:1}}}},Gr={name:W.PTU,validateFlags(e){if(e.inputTpm===void 0||e.outputTpm===void 0)return`--input-tpm and --output-tpm are required for plan=ptu.`},async resolve(e){let t={input_tpm:e.flags.inputTpm,output_tpm:e.flags.outputTpm};return e.flags.thinkingOutputTpm!==void 0&&(t.thinking_output_tpm=e.flags.thinkingOutputTpm),{body:{ptu_capacity:t}}}},Kr={name:W.MU,validateFlags(){},async resolve(e){let t=e.flags.billingMethod||Hr,n=e.flags.deploySpec,r=e.flags.capacity;if(!e.dryRun&&!n){let i=()=>new N(`No mu-plan template found for model "${e.model}". Run \`${e.binName} deploy models --source base\` to inspect available models, or pass --deploy-spec explicitly.`,M.USAGE);try{let a=await Ir(e.client,{modelSource:`base`,pageSize:100,version:`v1.0`}),o=((a.output??a.data)?.models??[]).find(t=>t.model_name===e.model)?.plans?.find(({plan:e})=>e===W.MU)?.templates??[];if(o.length===0)throw i();let s=t===Vr.POST_PAY?Ur.POST_PAID:Ur.PRE_PAID,c=o.find(e=>e.charge_type===s)??o[0];if(!c?.deploy_spec&&!c?.template_id)throw i();n=c.deploy_spec??c.template_id,r===void 0&&(r=c.roles?.unified?.capacity_unit_per_instance??1)}catch(e){throw e instanceof N?e:new N(`Failed to auto-pick template for plan=mu: ${e.message}. Pass --deploy-spec explicitly.`,M.USAGE)}}let i={capacity:r??1,billing_method:t};return n&&(i.deploy_spec=n),{body:i}}},qr={[W.LORA]:Wr,[W.PTU]:Gr,[W.MU]:Kr};function Jr(e){let t=qr[e];if(!t)throw new N(`Unsupported plan "${e}". Supported plans: ${Object.keys(qr).join(`, `)}.`,M.USAGE);return t}const Yr={output:{type:`string`,valueHint:`<format>`,description:`Output format: text, json`},timeout:{type:`number`,valueHint:`<seconds>`,description:`Request timeout`},quiet:{type:`switch`,description:`Suppress non-essential output`},verbose:{type:`switch`,description:`Print HTTP request/response details`},dryRun:{type:`switch`,description:`Dry run mode`},help:{type:`switch`,description:`Show help`},version:{type:`switch`,description:`Print version`}},Xr={concurrent:{type:`number`,valueHint:`<n>`,description:`Run N parallel requests (default: 1)`}},Zr={async:{type:`switch`,description:`Return async task id without waiting`}},Qr={apiKey:{type:`string`,valueHint:`<key>`,description:`API key`},baseUrl:{type:`string`,valueHint:`<url>`,description:`API base URL`}},$r={consoleRegion:{type:`string`,valueHint:`<region>`,description:`Console gateway region (e.g. cn-beijing, ap-southeast-1)`},consoleSite:{type:`string`,valueHint:`<site>`,description:`Console site: domestic, international`},consoleSwitchAgent:{type:`number`,valueHint:`<uid>`,description:`Switch agent UID for delegated access`},workspaceId:{type:`string`,valueHint:`<id>`,description:`Workspace ID (env: BAILIAN_WORKSPACE_ID)`}},ei={accessKeyId:{type:`string`,valueHint:`<key>`,description:`Alibaba Cloud Access Key ID (env: ALIBABA_CLOUD_ACCESS_KEY_ID)`},accessKeySecret:{type:`string`,valueHint:`<key>`,description:`Alibaba Cloud Access Key Secret (env: ALIBABA_CLOUD_ACCESS_KEY_SECRET)`}};function ti(e){return e.auth===`apiKey`?Qr:e.auth===`console`?$r:e.auth===`openapi`?ei:{}}function ni(e){return e}const ri=1;function ii(e,t){return e.normalize(`NFKC`).replace(/[\\/:*?"<>|]/g,`_`).replace(/\s+/g,`_`).replace(/_+/g,`_`).replace(/^_+|_+$/g,``)||t}function ai(e,t){return`${ii(e||`image`,`image`)}_${ii((t||``).substring(0,20),`untitled`)}_${Date.now()}`}const oi=()=>g(f(),`bailian-output`);function si(e,t){let n=t?.flagDir||e.outputDir||oi(),r=t?.subDir?g(n,t.subDir):n;return i(r)||a(r,{recursive:!0}),r}function ci(e){for(let t of Object.keys(e))e[t]===void 0&&delete e[t];return e}function li(e,t=`boolean`){if(typeof e==`boolean`)return e;if(typeof e==`string`){let t=e.trim().toLowerCase();if(t===`true`)return!0;if(t===`false`)return!1}throw new N(`Invalid ${t} value "${String(e)}". Use true or false.`,M.USAGE)}function ui(e,t=`boolean`){if(e!=null)return li(e,t)}function di(e,t,n=`boolean`){let r=ui(e,n);return r===void 0?t:r}function fi(e){return ui(e,`watermark`)??!0}function pi(e){let t={command:e.command,timestamp:new Date().toISOString(),durationMs:e.durationMs,success:e.success,cliVersion:e.cliVersion,nodeVersion:process.version,os:process.platform};return e.authMethod&&(t.authMethod=e.authMethod),!e.success&&e.error&&(e.error.message&&(t.errorMessage=e.error.message),e.error.httpStatus!==void 0&&(t.httpStatus=e.error.httpStatus),e.error.requestId&&(t.requestId=e.error.requestId)),e.params&&Object.keys(e.params).length>0&&(t.params=e.params),t}function mi(e){if(e==null)return;let t=typeof e==`string`?e:JSON.stringify(e);return t.length<=500?t:t.slice(0,500)}function hi(e){let{command:t,params:n,...r}=e,i={et:`EXP`,ext:r,c1:n,c2:e.success?`success`:`failure`};return e.httpStatus!==void 0&&(i.c3=String(e.httpStatus)),e.errorMessage&&(i.c4=mi(e.errorMessage)),e.requestId&&(i.c5=e.requestId),i}let G;function gi(){return G||(process.env.NODE_ENV===`development`?(G=`dev`,G):(G=import.meta.url.includes(`/node_modules/`)?`prod`:`dev`,G))}var _i=fe(((e,t)=>{t.exports=(function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){typeof Symbol<`u`&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:`Module`}),Object.defineProperty(e,`__esModule`,{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t||4&t&&typeof e==`object`&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,`default`,{enumerable:!0,value:e}),2&t&&typeof e!=`string`)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,`a`,t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=``,n(n.s=8)})([function(e,t){e.exports=j(`os`)},function(e,t){e.exports=globalThis.fetch},function(e,t,n){e.exports=n(6)},function(e,t){e.exports=j(`dns`)},function(e,t){e.exports=j(`util`)},function(e,t){e.exports=j(`crypto`)},function(e,t,n){Object.defineProperty(t,Symbol.toStringTag,{value:`Module`});let r=n(7),i=(e,t)=>{t.appName=`BaiduSpider`,t.appVersion=e.value,t.deviceBrand=`Baidu`,t.deviceType=`bot`,t.platform=`other`},a=(e,t)=>{t.appName=`360 Spider`,t.appVersion=e.value,t.deviceBrand=`360`,t.deviceType=`bot`,t.platform=`other`},o=(e,t)=>{t.appName=`BingBot`,t.appVersion=e.value,t.deviceBrand=`Microsoft`,t.deviceType=`bot`,t.platform=`other`},s=(e,t)=>{t.appName=`Googlebot`,t.appVersion=e.value,t.deviceBrand=`Google`,t.deviceType=`bot`,t.platform=`other`},c=(e,t)=>{t.appName=`YandexBot`,t.appVersion=e.value,t.deviceBrand=`Yandex`,t.deviceType=`bot`,t.platform=`other`},l=(e,t)=>{e.getPreviousNTokens(3)===`Sogou web spider`&&(t.deviceBrand=`Sogou.com`,t.appName=`SogouSpider`),t.appVersion=e.value,t.deviceType=`bot`},u=(e,t)=>{t.appName=`DataproviderBot`,t.appVersion=e.value,t.deviceBrand=`Dataprovider.com`,t.deviceType=`bot`,t.platform=`other`},d=(e,t)=>{t.appName=`AhrefsBot`,t.appVersion=e.value,t.deviceBrand=`Ahrefs`,t.deviceType=`bot`,t.platform=`other`},f=(e,t)=>{t.appName=`BitSightBot`,t.appVersion=e.value,t.deviceBrand=`Bitsight`,t.deviceType=`bot`,t.platform=`other`},p=(e,t)=>{t.appName=`oBot`,t.appVersion=e.value,t.deviceBrand=`IBM`,t.deviceType=`bot`,t.platform=`other`},m=(e,t)=>{t.appName=`Cincraw`,t.appVersion=e.value,t.deviceBrand=`CINC`,t.deviceType=`bot`,t.platform=`other`},h=(e,t)=>{t.appName=`DingTalkBot`,t.appVersion=e.value,t.deviceBrand=`Alibaba`,t.deviceType=`bot`,t.platform=`other`},g=(e,t)=>{t.appName=`YisouSpider`,t.appVersion=e.value,t.deviceBrand=`Alibaba`,t.deviceType=`bot`,t.platform=`other`},_=(e,t)=>{t.appName=`ByteSpider`,t.appVersion=e.value,t.deviceBrand=`ByteDance`,t.deviceType=`bot`,t.platform=`other`},v=(e,t)=>{t.appName=`HeadlineCrawler`,t.appVersion=e.value,t.deviceBrand=`Headline.com`,t.deviceType=`bot`,t.platform=`other`},y=(e,t)=>{t.appName=`BitDiscoveryBot`,t.appVersion=e.value,t.deviceBrand=`Tenable`,t.deviceType=`bot`,t.platform=`other`},ee=(e,t)=>{e.getPreviousNTokens(4)===`Screaming Frog SEO Spider`&&(t.deviceBrand=`Screaming Frog`,t.appName=`Screaming Frog`),t.appVersion=e.value,t.deviceType=`bot`},te=(e,t)=>{t.appName=`Ai2Bot`,t.appVersion=e.value,t.deviceBrand=`Ai2`,t.deviceType=`bot`,t.platform=`other`},ne=(e,t)=>{t.appName=`DianjingAdSpider`,t.appVersion=e.value,t.deviceBrand=`Dianjing`,t.deviceType=`bot`,t.platform=`other`},b=(e,t)=>{t.appName=`BaiduSpider`,t.appVersion=e.value,t.deviceBrand=`Baidu`,t.deviceType=`bot`,t.platform=`other`},re=(e,t)=>{t.appName=`360 Spider`,t.appVersion=e.value,t.deviceBrand=`360`,t.deviceType=`bot`,t.platform=`other`},ie=(e,t)=>{t.appName=`BingBot`,t.appVersion=e.value,t.deviceBrand=`Microsoft`,t.deviceType=`bot`,t.platform=`other`},x=(e,t)=>{t.appName=`Googlebot`,t.appVersion=e.value,t.deviceBrand=`Google`,t.deviceType=`bot`,t.platform=`other`},S=(e,t)=>{t.appName=`YandexBot`,t.appVersion=e.value,t.deviceBrand=`Yandex`,t.deviceType=`bot`,t.platform=`other`},C=(e,t)=>{e.getPreviousNTokens(3)===`Sogou web spider`&&(t.deviceBrand=`Sogou.com`,t.appName=`SogouSpider`),t.appVersion=e.value,t.deviceType=`bot`},w=(e,t)=>{t.appName=`DataproviderBot`,t.appVersion=e.value,t.deviceBrand=`Dataprovider.com`,t.deviceType=`bot`,t.platform=`other`},ae=(e,t)=>{t.appName=`AhrefsBot`,t.appVersion=e.value,t.deviceBrand=`Ahrefs`,t.deviceType=`bot`,t.platform=`other`},oe=(e,t)=>{t.appName=`BitSightBot`,t.appVersion=e.value,t.deviceBrand=`Bitsight`,t.deviceType=`bot`,t.platform=`other`},T=(e,t)=>{t.appName=`oBot`,t.appVersion=e.value,t.deviceBrand=`IBM`,t.deviceType=`bot`,t.platform=`other`},E=(e,t)=>{t.appName=`Cincraw`,t.appVersion=e.value,t.deviceBrand=`CINC`,t.deviceType=`bot`,t.platform=`other`},se=(e,t)=>{t.appName=`DingTalkBot`,t.appVersion=e.value,t.deviceBrand=`Alibaba`,t.deviceType=`bot`,t.platform=`other`},ce=(e,t)=>{t.appName=`YisouSpider`,t.appVersion=e.value,t.deviceBrand=`Alibaba`,t.deviceType=`bot`,t.platform=`other`},D=(e,t)=>{t.appName=`ByteSpider`,t.appVersion=e.value,t.deviceBrand=`ByteDance`,t.deviceType=`bot`,t.platform=`other`},le=(e,t)=>{t.appName=`HeadlineCrawler`,t.appVersion=e.value,t.deviceBrand=`Headline.com`,t.deviceType=`bot`,t.platform=`other`},ue=(e,t)=>{t.appName=`BitDiscoveryBot`,t.appVersion=e.value,t.deviceBrand=`Tenable`,t.deviceType=`bot`,t.platform=`other`},O=(e,t)=>{e.getPreviousNTokens(4)===`Screaming Frog SEO Spider`&&(t.deviceBrand=`Screaming Frog`,t.appName=`Screaming Frog`),t.appVersion=e.value,t.deviceType=`bot`},de=(e,t)=>{t.appName=`Ai2Bot`,t.appVersion=e.value,t.deviceBrand=`Ai2`,t.deviceType=`bot`,t.platform=`other`},fe=(e,t)=>{t.appName=`DianjingAdSpider`,t.appVersion=e.value,t.deviceBrand=`Dianjing`,t.deviceType=`bot`,t.platform=`other`},k=new Map,A=new Map;k.set(`Baiduspider-render`,i),k.set(`Baiduspider+`,i),k.set(`Baiduspider-image+`,i),k.set(`360Spider`,a),k.set(`360Spider-Image`,a),k.set(`bingbot`,o),k.set(`Googlebot`,s),k.set(`YandexRenderResourcesBot`,c),k.set(`spider`,l),k.set(`Dataprovider.com`,u),k.set(`AhrefsBot`,d),k.set(`BitSightBot`,f),k.set(`oBot`,p),k.set(`Cincraw`,m),k.set(`DingTalkBot-LinkService`,h),k.set(`YisouSpider`,g),k.set(`Bytespider`,_),k.set(`ev-crawler`,v),k.set(`bitdiscovery`,y),k.set(`Spider`,ee),k.set(`Ai2Bot-Dolma`,te),k.set(`dianjing_ad_spider`,ne),A.set(`Baiduspider-render`,b),A.set(`Baiduspider+`,b),A.set(`Baiduspider-image+`,b),A.set(`360Spider`,re),A.set(`360Spider-Image`,re),A.set(`bingbot`,ie),A.set(`Googlebot`,x),A.set(`YandexRenderResourcesBot`,S),A.set(`spider`,C),A.set(`Dataprovider.com`,w),A.set(`AhrefsBot`,ae),A.set(`BitSightBot`,oe),A.set(`oBot`,T),A.set(`Cincraw`,E),A.set(`DingTalkBot-LinkService`,se),A.set(`YisouSpider`,ce),A.set(`Bytespider`,D),A.set(`ev-crawler`,le),A.set(`bitdiscovery`,ue),A.set(`Spider`,O),A.set(`Ai2Bot-Dolma`,de),A.set(`dianjing_ad_spider`,fe);let j={productHandlerMap:k,commentHandlerMap:A,getSpecialProductHandler:()=>null,getSpecialCommentHandler:()=>null,getDefaultModelHandler:()=>null};t.isBot=function(e){let t=r.createUAInfo();return r.runTask(e,t,j),t.deviceType===`bot`}},function(e,t){function n(e){let t=[],n={parent:e,tokens:t,get firstToken(){return t.length===0?null:t[0]},getNewToken(r){let i=(function(){let e=[],t=[],n=[],r=null,i=null,a=null,o=!0,s=!0,c=!0,l=null,u={get key(){return o&&=(r=e.join(``),!1),r},get value(){return s&&=(i=t.join(``),!1),i},get originValue(){return c&&=(a=n.join(``),!1),a},previousToken:null,properties:null,appendKey(t){e.push(t),o=!0},appendValue(e){t.push(e===`_`?`.`:e),n.push(e),s=!0,c=!0,l=null},getSplitValue(e){if(l===null){let e=u.value;l=e===``?[]:e.split(`/`)}return e>=0&&e<l.length?l[e]:null},getPreviousNTokens(e){let t=[],n=u;for(let r=0;r<e;r++){if(n==null)return null;t.unshift(n.key),n=n.previousToken}return t.join(` `)}};return u})();return t.push(i),i.previousToken=r===void 0?t.length>1?t[t.length-2]:null:r,e&&(e.properties=n),i},getLastToken:()=>t.length===0?null:t[t.length-1],getFirstToken:()=>t.length===0?null:t[0],isEmpty:()=>t.length===0};return n}function r(){return{appName:null,appVersion:null,browserName:null,browserVersion:null,engineName:null,engineVersion:null,deviceBrand:null,deviceModel:null,deviceType:`mobile`,osName:null,osVersion:null,platform:`web`,tokenGroup:n(null)}}let i=new Set(` ;,"'`.split(``)),a=new Set(`/=:`.split(``)),o=new Set([`Mozilla`,`AppleWebKit`,`Safari`,`Opera`,`Dalvik`,`com.ss.android.ugc.aweme`]);function s(e){return e.length===1&&i.has(e)}function c(e){return e.length===1&&a.has(e)}function l(e,t,n,r){if(e==null)return;let i=t.parent,a=e.key,s=null;if(i!=null){let e=i.key;o.has(e)?(s=r.commentHandlerMap.get(a)??null,s??=r.getSpecialCommentHandler(a),s==null&&a.endsWith(` Build`)&&(s=r.getDefaultModelHandler())):s=r.productHandlerMap.get(a)??r.getSpecialProductHandler(a)}else s=r.productHandlerMap.get(a)??r.getSpecialProductHandler(a);if(s!=null)try{s(e,n)}catch{}}function u(e,t,r){if(e==null)throw Error(`input can not be null`);return(function e(t,r,i,a,o){let u,d=null,f=null,p=!1,m=t.length,h=r>0?t[r-1]:`\0`;for(u=r;u<m;u++){let g=t[u];if(s(g)){let e=h!==`\0`&&s(h);if(!p&&r>0&&g===` `&&!e){let e=u+1;if(e<m){let n=t[e];/\d/.test(n)||n===`-`?p=!0:f?.appendKey(g)}else f?.appendKey(g)}else f!=null&&(d=f,f=null);h=g}else if(g===`(`){if(h===`(`){h=g;continue}let r=u;u=e(t,u+1,n(i.getLastToken()),a,o),f!=null&&(d=f,f=null),h=t[r]}else{if(g===`)`){if(r===0){h=g;continue}break}f??(l(i.getLastToken(),i,a,o),f=i.getNewToken(d),p=!1),c(g)?(p&&f.appendValue(g),p=!0):p?f.appendValue(g):f.appendKey(g),h=g}}return l(i.getLastToken(),i,a,o),u})(e,0,t.tokenGroup,t,r),t}Object.defineProperty(t,`DEFAULT_MODEL_HANDLER_KEY`,{enumerable:!0,get:function(){return`DEFAULT_MODEL_HANDLER`}}),Object.defineProperty(t,`createUAInfo`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(t,`runTask`,{enumerable:!0,get:function(){return u}})},function(e,t,n){n.r(t);var r=n(0),i=n.n(r),a=n(1),o=n.n(a);n(2);function s(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:20,t=arguments.length>1?arguments[1]:void 0;return t||=``,e?s(--e,`0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz`.charAt(Math.floor(60*Math.random()))+t):t}function c(e,t){for(var n in t)e[n]=t[n];return e}function l(e){return Object.prototype.toString.call(e)===`[object Object]`}function u(e){return typeof Promise<`u`&&e instanceof Promise}var d=Object.freeze({__aesBeforeSkip:1}),f=function(e){var t=Object.prototype.toString.call(e);if(t===`[object String]`&&e||t===`[object Number]`||t===`[object Boolean]`)return e;if(t===`[object Object]`||t===`[object Array]`)try{return JSON.stringify(e)}catch{}},p=function(e){var t={};for(var n in e){var r=e[n];r!==void 0&&(t[n]=f(r))}return t},m=function(e){var t=[];for(var n in e){var r=f(e[n]);r!==void 0&&t.push(`${n}=${encodeURIComponent(r)}`)}return t.join(`&`)};function h(e){return(e.requiredFields||[]).concat([`pid`]).some(function(t){return e[t]===void 0})}function g(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:``,t=arguments.length>1?arguments[1]:void 0;typeof console<`u`&&console.warn(`日志解析报错,埋点将被丢弃 => ${e}`,t)}var _=`AEM_TRACKER_UNIQUE_PVID`,v=typeof globalThis<`u`&&globalThis?globalThis:typeof window<`u`&&window?window:typeof global<`u`&&global?global:typeof self<`u`&&self?self:(console.error(`Unable to locate global object in current environment`),{});function y(e){this._queue=[],this._reqQueue=[],this._plugins={},this._subscribers={onConfigUpdated:[]},this._timeout=0,this._config={sdk_version:`3.3.18`,set pv_id(e){v[_]=e},get pv_id(){return v[_]||(v[_]=s()),v[_]},timezone_offset:new Date().getTimezoneOffset()},e&&(this._config=c(this._config,e))}y.prototype={constructor:y,_sendAll:function(){if(this._timeout&&=(clearTimeout(this._timeout),0),this._queue.length){var e,t=this._config.maxUrlLength||3e4,n=this._getSendConfig();try{e=this._processData(this._queue,n)}catch{}if(e&&e.length<t)return this._queue=[],void this.send(e);for(var r,i=[];this._queue.length;){i.push(this._queue.shift());try{r=this._processData(i,n)}catch(e){var a=i.pop();g(e.message,a);continue}if(r.length>t){i.length>1&&(this._queue.unshift(i.pop()),r=this._processData(i,n));break}}r&&this.send(r),this._queue.length&&this._sendAll()}},_send:function(e,t){var n=this;if(!1===t){var r;try{r=this._processData([e])}catch(t){g(t.message,e)}r&&this.send(r)}else{this._queue.push(e);var i=this._config.mergeRequestInterval||500;this._timeout||=setTimeout(function(){n._sendAll()},i)}},_getSendConfig:function(){var e={},t=this._config;for(var n in t)n!==`requiredFields`&&n!==`maxUrlLength`&&n!==`queueGlobalName`&&n!==`debug`&&n!==`excludeCrawlers`&&n!==`collectClientHints`&&n.indexOf(`plugin`)!==0&&t[n]!==``&&t[n]!==null&&t[n]!==void 0&&(e[n]=f(t[n]));return e},_processData:function(e,t){t||=this._getSendConfig();var n=m(t);return n+=`&msg=`+encodeURIComponent(e.map(function(e){return m(e)}).join(`|`))},setConfig:function(e,t){var n=this,r={};t===void 0?r=e:r[e]=t;var i=!(function e(t,n){if(t===void 0||n===void 0||!l(t)||!l(n))return!1;for(var r in t)if(l(t[r])){if(!e(t[r],n[r]))return!1}else if(t[r]!==n[r])return!1;return!0})(r,this._config),a=function(){if(i){for(var e in r)l(r[e])?n._config[e]=c(n._config[e]||{},r[e]):n._config[e]=r[e];n._execSubscribe(`onConfigUpdated`,[r,n._config])}};this._reqQueue.length?(a(),h(this._config)||(this._reqQueue.forEach(function(e){n._send.apply(n,e)}),this._reqQueue=[])):(i&&this._sendAll(),a())},getConfig:function(e){return e?this._config[e]:this._config},updatePVID:(function(e,t){if(typeof e!=`function`)throw TypeError(`Expected a function`);t=typeof t==`number`&&t>=0?t:100;var n=null;return function(){if(n===null){var r=this,i=Array.prototype.slice.call(arguments);n=setTimeout(function(){n=null},t),e.apply(r,i)}}})(function(){v[_]=s()},200),log:function(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};e&&(t.ts=t.ts||new Date().getTime(),t.type=e,this._print(`log`,e,t),t=p(t),h(this._config)?this._reqQueue.length<1e3&&this._reqQueue.push([t,n.combo]):this._send(t,n.combo))},before:function(e,t){var n=this;return function(){var r=arguments,i=t.apply(n,r);i!==d&&(u(i)?i.then(function(t){t!==d&&e.apply(n,t||r)}):e.apply(n,i||r))}},after:function(e,t){var n=this;return function(){var r=arguments;e.apply(n,r),t.apply(n,r)}},use:function(e,t){var n=this;return Object.prototype.toString.call(e)===`[object Array]`?e.map(function(e){if(Object.prototype.toString.call(e)===`[object Array]`){var t=e[0],r=e[1];return n._plugins[t]||(n._plugins[t]=new t(n,r))}return n._plugins[e]||(n._plugins[e]=new e(n))}):this._plugins[e]||(this._plugins[e]=new e(this,t))},_print:function(){this._config.debug&&typeof console<`u`&&console.log.apply(console,arguments)},onConfigUpdated:function(e){this._subscribers.onConfigUpdated&&this._subscribers.onConfigUpdated.push(e)},_execSubscribe:function(e,t){this._subscribers[e]&&this._subscribers[e].forEach(function(e){e.apply(this,t)})}};var ee=y,te=n(3),ne=n.n(te),b=n(4),re=n(5),ie=n.n(re);function x(e){return(x=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e})(e)}function S(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function C(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?S(Object(n),!0).forEach(function(t){w(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):S(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function w(e,t,n){return(t=(function(e){var t=(function(e,t){if(x(e)!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(x(r)!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)})(e,`string`);return x(t)==`symbol`?t:t+``})(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ae(e,t){var n=typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(!n){if(Array.isArray(e)||(n=T(e))||t&&e&&typeof e.length==`number`){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw TypeError(`Invalid attempt to iterate non-iterable instance.
|
|
8
|
+
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var a,o=!0,s=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){s=!0,a=e},f:function(){try{o||n.return==null||n.return()}finally{if(s)throw a}}}}function oe(e,t){return(function(e){if(Array.isArray(e))return e})(e)||(function(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t===0){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}})(e,t)||T(e,t)||(function(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
9
|
+
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)})()}function T(e,t){if(e){if(typeof e==`string`)return E(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?E(e,t):void 0}}function E(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function se(){for(var e=/(?:[0]{1,2}[:-]){5}[0]{1,2}/,t=i.a.networkInterfaces(),n=0,r=Object.entries(t);n<r.length;n++){var a=oe(r[n],2),o=(a[0],a[1]);if(o){var s,c=ae(o);try{for(c.s();!(s=c.n()).done;){var l=s.value;if(!1===e.test(l.mac))return l.mac}}catch(e){c.e(e)}finally{c.f()}}}return`00:00:00:00:00:00`}var ce,D,le=(ce=process.version,{os:i.a.type(),os_version:i.a.release(),app_name:`node`,app_version:ce,device_id:ie.a.createHash(`md5`).update(se()).digest(`hex`),platform:`node`}),ue=(0,b.promisify)(ne.a.resolve);function O(e){this._offlineQueue=[],e.endpoint=e.endpoint||`gm.mmstat.com`,ee.call(this,C(C({},le),e)),this._config.endpoint_url=`https://${this._config.endpoint}/aes.1.1`}O.prototype=((D=function(){}).prototype=ee.prototype,new D),O.prototype.constructor=O,O.prototype.send=function(e){var t,n=this;return(t=this._config.endpoint,ue(t)).then(function(t){return n._offlineQueue.forEach(function(e){n.send(e)}),n._offlineQueue=[],n._print(`send`,e),o()(n._config.endpoint_url,{method:`POST`,keepalive:!0,body:JSON.stringify({gokey:encodeURIComponent(e),gmkey:`EXP`})}).catch(function(){})}).catch(function(t){n._offlineQueue.length>500&&n._offlineQueue.shift(),n._offlineQueue.push(e)})},t.default=O}]).default})),vi=fe(((e,t)=>{t.exports=(function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){typeof Symbol<`u`&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:`Module`}),Object.defineProperty(e,`__esModule`,{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t||4&t&&typeof e==`object`&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,`default`,{enumerable:!0,value:e}),2&t&&typeof e!=`string`)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,`a`,t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p=``,n(n.s=0)})([function(e,t,n){n.r(t);var r=[`ec`,`ea`,`el`,`et`],i=function(e,t){var n=function(e){var n=e.ec,r=e.ea,i=e.el,a=e.et,o=a===void 0?`CLK`:a,s=e.xpath;delete e.ec,delete e.ea,delete e.el,delete e.et,delete e.xpath,e.p1=n,e.p2=r,e.p3=i,e.p4=o,e.p5=s;try{t.log(`event`,e)}catch{}};return function(){var t=arguments,i={};if(t.length!==0){for(var a=0;a<t.length;a++){var o,s,c=t[a];if(a!==0&&typeof c==`object`&&a!==t.length-1)return void(e==null||(o=e.console)==null||(s=o.warn)==null||s.call(o,`Only the last argument can be object type`));if(typeof c==`string`||typeof c==`number`)i[r[a]]=c;else if(typeof c==`object`&&a===t.length-1)for(var l in c)c.hasOwnProperty(l)&&(i[l]=c[l])}n(i)}else{var u,d;(u=e.console)==null||(d=u.warn)==null||d.call(u,`At lease one augument`)}}};t.default=function(e,t){return i(global,e)}}]).default})),yi=A(_i(),1),bi=A(vi(),1);const xi=()=>g(P(),`telemetry.jsonl`);let Si;const Ci=new Set;let wi;try{let e=new yi.default({pid:`bailian-cli-node`,env:gi()}),t=e.send.bind(e);e.send=function(e){let n=t(e);if(n&&typeof n.then==`function`){let e=n;Ci.add(e),e.finally(()=>Ci.delete(e))}return n},wi=e,Si=e.use(bi.default)}catch{}async function Ti(e=1e3){try{if(wi)try{typeof wi._sendAll==`function`&&wi._sendAll()}catch{}if(Ci.size===0)return;let t=[...Ci].map(e=>e.catch(()=>void 0));await Promise.race([Promise.allSettled(t),new Promise(t=>setTimeout(t,e).unref?.())])}catch{}}async function Ei(e){try{await Me();let n=xi();try{l(n).size>5242880&&u(n)}catch{}t(n,JSON.stringify(e)+`
|
|
10
|
+
`,{mode:384})}catch{}}async function Di(e){try{if(!Si)return;Si(e.command,hi(e))}catch{}}const Oi=new Set([`apiKey`,`baseUrl`,`output`,`quiet`,`verbose`,`timeout`,`dryRun`,`help`,`console`]),ki=new Set(`page.pageSize.n.count.model.voice.language.provider.capability.temperature.topP.topK.maxTokens.seed.stream.size.resolution.ratio.duration.format.audioFormat.sampleRate.pitch.rate.volume.api.mode.download.textOnly.promptExtend.enableSsml.watermark.hasThoughts.listTools.rerank.rerankTopN.diarization`.split(`.`));function Ai(e){let t={};for(let[n,r]of Object.entries(e))n.startsWith(`_`)||Oi.has(n)||ki.has(n)&&(r===void 0||r===!1||(t[n]=r));return t}async function ji(e,t,n,r){if(!e.settings.telemetry){await r();return}let i=performance.now(),a=!0,o,s,c;try{await r()}catch(e){throw a=!1,e instanceof N?(o=e.message,s=e.api?.httpStatus,c=e.api?.requestId):e instanceof Error&&(o=e.message),e}finally{let r=Math.round(performance.now()-i),l=pi({command:t.join(` `),durationMs:r,success:a,error:a?void 0:{message:o,httpStatus:s,requestId:c},cliVersion:e.identity.version,authMethod:e.authMethod,params:Ai(n)});Ei(l).catch(()=>{}),Di(l).catch(()=>{})}}function Mi(e){if(!e.model)return null;let t=e.inferenceMetadata;return{model:e.model,name:e.name??e.model,description:e.description??e.shortDescription??``,shortDescription:e.shortDescription,provider:e.provider??``,capabilities:e.capabilities??[],features:e.features??[],category:e.category,contextWindow:e.contextWindow??void 0,maxOutputTokens:e.maxOutputTokens??void 0,maxInputTokens:e.maxInputTokens??void 0,docUrl:e.docUrl,collectionTag:e.collectionTag,inferenceMetadata:t,prices:e.prices,qpmInfo:e.qpmInfo,versionTag:e.versionTag,openSource:e.openSource}}var Ni=class{name=`api`;constructor(e){this.settings=e}available(){return!0}async load(){let e=Wt(this.settings),t=(t,n)=>Kt({region:e.consoleRegion,site:e.consoleSite,switchAgent:e.consoleSwitchAgent},this.settings.timeout,{api:t,data:n}),n=await Qt(t,{pageNo:1,pageSize:50}),r=[...n.models],i=Math.ceil(n.total/50);for(let e=2;e<=i;e++){let n=await Qt(t,{pageNo:e,pageSize:50});r.push(...n.models)}return r.map(Mi).filter(e=>e!==null)}};const Pi=`models.jsonl`;function Fi(){return E(P(),`skills/bailian-docs-llm-wiki`)}function Ii(){return E(Fi(),Pi)}function Li(){return E(T(se(import.meta.url)),`../../../../../skills/bailian-docs-llm-wiki/models`)}function Ri(e){return!e.model||typeof e.model!=`string`?null:{model:e.model,name:e.name??e.model,description:e.description??``,provider:e.provider??``,capabilities:e.capabilities??[],features:e.features??[],contextWindow:e.contextWindow,maxOutputTokens:e.maxOutputTokens,docUrl:e.docUrl,inferenceMetadata:e.inferenceMetadata,shortDescription:e.shortDescription,category:e.category,collectionTag:e.collectionTag,maxInputTokens:e.maxInputTokens,prices:e.prices,qpmInfo:e.qpmInfo,versionTag:e.versionTag,openSource:e.openSource,family:e.family,familyName:e.familyName}}function zi(e){let t=w(e,`utf-8`).split(`
|
|
11
|
+
`).filter(Boolean),n=[];for(let e of t)try{let t=Ri(JSON.parse(e));t&&n.push(t)}catch{}return n}function Bi(){let e=Li();if(!S(E(e,Pi)))return!1;let t=Fi();try{return C(t,{recursive:!0}),x(e,t,{recursive:!0}),!0}catch{return!1}}var Vi=class{name=`catalog`;options;constructor(e){this.options=e??{}}available(){return S(Ii())}async load(){return!this.available()&&(this.options.onPrepareStart?.(),!Bi())?[]:zi(Ii())}};async function Hi(e,t){let n=[new Vi({onPrepareStart:t?.onPrepareStart}),new Ni(e)];for(let e of n)if(e.available()){let t=await e.load();if(t.length>0)return t}let r=await n[0].load();if(r.length>0)return r;throw new N(`No model data available.`,M.GENERAL)}const Ui={Text:`Text`,Image:`Image`,Video:`Video`,Audio:`Audio`},K={Single:`single`,Pipeline:`pipeline`},Wi={Low:`low`,Medium:`medium`,High:`high`},Gi={Standard:`standard`,Large:`large`,ExtraLarge:`extra-large`},q={Flagship:`flagship`,Balanced:`balanced`,CostOptimized:`cost-optimized`},J={TG:`TG`,Reasoning:`Reasoning`,VU:`VU`,IG:`IG`,VG:`VG`,TTS:`TTS`,ASR:`ASR`,RealtimeASR:`Realtime-ASR`,RealtimeTTS:`Realtime-Text-to-Speech`,RealtimeAudioTranslate:`Realtime-Audio-Translate`,RealtimeOmni:`Realtime-Omni`,MultimodalOmni:`Multimodal-Omni`,ME:`ME`,TR:`TR`,ThreeDGeneration:`3D-generation`},Ki={FunctionCalling:`function-calling`,WebSearch:`web-search`,StructuredOutputs:`structured-outputs`,PrefixCompletion:`prefix-completion`},Y={Flagship:`Flagship`,CostOptimized:`Cost-optimized`},qi=20,Ji=/-\d{4}-\d{2}-\d{2}$/,Yi=new Set([J.IG,J.VG,J.TTS,J.RealtimeTTS,J.ThreeDGeneration]),Xi=new Set([J.TG,J.Reasoning,J.ASR,J.RealtimeASR,J.RealtimeAudioTranslate,J.TR,J.ME]),Zi={standard:0,large:32e3,"extra-large":128e3},Qi=.4,$i=.6,ea=.4,ta=.2,na=.2,ra=.2;console.assert(Math.abs(Qi+$i-1)<1e-9,`FUSION_HARD_WEIGHT + FUSION_SOFT_WEIGHT must sum to 1`),console.assert(Math.abs(ea+ta+na+ra-1)<1e-9,`HARD_WEIGHT_* sub-weights must sum to 1`);const ia=`You are a model recommendation advisor for Alibaba Cloud Model Studio. From the candidate models below, select the best recommendations.
|
|
12
12
|
|
|
13
13
|
CRITICAL: You MUST respond entirely in English. Do not use any Chinese characters anywhere in your response. Every field — reason, highlights, step, summary — must be written in English.
|
|
14
14
|
|
|
@@ -49,7 +49,7 @@ Single task:
|
|
|
49
49
|
{"type":"single","recommendations":[{"model":"model ID","reason":"recommendation reason","highlights":["key highlights"]}]}
|
|
50
50
|
|
|
51
51
|
Pipeline (only when confident multi-model is needed):
|
|
52
|
-
{"type":"pipeline","summary":"one-line solution description","steps":[{"step":"step description","recommendations":[{"model":"model ID","reason":"reason for choosing","highlights":["highlights"]}]}]}`,
|
|
52
|
+
{"type":"pipeline","summary":"one-line solution description","steps":[{"step":"step description","recommendations":[{"model":"model ID","reason":"reason for choosing","highlights":["highlights"]}]}]}`,aa=`You are a model recommendation advisor for Alibaba Cloud Model Studio. The user's need has been decomposed into multi-step pipeline. Select the best model for each step.
|
|
53
53
|
|
|
54
54
|
CRITICAL: You MUST respond entirely in English. Do not use any Chinese characters anywhere in your response. Every field — reason, highlights, step, summary — must be written in English.
|
|
55
55
|
|
|
@@ -88,9 +88,7 @@ Key principles:
|
|
|
88
88
|
|
|
89
89
|
Or (if single model suffices):
|
|
90
90
|
{"type":"single","recommendations":[{"model":"model ID","reason":"recommendation reason","highlights":
|
|
91
|
-
["key highlights"]}]}`,
|
|
92
|
-
${JSON.stringify([Zr],null,2)}
|
|
93
|
-
Response in INTENT_MODE.`}const Y={complexity:G.Single,taskSummary:``,scenarioHints:[],semanticQuery:``,inputModality:[],outputModality:[],requiredCapabilities:[q.TG],requiredFeatures:[],budget:Fr.Medium,contextNeed:Ir.Standard,qualityPreference:K.Balanced,confidence:0},$r=[`unconstrained`,`scoped`,`comparison`,`alternative`];function ei(e){let t=e.match(/<tags>\s*([\s\S]*?)\s*<\/tags>/i);return t?t[1].trim():``}function ti(e){let t=e.match(/<tool_call>\s*([\s\S]*?)\s*<\/tool_call>/i);if(!t)return null;try{let e=JSON.parse(t[1]);return Array.isArray(e)&&e.length>0&&e[0].arguments?e[0].arguments:e&&typeof e==`object`&&`arguments`in e?e.arguments:null}catch{return null}}function ni(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}async function ri(e,t,n){let r=Re(n??e.baseUrl),i={model:`tongyi-intent-detect-v3`,input:{messages:[{role:`system`,content:Qr()},{role:`user`,content:t}]},parameters:{result_format:`message`,max_tokens:512,temperature:0}};try{let t=(await e.requestJson({path:r,method:`POST`,body:i,timeout:10})).output?.choices?.[0]?.message?.content??``,n=ei(t),a=$r.includes(n)?n:`unconstrained`,o=ti(t);return{mode:a,targets:o?ni(o.targets):[],excludes:o?ni(o.excludes):[],complexity:o?.complexity===`pipeline`?`pipeline`:`single`}}catch{return null}}function ii(e,t){if(e)return{mode:e.mode,targets:e.targets.length>0?e.targets:void 0,excludes:e.excludes.length>0?e.excludes:void 0};if(t)return{mode:t.mode,targets:t.targets.length>0?t.targets:void 0,excludes:t.excludes.length>0?t.excludes:void 0}}async function ai(e,t,n){let r=ri(e,t,n?.intentDetectBaseUrl),i=Le(),a={model:`qwen3.6-flash`,messages:[{role:`system`,content:`You are an intent analyzer. Given the user's requirement, understand the scenario first, then extract structured information.
|
|
91
|
+
["key highlights"]}]}`,X={complexity:K.Single,taskSummary:``,scenarioHints:[],semanticQuery:``,inputModality:[],outputModality:[],requiredCapabilities:[J.TG],requiredFeatures:[],budget:Wi.Medium,contextNeed:Gi.Standard,qualityPreference:q.Balanced,confidence:0},oa=[`unconstrained`,`scoped`,`comparison`,`alternative`];function sa(e){if(!e||typeof e!=`object`)return;let t=typeof e.mode==`string`&&oa.includes(e.mode)?e.mode:`unconstrained`,n=Array.isArray(e.targets)?e.targets.filter(e=>typeof e==`string`):[],r=Array.isArray(e.excludes)?e.excludes.filter(e=>typeof e==`string`):[];return{mode:t,targets:n.length>0?n:void 0,excludes:r.length>0?r:void 0}}async function ca(e,t){let n=He(),r={model:`qwen3.6-flash`,messages:[{role:`system`,content:`You are an intent analyzer. Given the user's requirement, understand the scenario first, then extract structured information.
|
|
94
92
|
|
|
95
93
|
CRITICAL: You MUST respond entirely in English. Do not use any Chinese characters anywhere in your response. All text fields (taskSummary, scenarioHints) must be in English.
|
|
96
94
|
|
|
@@ -137,9 +135,9 @@ Analyze whether the user mentioned specific models, model families, or vendors:
|
|
|
137
135
|
- semanticQuery: a self-contained English phrase (15-30 words) describing the need in a form optimized for semantic matching against model descriptions — fold in scenario, modalities, and key constraints; do not just copy the user's wording
|
|
138
136
|
- modelPreference: { mode, targets?, excludes? }
|
|
139
137
|
|
|
140
|
-
Output only JSON, no other text.`},{role:`user`,content:t}],max_tokens:1024,temperature:0},o=e.requestJson({path:i,method:`POST`,body:a,timeout:30}),[s,c]=await Promise.all([r,o.catch(()=>null)]);if(!c)return{...Y,modelPreference:ii(s),complexity:s?.complexity===`pipeline`?G.Pipeline:G.Single};let l=(c.choices?.[0]?.message?.content??``).match(/\{[\s\S]*\}/);if(!l)return{...Y,confidence:+!!s,modelPreference:ii(s),complexity:s?.complexity===`pipeline`?G.Pipeline:G.Single};let u=JSON.parse(l[0]),d=u.modelPreference,f=ii(s,{mode:d&&typeof d==`object`&&typeof d.mode==`string`&&$r.includes(d.mode)?d.mode:`unconstrained`,targets:d&&typeof d==`object`&&Array.isArray(d.targets)?d.targets:[],excludes:d&&typeof d==`object`&&Array.isArray(d.excludes)?d.excludes:[]}),p=u.complexity===G.Pipeline?G.Pipeline:G.Single;return{complexity:s?.complexity===`pipeline`?G.Pipeline:p,taskSummary:typeof u.taskSummary==`string`?u.taskSummary:``,scenarioHints:Array.isArray(u.scenarioHints)?u.scenarioHints:[],semanticQuery:typeof u.semanticQuery==`string`?u.semanticQuery:``,segments:Array.isArray(u.segments)?u.segments.map(e=>({step:e.step??``,inputModality:Array.isArray(e.inputModality)?e.inputModality:[],outputModality:Array.isArray(e.outputModality)?e.outputModality:[],requiredCapabilities:Array.isArray(e.requiredCapabilities)?e.requiredCapabilities:[]})):void 0,inputModality:Array.isArray(u.inputModality)?u.inputModality:[],outputModality:Array.isArray(u.outputModality)?u.outputModality:[],requiredCapabilities:Array.isArray(u.requiredCapabilities)?u.requiredCapabilities:[],requiredFeatures:Array.isArray(u.requiredFeatures)?u.requiredFeatures:[],budget:u.budget??Y.budget,contextNeed:u.contextNeed??Y.contextNeed,qualityPreference:u.qualityPreference??Y.qualityPreference,confidence:1,modelPreference:f}}function oi(e){let t=!1,n=!1;for(let r of e)Br.has(r)&&(t=!0),Vr.has(r)&&(n=!0);return t&&n}function si(e){let t=new Set(e.map(({model:e})=>e));return e.filter(({model:e})=>{let n=e.replace(zr,``);return n===e?!0:!t.has(n)})}function ci(e,t,n){let r=e.inferenceMetadata?.request_modality??[],i=e.inferenceMetadata?.response_modality??[];return!(t.length>0&&!t.some(e=>r.includes(e))||n.length>0&&!n.some(e=>i.includes(e)))}function li(e,t){if(t.length===0)return!0;let n=e.inferenceMetadata?.request_modality??[];return t.some(e=>n.includes(e))}function ui(e,t){let{requiredCapabilities:n,requiredFeatures:r,contextNeed:i,qualityPreference:a}=t,{capabilities:o,features:s,contextWindow:c,category:l}=e,u=0;for(let e of n)o.includes(e)&&(u+=10);for(let e of r)s.includes(e)&&(u+=5);let d=Hr[i];return d>0&&(c??0)>=d&&(u+=8),a===K.Flagship&&l===J.Flagship||a===K.CostOptimized&&l===J.CostOptimized?u+=15:a===K.Balanced&&l===J.Flagship&&(u+=5),u}function X(e,t,n){return e.map(e=>({model:e,score:ui(e,t)})).sort((e,t)=>t.score-e.score).slice(0,n)}function di(e){return new Set(e.map(({model:e})=>e.model))}function fi(e,t){let n=new Map,r=[],i=[];for(let a of e){let e=a.model.family;if(!e){r.push(a);continue}let o=n.get(e)??0;o<t?(r.push(a),n.set(e,o+1)):i.push(a)}return r.length>=10?r:[...r,...i.slice(0,10-r.length)]}function pi(e,t){let n=new Set(t);return e.filter(e=>n.has(e.model.model)?!1:(n.add(e.model.model),!0))}function mi(e,t,n){return n.size>=10?[]:X(e.filter(({model:e})=>!n.has(e)),t,10-n.size)}function hi(e,t,n,r,i){let{inputModality:a,outputModality:o,requiredCapabilities:s}=t,c={complexity:G.Single,taskSummary:``,scenarioHints:[],semanticQuery:``,inputModality:a,outputModality:o,requiredCapabilities:s,requiredFeatures:[],budget:r,contextNeed:Ir.Standard,qualityPreference:i,confidence:1},l=e.filter(e=>ci(e,a,o)&&li(e,n));return l.length<5&&(l=e.filter(e=>ci(e,a,o))),l.length<5&&(l=e),X(l,c,5)}function gi(e,t){e=si(e);let n;if(t.complexity===G.Pipeline&&t.segments?.length){let r=[];for(let[n,i]of t.segments.entries()){let a=n===0?[]:t.segments[n-1].outputModality,o=pi(hi(e,i,a,t.budget,t.qualityPreference),di(r));r=[...r,...o]}let i=mi(e,t,di(r));n=[...r,...i]}else if(oi(t.requiredCapabilities))n=_i(e,t);else{let r=e.filter(e=>ci(e,t.inputModality,t.outputModality));r.length<5&&(r=e),n=X(r,t,50)}return fi(n,3)}function _i(e,t){let n=t.requiredCapabilities.filter(e=>Br.has(e)),r=t.requiredCapabilities.filter(e=>Vr.has(e)),i=[];if(n.length>0&&(i=X(e.filter(e=>n.some(t=>e.capabilities.includes(t))),t,25)),r.length>0){let n=di(i),a={...t,requiredCapabilities:r},o=e.filter(e=>!n.has(e.model)&&r.some(t=>e.capabilities.includes(t)));i=[...i,...X(o,a,25)]}let a=mi(e,t,di(i));return[...i,...a]}const vi=`text-embedding-v4`;function yi(){return T(N(),`skills/bailian-docs-llm-wiki`)}function bi(){return T(yi(),`models-embeddings.json`)}function xi(){let e=bi();if(!x(e))return null;try{return JSON.parse(S(e,`utf-8`)).items}catch{return null}}async function Si(e,t){let n={model:vi,input:[t],dimensions:512,encoding_format:`float`};return(await e.requestJson({path:`/compatible-mode/v1/embeddings`,method:`POST`,body:n,timeout:1e4})).data[0].embedding}async function Ci(e,t){let n={model:vi,input:t,dimensions:512,encoding_format:`float`};return(await e.requestJson({path:`/compatible-mode/v1/embeddings`,method:`POST`,body:n,timeout:3e4})).data.sort((e,t)=>e.index-t.index).map(e=>e.embedding)}const wi={TG:`Text Generation`,Reasoning:`Reasoning`,VU:`Vision Understanding`,IG:`Image Generation`,VG:`Video Generation`,TTS:`Text-to-Speech`,ASR:`Speech-to-Text`},Ti={Text:`Text`,Image:`Image`,Video:`Video`,Audio:`Audio`};function Ei(){let e=T(yi(),`groups`),t=new Map;if(!x(e))return t;for(let n of C(e).filter(e=>e.endsWith(`.json`)))try{let r=JSON.parse(S(T(e,n),`utf-8`)),i=r.description??``;if(r.items)for(let e of r.items)t.set(e.model,e.description||i)}catch{}return t}function Di(e,t){let n=(e.capabilities??[]).map(e=>wi[e]??e).join(`, `),r=t.get(e.model)||e.shortDescription||e.description||``,i=(e.inferenceMetadata?.request_modality??[]).map(e=>Ti[e]??e).join(`, `),a=(e.inferenceMetadata?.response_modality??[]).map(e=>Ti[e]??e).join(`, `);return[e.name,e.model,r,n?`Capabilities: ${n}`:``,i?`Input: ${i}`:``,a?`Output: ${a}`:``,e.features?.length?`Features: ${e.features.join(`, `)}`:``,e.familyName||``,e.category?`Category: ${e.category}`:``].filter(Boolean).join(` | `)}async function Oi(e,t){let n=Ei(),r=t.map(e=>Di(e,n)),i=[];for(let t=0;t<r.length;t+=10){let n=await Ci(e,r.slice(t,t+10));i.push(...n)}let a=t.map((e,t)=>({id:e.model,vector:i[t]})),o={model:vi,dimensions:512,count:a.length,items:a},s=bi();return ee(w(s),{recursive:!0}),te(s,JSON.stringify(o)),a}function ki(e,t){let n=0,r=0,i=0;for(let a=0;a<e.length;a++)n+=e[a]*t[a],r+=e[a]*e[a],i+=t[a]*t[a];let a=Math.sqrt(r)*Math.sqrt(i);return a===0?0:n/a}let Z=null;function Ai(){return Z===null&&(Z=xi()),Z}function ji(){return Ai()!==null}function Mi(e){return(e??``).toLowerCase().replace(zr,``).replace(/[\s_-]+/g,``).trim()}function Ni(e,t){let n=Mi(t);return n?Mi(e.model)===n||Mi(e.name)===n?!0:[e.model,e.name,e.family,e.familyName,e.provider].some(e=>e?Mi(e).includes(n):!1):!1}function Pi(e,t){return t.some(t=>Ni(e,t))}function Fi(e,t){return t.length===0?[]:e.filter(e=>Pi(e,t))}function Ii(e,t){return t.length===0?e:e.filter(({model:e})=>!Pi(e,t))}function Li(e,t,n,r){let i=e.inferenceMetadata?.request_modality??[],a=e.inferenceMetadata?.response_modality??[];return!(t.length>0&&!t.some(e=>i.includes(e))||n.length>0&&!n.some(e=>a.includes(e))||r.length>0&&!r.some(t=>e.capabilities.includes(t)))}function Ri(e,t){return Li(e,t.inputModality,t.outputModality,t.requiredCapabilities)}function zi(e,t){let{requiredCapabilities:n,requiredFeatures:r,contextNeed:i,qualityPreference:a}=t,o=1;n.length>0&&(o=n.filter(t=>e.capabilities.includes(t)).length/n.length);let s=1;r.length>0&&(s=r.filter(t=>e.features.includes(t)).length/r.length);let c=1,l=Hr[i]??0;if(l>0){let t=e.contextWindow??0;c=t>=l?1:t/l}let u=1;return a===K.Flagship?u=e.category===J.Flagship?1:.5:a===K.CostOptimized&&(u=e.category===J.CostOptimized?1:.5),Gr*o+Kr*s+qr*c+Jr*u}function Q(e,t){if(!t)return new Set(e.map(e=>e.model));let n=e.filter(e=>Ri(e,t)),r=n.length>=5?n:e;return new Set(r.map(e=>e.model))}function Bi(e,t){return Li(e,t.inputModality,t.outputModality,t.requiredCapabilities)}function $(e,t,n,r,i,a){let o=e.filter(e=>n.has(e.id)).flatMap(e=>{let n=i.get(e.id);if(!n)return[];let r=ki(t,e.vector),o=a?zi(n,a):0;return[{model:n,score:a?Ur*o+Wr*r:r,hardScore:a?o:void 0,softScore:r}]}),s=o.filter(e=>(e.softScore??0)>=.3);return(s.length>=10?s:o).sort((e,t)=>t.score-e.score).slice(0,Math.max(0,r))}function Vi(e){return{model:e,score:1,hardScore:1,softScore:1}}function Hi(e,t,n,r,i,a,o){let s=r.targets??[],c=s.length>0?Fi(e,s):e,l=[];if(c.length<5&&s.length>0){for(let e of c)l.push(Vi(e));let r=new Set(l.map(({model:e})=>e.model)),s=$(t,n,Q(e,o),i,a,o);for(let e of s)if(!r.has(e.model.model)&&(l.push(e),l.length>=i))break;return l}return $(t,n,Q(c,o),i,a,o)}function Ui(e,t,n,r,i,a,o){let s=r.targets??[],c=[],l=new Set;for(let t of e)Pi(t,s)&&!l.has(t.model)&&(c.push(Vi(t)),l.add(t.model));let u=Math.max(0,i-c.length);if(u>0){let r=$(t,n,Q(e.filter(e=>!l.has(e.model)),o),u,a,o);for(let e of r)c.push(e)}return c.slice(0,Math.max(0,i))}function Wi(e,t,n,r,i,a,o){let s=Fi(e,r.targets??[]),c=new Set(s.map(e=>e.family).filter(Boolean)),l=[],u=new Set;for(let e of s)l.push(Vi(e)),u.add(e.model);let d=Math.max(0,i-l.length);if(d>0){let r=$(t,n,Q(e.filter(e=>!u.has(e.model)&&(!e.family||!c.has(e.family))),o),d,a,o);for(let e of r)l.push(e)}return l}async function Gi(e,t,n,r,i){let a=Ai();if(!a)a=await Oi(e,t),Z=a;else{let n=new Set(a.map(e=>e.id)),r=new Set(t.map(e=>e.model)),i=n.size!==r.size;if(!i){for(let e of n)if(!r.has(e)){i=!0;break}}i&&(a=await Oi(e,t),Z=a)}let o=await Si(e,i?.semanticQuery?.trim()||n),s=new Map(t.map(e=>[e.model,e])),c=i?.modelPreference,l=c?.excludes??[];if(c&&c.mode!==`unconstrained`){let e;switch(c.mode){case`scoped`:e=Hi(t,a,o,c,r,s,i);break;case`comparison`:e=Ui(t,a,o,c,r,s,i);break;case`alternative`:e=Wi(t,a,o,c,r,s,i);break;default:e=[]}return Ii(e,l)}if(i?.complexity===G.Pipeline&&i.segments?.length){let e=new Set,n=[],c=Math.max(5,Math.ceil(r/i.segments.length));for(let r of i.segments){let l=t.filter(e=>Bi(e,r)),u=new Set(l.filter(t=>!e.has(t.model)).map(e=>e.model));if(u.size===0)continue;let d=$(a,o,u,c,s,i);for(let t of d)e.has(t.model.model)||(n.push(t),e.add(t.model.model))}return Ii(n,l)}let u=Q(t,i);return Ii($(a,o,u,r,s,i),l)}function Ki(e){if(e.prices?.length)return e.prices.map(e=>`${e.type}:${e.price}/${e.unit}`).join(`, `)}function qi(e){return e.map(({model:e})=>{let t=[`ID: ${e.model}`,`Name: ${e.name}`,`Description: ${e.shortDescription||e.description}`,`Capabilities: ${e.capabilities.join(`, `)}`,`Features: ${e.features.join(`, `)}`];e.contextWindow&&t.push(`Context Window: ${e.contextWindow}`),e.maxOutputTokens&&t.push(`Max Output: ${e.maxOutputTokens}`),e.category&&t.push(`Category: ${e.category}`);let n=e.inferenceMetadata;n?.request_modality?.length&&t.push(`Input Modality: ${n.request_modality.join(`, `)}`),n?.response_modality?.length&&t.push(`Output Modality: ${n.response_modality.join(`, `)}`);let r=Ki(e);return r&&t.push(`Pricing: ${r}`),e.family&&t.push(`Family: ${e.family}`),t.join(` | `)}).join(`
|
|
141
|
-
`)}function
|
|
142
|
-
`)}function
|
|
138
|
+
Output only JSON, no other text.`},{role:`user`,content:t}],max_tokens:1024,temperature:0},i;try{i=await e.requestJson({path:n,method:`POST`,body:r,timeout:30})}catch{return{...X}}let a=(i.choices?.[0]?.message?.content??``).match(/\{[\s\S]*\}/);if(!a)return{...X};let o=JSON.parse(a[0]),s=o.modelPreference,c=sa(s);return{complexity:o.complexity===K.Pipeline?K.Pipeline:K.Single,taskSummary:typeof o.taskSummary==`string`?o.taskSummary:``,scenarioHints:Array.isArray(o.scenarioHints)?o.scenarioHints:[],semanticQuery:typeof o.semanticQuery==`string`?o.semanticQuery:``,segments:Array.isArray(o.segments)?o.segments.map(e=>({step:e.step??``,inputModality:Array.isArray(e.inputModality)?e.inputModality:[],outputModality:Array.isArray(e.outputModality)?e.outputModality:[],requiredCapabilities:Array.isArray(e.requiredCapabilities)?e.requiredCapabilities:[]})):void 0,inputModality:Array.isArray(o.inputModality)?o.inputModality:[],outputModality:Array.isArray(o.outputModality)?o.outputModality:[],requiredCapabilities:Array.isArray(o.requiredCapabilities)?o.requiredCapabilities:[],requiredFeatures:Array.isArray(o.requiredFeatures)?o.requiredFeatures:[],budget:o.budget??X.budget,contextNeed:o.contextNeed??X.contextNeed,qualityPreference:o.qualityPreference??X.qualityPreference,confidence:1,modelPreference:c}}function la(e){let t=!1,n=!1;for(let r of e)Yi.has(r)&&(t=!0),Xi.has(r)&&(n=!0);return t&&n}function ua(e){let t=new Set(e.map(({model:e})=>e));return e.filter(({model:e})=>{let n=e.replace(Ji,``);return n===e?!0:!t.has(n)})}function da(e,t,n){let r=e.inferenceMetadata?.request_modality??[],i=e.inferenceMetadata?.response_modality??[];return!(t.length>0&&!t.some(e=>r.includes(e))||n.length>0&&!n.some(e=>i.includes(e)))}function fa(e,t){if(t.length===0)return!0;let n=e.inferenceMetadata?.request_modality??[];return t.some(e=>n.includes(e))}function pa(e,t){let{requiredCapabilities:n,requiredFeatures:r,contextNeed:i,qualityPreference:a}=t,{capabilities:o,features:s,contextWindow:c,category:l}=e,u=0;for(let e of n)o.includes(e)&&(u+=10);for(let e of r)s.includes(e)&&(u+=5);let d=Zi[i];return d>0&&(c??0)>=d&&(u+=8),a===q.Flagship&&l===Y.Flagship||a===q.CostOptimized&&l===Y.CostOptimized?u+=15:a===q.Balanced&&l===Y.Flagship&&(u+=5),u}function Z(e,t,n){return e.map(e=>({model:e,score:pa(e,t)})).sort((e,t)=>t.score-e.score).slice(0,n)}function ma(e){return new Set(e.map(({model:e})=>e.model))}function ha(e,t){let n=new Map,r=[],i=[];for(let a of e){let e=a.model.family;if(!e){r.push(a);continue}let o=n.get(e)??0;o<t?(r.push(a),n.set(e,o+1)):i.push(a)}return r.length>=10?r:[...r,...i.slice(0,10-r.length)]}function ga(e,t){let n=new Set(t);return e.filter(e=>n.has(e.model.model)?!1:(n.add(e.model.model),!0))}function _a(e,t,n){return n.size>=10?[]:Z(e.filter(({model:e})=>!n.has(e)),t,10-n.size)}function va(e,t,n,r,i){let{inputModality:a,outputModality:o,requiredCapabilities:s}=t,c={complexity:K.Single,taskSummary:``,scenarioHints:[],semanticQuery:``,inputModality:a,outputModality:o,requiredCapabilities:s,requiredFeatures:[],budget:r,contextNeed:Gi.Standard,qualityPreference:i,confidence:1},l=e.filter(e=>da(e,a,o)&&fa(e,n));return l.length<5&&(l=e.filter(e=>da(e,a,o))),l.length<5&&(l=e),Z(l,c,5)}function ya(e,t){e=ua(e);let n;if(t.complexity===K.Pipeline&&t.segments?.length){let r=[];for(let[n,i]of t.segments.entries()){let a=n===0?[]:t.segments[n-1].outputModality,o=ga(va(e,i,a,t.budget,t.qualityPreference),ma(r));r=[...r,...o]}let i=_a(e,t,ma(r));n=[...r,...i]}else if(la(t.requiredCapabilities))n=ba(e,t);else{let r=e.filter(e=>da(e,t.inputModality,t.outputModality));r.length<5&&(r=e),n=Z(r,t,50)}return ha(n,3)}function ba(e,t){let n=t.requiredCapabilities.filter(e=>Yi.has(e)),r=t.requiredCapabilities.filter(e=>Xi.has(e)),i=[];if(n.length>0&&(i=Z(e.filter(e=>n.some(t=>e.capabilities.includes(t))),t,25)),r.length>0){let n=ma(i),a={...t,requiredCapabilities:r},o=e.filter(e=>!n.has(e.model)&&r.some(t=>e.capabilities.includes(t)));i=[...i,...Z(o,a,25)]}let a=_a(e,t,ma(i));return[...i,...a]}const xa=`text-embedding-v4`;function Sa(){return E(P(),`skills/bailian-docs-llm-wiki`)}function Ca(){return E(Sa(),`models-embeddings.json`)}function wa(){let e=Ca();if(!S(e))return null;try{return JSON.parse(w(e,`utf-8`)).items}catch{return null}}async function Ta(e,t){let n={model:xa,input:[t],dimensions:512,encoding_format:`float`};return(await e.requestJson({path:`/compatible-mode/v1/embeddings`,method:`POST`,body:n,timeout:1e4})).data[0].embedding}async function Ea(e,t){let n={model:xa,input:t,dimensions:512,encoding_format:`float`};return(await e.requestJson({path:`/compatible-mode/v1/embeddings`,method:`POST`,body:n,timeout:3e4})).data.sort((e,t)=>e.index-t.index).map(e=>e.embedding)}const Da={TG:`Text Generation`,Reasoning:`Reasoning`,VU:`Vision Understanding`,IG:`Image Generation`,VG:`Video Generation`,TTS:`Text-to-Speech`,ASR:`Speech-to-Text`},Oa={Text:`Text`,Image:`Image`,Video:`Video`,Audio:`Audio`};function ka(){let e=E(Sa(),`groups`),t=new Map;if(!S(e))return t;for(let n of ae(e).filter(e=>e.endsWith(`.json`)))try{let r=JSON.parse(w(E(e,n),`utf-8`)),i=r.description??``;if(r.items)for(let e of r.items)t.set(e.model,e.description||i)}catch{}return t}function Aa(e,t){let n=(e.capabilities??[]).map(e=>Da[e]??e).join(`, `),r=t.get(e.model)||e.shortDescription||e.description||``,i=(e.inferenceMetadata?.request_modality??[]).map(e=>Oa[e]??e).join(`, `),a=(e.inferenceMetadata?.response_modality??[]).map(e=>Oa[e]??e).join(`, `);return[e.name,e.model,r,n?`Capabilities: ${n}`:``,i?`Input: ${i}`:``,a?`Output: ${a}`:``,e.features?.length?`Features: ${e.features.join(`, `)}`:``,e.familyName||``,e.category?`Category: ${e.category}`:``].filter(Boolean).join(` | `)}async function ja(e,t){let n=ka(),r=t.map(e=>Aa(e,n)),i=[];for(let t=0;t<r.length;t+=10){let n=await Ea(e,r.slice(t,t+10));i.push(...n)}let a=t.map((e,t)=>({id:e.model,vector:i[t]})),o={model:xa,dimensions:512,count:a.length,items:a},s=Ca();return C(T(s),{recursive:!0}),oe(s,JSON.stringify(o)),a}function Ma(e,t){let n=0,r=0,i=0;for(let a=0;a<e.length;a++)n+=e[a]*t[a],r+=e[a]*e[a],i+=t[a]*t[a];let a=Math.sqrt(r)*Math.sqrt(i);return a===0?0:n/a}let Q=null;function Na(){return Q===null&&(Q=wa()),Q}function Pa(){return Na()!==null}function $(e){return(e??``).toLowerCase().replace(Ji,``).replace(/[\s_-]+/g,``).trim()}function Fa(e,t){let n=$(t);if(!n)return!1;if($(e.model)===n||$(e.name)===n)return!0;let r=e.model,i=r.lastIndexOf(`/`);return i>=0&&$(r.slice(i+1))===n?!0:[e.family,e.familyName].some(e=>{if(!e)return!1;let t=$(e);return t.length>0&&n.includes(t)})}function Ia(e,t){return t.some(t=>Fa(e,t))}function La(e,t){return t.length===0?[]:e.filter(e=>Ia(e,t))}function Ra(e,t){return t.length===0?e:e.filter(({model:e})=>!Ia(e,t))}function za(e,t,n,r){let i=e.inferenceMetadata?.request_modality??[],a=e.inferenceMetadata?.response_modality??[];return!(t.length>0&&!t.some(e=>i.includes(e))||n.length>0&&!n.some(e=>a.includes(e))||r.length>0&&!r.some(t=>e.capabilities.includes(t)))}function Ba(e,t){return za(e,t.inputModality,t.outputModality,t.requiredCapabilities)}function Va(e,t){let{requiredCapabilities:n,requiredFeatures:r,contextNeed:i,qualityPreference:a}=t,o=1;n.length>0&&(o=n.filter(t=>e.capabilities.includes(t)).length/n.length);let s=1;r.length>0&&(s=r.filter(t=>e.features.includes(t)).length/r.length);let c=1,l=Zi[i]??0;if(l>0){let t=e.contextWindow??0;c=t>=l?1:t/l}let u=1;return a===q.Flagship?u=e.category===Y.Flagship?1:.5:a===q.CostOptimized&&(u=e.category===Y.CostOptimized?1:.5),ea*o+ta*s+na*c+ra*u}function Ha(e,t){if(!t)return new Set(e.map(e=>e.model));let n=e.filter(e=>Ba(e,t)),r=n.length>=5?n:e;return new Set(r.map(e=>e.model))}function Ua(e,t){return za(e,t.inputModality,t.outputModality,t.requiredCapabilities)}function Wa(e,t,n,r,i,a){let o=e.filter(e=>n.has(e.id)).flatMap(e=>{let n=i.get(e.id);if(!n)return[];let r=Ma(t,e.vector),o=a?Va(n,a):0;return[{model:n,score:a?Qi*o+$i*r:r,hardScore:a?o:void 0,softScore:r}]}),s=o.filter(e=>(e.softScore??0)>=.3);return(s.length>=10?s:o).sort((e,t)=>t.score-e.score).slice(0,Math.max(0,r))}function Ga(e){return{model:e,score:1,hardScore:1,softScore:1}}function Ka(e,t,n,r,i,a,o){let s=r.targets??[],c=s.length>0?La(e,s):e,l=[];if(c.length<5&&s.length>0){for(let e of c)l.push(Ga(e));let r=new Set(l.map(({model:e})=>e.model)),s=Wa(t,n,Ha(e,o),i,a,o);for(let e of s)if(!r.has(e.model.model)&&(l.push(e),l.length>=i))break;return l}return Wa(t,n,Ha(c,o),i,a,o)}function qa(e,t,n,r,i,a,o){let s=r.targets??[],c=[],l=new Set;for(let t of e)Ia(t,s)&&!l.has(t.model)&&(c.push(Ga(t)),l.add(t.model));return c}function Ja(e,t,n,r,i,a,o){let s=La(e,r.targets??[]),c=new Set(s.map(e=>e.family).filter(Boolean)),l=[],u=new Set;for(let e of s)l.push(Ga(e)),u.add(e.model);let d=Math.max(0,i-l.length);if(d>0){let r=Wa(t,n,Ha(e.filter(e=>!u.has(e.model)&&(!e.family||!c.has(e.family))),o),d,a,o);for(let e of r)l.push(e)}return l}async function Ya(e,t,n,r,i){let a=Na();if(!a)a=await ja(e,t),Q=a;else{let n=new Set(a.map(e=>e.id)),r=new Set(t.map(e=>e.model)),i=n.size!==r.size;if(!i){for(let e of n)if(!r.has(e)){i=!0;break}}i&&(a=await ja(e,t),Q=a)}let o=await Ta(e,i?.semanticQuery?.trim()||n),s=new Map(t.map(e=>[e.model,e])),c=i?.modelPreference,l=c?.excludes??[];if(c&&c.mode!==`unconstrained`){let e;switch(c.mode){case`scoped`:e=Ka(t,a,o,c,r,s,i);break;case`comparison`:e=qa(t,a,o,c,r,s,i);break;case`alternative`:e=Ja(t,a,o,c,r,s,i);break;default:e=[]}return Ra(e,l)}if(i?.complexity===K.Pipeline&&i.segments?.length){let e=new Set,n=[],c=Math.max(5,Math.ceil(r/i.segments.length));for(let r of i.segments){let l=t.filter(e=>Ua(e,r)),u=new Set(l.filter(t=>!e.has(t.model)).map(e=>e.model));if(u.size===0)continue;let d=Wa(a,o,u,c,s,i);for(let t of d)e.has(t.model.model)||(n.push(t),e.add(t.model.model))}return Ra(n,l)}let u=Ha(t,i);return Ra(Wa(a,o,u,r,s,i),l)}function Xa(e){if(e.prices?.length)return e.prices.map(e=>`${e.type}:${e.price}/${e.unit}`).join(`, `)}function Za(e){return e.map(({model:e})=>{let t=[`ID: ${e.model}`,`Name: ${e.name}`,`Description: ${e.shortDescription||e.description}`,`Capabilities: ${e.capabilities.join(`, `)}`,`Features: ${e.features.join(`, `)}`];e.contextWindow&&t.push(`Context Window: ${e.contextWindow}`),e.maxOutputTokens&&t.push(`Max Output: ${e.maxOutputTokens}`),e.category&&t.push(`Category: ${e.category}`);let n=e.inferenceMetadata;n?.request_modality?.length&&t.push(`Input Modality: ${n.request_modality.join(`, `)}`),n?.response_modality?.length&&t.push(`Output Modality: ${n.response_modality.join(`, `)}`);let r=Xa(e);return r&&t.push(`Pricing: ${r}`),e.family&&t.push(`Family: ${e.family}`),t.join(` | `)}).join(`
|
|
139
|
+
`)}function Qa(e){let{taskSummary:t,scenarioHints:n,inputModality:r,outputModality:i,requiredCapabilities:a,requiredFeatures:o,budget:s,qualityPreference:c,contextNeed:l,segments:u,modelPreference:d}=e,f=[];if(t&&f.push(`Task: ${t}`),n.length&&f.push(`Scenario: ${n.join(`, `)}`),r.length&&f.push(`Input: ${r.join(`, `)}`),i.length&&f.push(`Output: ${i.join(`, `)}`),a.length&&f.push(`Capabilities: ${a.join(`, `)}`),o.length&&f.push(`Features: ${o.join(`, `)}`),f.push(`Budget: ${s}`),f.push(`Quality: ${c}`),l!==Gi.Standard&&f.push(`Context: ${l}`),d&&d.mode!==`unconstrained`&&(f.push(`Mode: ${d.mode}`),d.targets?.length&&f.push(`Targets: ${d.targets.join(`, `)}`),d.excludes?.length&&f.push(`Excludes: ${d.excludes.join(`, `)}`)),u?.length){f.push(`Pipeline Steps:`);for(let e of u){let t=e.inputModality.join(`,`)||`none`,n=e.outputModality.join(`,`)||`none`,r=e.requiredCapabilities.join(`,`)||`none`;f.push(` - ${e.step} (Input: ${t} → Output: ${n}, Capabilities: ${r})`)}}return f.join(`
|
|
140
|
+
`)}function $a(e){if(!e)return;let t=e.match(/\/(\d+)\.html/);if(t)return`https://bailian.console.aliyun.com/cn-beijing?tab=doc#/doc/?type=model&url=${t[1]}`}function eo(e,t,n){let r=Array.isArray(e)?e:[],i=[],a=new Set;for(let e of r){let r=t.get(e.model);if(!r||r.family&&a.has(r.family))continue;r.family&&a.add(r.family);let{model:o,name:s,category:c,contextWindow:l,maxOutputTokens:u,docUrl:d}=r;if(i.push({model:o,name:s,reason:e.reason??``,highlights:e.highlights??[],category:c,contextWindow:l,maxOutputTokens:u,docUrl:d}),i.length>=n)break}return i}function to(e,t){for(let n=1;n<e.length;n++){let r=e[n-1],i=e[n],a=new Set(r.recommendations.flatMap(e=>t.get(e.model)?.inferenceMetadata?.response_modality??[]));if(a.size===0)continue;let o=[];for(let e of i.recommendations){let n=t.get(e.model)?.inferenceMetadata?.request_modality??[];!n.some(e=>a.has(e))&&n.length>0&&o.push(`${e.name}'s input modalities [${n.join(`, `)}] may not be compatible with the previous step's output modalities [${[...a].join(`, `)}]`)}o.length>0&&(i.warnings=o)}}async function no(e,t,n,r,i,a){let o=Za(t),s=Qa(n),c=n.modelPreference?.mode,l;if(c===`comparison`)l=`You are a model comparison advisor for Alibaba Cloud Model Studio. The user wants to compare specific models — analyze them against the use case.
|
|
143
141
|
|
|
144
142
|
CRITICAL: You MUST respond entirely in English. Do not use any Chinese characters anywhere in your response. Every field — reason, highlights — must be written in English.
|
|
145
143
|
|
|
@@ -181,4 +179,4 @@ The intent's modelPreference.targets is the reference model.
|
|
|
181
179
|
- Output strict JSON
|
|
182
180
|
|
|
183
181
|
## Output Format
|
|
184
|
-
{"type":"single","recommendations":[{"model":"model ID","reason":"alternative analysis","highlights":["differentiators"]}]}`;else if(c===`scoped`){let e=n.modelPreference?.targets?.length?`\n\n## Scope Restriction\nThe user explicitly requested recommendations from: ${n.modelPreference.targets.join(`, `)}. Prioritize models within this scope.`:``;l=(n.complexity===
|
|
182
|
+
{"type":"single","recommendations":[{"model":"model ID","reason":"alternative analysis","highlights":["differentiators"]}]}`;else if(c===`scoped`){let e=n.modelPreference?.targets?.length?`\n\n## Scope Restriction\nThe user explicitly requested recommendations from: ${n.modelPreference.targets.join(`, `)}. Prioritize models within this scope.`:``;l=(n.complexity===K.Pipeline?aa:ia)+e}else l=n.complexity===K.Pipeline?aa:ia;let u=a?.enableThinking??!1,d=n.complexity===K.Pipeline?`Intent Analysis:\n${s}\n\nCandidate Models:\n${o}\n\nUser Request: ${r}\n\nRecommend up to ${i} models for each pipeline step. Respond in English only.`:`Intent Analysis:\n${s}\n\nCandidate Models:\n${o}\n\nUser Request: ${r}\n\nRecommend up to ${i} models. Respond in English only.`,f={model:`qwen-flash`,messages:[{role:`system`,content:l},{role:`user`,content:d}],max_tokens:4096,temperature:0};u&&(f.stream=!0,f.enable_thinking=!0);let p=He(),m;if(u){let t=await e.request({path:p,method:`POST`,body:f,stream:!0}),n=``,r=!1;for await(let e of Jt(t)){if(e.data===`[DONE]`)break;try{let t=JSON.parse(e.data);for(let e of t.choices){let t=e.delta;t.reasoning_content&&a?.onThinking&&a.onThinking(t.reasoning_content),t.content&&(r||(r=!0,a?.onContentStart?.()),n+=t.content)}}catch{}}m=n||`{}`}else m=(await e.requestJson({path:p,method:`POST`,body:f})).choices?.[0]?.message?.content??`{}`;let h;try{let e=m.match(/\{[\s\S]*\}/);h=JSON.parse(e?.[0]??`{}`)}catch{return{type:K.Single,recommendations:[]}}let g=new Map(t.map(({model:e})=>[e.model,e]));if(h.type===K.Pipeline&&Array.isArray(h.steps)){let e=[];for(let t of h.steps){let n=eo(t.recommendations??(t.model?[t]:[]),g,i);n.length>0&&e.push({step:t.step??``,recommendations:n})}return to(e,g),{type:K.Pipeline,summary:h.summary??``,steps:e}}let _=eo(h.recommendations??h??[],g,i);return{type:K.Single,recommendations:_}}export{Zr as ASYNC_FLAG,ve as BAILIAN_HOST,Vr as BILLING_METHOD,N as BailianError,Wi as Budgets,bt as CHANNEL,Ur as CHARGE_TYPE,ri as COMMAND_PACK_API_VERSION,Xr as CONCURRENT_FLAG,$r as CONSOLE_AUTH_FLAGS,J as Capabilities,qt as Client,K as Complexities,Gi as ContextNeeds,Hr as DEFAULT_BILLING_METHOD,zr as DEFAULT_DEPLOY_PLAN,dr as DEFAULT_TRAINING_TYPE,W as DEPLOY_PLAN,_e as DOCS_HOSTS,M as ExitCode,Ki as Features,Yr as GLOBAL_FLAGS,_r as INSUFFICIENT_SAMPLES_CODE,un as MAX_DATASET_BYTES,dn as MAX_MEDIA_ZIP_BYTES,Qr as MODEL_AUTH_FLAGS,Yt as MODEL_LIST_API,Vt as McpClient,Ui as Modalities,Y as ModelCategories,ei as OPENAPI_AUTH_FLAGS,Xt as PREDICT_CONFIG_API,q as QualityPreferences,ge as REGIONS,qi as SEMANTIC_TOP_K,St as SOURCE_CONFIG,qr as STRATEGIES,xt as TAGS,ur as TRAINING_TYPES_CLI,U as TRAINING_TYPE_MAP,pe as UsageError,ca as analyzeIntent,qe as appCompletionPath,Bt as bailianMcpPath,Ot as buildAcsCanonicalQuery,$a as buildDocLink,ze as buildSettings,Re as buildSources,Kt as callConsoleGateway,ar as cancelFineTune,He as chatPath,Mr as createDeployment,nr as createFineTune,pi as createTrackingEvent,ti as credentialFlagDefs,Br as defaultDeployPlan,ni as defineCommand,ln as deleteDataset,Fr as deleteDeployment,or as deleteFineTune,Ae as describeAuthState,Kn as detectModality,Ie as detectOutputFormat,Wt as effectiveConsoleGatewayConfig,Me as ensureConfigDir,lr as exportCheckpoint,gr as fetchModelCapability,en as fetchModelDetail,$t as fetchModelGroups,Qt as fetchModelList,rn as fetchPredictConfig,Ti as flushTelemetry,Fe as formatErrorJson,tr as formatIssue,Pe as formatJson,Le as formatOutput,Ne as formatText,ai as generateFilename,P as getConfigDir,F as getConfigPath,je as getCredentialsPath,cn as getDataset,Pr as getDeployment,ir as getFineTune,sr as getFineTuneLogs,Hi as getModels,Ar as getProfile,Ue as imagePath,We as imageSyncPath,Lt as isLocalFile,Pa as isSemanticAvailable,fr as isTrainingTypeCli,it as knowledgeChatEndpoint,nt as knowledgeRetrievePath,rt as knowledgeSearchEndpoint,cr as listCheckpoints,sn as listDatasets,Ir as listDeployableModels,Nr as listDeployments,rr as listFineTunes,er as listSupportedFormats,hr as listSupportedTrainingTypes,jr as listTrainingTypes,Ei as localSink,Ve as makeAuthStore,an as makeConfigStore,he as mapApiError,Ct as maskToken,at as mcpWebSearchPath,Je as memoryAddPath,Xe as memoryListPath,Ze as memoryNodePath,Ye as memorySearchPath,mr as modelSupportsTrainingType,li as parseBooleanValue,Se as parseConfigFile,pn as parseDatasetSchemaFlag,ui as parseOptionalBooleanValue,Jt as parseSSE,Jr as pickPlanStrategy,Qn as pickValidator,vr as preflightBatchSizeGate,et as profileSchemaPath,no as rankModels,I as readConfigFile,ya as recallCandidates,Ya as recallSemantic,$n as registerValidator,Di as remoteSink,Tt as request,Dt as requestJson,we as resolveApiKey,di as resolveBooleanFlag,Te as resolveConsole,Rt as resolveFileUrl,Ce as resolveModelBaseUrl,Ee as resolveOpenApi,si as resolveOutputDir,fi as resolveWatermark,Lr as scaleDeployment,kt as signAcsRequest,$e as speechRecognizePath,Qe as speechSynthesizePath,ci as stripUndefined,Ke as taskPath,ji as trackCommandExecution,R as trackingHeaders,pr as trainingTypeMethodVariant,Zt as unwrapResponse,Rr as updateDeployment,on as uploadDataset,It as uploadFile,tt as userProfilePath,H as validateDataset,Ge as videoGeneratePath,L as writeConfigFile};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bailian-cli-core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.1",
|
|
4
4
|
"description": "Core SDK for bailian-cli. See https://www.npmjs.com/package/bailian-cli for usage.",
|
|
5
5
|
"homepage": "https://bailian.console.aliyun.com/cli",
|
|
6
6
|
"bugs": {
|
|
@@ -27,10 +27,12 @@
|
|
|
27
27
|
"registry": "https://registry.npmjs.org/"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"yaml": "^2.8.3"
|
|
30
|
+
"yaml": "^2.8.3",
|
|
31
|
+
"yauzl": "^3.4.0"
|
|
31
32
|
},
|
|
32
33
|
"devDependencies": {
|
|
33
34
|
"@types/node": "^24",
|
|
35
|
+
"@types/yauzl": "^3.4.0",
|
|
34
36
|
"@typescript/native-preview": "7.0.0-dev.20260328.1",
|
|
35
37
|
"typescript": "^6.0.2",
|
|
36
38
|
"vite-plus": "latest"
|