@aexol/spectral 0.9.264 → 0.9.269

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.
@@ -48,6 +48,14 @@ export interface CleanDatasetResult {
48
48
  }
49
49
  /** Derive the default clean output path: `export-x.jsonl` → `export-x.clean.jsonl`. */
50
50
  export declare function defaultCleanPath(inputPath: string): string;
51
+ /**
52
+ * Normalize conversation entries to the strict sharegpt contract
53
+ * (`{from, value}`). Internal markers such as `_trunc` (attached by
54
+ * exporter variants to truncated observations) are stripped at
55
+ * serialization time — the marker logic itself is untouched, the key
56
+ * simply never reaches a clean file or the vault.
57
+ */
58
+ export declare function normalizeConversationEntries(sample: Record<string, unknown>): Record<string, unknown>;
51
59
  /**
52
60
  * Clean a dataset JSONL file: scrub all string fields, apply optional
53
61
  * filters, write `<name>.clean.jsonl` next to the input.
@@ -1 +1 @@
1
- {"version":3,"file":"cleaner.d.ts","sourceRoot":"","sources":["../../../src/extensions/dataset-uploader/cleaner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,MAAM,WAAW,mBAAmB;IAClC,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,2EAA2E;IAC3E,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/C;AA6CD,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CAyDpB"}
1
+ {"version":3,"file":"cleaner.d.ts","sourceRoot":"","sources":["../../../src/extensions/dataset-uploader/cleaner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,MAAM,WAAW,mBAAmB;IAClC,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,qEAAqE;IACrE,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,cAAc,EAAE,MAAM,CAAC;QACvB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,2EAA2E;IAC3E,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC/C;AA6CD,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAK1D;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAczB;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CA2DpB"}
@@ -59,6 +59,32 @@ export function defaultCleanPath(inputPath) {
59
59
  }
60
60
  return `${inputPath}.clean.jsonl`;
61
61
  }
62
+ /**
63
+ * Normalize conversation entries to the strict sharegpt contract
64
+ * (`{from, value}`). Internal markers such as `_trunc` (attached by
65
+ * exporter variants to truncated observations) are stripped at
66
+ * serialization time — the marker logic itself is untouched, the key
67
+ * simply never reaches a clean file or the vault.
68
+ */
69
+ export function normalizeConversationEntries(sample) {
70
+ const conversations = sample.conversations;
71
+ if (!Array.isArray(conversations))
72
+ return sample;
73
+ let changed = false;
74
+ const normalized = conversations.map((entry) => {
75
+ if (entry === null || typeof entry !== "object" || Array.isArray(entry))
76
+ return entry;
77
+ const record = entry;
78
+ if (!("_trunc" in record))
79
+ return entry;
80
+ changed = true;
81
+ const { _trunc: _dropped, ...rest } = record;
82
+ return rest;
83
+ });
84
+ if (!changed)
85
+ return sample;
86
+ return { ...sample, conversations: normalized };
87
+ }
62
88
  /**
63
89
  * Clean a dataset JSONL file: scrub all string fields, apply optional
64
90
  * filters, write `<name>.clean.jsonl` next to the input.
@@ -94,7 +120,7 @@ export function cleanDataset(inputPath, options = {}) {
94
120
  removedByFilter.keepOnlyToolCalls++;
95
121
  continue;
96
122
  }
97
- kept.push(scrubDeep(sample, options.extraValues, counts));
123
+ kept.push(normalizeConversationEntries(scrubDeep(sample, options.extraValues, counts)));
98
124
  }
99
125
  const outputPath = options.outputPath ?? defaultCleanPath(inputPath);
100
126
  mkdirSync(dirname(outputPath), { recursive: true });
@@ -1 +1 @@
1
- {"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../../src/extensions/dataset-uploader/exporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exporter.d.ts","sourceRoot":"","sources":["../../../src/extensions/dataset-uploader/exporter.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,7 @@ import { createRequire } from "node:module";
39
39
  import { existsSync, mkdirSync, writeFileSync } from "node:fs";
40
40
  import { dirname, join } from "node:path";
41
41
  import { getConfigDir } from "../../config.js";
42
+ import { scrub } from "./scrubber.js";
42
43
  const _require = createRequire(import.meta.url);
43
44
  let nodeSqliteModule;
44
45
  let nodeSqliteProbed = false;
@@ -187,9 +188,16 @@ export function parseAssistantEvents(eventsJsonl, capChars = null, includeThinki
187
188
  const text = extractResultText(event.result);
188
189
  if (text.length === 0)
189
190
  break;
191
+ // Scrub BEFORE the truncation cap: a secret cut mid-token by the
192
+ // cap would no longer match the scrubber's patterns (e.g. a JWT
193
+ // losing its signature segment), so the full text is sanitised
194
+ // first and then cut. Pattern-only scrub (no extraValues — the
195
+ // export step does not collect secret-store/.env values;
196
+ // dataset_clean applies the full scrub to the whole file later).
197
+ const sanitized = scrub(text).text;
190
198
  entries.push({
191
199
  from: "observation",
192
- value: (event.isError ? "[ERROR] " : "") + capObservation(capChars, text),
200
+ value: (event.isError ? "[ERROR] " : "") + capObservation(capChars, sanitized),
193
201
  });
194
202
  break;
195
203
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scrubber.d.ts","sourceRoot":"","sources":["../../../src/extensions/dataset-uploader/scrubber.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAiCD;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,WAAW,CA6CvE"}
1
+ {"version":3,"file":"scrubber.d.ts","sourceRoot":"","sources":["../../../src/extensions/dataset-uploader/scrubber.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AA6CD;;;;;;;;;GASG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,WAAW,CAiDvE"}
@@ -28,6 +28,17 @@ const AUTH_HEADER_PATTERN = /\b(authorization\s*[:=]\s*)(?:bearer\s+)?[A-Za-z0-9
28
28
  const BEARER_PATTERN = /\bbearer\s+[A-Za-z0-9._~+/=-]+/gi;
29
29
  /** Bare JWT: three base64url segments, the first starting with "eyJ". */
