@posthog/ai 8.16.3 → 8.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/dist/adk/index.cjs +1 -1
- package/dist/adk/index.mjs +1 -1
- package/dist/anthropic/index.cjs +16 -1
- package/dist/anthropic/index.cjs.map +1 -1
- package/dist/anthropic/index.mjs +16 -1
- package/dist/anthropic/index.mjs.map +1 -1
- package/dist/claude-agent-sdk/index.cjs +1 -1
- package/dist/claude-agent-sdk/index.mjs +1 -1
- package/dist/evaluations/index.cjs +2 -0
- package/dist/evaluations/index.cjs.map +1 -1
- package/dist/evaluations/index.d.ts +3 -0
- package/dist/evaluations/index.mjs +2 -0
- package/dist/evaluations/index.mjs.map +1 -1
- package/dist/gemini/index.cjs +1 -1
- package/dist/gemini/index.mjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.mjs +1 -1
- package/dist/langchain/index.cjs +1 -1
- package/dist/langchain/index.mjs +1 -1
- package/dist/langchain/middleware/index.cjs +1 -1
- package/dist/langchain/middleware/index.mjs +1 -1
- package/dist/openai/index.cjs +41 -1
- package/dist/openai/index.cjs.map +1 -1
- package/dist/openai/index.mjs +41 -1
- package/dist/openai/index.mjs.map +1 -1
- package/dist/openai-agents/index.cjs +1 -1
- package/dist/openai-agents/index.mjs +1 -1
- package/dist/vercel/index.cjs +1 -1
- package/dist/vercel/index.mjs +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["#cause","#submission","#errors","#transport","#base","#items","#request","#state","#itemState","#datasets","#dataset","randomUUID","#transport","#base","#request","#host","#secret","#timeout","#retries","#closed","#tail","randomUUID","#completed","#pending","#failed","#transport","#base","#queue","#submission","#receipt","#upload","#finish","#tags"],"sources":["../../src/evaluations/serialization.ts","../../src/evaluations/errors.ts","../../src/evaluations/datasets.ts","../../src/evaluations/declarations.ts","../../src/evaluations/scorers.ts","../../src/evaluations/transport.ts","../../src/evaluations/client.ts"],"sourcesContent":["/** JSON accepted in evaluation payloads. No implicit toJSON or string conversion. */\nexport type JSONValue = null | boolean | number | string | JSONValue[] | { [key: string]: JSONValue }\nexport type JSONObject = { [key: string]: JSONValue }\n/** Large signed-64-bit counts use bigint; safe counts are returned as numbers. */\nexport type EvaluationCount = number | bigint\nexport type WireObject = Record<string, unknown>\n\nexport function object(value: unknown): WireObject {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) throw new TypeError('Expected an object.')\n const proto = Object.getPrototypeOf(value)\n if (proto !== Object.prototype && proto !== null) throw new TypeError('Expected a plain object.')\n return value as WireObject\n}\n\nexport function text(value: unknown): string {\n if (typeof value !== 'string') throw new TypeError('Expected a string.')\n // Reject NUL and lone UTF-16 surrogates instead of silently repairing content.\n for (let i = 0; i < value.length; i++) {\n const c = value.charCodeAt(i)\n if (c === 0) throw new TypeError('Strings cannot contain null characters.')\n if (c >= 0xd800 && c <= 0xdbff) {\n const next = value.charCodeAt(++i)\n if (!(next >= 0xdc00 && next <= 0xdfff)) throw new TypeError('Strings must contain valid Unicode.')\n } else if (c >= 0xdc00 && c <= 0xdfff) throw new TypeError('Strings must contain valid Unicode.')\n }\n return value\n}\nexport function identifier(value: unknown, max = 255): string {\n const result = text(value)\n if (!result || [...result].length > max)\n throw new TypeError(`Expected a nonempty identifier of at most ${max} characters.`)\n return result\n}\nexport function integer(value: unknown, minimum = 1, maximum = Number.MAX_SAFE_INTEGER): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < minimum || value > maximum) {\n throw new TypeError(`Expected a safe integer between ${minimum} and ${maximum}.`)\n }\n return value\n}\nexport function count(value: unknown): EvaluationCount {\n if (typeof value === 'bigint') {\n if (value < 0n || value > 9223372036854775807n)\n throw new TypeError('Count must fit a nonnegative signed 64-bit integer.')\n return value <= BigInt(Number.MAX_SAFE_INTEGER) ? Number(value) : value\n }\n return integer(value, 0)\n}\nexport function boolean(value: unknown): boolean {\n if (typeof value !== 'boolean') throw new TypeError('Expected a boolean.')\n return value\n}\nexport function uuid(value: unknown): string {\n const raw = text(value)\n .replace(/^urn:uuid:/i, '')\n .replace(/^\\{(.*)\\}$/, '$1')\n .replace(/-/g, '')\n if (!/^[0-9a-f]{32}$/i.test(raw)) throw new TypeError('Expected a UUID.')\n return `${raw.slice(0, 8)}-${raw.slice(8, 12)}-${raw.slice(12, 16)}-${raw.slice(16, 20)}-${raw.slice(20)}`.toLowerCase()\n}\nexport function timestamp(value: unknown): string {\n if (value instanceof Date) {\n if (!Number.isFinite(value.getTime())) throw new TypeError('Expected a valid timestamp.')\n return value.toISOString()\n }\n const raw = text(value)\n const match = /^(\\d{4}-\\d{2}-\\d{2})[T ](\\d{2}:\\d{2}:\\d{2})(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})$/.exec(raw)\n if (!match) throw new TypeError('Timestamps must include a timezone.')\n const date = new Date(`${match[1]}T${match[2]}${match[4]}`)\n // Check the calendar component separately: Date.parse accepts February 30.\n const day = new Date(`${match[1]}T00:00:00Z`)\n if (\n !Number.isFinite(date.getTime()) ||\n !Number.isFinite(day.getTime()) ||\n day.toISOString().slice(0, 10) !== match[1] ||\n match[2].startsWith('24:')\n ) {\n throw new TypeError('Expected a valid timestamp.')\n }\n return date.toISOString().replace('.000Z', `${match[3] ?? '.000'}Z`)\n}\n\nexport function json(value: unknown, depth = 1, ancestors = new Set<unknown>()): JSONValue {\n if (value === null || typeof value === 'boolean') return value\n if (typeof value === 'string') return text(value)\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) throw new TypeError('JSON numbers must be finite.')\n return value\n }\n if (typeof value !== 'object') throw new TypeError('Expected JSON values without automatic conversion.')\n if (depth > 32 || ancestors.has(value)) throw new TypeError('JSON must be acyclic and at most 32 containers deep.')\n ancestors.add(value)\n try {\n if (Array.isArray(value)) {\n if (\n Reflect.ownKeys(value).some(\n (key) =>\n key !== 'length' && (typeof key !== 'string' || !/^(0|[1-9]\\d*)$/.test(key) || Number(key) >= value.length)\n )\n )\n throw new TypeError('Unexpected array property.')\n const result: JSONValue[] = []\n for (let i = 0; i < value.length; i++) {\n const d = Object.getOwnPropertyDescriptor(value, String(i))\n if (!d || !('value' in d)) throw new TypeError('Sparse arrays and accessors are not JSON.')\n result.push(json(d.value, depth + 1, ancestors))\n }\n return result\n }\n const source = object(value)\n return Object.fromEntries(\n Reflect.ownKeys(source).map((key) => {\n if (typeof key !== 'string') throw new TypeError('JSON keys must be strings.')\n text(key)\n const d = Object.getOwnPropertyDescriptor(source, key)!\n if (!('value' in d) || !d.enumerable)\n throw new TypeError('JSON objects must contain enumerable data properties.')\n return [key, json(d.value, depth + 1, ancestors)]\n })\n )\n } finally {\n ancestors.delete(value)\n }\n}\nexport function metadata(value: unknown): JSONObject {\n return json(object(value)) as JSONObject\n}\n\n/** Convert losslessly decoded response integers only when JavaScript can retain their value. */\nexport function responseJSON(value: unknown): JSONValue {\n function convert(current: unknown): unknown {\n if (typeof current === 'bigint') {\n const number = Number(current)\n if (!Number.isFinite(number) || BigInt(number) !== current)\n throw new TypeError('Response JSON integer cannot be represented exactly.')\n return number\n }\n if (Array.isArray(current)) return current.map(convert)\n if (current !== null && typeof current === 'object')\n return Object.fromEntries(Object.entries(object(current)).map(([key, v]) => [key, convert(v)]))\n return current\n }\n return json(convert(value))\n}\nexport function responseMetadata(value: unknown): JSONObject {\n object(value)\n return responseJSON(value) as JSONObject\n}\n\n/** Internal codec: bigint is allowed only after validation of designated count fields. */\nexport function encode(value: unknown): string {\n if (typeof value === 'bigint') return value.toString()\n // JSON.stringify's shortest round-trip decimal can differ from the exact integer value.\n if (typeof value === 'number' && Number.isInteger(value)) return BigInt(value).toString()\n if (Array.isArray(value)) return `[${value.map(encode).join(',')}]`\n if (value !== null && typeof value === 'object') {\n return `{${Object.keys(value)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${encode((value as WireObject)[key])}`)\n .join(',')}}`\n }\n const encoded = JSON.stringify(value)\n if (encoded === undefined) throw new TypeError('Cannot encode undefined.')\n return encoded\n}\n\n/** Preserve integer tokens before JSON.parse can round signed-64-bit counters. */\nexport function decode(source: string): unknown {\n JSON.parse(source) // Use the native parser to validate the complete grammar first.\n const tokens = source.match(/\"(?:\\\\[\\s\\S]|[^\"\\\\])*\"|-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?|true|false|null|[{}[\\]:,]/g)!\n let i = 0\n function read(depth: number): unknown {\n if (depth > 256) throw new TypeError('Response JSON nesting is too deep.')\n const token = tokens[i++]\n if (token === '{') {\n const entries: [string, unknown][] = []\n while (tokens[i] !== '}') {\n const key = JSON.parse(tokens[i++]) as string\n i++\n entries.push([key, read(depth + 1)])\n if (tokens[i] !== ',') break\n i++\n }\n i++\n return Object.fromEntries(entries)\n }\n if (token === '[') {\n const values: unknown[] = []\n while (tokens[i] !== ']') {\n values.push(read(depth + 1))\n if (tokens[i] !== ',') break\n i++\n }\n i++\n return values\n }\n if (/^-?\\d+$/.test(token)) {\n const exact = BigInt(token)\n if (exact > BigInt(Number.MAX_SAFE_INTEGER) || exact < BigInt(Number.MIN_SAFE_INTEGER)) return exact\n }\n return JSON.parse(token) as unknown\n }\n return read(0)\n}\nexport function copy<T>(value: T): T {\n return structuredClone(value)\n}\nexport function bytes(value: string): number {\n return new TextEncoder().encode(value).length\n}\nexport function keys(value: object, allowed: readonly string[]): void {\n for (const key of Reflect.ownKeys(value)) {\n if (typeof key !== 'string' || !allowed.includes(key)) throw new TypeError('Unsupported option.')\n const d = Object.getOwnPropertyDescriptor(value, key)!\n if (!('value' in d)) throw new TypeError('Options cannot contain accessors.')\n }\n}\nexport function defined(value: WireObject): WireObject {\n return Object.fromEntries(Object.entries(value).filter(([, v]) => v !== undefined))\n}\nexport function nullable<T>(value: unknown, parse: (v: unknown) => T): T | null {\n return value === null ? null : parse(value)\n}\nexport function tags(value: unknown, limit = 100): string[] {\n if (!Array.isArray(value) || value.length > limit) throw new TypeError(`Expected at most ${limit} tag names.`)\n for (let i = 0; i < value.length; i++) {\n if (!Object.hasOwn(value, i)) throw new TypeError('Tag lists cannot be sparse.')\n }\n return value.map((v) => {\n const s = text(v)\n identifier(s.trim())\n return s\n })\n}\nexport function responseTags(value: unknown): string[] {\n if (!Array.isArray(value)) throw new TypeError('Expected tags.')\n return value.map(text)\n}\nexport function tagParams(value: readonly string[] | undefined, match: 'any' | 'all' = 'any'): WireObject {\n if (match !== 'any' && match !== 'all') throw new TypeError('Unsupported tag matching mode.')\n return defined({\n tags: value === undefined ? undefined : encode(tags(value, 20)),\n tag_match: value !== undefined || match !== 'any' ? match : undefined,\n })\n}\nexport function pageParams(limit: number, offset: number, maximum = 100): WireObject {\n return { limit: integer(limit, 1, maximum), offset: integer(offset, 0) }\n}\nexport function nextOffset(value: unknown, offset: number): number | null {\n if (value === null) return null\n const params = new URL(text(value), 'https://pagination.invalid').searchParams.getAll('offset')\n if (params.length !== 1 || !/^\\d+$/.test(params[0])) throw new TypeError('Invalid page continuation.')\n return integer(Number(params[0]), offset + 1)\n}\nexport interface Page<T> {\n count: EvaluationCount\n results: T[]\n nextOffset: number | null\n}\nexport function page<T>(data: WireObject, parse: (value: WireObject) => T, offset: number): Page<T> {\n if (!Array.isArray(data.results)) throw new TypeError('Expected page results.')\n const results = data.results.map((v) => parse(object(v)))\n const next = nextOffset(data.next, offset)\n if (next !== null && results.length === 0) throw new TypeError('Empty page has a continuation.')\n return { count: count(data.count), results, nextOffset: next }\n}\n","import type { ExperimentOptions } from './client'\nimport { copy, type WireObject } from './serialization'\n\nexport type Persistence = 'not_sent' | 'rejected' | 'unknown'\nexport interface EvaluationErrorFields {\n status?: number\n code?: string\n detail?: unknown\n attr?: string\n errors?: unknown\n response?: WireObject\n /** Retry-After in seconds. */\n retryAfter?: number\n persistence?: Persistence\n submission?: ExperimentOptions\n}\n/** Native cancellation with the prepared creation fields needed for recovery. */\nexport class ExperimentCreationAbortedError extends DOMException {\n declare readonly cause: unknown\n readonly #cause: unknown\n readonly #submission: ExperimentOptions\n constructor(cause: unknown, submission: ExperimentOptions) {\n super('Offline evaluation creation was cancelled.', cause instanceof DOMException ? cause.name : 'AbortError')\n this.#cause = cause\n this.#submission = copy(submission)\n // Node inspects `cause` specially; an own accessor keeps it safe to log across supported versions.\n Object.defineProperty(this, 'cause', { get: () => this.#cause, enumerable: false })\n }\n get submission(): ExperimentOptions {\n return copy(this.#submission)\n }\n}\n/** An operation did not receive a valid acknowledgment. Inspect persistence before recovery. */\nexport class EvaluationAPIError extends Error {\n declare readonly errors: unknown\n readonly status?: number\n readonly code?: string\n readonly detail?: unknown\n readonly attr?: string\n readonly response?: WireObject\n readonly retryAfter?: number\n persistence: Persistence\n readonly #errors?: unknown\n #submission?: ExperimentOptions\n constructor(fields: EvaluationErrorFields = {}) {\n super(\n `Offline evaluation request failed (${fields.status === undefined ? 'no acknowledgment' : `HTTP ${fields.status}`}).`\n )\n this.name = 'EvaluationAPIError'\n this.status = fields.status\n this.code = fields.code\n this.detail = fields.detail === undefined ? undefined : copy(fields.detail)\n this.attr = fields.attr\n this.#errors = fields.errors === undefined ? undefined : copy(fields.errors)\n this.response = fields.response === undefined ? undefined : copy(fields.response)\n this.retryAfter = fields.retryAfter\n this.persistence = fields.persistence ?? 'unknown'\n this.#submission = fields.submission === undefined ? undefined : copy(fields.submission)\n // Logging an Error should not accidentally log evaluation payloads or credentials.\n for (const key of ['detail', 'response']) Object.defineProperty(this, key, { enumerable: false })\n // Node specially inspects array-valued `errors`; an own accessor avoids logging its contents.\n Object.defineProperty(this, 'errors', {\n get: () => (this.#errors === undefined ? undefined : copy(this.#errors)),\n enumerable: false,\n })\n }\n get submission(): ExperimentOptions | undefined {\n return this.#submission === undefined ? undefined : copy(this.#submission)\n }\n}\nexport function parseResponse<T>(data: WireObject, parser: (value: WireObject) => T): T {\n try {\n return parser(data)\n } catch {\n throw new EvaluationAPIError({ code: 'invalid_response', response: data })\n }\n}\n","import { parseResponse } from './errors'\nimport {\n boolean,\n defined,\n encode,\n identifier,\n integer,\n json,\n keys,\n metadata,\n nullable,\n page,\n pageParams,\n responseTags,\n responseJSON,\n responseMetadata,\n tagParams,\n tags,\n text,\n timestamp,\n uuid,\n type JSONObject,\n type JSONValue,\n type Page,\n type WireObject,\n} from './serialization'\nimport { Transport, type RequestOptions } from './transport'\n\ninterface Audit {\n createdAt: string\n createdBy: JSONObject | null\n teamId: number\n}\nexport interface Dataset extends Audit {\n id: string\n name: string\n description: string\n metadata: JSONObject\n tags: string[]\n archived: boolean\n currentRevision: number | null\n currentRevisionId: string | null\n updatedAt: string | null\n}\nexport interface DatasetRevision extends Audit {\n id: string\n datasetId: string\n revision: number\n}\nexport interface DatasetItem extends Audit {\n id: string\n datasetId: string\n clientItemId: string | null\n version: number\n versionId: string\n datasetRevision: number\n datasetRevisionId: string\n archived: boolean\n input: JSONValue\n expectedOutput: JSONValue\n sourceOutput: JSONValue\n metadata: JSONObject\n sourceTraceId: string | null\n sourceEventId: string | null\n sourceTimestamp: string | null\n updatedAt: string | null\n versionCreatedAt: string\n versionCreatedBy: JSONObject | null\n}\nexport type DatasetPage = Page<Dataset>\nexport type DatasetRevisionPage = Page<DatasetRevision>\nexport type DatasetItemPage = Page<DatasetItem>\nexport type DatasetOrder = 'created_at' | '-created_at' | 'updated_at' | '-updated_at'\nexport interface DatasetMetadata {\n name?: string\n description?: string\n metadata?: JSONObject\n tags?: readonly string[]\n}\nexport interface PageOptions extends RequestOptions {\n limit?: number\n offset?: number\n}\nexport interface DatasetListOptions extends PageOptions {\n search?: string\n archived?: boolean\n orderBy?: DatasetOrder\n tags?: readonly string[]\n tagMatch?: 'any' | 'all'\n}\nexport interface ItemListOptions extends PageOptions {\n revision?: number\n archived?: boolean\n}\nexport interface CreateDatasetItemOptions {\n input: Exclude<JSONValue, null>\n expectedOutput?: JSONValue\n sourceOutput?: JSONValue\n metadata?: JSONObject\n clientItemId?: string | null\n sourceTraceId?: string | null\n sourceEventId?: string | null\n sourceTimestamp?: string | Date | null\n}\nexport interface UpdateDatasetItemOptions {\n baseVersion: number\n input?: Exclude<JSONValue, null>\n expectedOutput?: JSONValue\n metadata?: JSONObject\n}\nfunction audit(data: WireObject, project: number): Audit {\n if (integer(data.team_id) !== project) throw new TypeError('Response belongs to another project.')\n return {\n createdAt: timestamp(data.created_at),\n createdBy: nullable(data.created_by, responseMetadata),\n teamId: project,\n }\n}\nfunction dataset(data: WireObject, project: number, id?: string): Dataset {\n const identity = uuid(data.id)\n if (id !== undefined && identity !== id) throw new TypeError('Mismatched dataset.')\n if ((data.current_revision === null) !== (data.current_revision_id === null))\n throw new TypeError('Incomplete revision reference.')\n return {\n ...audit(data, project),\n id: identity,\n name: text(data.name),\n description: text(data.description),\n metadata: responseMetadata(data.metadata),\n tags: responseTags(data.tags === undefined ? [] : data.tags),\n archived: boolean(data.archived),\n currentRevision: nullable(data.current_revision, integer),\n currentRevisionId: nullable(data.current_revision_id, uuid),\n updatedAt: nullable(data.updated_at, timestamp),\n }\n}\nfunction revision(data: WireObject, project: number, datasetId: string): DatasetRevision {\n if (uuid(data.dataset_id) !== datasetId) throw new TypeError('Mismatched revision dataset.')\n return { ...audit(data, project), id: uuid(data.id), datasetId, revision: integer(data.revision) }\n}\nfunction item(\n data: WireObject,\n project: number,\n scope: { id?: string; datasetId?: string; revision?: number; archived?: boolean } = {}\n): DatasetItem {\n const id = uuid(data.id),\n datasetId = uuid(data.dataset),\n introduced = integer(data.dataset_revision),\n archived = boolean(data.archived)\n if (\n (scope.id !== undefined && scope.id !== id) ||\n (scope.datasetId !== undefined && scope.datasetId !== datasetId) ||\n (scope.revision !== undefined && introduced > scope.revision) ||\n (scope.archived !== undefined && archived !== scope.archived)\n )\n throw new TypeError('Item is outside requested scope.')\n if (data.input === null) throw new TypeError('Dataset input cannot be null.')\n return {\n ...audit(data, project),\n id,\n datasetId,\n datasetRevision: introduced,\n archived,\n clientItemId: nullable(data.client_item_id, identifier),\n version: integer(data.version),\n versionId: uuid(data.version_id),\n datasetRevisionId: uuid(data.dataset_revision_id),\n input: responseJSON(data.input),\n expectedOutput: responseJSON(data.expected_output),\n sourceOutput: responseJSON(data.source_output),\n metadata: responseMetadata(data.metadata),\n sourceTraceId: nullable(data.source_trace_id, identifier),\n sourceEventId: nullable(data.source_event_id, identifier),\n sourceTimestamp: nullable(data.source_timestamp, timestamp),\n updatedAt: nullable(data.updated_at, timestamp),\n versionCreatedAt: timestamp(data.version_created_at),\n versionCreatedBy: nullable(data.version_created_by, responseMetadata),\n }\n}\nfunction body(fields: WireObject): string {\n const data = defined(fields)\n for (const key of ['name', 'description']) {\n if (Object.hasOwn(data, key)) {\n const value = text(data[key]),\n maximum = key === 'name' ? 400 : 10000\n if ([...value].length > maximum || (key === 'name' && !value.trim()))\n throw new TypeError('Invalid dataset metadata.')\n }\n }\n if (Object.hasOwn(data, 'input') && data.input === null) throw new TypeError('Dataset input cannot be null.')\n if (Object.hasOwn(data, 'metadata')) metadata(data.metadata)\n if (Object.hasOwn(data, 'tags')) data.tags = tags(data.tags)\n return encode(json(data))\n}\nconst METADATA_KEYS = ['name', 'description', 'metadata', 'tags']\nconst ITEM_KEYS = [\n 'input',\n 'expectedOutput',\n 'sourceOutput',\n 'metadata',\n 'clientItemId',\n 'sourceTraceId',\n 'sourceEventId',\n 'sourceTimestamp',\n]\n\n/** Dataset management. Writes require a personal key with dataset:write. */\nexport class Datasets {\n readonly #transport: Transport\n readonly #base: string\n readonly #items: string\n constructor(transport: Transport) {\n this.#transport = transport\n this.#base = `/api/projects/${transport.projectId}/datasets/`\n this.#items = `/api/projects/${transport.projectId}/dataset_items/`\n }\n async #request<T>(\n method: string,\n path: string,\n parse: (data: WireObject) => T,\n options: RequestOptions & { body?: string; params?: WireObject; retrySafe?: boolean }\n ): Promise<T> {\n return parseResponse(await this.#transport.request(method, path, options), parse)\n }\n async create(options: DatasetMetadata & { name: string }, request: RequestOptions = {}): Promise<Dataset> {\n keys(options, METADATA_KEYS)\n if (options.name === undefined) throw new TypeError('Dataset name is required.')\n return this.#request('POST', this.#base, (data) => dataset(data, this.#transport.projectId), {\n ...request,\n body: body({ ...options }),\n })\n }\n async get(datasetId: string, request: RequestOptions = {}): Promise<Dataset> {\n const id = uuid(datasetId)\n return this.#request('GET', `${this.#base}${id}/`, (data) => dataset(data, this.#transport.projectId, id), request)\n }\n async list(options: DatasetListOptions = {}): Promise<DatasetPage> {\n const { limit = 50, offset = 0, archived = false, orderBy = '-created_at' } = options\n if (!['created_at', '-created_at', 'updated_at', '-updated_at'].includes(orderBy))\n throw new TypeError('Invalid dataset order.')\n const params = {\n ...pageParams(limit, offset),\n ...tagParams(options.tags, options.tagMatch),\n archived: String(boolean(archived)),\n order_by: orderBy,\n }\n if (options.search !== undefined && !text(options.search).trim()) throw new TypeError('Search cannot be blank.')\n return this.#request(\n 'GET',\n this.#base,\n (data) => page(data, (row) => dataset(row, this.#transport.projectId), offset),\n { signal: options.signal, params: { ...params, ...defined({ search: options.search }) } }\n )\n }\n async update(datasetId: string, options: DatasetMetadata, request: RequestOptions = {}): Promise<Dataset> {\n const id = uuid(datasetId)\n keys(options, METADATA_KEYS)\n return this.#request('PATCH', `${this.#base}${id}/`, (data) => dataset(data, this.#transport.projectId, id), {\n ...request,\n body: body({ ...options }),\n })\n }\n async archive(datasetId: string, request: RequestOptions = {}): Promise<Dataset> {\n return this.#state(datasetId, 'archive', request)\n }\n async restore(datasetId: string, request: RequestOptions = {}): Promise<Dataset> {\n return this.#state(datasetId, 'restore', request)\n }\n async #state(datasetId: string, action: string, request: RequestOptions): Promise<Dataset> {\n const id = uuid(datasetId)\n return this.#request(\n 'POST',\n `${this.#base}${id}/${action}/`,\n (data) => dataset(data, this.#transport.projectId, id),\n { ...request, body: '{}' }\n )\n }\n async listRevisions(datasetId: string, options: PageOptions = {}): Promise<DatasetRevisionPage> {\n const id = uuid(datasetId),\n { limit = 50, offset = 0 } = options\n return this.#request(\n 'GET',\n `${this.#base}${id}/revisions/`,\n (data) => page(data, (row) => revision(row, this.#transport.projectId, id), offset),\n { signal: options.signal, params: pageParams(limit, offset) }\n )\n }\n async listItems(datasetId: string, options: ItemListOptions = {}): Promise<DatasetItemPage> {\n const id = uuid(datasetId),\n { limit = 25, offset = 0, archived = false, revision: selectedRevision } = options\n const params = {\n ...pageParams(limit, offset, 25),\n dataset: id,\n archived: String(boolean(archived)),\n ...defined({ revision: selectedRevision === undefined ? undefined : integer(selectedRevision) }),\n }\n return this.#request(\n 'GET',\n this.#items,\n (data) =>\n page(\n data,\n (row) => item(row, this.#transport.projectId, { datasetId: id, revision: selectedRevision, archived }),\n offset\n ),\n { signal: options.signal, params }\n )\n }\n async getItem(itemId: string, options: RequestOptions & { revision?: number } = {}): Promise<DatasetItem> {\n const id = uuid(itemId),\n selectedRevision = options.revision\n const params = defined({ revision: selectedRevision === undefined ? undefined : integer(selectedRevision) })\n return this.#request(\n 'GET',\n `${this.#items}${id}/`,\n (data) => item(data, this.#transport.projectId, { id, revision: selectedRevision }),\n { signal: options.signal, params }\n )\n }\n async createItem(\n datasetId: string,\n options: CreateDatasetItemOptions,\n request: RequestOptions = {}\n ): Promise<DatasetItem> {\n const id = uuid(datasetId)\n keys(options, ITEM_KEYS)\n if (options.input === undefined) throw new TypeError('Dataset input is required.')\n const clientId = options.clientItemId == null ? null : identifier(options.clientItemId)\n const trace = options.sourceTraceId == null ? null : identifier(options.sourceTraceId)\n const event = options.sourceEventId == null ? null : identifier(options.sourceEventId)\n const time = options.sourceTimestamp == null ? null : timestamp(options.sourceTimestamp)\n if ((trace === null) !== (time === null) || (event !== null && trace === null))\n throw new TypeError('Source provenance requires a trace and timezone-qualified timestamp.')\n const prepared = body({\n dataset: id,\n input: options.input,\n expected_output: options.expectedOutput,\n source_output: options.sourceOutput,\n metadata: options.metadata,\n client_item_id: clientId,\n source_trace_id: trace,\n source_event_id: event,\n source_timestamp: time,\n })\n return this.#request(\n 'POST',\n this.#items,\n (data) => item(data, this.#transport.projectId, { datasetId: id, archived: false }),\n { ...request, body: prepared, retrySafe: clientId !== null }\n )\n }\n async updateItem(\n itemId: string,\n options: UpdateDatasetItemOptions,\n request: RequestOptions = {}\n ): Promise<DatasetItem> {\n const id = uuid(itemId)\n keys(options, ['baseVersion', 'input', 'expectedOutput', 'metadata'])\n const prepared = body({\n base_version: integer(options.baseVersion),\n input: options.input,\n expected_output: options.expectedOutput,\n metadata: options.metadata,\n })\n return this.#request(\n 'PATCH',\n `${this.#items}${id}/`,\n (data) => item(data, this.#transport.projectId, { id, archived: false }),\n { ...request, body: prepared }\n )\n }\n async archiveItem(\n itemId: string,\n options: { baseVersion: number },\n request: RequestOptions = {}\n ): Promise<DatasetItem> {\n keys(options, ['baseVersion'])\n return this.#itemState(itemId, 'archive', { base_version: integer(options.baseVersion) }, request)\n }\n async restoreItem(\n itemId: string,\n options: { baseVersion: number; sourceVersion?: number },\n request: RequestOptions = {}\n ): Promise<DatasetItem> {\n keys(options, ['baseVersion', 'sourceVersion'])\n return this.#itemState(\n itemId,\n 'restore',\n {\n base_version: integer(options.baseVersion),\n source_version: options.sourceVersion === undefined ? null : integer(options.sourceVersion),\n },\n request\n )\n }\n async #itemState(itemId: string, action: string, fields: WireObject, request: RequestOptions): Promise<DatasetItem> {\n const id = uuid(itemId)\n return this.#request(\n 'POST',\n `${this.#items}${id}/${action}/`,\n (data) => item(data, this.#transport.projectId, { id, archived: action === 'archive' }),\n { ...request, body: body(fields) }\n )\n }\n async listItemVersions(itemId: string, options: PageOptions = {}): Promise<DatasetItemPage> {\n const id = uuid(itemId),\n { limit = 25, offset = 0 } = options\n return this.#request(\n 'GET',\n `${this.#items}${id}/versions/`,\n (data) => page(data, (row) => item(row, this.#transport.projectId, { id }), offset),\n { signal: options.signal, params: pageParams(limit, offset) }\n )\n }\n async snapshot(datasetId: string, options: RequestOptions & { revision?: number } = {}): Promise<DatasetSnapshot> {\n const selectedRevision = options.revision\n if (selectedRevision !== undefined) integer(selectedRevision)\n const data = await this.get(datasetId, options),\n selected = selectedRevision ?? data.currentRevision\n if (selected === null) throw new TypeError('Dataset has no revision. Add an item first.')\n if (data.currentRevision === null || selected > data.currentRevision)\n throw new TypeError('Dataset revision does not exist.')\n if (selected === data.currentRevision && data.currentRevisionId !== null)\n return new DatasetSnapshot(this, data, selected, data.currentRevisionId)\n const candidate = await this.listRevisions(data.id, {\n limit: 1,\n offset: data.currentRevision - selected,\n signal: options.signal,\n })\n const found = candidate.results.find((r) => r.revision === selected)\n if (found) return new DatasetSnapshot(this, data, selected, found.id)\n let offset = 0\n for (;;) {\n const revisions = await this.listRevisions(data.id, { limit: 100, offset, signal: options.signal })\n const match = revisions.results.find((r) => r.revision === selected)\n if (match) return new DatasetSnapshot(this, data, selected, match.id)\n if (revisions.nextOffset === null || revisions.results.at(-1)!.revision < selected)\n throw new TypeError('Dataset revision does not exist.')\n offset = revisions.nextOffset\n }\n }\n}\n/** A repeatable, lazy read of active items at one immutable revision. Keep its client open. */\nexport class DatasetSnapshot implements AsyncIterable<DatasetItem> {\n readonly #datasets: Datasets\n readonly #dataset: Dataset\n readonly revision: number\n readonly revisionId: string\n constructor(datasets: Datasets, dataset: Dataset, revisionNumber: number, revisionId: string) {\n this.#datasets = datasets\n this.#dataset = structuredClone(dataset)\n this.revision = revisionNumber\n this.revisionId = revisionId\n Object.freeze(this)\n }\n get dataset(): Dataset {\n return structuredClone(this.#dataset)\n }\n async *iterItems(options: RequestOptions & { pageSize?: number } = {}): AsyncIterableIterator<DatasetItem> {\n const limit = integer(options.pageSize ?? 25, 1, 25)\n let offset = 0\n for (;;) {\n const result = await this.#datasets.listItems(this.#dataset.id, {\n revision: this.revision,\n archived: false,\n limit,\n offset,\n signal: options.signal,\n })\n for (const row of result.results) {\n options.signal?.throwIfAborted()\n yield row\n }\n if (result.nextOffset === null) return\n offset = result.nextOffset\n }\n }\n [Symbol.asyncIterator](): AsyncIterableIterator<DatasetItem> {\n return this.iterItems()\n }\n}\n","import { randomUUID } from 'node:crypto'\nimport {\n bytes,\n defined,\n encode,\n identifier,\n json,\n keys,\n metadata,\n object,\n timestamp,\n uuid,\n type JSONObject,\n type JSONValue,\n type WireObject,\n} from './serialization'\nimport type { DatasetItem } from './datasets'\n\nexport interface ItemPayload {\n input?: JSONValue\n output?: JSONValue\n expectedOutput?: JSONValue\n metadata?: JSONObject | null\n}\nexport interface ResultPayload {\n reasoning?: string | null\n errorMessage?: string | null\n metadata?: JSONObject | null\n}\ntype PayloadOptions<T> = (T & { payload?: never }) | ({ payload: T } & { [K in keyof T]?: never })\nexport interface ItemIdentifiers {\n id?: string\n caseKey?: string | null\n trial?: string | null\n datasetItemIdentifier?: string | null\n datasetItemVersionIdentifier?: string | null\n datasetItemVersionId?: string | null\n applicationTraceId?: string | null\n}\nexport type EvaluationItemOptions = ItemIdentifiers & PayloadOptions<ItemPayload>\nexport type ScoreValue = boolean | number | readonly string[]\n/** bigint inputs are converted only if exactly representable as finite binary64 scores. */\nexport type ScoreInput = ScoreValue | bigint\nexport type ResultStatus = 'ok' | 'error' | 'skipped' | 'not_applicable'\ntype Outcome =\n | ({ status?: 'ok'; value: ScoreInput; errorCode?: never } & PayloadOptions<\n Omit<ResultPayload, 'errorMessage'> & { errorMessage?: null }\n >)\n | ({ status: 'error'; value?: never; errorCode?: string } & PayloadOptions<ResultPayload>)\n | ({ status: 'skipped' | 'not_applicable'; value?: never; errorCode?: never } & PayloadOptions<\n Omit<ResultPayload, 'errorMessage'> & { errorMessage?: null }\n >)\nexport type EvaluationResultOptions = Outcome & {\n item: EvaluationItem | string\n scorerVersionId: string\n evaluatorTraceId?: string | null\n evaluatedAt?: string | Date | null\n}\nconst ITEM_FIELDS: Record<string, string> = {\n input: 'input',\n output: 'output',\n expectedOutput: 'expected_output',\n metadata: 'metadata',\n}\nconst RESULT_FIELDS: Record<string, string> = {\n reasoning: 'reasoning',\n errorMessage: 'error_message',\n metadata: 'metadata',\n}\nconst ITEM_IDS: Record<string, string> = {\n caseKey: 'case_key',\n trial: 'trial',\n datasetItemIdentifier: 'dataset_item_identifier',\n datasetItemVersionIdentifier: 'dataset_item_version_identifier',\n applicationTraceId: 'application_trace_id',\n}\nconst items = new WeakMap<EvaluationItem, string>()\nconst results = new WeakMap<EvaluationResult, string>()\n\nfunction payload(options: WireObject, fields: Record<string, string>, limit: number): WireObject | undefined {\n const supplied = Object.keys(fields).filter((key) => options[key] !== undefined)\n if (options.payload !== undefined && supplied.length)\n throw new TypeError('Supply payload or individual fields, not both.')\n if (options.payload === undefined && !supplied.length) return undefined\n const source =\n options.payload === undefined\n ? Object.fromEntries(supplied.map((key) => [key, options[key]]))\n : object(options.payload)\n keys(source, Object.keys(fields))\n const value = Object.fromEntries(\n Object.entries(source).map(([key, v]) => {\n if (key === 'metadata' && v !== null) metadata(v)\n if ((key === 'reasoning' || key === 'errorMessage') && v !== null && typeof v !== 'string')\n throw new TypeError('Expected a string or null.')\n return [fields[key], v]\n })\n )\n const snapshot = json(value) as WireObject\n if (bytes(encode(snapshot)) > limit) throw new TypeError('Evaluation payload exceeds its UTF-8 byte limit.')\n return snapshot\n}\nfunction restoredPayload(value: unknown, fields: Record<string, string>): WireObject {\n const source = object(value)\n keys(source, Object.values(fields))\n return Object.fromEntries(\n Object.entries(fields)\n .filter(([, wire]) => Object.hasOwn(source, wire))\n .map(([key, wire]) => [key, source[wire]])\n )\n}\nfunction score(value: unknown): boolean | number | string[] {\n if (typeof value === 'boolean') return value\n if (typeof value === 'bigint') {\n const result = Number(value)\n if (!Number.isFinite(result) || BigInt(result) !== value)\n throw new TypeError('Integer scores must be exactly representable as binary64.')\n return result\n }\n if (typeof value === 'number') {\n if (!Number.isFinite(value) || (Number.isInteger(value) && !Number.isSafeInteger(value)))\n throw new TypeError('Use bigint for exact integer scores outside the safe number range.')\n return value\n }\n if (!Array.isArray(value) || !value.length)\n throw new TypeError('Expected a boolean, finite number, or nonempty category list.')\n for (let i = 0; i < value.length; i++) {\n if (!Object.hasOwn(value, i)) throw new TypeError('Category lists cannot be sparse.')\n }\n const categories = value.map((v) => identifier(v, 128))\n if (new Set(categories).size !== categories.length) throw new TypeError('Category keys must be distinct.')\n // Python sorts Unicode code points; UTF-16's default sort differs for supplementary characters.\n return categories.sort((a, b) => {\n const aa = Array.from(a, (c) => c.codePointAt(0)!),\n bb = Array.from(b, (c) => c.codePointAt(0)!)\n for (let i = 0; i < Math.min(aa.length, bb.length); i++) if (aa[i] !== bb[i]) return aa[i] - bb[i]\n return aa.length - bb.length\n })\n}\n\n/** One immutable execution. Reuse across scorers; construct a new item for each trial. */\nexport class EvaluationItem {\n readonly id: string\n constructor(options: EvaluationItemOptions = {}) {\n object(options)\n keys(options, ['id', 'datasetItemVersionId', 'payload', ...Object.keys(ITEM_IDS), ...Object.keys(ITEM_FIELDS)])\n this.id = uuid(options.id ?? randomUUID())\n const body: WireObject = { id: this.id }\n for (const [key, wire] of Object.entries(ITEM_IDS)) {\n const value = (options as WireObject)[key]\n if (value !== undefined && value !== null) body[wire] = identifier(value)\n }\n if (options.datasetItemVersionId != null) body.dataset_item_version_id = uuid(options.datasetItemVersionId)\n const data = payload(options as WireObject, ITEM_FIELDS, 1024 * 1024)\n if (data !== undefined) body.payload = data\n items.set(this, encode(body))\n Object.freeze(this)\n }\n /** Detached wire-format object. Use toJSONString() for lossless cross-language persistence. */\n toJSON(): WireObject {\n return JSON.parse(itemJSON(this)) as WireObject\n }\n /** Exact wire JSON, including large integers. Restore with fromJSON(JSON.parse(saved)). */\n toJSONString(): string {\n return itemJSON(this)\n }\n static fromJSON(value: unknown): EvaluationItem {\n const data = object(value)\n keys(data, ['id', 'dataset_item_version_id', 'payload', ...Object.values(ITEM_IDS)])\n const options: WireObject = { id: uuid(data.id) }\n for (const [key, wire] of Object.entries(ITEM_IDS)) if (Object.hasOwn(data, wire)) options[key] = data[wire]\n if (Object.hasOwn(data, 'dataset_item_version_id')) options.datasetItemVersionId = data.dataset_item_version_id\n if (Object.hasOwn(data, 'payload')) options.payload = restoredPayload(data.payload, ITEM_FIELDS)\n return new EvaluationItem(options as EvaluationItemOptions)\n }\n static fromDatasetItem(\n item: DatasetItem,\n options: { output?: JSONValue; id?: string; caseKey?: string; trial?: string; applicationTraceId?: string } = {}\n ): EvaluationItem {\n if (item.archived !== false) throw new TypeError('Archived dataset items cannot be evaluated.')\n keys(options, ['output', 'id', 'caseKey', 'trial', 'applicationTraceId'])\n return new EvaluationItem({\n ...options,\n caseKey: options.caseKey ?? item.clientItemId ?? item.id,\n input: item.input,\n expectedOutput: item.expectedOutput,\n metadata: item.metadata,\n datasetItemIdentifier: uuid(item.id),\n datasetItemVersionIdentifier: uuid(item.versionId),\n datasetItemVersionId: item.versionId,\n })\n }\n}\n\n/** An evaluator outcome pinned to an exact scorer version. `ok` does not imply passing. */\nexport class EvaluationResult {\n readonly item: EvaluationItem | string\n readonly scorerVersionId: string\n readonly itemId: string\n constructor(options: EvaluationResultOptions) {\n object(options)\n keys(options, [\n 'item',\n 'scorerVersionId',\n 'status',\n 'value',\n 'errorCode',\n 'evaluatorTraceId',\n 'evaluatedAt',\n 'payload',\n ...Object.keys(RESULT_FIELDS),\n ])\n this.item = options.item instanceof EvaluationItem ? options.item : uuid(options.item)\n this.itemId = typeof this.item === 'string' ? this.item : this.item.id\n this.scorerVersionId = uuid(options.scorerVersionId)\n const status = options.status ?? 'ok'\n if (!['ok', 'error', 'skipped', 'not_applicable'].includes(status))\n throw new TypeError('Unsupported result status.')\n if (status !== 'ok' && options.value !== undefined && options.value !== null)\n throw new TypeError('Only ok results can contain a score.')\n if (status !== 'error' && options.errorCode != null)\n throw new TypeError('Only error results can contain an error code.')\n const body: WireObject = { item_id: this.itemId, scorer_version_id: this.scorerVersionId, status }\n if (status === 'ok') body.value = score(options.value)\n if (options.errorCode != null) body.error_code = identifier(options.errorCode, 128)\n if (options.evaluatorTraceId != null) body.evaluator_trace_id = identifier(options.evaluatorTraceId)\n if (options.evaluatedAt != null) body.evaluated_at = timestamp(options.evaluatedAt)\n const data = payload(options as WireObject, RESULT_FIELDS, 256 * 1024)\n if (data !== undefined) {\n if (status !== 'error' && data.error_message != null)\n throw new TypeError('Only error results can contain an error message.')\n body.payload = data\n }\n results.set(this, encode(body))\n Object.freeze(this)\n }\n /** Detached wire-format object. Use toJSONString() for lossless cross-language persistence. */\n toJSON(): WireObject {\n return JSON.parse(resultJSON(this)) as WireObject\n }\n /** Exact wire JSON. Save the attached item separately and restore with fromJSON(JSON.parse(saved), { item }). */\n toJSONString(): string {\n return resultJSON(this)\n }\n static fromJSON(value: unknown, options: { item?: EvaluationItem } = {}): EvaluationResult {\n const data = object(value)\n keys(data, [\n 'item_id',\n 'scorer_version_id',\n 'status',\n 'value',\n 'error_code',\n 'evaluator_trace_id',\n 'evaluated_at',\n 'payload',\n ])\n const itemId = uuid(data.item_id)\n if (options.item !== undefined && options.item.id !== itemId)\n throw new TypeError('Restored item identity does not match.')\n // Saved binary64 numbers are already the acknowledged representation. Large exact integers\n // use the explicit bigint input path to distinguish restoration from an unsafe number input.\n const valueInput =\n typeof data.value === 'number' &&\n Number.isInteger(data.value) &&\n !Number.isSafeInteger(data.value) &&\n Number.isFinite(data.value)\n ? BigInt(data.value)\n : data.value\n return new EvaluationResult(\n defined({\n item: options.item ?? itemId,\n scorerVersionId: data.scorer_version_id,\n status: data.status,\n value: valueInput,\n errorCode: data.error_code,\n evaluatorTraceId: data.evaluator_trace_id,\n evaluatedAt: data.evaluated_at,\n payload: Object.hasOwn(data, 'payload') ? restoredPayload(data.payload, RESULT_FIELDS) : undefined,\n }) as EvaluationResultOptions\n )\n }\n}\nexport function itemJSON(item: EvaluationItem): string {\n const value = items.get(item)\n if (value === undefined) throw new TypeError('Expected an EvaluationItem.')\n return value\n}\nexport function resultJSON(result: EvaluationResult): string {\n const value = results.get(result)\n if (value === undefined) throw new TypeError('Expected an EvaluationResult.')\n return value\n}\n","import { parseResponse } from './errors'\nimport {\n boolean,\n count,\n defined,\n encode,\n identifier,\n integer,\n json,\n keys,\n metadata,\n nullable,\n object,\n page,\n pageParams,\n responseTags,\n responseMetadata,\n tagParams,\n tags,\n text,\n timestamp,\n uuid,\n type EvaluationCount,\n type JSONObject,\n type Page,\n type WireObject,\n} from './serialization'\nimport { Transport, type RequestOptions } from './transport'\nimport type { PageOptions } from './datasets'\n\nexport interface BooleanScorerConfig {\n trueLabel?: string\n falseLabel?: string\n trueIsFailure?: boolean | null\n}\nexport interface NumericPassingRule {\n operator: 'gte' | 'lte'\n threshold: number\n}\nexport interface NumericScorerConfig {\n min?: number | null\n max?: number | null\n step?: number | null\n passingRule?: NumericPassingRule | null\n}\nexport interface CategoricalScorerOption {\n key: string\n label: string\n}\nexport interface CategoricalScorerConfig {\n options: readonly CategoricalScorerOption[]\n selectionMode?: 'single' | 'multiple'\n minSelections?: number | null\n maxSelections?: number | null\n passingRule?: { categories: readonly string[] } | null\n}\nexport interface ScorerConfigs {\n boolean: BooleanScorerConfig\n numeric: NumericScorerConfig\n categorical: CategoricalScorerConfig\n}\nexport type ScorerKind = keyof ScorerConfigs\nexport type ScorerConfig = ScorerConfigs[ScorerKind]\ninterface ScorerRecord {\n id: string\n name: string\n description: string\n archived: boolean\n tags: string[]\n currentVersion: number\n currentVersionId: string\n team: number\n createdAt: string\n updatedAt: string\n createdBy: JSONObject | null\n}\ninterface VersionRecord {\n id: string\n definitionId: string\n version: number\n createdAt: string\n createdBy: JSONObject | null\n}\nexport type Scorer = { [K in ScorerKind]: ScorerRecord & { kind: K; config: ScorerConfigs[K] } }[ScorerKind]\nexport type ScorerVersion = { [K in ScorerKind]: VersionRecord & { kind: K; config: ScorerConfigs[K] } }[ScorerKind]\nexport interface ScorerPage extends Page<Scorer> {\n next: string | null\n previous: string | null\n}\nexport interface ScorerVersionPage {\n count: EvaluationCount\n results: ScorerVersion[]\n nextCursor: string | null\n}\nexport type ScorerOrder =\n | 'name'\n | '-name'\n | 'kind'\n | '-kind'\n | 'created_at'\n | '-created_at'\n | 'updated_at'\n | '-updated_at'\n | 'current_version'\n | '-current_version'\nexport interface ScorerListOptions extends PageOptions {\n search?: string\n kind?: ScorerKind\n archived?: boolean\n orderBy?: ScorerOrder\n tags?: readonly string[]\n tagMatch?: 'any' | 'all'\n}\nexport interface ScorerMetadata {\n name?: string\n description?: string | null\n archived?: boolean\n tags?: readonly string[]\n}\nexport type CreateScorerOptions = {\n [K in ScorerKind]: {\n name: string\n kind: K\n config: ScorerConfigs[K]\n description?: string | null\n tags?: readonly string[]\n }\n}[ScorerKind]\nconst CONFIG_KEYS: Record<string, string> = {\n trueLabel: 'true_label',\n falseLabel: 'false_label',\n trueIsFailure: 'true_is_failure',\n passingRule: 'passing_rule',\n selectionMode: 'selection_mode',\n minSelections: 'min_selections',\n maxSelections: 'max_selections',\n}\nfunction kind(value: unknown): ScorerKind {\n if (value !== 'boolean' && value !== 'numeric' && value !== 'categorical')\n throw new TypeError('Unsupported scorer kind.')\n return value\n}\nfunction config(value: unknown, toWire: boolean): WireObject {\n const fields = toWire ? CONFIG_KEYS : Object.fromEntries(Object.entries(CONFIG_KEYS).map(([k, v]) => [v, k]))\n // Only schema-owned keys are translated. Category keys and user text are opaque.\n return Object.fromEntries(\n Object.entries(toWire ? metadata(value) : responseMetadata(value)).map(([key, v]) => [\n Object.hasOwn(fields, key) ? fields[key] : key,\n v,\n ])\n )\n}\ntype ConfigSnapshot = { [K in ScorerKind]: { kind: K; config: ScorerConfigs[K] } }[ScorerKind]\nfunction parsedConfig(value: unknown, raw: unknown): ConfigSnapshot {\n const selected = kind(value)\n const snapshot = config(raw, false)\n const finite = (v: unknown): void => {\n if (typeof v !== 'number' || !Number.isFinite(v)) throw new TypeError('Expected a finite configuration number.')\n }\n if (selected === 'boolean') {\n for (const key of ['trueLabel', 'falseLabel']) if (snapshot[key] !== undefined) text(snapshot[key])\n if (snapshot.trueIsFailure != null) boolean(snapshot.trueIsFailure)\n return { kind: selected, config: snapshot as BooleanScorerConfig }\n }\n if (selected === 'numeric') {\n for (const key of ['min', 'max', 'step']) if (snapshot[key] != null) finite(snapshot[key])\n if (snapshot.passingRule != null) {\n const rule = object(snapshot.passingRule)\n if (rule.operator !== 'gte' && rule.operator !== 'lte') throw new TypeError('Invalid passing operator.')\n finite(rule.threshold)\n }\n return { kind: selected, config: snapshot as NumericScorerConfig }\n }\n if (!Array.isArray(snapshot.options)) throw new TypeError('Expected categorical options.')\n for (const option of snapshot.options) {\n const row = object(option)\n text(row.key)\n text(row.label)\n }\n if (\n snapshot.selectionMode !== undefined &&\n snapshot.selectionMode !== 'single' &&\n snapshot.selectionMode !== 'multiple'\n )\n throw new TypeError('Invalid selection mode.')\n for (const key of ['minSelections', 'maxSelections']) if (snapshot[key] != null) integer(snapshot[key])\n if (snapshot.passingRule != null) {\n const categories = object(snapshot.passingRule).categories\n if (!Array.isArray(categories)) throw new TypeError('Expected passing categories.')\n categories.forEach(text)\n }\n return { kind: selected, config: snapshot as unknown as CategoricalScorerConfig }\n}\nfunction scorer(data: WireObject, project: number, id?: string): Scorer {\n const identity = uuid(data.id)\n if ((id !== undefined && identity !== id) || integer(data.team) !== project)\n throw new TypeError('Mismatched scorer scope.')\n return {\n id: identity,\n name: text(data.name),\n description: text(data.description),\n archived: boolean(data.archived),\n ...parsedConfig(data.kind, data.config),\n tags: responseTags(data.tags === undefined ? [] : data.tags),\n currentVersion: integer(data.current_version),\n currentVersionId: uuid(data.current_version_id),\n team: project,\n createdAt: timestamp(data.created_at),\n updatedAt: timestamp(data.updated_at),\n createdBy: nullable(data.created_by, responseMetadata),\n }\n}\nfunction version(data: WireObject, scorerId: string, versionId?: string): ScorerVersion {\n const id = uuid(data.id)\n if (uuid(data.definition_id) !== scorerId || (versionId !== undefined && versionId !== id))\n throw new TypeError('Mismatched scorer version.')\n return {\n id,\n definitionId: scorerId,\n version: integer(data.version),\n ...parsedConfig(data.kind, data.config),\n createdAt: timestamp(data.created_at),\n createdBy: nullable(data.created_by, responseMetadata),\n }\n}\nfunction fields(options: ScorerMetadata): WireObject {\n return defined({\n name: options.name === undefined ? undefined : identifier(options.name, 400),\n description: options.description === undefined ? undefined : nullable(options.description, text),\n archived: options.archived === undefined ? undefined : boolean(options.archived),\n tags: options.tags === undefined ? undefined : tags(options.tags),\n })\n}\n/** Versioned scorer definitions. Evaluator execution remains caller-owned. */\nexport class Scorers {\n readonly #transport: Transport\n readonly #base: string\n constructor(transport: Transport) {\n this.#transport = transport\n this.#base = `/api/projects/${transport.projectId}/llm_analytics/score_definitions/`\n }\n async #request<T>(\n method: string,\n path: string,\n parse: (data: WireObject) => T,\n options: RequestOptions & { body?: string; params?: WireObject }\n ): Promise<T> {\n return parseResponse(await this.#transport.request(method, path, options), parse)\n }\n async create<T extends CreateScorerOptions>(\n options: T,\n request: RequestOptions = {}\n ): Promise<Extract<Scorer, { kind: T['kind'] }>> {\n keys(options, ['name', 'kind', 'config', 'description', 'tags'])\n const selectedKind = kind(options.kind)\n const body = encode(\n json({\n ...fields(options),\n name: identifier(options.name, 400),\n kind: selectedKind,\n config: config(options.config, true),\n })\n )\n return this.#request(\n 'POST',\n this.#base,\n (data) => {\n const result = scorer(data, this.#transport.projectId)\n if (result.kind !== selectedKind) throw new TypeError('Mismatched scorer kind.')\n return result\n },\n {\n ...request,\n body,\n }\n ) as Promise<Extract<Scorer, { kind: T['kind'] }>>\n }\n async get(scorerId: string, request: RequestOptions = {}): Promise<Scorer> {\n const id = uuid(scorerId)\n return this.#request('GET', `${this.#base}${id}/`, (data) => scorer(data, this.#transport.projectId, id), request)\n }\n async list(options: ScorerListOptions = {}): Promise<ScorerPage> {\n const { limit = 100, offset = 0 } = options\n if (\n options.orderBy !== undefined &&\n ![\n 'name',\n '-name',\n 'kind',\n '-kind',\n 'created_at',\n '-created_at',\n 'updated_at',\n '-updated_at',\n 'current_version',\n '-current_version',\n ].includes(options.orderBy)\n )\n throw new TypeError('Unsupported scorer order.')\n const params = {\n ...pageParams(limit, offset, Number.MAX_SAFE_INTEGER),\n ...tagParams(options.tags, options.tagMatch),\n ...defined({\n search: options.search === undefined ? undefined : text(options.search),\n kind: options.kind === undefined ? undefined : kind(options.kind),\n archived: options.archived === undefined ? undefined : String(boolean(options.archived)),\n order_by: options.orderBy,\n }),\n }\n return this.#request(\n 'GET',\n this.#base,\n (data) => ({\n ...page(data, (row) => scorer(row, this.#transport.projectId), offset),\n next: nullable(data.next, text),\n previous: nullable(data.previous, text),\n }),\n { signal: options.signal, params }\n )\n }\n async update(scorerId: string, options: ScorerMetadata, request: RequestOptions = {}): Promise<Scorer> {\n keys(options, ['name', 'description', 'archived', 'tags'])\n const id = uuid(scorerId)\n return this.#request('PATCH', `${this.#base}${id}/`, (data) => scorer(data, this.#transport.projectId, id), {\n ...request,\n body: encode(json(fields(options))),\n })\n }\n async createVersion(\n scorerId: string,\n options: { config: ScorerConfig; baseVersion?: number; name?: string; description?: string | null },\n request: RequestOptions = {}\n ): Promise<Scorer> {\n keys(options, ['config', 'baseVersion', 'name', 'description'])\n const id = uuid(scorerId)\n const body = encode(\n json({\n ...fields(options),\n config: config(options.config, true),\n ...defined({\n base_version: options.baseVersion === undefined ? undefined : integer(options.baseVersion),\n }),\n })\n )\n return this.#request(\n 'POST',\n `${this.#base}${id}/new_version/`,\n (data) => scorer(data, this.#transport.projectId, id),\n { ...request, body }\n )\n }\n async getVersion(scorerId: string, versionId: string, request: RequestOptions = {}): Promise<ScorerVersion> {\n const id = uuid(scorerId),\n selected = uuid(versionId)\n return this.#request(\n 'GET',\n `${this.#base}${id}/versions/${selected}/`,\n (data) => version(data, id, selected),\n request\n )\n }\n async listVersions(\n scorerId: string,\n options: RequestOptions & { limit?: number; cursor?: string } = {}\n ): Promise<ScorerVersionPage> {\n const id = uuid(scorerId),\n cursor = options.cursor\n const params = {\n limit: integer(options.limit ?? 50, 1, 100),\n ...defined({ cursor: cursor === undefined ? undefined : text(cursor) }),\n }\n return this.#request(\n 'GET',\n `${this.#base}${id}/versions/`,\n (data) => {\n if (!Array.isArray(data.results)) throw new TypeError('Expected version results.')\n const next = nullable(data.next_cursor, text)\n if (next !== null && (!next || next === cursor || !data.results.length))\n throw new TypeError('Invalid cursor continuation.')\n return {\n count: count(data.count),\n results: data.results.map((row) => version(object(row), id)),\n nextCursor: next,\n }\n },\n { signal: options.signal, params }\n )\n }\n}\n","/// <reference lib=\"dom\" />\nimport { EvaluationAPIError } from './errors'\nimport { decode, integer, object, text, type WireObject } from './serialization'\n\nexport interface RequestOptions {\n signal?: AbortSignal\n}\nexport interface OfflineEvaluationsOptions {\n projectId: number\n secretKey: string\n host?: string\n /** Per-attempt timeout, including reading the response body. Default: 15,000 ms. */\n timeoutMs?: number\n /** Additional attempts for operations with safe replay identity. Default: 3. */\n maxRetries?: number\n}\nconst RETRY_STATUSES = new Set([408, 429, 500, 502, 503, 504])\nconst HOSTS: Record<string, string> = {\n 'app.posthog.com': 'us.posthog.com',\n 'us.i.posthog.com': 'us.posthog.com',\n 'eu.i.posthog.com': 'eu.posthog.com',\n}\nexport function normalizeHost(host: string): string {\n const url = new URL(text(host))\n if (\n !['http:', 'https:'].includes(url.protocol) ||\n url.username ||\n url.password ||\n url.search ||\n url.hash ||\n host.includes('?') ||\n host.includes('#')\n ) {\n throw new TypeError('Host must be an absolute HTTP(S) URL without credentials, query, or fragment.')\n }\n if (url.protocol === 'https:' && !url.port && Object.hasOwn(HOSTS, url.hostname)) url.hostname = HOSTS[url.hostname]\n return url.href.replace(/\\/+$/, '')\n}\nfunction retryAfter(value: string | null): number | undefined {\n if (!value?.trim()) return undefined\n const number = Number(value)\n const seconds = Number.isFinite(number) ? number : (Date.parse(value) - Date.now()) / 1000\n return Number.isFinite(seconds) ? Math.max(0, seconds) : undefined\n}\nfunction delay(ms: number, signal: AbortSignal): Promise<void> {\n signal.throwIfAborted()\n return new Promise((resolve, reject) => {\n const onAbort = (): void => {\n clearTimeout(timer)\n signal.removeEventListener('abort', onAbort)\n reject(signal.reason)\n }\n const timer = setTimeout(() => {\n signal.removeEventListener('abort', onAbort)\n resolve()\n }, ms)\n signal.addEventListener('abort', onAbort, { once: true })\n })\n}\n\nexport class Transport {\n readonly projectId: number\n readonly #host: string\n readonly #secret: string\n readonly #timeout: number\n readonly #retries: number\n readonly #closed = new AbortController()\n constructor(options: OfflineEvaluationsOptions) {\n this.projectId = integer(options.projectId)\n this.#secret = text(options.secretKey)\n if (!this.#secret || /\\s/.test(this.#secret))\n throw new TypeError('Secret key must be nonempty and contain no whitespace.')\n this.#host = normalizeHost(options.host ?? 'https://us.posthog.com')\n this.#timeout = options.timeoutMs === undefined ? 15000 : options.timeoutMs\n if (\n typeof this.#timeout !== 'number' ||\n !Number.isFinite(this.#timeout) ||\n this.#timeout <= 0 ||\n this.#timeout > 2147483647\n )\n throw new TypeError('Invalid timeoutMs.')\n this.#retries = integer(options.maxRetries === undefined ? 3 : options.maxRetries, 0)\n }\n close(): void {\n this.#closed.abort(new EvaluationAPIError({ code: 'client_closed' }))\n }\n async request(\n method: string,\n path: string,\n request: RequestOptions & { body?: string; params?: WireObject; retrySafe?: boolean } = {}\n ): Promise<WireObject> {\n const options = { ...request, params: request.params === undefined ? undefined : { ...request.params } }\n if (this.#closed.signal.aborted) throw new EvaluationAPIError({ code: 'client_closed', persistence: 'not_sent' })\n options.signal?.throwIfAborted()\n if (!path.startsWith('/') || path.startsWith('//') || /[?#]/.test(path)) throw new TypeError('Invalid API path.')\n const url = new URL(this.#host + path)\n for (const [key, value] of Object.entries(options.params ?? {})) url.searchParams.set(key, String(value))\n const operation = new AbortController()\n const forward = (signal: AbortSignal): void => operation.abort(signal.reason)\n const externalAbort = (): void => forward(options.signal!)\n const closeAbort = (): void => forward(this.#closed.signal)\n options.signal?.addEventListener('abort', externalAbort, { once: true })\n this.#closed.signal.addEventListener('abort', closeAbort, { once: true })\n let hadUnknown = false\n try {\n for (let attempt = 0; ; attempt++) {\n operation.signal.throwIfAborted()\n const controller = new AbortController()\n const abort = (): void => controller.abort(operation.signal.reason)\n operation.signal.addEventListener('abort', abort, { once: true })\n const timer = setTimeout(() => controller.abort(), this.#timeout)\n let error: EvaluationAPIError\n try {\n const response = await fetch(url, {\n method,\n body: options.body,\n redirect: 'manual',\n signal: controller.signal,\n headers: {\n Authorization: `Bearer ${this.#secret}`,\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n })\n const raw = await response.text()\n operation.signal.throwIfAborted()\n let payload: unknown\n try {\n payload = decode(raw)\n } catch {\n payload = undefined\n }\n if (response.ok) {\n try {\n return object(payload)\n } catch {\n throw new EvaluationAPIError({ status: response.status, code: 'invalid_response' })\n }\n }\n let fields: WireObject = {}\n try {\n fields = object(payload)\n } catch {\n /* A non-object error body is retained as detail. */\n }\n throw new EvaluationAPIError({\n status: response.status,\n code: typeof fields.code === 'string' ? fields.code : undefined,\n detail: fields.detail ?? payload,\n attr: typeof fields.attr === 'string' ? fields.attr : undefined,\n errors: fields.errors,\n response: Object.keys(fields).length ? fields : undefined,\n retryAfter: retryAfter(response.headers.get('Retry-After')),\n persistence:\n response.status >= 400 && response.status < 500 && response.status !== 408 ? 'rejected' : 'unknown',\n })\n } catch (caught) {\n operation.signal.throwIfAborted()\n error = caught instanceof EvaluationAPIError ? caught : new EvaluationAPIError({ code: 'transport_error' })\n } finally {\n clearTimeout(timer)\n operation.signal.removeEventListener('abort', abort)\n }\n hadUnknown ||= error.persistence === 'unknown'\n if (hadUnknown) error.persistence = 'unknown'\n if (\n !(options.retrySafe ?? method === 'GET') ||\n attempt >= this.#retries ||\n error.code === 'invalid_response' ||\n (error.status !== undefined && !RETRY_STATUSES.has(error.status)) ||\n (error.retryAfter ?? 0) > 30\n )\n throw error\n const backoff = Math.min(30, 0.5 * 2 ** Math.min(attempt, 6) * (0.8 + Math.random() * 0.4))\n await delay(Math.max(backoff, error.retryAfter ?? 0) * 1000, operation.signal)\n }\n } finally {\n options.signal?.removeEventListener('abort', externalAbort)\n this.#closed.signal.removeEventListener('abort', closeAbort)\n }\n }\n}\n\n/** One handle's operations are atomic with respect to each other, including all bulk chunks. */\nexport class OperationQueue {\n #tail: Promise<void> = Promise.resolve()\n async run<T>(operation: () => Promise<T>, signal?: AbortSignal): Promise<T> {\n signal?.throwIfAborted()\n const previous = this.#tail\n let release!: () => void\n const done = new Promise<void>((resolve) => {\n release = resolve\n })\n this.#tail = previous.then(() => done)\n let abort: (() => void) | undefined\n try {\n if (signal) {\n await Promise.race([\n previous,\n new Promise<never>((_, reject) => {\n abort = () => reject(signal.reason)\n signal.addEventListener('abort', abort, { once: true })\n }),\n ])\n signal.throwIfAborted()\n } else await previous\n return await operation()\n } finally {\n if (abort) signal!.removeEventListener('abort', abort)\n release()\n }\n }\n}\n","import { randomUUID } from 'node:crypto'\nimport { Datasets } from './datasets'\nimport { EvaluationItem, EvaluationResult, itemJSON, resultJSON, type EvaluationResultOptions } from './declarations'\nimport { EvaluationAPIError, ExperimentCreationAbortedError, parseResponse } from './errors'\nimport { Scorers } from './scorers'\nimport {\n boolean,\n bytes,\n copy,\n count,\n decode,\n encode,\n identifier,\n keys,\n nullable,\n object,\n responseTags,\n tags,\n timestamp,\n uuid,\n type EvaluationCount,\n type WireObject,\n} from './serialization'\nimport { OperationQueue, Transport, type OfflineEvaluationsOptions, type RequestOptions } from './transport'\n\nexport interface ExperimentOptions {\n name: string\n id?: string\n startedAt?: string | Date\n runSource?: 'ci' | 'local' | 'scheduled' | null\n expectedItemCount?: EvaluationCount | null\n expectedResultCount?: EvaluationCount | null\n suiteKey?: string | null\n datasetSource?: string | null\n datasetIdentifier?: string | null\n datasetRevisionIdentifier?: string | null\n datasetRevisionId?: string | null\n applicationVersion?: string | null\n modelVersion?: string | null\n promptVersion?: string | null\n}\nexport interface ExperimentReceipt {\n id: string\n status: 'uploading' | 'completed' | 'failed'\n created: boolean\n startedAt: string\n createdAt: string\n finishedAt: string | null\n expectedItemCount: EvaluationCount | null\n expectedResultCount: EvaluationCount | null\n acceptedItemCount: EvaluationCount\n acceptedResultCount: EvaluationCount\n}\nexport interface ItemReceipt {\n id: string\n created: boolean\n acceptedAt: string\n}\nexport interface ResultReceipt extends ItemReceipt {\n itemId: string\n scorerVersionId: string\n}\nexport interface UploadReceipt {\n items: ItemReceipt[]\n results: ResultReceipt[]\n}\nexport interface BulkUploadReceipt {\n chunks: UploadReceipt[]\n}\nconst EXPERIMENT_TEXT: Record<string, string> = {\n suiteKey: 'suite_key',\n datasetSource: 'dataset_source',\n datasetIdentifier: 'dataset_identifier',\n datasetRevisionIdentifier: 'dataset_revision_identifier',\n applicationVersion: 'application_version',\n modelVersion: 'model_version',\n promptVersion: 'prompt_version',\n}\nfunction experimentBody(options: ExperimentOptions): string {\n keys(options, [\n 'name',\n 'id',\n 'startedAt',\n 'runSource',\n 'expectedItemCount',\n 'expectedResultCount',\n 'datasetRevisionId',\n ...Object.keys(EXPERIMENT_TEXT),\n ])\n const body: WireObject = {\n name: identifier(options.name, 400),\n id: uuid(options.id === undefined ? randomUUID() : options.id),\n started_at: timestamp(options.startedAt === undefined ? new Date() : options.startedAt),\n }\n for (const [key, wire] of Object.entries(EXPERIMENT_TEXT)) {\n const value = (options as unknown as WireObject)[key]\n if (value !== undefined) body[wire] = nullable(value, identifier)\n }\n if (options.runSource !== undefined) {\n if (options.runSource !== null && !['ci', 'local', 'scheduled'].includes(options.runSource))\n throw new TypeError('Invalid run source.')\n body.run_source = options.runSource\n }\n if (options.expectedItemCount !== undefined) body.expected_item_count = nullable(options.expectedItemCount, count)\n if (options.expectedResultCount !== undefined)\n body.expected_result_count = nullable(options.expectedResultCount, count)\n if (options.datasetRevisionId !== undefined) body.dataset_revision_id = nullable(options.datasetRevisionId, uuid)\n return encode(body)\n}\nfunction experimentReceipt(data: WireObject, id: string): ExperimentReceipt {\n if (\n uuid(data.id) !== id ||\n typeof data.status !== 'string' ||\n !['uploading', 'completed', 'failed'].includes(data.status)\n )\n throw new TypeError('Mismatched experiment receipt.')\n return {\n id,\n status: data.status as ExperimentReceipt['status'],\n created: boolean(data.created),\n startedAt: timestamp(data.started_at),\n createdAt: timestamp(data.created_at),\n finishedAt: nullable(data.finished_at, timestamp),\n expectedItemCount: nullable(data.expected_item_count, count),\n expectedResultCount: nullable(data.expected_result_count, count),\n acceptedItemCount: count(data.accepted_item_count),\n acceptedResultCount: count(data.accepted_result_count),\n }\n}\nfunction itemReceipt(value: unknown): ItemReceipt {\n const data = object(value)\n return { id: uuid(data.id), created: boolean(data.created), acceptedAt: timestamp(data.accepted_at) }\n}\nfunction uploadReceipt(data: WireObject, submitted: readonly EvaluationResult[]): UploadReceipt {\n if (!Array.isArray(data.items) || !Array.isArray(data.results)) throw new TypeError('Expected acknowledgment lists.')\n const items = data.items.map(itemReceipt)\n const results = data.results.map((value) => {\n const row = object(value)\n return { ...itemReceipt(row), itemId: uuid(row.item_id), scorerVersionId: uuid(row.scorer_version_id) }\n })\n const expectedItems = new Set(submitted.map((r) => r.itemId)),\n actualItems = new Set(items.map((i) => i.id))\n if (\n actualItems.size !== items.length ||\n actualItems.size !== expectedItems.size ||\n [...expectedItems].some((id) => !actualItems.has(id))\n )\n throw new TypeError('Incomplete item acknowledgments.')\n if (\n results.length !== submitted.length ||\n results.some((r, i) => r.itemId !== submitted[i].itemId || r.scorerVersionId !== submitted[i].scorerVersionId) ||\n new Set(results.map((r) => r.id)).size !== results.length\n )\n throw new TypeError('Incomplete result acknowledgments.')\n return { items, results }\n}\ninterface Chunk {\n start: number\n results: EvaluationResult[]\n body: string\n}\nfunction uploadBody(items: string[], results: string[]): string {\n return `{\"items\":[${items.join(',')}],\"results\":[${results.join(',')}]}`\n}\nfunction chunks(input: readonly EvaluationResult[]): { chunks: Chunk[]; prepared: EvaluationResult[] } {\n if (!Array.isArray(input))\n throw new TypeError('uploadResults expects a finite array of EvaluationResult declarations.')\n const original = Array.from(input),\n identities = new Set<string>(),\n declarations = new Map<string, EvaluationItem>()\n for (const result of original) {\n resultJSON(result)\n const pair = `${result.itemId}/${result.scorerVersionId}`\n if (identities.has(pair)) throw new TypeError('Duplicate item/scorer-version pair.')\n identities.add(pair)\n if (result.item instanceof EvaluationItem) {\n const previous = declarations.get(result.itemId)\n if (previous && itemJSON(previous) !== itemJSON(result.item))\n throw new TypeError('Conflicting item declarations.')\n declarations.set(result.itemId, result.item)\n }\n }\n // Attach known declarations even to references, so pending work stays independently replayable.\n const prepared = original.map((r) =>\n typeof r.item === 'string' && declarations.has(r.itemId)\n ? EvaluationResult.fromJSON(r.toJSON(), { item: declarations.get(r.itemId) })\n : r\n )\n const output: Chunk[] = []\n let start = 0,\n size = bytes(uploadBody([], [])),\n encodedItems: string[] = [],\n encodedResults: string[] = [],\n itemIds = new Set<string>()\n for (let index = 0; index < prepared.length; index++) {\n const result = prepared[index],\n resultBody = resultJSON(result),\n declaration = declarations.get(result.itemId)\n let itemBody = declaration && !itemIds.has(result.itemId) ? itemJSON(declaration) : undefined\n let extra =\n bytes(resultBody) +\n (encodedResults.length ? 1 : 0) +\n (itemBody === undefined ? 0 : bytes(itemBody) + (encodedItems.length ? 1 : 0))\n if (\n encodedResults.length &&\n (encodedResults.length >= 1000 ||\n encodedItems.length + (itemBody === undefined ? 0 : 1) > 1000 ||\n size + extra > 5 * 1024 * 1024)\n ) {\n output.push({\n start,\n results: prepared.slice(start, index),\n body: uploadBody(encodedItems, encodedResults),\n })\n start = index\n size = bytes(uploadBody([], []))\n encodedItems = []\n encodedResults = []\n itemIds = new Set()\n itemBody = declaration ? itemJSON(declaration) : undefined\n extra = bytes(resultBody) + (itemBody === undefined ? 0 : bytes(itemBody))\n }\n if (size + extra > 5 * 1024 * 1024) throw new TypeError('One item/result pair exceeds the request byte limit.')\n if (itemBody !== undefined) {\n itemIds.add(result.itemId)\n encodedItems.push(itemBody)\n }\n encodedResults.push(resultBody)\n size += extra\n }\n if (encodedResults.length)\n output.push({ start, results: prepared.slice(start), body: uploadBody(encodedItems, encodedResults) })\n return { chunks: output, prepared }\n}\n/** Earlier chunks are acknowledged; pendingResults includes the uncertain failed chunk. */\nexport class BulkUploadError extends EvaluationAPIError {\n readonly failedIndex: number\n readonly #completed: BulkUploadReceipt\n readonly #pending: readonly EvaluationResult[]\n readonly #failed: string\n constructor(\n cause: EvaluationAPIError,\n completed: BulkUploadReceipt,\n failed: Chunk,\n pending: readonly EvaluationResult[]\n ) {\n super(cause)\n this.name = 'BulkUploadError'\n this.failedIndex = failed.start\n this.#completed = copy(completed)\n this.#pending = pending.slice()\n this.#failed = failed.body\n }\n get completed(): BulkUploadReceipt {\n return copy(this.#completed)\n }\n get pendingResults(): readonly EvaluationResult[] {\n return this.#pending.slice()\n }\n get failedChunk(): WireObject {\n return JSON.parse(this.#failed) as WireObject\n }\n}\n\nexport class Experiment {\n readonly id: string\n readonly #transport: Transport\n readonly #base: string\n readonly #queue = new OperationQueue()\n readonly #submission?: string\n #receipt?: ExperimentReceipt\n constructor(transport: Transport, id: string, receipt?: ExperimentReceipt, submission?: string) {\n this.id = uuid(id)\n this.#transport = transport\n this.#receipt = receipt\n this.#submission = submission\n this.#base = `/api/projects/${transport.projectId}/ai_observability/offline_experiments/${this.id}/`\n Object.freeze(this)\n }\n get receipt(): ExperimentReceipt | undefined {\n return this.#receipt === undefined ? undefined : copy(this.#receipt)\n }\n /** Original creation options, suitable for createExperiment(submission). Large counts may be bigint. */\n get submission(): ExperimentOptions | undefined {\n return this.#submission === undefined ? undefined : submissionOptions(object(decode(this.#submission)))\n }\n async uploadResult(options: EvaluationResultOptions, request: RequestOptions = {}): Promise<UploadReceipt> {\n const chunk = chunks([new EvaluationResult(options)]).chunks[0]\n return this.#queue.run(() => this.#upload(chunk, request), request.signal)\n }\n async #upload(chunk: Chunk, request: RequestOptions): Promise<UploadReceipt> {\n return parseResponse(\n await this.#transport.request('POST', `${this.#base}upload/`, {\n ...request,\n body: chunk.body,\n retrySafe: true,\n }),\n (data) => uploadReceipt(data, chunk.results)\n )\n }\n async uploadResults(results: readonly EvaluationResult[], request: RequestOptions = {}): Promise<BulkUploadReceipt> {\n const prepared = chunks(results)\n return this.#queue.run(async () => {\n const receipts: UploadReceipt[] = []\n for (const chunk of prepared.chunks) {\n try {\n receipts.push(await this.#upload(chunk, request))\n } catch (error) {\n if (!(error instanceof EvaluationAPIError)) throw error\n throw new BulkUploadError(error, { chunks: receipts }, chunk, prepared.prepared.slice(chunk.start))\n }\n }\n return { chunks: receipts }\n }, request.signal)\n }\n async complete(request: RequestOptions = {}): Promise<ExperimentReceipt> {\n return this.#finish('complete', request)\n }\n async fail(request: RequestOptions = {}): Promise<ExperimentReceipt> {\n return this.#finish('fail', request)\n }\n async #finish(action: 'complete' | 'fail', request: RequestOptions): Promise<ExperimentReceipt> {\n return this.#queue.run(async () => {\n const receipt = parseResponse(\n await this.#transport.request('POST', `${this.#base}${action}/`, {\n ...request,\n body: '{}',\n retrySafe: true,\n }),\n (data) => {\n const result = experimentReceipt(data, this.id)\n if (result.status !== (action === 'complete' ? 'completed' : 'failed'))\n throw new TypeError('Unexpected experiment status.')\n return result\n }\n )\n this.#receipt = copy(receipt)\n return receipt\n }, request.signal)\n }\n async getTags(request: RequestOptions = {}): Promise<string[]> {\n return this.#tags('GET', undefined, request)\n }\n async setTags(names: readonly string[], request: RequestOptions = {}): Promise<string[]> {\n return this.#tags('PATCH', encode({ tags: tags(names) }), request)\n }\n async #tags(method: string, body: string | undefined, request: RequestOptions): Promise<string[]> {\n return this.#queue.run(\n async () =>\n parseResponse(await this.#transport.request(method, this.#base, { ...request, body }), (data) => {\n if (uuid(data.id) !== this.id) throw new TypeError('Mismatched experiment.')\n return responseTags(data.tags)\n }),\n request.signal\n )\n }\n}\nfunction submissionOptions(data: WireObject): ExperimentOptions {\n const result: WireObject = { name: data.name, id: data.id, startedAt: data.started_at }\n for (const [key, wire] of Object.entries({\n ...EXPERIMENT_TEXT,\n runSource: 'run_source',\n expectedItemCount: 'expected_item_count',\n expectedResultCount: 'expected_result_count',\n datasetRevisionId: 'dataset_revision_id',\n }))\n if (Object.hasOwn(data, wire)) result[key] = data[wire]\n return result as unknown as ExperimentOptions\n}\n/** Acknowledged management APIs, independent of analytics capture and flush. */\nexport class OfflineEvaluations {\n readonly datasets: Datasets\n readonly scorers: Scorers\n readonly #transport: Transport\n constructor(options: OfflineEvaluationsOptions) {\n this.#transport = new Transport(options)\n this.datasets = new Datasets(this.#transport)\n this.scorers = new Scorers(this.#transport)\n Object.freeze(this)\n }\n async createExperiment(options: ExperimentOptions, request: RequestOptions = {}): Promise<Experiment> {\n const signal = request.signal,\n body = experimentBody(options),\n submission = object(decode(body)),\n id = uuid(submission.id)\n try {\n const data = await this.#transport.request(\n 'POST',\n `/api/projects/${this.#transport.projectId}/ai_observability/offline_experiments/`,\n { ...request, body, retrySafe: true }\n )\n return new Experiment(\n this.#transport,\n id,\n parseResponse(data, (value) => experimentReceipt(value, id)),\n body\n )\n } catch (error) {\n if (signal?.aborted && Object.is(error, signal.reason))\n throw new ExperimentCreationAbortedError(error, submissionOptions(submission))\n if (!(error instanceof EvaluationAPIError)) throw error\n throw new EvaluationAPIError({\n ...error,\n detail: error.detail,\n errors: error.errors,\n response: error.response,\n submission: submissionOptions(submission),\n })\n }\n }\n /** Local only; existence and permissions are checked on the next network operation. */\n resumeExperiment(id: string): Experiment {\n return new Experiment(this.#transport, id)\n }\n /** Stop owned requests and timers. This never completes or fails experiments. */\n close(): void {\n this.#transport.close()\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["#cause","#submission","#errors","#transport","#base","#items","#request","#state","#itemState","#datasets","#dataset","randomUUID","#transport","#base","#request","#host","#secret","#timeout","#retries","#closed","#tail","randomUUID","#completed","#pending","#failed","#transport","#base","#queue","#submission","#receipt","#upload","#finish","#tags"],"sources":["../../src/evaluations/serialization.ts","../../src/evaluations/errors.ts","../../src/evaluations/datasets.ts","../../src/evaluations/declarations.ts","../../src/evaluations/scorers.ts","../../src/evaluations/transport.ts","../../src/evaluations/client.ts"],"sourcesContent":["/** JSON accepted in evaluation payloads. No implicit toJSON or string conversion. */\nexport type JSONValue = null | boolean | number | string | JSONValue[] | { [key: string]: JSONValue }\nexport type JSONObject = { [key: string]: JSONValue }\n/** Large signed-64-bit counts use bigint; safe counts are returned as numbers. */\nexport type EvaluationCount = number | bigint\nexport type WireObject = Record<string, unknown>\n\nexport function object(value: unknown): WireObject {\n if (value === null || typeof value !== 'object' || Array.isArray(value)) throw new TypeError('Expected an object.')\n const proto = Object.getPrototypeOf(value)\n if (proto !== Object.prototype && proto !== null) throw new TypeError('Expected a plain object.')\n return value as WireObject\n}\n\nexport function text(value: unknown): string {\n if (typeof value !== 'string') throw new TypeError('Expected a string.')\n // Reject NUL and lone UTF-16 surrogates instead of silently repairing content.\n for (let i = 0; i < value.length; i++) {\n const c = value.charCodeAt(i)\n if (c === 0) throw new TypeError('Strings cannot contain null characters.')\n if (c >= 0xd800 && c <= 0xdbff) {\n const next = value.charCodeAt(++i)\n if (!(next >= 0xdc00 && next <= 0xdfff)) throw new TypeError('Strings must contain valid Unicode.')\n } else if (c >= 0xdc00 && c <= 0xdfff) throw new TypeError('Strings must contain valid Unicode.')\n }\n return value\n}\nexport function identifier(value: unknown, max = 255): string {\n const result = text(value)\n if (!result || [...result].length > max)\n throw new TypeError(`Expected a nonempty identifier of at most ${max} characters.`)\n return result\n}\nexport function integer(value: unknown, minimum = 1, maximum = Number.MAX_SAFE_INTEGER): number {\n if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < minimum || value > maximum) {\n throw new TypeError(`Expected a safe integer between ${minimum} and ${maximum}.`)\n }\n return value\n}\nexport function count(value: unknown): EvaluationCount {\n if (typeof value === 'bigint') {\n if (value < 0n || value > 9223372036854775807n)\n throw new TypeError('Count must fit a nonnegative signed 64-bit integer.')\n return value <= BigInt(Number.MAX_SAFE_INTEGER) ? Number(value) : value\n }\n return integer(value, 0)\n}\nexport function boolean(value: unknown): boolean {\n if (typeof value !== 'boolean') throw new TypeError('Expected a boolean.')\n return value\n}\nexport function uuid(value: unknown): string {\n const raw = text(value)\n .replace(/^urn:uuid:/i, '')\n .replace(/^\\{(.*)\\}$/, '$1')\n .replace(/-/g, '')\n if (!/^[0-9a-f]{32}$/i.test(raw)) throw new TypeError('Expected a UUID.')\n return `${raw.slice(0, 8)}-${raw.slice(8, 12)}-${raw.slice(12, 16)}-${raw.slice(16, 20)}-${raw.slice(20)}`.toLowerCase()\n}\nexport function timestamp(value: unknown): string {\n if (value instanceof Date) {\n if (!Number.isFinite(value.getTime())) throw new TypeError('Expected a valid timestamp.')\n return value.toISOString()\n }\n const raw = text(value)\n const match = /^(\\d{4}-\\d{2}-\\d{2})[T ](\\d{2}:\\d{2}:\\d{2})(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})$/.exec(raw)\n if (!match) throw new TypeError('Timestamps must include a timezone.')\n const date = new Date(`${match[1]}T${match[2]}${match[4]}`)\n // Check the calendar component separately: Date.parse accepts February 30.\n const day = new Date(`${match[1]}T00:00:00Z`)\n if (\n !Number.isFinite(date.getTime()) ||\n !Number.isFinite(day.getTime()) ||\n day.toISOString().slice(0, 10) !== match[1] ||\n match[2].startsWith('24:')\n ) {\n throw new TypeError('Expected a valid timestamp.')\n }\n return date.toISOString().replace('.000Z', `${match[3] ?? '.000'}Z`)\n}\n\nexport function json(value: unknown, depth = 1, ancestors = new Set<unknown>()): JSONValue {\n if (value === null || typeof value === 'boolean') return value\n if (typeof value === 'string') return text(value)\n if (typeof value === 'number') {\n if (!Number.isFinite(value)) throw new TypeError('JSON numbers must be finite.')\n return value\n }\n if (typeof value !== 'object') throw new TypeError('Expected JSON values without automatic conversion.')\n if (depth > 32 || ancestors.has(value)) throw new TypeError('JSON must be acyclic and at most 32 containers deep.')\n ancestors.add(value)\n try {\n if (Array.isArray(value)) {\n if (\n Reflect.ownKeys(value).some(\n (key) =>\n key !== 'length' && (typeof key !== 'string' || !/^(0|[1-9]\\d*)$/.test(key) || Number(key) >= value.length)\n )\n )\n throw new TypeError('Unexpected array property.')\n const result: JSONValue[] = []\n for (let i = 0; i < value.length; i++) {\n const d = Object.getOwnPropertyDescriptor(value, String(i))\n if (!d || !('value' in d)) throw new TypeError('Sparse arrays and accessors are not JSON.')\n result.push(json(d.value, depth + 1, ancestors))\n }\n return result\n }\n const source = object(value)\n return Object.fromEntries(\n Reflect.ownKeys(source).map((key) => {\n if (typeof key !== 'string') throw new TypeError('JSON keys must be strings.')\n text(key)\n const d = Object.getOwnPropertyDescriptor(source, key)!\n if (!('value' in d) || !d.enumerable)\n throw new TypeError('JSON objects must contain enumerable data properties.')\n return [key, json(d.value, depth + 1, ancestors)]\n })\n )\n } finally {\n ancestors.delete(value)\n }\n}\nexport function metadata(value: unknown): JSONObject {\n return json(object(value)) as JSONObject\n}\n\n/** Convert losslessly decoded response integers only when JavaScript can retain their value. */\nexport function responseJSON(value: unknown): JSONValue {\n function convert(current: unknown): unknown {\n if (typeof current === 'bigint') {\n const number = Number(current)\n if (!Number.isFinite(number) || BigInt(number) !== current)\n throw new TypeError('Response JSON integer cannot be represented exactly.')\n return number\n }\n if (Array.isArray(current)) return current.map(convert)\n if (current !== null && typeof current === 'object')\n return Object.fromEntries(Object.entries(object(current)).map(([key, v]) => [key, convert(v)]))\n return current\n }\n return json(convert(value))\n}\nexport function responseMetadata(value: unknown): JSONObject {\n object(value)\n return responseJSON(value) as JSONObject\n}\n\n/** Internal codec: bigint is allowed only after validation of designated count fields. */\nexport function encode(value: unknown): string {\n if (typeof value === 'bigint') return value.toString()\n // JSON.stringify's shortest round-trip decimal can differ from the exact integer value.\n if (typeof value === 'number' && Number.isInteger(value)) return BigInt(value).toString()\n if (Array.isArray(value)) return `[${value.map(encode).join(',')}]`\n if (value !== null && typeof value === 'object') {\n return `{${Object.keys(value)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${encode((value as WireObject)[key])}`)\n .join(',')}}`\n }\n const encoded = JSON.stringify(value)\n if (encoded === undefined) throw new TypeError('Cannot encode undefined.')\n return encoded\n}\n\n/** Preserve integer tokens before JSON.parse can round signed-64-bit counters. */\nexport function decode(source: string): unknown {\n JSON.parse(source) // Use the native parser to validate the complete grammar first.\n const tokens = source.match(/\"(?:\\\\[\\s\\S]|[^\"\\\\])*\"|-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?|true|false|null|[{}[\\]:,]/g)!\n let i = 0\n function read(depth: number): unknown {\n if (depth > 256) throw new TypeError('Response JSON nesting is too deep.')\n const token = tokens[i++]\n if (token === '{') {\n const entries: [string, unknown][] = []\n while (tokens[i] !== '}') {\n const key = JSON.parse(tokens[i++]) as string\n i++\n entries.push([key, read(depth + 1)])\n if (tokens[i] !== ',') break\n i++\n }\n i++\n return Object.fromEntries(entries)\n }\n if (token === '[') {\n const values: unknown[] = []\n while (tokens[i] !== ']') {\n values.push(read(depth + 1))\n if (tokens[i] !== ',') break\n i++\n }\n i++\n return values\n }\n if (/^-?\\d+$/.test(token)) {\n const exact = BigInt(token)\n if (exact > BigInt(Number.MAX_SAFE_INTEGER) || exact < BigInt(Number.MIN_SAFE_INTEGER)) return exact\n }\n return JSON.parse(token) as unknown\n }\n return read(0)\n}\nexport function copy<T>(value: T): T {\n return structuredClone(value)\n}\nexport function bytes(value: string): number {\n return new TextEncoder().encode(value).length\n}\nexport function keys(value: object, allowed: readonly string[]): void {\n for (const key of Reflect.ownKeys(value)) {\n if (typeof key !== 'string' || !allowed.includes(key)) throw new TypeError('Unsupported option.')\n const d = Object.getOwnPropertyDescriptor(value, key)!\n if (!('value' in d)) throw new TypeError('Options cannot contain accessors.')\n }\n}\nexport function defined(value: WireObject): WireObject {\n return Object.fromEntries(Object.entries(value).filter(([, v]) => v !== undefined))\n}\nexport function nullable<T>(value: unknown, parse: (v: unknown) => T): T | null {\n return value === null ? null : parse(value)\n}\nexport function tags(value: unknown, limit = 100): string[] {\n if (!Array.isArray(value) || value.length > limit) throw new TypeError(`Expected at most ${limit} tag names.`)\n for (let i = 0; i < value.length; i++) {\n if (!Object.hasOwn(value, i)) throw new TypeError('Tag lists cannot be sparse.')\n }\n return value.map((v) => {\n const s = text(v)\n identifier(s.trim())\n return s\n })\n}\nexport function responseTags(value: unknown): string[] {\n if (!Array.isArray(value)) throw new TypeError('Expected tags.')\n return value.map(text)\n}\nexport function tagParams(value: readonly string[] | undefined, match: 'any' | 'all' = 'any'): WireObject {\n if (match !== 'any' && match !== 'all') throw new TypeError('Unsupported tag matching mode.')\n return defined({\n tags: value === undefined ? undefined : encode(tags(value, 20)),\n tag_match: value !== undefined || match !== 'any' ? match : undefined,\n })\n}\nexport function pageParams(limit: number, offset: number, maximum = 100): WireObject {\n return { limit: integer(limit, 1, maximum), offset: integer(offset, 0) }\n}\nexport function nextOffset(value: unknown, offset: number): number | null {\n if (value === null) return null\n const params = new URL(text(value), 'https://pagination.invalid').searchParams.getAll('offset')\n if (params.length !== 1 || !/^\\d+$/.test(params[0])) throw new TypeError('Invalid page continuation.')\n return integer(Number(params[0]), offset + 1)\n}\nexport interface Page<T> {\n count: EvaluationCount\n results: T[]\n nextOffset: number | null\n}\nexport function page<T>(data: WireObject, parse: (value: WireObject) => T, offset: number): Page<T> {\n if (!Array.isArray(data.results)) throw new TypeError('Expected page results.')\n const results = data.results.map((v) => parse(object(v)))\n const next = nextOffset(data.next, offset)\n if (next !== null && results.length === 0) throw new TypeError('Empty page has a continuation.')\n return { count: count(data.count), results, nextOffset: next }\n}\n","import type { ExperimentOptions } from './client'\nimport { copy, type WireObject } from './serialization'\n\nexport type Persistence = 'not_sent' | 'rejected' | 'unknown'\nexport interface EvaluationErrorFields {\n status?: number\n code?: string\n detail?: unknown\n attr?: string\n errors?: unknown\n response?: WireObject\n /** Retry-After in seconds. */\n retryAfter?: number\n persistence?: Persistence\n submission?: ExperimentOptions\n}\n/** Native cancellation with the prepared creation fields needed for recovery. */\nexport class ExperimentCreationAbortedError extends DOMException {\n declare readonly cause: unknown\n readonly #cause: unknown\n readonly #submission: ExperimentOptions\n constructor(cause: unknown, submission: ExperimentOptions) {\n super('Offline evaluation creation was cancelled.', cause instanceof DOMException ? cause.name : 'AbortError')\n this.#cause = cause\n this.#submission = copy(submission)\n // Node inspects `cause` specially; an own accessor keeps it safe to log across supported versions.\n Object.defineProperty(this, 'cause', { get: () => this.#cause, enumerable: false })\n }\n get submission(): ExperimentOptions {\n return copy(this.#submission)\n }\n}\n/** An operation did not receive a valid acknowledgment. Inspect persistence before recovery. */\nexport class EvaluationAPIError extends Error {\n declare readonly errors: unknown\n readonly status?: number\n readonly code?: string\n readonly detail?: unknown\n readonly attr?: string\n readonly response?: WireObject\n readonly retryAfter?: number\n persistence: Persistence\n readonly #errors?: unknown\n #submission?: ExperimentOptions\n constructor(fields: EvaluationErrorFields = {}) {\n super(\n `Offline evaluation request failed (${fields.status === undefined ? 'no acknowledgment' : `HTTP ${fields.status}`}).`\n )\n this.name = 'EvaluationAPIError'\n this.status = fields.status\n this.code = fields.code\n this.detail = fields.detail === undefined ? undefined : copy(fields.detail)\n this.attr = fields.attr\n this.#errors = fields.errors === undefined ? undefined : copy(fields.errors)\n this.response = fields.response === undefined ? undefined : copy(fields.response)\n this.retryAfter = fields.retryAfter\n this.persistence = fields.persistence ?? 'unknown'\n this.#submission = fields.submission === undefined ? undefined : copy(fields.submission)\n // Logging an Error should not accidentally log evaluation payloads or credentials.\n for (const key of ['detail', 'response']) Object.defineProperty(this, key, { enumerable: false })\n // Node specially inspects array-valued `errors`; an own accessor avoids logging its contents.\n Object.defineProperty(this, 'errors', {\n get: () => (this.#errors === undefined ? undefined : copy(this.#errors)),\n enumerable: false,\n })\n }\n get submission(): ExperimentOptions | undefined {\n return this.#submission === undefined ? undefined : copy(this.#submission)\n }\n}\nexport function parseResponse<T>(data: WireObject, parser: (value: WireObject) => T): T {\n try {\n return parser(data)\n } catch {\n throw new EvaluationAPIError({ code: 'invalid_response', response: data })\n }\n}\n","import { parseResponse } from './errors'\nimport {\n boolean,\n defined,\n encode,\n identifier,\n integer,\n json,\n keys,\n metadata,\n nullable,\n page,\n pageParams,\n responseTags,\n responseJSON,\n responseMetadata,\n tagParams,\n tags,\n text,\n timestamp,\n uuid,\n type JSONObject,\n type JSONValue,\n type Page,\n type WireObject,\n} from './serialization'\nimport { Transport, type RequestOptions } from './transport'\n\ninterface Audit {\n createdAt: string\n createdBy: JSONObject | null\n teamId: number\n}\nexport interface Dataset extends Audit {\n id: string\n name: string\n description: string\n metadata: JSONObject\n tags: string[]\n archived: boolean\n currentRevision: number | null\n currentRevisionId: string | null\n updatedAt: string | null\n}\nexport interface DatasetRevision extends Audit {\n id: string\n datasetId: string\n revision: number\n}\nexport interface DatasetItem extends Audit {\n id: string\n datasetId: string\n clientItemId: string | null\n version: number\n versionId: string\n datasetRevision: number\n datasetRevisionId: string\n archived: boolean\n input: JSONValue\n expectedOutput: JSONValue\n sourceOutput: JSONValue\n metadata: JSONObject\n sourceTraceId: string | null\n sourceEventId: string | null\n sourceTimestamp: string | null\n updatedAt: string | null\n versionCreatedAt: string\n versionCreatedBy: JSONObject | null\n}\nexport type DatasetPage = Page<Dataset>\nexport type DatasetRevisionPage = Page<DatasetRevision>\nexport type DatasetItemPage = Page<DatasetItem>\nexport type DatasetOrder = 'created_at' | '-created_at' | 'updated_at' | '-updated_at'\nexport interface DatasetMetadata {\n name?: string\n description?: string\n metadata?: JSONObject\n tags?: readonly string[]\n}\nexport interface PageOptions extends RequestOptions {\n limit?: number\n offset?: number\n}\nexport interface DatasetListOptions extends PageOptions {\n search?: string\n archived?: boolean\n orderBy?: DatasetOrder\n tags?: readonly string[]\n tagMatch?: 'any' | 'all'\n}\nexport interface ItemListOptions extends PageOptions {\n revision?: number\n archived?: boolean\n}\nexport interface CreateDatasetItemOptions {\n input: Exclude<JSONValue, null>\n expectedOutput?: JSONValue\n sourceOutput?: JSONValue\n metadata?: JSONObject\n clientItemId?: string | null\n sourceTraceId?: string | null\n sourceEventId?: string | null\n sourceTimestamp?: string | Date | null\n}\nexport interface UpdateDatasetItemOptions {\n baseVersion: number\n input?: Exclude<JSONValue, null>\n expectedOutput?: JSONValue\n metadata?: JSONObject\n}\nfunction audit(data: WireObject, project: number): Audit {\n if (integer(data.team_id) !== project) throw new TypeError('Response belongs to another project.')\n return {\n createdAt: timestamp(data.created_at),\n createdBy: nullable(data.created_by, responseMetadata),\n teamId: project,\n }\n}\nfunction dataset(data: WireObject, project: number, id?: string): Dataset {\n const identity = uuid(data.id)\n if (id !== undefined && identity !== id) throw new TypeError('Mismatched dataset.')\n if ((data.current_revision === null) !== (data.current_revision_id === null))\n throw new TypeError('Incomplete revision reference.')\n return {\n ...audit(data, project),\n id: identity,\n name: text(data.name),\n description: text(data.description),\n metadata: responseMetadata(data.metadata),\n tags: responseTags(data.tags === undefined ? [] : data.tags),\n archived: boolean(data.archived),\n currentRevision: nullable(data.current_revision, integer),\n currentRevisionId: nullable(data.current_revision_id, uuid),\n updatedAt: nullable(data.updated_at, timestamp),\n }\n}\nfunction revision(data: WireObject, project: number, datasetId: string): DatasetRevision {\n if (uuid(data.dataset_id) !== datasetId) throw new TypeError('Mismatched revision dataset.')\n return { ...audit(data, project), id: uuid(data.id), datasetId, revision: integer(data.revision) }\n}\nfunction item(\n data: WireObject,\n project: number,\n scope: { id?: string; datasetId?: string; revision?: number; archived?: boolean } = {}\n): DatasetItem {\n const id = uuid(data.id),\n datasetId = uuid(data.dataset),\n introduced = integer(data.dataset_revision),\n archived = boolean(data.archived)\n if (\n (scope.id !== undefined && scope.id !== id) ||\n (scope.datasetId !== undefined && scope.datasetId !== datasetId) ||\n (scope.revision !== undefined && introduced > scope.revision) ||\n (scope.archived !== undefined && archived !== scope.archived)\n )\n throw new TypeError('Item is outside requested scope.')\n if (data.input === null) throw new TypeError('Dataset input cannot be null.')\n return {\n ...audit(data, project),\n id,\n datasetId,\n datasetRevision: introduced,\n archived,\n clientItemId: nullable(data.client_item_id, identifier),\n version: integer(data.version),\n versionId: uuid(data.version_id),\n datasetRevisionId: uuid(data.dataset_revision_id),\n input: responseJSON(data.input),\n expectedOutput: responseJSON(data.expected_output),\n sourceOutput: responseJSON(data.source_output),\n metadata: responseMetadata(data.metadata),\n sourceTraceId: nullable(data.source_trace_id, identifier),\n sourceEventId: nullable(data.source_event_id, identifier),\n sourceTimestamp: nullable(data.source_timestamp, timestamp),\n updatedAt: nullable(data.updated_at, timestamp),\n versionCreatedAt: timestamp(data.version_created_at),\n versionCreatedBy: nullable(data.version_created_by, responseMetadata),\n }\n}\nfunction body(fields: WireObject): string {\n const data = defined(fields)\n for (const key of ['name', 'description']) {\n if (Object.hasOwn(data, key)) {\n const value = text(data[key]),\n maximum = key === 'name' ? 400 : 10000\n if ([...value].length > maximum || (key === 'name' && !value.trim()))\n throw new TypeError('Invalid dataset metadata.')\n }\n }\n if (Object.hasOwn(data, 'input') && data.input === null) throw new TypeError('Dataset input cannot be null.')\n if (Object.hasOwn(data, 'metadata')) metadata(data.metadata)\n if (Object.hasOwn(data, 'tags')) data.tags = tags(data.tags)\n return encode(json(data))\n}\nconst METADATA_KEYS = ['name', 'description', 'metadata', 'tags']\nconst ITEM_KEYS = [\n 'input',\n 'expectedOutput',\n 'sourceOutput',\n 'metadata',\n 'clientItemId',\n 'sourceTraceId',\n 'sourceEventId',\n 'sourceTimestamp',\n]\n\n/** Dataset management. Writes require a personal key with dataset:write. */\nexport class Datasets {\n readonly #transport: Transport\n readonly #base: string\n readonly #items: string\n constructor(transport: Transport) {\n this.#transport = transport\n this.#base = `/api/projects/${transport.projectId}/datasets/`\n this.#items = `/api/projects/${transport.projectId}/dataset_items/`\n }\n async #request<T>(\n method: string,\n path: string,\n parse: (data: WireObject) => T,\n options: RequestOptions & { body?: string; params?: WireObject; retrySafe?: boolean }\n ): Promise<T> {\n return parseResponse(await this.#transport.request(method, path, options), parse)\n }\n async create(options: DatasetMetadata & { name: string }, request: RequestOptions = {}): Promise<Dataset> {\n keys(options, METADATA_KEYS)\n if (options.name === undefined) throw new TypeError('Dataset name is required.')\n return this.#request('POST', this.#base, (data) => dataset(data, this.#transport.projectId), {\n ...request,\n body: body({ ...options }),\n })\n }\n async get(datasetId: string, request: RequestOptions = {}): Promise<Dataset> {\n const id = uuid(datasetId)\n return this.#request('GET', `${this.#base}${id}/`, (data) => dataset(data, this.#transport.projectId, id), request)\n }\n async list(options: DatasetListOptions = {}): Promise<DatasetPage> {\n const { limit = 50, offset = 0, archived = false, orderBy = '-created_at' } = options\n if (!['created_at', '-created_at', 'updated_at', '-updated_at'].includes(orderBy))\n throw new TypeError('Invalid dataset order.')\n const params = {\n ...pageParams(limit, offset),\n ...tagParams(options.tags, options.tagMatch),\n archived: String(boolean(archived)),\n order_by: orderBy,\n }\n if (options.search !== undefined && !text(options.search).trim()) throw new TypeError('Search cannot be blank.')\n return this.#request(\n 'GET',\n this.#base,\n (data) => page(data, (row) => dataset(row, this.#transport.projectId), offset),\n { signal: options.signal, params: { ...params, ...defined({ search: options.search }) } }\n )\n }\n async update(datasetId: string, options: DatasetMetadata, request: RequestOptions = {}): Promise<Dataset> {\n const id = uuid(datasetId)\n keys(options, METADATA_KEYS)\n return this.#request('PATCH', `${this.#base}${id}/`, (data) => dataset(data, this.#transport.projectId, id), {\n ...request,\n body: body({ ...options }),\n })\n }\n async archive(datasetId: string, request: RequestOptions = {}): Promise<Dataset> {\n return this.#state(datasetId, 'archive', request)\n }\n async restore(datasetId: string, request: RequestOptions = {}): Promise<Dataset> {\n return this.#state(datasetId, 'restore', request)\n }\n async #state(datasetId: string, action: string, request: RequestOptions): Promise<Dataset> {\n const id = uuid(datasetId)\n return this.#request(\n 'POST',\n `${this.#base}${id}/${action}/`,\n (data) => dataset(data, this.#transport.projectId, id),\n { ...request, body: '{}' }\n )\n }\n async listRevisions(datasetId: string, options: PageOptions = {}): Promise<DatasetRevisionPage> {\n const id = uuid(datasetId),\n { limit = 50, offset = 0 } = options\n return this.#request(\n 'GET',\n `${this.#base}${id}/revisions/`,\n (data) => page(data, (row) => revision(row, this.#transport.projectId, id), offset),\n { signal: options.signal, params: pageParams(limit, offset) }\n )\n }\n async listItems(datasetId: string, options: ItemListOptions = {}): Promise<DatasetItemPage> {\n const id = uuid(datasetId),\n { limit = 25, offset = 0, archived = false, revision: selectedRevision } = options\n const params = {\n ...pageParams(limit, offset, 25),\n dataset: id,\n archived: String(boolean(archived)),\n ...defined({ revision: selectedRevision === undefined ? undefined : integer(selectedRevision) }),\n }\n return this.#request(\n 'GET',\n this.#items,\n (data) =>\n page(\n data,\n (row) => item(row, this.#transport.projectId, { datasetId: id, revision: selectedRevision, archived }),\n offset\n ),\n { signal: options.signal, params }\n )\n }\n async getItem(itemId: string, options: RequestOptions & { revision?: number } = {}): Promise<DatasetItem> {\n const id = uuid(itemId),\n selectedRevision = options.revision\n const params = defined({ revision: selectedRevision === undefined ? undefined : integer(selectedRevision) })\n return this.#request(\n 'GET',\n `${this.#items}${id}/`,\n (data) => item(data, this.#transport.projectId, { id, revision: selectedRevision }),\n { signal: options.signal, params }\n )\n }\n async createItem(\n datasetId: string,\n options: CreateDatasetItemOptions,\n request: RequestOptions = {}\n ): Promise<DatasetItem> {\n const id = uuid(datasetId)\n keys(options, ITEM_KEYS)\n if (options.input === undefined) throw new TypeError('Dataset input is required.')\n const clientId = options.clientItemId == null ? null : identifier(options.clientItemId)\n const trace = options.sourceTraceId == null ? null : identifier(options.sourceTraceId)\n const event = options.sourceEventId == null ? null : identifier(options.sourceEventId)\n const time = options.sourceTimestamp == null ? null : timestamp(options.sourceTimestamp)\n if ((trace === null) !== (time === null) || (event !== null && trace === null))\n throw new TypeError('Source provenance requires a trace and timezone-qualified timestamp.')\n const prepared = body({\n dataset: id,\n input: options.input,\n expected_output: options.expectedOutput,\n source_output: options.sourceOutput,\n metadata: options.metadata,\n client_item_id: clientId,\n source_trace_id: trace,\n source_event_id: event,\n source_timestamp: time,\n })\n return this.#request(\n 'POST',\n this.#items,\n (data) => item(data, this.#transport.projectId, { datasetId: id, archived: false }),\n { ...request, body: prepared, retrySafe: clientId !== null }\n )\n }\n async updateItem(\n itemId: string,\n options: UpdateDatasetItemOptions,\n request: RequestOptions = {}\n ): Promise<DatasetItem> {\n const id = uuid(itemId)\n keys(options, ['baseVersion', 'input', 'expectedOutput', 'metadata'])\n const prepared = body({\n base_version: integer(options.baseVersion),\n input: options.input,\n expected_output: options.expectedOutput,\n metadata: options.metadata,\n })\n return this.#request(\n 'PATCH',\n `${this.#items}${id}/`,\n (data) => item(data, this.#transport.projectId, { id, archived: false }),\n { ...request, body: prepared }\n )\n }\n async archiveItem(\n itemId: string,\n options: { baseVersion: number },\n request: RequestOptions = {}\n ): Promise<DatasetItem> {\n keys(options, ['baseVersion'])\n return this.#itemState(itemId, 'archive', { base_version: integer(options.baseVersion) }, request)\n }\n async restoreItem(\n itemId: string,\n options: { baseVersion: number; sourceVersion?: number },\n request: RequestOptions = {}\n ): Promise<DatasetItem> {\n keys(options, ['baseVersion', 'sourceVersion'])\n return this.#itemState(\n itemId,\n 'restore',\n {\n base_version: integer(options.baseVersion),\n source_version: options.sourceVersion === undefined ? null : integer(options.sourceVersion),\n },\n request\n )\n }\n async #itemState(itemId: string, action: string, fields: WireObject, request: RequestOptions): Promise<DatasetItem> {\n const id = uuid(itemId)\n return this.#request(\n 'POST',\n `${this.#items}${id}/${action}/`,\n (data) => item(data, this.#transport.projectId, { id, archived: action === 'archive' }),\n { ...request, body: body(fields) }\n )\n }\n async listItemVersions(itemId: string, options: PageOptions = {}): Promise<DatasetItemPage> {\n const id = uuid(itemId),\n { limit = 25, offset = 0 } = options\n return this.#request(\n 'GET',\n `${this.#items}${id}/versions/`,\n (data) => page(data, (row) => item(row, this.#transport.projectId, { id }), offset),\n { signal: options.signal, params: pageParams(limit, offset) }\n )\n }\n async snapshot(datasetId: string, options: RequestOptions & { revision?: number } = {}): Promise<DatasetSnapshot> {\n const selectedRevision = options.revision\n if (selectedRevision !== undefined) integer(selectedRevision)\n const data = await this.get(datasetId, options),\n selected = selectedRevision ?? data.currentRevision\n if (selected === null) throw new TypeError('Dataset has no revision. Add an item first.')\n if (data.currentRevision === null || selected > data.currentRevision)\n throw new TypeError('Dataset revision does not exist.')\n if (selected === data.currentRevision && data.currentRevisionId !== null)\n return new DatasetSnapshot(this, data, selected, data.currentRevisionId)\n const candidate = await this.listRevisions(data.id, {\n limit: 1,\n offset: data.currentRevision - selected,\n signal: options.signal,\n })\n const found = candidate.results.find((r) => r.revision === selected)\n if (found) return new DatasetSnapshot(this, data, selected, found.id)\n let offset = 0\n for (;;) {\n const revisions = await this.listRevisions(data.id, { limit: 100, offset, signal: options.signal })\n const match = revisions.results.find((r) => r.revision === selected)\n if (match) return new DatasetSnapshot(this, data, selected, match.id)\n if (revisions.nextOffset === null || revisions.results.at(-1)!.revision < selected)\n throw new TypeError('Dataset revision does not exist.')\n offset = revisions.nextOffset\n }\n }\n}\n/** A repeatable, lazy read of active items at one immutable revision. Keep its client open. */\nexport class DatasetSnapshot implements AsyncIterable<DatasetItem> {\n readonly #datasets: Datasets\n readonly #dataset: Dataset\n readonly revision: number\n readonly revisionId: string\n constructor(datasets: Datasets, dataset: Dataset, revisionNumber: number, revisionId: string) {\n this.#datasets = datasets\n this.#dataset = structuredClone(dataset)\n this.revision = revisionNumber\n this.revisionId = revisionId\n Object.freeze(this)\n }\n get dataset(): Dataset {\n return structuredClone(this.#dataset)\n }\n async *iterItems(options: RequestOptions & { pageSize?: number } = {}): AsyncIterableIterator<DatasetItem> {\n const limit = integer(options.pageSize ?? 25, 1, 25)\n let offset = 0\n for (;;) {\n const result = await this.#datasets.listItems(this.#dataset.id, {\n revision: this.revision,\n archived: false,\n limit,\n offset,\n signal: options.signal,\n })\n for (const row of result.results) {\n options.signal?.throwIfAborted()\n yield row\n }\n if (result.nextOffset === null) return\n offset = result.nextOffset\n }\n }\n [Symbol.asyncIterator](): AsyncIterableIterator<DatasetItem> {\n return this.iterItems()\n }\n}\n","import { randomUUID } from 'node:crypto'\nimport {\n bytes,\n defined,\n encode,\n identifier,\n json,\n keys,\n metadata,\n object,\n timestamp,\n uuid,\n type JSONObject,\n type JSONValue,\n type WireObject,\n} from './serialization'\nimport type { DatasetItem } from './datasets'\n\nexport interface ItemPayload {\n input?: JSONValue\n output?: JSONValue\n expectedOutput?: JSONValue\n metadata?: JSONObject | null\n}\nexport interface ResultPayload {\n reasoning?: string | null\n errorMessage?: string | null\n metadata?: JSONObject | null\n}\ntype PayloadOptions<T> = (T & { payload?: never }) | ({ payload: T } & { [K in keyof T]?: never })\nexport interface ItemIdentifiers {\n id?: string\n /** Model used for this execution. Omitted or null inherits the experiment's model. */\n modelVersion?: string | null\n caseKey?: string | null\n trial?: string | null\n datasetItemIdentifier?: string | null\n datasetItemVersionIdentifier?: string | null\n datasetItemVersionId?: string | null\n applicationTraceId?: string | null\n}\nexport type EvaluationItemOptions = ItemIdentifiers & PayloadOptions<ItemPayload>\nexport type ScoreValue = boolean | number | readonly string[]\n/** bigint inputs are converted only if exactly representable as finite binary64 scores. */\nexport type ScoreInput = ScoreValue | bigint\nexport type ResultStatus = 'ok' | 'error' | 'skipped' | 'not_applicable'\ntype Outcome =\n | ({ status?: 'ok'; value: ScoreInput; errorCode?: never } & PayloadOptions<\n Omit<ResultPayload, 'errorMessage'> & { errorMessage?: null }\n >)\n | ({ status: 'error'; value?: never; errorCode?: string } & PayloadOptions<ResultPayload>)\n | ({ status: 'skipped' | 'not_applicable'; value?: never; errorCode?: never } & PayloadOptions<\n Omit<ResultPayload, 'errorMessage'> & { errorMessage?: null }\n >)\nexport type EvaluationResultOptions = Outcome & {\n item: EvaluationItem | string\n scorerVersionId: string\n evaluatorTraceId?: string | null\n evaluatedAt?: string | Date | null\n}\nconst ITEM_FIELDS: Record<string, string> = {\n input: 'input',\n output: 'output',\n expectedOutput: 'expected_output',\n metadata: 'metadata',\n}\nconst RESULT_FIELDS: Record<string, string> = {\n reasoning: 'reasoning',\n errorMessage: 'error_message',\n metadata: 'metadata',\n}\nconst ITEM_IDS: Record<string, string> = {\n modelVersion: 'model_version',\n caseKey: 'case_key',\n trial: 'trial',\n datasetItemIdentifier: 'dataset_item_identifier',\n datasetItemVersionIdentifier: 'dataset_item_version_identifier',\n applicationTraceId: 'application_trace_id',\n}\nconst items = new WeakMap<EvaluationItem, string>()\nconst results = new WeakMap<EvaluationResult, string>()\n\nfunction payload(options: WireObject, fields: Record<string, string>, limit: number): WireObject | undefined {\n const supplied = Object.keys(fields).filter((key) => options[key] !== undefined)\n if (options.payload !== undefined && supplied.length)\n throw new TypeError('Supply payload or individual fields, not both.')\n if (options.payload === undefined && !supplied.length) return undefined\n const source =\n options.payload === undefined\n ? Object.fromEntries(supplied.map((key) => [key, options[key]]))\n : object(options.payload)\n keys(source, Object.keys(fields))\n const value = Object.fromEntries(\n Object.entries(source).map(([key, v]) => {\n if (key === 'metadata' && v !== null) metadata(v)\n if ((key === 'reasoning' || key === 'errorMessage') && v !== null && typeof v !== 'string')\n throw new TypeError('Expected a string or null.')\n return [fields[key], v]\n })\n )\n const snapshot = json(value) as WireObject\n if (bytes(encode(snapshot)) > limit) throw new TypeError('Evaluation payload exceeds its UTF-8 byte limit.')\n return snapshot\n}\nfunction restoredPayload(value: unknown, fields: Record<string, string>): WireObject {\n const source = object(value)\n keys(source, Object.values(fields))\n return Object.fromEntries(\n Object.entries(fields)\n .filter(([, wire]) => Object.hasOwn(source, wire))\n .map(([key, wire]) => [key, source[wire]])\n )\n}\nfunction score(value: unknown): boolean | number | string[] {\n if (typeof value === 'boolean') return value\n if (typeof value === 'bigint') {\n const result = Number(value)\n if (!Number.isFinite(result) || BigInt(result) !== value)\n throw new TypeError('Integer scores must be exactly representable as binary64.')\n return result\n }\n if (typeof value === 'number') {\n if (!Number.isFinite(value) || (Number.isInteger(value) && !Number.isSafeInteger(value)))\n throw new TypeError('Use bigint for exact integer scores outside the safe number range.')\n return value\n }\n if (!Array.isArray(value) || !value.length)\n throw new TypeError('Expected a boolean, finite number, or nonempty category list.')\n for (let i = 0; i < value.length; i++) {\n if (!Object.hasOwn(value, i)) throw new TypeError('Category lists cannot be sparse.')\n }\n const categories = value.map((v) => identifier(v, 128))\n if (new Set(categories).size !== categories.length) throw new TypeError('Category keys must be distinct.')\n // Python sorts Unicode code points; UTF-16's default sort differs for supplementary characters.\n return categories.sort((a, b) => {\n const aa = Array.from(a, (c) => c.codePointAt(0)!),\n bb = Array.from(b, (c) => c.codePointAt(0)!)\n for (let i = 0; i < Math.min(aa.length, bb.length); i++) if (aa[i] !== bb[i]) return aa[i] - bb[i]\n return aa.length - bb.length\n })\n}\n\n/** One immutable execution. Reuse across scorers; construct a new item for each trial. */\nexport class EvaluationItem {\n readonly id: string\n constructor(options: EvaluationItemOptions = {}) {\n object(options)\n keys(options, ['id', 'datasetItemVersionId', 'payload', ...Object.keys(ITEM_IDS), ...Object.keys(ITEM_FIELDS)])\n this.id = uuid(options.id ?? randomUUID())\n const body: WireObject = { id: this.id }\n for (const [key, wire] of Object.entries(ITEM_IDS)) {\n const value = (options as WireObject)[key]\n if (value !== undefined && value !== null) body[wire] = identifier(value)\n }\n if (options.datasetItemVersionId != null) body.dataset_item_version_id = uuid(options.datasetItemVersionId)\n const data = payload(options as WireObject, ITEM_FIELDS, 1024 * 1024)\n if (data !== undefined) body.payload = data\n items.set(this, encode(body))\n Object.freeze(this)\n }\n /** Detached wire-format object. Use toJSONString() for lossless cross-language persistence. */\n toJSON(): WireObject {\n return JSON.parse(itemJSON(this)) as WireObject\n }\n /** Exact wire JSON, including large integers. Restore with fromJSON(JSON.parse(saved)). */\n toJSONString(): string {\n return itemJSON(this)\n }\n static fromJSON(value: unknown): EvaluationItem {\n const data = object(value)\n keys(data, ['id', 'dataset_item_version_id', 'payload', ...Object.values(ITEM_IDS)])\n const options: WireObject = { id: uuid(data.id) }\n for (const [key, wire] of Object.entries(ITEM_IDS)) if (Object.hasOwn(data, wire)) options[key] = data[wire]\n if (Object.hasOwn(data, 'dataset_item_version_id')) options.datasetItemVersionId = data.dataset_item_version_id\n if (Object.hasOwn(data, 'payload')) options.payload = restoredPayload(data.payload, ITEM_FIELDS)\n return new EvaluationItem(options as EvaluationItemOptions)\n }\n static fromDatasetItem(\n item: DatasetItem,\n options: {\n output?: JSONValue\n id?: string\n modelVersion?: string | null\n caseKey?: string\n trial?: string\n applicationTraceId?: string\n } = {}\n ): EvaluationItem {\n if (item.archived !== false) throw new TypeError('Archived dataset items cannot be evaluated.')\n keys(options, ['output', 'id', 'modelVersion', 'caseKey', 'trial', 'applicationTraceId'])\n return new EvaluationItem({\n ...options,\n caseKey: options.caseKey ?? item.clientItemId ?? item.id,\n input: item.input,\n expectedOutput: item.expectedOutput,\n metadata: item.metadata,\n datasetItemIdentifier: uuid(item.id),\n datasetItemVersionIdentifier: uuid(item.versionId),\n datasetItemVersionId: item.versionId,\n })\n }\n}\n\n/** An evaluator outcome pinned to an exact scorer version. `ok` does not imply passing. */\nexport class EvaluationResult {\n readonly item: EvaluationItem | string\n readonly scorerVersionId: string\n readonly itemId: string\n constructor(options: EvaluationResultOptions) {\n object(options)\n keys(options, [\n 'item',\n 'scorerVersionId',\n 'status',\n 'value',\n 'errorCode',\n 'evaluatorTraceId',\n 'evaluatedAt',\n 'payload',\n ...Object.keys(RESULT_FIELDS),\n ])\n this.item = options.item instanceof EvaluationItem ? options.item : uuid(options.item)\n this.itemId = typeof this.item === 'string' ? this.item : this.item.id\n this.scorerVersionId = uuid(options.scorerVersionId)\n const status = options.status ?? 'ok'\n if (!['ok', 'error', 'skipped', 'not_applicable'].includes(status))\n throw new TypeError('Unsupported result status.')\n if (status !== 'ok' && options.value !== undefined && options.value !== null)\n throw new TypeError('Only ok results can contain a score.')\n if (status !== 'error' && options.errorCode != null)\n throw new TypeError('Only error results can contain an error code.')\n const body: WireObject = { item_id: this.itemId, scorer_version_id: this.scorerVersionId, status }\n if (status === 'ok') body.value = score(options.value)\n if (options.errorCode != null) body.error_code = identifier(options.errorCode, 128)\n if (options.evaluatorTraceId != null) body.evaluator_trace_id = identifier(options.evaluatorTraceId)\n if (options.evaluatedAt != null) body.evaluated_at = timestamp(options.evaluatedAt)\n const data = payload(options as WireObject, RESULT_FIELDS, 256 * 1024)\n if (data !== undefined) {\n if (status !== 'error' && data.error_message != null)\n throw new TypeError('Only error results can contain an error message.')\n body.payload = data\n }\n results.set(this, encode(body))\n Object.freeze(this)\n }\n /** Detached wire-format object. Use toJSONString() for lossless cross-language persistence. */\n toJSON(): WireObject {\n return JSON.parse(resultJSON(this)) as WireObject\n }\n /** Exact wire JSON. Save the attached item separately and restore with fromJSON(JSON.parse(saved), { item }). */\n toJSONString(): string {\n return resultJSON(this)\n }\n static fromJSON(value: unknown, options: { item?: EvaluationItem } = {}): EvaluationResult {\n const data = object(value)\n keys(data, [\n 'item_id',\n 'scorer_version_id',\n 'status',\n 'value',\n 'error_code',\n 'evaluator_trace_id',\n 'evaluated_at',\n 'payload',\n ])\n const itemId = uuid(data.item_id)\n if (options.item !== undefined && options.item.id !== itemId)\n throw new TypeError('Restored item identity does not match.')\n // Saved binary64 numbers are already the acknowledged representation. Large exact integers\n // use the explicit bigint input path to distinguish restoration from an unsafe number input.\n const valueInput =\n typeof data.value === 'number' &&\n Number.isInteger(data.value) &&\n !Number.isSafeInteger(data.value) &&\n Number.isFinite(data.value)\n ? BigInt(data.value)\n : data.value\n return new EvaluationResult(\n defined({\n item: options.item ?? itemId,\n scorerVersionId: data.scorer_version_id,\n status: data.status,\n value: valueInput,\n errorCode: data.error_code,\n evaluatorTraceId: data.evaluator_trace_id,\n evaluatedAt: data.evaluated_at,\n payload: Object.hasOwn(data, 'payload') ? restoredPayload(data.payload, RESULT_FIELDS) : undefined,\n }) as EvaluationResultOptions\n )\n }\n}\nexport function itemJSON(item: EvaluationItem): string {\n const value = items.get(item)\n if (value === undefined) throw new TypeError('Expected an EvaluationItem.')\n return value\n}\nexport function resultJSON(result: EvaluationResult): string {\n const value = results.get(result)\n if (value === undefined) throw new TypeError('Expected an EvaluationResult.')\n return value\n}\n","import { parseResponse } from './errors'\nimport {\n boolean,\n count,\n defined,\n encode,\n identifier,\n integer,\n json,\n keys,\n metadata,\n nullable,\n object,\n page,\n pageParams,\n responseTags,\n responseMetadata,\n tagParams,\n tags,\n text,\n timestamp,\n uuid,\n type EvaluationCount,\n type JSONObject,\n type Page,\n type WireObject,\n} from './serialization'\nimport { Transport, type RequestOptions } from './transport'\nimport type { PageOptions } from './datasets'\n\nexport interface BooleanScorerConfig {\n trueLabel?: string\n falseLabel?: string\n trueIsFailure?: boolean | null\n}\nexport interface NumericPassingRule {\n operator: 'gte' | 'lte'\n threshold: number\n}\nexport interface NumericScorerConfig {\n min?: number | null\n max?: number | null\n step?: number | null\n passingRule?: NumericPassingRule | null\n}\nexport interface CategoricalScorerOption {\n key: string\n label: string\n}\nexport interface CategoricalScorerConfig {\n options: readonly CategoricalScorerOption[]\n selectionMode?: 'single' | 'multiple'\n minSelections?: number | null\n maxSelections?: number | null\n passingRule?: { categories: readonly string[] } | null\n}\nexport interface ScorerConfigs {\n boolean: BooleanScorerConfig\n numeric: NumericScorerConfig\n categorical: CategoricalScorerConfig\n}\nexport type ScorerKind = keyof ScorerConfigs\nexport type ScorerConfig = ScorerConfigs[ScorerKind]\ninterface ScorerRecord {\n id: string\n name: string\n description: string\n archived: boolean\n tags: string[]\n currentVersion: number\n currentVersionId: string\n team: number\n createdAt: string\n updatedAt: string\n createdBy: JSONObject | null\n}\ninterface VersionRecord {\n id: string\n definitionId: string\n version: number\n createdAt: string\n createdBy: JSONObject | null\n}\nexport type Scorer = { [K in ScorerKind]: ScorerRecord & { kind: K; config: ScorerConfigs[K] } }[ScorerKind]\nexport type ScorerVersion = { [K in ScorerKind]: VersionRecord & { kind: K; config: ScorerConfigs[K] } }[ScorerKind]\nexport interface ScorerPage extends Page<Scorer> {\n next: string | null\n previous: string | null\n}\nexport interface ScorerVersionPage {\n count: EvaluationCount\n results: ScorerVersion[]\n nextCursor: string | null\n}\nexport type ScorerOrder =\n | 'name'\n | '-name'\n | 'kind'\n | '-kind'\n | 'created_at'\n | '-created_at'\n | 'updated_at'\n | '-updated_at'\n | 'current_version'\n | '-current_version'\nexport interface ScorerListOptions extends PageOptions {\n search?: string\n kind?: ScorerKind\n archived?: boolean\n orderBy?: ScorerOrder\n tags?: readonly string[]\n tagMatch?: 'any' | 'all'\n}\nexport interface ScorerMetadata {\n name?: string\n description?: string | null\n archived?: boolean\n tags?: readonly string[]\n}\nexport type CreateScorerOptions = {\n [K in ScorerKind]: {\n name: string\n kind: K\n config: ScorerConfigs[K]\n description?: string | null\n tags?: readonly string[]\n }\n}[ScorerKind]\nconst CONFIG_KEYS: Record<string, string> = {\n trueLabel: 'true_label',\n falseLabel: 'false_label',\n trueIsFailure: 'true_is_failure',\n passingRule: 'passing_rule',\n selectionMode: 'selection_mode',\n minSelections: 'min_selections',\n maxSelections: 'max_selections',\n}\nfunction kind(value: unknown): ScorerKind {\n if (value !== 'boolean' && value !== 'numeric' && value !== 'categorical')\n throw new TypeError('Unsupported scorer kind.')\n return value\n}\nfunction config(value: unknown, toWire: boolean): WireObject {\n const fields = toWire ? CONFIG_KEYS : Object.fromEntries(Object.entries(CONFIG_KEYS).map(([k, v]) => [v, k]))\n // Only schema-owned keys are translated. Category keys and user text are opaque.\n return Object.fromEntries(\n Object.entries(toWire ? metadata(value) : responseMetadata(value)).map(([key, v]) => [\n Object.hasOwn(fields, key) ? fields[key] : key,\n v,\n ])\n )\n}\ntype ConfigSnapshot = { [K in ScorerKind]: { kind: K; config: ScorerConfigs[K] } }[ScorerKind]\nfunction parsedConfig(value: unknown, raw: unknown): ConfigSnapshot {\n const selected = kind(value)\n const snapshot = config(raw, false)\n const finite = (v: unknown): void => {\n if (typeof v !== 'number' || !Number.isFinite(v)) throw new TypeError('Expected a finite configuration number.')\n }\n if (selected === 'boolean') {\n for (const key of ['trueLabel', 'falseLabel']) if (snapshot[key] !== undefined) text(snapshot[key])\n if (snapshot.trueIsFailure != null) boolean(snapshot.trueIsFailure)\n return { kind: selected, config: snapshot as BooleanScorerConfig }\n }\n if (selected === 'numeric') {\n for (const key of ['min', 'max', 'step']) if (snapshot[key] != null) finite(snapshot[key])\n if (snapshot.passingRule != null) {\n const rule = object(snapshot.passingRule)\n if (rule.operator !== 'gte' && rule.operator !== 'lte') throw new TypeError('Invalid passing operator.')\n finite(rule.threshold)\n }\n return { kind: selected, config: snapshot as NumericScorerConfig }\n }\n if (!Array.isArray(snapshot.options)) throw new TypeError('Expected categorical options.')\n for (const option of snapshot.options) {\n const row = object(option)\n text(row.key)\n text(row.label)\n }\n if (\n snapshot.selectionMode !== undefined &&\n snapshot.selectionMode !== 'single' &&\n snapshot.selectionMode !== 'multiple'\n )\n throw new TypeError('Invalid selection mode.')\n for (const key of ['minSelections', 'maxSelections']) if (snapshot[key] != null) integer(snapshot[key])\n if (snapshot.passingRule != null) {\n const categories = object(snapshot.passingRule).categories\n if (!Array.isArray(categories)) throw new TypeError('Expected passing categories.')\n categories.forEach(text)\n }\n return { kind: selected, config: snapshot as unknown as CategoricalScorerConfig }\n}\nfunction scorer(data: WireObject, project: number, id?: string): Scorer {\n const identity = uuid(data.id)\n if ((id !== undefined && identity !== id) || integer(data.team) !== project)\n throw new TypeError('Mismatched scorer scope.')\n return {\n id: identity,\n name: text(data.name),\n description: text(data.description),\n archived: boolean(data.archived),\n ...parsedConfig(data.kind, data.config),\n tags: responseTags(data.tags === undefined ? [] : data.tags),\n currentVersion: integer(data.current_version),\n currentVersionId: uuid(data.current_version_id),\n team: project,\n createdAt: timestamp(data.created_at),\n updatedAt: timestamp(data.updated_at),\n createdBy: nullable(data.created_by, responseMetadata),\n }\n}\nfunction version(data: WireObject, scorerId: string, versionId?: string): ScorerVersion {\n const id = uuid(data.id)\n if (uuid(data.definition_id) !== scorerId || (versionId !== undefined && versionId !== id))\n throw new TypeError('Mismatched scorer version.')\n return {\n id,\n definitionId: scorerId,\n version: integer(data.version),\n ...parsedConfig(data.kind, data.config),\n createdAt: timestamp(data.created_at),\n createdBy: nullable(data.created_by, responseMetadata),\n }\n}\nfunction fields(options: ScorerMetadata): WireObject {\n return defined({\n name: options.name === undefined ? undefined : identifier(options.name, 400),\n description: options.description === undefined ? undefined : nullable(options.description, text),\n archived: options.archived === undefined ? undefined : boolean(options.archived),\n tags: options.tags === undefined ? undefined : tags(options.tags),\n })\n}\n/** Versioned scorer definitions. Evaluator execution remains caller-owned. */\nexport class Scorers {\n readonly #transport: Transport\n readonly #base: string\n constructor(transport: Transport) {\n this.#transport = transport\n this.#base = `/api/projects/${transport.projectId}/llm_analytics/score_definitions/`\n }\n async #request<T>(\n method: string,\n path: string,\n parse: (data: WireObject) => T,\n options: RequestOptions & { body?: string; params?: WireObject }\n ): Promise<T> {\n return parseResponse(await this.#transport.request(method, path, options), parse)\n }\n async create<T extends CreateScorerOptions>(\n options: T,\n request: RequestOptions = {}\n ): Promise<Extract<Scorer, { kind: T['kind'] }>> {\n keys(options, ['name', 'kind', 'config', 'description', 'tags'])\n const selectedKind = kind(options.kind)\n const body = encode(\n json({\n ...fields(options),\n name: identifier(options.name, 400),\n kind: selectedKind,\n config: config(options.config, true),\n })\n )\n return this.#request(\n 'POST',\n this.#base,\n (data) => {\n const result = scorer(data, this.#transport.projectId)\n if (result.kind !== selectedKind) throw new TypeError('Mismatched scorer kind.')\n return result\n },\n {\n ...request,\n body,\n }\n ) as Promise<Extract<Scorer, { kind: T['kind'] }>>\n }\n async get(scorerId: string, request: RequestOptions = {}): Promise<Scorer> {\n const id = uuid(scorerId)\n return this.#request('GET', `${this.#base}${id}/`, (data) => scorer(data, this.#transport.projectId, id), request)\n }\n async list(options: ScorerListOptions = {}): Promise<ScorerPage> {\n const { limit = 100, offset = 0 } = options\n if (\n options.orderBy !== undefined &&\n ![\n 'name',\n '-name',\n 'kind',\n '-kind',\n 'created_at',\n '-created_at',\n 'updated_at',\n '-updated_at',\n 'current_version',\n '-current_version',\n ].includes(options.orderBy)\n )\n throw new TypeError('Unsupported scorer order.')\n const params = {\n ...pageParams(limit, offset, Number.MAX_SAFE_INTEGER),\n ...tagParams(options.tags, options.tagMatch),\n ...defined({\n search: options.search === undefined ? undefined : text(options.search),\n kind: options.kind === undefined ? undefined : kind(options.kind),\n archived: options.archived === undefined ? undefined : String(boolean(options.archived)),\n order_by: options.orderBy,\n }),\n }\n return this.#request(\n 'GET',\n this.#base,\n (data) => ({\n ...page(data, (row) => scorer(row, this.#transport.projectId), offset),\n next: nullable(data.next, text),\n previous: nullable(data.previous, text),\n }),\n { signal: options.signal, params }\n )\n }\n async update(scorerId: string, options: ScorerMetadata, request: RequestOptions = {}): Promise<Scorer> {\n keys(options, ['name', 'description', 'archived', 'tags'])\n const id = uuid(scorerId)\n return this.#request('PATCH', `${this.#base}${id}/`, (data) => scorer(data, this.#transport.projectId, id), {\n ...request,\n body: encode(json(fields(options))),\n })\n }\n async createVersion(\n scorerId: string,\n options: { config: ScorerConfig; baseVersion?: number; name?: string; description?: string | null },\n request: RequestOptions = {}\n ): Promise<Scorer> {\n keys(options, ['config', 'baseVersion', 'name', 'description'])\n const id = uuid(scorerId)\n const body = encode(\n json({\n ...fields(options),\n config: config(options.config, true),\n ...defined({\n base_version: options.baseVersion === undefined ? undefined : integer(options.baseVersion),\n }),\n })\n )\n return this.#request(\n 'POST',\n `${this.#base}${id}/new_version/`,\n (data) => scorer(data, this.#transport.projectId, id),\n { ...request, body }\n )\n }\n async getVersion(scorerId: string, versionId: string, request: RequestOptions = {}): Promise<ScorerVersion> {\n const id = uuid(scorerId),\n selected = uuid(versionId)\n return this.#request(\n 'GET',\n `${this.#base}${id}/versions/${selected}/`,\n (data) => version(data, id, selected),\n request\n )\n }\n async listVersions(\n scorerId: string,\n options: RequestOptions & { limit?: number; cursor?: string } = {}\n ): Promise<ScorerVersionPage> {\n const id = uuid(scorerId),\n cursor = options.cursor\n const params = {\n limit: integer(options.limit ?? 50, 1, 100),\n ...defined({ cursor: cursor === undefined ? undefined : text(cursor) }),\n }\n return this.#request(\n 'GET',\n `${this.#base}${id}/versions/`,\n (data) => {\n if (!Array.isArray(data.results)) throw new TypeError('Expected version results.')\n const next = nullable(data.next_cursor, text)\n if (next !== null && (!next || next === cursor || !data.results.length))\n throw new TypeError('Invalid cursor continuation.')\n return {\n count: count(data.count),\n results: data.results.map((row) => version(object(row), id)),\n nextCursor: next,\n }\n },\n { signal: options.signal, params }\n )\n }\n}\n","/// <reference lib=\"dom\" />\nimport { EvaluationAPIError } from './errors'\nimport { decode, integer, object, text, type WireObject } from './serialization'\n\nexport interface RequestOptions {\n signal?: AbortSignal\n}\nexport interface OfflineEvaluationsOptions {\n projectId: number\n secretKey: string\n host?: string\n /** Per-attempt timeout, including reading the response body. Default: 15,000 ms. */\n timeoutMs?: number\n /** Additional attempts for operations with safe replay identity. Default: 3. */\n maxRetries?: number\n}\nconst RETRY_STATUSES = new Set([408, 429, 500, 502, 503, 504])\nconst HOSTS: Record<string, string> = {\n 'app.posthog.com': 'us.posthog.com',\n 'us.i.posthog.com': 'us.posthog.com',\n 'eu.i.posthog.com': 'eu.posthog.com',\n}\nexport function normalizeHost(host: string): string {\n const url = new URL(text(host))\n if (\n !['http:', 'https:'].includes(url.protocol) ||\n url.username ||\n url.password ||\n url.search ||\n url.hash ||\n host.includes('?') ||\n host.includes('#')\n ) {\n throw new TypeError('Host must be an absolute HTTP(S) URL without credentials, query, or fragment.')\n }\n if (url.protocol === 'https:' && !url.port && Object.hasOwn(HOSTS, url.hostname)) url.hostname = HOSTS[url.hostname]\n return url.href.replace(/\\/+$/, '')\n}\nfunction retryAfter(value: string | null): number | undefined {\n if (!value?.trim()) return undefined\n const number = Number(value)\n const seconds = Number.isFinite(number) ? number : (Date.parse(value) - Date.now()) / 1000\n return Number.isFinite(seconds) ? Math.max(0, seconds) : undefined\n}\nfunction delay(ms: number, signal: AbortSignal): Promise<void> {\n signal.throwIfAborted()\n return new Promise((resolve, reject) => {\n const onAbort = (): void => {\n clearTimeout(timer)\n signal.removeEventListener('abort', onAbort)\n reject(signal.reason)\n }\n const timer = setTimeout(() => {\n signal.removeEventListener('abort', onAbort)\n resolve()\n }, ms)\n signal.addEventListener('abort', onAbort, { once: true })\n })\n}\n\nexport class Transport {\n readonly projectId: number\n readonly #host: string\n readonly #secret: string\n readonly #timeout: number\n readonly #retries: number\n readonly #closed = new AbortController()\n constructor(options: OfflineEvaluationsOptions) {\n this.projectId = integer(options.projectId)\n this.#secret = text(options.secretKey)\n if (!this.#secret || /\\s/.test(this.#secret))\n throw new TypeError('Secret key must be nonempty and contain no whitespace.')\n this.#host = normalizeHost(options.host ?? 'https://us.posthog.com')\n this.#timeout = options.timeoutMs === undefined ? 15000 : options.timeoutMs\n if (\n typeof this.#timeout !== 'number' ||\n !Number.isFinite(this.#timeout) ||\n this.#timeout <= 0 ||\n this.#timeout > 2147483647\n )\n throw new TypeError('Invalid timeoutMs.')\n this.#retries = integer(options.maxRetries === undefined ? 3 : options.maxRetries, 0)\n }\n close(): void {\n this.#closed.abort(new EvaluationAPIError({ code: 'client_closed' }))\n }\n async request(\n method: string,\n path: string,\n request: RequestOptions & { body?: string; params?: WireObject; retrySafe?: boolean } = {}\n ): Promise<WireObject> {\n const options = { ...request, params: request.params === undefined ? undefined : { ...request.params } }\n if (this.#closed.signal.aborted) throw new EvaluationAPIError({ code: 'client_closed', persistence: 'not_sent' })\n options.signal?.throwIfAborted()\n if (!path.startsWith('/') || path.startsWith('//') || /[?#]/.test(path)) throw new TypeError('Invalid API path.')\n const url = new URL(this.#host + path)\n for (const [key, value] of Object.entries(options.params ?? {})) url.searchParams.set(key, String(value))\n const operation = new AbortController()\n const forward = (signal: AbortSignal): void => operation.abort(signal.reason)\n const externalAbort = (): void => forward(options.signal!)\n const closeAbort = (): void => forward(this.#closed.signal)\n options.signal?.addEventListener('abort', externalAbort, { once: true })\n this.#closed.signal.addEventListener('abort', closeAbort, { once: true })\n let hadUnknown = false\n try {\n for (let attempt = 0; ; attempt++) {\n operation.signal.throwIfAborted()\n const controller = new AbortController()\n const abort = (): void => controller.abort(operation.signal.reason)\n operation.signal.addEventListener('abort', abort, { once: true })\n const timer = setTimeout(() => controller.abort(), this.#timeout)\n let error: EvaluationAPIError\n try {\n const response = await fetch(url, {\n method,\n body: options.body,\n redirect: 'manual',\n signal: controller.signal,\n headers: {\n Authorization: `Bearer ${this.#secret}`,\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n })\n const raw = await response.text()\n operation.signal.throwIfAborted()\n let payload: unknown\n try {\n payload = decode(raw)\n } catch {\n payload = undefined\n }\n if (response.ok) {\n try {\n return object(payload)\n } catch {\n throw new EvaluationAPIError({ status: response.status, code: 'invalid_response' })\n }\n }\n let fields: WireObject = {}\n try {\n fields = object(payload)\n } catch {\n /* A non-object error body is retained as detail. */\n }\n throw new EvaluationAPIError({\n status: response.status,\n code: typeof fields.code === 'string' ? fields.code : undefined,\n detail: fields.detail ?? payload,\n attr: typeof fields.attr === 'string' ? fields.attr : undefined,\n errors: fields.errors,\n response: Object.keys(fields).length ? fields : undefined,\n retryAfter: retryAfter(response.headers.get('Retry-After')),\n persistence:\n response.status >= 400 && response.status < 500 && response.status !== 408 ? 'rejected' : 'unknown',\n })\n } catch (caught) {\n operation.signal.throwIfAborted()\n error = caught instanceof EvaluationAPIError ? caught : new EvaluationAPIError({ code: 'transport_error' })\n } finally {\n clearTimeout(timer)\n operation.signal.removeEventListener('abort', abort)\n }\n hadUnknown ||= error.persistence === 'unknown'\n if (hadUnknown) error.persistence = 'unknown'\n if (\n !(options.retrySafe ?? method === 'GET') ||\n attempt >= this.#retries ||\n error.code === 'invalid_response' ||\n (error.status !== undefined && !RETRY_STATUSES.has(error.status)) ||\n (error.retryAfter ?? 0) > 30\n )\n throw error\n const backoff = Math.min(30, 0.5 * 2 ** Math.min(attempt, 6) * (0.8 + Math.random() * 0.4))\n await delay(Math.max(backoff, error.retryAfter ?? 0) * 1000, operation.signal)\n }\n } finally {\n options.signal?.removeEventListener('abort', externalAbort)\n this.#closed.signal.removeEventListener('abort', closeAbort)\n }\n }\n}\n\n/** One handle's operations are atomic with respect to each other, including all bulk chunks. */\nexport class OperationQueue {\n #tail: Promise<void> = Promise.resolve()\n async run<T>(operation: () => Promise<T>, signal?: AbortSignal): Promise<T> {\n signal?.throwIfAborted()\n const previous = this.#tail\n let release!: () => void\n const done = new Promise<void>((resolve) => {\n release = resolve\n })\n this.#tail = previous.then(() => done)\n let abort: (() => void) | undefined\n try {\n if (signal) {\n await Promise.race([\n previous,\n new Promise<never>((_, reject) => {\n abort = () => reject(signal.reason)\n signal.addEventListener('abort', abort, { once: true })\n }),\n ])\n signal.throwIfAborted()\n } else await previous\n return await operation()\n } finally {\n if (abort) signal!.removeEventListener('abort', abort)\n release()\n }\n }\n}\n","import { randomUUID } from 'node:crypto'\nimport { Datasets } from './datasets'\nimport { EvaluationItem, EvaluationResult, itemJSON, resultJSON, type EvaluationResultOptions } from './declarations'\nimport { EvaluationAPIError, ExperimentCreationAbortedError, parseResponse } from './errors'\nimport { Scorers } from './scorers'\nimport {\n boolean,\n bytes,\n copy,\n count,\n decode,\n encode,\n identifier,\n keys,\n nullable,\n object,\n responseTags,\n tags,\n timestamp,\n uuid,\n type EvaluationCount,\n type WireObject,\n} from './serialization'\nimport { OperationQueue, Transport, type OfflineEvaluationsOptions, type RequestOptions } from './transport'\n\nexport interface ExperimentOptions {\n name: string\n id?: string\n startedAt?: string | Date\n runSource?: 'ci' | 'local' | 'scheduled' | null\n expectedItemCount?: EvaluationCount | null\n expectedResultCount?: EvaluationCount | null\n suiteKey?: string | null\n datasetSource?: string | null\n datasetIdentifier?: string | null\n datasetRevisionIdentifier?: string | null\n datasetRevisionId?: string | null\n applicationVersion?: string | null\n modelVersion?: string | null\n promptVersion?: string | null\n}\nexport interface ExperimentReceipt {\n id: string\n status: 'uploading' | 'completed' | 'failed'\n created: boolean\n startedAt: string\n createdAt: string\n finishedAt: string | null\n expectedItemCount: EvaluationCount | null\n expectedResultCount: EvaluationCount | null\n acceptedItemCount: EvaluationCount\n acceptedResultCount: EvaluationCount\n}\nexport interface ItemReceipt {\n id: string\n created: boolean\n acceptedAt: string\n}\nexport interface ResultReceipt extends ItemReceipt {\n itemId: string\n scorerVersionId: string\n}\nexport interface UploadReceipt {\n items: ItemReceipt[]\n results: ResultReceipt[]\n}\nexport interface BulkUploadReceipt {\n chunks: UploadReceipt[]\n}\nconst EXPERIMENT_TEXT: Record<string, string> = {\n suiteKey: 'suite_key',\n datasetSource: 'dataset_source',\n datasetIdentifier: 'dataset_identifier',\n datasetRevisionIdentifier: 'dataset_revision_identifier',\n applicationVersion: 'application_version',\n modelVersion: 'model_version',\n promptVersion: 'prompt_version',\n}\nfunction experimentBody(options: ExperimentOptions): string {\n keys(options, [\n 'name',\n 'id',\n 'startedAt',\n 'runSource',\n 'expectedItemCount',\n 'expectedResultCount',\n 'datasetRevisionId',\n ...Object.keys(EXPERIMENT_TEXT),\n ])\n const body: WireObject = {\n name: identifier(options.name, 400),\n id: uuid(options.id === undefined ? randomUUID() : options.id),\n started_at: timestamp(options.startedAt === undefined ? new Date() : options.startedAt),\n }\n for (const [key, wire] of Object.entries(EXPERIMENT_TEXT)) {\n const value = (options as unknown as WireObject)[key]\n if (value !== undefined) body[wire] = nullable(value, identifier)\n }\n if (options.runSource !== undefined) {\n if (options.runSource !== null && !['ci', 'local', 'scheduled'].includes(options.runSource))\n throw new TypeError('Invalid run source.')\n body.run_source = options.runSource\n }\n if (options.expectedItemCount !== undefined) body.expected_item_count = nullable(options.expectedItemCount, count)\n if (options.expectedResultCount !== undefined)\n body.expected_result_count = nullable(options.expectedResultCount, count)\n if (options.datasetRevisionId !== undefined) body.dataset_revision_id = nullable(options.datasetRevisionId, uuid)\n return encode(body)\n}\nfunction experimentReceipt(data: WireObject, id: string): ExperimentReceipt {\n if (\n uuid(data.id) !== id ||\n typeof data.status !== 'string' ||\n !['uploading', 'completed', 'failed'].includes(data.status)\n )\n throw new TypeError('Mismatched experiment receipt.')\n return {\n id,\n status: data.status as ExperimentReceipt['status'],\n created: boolean(data.created),\n startedAt: timestamp(data.started_at),\n createdAt: timestamp(data.created_at),\n finishedAt: nullable(data.finished_at, timestamp),\n expectedItemCount: nullable(data.expected_item_count, count),\n expectedResultCount: nullable(data.expected_result_count, count),\n acceptedItemCount: count(data.accepted_item_count),\n acceptedResultCount: count(data.accepted_result_count),\n }\n}\nfunction itemReceipt(value: unknown): ItemReceipt {\n const data = object(value)\n return { id: uuid(data.id), created: boolean(data.created), acceptedAt: timestamp(data.accepted_at) }\n}\nfunction uploadReceipt(data: WireObject, submitted: readonly EvaluationResult[]): UploadReceipt {\n if (!Array.isArray(data.items) || !Array.isArray(data.results)) throw new TypeError('Expected acknowledgment lists.')\n const items = data.items.map(itemReceipt)\n const results = data.results.map((value) => {\n const row = object(value)\n return { ...itemReceipt(row), itemId: uuid(row.item_id), scorerVersionId: uuid(row.scorer_version_id) }\n })\n const expectedItems = new Set(submitted.map((r) => r.itemId)),\n actualItems = new Set(items.map((i) => i.id))\n if (\n actualItems.size !== items.length ||\n actualItems.size !== expectedItems.size ||\n [...expectedItems].some((id) => !actualItems.has(id))\n )\n throw new TypeError('Incomplete item acknowledgments.')\n if (\n results.length !== submitted.length ||\n results.some((r, i) => r.itemId !== submitted[i].itemId || r.scorerVersionId !== submitted[i].scorerVersionId) ||\n new Set(results.map((r) => r.id)).size !== results.length\n )\n throw new TypeError('Incomplete result acknowledgments.')\n return { items, results }\n}\ninterface Chunk {\n start: number\n results: EvaluationResult[]\n body: string\n}\nfunction uploadBody(items: string[], results: string[]): string {\n return `{\"items\":[${items.join(',')}],\"results\":[${results.join(',')}]}`\n}\nfunction chunks(input: readonly EvaluationResult[]): { chunks: Chunk[]; prepared: EvaluationResult[] } {\n if (!Array.isArray(input))\n throw new TypeError('uploadResults expects a finite array of EvaluationResult declarations.')\n const original = Array.from(input),\n identities = new Set<string>(),\n declarations = new Map<string, EvaluationItem>()\n for (const result of original) {\n resultJSON(result)\n const pair = `${result.itemId}/${result.scorerVersionId}`\n if (identities.has(pair)) throw new TypeError('Duplicate item/scorer-version pair.')\n identities.add(pair)\n if (result.item instanceof EvaluationItem) {\n const previous = declarations.get(result.itemId)\n if (previous && itemJSON(previous) !== itemJSON(result.item))\n throw new TypeError('Conflicting item declarations.')\n declarations.set(result.itemId, result.item)\n }\n }\n // Attach known declarations even to references, so pending work stays independently replayable.\n const prepared = original.map((r) =>\n typeof r.item === 'string' && declarations.has(r.itemId)\n ? EvaluationResult.fromJSON(r.toJSON(), { item: declarations.get(r.itemId) })\n : r\n )\n const output: Chunk[] = []\n let start = 0,\n size = bytes(uploadBody([], [])),\n encodedItems: string[] = [],\n encodedResults: string[] = [],\n itemIds = new Set<string>()\n for (let index = 0; index < prepared.length; index++) {\n const result = prepared[index],\n resultBody = resultJSON(result),\n declaration = declarations.get(result.itemId)\n let itemBody = declaration && !itemIds.has(result.itemId) ? itemJSON(declaration) : undefined\n let extra =\n bytes(resultBody) +\n (encodedResults.length ? 1 : 0) +\n (itemBody === undefined ? 0 : bytes(itemBody) + (encodedItems.length ? 1 : 0))\n if (\n encodedResults.length &&\n (encodedResults.length >= 1000 ||\n encodedItems.length + (itemBody === undefined ? 0 : 1) > 1000 ||\n size + extra > 5 * 1024 * 1024)\n ) {\n output.push({\n start,\n results: prepared.slice(start, index),\n body: uploadBody(encodedItems, encodedResults),\n })\n start = index\n size = bytes(uploadBody([], []))\n encodedItems = []\n encodedResults = []\n itemIds = new Set()\n itemBody = declaration ? itemJSON(declaration) : undefined\n extra = bytes(resultBody) + (itemBody === undefined ? 0 : bytes(itemBody))\n }\n if (size + extra > 5 * 1024 * 1024) throw new TypeError('One item/result pair exceeds the request byte limit.')\n if (itemBody !== undefined) {\n itemIds.add(result.itemId)\n encodedItems.push(itemBody)\n }\n encodedResults.push(resultBody)\n size += extra\n }\n if (encodedResults.length)\n output.push({ start, results: prepared.slice(start), body: uploadBody(encodedItems, encodedResults) })\n return { chunks: output, prepared }\n}\n/** Earlier chunks are acknowledged; pendingResults includes the uncertain failed chunk. */\nexport class BulkUploadError extends EvaluationAPIError {\n readonly failedIndex: number\n readonly #completed: BulkUploadReceipt\n readonly #pending: readonly EvaluationResult[]\n readonly #failed: string\n constructor(\n cause: EvaluationAPIError,\n completed: BulkUploadReceipt,\n failed: Chunk,\n pending: readonly EvaluationResult[]\n ) {\n super(cause)\n this.name = 'BulkUploadError'\n this.failedIndex = failed.start\n this.#completed = copy(completed)\n this.#pending = pending.slice()\n this.#failed = failed.body\n }\n get completed(): BulkUploadReceipt {\n return copy(this.#completed)\n }\n get pendingResults(): readonly EvaluationResult[] {\n return this.#pending.slice()\n }\n get failedChunk(): WireObject {\n return JSON.parse(this.#failed) as WireObject\n }\n}\n\nexport class Experiment {\n readonly id: string\n readonly #transport: Transport\n readonly #base: string\n readonly #queue = new OperationQueue()\n readonly #submission?: string\n #receipt?: ExperimentReceipt\n constructor(transport: Transport, id: string, receipt?: ExperimentReceipt, submission?: string) {\n this.id = uuid(id)\n this.#transport = transport\n this.#receipt = receipt\n this.#submission = submission\n this.#base = `/api/projects/${transport.projectId}/ai_observability/offline_experiments/${this.id}/`\n Object.freeze(this)\n }\n get receipt(): ExperimentReceipt | undefined {\n return this.#receipt === undefined ? undefined : copy(this.#receipt)\n }\n /** Original creation options, suitable for createExperiment(submission). Large counts may be bigint. */\n get submission(): ExperimentOptions | undefined {\n return this.#submission === undefined ? undefined : submissionOptions(object(decode(this.#submission)))\n }\n async uploadResult(options: EvaluationResultOptions, request: RequestOptions = {}): Promise<UploadReceipt> {\n const chunk = chunks([new EvaluationResult(options)]).chunks[0]\n return this.#queue.run(() => this.#upload(chunk, request), request.signal)\n }\n async #upload(chunk: Chunk, request: RequestOptions): Promise<UploadReceipt> {\n return parseResponse(\n await this.#transport.request('POST', `${this.#base}upload/`, {\n ...request,\n body: chunk.body,\n retrySafe: true,\n }),\n (data) => uploadReceipt(data, chunk.results)\n )\n }\n async uploadResults(results: readonly EvaluationResult[], request: RequestOptions = {}): Promise<BulkUploadReceipt> {\n const prepared = chunks(results)\n return this.#queue.run(async () => {\n const receipts: UploadReceipt[] = []\n for (const chunk of prepared.chunks) {\n try {\n receipts.push(await this.#upload(chunk, request))\n } catch (error) {\n if (!(error instanceof EvaluationAPIError)) throw error\n throw new BulkUploadError(error, { chunks: receipts }, chunk, prepared.prepared.slice(chunk.start))\n }\n }\n return { chunks: receipts }\n }, request.signal)\n }\n async complete(request: RequestOptions = {}): Promise<ExperimentReceipt> {\n return this.#finish('complete', request)\n }\n async fail(request: RequestOptions = {}): Promise<ExperimentReceipt> {\n return this.#finish('fail', request)\n }\n async #finish(action: 'complete' | 'fail', request: RequestOptions): Promise<ExperimentReceipt> {\n return this.#queue.run(async () => {\n const receipt = parseResponse(\n await this.#transport.request('POST', `${this.#base}${action}/`, {\n ...request,\n body: '{}',\n retrySafe: true,\n }),\n (data) => {\n const result = experimentReceipt(data, this.id)\n if (result.status !== (action === 'complete' ? 'completed' : 'failed'))\n throw new TypeError('Unexpected experiment status.')\n return result\n }\n )\n this.#receipt = copy(receipt)\n return receipt\n }, request.signal)\n }\n async getTags(request: RequestOptions = {}): Promise<string[]> {\n return this.#tags('GET', undefined, request)\n }\n async setTags(names: readonly string[], request: RequestOptions = {}): Promise<string[]> {\n return this.#tags('PATCH', encode({ tags: tags(names) }), request)\n }\n async #tags(method: string, body: string | undefined, request: RequestOptions): Promise<string[]> {\n return this.#queue.run(\n async () =>\n parseResponse(await this.#transport.request(method, this.#base, { ...request, body }), (data) => {\n if (uuid(data.id) !== this.id) throw new TypeError('Mismatched experiment.')\n return responseTags(data.tags)\n }),\n request.signal\n )\n }\n}\nfunction submissionOptions(data: WireObject): ExperimentOptions {\n const result: WireObject = { name: data.name, id: data.id, startedAt: data.started_at }\n for (const [key, wire] of Object.entries({\n ...EXPERIMENT_TEXT,\n runSource: 'run_source',\n expectedItemCount: 'expected_item_count',\n expectedResultCount: 'expected_result_count',\n datasetRevisionId: 'dataset_revision_id',\n }))\n if (Object.hasOwn(data, wire)) result[key] = data[wire]\n return result as unknown as ExperimentOptions\n}\n/** Acknowledged management APIs, independent of analytics capture and flush. */\nexport class OfflineEvaluations {\n readonly datasets: Datasets\n readonly scorers: Scorers\n readonly #transport: Transport\n constructor(options: OfflineEvaluationsOptions) {\n this.#transport = new Transport(options)\n this.datasets = new Datasets(this.#transport)\n this.scorers = new Scorers(this.#transport)\n Object.freeze(this)\n }\n async createExperiment(options: ExperimentOptions, request: RequestOptions = {}): Promise<Experiment> {\n const signal = request.signal,\n body = experimentBody(options),\n submission = object(decode(body)),\n id = uuid(submission.id)\n try {\n const data = await this.#transport.request(\n 'POST',\n `/api/projects/${this.#transport.projectId}/ai_observability/offline_experiments/`,\n { ...request, body, retrySafe: true }\n )\n return new Experiment(\n this.#transport,\n id,\n parseResponse(data, (value) => experimentReceipt(value, id)),\n body\n )\n } catch (error) {\n if (signal?.aborted && Object.is(error, signal.reason))\n throw new ExperimentCreationAbortedError(error, submissionOptions(submission))\n if (!(error instanceof EvaluationAPIError)) throw error\n throw new EvaluationAPIError({\n ...error,\n detail: error.detail,\n errors: error.errors,\n response: error.response,\n submission: submissionOptions(submission),\n })\n }\n }\n /** Local only; existence and permissions are checked on the next network operation. */\n resumeExperiment(id: string): Experiment {\n return new Experiment(this.#transport, id)\n }\n /** Stop owned requests and timers. This never completes or fails experiments. */\n close(): void {\n this.#transport.close()\n }\n}\n"],"mappings":"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"}
|