langsmith
Version:
Client library to connect to the LangSmith Observability and Evaluation Platform.
112 lines (111 loc) • 5.11 kB
JavaScript
;
/* eslint-disable import/no-extraneous-dependencies */
/* eslint-disable @typescript-eslint/no-namespace */
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __exportStar = (this && this.__exportStar) || function(m, exports) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.wrapJest = exports.wrapEvaluator = exports.logOutputs = exports.logFeedback = exports.expect = exports.describe = exports.it = exports.test = void 0;
const globals_1 = require("@jest/globals");
const matchers_js_1 = require("../utils/jestlike/matchers.cjs");
const evaluatedBy_js_1 = require("../utils/jestlike/vendor/evaluatedBy.cjs");
Object.defineProperty(exports, "wrapEvaluator", { enumerable: true, get: function () { return evaluatedBy_js_1.wrapEvaluator; } });
const index_js_1 = require("../utils/jestlike/index.cjs");
Object.defineProperty(exports, "logFeedback", { enumerable: true, get: function () { return index_js_1.logFeedback; } });
Object.defineProperty(exports, "logOutputs", { enumerable: true, get: function () { return index_js_1.logOutputs; } });
const index_js_2 = require("../utils/jestlike/index.cjs");
globals_1.expect.extend({
toBeRelativeCloseTo: matchers_js_1.toBeRelativeCloseTo,
toBeAbsoluteCloseTo: matchers_js_1.toBeAbsoluteCloseTo,
toBeSemanticCloseTo: matchers_js_1.toBeSemanticCloseTo,
});
/**
* Dynamically wrap original Jest imports.
*
* This may be necessary to ensure you are wrapping the correct
* Jest version if you are using a monorepo whose workspaces
* use multiple versions of Jest.
*
* @param originalJestMethods - The original Jest imports to wrap.
* @returns The wrapped Jest imports.
* See https://docs.smith.langchain.com/evaluation/how_to_guides/vitest_jest
* for more details.
*/
const wrapJest = (originalJestMethods) => {
if (typeof originalJestMethods !== "object" || originalJestMethods == null) {
throw new Error("originalJestMethods must be an non-null object.");
}
if (!("expect" in originalJestMethods) ||
typeof originalJestMethods.expect !== "function") {
throw new Error("Your passed object must contain a `expect` method.");
}
if (!("it" in originalJestMethods) ||
typeof originalJestMethods.it !== "function") {
throw new Error("Your passed object must contain a `it` method.");
}
if (!("test" in originalJestMethods) ||
typeof originalJestMethods.test !== "function") {
throw new Error("Your passed object must contain a `test` method.");
}
if (!("describe" in originalJestMethods) ||
typeof originalJestMethods.describe !== "function") {
throw new Error("Your passed object must contain a `describe` method.");
}
if (!("beforeAll" in originalJestMethods) ||
typeof originalJestMethods.beforeAll !== "function") {
throw new Error("Your passed object must contain a `beforeAll` method.");
}
if (!("afterAll" in originalJestMethods) ||
typeof originalJestMethods.afterAll !== "function") {
throw new Error("Your passed object must contain a `afterAll` method.");
}
const wrappedMethods = (0, index_js_2.generateWrapperFromJestlikeMethods)({
expect: originalJestMethods.expect,
it: originalJestMethods.it,
test: originalJestMethods.test,
describe: originalJestMethods.describe,
beforeAll: originalJestMethods.beforeAll,
afterAll: originalJestMethods.afterAll,
logFeedback: index_js_1.logFeedback,
logOutputs: index_js_1.logOutputs,
wrapEvaluator: evaluatedBy_js_1.wrapEvaluator,
}, process?.versions?.bun !== undefined ? "bun" : "jest");
// Return the normal used LS methods for convenience
// so that you can do:
//
// const ls = wrapJest(jest);
// ls.logFeedback({ key: "quality", score: 0.7 });
return {
...wrappedMethods,
logFeedback: index_js_1.logFeedback,
logOutputs: index_js_1.logOutputs,
wrapEvaluator: evaluatedBy_js_1.wrapEvaluator,
};
};
exports.wrapJest = wrapJest;
const { test, it, describe, expect } = wrapJest({
expect: globals_1.expect,
it: globals_1.it,
test: globals_1.test,
describe: globals_1.describe,
beforeAll: globals_1.beforeAll,
afterAll: globals_1.afterAll,
beforeEach: globals_1.beforeEach,
afterEach: globals_1.afterEach,
});
exports.test = test;
exports.it = it;
exports.describe = describe;
exports.expect = expect;
__exportStar(require("../utils/jestlike/types.cjs"), exports);