30
30
  const JWT_PATTERN = /\beyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\b/g;
31
+ /**
32
+ * Partial / truncated JWT: an "eyJ"-prefixed base64url run with one or two
33
+ * dot-separated segments. A JWT cut mid-string (e.g. by observation
34
+ * truncation) loses its signature segment, so JWT_PATTERN no longer
35
+ * matches — but the surviving payload prefix still leaks identifying
36
+ * claims (teamId, machineName, ...). Runs AFTER the full-3-segment
37
+ * pattern, so complete JWTs are redacted as one unit first and identically
38
+ * to before. The "eyJ" prefix (base64 of `{"`) keeps ordinary prose and
39
+ * non-JWT base64 blobs from matching.
40
+ */
41
+ const JWT_PARTIAL_PATTERN = /\beyJ[A-Za-z0-9_-]{10,}(?:\.[A-Za-z0-9_-]+){0,2}\b/g;
31
42
  /**
32
43
  * Home directory segment: /Users/<name> followed by "/" or end-of-text.
33
44
  * Normalized to /home (the marker would break the surrounding path).
@@ -77,6 +88,10 @@ export function scrub(text, extraValues) {
77
88
  counts.jwt = (counts.jwt ?? 0) + 1;
78
89
  return "[REDACTED:jwt]";
79
90
  });
91
+ out = out.replace(JWT_PARTIAL_PATTERN, () => {
92
+ counts.jwt = (counts.jwt ?? 0) + 1;
93
+ return "[REDACTED:jwt]";
94
+ });
80
95
  out = out.replace(HOME_PATH_PATTERN, () => {
81
96
  counts.home_path = (counts.home_path ?? 0) + 1;
82
97
  return "/home";
@@ -1 +1 @@
1
- {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/extensions/dataset-uploader/upload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAYH,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,0DAA0D;AAC1D,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAE5D,yEAAyE;AACzE,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAE9D,eAAO,MAAM,cAAc,aAAa,CAAC;AAEzC;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,WAAW,oBAAoB;IACnC,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,wGAAwG;IACxG,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,kFAAkF;IAClF,WAAW,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,cAAc,CAAC,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC9D,uEAAuE;IACvE,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAQD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAE7E;AAmFD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CA2H9B;AAMD,mEAAmE;AACnE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CA2CxE"}
1
+ {"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/extensions/dataset-uploader/upload.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAaH,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,0DAA0D;AAC1D,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAE5D,yEAAyE;AACzE,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAE9D,eAAO,MAAM,cAAc,aAAa,CAAC;AAEzC;;;;GAIG;AACH,MAAM,MAAM,eAAe,GAAG,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,MAAM,WAAW,oBAAoB;IACnC,iDAAiD;IACjD,SAAS,EAAE,MAAM,CAAC;IAClB,wGAAwG;IACxG,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IACnE,kFAAkF;IAClF,WAAW,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;;;OAIG;IACH,cAAc,CAAC,EAAE;QAAE,eAAe,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC9D,uEAAuE;IACvE,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAQD;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI,CAE7E;AAmFD;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,mBAAmB,CAAC,CAgI9B;AAMD,mEAAmE;AACnE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,CA2CxE"}
@@ -28,6 +28,7 @@ import { ensureAuthenticated } from "../../auth-helper.js";
28
28
  import { readStudioBinding } from "../../studio-binding.js";
29
29
  import { renderContentToString } from "../aexol-backend-client.js";
30
30
  import { loadJsonl } from "./analyzer.js";
31
+ import { normalizeConversationEntries } from "./cleaner.js";
31
32
  import { scrub } from "./scrubber.js";
32
33
  export const DEFAULT_BATCH_SIZE = 50;
33
34
  /** Backend MCP tool that ingests one batch of samples. */
