@gentrace/core
Version:
Core Gentrace Node.JS library
1 lines • 34 kB
Source Map (JSON)
{"version":3,"file":"pipeline-run.mjs","sources":["pipeline-run.js"],"sourcesContent":["var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport _ from \"lodash\";\nimport { v4 } from \"uuid\";\nimport { V1Api } from \"../api/v1-api\";\nimport { RunRequestCollectionMethodEnum } from \"../models/run-request\";\nimport { globalGentraceApiV2, globalGentraceConfig, globalRequestBuffer, } from \"./init\";\nimport { StepRun } from \"./step-run\";\nimport { getParamNames, getTestCounter, safeJsonParse, zip } from \"./utils\";\nexport const getRun = (id) => __awaiter(void 0, void 0, void 0, function* () {\n if (!globalGentraceApiV2) {\n throw new Error(\"Gentrace API key not initialized. Call init() first.\");\n }\n const response = yield globalGentraceApiV2.v2RunsIdGet(id);\n const run = response.data;\n return run;\n});\nexport class PipelineRun {\n constructor({ pipeline, context, }) {\n this.evaluations = [];\n this.path = [];\n this.id = v4();\n this.instantiationTime = new Date().toISOString();\n this.pipeline = pipeline;\n this.stepRuns = [];\n this.context = context;\n }\n getPipeline() {\n return this.pipeline;\n }\n getId() {\n return this.id;\n }\n getContext() {\n return this.context;\n }\n getError() {\n return this.error;\n }\n setError(error) {\n this.error = error;\n }\n updateContext(updatedContext) {\n this.context = Object.assign(Object.assign({}, this.context), updatedContext);\n return this.context;\n }\n addStepRunNode(stepRun) {\n return __awaiter(this, void 0, void 0, function* () {\n this.stepRuns.push(stepRun);\n });\n }\n /**\n * Creates a checkpoint by recording a `StepRun` instance with execution metadata and pushes it to `this.stepRuns`.\n * If no prior `StepRun` instances exist, the elapsed time is set to 0 and the start and end times are set to the\n * current timestamp. If it is empty, elapsed time is set to 0 and start time and end time are set to the current\n * timestamp.\n *\n * @param {PRStepRunType & { inputs: any; outputs: any; }} step The information about the step to checkpoint.\n * This includes the inputs and outputs of the step, as well as optional provider, invocation and modelParams metadata.\n *\n * @example\n * const stepInfo = {\n * providerName: 'MyProvider',\n * invocation: 'doSomething',\n * inputs: { x: 10, y: 20 },\n * outputs: { result: 30 }\n * };\n * checkpoint(stepInfo);\n *\n * @returns {void} The function does not return anything.\n *\n * @throws {Error} If the `StepRun` constructor or any other operations throw an error, it will be propagated.\n */\n checkpoint(step) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const lastElement = this.stepRuns[this.stepRuns.length - 1];\n if (lastElement) {\n const { endTime: stepStartTime } = lastElement;\n const elapsedTime = new Date().getTime() - new Date(stepStartTime).getTime();\n const endTimeNew = new Date().toISOString();\n this.stepRuns.push(new StepRun((_a = step.providerName) !== null && _a !== void 0 ? _a : \"undeclared\", (_b = step.invocation) !== null && _b !== void 0 ? _b : \"undeclared\", elapsedTime, stepStartTime, endTimeNew, step.inputs, (_c = step.modelParams) !== null && _c !== void 0 ? _c : {}, step.outputs, (_d = step.context) !== null && _d !== void 0 ? _d : {}, step.error));\n }\n else {\n const endTime = new Date().toISOString();\n const elapsedTime = new Date(endTime).getTime() -\n new Date(this.instantiationTime).getTime();\n this.stepRuns.push(new StepRun((_e = step.providerName) !== null && _e !== void 0 ? _e : \"undeclared\", (_f = step.invocation) !== null && _f !== void 0 ? _f : \"undeclared\", elapsedTime, this.instantiationTime, endTime, step.inputs, (_g = step.modelParams) !== null && _g !== void 0 ? _g : {}, step.outputs, (_h = step.context) !== null && _h !== void 0 ? _h : {}, step.error));\n }\n }\n /**\n * Asynchronously measures the execution time of a function.\n *\n * @template F Function type that extends (...args: any[]) => any\n * @param {F} func The function to be measured.\n * @param {Parameters<F>} inputs The parameters to be passed to the function.\n * @param {Omit<PRStepRunType, \"inputs\" | \"outputs\">} [stepInfo] Optional metadata for the function execution.\n * @returns {Promise<ReturnType<F>>} Returns a promise that resolves to the return type of the function.\n *\n * @example\n * async function foo(n: number) {\n * return n * 2;\n * }\n * const result = await measure(foo, [2]); // result will be 4\n *\n * The function also records a `StepRun` instance with execution metadata and pushes it to `this.stepRuns`.\n * The recorded `StepRun` includes information such as the elapsed time, start and end time,\n * resolved inputs, and model parameters if provided.\n */\n measure(func, inputs, stepInfo) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n return __awaiter(this, void 0, void 0, function* () {\n const startTime = Date.now();\n const paramNames = getParamNames(func);\n const resolvedInputs = zip(paramNames, inputs).reduce((acc, current) => {\n const [key, value] = current;\n acc[key] = value;\n return acc;\n }, {});\n try {\n const returnValue = yield func(...inputs);\n // Our server only accepts outputs as an object.\n let modifiedOutput = returnValue;\n if (typeof returnValue !== \"object\" || Array.isArray(returnValue)) {\n modifiedOutput = { value: returnValue };\n }\n const endTime = Date.now();\n const elapsedTime = Math.floor(endTime - startTime);\n this.stepRuns.push(new StepRun((_a = stepInfo === null || stepInfo === void 0 ? void 0 : stepInfo.providerName) !== null && _a !== void 0 ? _a : \"undeclared\", (_b = stepInfo === null || stepInfo === void 0 ? void 0 : stepInfo.invocation) !== null && _b !== void 0 ? _b : \"undeclared\", elapsedTime, new Date(startTime).toISOString(), new Date(endTime).toISOString(), resolvedInputs, (_c = stepInfo === null || stepInfo === void 0 ? void 0 : stepInfo.modelParams) !== null && _c !== void 0 ? _c : {}, modifiedOutput, (_d = stepInfo === null || stepInfo === void 0 ? void 0 : stepInfo.context) !== null && _d !== void 0 ? _d : {}, stepInfo === null || stepInfo === void 0 ? void 0 : stepInfo.error));\n return returnValue;\n }\n catch (e) {\n try {\n const endTime = Date.now();\n const elapsedTime = Math.floor(endTime - startTime);\n const errorString = e.toString();\n this.stepRuns.push(new StepRun((_e = stepInfo === null || stepInfo === void 0 ? void 0 : stepInfo.providerName) !== null && _e !== void 0 ? _e : \"undeclared\", (_f = stepInfo === null || stepInfo === void 0 ? void 0 : stepInfo.invocation) !== null && _f !== void 0 ? _f : \"undeclared\", elapsedTime, new Date(startTime).toISOString(), new Date(endTime).toISOString(), resolvedInputs, (_g = stepInfo === null || stepInfo === void 0 ? void 0 : stepInfo.modelParams) !== null && _g !== void 0 ? _g : {}, {}, (_h = stepInfo === null || stepInfo === void 0 ? void 0 : stepInfo.context) !== null && _h !== void 0 ? _h : {}, errorString));\n }\n finally {\n throw e;\n }\n }\n });\n }\n /**\n * Adds an evaluation to the pipeline run.\n * @param evaluation The evaluation to add.\n */\n addEval(evaluation) {\n this.evaluations.push(evaluation);\n }\n toObject() {\n var _a;\n let mergedMetadata = {};\n const updatedStepRuns = this.stepRuns.map(({ providerName: providerName, elapsedTime, startTime, endTime, invocation, modelParams, inputs, outputs, context: stepRunContext, error, }) => {\n var _a;\n let _b = (_a = this.context) !== null && _a !== void 0 ? _a : {}, { metadata: thisContextMetadata, previousRunId: _prPreviousRunId } = _b, restThisContext = __rest(_b, [\"metadata\", \"previousRunId\"]);\n let _c = stepRunContext !== null && stepRunContext !== void 0 ? stepRunContext : {}, { metadata: stepRunContextMetadata, previousRunId: _srPreviousRunId } = _c, restStepRunContext = __rest(_c, [\"metadata\", \"previousRunId\"]);\n // Merge metadata\n mergedMetadata = Object.assign(Object.assign(Object.assign({}, mergedMetadata), thisContextMetadata), stepRunContextMetadata);\n return {\n providerName,\n elapsedTime,\n startTime,\n endTime,\n invocation,\n modelParams,\n inputs,\n outputs,\n context: Object.assign(Object.assign({}, restThisContext), restStepRunContext),\n error,\n };\n });\n return {\n id: this.id,\n slug: this.pipeline.slug,\n metadata: mergedMetadata,\n previousRunId: (_a = this.context) === null || _a === void 0 ? void 0 : _a.previousRunId,\n collectionMethod: RunRequestCollectionMethodEnum.Runner,\n stepRuns: updatedStepRuns,\n evaluations: this.evaluations,\n error: this.error,\n };\n }\n toJson() {\n return JSON.stringify(this.toObject(), null, 2);\n }\n static getRedactedRunFromJson(json, options) {\n const selectFields = options === null || options === void 0 ? void 0 : options.selectFields;\n const pipeline = options === null || options === void 0 ? void 0 : options.pipeline;\n const pipelineRunObject = (typeof json === \"string\" ? safeJsonParse(json) : json);\n if (!pipelineRunObject) {\n return null;\n }\n function isSingleStepRunWhitelist(value) {\n return typeof value !== \"function\";\n }\n if (selectFields) {\n const stepRuns = pipelineRunObject.stepRuns;\n let selectedFields;\n if (!isSingleStepRunWhitelist(selectFields)) {\n selectedFields = selectFields(stepRuns);\n if (selectedFields.length !== stepRuns.length && pipeline) {\n pipeline.logWarn(\"The selectFields function did not return the correct number of fields.\");\n }\n if (selectedFields.length < stepRuns.length && pipeline) {\n // Fill rest with the last element\n const last = selectedFields[selectedFields.length - 1];\n selectedFields = selectedFields.concat(Array.from({ length: stepRuns.length - selectedFields.length }).map(() => last));\n }\n }\n else {\n selectedFields = Array.from({ length: stepRuns.length }).map(() => selectFields);\n }\n pipelineRunObject.stepRuns = stepRuns.map((stepRun, index) => {\n const selectedFieldsForStep = selectedFields[index];\n const updatedStepRun = Object.assign({}, stepRun);\n if (selectedFieldsForStep) {\n for (const [fieldKey, selector] of Object.entries(selectedFieldsForStep)) {\n const fieldKeyTyped = fieldKey;\n const stepRunValue = updatedStepRun[fieldKeyTyped];\n if (!stepRunValue) {\n continue;\n }\n const fieldType = typeof stepRunValue;\n const isSelectorArray = Array.isArray(selector);\n const isSelectorString = typeof selector === \"string\";\n const isSelectorBoolean = typeof selector === \"boolean\";\n if (fieldType === \"object\" &&\n (isSelectorArray || isSelectorString)) {\n const newValue = {};\n if (isSelectorString) {\n const whiteListValue = _.get(stepRunValue, selector);\n _.set(newValue, selector, whiteListValue);\n }\n else if (isSelectorArray) {\n for (const key of selector) {\n const whiteListValue = _.get(stepRunValue, key);\n _.set(newValue, key, whiteListValue);\n }\n }\n // @ts-ignore\n updatedStepRun[fieldKeyTyped] = newValue;\n }\n else if (fieldType === \"object\" && isSelectorBoolean) {\n if (!selector) {\n // @ts-ignore\n updatedStepRun[fieldKeyTyped] = {};\n }\n }\n }\n }\n return updatedStepRun;\n });\n }\n if (pipeline) {\n pipeline.logInfo(\"Submitting PipelineRun to Gentrace\");\n }\n return pipelineRunObject;\n }\n static submitFromJson(json, options) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n const pipeline = options === null || options === void 0 ? void 0 : options.pipeline;\n const waitForServer = (_a = options === null || options === void 0 ? void 0 : options.waitForServer) !== null && _a !== void 0 ? _a : false;\n const api = new V1Api(pipeline ? pipeline.config : globalGentraceConfig);\n const pipelineRunObject = PipelineRun.getRedactedRunFromJson(json, {\n waitForServer: false,\n pipeline,\n selectFields: options === null || options === void 0 ? void 0 : options.selectFields,\n });\n if (!pipelineRunObject) {\n if (pipeline) {\n pipeline.logWarn(\"Invalid JSON passed to submitFromJson\");\n }\n return {};\n }\n const submission = api.v1RunPost(pipelineRunObject);\n if (!waitForServer) {\n globalRequestBuffer[pipelineRunObject.id] = submission;\n submission\n .catch((e) => {\n if (pipeline) {\n pipeline.logWarn(e);\n }\n })\n .then(() => {\n if (pipeline) {\n pipeline.logInfo(\"Successfully submitted PipelineRun to Gentrace\");\n }\n })\n .finally(() => {\n delete globalRequestBuffer[pipelineRunObject.id];\n });\n const data = {\n pipelineRunId: pipelineRunObject.id,\n };\n return data;\n }\n try {\n const pipelinePostResponse = yield submission;\n if (pipeline) {\n pipeline.logInfo(\"Successfully submitted PipelineRun to Gentrace\");\n }\n return pipelinePostResponse.data;\n }\n catch (e) {\n if (pipeline) {\n pipeline.logWarn(e);\n }\n throw e;\n }\n });\n }\n submit({ waitForServer, selectFields, } = { waitForServer: false }) {\n return __awaiter(this, void 0, void 0, function* () {\n const testCounter = getTestCounter();\n if (testCounter > 0) {\n const data = {\n pipelineRunId: this.id,\n };\n return data;\n }\n const pipelineRunObject = this.toObject();\n const response = yield PipelineRun.submitFromJson(pipelineRunObject, {\n waitForServer,\n pipeline: this.pipeline,\n selectFields,\n });\n return response;\n });\n }\n /**\n * Returns the current evaluations stored in the PipelineRun instance.\n * @returns {LocalEvaluation[]} An array of LocalEvaluation objects.\n */\n getLocalEvaluations() {\n return this.evaluations;\n }\n}\n"],"names":["this"],"mappings":"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"}