pareta 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -174,7 +174,7 @@ function parseSSE(reader, opts) {
174
174
  }
175
175
 
176
176
  // src/version.ts
177
- var VERSION = "1.0.0";
177
+ var VERSION = "1.1.0";
178
178
 
179
179
  // src/money.ts
180
180
  var MICRO_PER_CENT = 10000n;
@@ -445,6 +445,47 @@ var EvalRun = class extends BaseModel {
445
445
  return (this.raw.results ?? []).map((r) => new EvalResult(r));
446
446
  }
447
447
  };
448
+ var RerankResult = class extends BaseModel {
449
+ /** Position of this document in YOUR request's documents array. */
450
+ get index() {
451
+ return Number(this.raw.index ?? -1);
452
+ }
453
+ /** Calibrated P(relevant) in (0, 1) — thresholdable, not just ordinal. */
454
+ get relevanceScore() {
455
+ return Number(this.raw.relevance_score ?? 0);
456
+ }
457
+ };
458
+ var Rerank = class extends BaseModel {
459
+ get results() {
460
+ return (this.raw.results ?? []).map((r) => new RerankResult(r));
461
+ }
462
+ get model() {
463
+ return this.raw.model ?? null;
464
+ }
465
+ get pairs() {
466
+ return this.raw.pairs ?? null;
467
+ }
468
+ /** Map the ranked indices back onto the documents you sent — best first. */
469
+ topDocuments(documents) {
470
+ return this.results.filter((r) => r.index >= 0 && r.index < documents.length).map((r) => documents[r.index]);
471
+ }
472
+ };
473
+ var Embeddings = class extends BaseModel {
474
+ get vectors() {
475
+ const rows = [...this.raw.data ?? []];
476
+ rows.sort((a, b) => Number(a.index ?? 0) - Number(b.index ?? 0));
477
+ return rows.map((r) => r.embedding ?? []);
478
+ }
479
+ get model() {
480
+ return this.raw.model ?? null;
481
+ }
482
+ get promptTokens() {
483
+ return this.raw.usage?.prompt_tokens ?? null;
484
+ }
485
+ get length() {
486
+ return (this.raw.data ?? []).length;
487
+ }
488
+ };
448
489
 
449
490
  // src/resources/chat.ts
450
491
  var PATH = "/v1/chat/completions";
@@ -747,6 +788,39 @@ var Auto = class {
747
788
  }
748
789
  };
749
790
 
791
+ // src/resources/retrieval.ts
792
+ function makeRerank(client) {
793
+ return (query, documents, opts = {}) => {
794
+ if (!query || !query.trim()) throw new ParetaError("query is required");
795
+ if (!Array.isArray(documents) || documents.length === 0) {
796
+ throw new ParetaError("documents must be a non-empty array of strings");
797
+ }
798
+ const body = { query, documents };
799
+ if (opts.topN !== void 0) body.top_n = opts.topN;
800
+ return client.request("POST", "/v1/rerank", {
801
+ body,
802
+ cast: (raw) => new Rerank(raw)
803
+ });
804
+ };
805
+ }
806
+ function makeEmbeddings(client) {
807
+ return (input, opts = {}) => {
808
+ const texts = typeof input === "string" ? [input] : input;
809
+ if (!Array.isArray(texts) || texts.length === 0 || texts.some((t) => typeof t !== "string" || !t.trim())) {
810
+ throw new ParetaError("input must be a non-empty string or array of non-empty strings");
811
+ }
812
+ if (opts.inputType !== void 0 && opts.inputType !== "query" && opts.inputType !== "document") {
813
+ throw new ParetaError('inputType must be "query" or "document"');
814
+ }
815
+ const body = { input: texts };
816
+ if (opts.inputType !== void 0) body.input_type = opts.inputType;
817
+ return client.request("POST", "/v1/embeddings", {
818
+ body,
819
+ cast: (raw) => new Embeddings(raw)
820
+ });
821
+ };
822
+ }
823
+
750
824
  // src/client.ts
751
825
  var DEFAULT_BASE_URL = "https://api.pareta.ai";