@@ -149,7 +150,10 @@ export async function uploadDataset(options) {
149
150
  }
150
151
  notes.push("Per-project batching is not supported by the exporter JSONL (no per-sample project provenance); " +
151
152
  "a single projectId from the binding is used for all batches.");
152
- const validSamples = samples.map((s) => JSON.stringify(s));
153
+ // Serialize with conversation entries normalized to the strict sharegpt
154
+ // contract ({from, value}) — internal markers such as `_trunc` never
155
+ // reach the vault, even when the input file was not run through clean.
156
+ const validSamples = samples.map((s) => JSON.stringify(normalizeConversationEntries(s)));
153
157
  const invalidLines = malformedLines;
154
158
  // ---- pre-upload residue warning (pattern-only dry-run scrub) ------------
155
159
  // Runs in BOTH dry-run and real uploads, before the first network batch.
@@ -1 +1 @@
1
- {"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../../src/generated/zeus/const.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAC,GAAG,CAq8B5C,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAC,GAAG,CA45C1C,CAAA;AAED,eAAO,MAAM,GAAG;;;;CAIf,CAAA"}
1
+ {"version":3,"file":"const.d.ts","sourceRoot":"","sources":["../../../src/generated/zeus/const.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAC,GAAG,CAogC5C,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAC,GAAG,CAmjD1C,CAAA;AAED,eAAO,MAAM,GAAG;;;;CAIf,CAAA"}
@@ -229,8 +229,13 @@ export const AllTypesProps = {
229
229
  adminVastAiOffers: {
230
230
  query: "AdminVastAiOfferQueryInput"
231
231
  },
232
+ adminUpCloudGpuPrices: {},
233
+ adminUpCloudServers: {},
234
+ adminUpCloudServer: {},
232
235
  adminRunPodPods: {},
233
- adminDeployConfig: {}
236
+ adminDeployConfig: {},
237
+ adminColdStartRuns: {},
238
+ adminColdStartRun: {}
234
239
  },
235
240
  Mutation: {
236
241
  register: {
@@ -399,6 +404,18 @@ export const AllTypesProps = {
399
404
  input: "AdminUpdateDeployConfigInput"
400
405
  },
401
406
  adminDeleteDeployConfig: {},
407
+ adminCreateColdStartProfile: {
408
+ input: "AdminColdStartProfileInput"
409
+ },
410
+ adminUpdateColdStartProfile: {
411
+ input: "AdminUpdateColdStartProfileInput"
412
+ },
413
+ adminDeleteColdStartProfile: {},
414
+ adminStartColdStartRun: {},
415
+ adminStopColdStartRun: {
416
+ mode: "ColdStartStopMode"
417
+ },
418
+ adminPollColdStartRun: {},
402
419
  adminCreateBuiltInModel: {
403
420
  input: "CreateBuiltInModelInput"
404
421
  },
@@ -434,6 +451,13 @@ export const AllTypesProps = {
434
451
  adminStartVastAiInstance: {},
435
452
  adminStopVastAiInstance: {},
436
453
  adminDestroyVastAiInstance: {},
454
+ adminUpCloudDeployServer: {
455
+ input: "UpCloudDeployInput"
456
+ },
457
+ adminUpCloudStartServer: {},
458
+ adminUpCloudStopServer: {},
459
+ adminUpCloudAddFirewallPorts: {},
460
+ adminUpCloudDestroyServer: {},
437
461
  adminCreateRunPod: {
438
462
  input: "AdminCreateRunPodInput"
439
463
  },
@@ -565,6 +589,10 @@ export const AllTypesProps = {
565
589
  AdminVastAiOfferQueryInput: {},
566
590
  AdminCreateVastAiInstanceInput: {},
567
591
  AdminUpdateVastAiInstanceInput: {},
592
+ UpCloudLabelInput: {},
593
+ UpCloudDeployInput: {
594
+ labels: "UpCloudLabelInput"
595
+ },
568
596
  AdminCreateRunPodInput: {
569
597
  env: "JSON"
570
598
  },
@@ -573,6 +601,15 @@ export const AllTypesProps = {
573
601
  },
574
602
  AdminCreateDeployConfigInput: {},
575
603
  AdminUpdateDeployConfigInput: {},
604
+ ColdStartRunStatus: "enum",
605
+ GpuProvider: "enum",
606
+ AdminColdStartProfileInput: {
607
+ provider: "GpuProvider"
608
+ },
609
+ AdminUpdateColdStartProfileInput: {
610
+ provider: "GpuProvider"
611
+ },
612
+ ColdStartStopMode: "enum",
576
613
  BaseModelUpdateInput: {},
577
614
  BaseModelCreateInput: {
578
615
  capabilities: "JSON"
@@ -1161,12 +1198,21 @@ export const ReturnTypes = {
1161
1198
  adminVastAiSettings: "AdminVastAiSettings",
1162
1199
  adminVastAiOffers: "AdminVastAiOffer",
1163
1200
  adminVastAiInstances: "AdminVastAiInstance",
1201
+ adminUpCloudAccount: "UpCloudAccount",
1202
+ adminUpCloudGpuPlans: "UpCloudGpuPlan",
1203
+ adminUpCloudGpuPrices: "UpCloudPlanPrices",
1204
+ adminUpCloudTemplates: "UpCloudTemplate",
1205
+ adminUpCloudServers: "UpCloudServer",
1206
+ adminUpCloudServer: "UpCloudServer",
1164
1207
  adminRunPodAccount: "AdminRunPodAccount",
1165
1208
  adminRunPodSettings: "AdminRunPodSettings",
1166
1209
  adminRunPodPods: "AdminRunPodPod",
1167
1210
  adminRunPodGpuTypes: "AdminRunPodGpuType",
1168
1211
  adminDeployConfigs: "AdminDeployConfig",
1169
- adminDeployConfig: "AdminDeployConfig"
1212
+ adminDeployConfig: "AdminDeployConfig",
1213
+ adminColdStartProfiles: "AdminColdStartProfile",
1214
+ adminColdStartRuns: "ColdStartRun",
1215
+ adminColdStartRun: "ColdStartRun"
1170
1216
  },
1171
1217
  Mutation: {
1172
1218
  register: "AuthPayload",
@@ -1260,6 +1306,13 @@ export const ReturnTypes = {
1260
1306
  adminCreateDeployConfig: "AdminDeployConfig",
1261
1307
  adminUpdateDeployConfig: "AdminDeployConfig",
1262
1308
  adminDeleteDeployConfig: "Boolean",
1309
+ adminCreateColdStartProfile: "AdminColdStartProfile",
1310
+ adminUpdateColdStartProfile: "AdminColdStartProfile",
1311
+ adminDeleteColdStartProfile: "Boolean",
1312
+ adminStartColdStartRun: "StartColdStartResult",
1313
+ adminStopColdStartRun: "ColdStartRun",
1314
+ adminPollColdStartRun: "ColdStartRun",
1315
+ adminReconcileColdStartRuns: "ReconcileColdStartRunsResult",
1263
1316
  adminCreateBuiltInModel: "UserModel",
1264
1317
  adminUpdateBuiltInModel: "UserModel",
1265
1318
  adminDeleteBuiltInModel: "Boolean",
@@ -1277,6 +1330,11 @@ export const ReturnTypes = {
1277
1330
  adminStartVastAiInstance: "AdminVastAiOperation",
1278
1331
  adminStopVastAiInstance: "AdminVastAiOperation",
1279
1332
  adminDestroyVastAiInstance: "AdminVastAiOperation",
1333
+ adminUpCloudDeployServer: "UpCloudServer",
1334
+ adminUpCloudStartServer: "UpCloudOperation",
1335
+ adminUpCloudStopServer: "UpCloudOperation",
1336
+ adminUpCloudAddFirewallPorts: "UpCloudOperation",
1337
+ adminUpCloudDestroyServer: "UpCloudOperation",
1280
1338
  adminCreateRunPod: "AdminRunPodPod",
1281
1339
  adminUpdateRunPod: "AdminRunPodPod",
1282
1340
  adminStartRunPod: "AdminRunPodOperation",
@@ -1362,6 +1420,7 @@ export const ReturnTypes = {
1362
1420
  subscriptionConnectable: "Boolean",
1363
1421
  upstreamApiFormat: "ModelApiFormat",
1364
1422
  restrictedToTeams: "Boolean",
1423
+ coldStartEnabled: "Boolean",
1365
1424
  allowedTeamIds: "ID",
1366
1425
  defaultThinkingLevel: "String",
1367
1426
  contextWindow: "Int",
@@ -1864,6 +1923,59 @@ export const ReturnTypes = {
1864
1923
  status: "String",
1865
1924
  message: "String"
1866
1925
  },
1926
+ UpCloudAccount: {
1927
+ username: "String",
1928
+ creditsEur: "Float",
1929
+ paidCreditsEur: "Float",
1930
+ resourceLimitsCores: "Int",
1931
+ resourceLimitsGpus: "Int",
1932
+ resourceLimitsMemoryMiB: "Int",
1933
+ resourceLimitsPublicIpv4: "Int"
1934
+ },
1935
+ UpCloudGpuPlan: {
1936
+ name: "String",
1937
+ cores: "Int",
1938
+ memoryGb: "Float",
1939
+ gpuAmount: "Int",
1940
+ gpuModel: "String",
1941
+ spot: "Boolean"
1942
+ },
1943
+ UpCloudPlanPrice: {
1944
+ plan: "String",
1945
+ hourlyEur: "Float",
1946
+ spotHourlyEur: "Float"
1947
+ },
1948
+ UpCloudPlanPrices: {
1949
+ byPlan: "UpCloudPlanPrice",
1950
+ storageStandardEurPerGbMonth: "Float",
1951
+ storageMaxiopsEurPerGbMonth: "Float",
1952
+ publicIpv4EurPerMonth: "Float"
1953
+ },
1954
+ UpCloudTemplate: {
1955
+ uuid: "String",
1956
+ title: "String",
1957
+ sizeGb: "Int",
1958
+ cloudInit: "Boolean"
1959
+ },
1960
+ UpCloudLabel: {
1961
+ key: "String",
1962
+ value: "String"
1963
+ },
1964
+ UpCloudServer: {
1965
+ uuid: "String",
1966
+ title: "String",
1967
+ hostname: "String",
1968
+ plan: "String",
1969
+ zone: "String",
1970
+ state: "String",
1971
+ publicIp: "String",
1972
+ labels: "UpCloudLabel"
1973
+ },
1974
+ UpCloudOperation: {
1975
+ uuid: "String",
1976
+ status: "String",
1977
+ message: "String"
1978
+ },
1867
1979
  AdminRunPodAccount: {
1868
1980
  balance: "Float",
1869
1981
  spendPerHr: "Float",
@@ -1926,6 +2038,82 @@ export const ReturnTypes = {
1926
2038
  createdAt: "DateTime",
1927
2039
  updatedAt: "DateTime"
1928
2040
  },
2041
+ AdminColdStartProfile: {
2042
+ id: "String",
2043
+ name: "String",
2044
+ description: "String",
2045
+ provider: "GpuProvider",
2046
+ targetUserModelSlug: "String",
2047
+ servedModelName: "String",
2048
+ hfModel: "String",
2049
+ gpuNames: "String",
2050
+ minGpus: "Int",
2051
+ minVramGb: "Int",
2052
+ maxPricePerHour: "Float",
2053
+ maxPricePerHourCurrency: "String",
2054
+ minReliability: "Float",
2055
+ verifiedOnly: "Boolean",
2056
+ datacenterOnly: "Boolean",
2057
+ geolocations: "String",
2058
+ dockerImage: "String",
2059
+ startCommand: "String",
2060
+ diskGb: "Int",
2061
+ exposedPorts: "String",
2062
+ useVolume: "Boolean",
2063
+ volumeSizeGb: "Int",
2064
+ volumeMountPath: "String",
2065
+ reuseExistingVolume: "Boolean",
2066
+ lastVolumeMachineId: "String",
2067
+ lastVolumeName: "String",
2068
+ pollIntervalSec: "Int",
2069
+ readyTimeoutSec: "Int",
2070
+ healthProbePath: "String",
2071
+ maxRuntimeHours: "Int",
2072
+ autoDestroyOnFailure: "Boolean",
2073
+ autoStartOnRequest: "Boolean",
2074
+ enabled: "Boolean",
2075
+ createdAt: "DateTime",
2076
+ updatedAt: "DateTime"
2077
+ },
2078
+ ColdStartRun: {
2079
+ id: "String",
2080
+ profileId: "String",
2081
+ userModelId: "String",
2082
+ status: "ColdStartRunStatus",
2083
+ provider: "GpuProvider",
2084
+ offerId: "String",
2085
+ machineId: "String",
2086
+ instanceId: "String",
2087
+ publicIp: "String",
2088
+ hostPort: "Int",
2089
+ gpuName: "String",
2090
+ numGpus: "Int",
2091
+ pricePerHourUsd: "Float",
2092
+ volumeId: "String",
2093
+ discoveredUrl: "String",
2094
+ servedModelName: "String",
2095
+ previousCustomBaseUrl: "String",
2096
+ previousBaseModel: "String",
2097
+ volumeName: "String",
2098
+ error: "String",
2099
+ onstartScript: "String",
2100
+ attemptedOfferIds: "String",
2101
+ needsManualAction: "Boolean",
2102
+ startedAt: "DateTime",
2103
+ readyAt: "DateTime",
2104
+ finishedAt: "DateTime",
2105
+ createdAt: "DateTime",
2106
+ updatedAt: "DateTime"
2107
+ },
2108
+ StartColdStartResult: {
2109
+ run: "ColdStartRun",
2110
+ created: "Boolean"
2111
+ },
2112
+ ReconcileColdStartRunsResult: {
2113
+ resumed: "Int",
2114
+ failed: "Int",
2115
+ swept: "Int"
2116
+ },
1929
2117
  OpenRouterModelProvider: {
1930
2118
  name: "String",
1931
2119
  label: "String"