752
826
  function randomKey() {
@@ -774,6 +848,10 @@ var Pareta = class _Pareta {
774
848
  tasks;
775
849
  evals;
776
850
  auto;
851
+ /** Document reranking (the Retrieval precision lane) — `pa.rerank(query, docs, {topN})`. */
852
+ rerank;
853
+ /** Text embeddings (the Retrieval recall lane) — `pa.embeddings(input, {inputType})`. */
854
+ embeddings;
777
855
  constructor(options = {}) {
778
856
  if (!options.apiKey) {
779
857
  throw new ParetaError(
@@ -794,6 +872,8 @@ var Pareta = class _Pareta {
794
872
  this.tasks = new Tasks(this);
795
873
  this.evals = new Evals(this);
796
874
  this.auto = new Auto(this);
875
+ this.rerank = makeRerank(this);
876
+ this.embeddings = makeEmbeddings(this);
797
877
  }
798
878
  /** Build from PARETA_API_KEY (+ optional PARETA_BASE_URL); explicit opts win. */
799
879
  static fromEnv(options = {}) {
@@ -984,6 +1064,7 @@ exports.ChatCompletion = ChatCompletion;
984
1064
  exports.ChatCompletionChunk = ChatCompletionChunk;
985
1065
  exports.Choice = Choice;
986
1066
  exports.ConflictError = ConflictError;
1067
+ exports.Embeddings = Embeddings;
987
1068
  exports.EndpointNotReadyError = EndpointNotReadyError;
988
1069
  exports.EvalItemResult = EvalItemResult;
989
1070
  exports.EvalResult = EvalResult;
@@ -1001,6 +1082,8 @@ exports.Pareta = Pareta;
1001
1082
  exports.ParetaError = ParetaError;
1002
1083
  exports.PermissionDeniedError = PermissionDeniedError;
1003
1084
  exports.RateLimitError = RateLimitError;
1085
+ exports.Rerank = Rerank;
1086
+ exports.RerankResult = RerankResult;
1004
1087
  exports.Task = Task;
1005
1088
  exports.TaskMatch = TaskMatch;
1006
1089
  exports.TaskMatchCandidate = TaskMatchCandidate;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/streaming.ts","../src/version.ts","../src/money.ts","../src/models.ts","../src/resources/chat.ts","../src/resources/models.ts","../src/resources/tasks.ts","../src/resources/evals.ts","../src/resources/auto.ts","../src/client.ts"],"names":["PATH","BASE","mime"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Typed error hierarchy for the Pareta SDK — a faithful port of the Python\n * `_exceptions.py`. The backend is FastAPI, so error bodies are\n * `{\"detail\": \"<message>\"}` with a standard HTTP status. We map status → a\n * specific class so callers can `catch (e) { if (e instanceof\n * InsufficientCreditsError) … }` instead of sniffing status codes.\n *\n * Status → exception mapping:\n * 400 → BadRequestError\n * 401 → AuthenticationError (\"invalid API key\")\n * 402 → InsufficientCreditsError (\"organization is out of credit…\")\n * 403 → PermissionDeniedError\n * 404 → NotFoundError\n * 409 → ConflictError (resource conflict / not servable)\n * 422 → BadRequestError (FastAPI validation; `detail` is an array)\n * 429 → RateLimitError\n * 503 → EndpointNotReadyError (stopped / cold / provider down)\n * other 5xx → APIStatusError\n */\n\n/** A single FastAPI validation error item (422 `detail` is an array of these). */\nexport interface ValidationErrorItem {\n loc?: (string | number)[];\n msg?: string;\n type?: string;\n}\n\n/** For 422 the server's `detail` is an ARRAY; for every other status a string. */\nexport type ErrorDetail = string | ValidationErrorItem[] | null | undefined;\n\n/** Base class for every error raised by the SDK. */\nexport class ParetaError extends Error {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message);\n this.name = \"ParetaError\";\n // Preserve the underlying cause (network error, abort, …) when given.\n if (options && options.cause !== undefined) (this as { cause?: unknown }).cause = options.cause;\n // Restore the prototype chain so `instanceof` works after transpilation.\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** The request never reached the server (DNS, TCP, TLS, network). */\nexport class APIConnectionError extends ParetaError {\n constructor(message = \"connection error\", options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"APIConnectionError\";\n }\n}\n\n/** The request timed out before a response was received. */\nexport class APITimeoutError extends APIConnectionError {\n constructor(message = \"request timed out\", options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"APITimeoutError\";\n }\n}\n\nexport interface APIStatusErrorInit {\n status: number;\n detail?: ErrorDetail;\n requestId?: string | null;\n response?: Response;\n}\n\n/** The server returned a non-2xx status. */\nexport class APIStatusError extends ParetaError {\n /** The HTTP status code. */\n readonly status: number;\n /** The server's `detail` (string, or an array of validation items for 422). */\n readonly detail: ErrorDetail;\n /** Value of the `x-request-id` response header, if present. */\n readonly requestId: string | null;\n /** The underlying `Response` (for advanced use). */\n readonly response?: Response;\n\n constructor(message: string, init: APIStatusErrorInit) {\n super(message);\n this.name = \"APIStatusError\";\n this.status = init.status;\n this.detail = init.detail;\n this.requestId = init.requestId ?? null;\n this.response = init.response;\n }\n}\n\nexport class BadRequestError extends APIStatusError {\n constructor(message: string, init: APIStatusErrorInit) {\n super(message, init);\n this.name = \"BadRequestError\";\n }\n}\nexport class AuthenticationError extends APIStatusError {\n constructor(message: string, init: APIStatusErrorInit) {\n super(message, init);\n this.name = \"AuthenticationError\";\n }\n}\nexport class PermissionDeniedError extends APIStatusError {\n constructor(message: string, init: APIStatusErrorInit) {\n super(message, init);\n this.name = \"PermissionDeniedError\";\n }\n}\nexport class NotFoundError extends APIStatusError {\n constructor(message: string, init: APIStatusErrorInit) {\n super(message, init);\n this.name = \"NotFoundError\";\n }\n}\nexport class ConflictError extends APIStatusError {\n constructor(message: string, init: APIStatusErrorInit) {\n super(message, init);\n this.name = \"ConflictError\";\n }\n}\n/** The org is out of credit. Top up in the dashboard (billing is browser-only). */\nexport class InsufficientCreditsError extends APIStatusError {\n constructor(message: string, init: APIStatusErrorInit) {\n super(message, init);\n this.name = \"InsufficientCreditsError\";\n }\n}\nexport class RateLimitError extends APIStatusError {\n constructor(message: string, init: APIStatusErrorInit) {\n super(message, init);\n this.name = \"RateLimitError\";\n }\n}\n/** The target endpoint isn't serving yet (stopped, cold-starting, or provider down). */\nexport class EndpointNotReadyError extends APIStatusError {\n constructor(message: string, init: APIStatusErrorInit) {\n super(message, init);\n this.name = \"EndpointNotReadyError\";\n }\n}\n\ntype StatusErrorCtor = new (message: string, init: APIStatusErrorInit) => APIStatusError;\n\nconst STATUS_MAP: Record<number, StatusErrorCtor> = {\n 400: BadRequestError,\n 401: AuthenticationError,\n 402: InsufficientCreditsError,\n 403: PermissionDeniedError,\n 404: NotFoundError,\n 409: ConflictError,\n 422: BadRequestError,\n 429: RateLimitError,\n 503: EndpointNotReadyError,\n};\n\n/** Construct the most specific `APIStatusError` subclass for a status code. */\nexport function errorFromResponse(\n status: number,\n opts: { detail?: ErrorDetail; requestId?: string | null; response?: Response },\n): APIStatusError {\n const { detail, requestId, response } = opts;\n // Message = `detail` only when it's a non-empty STRING (422's array detail\n // falls through to \"HTTP 422\"); mirrors error_from_response.\n const message = typeof detail === \"string\" && detail ? detail : `HTTP ${status}`;\n let cls = STATUS_MAP[status];\n if (!cls) cls = status === 429 ? RateLimitError : APIStatusError;\n return new cls(message, { status, detail, requestId, response });\n}\n","/**\n * SSE parsing over a `fetch` `ReadableStream` — port of the Python\n * `_iter_sse_json` (data-only) and `_iter_sse_typed` (named-event) parsers.\n *\n * Two modes behind one `events` flag, NEVER one parser for both:\n * - data-only (chat completions): strip `data:`, skip `:`-comments/blanks,\n * stop on `[DONE]`, JSON-parse, skip unparseable lines.\n * - named-event (progress-style backend streams): track the `event:` line\n * (reset to \"message\" on a blank line) and yield `{event, data}` per event.\n *\n * CRITICAL: the backend's named-event streams (sse-starlette) emit CRLF line\n * endings. A naive `split(\"\\n\")` would silently drop every event. `iterLines` normalizes\n * `\\r\\n` and bare `\\r` → `\\n` before framing (the frontend was bitten by this\n * at commit 862fab6 — `normalizeSSEBuffer`). We parse incrementally (yield as\n * bytes arrive), improving on the Python async client which buffered all lines.\n */\n\nfunction normalize(s: string): string {\n return s.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n}\n\n/** Decode a byte stream and yield complete `\\n`-terminated lines (CRLF-normalized). */\nexport async function* iterLines(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n): AsyncGenerator<string> {\n const decoder = new TextDecoder();\n let buffer = \"\";\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer = normalize(buffer + decoder.decode(value, { stream: true }));\n let idx: number;\n while ((idx = buffer.indexOf(\"\\n\")) >= 0) {\n yield buffer.slice(0, idx);\n buffer = buffer.slice(idx + 1);\n }\n }\n // Flush any trailing text the stream ended without a final newline.\n buffer = normalize(buffer + decoder.decode());\n if (buffer.length > 0) {\n for (const line of buffer.split(\"\\n\")) yield line;\n }\n}\n\n/** Data-only SSE: yield each `data:` JSON object (vLLM chat stream). */\nexport async function* parseDataOnly(lines: AsyncIterable<string>): AsyncGenerator<unknown> {\n for await (const rawLine of lines) {\n let line = rawLine.trim();\n if (!line || line.startsWith(\":\")) continue;\n if (line.startsWith(\"data:\")) line = line.slice(\"data:\".length).trim();\n if (!line || line === \"[DONE]\") {\n if (line === \"[DONE]\") return;\n continue;\n }\n try {\n yield JSON.parse(line);\n } catch {\n continue;\n }\n }\n}\n\n/** One named SSE event: the event type + its parsed (or raw-string) data. */\nexport interface SSEEvent {\n event: string;\n data: unknown;\n}\n\n/** Named-event SSE: track `event:` lines, yield `{event, data}`. */\nexport async function* parseNamedEvent(lines: AsyncIterable<string>): AsyncGenerator<SSEEvent> {\n let event = \"message\";\n for await (const rawLine of lines) {\n const line = rawLine.replace(/\\n+$/, \"\");\n if (!line) {\n event = \"message\"; // blank line terminates one event\n continue;\n }\n if (line.startsWith(\":\")) continue;\n if (line.startsWith(\"event:\")) {\n event = line.slice(\"event:\".length).trim();\n } else if (line.startsWith(\"data:\")) {\n const raw = line.slice(\"data:\".length).trim();\n if (raw === \"[DONE]\") return;\n let data: unknown;\n try {\n data = JSON.parse(raw);\n } catch {\n data = raw;\n }\n yield { event, data };\n }\n }\n}\n\n/**\n * Parse an SSE response body. `events=false` → data-only objects; `events=true`\n * → `{event, data}` named events.\n */\nexport function parseSSE(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n opts: { events: true },\n): AsyncGenerator<SSEEvent>;\nexport function parseSSE(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n opts?: { events?: false },\n): AsyncGenerator<unknown>;\nexport function parseSSE(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n opts?: { events?: boolean },\n): AsyncGenerator<unknown> {\n const lines = iterLines(reader);\n return opts?.events ? parseNamedEvent(lines) : parseDataOnly(lines);\n}\n","// Single source of the SDK version (drives the User-Agent). Keep in sync with\n// package.json \"version\" on every release.\nexport const VERSION = \"1.0.0\";\n","/**\n * Money helpers — port of `_dollars_floored_to_cents` (Python `_models.py` §6).\n *\n * JS has no Decimal, so the billed `run.cost` is surfaced as a formatted\n * fixed-2dp dollar STRING (\"1.23\", \"0.00\") computed in integer cents, plus the\n * raw `run.costMicroUsd` integer. We FLOOR to whole cents (never round up) so\n * the SDK never overstates a charge — a 5 µUSD run reads \"0.00\". Flooring is\n * done in integer (BigInt) math, never float dollars, to avoid fp drift.\n *\n * Only `run.cost` floors. Sub-cent unit rates (EvalResult.meanCostMicroUsd)\n * stay raw integers — flooring them to \"$0.00\" would erase the\n * open-vs-frontier savings comparison.\n */\n\nconst MICRO_PER_CENT = 10_000n;\n\n/**\n * Floor micro-USD to whole cents and format as a fixed-2dp dollar string.\n * `dollarsFlooredToCents(5)` → \"0.00\"; `(1_234_500)` → \"1.23\"; `(20_000)` → \"0.02\".\n */\nexport function dollarsFlooredToCents(microUsd: number | bigint | null | undefined): string {\n const micro = typeof microUsd === \"bigint\" ? microUsd : BigInt(Math.trunc(Number(microUsd ?? 0)));\n // BigInt division truncates toward zero; costs are >= 0 so this is a floor.\n const cents = micro / MICRO_PER_CENT;\n const negative = cents < 0n;\n const abs = negative ? -cents : cents;\n const dollars = abs / 100n;\n const remainder = abs % 100n;\n return `${negative ? \"-\" : \"\"}${dollars.toString()}.${remainder.toString().padStart(2, \"0\")}`;\n}\n","/**\n * Response objects — hand-written wrappers over the raw server JSON, a faithful\n * port of the Python `_models.py`. Each keeps the raw payload on `.raw` and\n * exposes it via `.toDict()`, so nothing the API returns is lost behind the\n * typed layer.\n *\n * Alias / D3 boundary (a BACKEND contract, the SDK adds no alias logic):\n * `EvalResult.modelId` and `run.candidateModels` are per-task PUBLIC aliases —\n * real open-weights ids never cross. Frontier (vendor) ids are in the clear.\n */\n\nimport { dollarsFlooredToCents } from \"./money.js\";\n\ntype Raw = Record<string, any>;\n\n/** Base: holds the raw payload, dict-style escape hatches. */\nexport class BaseModel {\n /** The raw server JSON, untouched. */\n readonly raw: Raw;\n constructor(raw?: Raw) {\n this.raw = raw ?? {};\n }\n /** The raw server JSON (alias of `.raw`, mirrors Python `.to_dict()`). */\n toDict(): Raw {\n return this.raw;\n }\n /** Read an arbitrary key off the raw payload. */\n get<T = unknown>(key: string, fallback?: T): T {\n const v = this.raw[key];\n return (v === undefined ? (fallback as T) : (v as T));\n }\n}\n\n// ── inference ──────────────────────────────────────────────────────────\nexport class Usage extends BaseModel {\n get promptTokens(): number | null { return this.raw.prompt_tokens ?? null; }\n get completionTokens(): number | null { return this.raw.completion_tokens ?? null; }\n get totalTokens(): number | null { return this.raw.total_tokens ?? null; }\n}\n\nexport class Message extends BaseModel {\n get role(): string | null { return this.raw.role ?? null; }\n get content(): string | null { return this.raw.content ?? null; }\n}\n\nexport class Choice extends BaseModel {\n get index(): number | null { return this.raw.index ?? null; }\n get finishReason(): string | null { return this.raw.finish_reason ?? null; }\n get message(): Message { return new Message(this.raw.message ?? {}); }\n /** Streaming chunks carry `delta` instead of `message`. */\n get delta(): Message { return new Message(this.raw.delta ?? {}); }\n}\n\nexport class ChatCompletion extends BaseModel {\n get id(): string | null { return this.raw.id ?? null; }\n get model(): string | null { return this.raw.model ?? null; }\n get created(): number | null { return this.raw.created ?? null; }\n get choices(): Choice[] { return (this.raw.choices ?? []).map((c: Raw) => new Choice(c)); }\n get usage(): Usage { return new Usage(this.raw.usage ?? {}); }\n}\n\n/** One SSE delta. `chunk.choices[0].delta.content` is the incremental text. */\nexport class ChatCompletionChunk extends ChatCompletion {}\n\nexport class Model extends BaseModel {\n get id(): string | null { return this.raw.id ?? null; }\n get ownedBy(): string | null { return this.raw.owned_by ?? null; }\n get created(): number | null { return this.raw.created ?? null; }\n}\n\n/** The OpenAI-compatible `/v1/models` list. Exposes `.data` and is iterable. */\nexport class ModelList extends BaseModel implements Iterable<Model> {\n get data(): Model[] { return (this.raw.data ?? []).map((m: Raw) => new Model(m)); }\n get length(): number { return (this.raw.data ?? []).length; }\n [Symbol.iterator](): Iterator<Model> { return this.data[Symbol.iterator](); }\n}\n\n// ── tasks ──────────────────────────────────────────────────────────────\nexport class Task extends BaseModel {\n get id(): string | null { return this.raw.id ?? null; }\n get defaultScorer(): string | null { return this.raw.default_scorer ?? null; }\n get hasBlobInput(): boolean { return Boolean(this.raw.has_blob_input); }\n}\n\n/** GET /v1/tasks → {\"tasks\": [...]}. */\nexport function taskList(raw: unknown): Task[] {\n return (((raw as Raw)?.tasks as Raw[]) ?? []).map((t) => new Task(t));\n}\n\nexport class TaskMatchCandidate extends BaseModel {\n get taskId(): string | null { return this.raw.task_id ?? null; }\n get score(): number | null { return this.raw.score ?? null; }\n get confidence(): string | null { return this.raw.confidence ?? null; }\n}\n\n/** Result of `tasks.match()`: `.matched`, `.chosen` (best or null), `.candidates`. */\nexport class TaskMatch extends BaseModel {\n get query(): string | null { return this.raw.query ?? null; }\n get matched(): boolean { return Boolean(this.raw.matched); }\n get chosen(): TaskMatchCandidate | null {\n return this.raw.chosen ? new TaskMatchCandidate(this.raw.chosen) : null;\n }\n get candidates(): TaskMatchCandidate[] {\n return (this.raw.candidates ?? []).map((c: Raw) => new TaskMatchCandidate(c));\n }\n get ambiguous(): boolean { return Boolean(this.raw.ambiguous); }\n get matcher(): string | null { return this.raw.matcher ?? null; }\n}\n\n// ── evals ──────────────────────────────────────────────────────────────\nexport class EvalSet extends BaseModel {\n get id(): string | null { return this.raw.id ?? null; }\n get taskId(): string | null { return this.raw.task_id ?? null; }\n get name(): string | null { return this.raw.name ?? null; }\n get itemCount(): number | null { return this.raw.item_count ?? null; }\n get scoringStrategy(): string | null { return this.raw.scoring_strategy ?? null; }\n}\n\n/** POST /v1/eval-sets → {\"eval_set\": {...}}. */\nexport function evalSetFromCreate(raw: unknown): EvalSet {\n return new EvalSet((raw as Raw)?.eval_set ?? {});\n}\n/** GET /v1/eval-sets → {\"eval_sets\": [...]}. */\nexport function evalSetList(raw: unknown): EvalSet[] {\n return (((raw as Raw)?.eval_sets as Raw[]) ?? []).map((e) => new EvalSet(e));\n}\n\n/**\n * One scored item inside `EvalResult.perItem`. `prediction` is the model's raw\n * output, truncated server-side — present only on items that reached scoring\n * (not pool/build errors), there to debug a 0.0 `score` without re-running.\n */\nexport class EvalItemResult extends BaseModel {\n get idx(): number | null { return this.raw.idx ?? null; }\n get score(): number | null { return this.raw.score ?? null; }\n get prediction(): string | null { return this.raw.prediction ?? null; }\n get error(): string | null { return this.raw.error ?? null; }\n}\n\n/**\n * One model's aggregate on an eval run. `modelId` is the per-task public alias;\n * `kind` ('open' | 'frontier') is populated by the Slice-4 result schema.\n */\nexport class EvalResult extends BaseModel {\n get modelId(): string | null { return this.raw.model_id ?? null; }\n get kind(): string | null { return this.raw.kind ?? null; }\n get qualityMean(): number | null { return this.raw.quality_mean ?? null; }\n get qualityCiLow(): number | null { return this.raw.quality_ci_low ?? null; }\n get qualityCiHigh(): number | null { return this.raw.quality_ci_high ?? null; }\n // Raw integer — sub-cent unit rate, NOT floored (see money.ts).\n get meanCostMicroUsd(): number | null { return this.raw.mean_cost_micro_usd ?? null; }\n get nSucceeded(): number | null { return this.raw.n_succeeded ?? null; }\n get errorCount(): number | null { return this.raw.error_count ?? null; }\n /** Per-item rows (idx/score/prediction/error); empty when not persisted. */\n get perItem(): EvalItemResult[] {\n return (this.raw.per_item ?? []).map((it: Raw) => new EvalItemResult(it));\n }\n}\n\n/** A vendor frontier model you can evaluate against (from the eval pool). */\nexport class FrontierModel extends BaseModel {\n get id(): string | null { return this.raw.id ?? null; }\n get vendor(): string | null { return this.raw.vendor ?? null; }\n get vision(): boolean { return Boolean(this.raw.vision); }\n /** Only meaningful when a task was given: it has benchmark results on that task. */\n get benchmarked(): boolean { return Boolean(this.raw.benchmarked); }\n}\n\nexport function frontierModels(raw: unknown): FrontierModel[] {\n return (((raw as Raw)?.frontier_models as Raw[]) ?? []).map((m) => new FrontierModel(m));\n}\n\n/**\n * Wraps the GET /v1/eval-runs/{id} envelope `{\"run\": {...}, \"results\": [...]}`.\n * `cost` is the billed total as a floored fixed-2dp dollar string (§6);\n * `costMicroUsd` is the raw integer.\n */\nexport class EvalRun extends BaseModel {\n private get run(): Raw { return this.raw.run ?? {}; }\n get id(): string | null { return this.run.id ?? null; }\n get evalSetId(): string | null { return this.run.eval_set_id ?? null; }\n get status(): string | null { return this.run.status ?? null; }\n get isTerminal(): boolean {\n return this.run.status === \"completed\" || this.run.status === \"failed\";\n }\n get candidateModels(): string[] { return [...(this.run.candidate_model_ids ?? [])]; }\n get errorDetail(): string | null { return this.run.error_detail ?? null; }\n /** Raw billed micro-USD integer. */\n get costMicroUsd(): number { return Number(this.run.total_cost_micro_usd ?? 0); }\n /** Billed total, floored to whole cents, as a fixed-2dp dollar string (\"1.23\"). */\n get cost(): string { return dollarsFlooredToCents(this.run.total_cost_micro_usd); }\n get results(): EvalResult[] {\n return (this.raw.results ?? []).map((r: Raw) => new EvalResult(r));\n }\n}\n","/**\n * `client.chat.completions` — OpenAI-compatible chat completions.\n *\n * `model` is `\"auto\"` — Pareta plans, routes, and verifies each request. The\n * call is metered: a successful completion debits the org's balance; a zero\n * balance raises `InsufficientCreditsError` (402).\n */\n\nimport type { Transport } from \"../client.js\";\nimport { ParetaError } from \"../errors.js\";\nimport { ChatCompletion, ChatCompletionChunk } from \"../models.js\";\n\nconst PATH = \"/v1/chat/completions\";\n\n/** An OpenAI-style chat message. `content` is a string or content-block array. */\nexport interface ChatMessage {\n role: string;\n content: string | Array<Record<string, unknown>>;\n [key: string]: unknown;\n}\n\n/** Params for `chat.completions.create`. Extra OpenAI params pass through. */\nexport interface ChatCompletionCreateParams {\n /** `\"auto\"` — Pareta routes the request to the right model. */\n model: string;\n messages: ChatMessage[];\n stream?: boolean;\n /** temperature, max_tokens, top_p, … — forwarded verbatim. */\n [key: string]: unknown;\n}\n\nfunction buildBody(params: ChatCompletionCreateParams): Record<string, unknown> {\n const { model, messages, stream, ...extra } = params;\n if (!model) throw new ParetaError('model is required (use \"auto\")');\n if (!messages || messages.length === 0) {\n throw new ParetaError(\"messages is required and must be non-empty\");\n }\n const body: Record<string, unknown> = { model, messages, ...extra };\n if (stream) body.stream = true;\n return body;\n}\n\nexport class Completions {\n constructor(private readonly client: Transport) {}\n\n /**\n * Create a chat completion.\n *\n * `stream: false` (default) → `Promise<ChatCompletion>`.\n * `stream: true` → `AsyncIterable<ChatCompletionChunk>`\n * (`chunk.choices[0].delta.content` is the incremental text).\n */\n create(params: ChatCompletionCreateParams & { stream: true }): AsyncIterable<ChatCompletionChunk>;\n create(params: ChatCompletionCreateParams & { stream?: false }): Promise<ChatCompletion>;\n create(\n params: ChatCompletionCreateParams,\n ): Promise<ChatCompletion> | AsyncIterable<ChatCompletionChunk> {\n const body = buildBody(params);\n if (params.stream) {\n return this.client.stream<ChatCompletionChunk>(\"POST\", PATH, {\n body,\n cast: (raw) => new ChatCompletionChunk(raw as Record<string, unknown>),\n });\n }\n return this.client.request<ChatCompletion>(\"POST\", PATH, {\n body,\n cast: (raw) => new ChatCompletion(raw as Record<string, unknown>),\n });\n }\n}\n\nexport class Chat {\n readonly completions: Completions;\n constructor(client: Transport) {\n this.completions = new Completions(client);\n }\n}\n","/**\n * `client.models` — the OpenAI-compatible `/v1/models` list of model ids your\n * org can call. Each `Model.id` is usable as\n * `chat.completions.create({ model })`.\n */\n\nimport type { Transport } from \"../client.js\";\nimport { ModelList } from \"../models.js\";\n\nconst PATH = \"/v1/models\";\n\nexport class Models {\n constructor(private readonly client: Transport) {}\n\n list(): Promise<ModelList> {\n return this.client.request<ModelList>(\"GET\", PATH, {\n cast: (raw) => new ModelList(raw as Record<string, unknown>),\n });\n }\n}\n","/**\n * `client.tasks` — browse the benchmark catalog and match free-text intent to\n * a task (`match` is the discovery surface: it tells you what Pareta can do).\n */\n\nimport type { Transport } from \"../client.js\";\nimport { ParetaError } from \"../errors.js\";\nimport { Task, TaskMatch, taskList } from \"../models.js\";\n\nconst BASE = \"/v1/tasks\";\n\nexport class Tasks {\n constructor(private readonly client: Transport) {}\n\n list(): Promise<Task[]> {\n return this.client.request<Task[]>(\"GET\", BASE, { cast: taskList });\n }\n\n retrieve(taskId: string, opts: { examplesN?: number } = {}): Promise<Task> {\n const params = opts.examplesN !== undefined ? { examples_n: opts.examplesN } : undefined;\n return this.client.request<Task>(\"GET\", `${BASE}/${taskId}`, {\n params,\n cast: (raw) => new Task(raw as Record<string, unknown>),\n });\n }\n\n /** Free-text intent → ranked candidate tasks (the Step-0 backend matcher). */\n match(query: string, opts: { topK?: number } = {}): Promise<TaskMatch> {\n if (!query || !query.trim()) throw new ParetaError(\"query is required\");\n return this.client.request<TaskMatch>(\"POST\", `${BASE}/match`, {\n body: { query, top_k: opts.topK ?? 5 },\n cast: (raw) => new TaskMatch(raw as Record<string, unknown>),\n });\n }\n}\n","/**\n * `client.evals` — eval sets + runs (bring-your-own-data evaluation).\n *\n * const set = await pa.evals.sets.create({ task, items: [...] });\n * await pa.evals.sets.uploadDocument(set.id, file, { idx, fieldName }); // blob tasks\n * const run = await pa.evals.runs.create({ evalSet: set.id, models: [...], wait: true });\n * // or, in one call: runs.create({ task, items, models, wait: true })\n *\n * Runs are metered (the org balance is debited for compute); `run.cost` is the\n * billed total in dollars (floored to cents). `frontier` accepts an explicit\n * list of ids, or the \"all\"/\"benchmarked\"/\"none\" roster keywords (resolved via\n * `frontierModels()`).\n */\n\nimport type { Transport } from \"../client.js\";\nimport { ParetaError } from \"../errors.js\";\nimport {\n EvalRun,\n EvalSet,\n FrontierModel,\n evalSetFromCreate,\n evalSetList,\n frontierModels as castFrontierModels,\n} from \"../models.js\";\n\nconst BASE = \"/v1/eval-sets\";\nconst RUNS = \"/v1/eval-runs\";\nconst FRONTIER = \"/v1/eval/frontier-models\";\nconst INLINE_MAX = 5 * 1024 * 1024; // matches backend _ATTACH_BLOB_INLINE_MAX\n\n/** \"all\" | \"benchmarked\" | \"none\" | an explicit list of frontier ids. */\nexport type FrontierSpec = \"all\" | \"benchmarked\" | \"none\" | string[] | null;\n\n/** A document for `uploadDocument`: a filesystem path (Node), Blob, or bytes. */\nexport type FileInput = string | Blob | ArrayBuffer | Uint8Array;\n\nconst MIME_BY_EXT: Record<string, string> = {\n pdf: \"application/pdf\",\n png: \"image/png\",\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n gif: \"image/gif\",\n webp: \"image/webp\",\n tiff: \"image/tiff\",\n tif: \"image/tiff\",\n bmp: \"image/bmp\",\n txt: \"text/plain\",\n json: \"application/json\",\n jsonl: \"application/jsonl\",\n csv: \"text/csv\",\n};\n\nfunction guessMime(filename: string, override?: string): string {\n if (override) return override;\n const ext = filename.split(\".\").pop()?.toLowerCase();\n return (ext && MIME_BY_EXT[ext]) || \"application/octet-stream\";\n}\n\n/** Normalize any FileInput → a Blob + filename + size (path read is Node-only). */\nasync function toBlob(\n file: FileInput,\n mimeOverride?: string,\n): Promise<{ blob: Blob; filename: string; size: number; mime: string }> {\n if (typeof file === \"string\") {\n // Path → lazy node:fs so the browser/edge bundle stays clean.\n const [{ readFile }, { basename }] = await Promise.all([\n import(\"node:fs/promises\"),\n import(\"node:path\"),\n ]);\n const buf = await readFile(file);\n const filename = basename(file);\n const mime = guessMime(filename, mimeOverride);\n return { blob: new Blob([buf as BlobPart], { type: mime }), filename, size: buf.byteLength, mime };\n }\n if (file instanceof Blob) {\n const mime = mimeOverride || file.type || \"application/octet-stream\";\n const blob = mimeOverride ? new Blob([file], { type: mime }) : file;\n return { blob, filename: \"upload\", size: file.size, mime };\n }\n const bytes = file instanceof Uint8Array ? file : new Uint8Array(file);\n const mime = mimeOverride || \"application/octet-stream\";\n return { blob: new Blob([bytes as BlobPart], { type: mime }), filename: \"upload\", size: bytes.byteLength, mime };\n}\n\nfunction itemsJsonl(\n task: string,\n items: Array<Record<string, unknown>>,\n name?: string,\n): { files: Record<string, { filename: string; content: string; contentType: string }>; data: Record<string, string> } {\n if (!items || items.length === 0) throw new ParetaError(\"items is required and must be non-empty\");\n const jsonl = items.map((it) => JSON.stringify(it)).join(\"\\n\");\n return {\n files: { items: { filename: `items.${task}.jsonl`, content: jsonl, contentType: \"application/jsonl\" } },\n data: { task_id: task, name: name || `sdk eval set (${items.length} items)` },\n };\n}\n\nfunction mergeCandidates(models: string[], frontierIds: string[]): string[] {\n // Order matters: open models first, then frontier ids; no sort/dedupe.\n const cands = [...(models ?? []), ...(frontierIds ?? [])];\n if (cands.length === 0) throw new ParetaError(\"models is required (the open candidates to evaluate)\");\n return cands;\n}\n\nfunction resolveFrontierFromRoster(frontier: string, roster: FrontierModel[]): string[] {\n if (frontier === \"all\") return roster.map((m) => m.id!).filter((x): x is string => x != null);\n if (frontier === \"benchmarked\") {\n return roster.filter((m) => m.benchmarked).map((m) => m.id!).filter((x): x is string => x != null);\n }\n throw new ParetaError(\n `unknown frontier keyword '${frontier}' (use 'all'/'benchmarked'/'none' or a list)`,\n );\n}\n\nconst sleep = (seconds: number): Promise<void> => new Promise((r) => setTimeout(r, seconds * 1000));\n\nexport class EvalSets {\n constructor(private readonly client: Transport) {}\n\n create(params: { task: string; items: Array<Record<string, unknown>>; name?: string }): Promise<EvalSet> {\n const { files, data } = itemsJsonl(params.task, params.items, params.name);\n return this.client.request<EvalSet>(\"POST\", BASE, { files, data, cast: evalSetFromCreate });\n }\n\n list(): Promise<EvalSet[]> {\n return this.client.request<EvalSet[]>(\"GET\", BASE, { cast: evalSetList });\n }\n\n async retrieve(evalSetId: string): Promise<EvalSet> {\n const raw = await this.client.request<Record<string, unknown>>(\"GET\", `${BASE}/${evalSetId}`);\n return new EvalSet(((raw ?? {}).eval_set as Record<string, unknown>) ?? {});\n }\n\n async delete(evalSetId: string): Promise<void> {\n await this.client.request(\"DELETE\", `${BASE}/${evalSetId}`);\n }\n\n /**\n * Attach a binary doc (PDF/image) to one row's blob field. Collapses the\n * 3-call signed-URL flow (or the inline path for small files) into one call.\n * `idx` is the 0-based row, `fieldName` the blob input field.\n */\n async uploadDocument(\n evalSetId: string,\n file: FileInput,\n opts: { idx: number; fieldName: string; mime?: string },\n ): Promise<unknown> {\n const { blob, filename, size, mime } = await toBlob(file, opts.mime);\n if (size < INLINE_MAX) {\n return this.client.request(\"POST\", `${BASE}/${evalSetId}/attach-blob`, {\n files: { file: { filename, content: blob, contentType: mime } },\n data: { idx: String(opts.idx), field_name: opts.fieldName, mime },\n });\n }\n // Large file → signed-URL direct-to-storage (raw PUT to GCS, no Pareta auth).\n const minted = await this.client.request<{ upload_url: string; storage_uri: string }>(\n \"POST\",\n `${BASE}/${evalSetId}/blob-upload-url`,\n { body: { idx: opts.idx, field_name: opts.fieldName, mime, file_size: size } },\n );\n const put = await globalThis.fetch(minted.upload_url, {\n method: \"PUT\",\n body: blob,\n headers: { \"Content-Type\": mime },\n signal: AbortSignal.timeout(600_000),\n });\n if (put.status !== 200 && put.status !== 201) {\n throw new ParetaError(`blob upload PUT failed: ${put.status}`);\n }\n return this.client.request(\"POST\", `${BASE}/${evalSetId}/blob-upload-complete`, {\n body: { idx: opts.idx, field_name: opts.fieldName, storage_uri: minted.storage_uri, mime },\n });\n }\n}\n\nexport interface EvalRunCreateParams {\n evalSet?: string;\n task?: string;\n items?: Array<Record<string, unknown>>;\n models: string[];\n frontier?: FrontierSpec;\n name?: string;\n wait?: boolean;\n pollInterval?: number;\n timeout?: number;\n}\n\nexport class EvalRuns {\n constructor(\n private readonly client: Transport,\n private readonly sets: EvalSets,\n ) {}\n\n private async frontierIds(frontier: FrontierSpec | undefined, evalSet: string | undefined, task?: string): Promise<string[]> {\n if (frontier == null || frontier === \"none\") return [];\n if (Array.isArray(frontier)) return [...frontier];\n if (typeof frontier !== \"string\") {\n throw new TypeError(\"frontier must be null, a list of ids, or 'all'/'benchmarked'/'none'\");\n }\n let resolveTask = task;\n if (!resolveTask && evalSet) resolveTask = (await this.sets.retrieve(evalSet)).taskId ?? undefined;\n if (!resolveTask) throw new ParetaError(\"cannot resolve a frontier keyword without a task\");\n const roster = await this.client.request<FrontierModel[]>(\"GET\", FRONTIER, {\n params: { task: resolveTask },\n cast: castFrontierModels,\n });\n return resolveFrontierFromRoster(frontier, roster);\n }\n\n async create(params: EvalRunCreateParams): Promise<EvalRun> {\n let evalSet = params.evalSet;\n if (evalSet == null) {\n if (!(params.task && params.items)) {\n throw new ParetaError(\"pass evalSet: <id>, or task + items to create one\");\n }\n evalSet = (await this.sets.create({ task: params.task, items: params.items, name: params.name })).id ?? undefined;\n }\n const frontierIds = await this.frontierIds(params.frontier, evalSet, params.task);\n const candidateModelIds = mergeCandidates(params.models, frontierIds);\n const started = await this.client.request<{ run_id: string; status?: string }>(\"POST\", RUNS, {\n body: { eval_set_id: evalSet, candidate_model_ids: candidateModelIds },\n });\n if (params.wait) {\n return this.wait(started.run_id, { pollInterval: params.pollInterval, timeout: params.timeout });\n }\n // Thin stub (not a fetch) — cost reads \"0.00\" until you retrieve().\n return new EvalRun({ run: { id: started.run_id, status: started.status } });\n }\n\n retrieve(runId: string): Promise<EvalRun> {\n return this.client.request<EvalRun>(\"GET\", `${RUNS}/${runId}`, {\n cast: (raw) => new EvalRun(raw as Record<string, unknown>),\n });\n }\n\n async wait(runId: string, opts: { pollInterval?: number; timeout?: number } = {}): Promise<EvalRun> {\n const pollInterval = opts.pollInterval ?? 3;\n const timeout = opts.timeout ?? 900;\n const deadline = Date.now() + timeout * 1000;\n for (;;) {\n const run = await this.retrieve(runId);\n if (run.isTerminal) return run;\n if (Date.now() >= deadline) {\n throw new ParetaError(`eval run ${runId} did not finish within ${Math.round(timeout)}s`);\n }\n await sleep(pollInterval);\n }\n }\n}\n\nexport class Evals {\n readonly sets: EvalSets;\n readonly runs: EvalRuns;\n\n constructor(client: Transport) {\n this.sets = new EvalSets(client);\n this.runs = new EvalRuns(client, this.sets);\n this.client = client;\n }\n private readonly client: Transport;\n\n /**\n * The frontier (vendor) roster you can evaluate against. With `task`, each is\n * annotated `benchmarked` + the roster is vision-filtered for document tasks.\n */\n frontierModels(task?: string): Promise<FrontierModel[]> {\n const params = task ? { task } : undefined;\n return this.client.request<FrontierModel[]>(\"GET\", FRONTIER, { params, cast: castFrontierModels });\n }\n}\n","/**\n * `client.auto` — the routing brain's surrounding surfaces.\n *\n * Calling the brain itself is plain chat with `model: \"auto\"`:\n *\n * client.chat.completions.create({\n * model: \"auto\",\n * messages: [{ role: \"user\", content: \"…\" }],\n * })\n *\n * This resource carries the org-level metrics rollup (requests, success,\n * spend, PROJECTED savings vs frontier) and the metered frontier comparison\n * the Playground uses.\n */\n\nimport type { Transport } from \"../client.js\";\n\nexport interface AutoMetrics {\n requests_30d: number;\n requests_today: number;\n success_rate_30d: number | null;\n billed_micro_usd_30d: number;\n billed_micro_usd_today: number;\n cost_to_serve_micro_usd_30d: number;\n /** PROJECTED (frontier list-priced counterfactual) — labeled so until\n * dual-run calibration lands. */\n savings_vs_frontier_micro_usd_30d: number | null;\n savings_multiple_30d: number | null;\n performance_hourly_7d: Array<{\n hour: string; requests: number; error_rate: number;\n p50_ms: number | null; p95_ms: number | null;\n }>;\n days_30d: Array<{ day: string; n: number; ok: number; success_rate: number }>;\n last_request: {\n created_at: string; status_code: number; duration_ms: number;\n billed_micro_usd: number | null; cost_to_serve_micro_usd: number | null;\n } | null;\n}\n\nexport interface FrontierComparison {\n model: string;\n content: string;\n cost_micro_usd: number;\n latency_ms: number;\n}\n\nexport class Auto {\n constructor(private readonly client: Transport) {}\n\n /** Your org's `model: \"auto\"` traffic, rolled up. Read-only, free. */\n metrics(): Promise<AutoMetrics> {\n return this.client.request<AutoMetrics>(\"GET\", \"/v1/auto/metrics\");\n }\n\n /**\n * One prompt against a frontier vendor for a side-by-side with\n * `model: \"auto\"` — METERED at the vendor's actual token cost (a failed\n * vendor call bills $0). Allowed models: gpt-5.5, gemini-3-5-flash,\n * gemini-3-1-pro, claude-sonnet-4-6.\n */\n compareFrontier(params: {\n model: string;\n messages: Array<{ role: string; content: string }>;\n }): Promise<FrontierComparison> {\n return this.client.request<FrontierComparison>(\n \"POST\", \"/v1/playground/frontier\", { body: params },\n );\n }\n}\n","/**\n * The `Pareta` client — one class (no sync/async split; JS is Promise-only).\n * A faithful port of the Python `_client.py` transport: header construction,\n * the retry policy, error mapping, and the `started`-flag streaming rule.\n */\n\nimport {\n APIConnectionError,\n APITimeoutError,\n APIStatusError,\n ParetaError,\n errorFromResponse,\n type ErrorDetail,\n} from \"./errors.js\";\nimport { parseSSE, type SSEEvent } from \"./streaming.js\";\nimport { VERSION } from \"./version.js\";\nimport { Chat } from \"./resources/chat.js\";\nimport { Models } from \"./resources/models.js\";\nimport { Tasks } from \"./resources/tasks.js\";\nimport { Evals } from \"./resources/evals.js\";\nimport { Auto } from \"./resources/auto.js\";\n\nexport const DEFAULT_BASE_URL = \"https://api.pareta.ai\";\n/** #174: uuid-ish token for Idempotency-Key (crypto.randomUUID when available). */\nfunction randomKey(): string {\n try {\n return (globalThis.crypto as { randomUUID?: () => string })?.randomUUID?.().replace(/-/g, \"\")\n ?? Math.random().toString(36).slice(2) + Date.now().toString(36);\n } catch {\n return Math.random().toString(36).slice(2) + Date.now().toString(36);\n }\n}\n\n// #174: long-doc auto requests legitimately run 60-180s server-side. A 60s\n// timeout made the SDK kill + retry them mid-flight; 600s matches the OpenAI\n// SDK default and the proxy's own upstream client.\nexport const DEFAULT_TIMEOUT_MS = 600_000;\nexport const DEFAULT_MAX_RETRIES = 2;\n\n// 409 here is the transient lock/contention class; Pareta's own stable-4xx 409\n// (resource conflict) just exhausts retries and still raises ConflictError, so\n// callers see the right error either way.\nconst RETRY_STATUSES = new Set([408, 409, 429, 500, 502, 503, 504]);\n\ntype FetchFn = typeof globalThis.fetch;\n\n/** A multipart file part (used by eval-set + blob uploads). */\nexport interface FilePart {\n filename: string;\n content: Blob | ArrayBuffer | ArrayBufferView | string;\n contentType?: string;\n}\n\nexport interface RequestOptions {\n body?: unknown;\n params?: Record<string, unknown> | undefined;\n files?: Record<string, FilePart>;\n data?: Record<string, string>;\n cast?: (raw: unknown) => unknown;\n}\n\nexport interface StreamOptions {\n body?: unknown;\n params?: Record<string, unknown> | undefined;\n cast?: (raw: unknown) => unknown;\n events?: boolean;\n}\n\n/** What resource namespaces depend on (lets them avoid importing the class). */\nexport interface Transport {\n request<T = unknown>(method: string, path: string, opts?: RequestOptions): Promise<T>;\n stream<T = unknown>(method: string, path: string, opts?: StreamOptions): AsyncGenerator<T>;\n}\n\nexport interface ParetaOptions {\n /** `pareta_sk_` secret key. Falls back to PARETA_API_KEY via `fromEnv`. */\n apiKey?: string;\n /** API base URL. Default https://api.pareta.ai (trailing slashes stripped). */\n baseURL?: string;\n /** Overall per-request timeout in ms. Default 60000. */\n timeout?: number;\n /** Max retries for transient failures. Default 2. */\n maxRetries?: number;\n /** Injected fetch implementation (for tests / Node-without-global-fetch). */\n fetch?: FetchFn;\n}\n\nfunction normalizeBaseURL(url: string): string {\n return url.replace(/\\/+$/, \"\");\n}\n\nexport class Pareta implements Transport {\n readonly apiKey: string;\n readonly baseURL: string;\n readonly timeout: number;\n readonly maxRetries: number;\n private readonly fetchImpl: FetchFn;\n\n // Resource namespaces (assigned in the constructor; filled in slice by slice).\n readonly chat: Chat;\n readonly models: Models;\n readonly tasks: Tasks;\n readonly evals: Evals;\n readonly auto: Auto;\n\n constructor(options: ParetaOptions = {}) {\n if (!options.apiKey) {\n throw new ParetaError(\n \"missing API key. Pass apiKey: … or use Pareta.fromEnv() with PARETA_API_KEY \" +\n \"(mint a pareta_sk_ key in the dashboard).\",\n );\n }\n this.apiKey = options.apiKey;\n this.baseURL = normalizeBaseURL(options.baseURL || DEFAULT_BASE_URL);\n this.timeout = options.timeout ?? DEFAULT_TIMEOUT_MS;\n this.maxRetries = Math.max(0, Math.trunc(options.maxRetries ?? DEFAULT_MAX_RETRIES));\n const f = options.fetch ?? globalThis.fetch;\n if (typeof f !== \"function\") {\n throw new ParetaError(\"no fetch implementation found — pass fetch: … (Node < 18 needs a polyfill).\");\n }\n this.fetchImpl = options.fetch ? f : f.bind(globalThis);\n\n // Resources import only the Transport *type* from this module (erased at\n // runtime), so these static imports create no runtime circular dependency.\n this.chat = new Chat(this);\n this.models = new Models(this);\n this.tasks = new Tasks(this);\n this.evals = new Evals(this);\n this.auto = new Auto(this);\n }\n\n /** Build from PARETA_API_KEY (+ optional PARETA_BASE_URL); explicit opts win. */\n static fromEnv(options: ParetaOptions = {}): Pareta {\n const env: Record<string, string | undefined> =\n typeof process !== \"undefined\" && process.env ? process.env : {};\n return new Pareta({\n ...options,\n apiKey: options.apiKey || env.PARETA_API_KEY,\n baseURL: options.baseURL || env.PARETA_BASE_URL,\n });\n }\n\n // ── header / url / retry helpers ─────────────────────────────────────\n private headers(opts: { stream?: boolean; jsonBody?: boolean }): Record<string, string> {\n const h: Record<string, string> = {\n Authorization: `Bearer ${this.apiKey}`,\n Accept: opts.stream ? \"text/event-stream\" : \"application/json\",\n \"User-Agent\": `pareta-typescript/${VERSION}`,\n };\n // Multipart sets its own Content-Type (with boundary) — never set JSON there.\n if (opts.jsonBody) h[\"Content-Type\"] = \"application/json\";\n return h;\n }\n\n private shouldRetry(status: number): boolean {\n return RETRY_STATUSES.has(status);\n }\n\n /** Seconds to wait before retry `attempt` (0-indexed). Overridable in tests. */\n protected _backoff(attempt: number, retryAfter: number | null): number {\n if (retryAfter !== null && retryAfter >= 0) return Math.min(retryAfter, 30);\n return Math.min(0.5 * 2 ** attempt, 8) + Math.random() * 0.25;\n }\n\n /** Sleep `seconds`. Overridable in tests to skip real waits. */\n protected _sleep(seconds: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n private retryAfterSeconds(res: Response): number | null {\n const val = res.headers.get(\"retry-after\");\n if (!val) return null;\n const n = Number.parseFloat(val);\n return Number.isNaN(n) ? null : n;\n }\n\n private buildURL(path: string, params?: Record<string, unknown>): string {\n let url = `${this.baseURL}${path}`;\n if (params) {\n const qs = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v !== undefined && v !== null) qs.append(k, String(v));\n }\n const s = qs.toString();\n if (s) url += `?${s}`;\n }\n return url;\n }\n\n private buildFormData(files?: Record<string, FilePart>, data?: Record<string, string>): FormData {\n const fd = new FormData();\n if (data) for (const [k, v] of Object.entries(data)) fd.append(k, v);\n if (files) {\n for (const [k, f] of Object.entries(files)) {\n const blob =\n f.content instanceof Blob\n ? f.content\n : new Blob([f.content as BlobPart], f.contentType ? { type: f.contentType } : undefined);\n fd.append(k, blob, f.filename);\n }\n }\n return fd;\n }\n\n private wrapFetchError(e: unknown): APIConnectionError {\n const name = (e as { name?: string })?.name;\n if (name === \"TimeoutError\" || name === \"AbortError\") {\n return new APITimeoutError(undefined, { cause: e });\n }\n const msg = (e as { message?: string })?.message || \"connection error\";\n return new APIConnectionError(msg, { cause: e });\n }\n\n private async parseError(res: Response): Promise<APIStatusError> {\n const requestId = res.headers.get(\"x-request-id\");\n let detail: ErrorDetail;\n try {\n const body = (await res.json()) as unknown;\n detail =\n body && typeof body === \"object\" && !Array.isArray(body)\n ? ((body as Record<string, unknown>).detail as ErrorDetail)\n : (body as ErrorDetail);\n } catch {\n detail = undefined;\n }\n return errorFromResponse(res.status, { detail, requestId, response: res });\n }\n\n // ── transport ────────────────────────────────────────────────────────\n async request<T = unknown>(method: string, path: string, opts: RequestOptions = {}): Promise<T> {\n const { body, params, files, data, cast } = opts;\n const url = this.buildURL(path, params);\n const isMultipart = files != null || data != null;\n const headers = this.headers({ jsonBody: body != null && !isMultipart });\n // #174: ONE idempotency key per logical call, resent verbatim on every\n // auto-retry — the server collapses all attempts onto a single ledger\n // debit (a long-doc request can outlive a client timeout yet complete).\n if (method.toUpperCase() === \"POST\" && !headers[\"Idempotency-Key\"]) {\n headers[\"Idempotency-Key\"] = `pareta-js-${randomKey()}`;\n }\n let payload: BodyInit | undefined;\n if (isMultipart) {\n payload = this.buildFormData(files, data);\n } else if (body != null) {\n payload = JSON.stringify(body);\n }\n\n let lastExc: ParetaError | undefined;\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n let res: Response;\n try {\n res = await this.fetchImpl(url, {\n method,\n headers,\n body: payload,\n signal: AbortSignal.timeout(this.timeout),\n });\n } catch (e) {\n lastExc = this.wrapFetchError(e);\n if (attempt < this.maxRetries) {\n await this._sleep(this._backoff(attempt, null));\n continue;\n }\n break;\n }\n if (res.ok) {\n const text = await res.text();\n const raw = text ? JSON.parse(text) : {};\n return (cast ? cast(raw) : raw) as T;\n }\n if (attempt < this.maxRetries && this.shouldRetry(res.status)) {\n await res.text().catch(() => undefined); // drain before retry\n await this._sleep(this._backoff(attempt, this.retryAfterSeconds(res)));\n continue;\n }\n throw await this.parseError(res);\n }\n throw lastExc as ParetaError;\n }\n\n /**\n * Yield parsed SSE objects. Retries ONLY the initial connect/handshake — once\n * bytes are flowing a mid-stream drop raises (re-issuing would re-run a\n * metered generation). `events:true` → `{event,data}`.\n */\n async *stream<T = unknown>(method: string, path: string, opts: StreamOptions = {}): AsyncGenerator<T> {\n const { body, params, cast, events } = opts;\n const url = this.buildURL(path, params);\n const headers = this.headers({ stream: true, jsonBody: body != null });\n // #174: stable key across handshake retries (see request()).\n if (method.toUpperCase() === \"POST\" && !headers[\"Idempotency-Key\"]) {\n headers[\"Idempotency-Key\"] = `pareta-js-${randomKey()}`;\n }\n const payload = body != null ? JSON.stringify(body) : undefined;\n\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n let started = false; // flips true once a 2xx body is flowing — no safe retry past here\n try {\n const res = await this.fetchImpl(url, {\n method,\n headers,\n body: payload,\n signal: AbortSignal.timeout(this.timeout),\n });\n if (!res.ok) {\n if (attempt < this.maxRetries && this.shouldRetry(res.status)) {\n await res.text().catch(() => undefined);\n await this._sleep(this._backoff(attempt, this.retryAfterSeconds(res)));\n continue;\n }\n throw await this.parseError(res);\n }\n if (!res.body) throw new APIConnectionError(\"response had no body to stream\");\n started = true;\n const reader = res.body.getReader();\n if (events) {\n for await (const ev of parseSSE(reader, { events: true })) {\n yield ev as unknown as T;\n }\n } else {\n for await (const obj of parseSSE(reader)) {\n yield (cast ? cast(obj) : obj) as T;\n }\n }\n return;\n } catch (e) {\n // A deliberate non-2xx (parseError) must propagate, not be wrapped/retried.\n if (e instanceof ParetaError && (e as APIStatusError).status !== undefined) throw e;\n const wrapped = this.wrapFetchError(e);\n // Mid-stream drop ALWAYS throws; only connect/handshake errors retry.\n if (started || attempt >= this.maxRetries) throw wrapped;\n await this._sleep(this._backoff(attempt, null));\n }\n }\n }\n}\n\nexport type { SSEEvent };\n"]}
1
+ {"version":3,"sources":["../src/errors.ts","../src/streaming.ts","../src/version.ts","../src/money.ts","../src/models.ts","../src/resources/chat.ts","../src/resources/models.ts","../src/resources/tasks.ts","../src/resources/evals.ts","../src/resources/auto.ts","../src/resources/retrieval.ts","../src/client.ts"],"names":["PATH","BASE","mime"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * Typed error hierarchy for the Pareta SDK — a faithful port of the Python\n * `_exceptions.py`. The backend is FastAPI, so error bodies are\n * `{\"detail\": \"<message>\"}` with a standard HTTP status. We map status → a\n * specific class so callers can `catch (e) { if (e instanceof\n * InsufficientCreditsError) … }` instead of sniffing status codes.\n *\n * Status → exception mapping:\n * 400 → BadRequestError\n * 401 → AuthenticationError (\"invalid API key\")\n * 402 → InsufficientCreditsError (\"organization is out of credit…\")\n * 403 → PermissionDeniedError\n * 404 → NotFoundError\n * 409 → ConflictError (resource conflict / not servable)\n * 422 → BadRequestError (FastAPI validation; `detail` is an array)\n * 429 → RateLimitError\n * 503 → EndpointNotReadyError (stopped / cold / provider down)\n * other 5xx → APIStatusError\n */\n\n/** A single FastAPI validation error item (422 `detail` is an array of these). */\nexport interface ValidationErrorItem {\n loc?: (string | number)[];\n msg?: string;\n type?: string;\n}\n\n/** For 422 the server's `detail` is an ARRAY; for every other status a string. */\nexport type ErrorDetail = string | ValidationErrorItem[] | null | undefined;\n\n/** Base class for every error raised by the SDK. */\nexport class ParetaError extends Error {\n constructor(message: string, options?: { cause?: unknown }) {\n super(message);\n this.name = \"ParetaError\";\n // Preserve the underlying cause (network error, abort, …) when given.\n if (options && options.cause !== undefined) (this as { cause?: unknown }).cause = options.cause;\n // Restore the prototype chain so `instanceof` works after transpilation.\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n\n/** The request never reached the server (DNS, TCP, TLS, network). */\nexport class APIConnectionError extends ParetaError {\n constructor(message = \"connection error\", options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"APIConnectionError\";\n }\n}\n\n/** The request timed out before a response was received. */\nexport class APITimeoutError extends APIConnectionError {\n constructor(message = \"request timed out\", options?: { cause?: unknown }) {\n super(message, options);\n this.name = \"APITimeoutError\";\n }\n}\n\nexport interface APIStatusErrorInit {\n status: number;\n detail?: ErrorDetail;\n requestId?: string | null;\n response?: Response;\n}\n\n/** The server returned a non-2xx status. */\nexport class APIStatusError extends ParetaError {\n /** The HTTP status code. */\n readonly status: number;\n /** The server's `detail` (string, or an array of validation items for 422). */\n readonly detail: ErrorDetail;\n /** Value of the `x-request-id` response header, if present. */\n readonly requestId: string | null;\n /** The underlying `Response` (for advanced use). */\n readonly response?: Response;\n\n constructor(message: string, init: APIStatusErrorInit) {\n super(message);\n this.name = \"APIStatusError\";\n this.status = init.status;\n this.detail = init.detail;\n this.requestId = init.requestId ?? null;\n this.response = init.response;\n }\n}\n\nexport class BadRequestError extends APIStatusError {\n constructor(message: string, init: APIStatusErrorInit) {\n super(message, init);\n this.name = \"BadRequestError\";\n }\n}\nexport class AuthenticationError extends APIStatusError {\n constructor(message: string, init: APIStatusErrorInit) {\n super(message, init);\n this.name = \"AuthenticationError\";\n }\n}\nexport class PermissionDeniedError extends APIStatusError {\n constructor(message: string, init: APIStatusErrorInit) {\n super(message, init);\n this.name = \"PermissionDeniedError\";\n }\n}\nexport class NotFoundError extends APIStatusError {\n constructor(message: string, init: APIStatusErrorInit) {\n super(message, init);\n this.name = \"NotFoundError\";\n }\n}\nexport class ConflictError extends APIStatusError {\n constructor(message: string, init: APIStatusErrorInit) {\n super(message, init);\n this.name = \"ConflictError\";\n }\n}\n/** The org is out of credit. Top up in the dashboard (billing is browser-only). */\nexport class InsufficientCreditsError extends APIStatusError {\n constructor(message: string, init: APIStatusErrorInit) {\n super(message, init);\n this.name = \"InsufficientCreditsError\";\n }\n}\nexport class RateLimitError extends APIStatusError {\n constructor(message: string, init: APIStatusErrorInit) {\n super(message, init);\n this.name = \"RateLimitError\";\n }\n}\n/** The target endpoint isn't serving yet (stopped, cold-starting, or provider down). */\nexport class EndpointNotReadyError extends APIStatusError {\n constructor(message: string, init: APIStatusErrorInit) {\n super(message, init);\n this.name = \"EndpointNotReadyError\";\n }\n}\n\ntype StatusErrorCtor = new (message: string, init: APIStatusErrorInit) => APIStatusError;\n\nconst STATUS_MAP: Record<number, StatusErrorCtor> = {\n 400: BadRequestError,\n 401: AuthenticationError,\n 402: InsufficientCreditsError,\n 403: PermissionDeniedError,\n 404: NotFoundError,\n 409: ConflictError,\n 422: BadRequestError,\n 429: RateLimitError,\n 503: EndpointNotReadyError,\n};\n\n/** Construct the most specific `APIStatusError` subclass for a status code. */\nexport function errorFromResponse(\n status: number,\n opts: { detail?: ErrorDetail; requestId?: string | null; response?: Response },\n): APIStatusError {\n const { detail, requestId, response } = opts;\n // Message = `detail` only when it's a non-empty STRING (422's array detail\n // falls through to \"HTTP 422\"); mirrors error_from_response.\n const message = typeof detail === \"string\" && detail ? detail : `HTTP ${status}`;\n let cls = STATUS_MAP[status];\n if (!cls) cls = status === 429 ? RateLimitError : APIStatusError;\n return new cls(message, { status, detail, requestId, response });\n}\n","/**\n * SSE parsing over a `fetch` `ReadableStream` — port of the Python\n * `_iter_sse_json` (data-only) and `_iter_sse_typed` (named-event) parsers.\n *\n * Two modes behind one `events` flag, NEVER one parser for both:\n * - data-only (chat completions): strip `data:`, skip `:`-comments/blanks,\n * stop on `[DONE]`, JSON-parse, skip unparseable lines.\n * - named-event (progress-style backend streams): track the `event:` line\n * (reset to \"message\" on a blank line) and yield `{event, data}` per event.\n *\n * CRITICAL: the backend's named-event streams (sse-starlette) emit CRLF line\n * endings. A naive `split(\"\\n\")` would silently drop every event. `iterLines` normalizes\n * `\\r\\n` and bare `\\r` → `\\n` before framing (the frontend was bitten by this\n * at commit 862fab6 — `normalizeSSEBuffer`). We parse incrementally (yield as\n * bytes arrive), improving on the Python async client which buffered all lines.\n */\n\nfunction normalize(s: string): string {\n return s.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n}\n\n/** Decode a byte stream and yield complete `\\n`-terminated lines (CRLF-normalized). */\nexport async function* iterLines(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n): AsyncGenerator<string> {\n const decoder = new TextDecoder();\n let buffer = \"\";\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer = normalize(buffer + decoder.decode(value, { stream: true }));\n let idx: number;\n while ((idx = buffer.indexOf(\"\\n\")) >= 0) {\n yield buffer.slice(0, idx);\n buffer = buffer.slice(idx + 1);\n }\n }\n // Flush any trailing text the stream ended without a final newline.\n buffer = normalize(buffer + decoder.decode());\n if (buffer.length > 0) {\n for (const line of buffer.split(\"\\n\")) yield line;\n }\n}\n\n/** Data-only SSE: yield each `data:` JSON object (vLLM chat stream). */\nexport async function* parseDataOnly(lines: AsyncIterable<string>): AsyncGenerator<unknown> {\n for await (const rawLine of lines) {\n let line = rawLine.trim();\n if (!line || line.startsWith(\":\")) continue;\n if (line.startsWith(\"data:\")) line = line.slice(\"data:\".length).trim();\n if (!line || line === \"[DONE]\") {\n if (line === \"[DONE]\") return;\n continue;\n }\n try {\n yield JSON.parse(line);\n } catch {\n continue;\n }\n }\n}\n\n/** One named SSE event: the event type + its parsed (or raw-string) data. */\nexport interface SSEEvent {\n event: string;\n data: unknown;\n}\n\n/** Named-event SSE: track `event:` lines, yield `{event, data}`. */\nexport async function* parseNamedEvent(lines: AsyncIterable<string>): AsyncGenerator<SSEEvent> {\n let event = \"message\";\n for await (const rawLine of lines) {\n const line = rawLine.replace(/\\n+$/, \"\");\n if (!line) {\n event = \"message\"; // blank line terminates one event\n continue;\n }\n if (line.startsWith(\":\")) continue;\n if (line.startsWith(\"event:\")) {\n event = line.slice(\"event:\".length).trim();\n } else if (line.startsWith(\"data:\")) {\n const raw = line.slice(\"data:\".length).trim();\n if (raw === \"[DONE]\") return;\n let data: unknown;\n try {\n data = JSON.parse(raw);\n } catch {\n data = raw;\n }\n yield { event, data };\n }\n }\n}\n\n/**\n * Parse an SSE response body. `events=false` → data-only objects; `events=true`\n * → `{event, data}` named events.\n */\nexport function parseSSE(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n opts: { events: true },\n): AsyncGenerator<SSEEvent>;\nexport function parseSSE(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n opts?: { events?: false },\n): AsyncGenerator<unknown>;\nexport function parseSSE(\n reader: ReadableStreamDefaultReader<Uint8Array>,\n opts?: { events?: boolean },\n): AsyncGenerator<unknown> {\n const lines = iterLines(reader);\n return opts?.events ? parseNamedEvent(lines) : parseDataOnly(lines);\n}\n","// Single source of the SDK version (drives the User-Agent). Keep in sync with\n// package.json \"version\" on every release.\nexport const VERSION = \"1.1.0\";\n","/**\n * Money helpers — port of `_dollars_floored_to_cents` (Python `_models.py` §6).\n *\n * JS has no Decimal, so the billed `run.cost` is surfaced as a formatted\n * fixed-2dp dollar STRING (\"1.23\", \"0.00\") computed in integer cents, plus the\n * raw `run.costMicroUsd` integer. We FLOOR to whole cents (never round up) so\n * the SDK never overstates a charge — a 5 µUSD run reads \"0.00\". Flooring is\n * done in integer (BigInt) math, never float dollars, to avoid fp drift.\n *\n * Only `run.cost` floors. Sub-cent unit rates (EvalResult.meanCostMicroUsd)\n * stay raw integers — flooring them to \"$0.00\" would erase the\n * open-vs-frontier savings comparison.\n */\n\nconst MICRO_PER_CENT = 10_000n;\n\n/**\n * Floor micro-USD to whole cents and format as a fixed-2dp dollar string.\n * `dollarsFlooredToCents(5)` → \"0.00\"; `(1_234_500)` → \"1.23\"; `(20_000)` → \"0.02\".\n */\nexport function dollarsFlooredToCents(microUsd: number | bigint | null | undefined): string {\n const micro = typeof microUsd === \"bigint\" ? microUsd : BigInt(Math.trunc(Number(microUsd ?? 0)));\n // BigInt division truncates toward zero; costs are >= 0 so this is a floor.\n const cents = micro / MICRO_PER_CENT;\n const negative = cents < 0n;\n const abs = negative ? -cents : cents;\n const dollars = abs / 100n;\n const remainder = abs % 100n;\n return `${negative ? \"-\" : \"\"}${dollars.toString()}.${remainder.toString().padStart(2, \"0\")}`;\n}\n","/**\n * Response objects — hand-written wrappers over the raw server JSON, a faithful\n * port of the Python `_models.py`. Each keeps the raw payload on `.raw` and\n * exposes it via `.toDict()`, so nothing the API returns is lost behind the\n * typed layer.\n *\n * Alias / D3 boundary (a BACKEND contract, the SDK adds no alias logic):\n * `EvalResult.modelId` and `run.candidateModels` are per-task PUBLIC aliases —\n * real open-weights ids never cross. Frontier (vendor) ids are in the clear.\n */\n\nimport { dollarsFlooredToCents } from \"./money.js\";\n\ntype Raw = Record<string, any>;\n\n/** Base: holds the raw payload, dict-style escape hatches. */\nexport class BaseModel {\n /** The raw server JSON, untouched. */\n readonly raw: Raw;\n constructor(raw?: Raw) {\n this.raw = raw ?? {};\n }\n /** The raw server JSON (alias of `.raw`, mirrors Python `.to_dict()`). */\n toDict(): Raw {\n return this.raw;\n }\n /** Read an arbitrary key off the raw payload. */\n get<T = unknown>(key: string, fallback?: T): T {\n const v = this.raw[key];\n return (v === undefined ? (fallback as T) : (v as T));\n }\n}\n\n// ── inference ──────────────────────────────────────────────────────────\nexport class Usage extends BaseModel {\n get promptTokens(): number | null { return this.raw.prompt_tokens ?? null; }\n get completionTokens(): number | null { return this.raw.completion_tokens ?? null; }\n get totalTokens(): number | null { return this.raw.total_tokens ?? null; }\n}\n\nexport class Message extends BaseModel {\n get role(): string | null { return this.raw.role ?? null; }\n get content(): string | null { return this.raw.content ?? null; }\n}\n\nexport class Choice extends BaseModel {\n get index(): number | null { return this.raw.index ?? null; }\n get finishReason(): string | null { return this.raw.finish_reason ?? null; }\n get message(): Message { return new Message(this.raw.message ?? {}); }\n /** Streaming chunks carry `delta` instead of `message`. */\n get delta(): Message { return new Message(this.raw.delta ?? {}); }\n}\n\nexport class ChatCompletion extends BaseModel {\n get id(): string | null { return this.raw.id ?? null; }\n get model(): string | null { return this.raw.model ?? null; }\n get created(): number | null { return this.raw.created ?? null; }\n get choices(): Choice[] { return (this.raw.choices ?? []).map((c: Raw) => new Choice(c)); }\n get usage(): Usage { return new Usage(this.raw.usage ?? {}); }\n}\n\n/** One SSE delta. `chunk.choices[0].delta.content` is the incremental text. */\nexport class ChatCompletionChunk extends ChatCompletion {}\n\nexport class Model extends BaseModel {\n get id(): string | null { return this.raw.id ?? null; }\n get ownedBy(): string | null { return this.raw.owned_by ?? null; }\n get created(): number | null { return this.raw.created ?? null; }\n}\n\n/** The OpenAI-compatible `/v1/models` list. Exposes `.data` and is iterable. */\nexport class ModelList extends BaseModel implements Iterable<Model> {\n get data(): Model[] { return (this.raw.data ?? []).map((m: Raw) => new Model(m)); }\n get length(): number { return (this.raw.data ?? []).length; }\n [Symbol.iterator](): Iterator<Model> { return this.data[Symbol.iterator](); }\n}\n\n// ── tasks ──────────────────────────────────────────────────────────────\nexport class Task extends BaseModel {\n get id(): string | null { return this.raw.id ?? null; }\n get defaultScorer(): string | null { return this.raw.default_scorer ?? null; }\n get hasBlobInput(): boolean { return Boolean(this.raw.has_blob_input); }\n}\n\n/** GET /v1/tasks → {\"tasks\": [...]}. */\nexport function taskList(raw: unknown): Task[] {\n return (((raw as Raw)?.tasks as Raw[]) ?? []).map((t) => new Task(t));\n}\n\nexport class TaskMatchCandidate extends BaseModel {\n get taskId(): string | null { return this.raw.task_id ?? null; }\n get score(): number | null { return this.raw.score ?? null; }\n get confidence(): string | null { return this.raw.confidence ?? null; }\n}\n\n/** Result of `tasks.match()`: `.matched`, `.chosen` (best or null), `.candidates`. */\nexport class TaskMatch extends BaseModel {\n get query(): string | null { return this.raw.query ?? null; }\n get matched(): boolean { return Boolean(this.raw.matched); }\n get chosen(): TaskMatchCandidate | null {\n return this.raw.chosen ? new TaskMatchCandidate(this.raw.chosen) : null;\n }\n get candidates(): TaskMatchCandidate[] {\n return (this.raw.candidates ?? []).map((c: Raw) => new TaskMatchCandidate(c));\n }\n get ambiguous(): boolean { return Boolean(this.raw.ambiguous); }\n get matcher(): string | null { return this.raw.matcher ?? null; }\n}\n\n// ── evals ──────────────────────────────────────────────────────────────\nexport class EvalSet extends BaseModel {\n get id(): string | null { return this.raw.id ?? null; }\n get taskId(): string | null { return this.raw.task_id ?? null; }\n get name(): string | null { return this.raw.name ?? null; }\n get itemCount(): number | null { return this.raw.item_count ?? null; }\n get scoringStrategy(): string | null { return this.raw.scoring_strategy ?? null; }\n}\n\n/** POST /v1/eval-sets → {\"eval_set\": {...}}. */\nexport function evalSetFromCreate(raw: unknown): EvalSet {\n return new EvalSet((raw as Raw)?.eval_set ?? {});\n}\n/** GET /v1/eval-sets → {\"eval_sets\": [...]}. */\nexport function evalSetList(raw: unknown): EvalSet[] {\n return (((raw as Raw)?.eval_sets as Raw[]) ?? []).map((e) => new EvalSet(e));\n}\n\n/**\n * One scored item inside `EvalResult.perItem`. `prediction` is the model's raw\n * output, truncated server-side — present only on items that reached scoring\n * (not pool/build errors), there to debug a 0.0 `score` without re-running.\n */\nexport class EvalItemResult extends BaseModel {\n get idx(): number | null { return this.raw.idx ?? null; }\n get score(): number | null { return this.raw.score ?? null; }\n get prediction(): string | null { return this.raw.prediction ?? null; }\n get error(): string | null { return this.raw.error ?? null; }\n}\n\n/**\n * One model's aggregate on an eval run. `modelId` is the per-task public alias;\n * `kind` ('open' | 'frontier') is populated by the Slice-4 result schema.\n */\nexport class EvalResult extends BaseModel {\n get modelId(): string | null { return this.raw.model_id ?? null; }\n get kind(): string | null { return this.raw.kind ?? null; }\n get qualityMean(): number | null { return this.raw.quality_mean ?? null; }\n get qualityCiLow(): number | null { return this.raw.quality_ci_low ?? null; }\n get qualityCiHigh(): number | null { return this.raw.quality_ci_high ?? null; }\n // Raw integer — sub-cent unit rate, NOT floored (see money.ts).\n get meanCostMicroUsd(): number | null { return this.raw.mean_cost_micro_usd ?? null; }\n get nSucceeded(): number | null { return this.raw.n_succeeded ?? null; }\n get errorCount(): number | null { return this.raw.error_count ?? null; }\n /** Per-item rows (idx/score/prediction/error); empty when not persisted. */\n get perItem(): EvalItemResult[] {\n return (this.raw.per_item ?? []).map((it: Raw) => new EvalItemResult(it));\n }\n}\n\n/** A vendor frontier model you can evaluate against (from the eval pool). */\nexport class FrontierModel extends BaseModel {\n get id(): string | null { return this.raw.id ?? null; }\n get vendor(): string | null { return this.raw.vendor ?? null; }\n get vision(): boolean { return Boolean(this.raw.vision); }\n /** Only meaningful when a task was given: it has benchmark results on that task. */\n get benchmarked(): boolean { return Boolean(this.raw.benchmarked); }\n}\n\nexport function frontierModels(raw: unknown): FrontierModel[] {\n return (((raw as Raw)?.frontier_models as Raw[]) ?? []).map((m) => new FrontierModel(m));\n}\n\n/**\n * Wraps the GET /v1/eval-runs/{id} envelope `{\"run\": {...}, \"results\": [...]}`.\n * `cost` is the billed total as a floored fixed-2dp dollar string (§6);\n * `costMicroUsd` is the raw integer.\n */\nexport class EvalRun extends BaseModel {\n private get run(): Raw { return this.raw.run ?? {}; }\n get id(): string | null { return this.run.id ?? null; }\n get evalSetId(): string | null { return this.run.eval_set_id ?? null; }\n get status(): string | null { return this.run.status ?? null; }\n get isTerminal(): boolean {\n return this.run.status === \"completed\" || this.run.status === \"failed\";\n }\n get candidateModels(): string[] { return [...(this.run.candidate_model_ids ?? [])]; }\n get errorDetail(): string | null { return this.run.error_detail ?? null; }\n /** Raw billed micro-USD integer. */\n get costMicroUsd(): number { return Number(this.run.total_cost_micro_usd ?? 0); }\n /** Billed total, floored to whole cents, as a fixed-2dp dollar string (\"1.23\"). */\n get cost(): string { return dollarsFlooredToCents(this.run.total_cost_micro_usd); }\n get results(): EvalResult[] {\n return (this.raw.results ?? []).map((r: Raw) => new EvalResult(r));\n }\n}\n\n// ── retrieval (rerank + embeddings) ────────────────────────────────────\n\n/** One row of `Rerank.results` — a document's position + calibrated score. */\nexport class RerankResult extends BaseModel {\n /** Position of this document in YOUR request's documents array. */\n get index(): number { return Number(this.raw.index ?? -1); }\n /** Calibrated P(relevant) in (0, 1) — thresholdable, not just ordinal. */\n get relevanceScore(): number { return Number(this.raw.relevance_score ?? 0); }\n}\n\n/** Result of `pa.rerank(...)`: `.results` ordered most-relevant-first;\n * `.pairs` is the number of documents scored (the metered unit). */\nexport class Rerank extends BaseModel {\n get results(): RerankResult[] {\n return (this.raw.results ?? []).map((r: Raw) => new RerankResult(r));\n }\n get model(): string | null { return this.raw.model ?? null; }\n get pairs(): number | null { return this.raw.pairs ?? null; }\n /** Map the ranked indices back onto the documents you sent — best first. */\n topDocuments(documents: string[]): string[] {\n return this.results\n .filter((r) => r.index >= 0 && r.index < documents.length)\n .map((r) => documents[r.index]!);\n }\n}\n\n/** Result of `pa.embeddings(...)`: unit-normalized vectors in input order\n * (cosine similarity is a plain dot product); `.promptTokens` is metered. */\nexport class Embeddings extends BaseModel {\n get vectors(): number[][] {\n const rows = [...((this.raw.data ?? []) as Raw[])];\n rows.sort((a, b) => Number(a.index ?? 0) - Number(b.index ?? 0));\n return rows.map((r) => (r.embedding as number[]) ?? []);\n }\n get model(): string | null { return this.raw.model ?? null; }\n get promptTokens(): number | null { return this.raw.usage?.prompt_tokens ?? null; }\n get length(): number { return ((this.raw.data ?? []) as Raw[]).length; }\n}\n","/**\n * `client.chat.completions` — OpenAI-compatible chat completions.\n *\n * `model` is `\"auto\"` — Pareta plans, routes, and verifies each request. The\n * call is metered: a successful completion debits the org's balance; a zero\n * balance raises `InsufficientCreditsError` (402).\n */\n\nimport type { Transport } from \"../client.js\";\nimport { ParetaError } from \"../errors.js\";\nimport { ChatCompletion, ChatCompletionChunk } from \"../models.js\";\n\nconst PATH = \"/v1/chat/completions\";\n\n/** An OpenAI-style chat message. `content` is a string or content-block array. */\nexport interface ChatMessage {\n role: string;\n content: string | Array<Record<string, unknown>>;\n [key: string]: unknown;\n}\n\n/** Params for `chat.completions.create`. Extra OpenAI params pass through. */\nexport interface ChatCompletionCreateParams {\n /** `\"auto\"` — Pareta routes the request to the right model. */\n model: string;\n messages: ChatMessage[];\n stream?: boolean;\n /** temperature, max_tokens, top_p, … — forwarded verbatim. */\n [key: string]: unknown;\n}\n\nfunction buildBody(params: ChatCompletionCreateParams): Record<string, unknown> {\n const { model, messages, stream, ...extra } = params;\n if (!model) throw new ParetaError('model is required (use \"auto\")');\n if (!messages || messages.length === 0) {\n throw new ParetaError(\"messages is required and must be non-empty\");\n }\n const body: Record<string, unknown> = { model, messages, ...extra };\n if (stream) body.stream = true;\n return body;\n}\n\nexport class Completions {\n constructor(private readonly client: Transport) {}\n\n /**\n * Create a chat completion.\n *\n * `stream: false` (default) → `Promise<ChatCompletion>`.\n * `stream: true` → `AsyncIterable<ChatCompletionChunk>`\n * (`chunk.choices[0].delta.content` is the incremental text).\n */\n create(params: ChatCompletionCreateParams & { stream: true }): AsyncIterable<ChatCompletionChunk>;\n create(params: ChatCompletionCreateParams & { stream?: false }): Promise<ChatCompletion>;\n create(\n params: ChatCompletionCreateParams,\n ): Promise<ChatCompletion> | AsyncIterable<ChatCompletionChunk> {\n const body = buildBody(params);\n if (params.stream) {\n return this.client.stream<ChatCompletionChunk>(\"POST\", PATH, {\n body,\n cast: (raw) => new ChatCompletionChunk(raw as Record<string, unknown>),\n });\n }\n return this.client.request<ChatCompletion>(\"POST\", PATH, {\n body,\n cast: (raw) => new ChatCompletion(raw as Record<string, unknown>),\n });\n }\n}\n\nexport class Chat {\n readonly completions: Completions;\n constructor(client: Transport) {\n this.completions = new Completions(client);\n }\n}\n","/**\n * `client.models` — the OpenAI-compatible `/v1/models` list of model ids your\n * org can call. Each `Model.id` is usable as\n * `chat.completions.create({ model })`.\n */\n\nimport type { Transport } from \"../client.js\";\nimport { ModelList } from \"../models.js\";\n\nconst PATH = \"/v1/models\";\n\nexport class Models {\n constructor(private readonly client: Transport) {}\n\n list(): Promise<ModelList> {\n return this.client.request<ModelList>(\"GET\", PATH, {\n cast: (raw) => new ModelList(raw as Record<string, unknown>),\n });\n }\n}\n","/**\n * `client.tasks` — browse the benchmark catalog and match free-text intent to\n * a task (`match` is the discovery surface: it tells you what Pareta can do).\n */\n\nimport type { Transport } from \"../client.js\";\nimport { ParetaError } from \"../errors.js\";\nimport { Task, TaskMatch, taskList } from \"../models.js\";\n\nconst BASE = \"/v1/tasks\";\n\nexport class Tasks {\n constructor(private readonly client: Transport) {}\n\n list(): Promise<Task[]> {\n return this.client.request<Task[]>(\"GET\", BASE, { cast: taskList });\n }\n\n retrieve(taskId: string, opts: { examplesN?: number } = {}): Promise<Task> {\n const params = opts.examplesN !== undefined ? { examples_n: opts.examplesN } : undefined;\n return this.client.request<Task>(\"GET\", `${BASE}/${taskId}`, {\n params,\n cast: (raw) => new Task(raw as Record<string, unknown>),\n });\n }\n\n /** Free-text intent → ranked candidate tasks (the Step-0 backend matcher). */\n match(query: string, opts: { topK?: number } = {}): Promise<TaskMatch> {\n if (!query || !query.trim()) throw new ParetaError(\"query is required\");\n return this.client.request<TaskMatch>(\"POST\", `${BASE}/match`, {\n body: { query, top_k: opts.topK ?? 5 },\n cast: (raw) => new TaskMatch(raw as Record<string, unknown>),\n });\n }\n}\n","/**\n * `client.evals` — eval sets + runs (bring-your-own-data evaluation).\n *\n * const set = await pa.evals.sets.create({ task, items: [...] });\n * await pa.evals.sets.uploadDocument(set.id, file, { idx, fieldName }); // blob tasks\n * const run = await pa.evals.runs.create({ evalSet: set.id, models: [...], wait: true });\n * // or, in one call: runs.create({ task, items, models, wait: true })\n *\n * Runs are metered (the org balance is debited for compute); `run.cost` is the\n * billed total in dollars (floored to cents). `frontier` accepts an explicit\n * list of ids, or the \"all\"/\"benchmarked\"/\"none\" roster keywords (resolved via\n * `frontierModels()`).\n */\n\nimport type { Transport } from \"../client.js\";\nimport { ParetaError } from \"../errors.js\";\nimport {\n EvalRun,\n EvalSet,\n FrontierModel,\n evalSetFromCreate,\n evalSetList,\n frontierModels as castFrontierModels,\n} from \"../models.js\";\n\nconst BASE = \"/v1/eval-sets\";\nconst RUNS = \"/v1/eval-runs\";\nconst FRONTIER = \"/v1/eval/frontier-models\";\nconst INLINE_MAX = 5 * 1024 * 1024; // matches backend _ATTACH_BLOB_INLINE_MAX\n\n/** \"all\" | \"benchmarked\" | \"none\" | an explicit list of frontier ids. */\nexport type FrontierSpec = \"all\" | \"benchmarked\" | \"none\" | string[] | null;\n\n/** A document for `uploadDocument`: a filesystem path (Node), Blob, or bytes. */\nexport type FileInput = string | Blob | ArrayBuffer | Uint8Array;\n\nconst MIME_BY_EXT: Record<string, string> = {\n pdf: \"application/pdf\",\n png: \"image/png\",\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n gif: \"image/gif\",\n webp: \"image/webp\",\n tiff: \"image/tiff\",\n tif: \"image/tiff\",\n bmp: \"image/bmp\",\n txt: \"text/plain\",\n json: \"application/json\",\n jsonl: \"application/jsonl\",\n csv: \"text/csv\",\n};\n\nfunction guessMime(filename: string, override?: string): string {\n if (override) return override;\n const ext = filename.split(\".\").pop()?.toLowerCase();\n return (ext && MIME_BY_EXT[ext]) || \"application/octet-stream\";\n}\n\n/** Normalize any FileInput → a Blob + filename + size (path read is Node-only). */\nasync function toBlob(\n file: FileInput,\n mimeOverride?: string,\n): Promise<{ blob: Blob; filename: string; size: number; mime: string }> {\n if (typeof file === \"string\") {\n // Path → lazy node:fs so the browser/edge bundle stays clean.\n const [{ readFile }, { basename }] = await Promise.all([\n import(\"node:fs/promises\"),\n import(\"node:path\"),\n ]);\n const buf = await readFile(file);\n const filename = basename(file);\n const mime = guessMime(filename, mimeOverride);\n return { blob: new Blob([buf as BlobPart], { type: mime }), filename, size: buf.byteLength, mime };\n }\n if (file instanceof Blob) {\n const mime = mimeOverride || file.type || \"application/octet-stream\";\n const blob = mimeOverride ? new Blob([file], { type: mime }) : file;\n return { blob, filename: \"upload\", size: file.size, mime };\n }\n const bytes = file instanceof Uint8Array ? file : new Uint8Array(file);\n const mime = mimeOverride || \"application/octet-stream\";\n return { blob: new Blob([bytes as BlobPart], { type: mime }), filename: \"upload\", size: bytes.byteLength, mime };\n}\n\nfunction itemsJsonl(\n task: string,\n items: Array<Record<string, unknown>>,\n name?: string,\n): { files: Record<string, { filename: string; content: string; contentType: string }>; data: Record<string, string> } {\n if (!items || items.length === 0) throw new ParetaError(\"items is required and must be non-empty\");\n const jsonl = items.map((it) => JSON.stringify(it)).join(\"\\n\");\n return {\n files: { items: { filename: `items.${task}.jsonl`, content: jsonl, contentType: \"application/jsonl\" } },\n data: { task_id: task, name: name || `sdk eval set (${items.length} items)` },\n };\n}\n\nfunction mergeCandidates(models: string[], frontierIds: string[]): string[] {\n // Order matters: open models first, then frontier ids; no sort/dedupe.\n const cands = [...(models ?? []), ...(frontierIds ?? [])];\n if (cands.length === 0) throw new ParetaError(\"models is required (the open candidates to evaluate)\");\n return cands;\n}\n\nfunction resolveFrontierFromRoster(frontier: string, roster: FrontierModel[]): string[] {\n if (frontier === \"all\") return roster.map((m) => m.id!).filter((x): x is string => x != null);\n if (frontier === \"benchmarked\") {\n return roster.filter((m) => m.benchmarked).map((m) => m.id!).filter((x): x is string => x != null);\n }\n throw new ParetaError(\n `unknown frontier keyword '${frontier}' (use 'all'/'benchmarked'/'none' or a list)`,\n );\n}\n\nconst sleep = (seconds: number): Promise<void> => new Promise((r) => setTimeout(r, seconds * 1000));\n\nexport class EvalSets {\n constructor(private readonly client: Transport) {}\n\n create(params: { task: string; items: Array<Record<string, unknown>>; name?: string }): Promise<EvalSet> {\n const { files, data } = itemsJsonl(params.task, params.items, params.name);\n return this.client.request<EvalSet>(\"POST\", BASE, { files, data, cast: evalSetFromCreate });\n }\n\n list(): Promise<EvalSet[]> {\n return this.client.request<EvalSet[]>(\"GET\", BASE, { cast: evalSetList });\n }\n\n async retrieve(evalSetId: string): Promise<EvalSet> {\n const raw = await this.client.request<Record<string, unknown>>(\"GET\", `${BASE}/${evalSetId}`);\n return new EvalSet(((raw ?? {}).eval_set as Record<string, unknown>) ?? {});\n }\n\n async delete(evalSetId: string): Promise<void> {\n await this.client.request(\"DELETE\", `${BASE}/${evalSetId}`);\n }\n\n /**\n * Attach a binary doc (PDF/image) to one row's blob field. Collapses the\n * 3-call signed-URL flow (or the inline path for small files) into one call.\n * `idx` is the 0-based row, `fieldName` the blob input field.\n */\n async uploadDocument(\n evalSetId: string,\n file: FileInput,\n opts: { idx: number; fieldName: string; mime?: string },\n ): Promise<unknown> {\n const { blob, filename, size, mime } = await toBlob(file, opts.mime);\n if (size < INLINE_MAX) {\n return this.client.request(\"POST\", `${BASE}/${evalSetId}/attach-blob`, {\n files: { file: { filename, content: blob, contentType: mime } },\n data: { idx: String(opts.idx), field_name: opts.fieldName, mime },\n });\n }\n // Large file → signed-URL direct-to-storage (raw PUT to GCS, no Pareta auth).\n const minted = await this.client.request<{ upload_url: string; storage_uri: string }>(\n \"POST\",\n `${BASE}/${evalSetId}/blob-upload-url`,\n { body: { idx: opts.idx, field_name: opts.fieldName, mime, file_size: size } },\n );\n const put = await globalThis.fetch(minted.upload_url, {\n method: \"PUT\",\n body: blob,\n headers: { \"Content-Type\": mime },\n signal: AbortSignal.timeout(600_000),\n });\n if (put.status !== 200 && put.status !== 201) {\n throw new ParetaError(`blob upload PUT failed: ${put.status}`);\n }\n return this.client.request(\"POST\", `${BASE}/${evalSetId}/blob-upload-complete`, {\n body: { idx: opts.idx, field_name: opts.fieldName, storage_uri: minted.storage_uri, mime },\n });\n }\n}\n\nexport interface EvalRunCreateParams {\n evalSet?: string;\n task?: string;\n items?: Array<Record<string, unknown>>;\n models: string[];\n frontier?: FrontierSpec;\n name?: string;\n wait?: boolean;\n pollInterval?: number;\n timeout?: number;\n}\n\nexport class EvalRuns {\n constructor(\n private readonly client: Transport,\n private readonly sets: EvalSets,\n ) {}\n\n private async frontierIds(frontier: FrontierSpec | undefined, evalSet: string | undefined, task?: string): Promise<string[]> {\n if (frontier == null || frontier === \"none\") return [];\n if (Array.isArray(frontier)) return [...frontier];\n if (typeof frontier !== \"string\") {\n throw new TypeError(\"frontier must be null, a list of ids, or 'all'/'benchmarked'/'none'\");\n }\n let resolveTask = task;\n if (!resolveTask && evalSet) resolveTask = (await this.sets.retrieve(evalSet)).taskId ?? undefined;\n if (!resolveTask) throw new ParetaError(\"cannot resolve a frontier keyword without a task\");\n const roster = await this.client.request<FrontierModel[]>(\"GET\", FRONTIER, {\n params: { task: resolveTask },\n cast: castFrontierModels,\n });\n return resolveFrontierFromRoster(frontier, roster);\n }\n\n async create(params: EvalRunCreateParams): Promise<EvalRun> {\n let evalSet = params.evalSet;\n if (evalSet == null) {\n if (!(params.task && params.items)) {\n throw new ParetaError(\"pass evalSet: <id>, or task + items to create one\");\n }\n evalSet = (await this.sets.create({ task: params.task, items: params.items, name: params.name })).id ?? undefined;\n }\n const frontierIds = await this.frontierIds(params.frontier, evalSet, params.task);\n const candidateModelIds = mergeCandidates(params.models, frontierIds);\n const started = await this.client.request<{ run_id: string; status?: string }>(\"POST\", RUNS, {\n body: { eval_set_id: evalSet, candidate_model_ids: candidateModelIds },\n });\n if (params.wait) {\n return this.wait(started.run_id, { pollInterval: params.pollInterval, timeout: params.timeout });\n }\n // Thin stub (not a fetch) — cost reads \"0.00\" until you retrieve().\n return new EvalRun({ run: { id: started.run_id, status: started.status } });\n }\n\n retrieve(runId: string): Promise<EvalRun> {\n return this.client.request<EvalRun>(\"GET\", `${RUNS}/${runId}`, {\n cast: (raw) => new EvalRun(raw as Record<string, unknown>),\n });\n }\n\n async wait(runId: string, opts: { pollInterval?: number; timeout?: number } = {}): Promise<EvalRun> {\n const pollInterval = opts.pollInterval ?? 3;\n const timeout = opts.timeout ?? 900;\n const deadline = Date.now() + timeout * 1000;\n for (;;) {\n const run = await this.retrieve(runId);\n if (run.isTerminal) return run;\n if (Date.now() >= deadline) {\n throw new ParetaError(`eval run ${runId} did not finish within ${Math.round(timeout)}s`);\n }\n await sleep(pollInterval);\n }\n }\n}\n\nexport class Evals {\n readonly sets: EvalSets;\n readonly runs: EvalRuns;\n\n constructor(client: Transport) {\n this.sets = new EvalSets(client);\n this.runs = new EvalRuns(client, this.sets);\n this.client = client;\n }\n private readonly client: Transport;\n\n /**\n * The frontier (vendor) roster you can evaluate against. With `task`, each is\n * annotated `benchmarked` + the roster is vision-filtered for document tasks.\n */\n frontierModels(task?: string): Promise<FrontierModel[]> {\n const params = task ? { task } : undefined;\n return this.client.request<FrontierModel[]>(\"GET\", FRONTIER, { params, cast: castFrontierModels });\n }\n}\n","/**\n * `client.auto` — the routing brain's surrounding surfaces.\n *\n * Calling the brain itself is plain chat with `model: \"auto\"`:\n *\n * client.chat.completions.create({\n * model: \"auto\",\n * messages: [{ role: \"user\", content: \"…\" }],\n * })\n *\n * This resource carries the org-level metrics rollup (requests, success,\n * spend, PROJECTED savings vs frontier) and the metered frontier comparison\n * the Playground uses.\n */\n\nimport type { Transport } from \"../client.js\";\n\nexport interface AutoMetrics {\n requests_30d: number;\n requests_today: number;\n success_rate_30d: number | null;\n billed_micro_usd_30d: number;\n billed_micro_usd_today: number;\n cost_to_serve_micro_usd_30d: number;\n /** PROJECTED (frontier list-priced counterfactual) — labeled so until\n * dual-run calibration lands. */\n savings_vs_frontier_micro_usd_30d: number | null;\n savings_multiple_30d: number | null;\n performance_hourly_7d: Array<{\n hour: string; requests: number; error_rate: number;\n p50_ms: number | null; p95_ms: number | null;\n }>;\n days_30d: Array<{ day: string; n: number; ok: number; success_rate: number }>;\n last_request: {\n created_at: string; status_code: number; duration_ms: number;\n billed_micro_usd: number | null; cost_to_serve_micro_usd: number | null;\n } | null;\n}\n\nexport interface FrontierComparison {\n model: string;\n content: string;\n cost_micro_usd: number;\n latency_ms: number;\n}\n\nexport class Auto {\n constructor(private readonly client: Transport) {}\n\n /** Your org's `model: \"auto\"` traffic, rolled up. Read-only, free. */\n metrics(): Promise<AutoMetrics> {\n return this.client.request<AutoMetrics>(\"GET\", \"/v1/auto/metrics\");\n }\n\n /**\n * One prompt against a frontier vendor for a side-by-side with\n * `model: \"auto\"` — METERED at the vendor's actual token cost (a failed\n * vendor call bills $0). Allowed models: gpt-5.5, gemini-3-5-flash,\n * gemini-3-1-pro, claude-sonnet-4-6.\n */\n compareFrontier(params: {\n model: string;\n messages: Array<{ role: string; content: string }>;\n }): Promise<FrontierComparison> {\n return this.client.request<FrontierComparison>(\n \"POST\", \"/v1/playground/frontier\", { body: params },\n );\n }\n}\n","/**\n * `pa.rerank(...)` + `pa.embeddings(...)` — the Retrieval capability lanes\n * (the RAG stack: embeddings for recall, reranking for precision).\n *\n * Both are dedicated routes, not `chat.completions`:\n * POST /v1/rerank {query, documents[], top_n?} -> ordered\n * {index, relevance_score} rows (calibrated P(relevant))\n * POST /v1/embeddings {input[], input_type?} -> unit-normalized vectors\n *\n * Rerank is metered per document scored; embeddings per input token. You never\n * pick a serving model — Pareta resolves the lane (`pareta-rerank-1` / `bge-1`),\n * exactly as `model:\"auto\"` does for chat.\n *\n * Exposed as callable client fields (`pa.rerank(...)`) rather than resource\n * objects — call-parity with the Python SDK, and neither lane has sub-methods.\n */\n\nimport type { Transport } from \"../client.js\";\nimport { ParetaError } from \"../errors.js\";\nimport { Embeddings, Rerank } from \"../models.js\";\n\nexport interface RerankOptions {\n /** Truncate the response to the best N (all documents are still scored and metered). */\n topN?: number;\n}\n\nexport type RerankFn = (query: string, documents: string[], opts?: RerankOptions) => Promise<Rerank>;\n\nexport interface EmbeddingsOptions {\n /** `\"query\"` embeds a retrieval QUERY (asymmetric); default embeds documents raw. */\n inputType?: \"query\" | \"document\";\n}\n\nexport type EmbeddingsFn = (input: string | string[], opts?: EmbeddingsOptions) => Promise<Embeddings>;\n\nexport function makeRerank(client: Transport): RerankFn {\n return (query, documents, opts = {}) => {\n if (!query || !query.trim()) throw new ParetaError(\"query is required\");\n if (!Array.isArray(documents) || documents.length === 0) {\n throw new ParetaError(\"documents must be a non-empty array of strings\");\n }\n const body: Record<string, unknown> = { query, documents };\n if (opts.topN !== undefined) body.top_n = opts.topN;\n return client.request<Rerank>(\"POST\", \"/v1/rerank\", {\n body,\n cast: (raw) => new Rerank(raw as Record<string, unknown>),\n });\n };\n}\n\nexport function makeEmbeddings(client: Transport): EmbeddingsFn {\n return (input, opts = {}) => {\n const texts = typeof input === \"string\" ? [input] : input;\n if (!Array.isArray(texts) || texts.length === 0 || texts.some((t) => typeof t !== \"string\" || !t.trim())) {\n throw new ParetaError(\"input must be a non-empty string or array of non-empty strings\");\n }\n if (opts.inputType !== undefined && opts.inputType !== \"query\" && opts.inputType !== \"document\") {\n throw new ParetaError('inputType must be \"query\" or \"document\"');\n }\n const body: Record<string, unknown> = { input: texts };\n if (opts.inputType !== undefined) body.input_type = opts.inputType;\n return client.request<Embeddings>(\"POST\", \"/v1/embeddings\", {\n body,\n cast: (raw) => new Embeddings(raw as Record<string, unknown>),\n });\n };\n}\n","/**\n * The `Pareta` client — one class (no sync/async split; JS is Promise-only).\n * A faithful port of the Python `_client.py` transport: header construction,\n * the retry policy, error mapping, and the `started`-flag streaming rule.\n */\n\nimport {\n APIConnectionError,\n APITimeoutError,\n APIStatusError,\n ParetaError,\n errorFromResponse,\n type ErrorDetail,\n} from \"./errors.js\";\nimport { parseSSE, type SSEEvent } from \"./streaming.js\";\nimport { VERSION } from \"./version.js\";\nimport { Chat } from \"./resources/chat.js\";\nimport { Models } from \"./resources/models.js\";\nimport { Tasks } from \"./resources/tasks.js\";\nimport { Evals } from \"./resources/evals.js\";\nimport { Auto } from \"./resources/auto.js\";\nimport { makeEmbeddings, makeRerank } from \"./resources/retrieval.js\";\nimport type { EmbeddingsFn, RerankFn } from \"./resources/retrieval.js\";\n\nexport const DEFAULT_BASE_URL = \"https://api.pareta.ai\";\n/** #174: uuid-ish token for Idempotency-Key (crypto.randomUUID when available). */\nfunction randomKey(): string {\n try {\n return (globalThis.crypto as { randomUUID?: () => string })?.randomUUID?.().replace(/-/g, \"\")\n ?? Math.random().toString(36).slice(2) + Date.now().toString(36);\n } catch {\n return Math.random().toString(36).slice(2) + Date.now().toString(36);\n }\n}\n\n// #174: long-doc auto requests legitimately run 60-180s server-side. A 60s\n// timeout made the SDK kill + retry them mid-flight; 600s matches the OpenAI\n// SDK default and the proxy's own upstream client.\nexport const DEFAULT_TIMEOUT_MS = 600_000;\nexport const DEFAULT_MAX_RETRIES = 2;\n\n// 409 here is the transient lock/contention class; Pareta's own stable-4xx 409\n// (resource conflict) just exhausts retries and still raises ConflictError, so\n// callers see the right error either way.\nconst RETRY_STATUSES = new Set([408, 409, 429, 500, 502, 503, 504]);\n\ntype FetchFn = typeof globalThis.fetch;\n\n/** A multipart file part (used by eval-set + blob uploads). */\nexport interface FilePart {\n filename: string;\n content: Blob | ArrayBuffer | ArrayBufferView | string;\n contentType?: string;\n}\n\nexport interface RequestOptions {\n body?: unknown;\n params?: Record<string, unknown> | undefined;\n files?: Record<string, FilePart>;\n data?: Record<string, string>;\n cast?: (raw: unknown) => unknown;\n}\n\nexport interface StreamOptions {\n body?: unknown;\n params?: Record<string, unknown> | undefined;\n cast?: (raw: unknown) => unknown;\n events?: boolean;\n}\n\n/** What resource namespaces depend on (lets them avoid importing the class). */\nexport interface Transport {\n request<T = unknown>(method: string, path: string, opts?: RequestOptions): Promise<T>;\n stream<T = unknown>(method: string, path: string, opts?: StreamOptions): AsyncGenerator<T>;\n}\n\nexport interface ParetaOptions {\n /** `pareta_sk_` secret key. Falls back to PARETA_API_KEY via `fromEnv`. */\n apiKey?: string;\n /** API base URL. Default https://api.pareta.ai (trailing slashes stripped). */\n baseURL?: string;\n /** Overall per-request timeout in ms. Default 60000. */\n timeout?: number;\n /** Max retries for transient failures. Default 2. */\n maxRetries?: number;\n /** Injected fetch implementation (for tests / Node-without-global-fetch). */\n fetch?: FetchFn;\n}\n\nfunction normalizeBaseURL(url: string): string {\n return url.replace(/\\/+$/, \"\");\n}\n\nexport class Pareta implements Transport {\n readonly apiKey: string;\n readonly baseURL: string;\n readonly timeout: number;\n readonly maxRetries: number;\n private readonly fetchImpl: FetchFn;\n\n // Resource namespaces (assigned in the constructor; filled in slice by slice).\n readonly chat: Chat;\n readonly models: Models;\n readonly tasks: Tasks;\n readonly evals: Evals;\n readonly auto: Auto;\n /** Document reranking (the Retrieval precision lane) — `pa.rerank(query, docs, {topN})`. */\n readonly rerank: RerankFn;\n /** Text embeddings (the Retrieval recall lane) — `pa.embeddings(input, {inputType})`. */\n readonly embeddings: EmbeddingsFn;\n\n constructor(options: ParetaOptions = {}) {\n if (!options.apiKey) {\n throw new ParetaError(\n \"missing API key. Pass apiKey: … or use Pareta.fromEnv() with PARETA_API_KEY \" +\n \"(mint a pareta_sk_ key in the dashboard).\",\n );\n }\n this.apiKey = options.apiKey;\n this.baseURL = normalizeBaseURL(options.baseURL || DEFAULT_BASE_URL);\n this.timeout = options.timeout ?? DEFAULT_TIMEOUT_MS;\n this.maxRetries = Math.max(0, Math.trunc(options.maxRetries ?? DEFAULT_MAX_RETRIES));\n const f = options.fetch ?? globalThis.fetch;\n if (typeof f !== \"function\") {\n throw new ParetaError(\"no fetch implementation found — pass fetch: … (Node < 18 needs a polyfill).\");\n }\n this.fetchImpl = options.fetch ? f : f.bind(globalThis);\n\n // Resources import only the Transport *type* from this module (erased at\n // runtime), so these static imports create no runtime circular dependency.\n this.chat = new Chat(this);\n this.models = new Models(this);\n this.tasks = new Tasks(this);\n this.evals = new Evals(this);\n this.auto = new Auto(this);\n this.rerank = makeRerank(this);\n this.embeddings = makeEmbeddings(this);\n }\n\n /** Build from PARETA_API_KEY (+ optional PARETA_BASE_URL); explicit opts win. */\n static fromEnv(options: ParetaOptions = {}): Pareta {\n const env: Record<string, string | undefined> =\n typeof process !== \"undefined\" && process.env ? process.env : {};\n return new Pareta({\n ...options,\n apiKey: options.apiKey || env.PARETA_API_KEY,\n baseURL: options.baseURL || env.PARETA_BASE_URL,\n });\n }\n\n // ── header / url / retry helpers ─────────────────────────────────────\n private headers(opts: { stream?: boolean; jsonBody?: boolean }): Record<string, string> {\n const h: Record<string, string> = {\n Authorization: `Bearer ${this.apiKey}`,\n Accept: opts.stream ? \"text/event-stream\" : \"application/json\",\n \"User-Agent\": `pareta-typescript/${VERSION}`,\n };\n // Multipart sets its own Content-Type (with boundary) — never set JSON there.\n if (opts.jsonBody) h[\"Content-Type\"] = \"application/json\";\n return h;\n }\n\n private shouldRetry(status: number): boolean {\n return RETRY_STATUSES.has(status);\n }\n\n /** Seconds to wait before retry `attempt` (0-indexed). Overridable in tests. */\n protected _backoff(attempt: number, retryAfter: number | null): number {\n if (retryAfter !== null && retryAfter >= 0) return Math.min(retryAfter, 30);\n return Math.min(0.5 * 2 ** attempt, 8) + Math.random() * 0.25;\n }\n\n /** Sleep `seconds`. Overridable in tests to skip real waits. */\n protected _sleep(seconds: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, seconds * 1000));\n }\n\n private retryAfterSeconds(res: Response): number | null {\n const val = res.headers.get(\"retry-after\");\n if (!val) return null;\n const n = Number.parseFloat(val);\n return Number.isNaN(n) ? null : n;\n }\n\n private buildURL(path: string, params?: Record<string, unknown>): string {\n let url = `${this.baseURL}${path}`;\n if (params) {\n const qs = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v !== undefined && v !== null) qs.append(k, String(v));\n }\n const s = qs.toString();\n if (s) url += `?${s}`;\n }\n return url;\n }\n\n private buildFormData(files?: Record<string, FilePart>, data?: Record<string, string>): FormData {\n const fd = new FormData();\n if (data) for (const [k, v] of Object.entries(data)) fd.append(k, v);\n if (files) {\n for (const [k, f] of Object.entries(files)) {\n const blob =\n f.content instanceof Blob\n ? f.content\n : new Blob([f.content as BlobPart], f.contentType ? { type: f.contentType } : undefined);\n fd.append(k, blob, f.filename);\n }\n }\n return fd;\n }\n\n private wrapFetchError(e: unknown): APIConnectionError {\n const name = (e as { name?: string })?.name;\n if (name === \"TimeoutError\" || name === \"AbortError\") {\n return new APITimeoutError(undefined, { cause: e });\n }\n const msg = (e as { message?: string })?.message || \"connection error\";\n return new APIConnectionError(msg, { cause: e });\n }\n\n private async parseError(res: Response): Promise<APIStatusError> {\n const requestId = res.headers.get(\"x-request-id\");\n let detail: ErrorDetail;\n try {\n const body = (await res.json()) as unknown;\n detail =\n body && typeof body === \"object\" && !Array.isArray(body)\n ? ((body as Record<string, unknown>).detail as ErrorDetail)\n : (body as ErrorDetail);\n } catch {\n detail = undefined;\n }\n return errorFromResponse(res.status, { detail, requestId, response: res });\n }\n\n // ── transport ────────────────────────────────────────────────────────\n async request<T = unknown>(method: string, path: string, opts: RequestOptions = {}): Promise<T> {\n const { body, params, files, data, cast } = opts;\n const url = this.buildURL(path, params);\n const isMultipart = files != null || data != null;\n const headers = this.headers({ jsonBody: body != null && !isMultipart });\n // #174: ONE idempotency key per logical call, resent verbatim on every\n // auto-retry — the server collapses all attempts onto a single ledger\n // debit (a long-doc request can outlive a client timeout yet complete).\n if (method.toUpperCase() === \"POST\" && !headers[\"Idempotency-Key\"]) {\n headers[\"Idempotency-Key\"] = `pareta-js-${randomKey()}`;\n }\n let payload: BodyInit | undefined;\n if (isMultipart) {\n payload = this.buildFormData(files, data);\n } else if (body != null) {\n payload = JSON.stringify(body);\n }\n\n let lastExc: ParetaError | undefined;\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n let res: Response;\n try {\n res = await this.fetchImpl(url, {\n method,\n headers,\n body: payload,\n signal: AbortSignal.timeout(this.timeout),\n });\n } catch (e) {\n lastExc = this.wrapFetchError(e);\n if (attempt < this.maxRetries) {\n await this._sleep(this._backoff(attempt, null));\n continue;\n }\n break;\n }\n if (res.ok) {\n const text = await res.text();\n const raw = text ? JSON.parse(text) : {};\n return (cast ? cast(raw) : raw) as T;\n }\n if (attempt < this.maxRetries && this.shouldRetry(res.status)) {\n await res.text().catch(() => undefined); // drain before retry\n await this._sleep(this._backoff(attempt, this.retryAfterSeconds(res)));\n continue;\n }\n throw await this.parseError(res);\n }\n throw lastExc as ParetaError;\n }\n\n /**\n * Yield parsed SSE objects. Retries ONLY the initial connect/handshake — once\n * bytes are flowing a mid-stream drop raises (re-issuing would re-run a\n * metered generation). `events:true` → `{event,data}`.\n */\n async *stream<T = unknown>(method: string, path: string, opts: StreamOptions = {}): AsyncGenerator<T> {\n const { body, params, cast, events } = opts;\n const url = this.buildURL(path, params);\n const headers = this.headers({ stream: true, jsonBody: body != null });\n // #174: stable key across handshake retries (see request()).\n if (method.toUpperCase() === \"POST\" && !headers[\"Idempotency-Key\"]) {\n headers[\"Idempotency-Key\"] = `pareta-js-${randomKey()}`;\n }\n const payload = body != null ? JSON.stringify(body) : undefined;\n\n for (let attempt = 0; attempt <= this.maxRetries; attempt++) {\n let started = false; // flips true once a 2xx body is flowing — no safe retry past here\n try {\n const res = await this.fetchImpl(url, {\n method,\n headers,\n body: payload,\n signal: AbortSignal.timeout(this.timeout),\n });\n if (!res.ok) {\n if (attempt < this.maxRetries && this.shouldRetry(res.status)) {\n await res.text().catch(() => undefined);\n await this._sleep(this._backoff(attempt, this.retryAfterSeconds(res)));\n continue;\n }\n throw await this.parseError(res);\n }\n if (!res.body) throw new APIConnectionError(\"response had no body to stream\");\n started = true;\n const reader = res.body.getReader();\n if (events) {\n for await (const ev of parseSSE(reader, { events: true })) {\n yield ev as unknown as T;\n }\n } else {\n for await (const obj of parseSSE(reader)) {\n yield (cast ? cast(obj) : obj) as T;\n }\n }\n return;\n } catch (e) {\n // A deliberate non-2xx (parseError) must propagate, not be wrapped/retried.\n if (e instanceof ParetaError && (e as APIStatusError).status !== undefined) throw e;\n const wrapped = this.wrapFetchError(e);\n // Mid-stream drop ALWAYS throws; only connect/handshake errors retry.\n if (started || attempt >= this.maxRetries) throw wrapped;\n await this._sleep(this._backoff(attempt, null));\n }\n }\n }\n}\n\nexport type { SSEEvent };\n"]}