{"_id":"baserun","_rev":"110-3d9068301cd2211089a848849c7a5cc8","time":{"created":"2023-08-03T06:57:40.058Z","1.0.0":"2023-06-26T22:46:22.861Z","modified":"2024-04-11T21:30:49.427Z","1.0.16":"2023-08-03T06:57:40.235Z","1.0.17":"2023-08-06T15:41:48.621Z","1.0.18":"2023-08-06T16:17:00.245Z","1.1.0":"2023-08-11T21:05:07.238Z","1.1.1":"2023-08-11T21:21:40.010Z","1.1.2":"2023-08-16T18:42:01.078Z","1.2.0":"2023-08-16T19:37:35.837Z","1.2.1":"2023-08-16T19:42:06.033Z","1.3.0-beta.0":"2023-08-22T03:57:35.006Z","1.3.0-beta.1":"2023-08-22T04:18:52.907Z","1.3.0-beta.2":"2023-08-22T04:37:14.094Z","1.3.0":"2023-08-23T00:10:03.594Z","1.3.1":"2023-08-23T00:50:37.001Z","1.3.2":"2023-08-28T02:48:31.013Z","1.3.3":"2023-09-01T02:37:23.650Z","1.3.4":"2023-09-04T19:06:21.107Z","1.3.5":"2023-09-04T19:35:55.366Z","1.3.6":"2023-09-04T23:41:46.801Z","1.3.7":"2023-09-11T21:49:45.376Z","1.3.8":"2023-09-18T22:30:21.167Z","1.3.9":"2023-09-22T18:29:00.696Z","2.0.0-alpha.1":"2023-11-21T22:02:26.526Z","2.0.0-alpha.2":"2023-11-22T01:04:34.838Z","2.0.0-alpha.3":"2023-11-22T01:28:42.584Z","2.0.0-alpha.4":"2023-11-22T02:00:04.975Z","2.0.0-alpha.5":"2023-11-22T02:05:43.322Z","2.0.0-alpha.6":"2023-11-22T02:06:56.594Z","2.0.0-alpha.7":"2023-11-22T02:11:20.623Z","2.0.0-alpha.9":"2023-11-22T02:20:32.135Z","2.0.0-alpha.10":"2023-11-22T18:42:07.662Z","2.0.0-alpha.11":"2023-11-22T18:43:22.823Z","2.0.0-alpha.12":"2023-11-22T18:45:14.018Z","2.0.0-alpha.13":"2023-11-22T18:53:09.418Z","2.0.0-alpha.14":"2023-11-22T18:55:10.192Z","2.0.0-alpha.15":"2023-11-22T18:56:36.853Z","2.0.0-alpha.16":"2023-11-22T19:01:50.632Z","2.0.0-beta.1":"2023-11-22T21:16:46.409Z","2.0.0-beta.2":"2023-11-22T21:34:38.724Z","2.0.0-beta.3":"2023-11-22T21:42:03.305Z","2.0.0-alpha.17":"2023-11-22T21:58:05.212Z","2.0.0-alpha.18":"2023-11-22T22:38:47.035Z","2.0.0-alpha.19":"2023-11-22T23:52:16.705Z","2.0.0-alpha.20":"2023-11-22T23:53:41.057Z","2.0.0-alpha.21":"2023-11-22T23:55:49.710Z","2.0.0-alpha.22":"2023-11-23T01:08:26.162Z","2.0.0-alpha.23":"2023-11-23T01:09:32.044Z","2.0.0-alpha.25":"2023-11-23T19:26:59.116Z","2.0.0-alpha.26":"2023-11-23T19:28:31.931Z","2.0.0-alpha.27":"2023-11-23T19:42:40.052Z","2.0.0-alpha.28":"2023-11-23T19:45:15.247Z","2.0.0-alpha.29":"2023-11-23T20:10:25.186Z","2.0.0-alpha.30":"2023-11-23T20:12:03.951Z","2.0.0-alpha.31":"2023-11-23T20:15:49.878Z","2.0.0-alpha.32":"2023-11-23T20:21:51.176Z","2.0.0-alpha.33":"2023-11-23T20:30:21.654Z","2.0.0-alpha.34":"2023-11-23T20:35:56.616Z","2.0.0-alpha.35":"2023-11-23T20:40:21.191Z","2.0.0-alpha.36":"2023-11-23T20:42:43.924Z","2.0.0-alpha.37":"2023-11-23T20:45:27.158Z","2.0.0-alpha.38":"2023-11-23T20:48:53.077Z","2.0.0-alpha.39":"2023-11-23T20:50:50.537Z","2.0.0-alpha.40":"2023-11-23T20:52:12.819Z","2.0.0-alpha.41":"2023-11-23T20:55:03.850Z","2.0.0-alpha.42":"2023-11-23T20:58:00.009Z","2.0.0-alpha.43":"2023-11-23T20:59:39.795Z","2.0.0-alpha.44":"2023-11-23T21:01:22.448Z","2.0.0-alpha.45":"2023-11-23T22:25:52.787Z","2.0.0-alpha.46":"2023-11-23T22:31:15.532Z","2.0.0-alpha.47":"2023-11-23T22:50:03.637Z","2.0.0-alpha.48":"2023-11-23T22:59:39.617Z","2.0.0-alpha.49":"2023-11-23T23:04:05.876Z","2.0.0-alpha.50":"2023-11-23T23:06:21.741Z","2.0.0-alpha.51":"2023-11-23T23:20:07.919Z","2.0.0-alpha.52":"2023-11-24T01:13:59.960Z","2.0.0-alpha.53":"2023-11-24T01:38:08.322Z","2.0.0-beta.4":"2023-11-24T22:50:23.794Z","2.0.0":"2023-11-25T00:58:48.332Z","2.0.1-alpha.1":"2023-11-28T04:10:29.511Z","2.0.1-alpha.2":"2023-11-28T04:15:50.860Z","2.0.1-alpha.3":"2023-11-28T04:25:42.135Z","2.0.1-alpha.4":"2023-11-28T04:28:17.441Z","2.0.1-alpha.5":"2023-11-28T04:29:50.034Z","2.0.1-alpha.6":"2023-11-28T04:39:39.157Z","2.0.1-alpha.7":"2023-11-28T04:40:54.623Z","2.0.1-alpha.8":"2023-11-28T04:45:25.687Z","2.0.1-alpha.9":"2023-11-28T05:07:15.083Z","2.0.1-alpha.10":"2023-11-28T05:16:22.335Z","2.0.1-alpha.11":"2023-11-28T05:19:05.575Z","2.0.1-alpha.12":"2023-11-28T05:38:50.803Z","2.0.1-alpha.13":"2023-11-28T05:39:32.973Z","2.0.1-alpha.14":"2023-11-28T05:58:00.906Z","2.0.1-alpha.15":"2023-11-28T05:59:08.951Z","2.0.1-alpha.16":"2023-11-28T05:59:52.062Z","2.0.1-alpha.17":"2023-11-28T06:06:29.374Z","2.0.1-alpha.18":"2023-11-28T06:08:43.853Z","2.0.1":"2023-11-28T06:18:02.857Z","2.0.2":"2023-12-02T00:05:07.667Z","2.0.3-beta.1":"2023-12-13T15:44:29.006Z","2.0.3-beta.2":"2023-12-13T15:48:56.694Z","2.0.4":"2023-12-13T16:03:58.842Z","2.0.5":"2024-02-09T04:22:39.151Z","2.0.6":"2024-02-20T18:22:29.793Z","2.1.0":"2024-02-20T22:18:25.763Z","2.1.1":"2024-03-05T22:30:38.974Z","2.1.2":"2024-04-04T16:56:05.536Z","2.1.3":"2024-04-11T21:30:49.248Z"},"name":"baserun","dist-tags":{"latest":"2.1.3","beta":"2.0.3-beta.2","alpha":"2.0.1-alpha.18"},"versions":{"1.0.16":{"name":"baserun","version":"1.0.16","description":"**[Baserun](https://baserun.ai)** is the collaborative workspace for AI teams. Our mission is to simplify the testing, debugging, and evaluation of LLM features to help you get your app production-ready.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"axios":"^1.4.0","uuid":"^9.0.0"},"gitHead":"bcfac553f89db713ca9959702e105c1372548c63","_id":"baserun@1.0.16","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-ZXYh1GIdbq0FAWrIGZ6iUFbPgeddqY868ywnUEdVNP4gHhurl7eGvcFVBHozKG3otOTMg2sXM8L5lGeW2Ym08Q==","shasum":"c203615d9386de3b3ccbaf96cf5105634cec5217","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.0.16.tgz","fileCount":28,"unpackedSize":29589,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDbEyOcYxa4D0w9zYZcx+JRaqJbVfAWbTvRV5fahcP/+AIgMi7QzXGYB93RCCQeq64FSyyaUQFNMsv0EHXhJvuUVxE="}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.0.16_1691045860062_0.3830820797256069"},"_hasShrinkwrap":false},"1.0.17":{"name":"baserun","version":"1.0.17","description":"**[Baserun](https://baserun.ai)** is the collaborative workspace for AI teams. Our mission is to simplify the testing, debugging, and evaluation of LLM features to help you get your app production-ready.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"axios":"^1.4.0","uuid":"^9.0.0"},"gitHead":"cdad6e2bfb593526eb9b2151d7c11457c498163c","_id":"baserun@1.0.17","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-ZQn/Yb16nlCNIuqj6b4jHgsDA33sjuyzqaXLMWVJryFncqRscpombdsxRif56S3Sag2LhgcHR0p/3moqi4f+GQ==","shasum":"c765c0de69d05898693a978d4df8fc78a19755dd","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.0.17.tgz","fileCount":28,"unpackedSize":28066,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICOZCmKcHzTrpIJUaobfo18DAa3Tp1TdEpXvV2lB7mqjAiEAkfIjON1RoL7gSWAHvLvn04KciPqysWCi6uC7LUzN+g0="}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.0.17_1691336508494_0.3976740649763655"},"_hasShrinkwrap":false},"1.0.18":{"name":"baserun","version":"1.0.18","description":"**[Baserun](https://baserun.ai)** is the collaborative workspace for AI teams. Our mission is to simplify the testing, debugging, and evaluation of LLM features to help you get your app production-ready.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"axios":"^1.4.0","uuid":"^9.0.0"},"gitHead":"788ebb3192e9ae0e9a16bdaf404c021be246be59","_id":"baserun@1.0.18","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-QEXoygk4shcs+Rw7ixj7hCiAe6vy4tPYyfkMlNauWyIKoQIDZUUtIpuJ1292t0Q4atsEwl+YUk84JuGK8fn8GQ==","shasum":"e4a71e6b9af17c8e20937b678415cb69a976df9f","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.0.18.tgz","fileCount":28,"unpackedSize":32170,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAbZlCJoNglgzce47cQtWzLrOIyQGWd7zcXRUjAeHVmIAiEA1D43jh4+qnhmW1aegx3N+FGFzFoB/rkkaBf/kcrI6rM="}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.0.18_1691338620047_0.9517526073485099"},"_hasShrinkwrap":false},"1.1.0":{"name":"baserun","version":"1.1.0","description":"**[Baserun](https://baserun.ai)** is the collaborative workspace for AI teams. Our mission is to simplify the testing, debugging, and evaluation of LLM features to help you get your app production-ready.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"axios":"^1.4.0","uuid":"^9.0.0"},"gitHead":"c9fde2e178f72e7a9872cf08c69eeca776bf17e1","_id":"baserun@1.1.0","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-58AimncDpCZe5qTP4ASTGNHJ37F1zXOsMLOxmAdNPhTZn7CbddXsOFP+/zAf4L0gMDCnbATjto6tHbjJqH0QWA==","shasum":"8bcef279fd4a9b2f943c5c9332f2f66c63d7de05","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.1.0.tgz","fileCount":30,"unpackedSize":38982,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCXMMSMPaECo9Sp2MUE6eTHtZplgr/fOUW9Wt4XGgHSBgIhAPM2WVEkpdX4w5TbP1dgUWW6UPvt7h52+rSln78flr8H"}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.1.0_1691787907010_0.9058216584408203"},"_hasShrinkwrap":false},"1.1.1":{"name":"baserun","version":"1.1.1","description":"**[Baserun](https://baserun.ai)** is the collaborative workspace for AI teams. Our mission is to simplify the testing, debugging, and evaluation of LLM features to help you get your app production-ready.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"axios":"^1.4.0","uuid":"^9.0.0"},"gitHead":"6b2fb7388cfef077e3f5365308ce4504b05e071d","_id":"baserun@1.1.1","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-iBVAiNJOBmJQ61fSLu3xHhek6Sky/po4dKLLHFg3orUki0kTguVQFKbjh8HMCbgchnddOj2XckIr8w7maZ0W5Q==","shasum":"d774dd567cdf9994e18530cfe1ae3c81b35778c7","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.1.1.tgz","fileCount":30,"unpackedSize":39042,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDSF33Tkeiuzx9Z3Jk/32EjF3dRdRRi7MNAGagXJVEh8wIgVl2omZIyml/K+NLvDGHigIcoG81hOoXN/PSDaQFGZK4="}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.1.1_1691788899769_0.7256128880120711"},"_hasShrinkwrap":false},"1.1.2":{"name":"baserun","version":"1.1.2","description":"**[Baserun](https://baserun.ai)** is the collaborative workspace for AI teams. Our mission is to simplify the testing, debugging, and evaluation of LLM features to help you get your app production-ready.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"axios":"^1.4.0","uuid":"^9.0.0"},"gitHead":"38bb10aae1fc368521330feb5887f0e92ab49a54","_id":"baserun@1.1.2","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-8X2wBb8G0GDT1i5xKlT0ibsn1T18QsEpg0ZEEbWtiEyOYfAHYPSwN9PaJKTYcwCALj02g+6ruV6m71TuXPluZA==","shasum":"40bb69a6792b8b8c07b8c989c9ee2138b10ea08d","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.1.2.tgz","fileCount":30,"unpackedSize":42468,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBFtvlbZj6ayrgLRUHdBTCE+v3jjETMct1O3jYEykR45AiAVPH1n+liKTFVZKhdBQyeTZuLERhQBOri8Diw8tlTGyw=="}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.1.2_1692211320856_0.6922348009671726"},"_hasShrinkwrap":false},"1.2.0":{"name":"baserun","version":"1.2.0","description":"**[Baserun](https://baserun.ai)** is the collaborative workspace for AI teams. Our mission is to simplify the testing, debugging, and evaluation of LLM features to help you get your app production-ready.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"axios":"^1.4.0","uuid":"^9.0.0"},"gitHead":"6f6ae061a66d2125c00c75420b5fc96688d1c0aa","_id":"baserun@1.2.0","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-/vPr4aWDmGSWf+JIusJPZ4Fvq7A7tmPuH63hGETwRgbxeaV/vksMtXkBsIiNzk5tm2ngZSl/eptIhcL32tAzmQ==","shasum":"05abff1d2ccd685f999b15134aefcce852c75f2c","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.2.0.tgz","fileCount":30,"unpackedSize":48034,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAzmMLSTXVK+Rp2szdmZJ6xddilIkDQqrW0nOCzNyFSLAiEAoLil8EdqERQ7ol0Vz4J/+PlTIsCz3OPd9nnl3kWcfCM="}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.2.0_1692214655567_0.7337783823272794"},"_hasShrinkwrap":false},"1.2.1":{"name":"baserun","version":"1.2.1","description":"**[Baserun](https://baserun.ai)** is the collaborative workspace for AI teams. Our mission is to simplify the testing, debugging, and evaluation of LLM features to help you get your app production-ready.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"axios":"^1.4.0","uuid":"^9.0.0"},"gitHead":"1856ee155d9e2d5185519e54bb92b785931a9f7b","_id":"baserun@1.2.1","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-4xzkW/LQw5+So+Y3TTFddAR5k2uX/leDVo/s3xHErgfzWO7RJf4dni3V8/lVYfIDQzn1i8pR+J88/1FCxjtKgQ==","shasum":"c5538497a2d921f6ba134b9c3306bc3fc8427788","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.2.1.tgz","fileCount":30,"unpackedSize":47793,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDcCe3d8gzyBTxvyvZvp6d9tuFyayCh2Xa22FyRAHT2sQIhAIwh+fwzIBe+9OCbuJDyEGfUr+K4lMI2uRXNCsnnd6FK"}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.2.1_1692214925736_0.2669339858471047"},"_hasShrinkwrap":false},"1.3.0-beta.0":{"name":"baserun","version":"1.3.0-beta.0","description":"**[Baserun](https://baserun.ai)** is the collaborative workspace for AI teams. Our mission is to simplify the testing, debugging, and evaluation of LLM features to help you get your app production-ready.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"@anthropic-ai/tokenizer":"^0.0.4","axios":"^1.4.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"readme":"# Baserun\n\n**[Baserun](https://baserun.ai)** is the collaborative workspace for AI teams. Our mission is to simplify the testing, debugging, and evaluation of LLM features to help you get your app production-ready.\n\n## Quick Start\n\nInstall `baserun`\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\nGet your API key from the [Baserun dashboard](https://baserun.ai/settings) and set it as an environment variable:\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\nUse our Jest preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n\n## Custom logs\n\n### log\nLogs a custom message to Baserun. If Baserun is not initialized, this function will have no effect.\n\n#### Parameters\n* message (string): The custom log message to be recorded.\n* payload (string | object): The log's additional data, which can be either a string or an object.\n\n```typescript\nimport { baserun } from 'baserun';\n\ndescribe(\"Baserun end-to-end tests\", () => {\n  it('should log custom events', () => {\n    ...\n    baserun.log(\"CustomEvent\", { key: \"value\" });\n  });\n})\n```\n\n## Production monitoring with baserun.trace\n\n### trace\nAggregates a trace of all logs generated by a function call to Baserun. By default all OpenAI completion and chat requests will be logged as part of the trace. If Baserun is not initialized, baserun.trace will have no effect.\n\n#### Parameters\n* function (Function): The function to be traced.\n* metadata (object, optional): Additional metadata to record alongside the traced logs.\n\n### Initialization\nAdd your BASERUN_API_KEY as an environment variable and then initialize Baserun at the entry point of your application.\n\n```typescript\nimport { baserun } from 'baserun';\n\nif (process.env.NODE_ENV === 'production') {\n  baserun.init();\n}\n```\n\nThen wrap the function that you would like to trace:\n\n```typescript\nimport { baserun } from 'baserun';\n\nconst traceGetResponse = baserun.trace(aiService.getResponse, {userId: 123});\nconst response = await traceGetResponse(message);\n```","readmeFilename":"README.md","gitHead":"b120cbf4e207f89c5c05ae377b3d1a5575ab9300","_id":"baserun@1.3.0-beta.0","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-eMcu7OIFpmiEat74czTvh/zrn46iYqVAlmmHKNkJRRkNks/HrvPjEoym3Qaa8hTw4KEpt6Tot/rtg2+yit+AZg==","shasum":"980466b8381fe4ac1115e5019423498a176aa9b6","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.3.0-beta.0.tgz","fileCount":44,"unpackedSize":89478,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIByHLx0j2a5PJFvSJq0LdcjGgMV0YRspdeVqPivbHiRMAiEA7EE98+JGCFOyYFWcIQ79xmdra+2Q5D54h1S4K4gP69k="}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.3.0-beta.0_1692676654795_0.03319870903080302"},"_hasShrinkwrap":false},"1.3.0-beta.1":{"name":"baserun","version":"1.3.0-beta.1","description":"**[Baserun](https://baserun.ai)** is the collaborative workspace for AI teams. Our mission is to simplify the testing, debugging, and evaluation of LLM features to help you get your app production-ready.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"@anthropic-ai/tokenizer":"^0.0.4","axios":"^1.4.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"readme":"# Baserun\n\n**[Baserun](https://baserun.ai)** is the collaborative workspace for AI teams. Our mission is to simplify the testing, debugging, and evaluation of LLM features to help you get your app production-ready.\n\n## Quick Start\n\nInstall `baserun`\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\nGet your API key from the [Baserun dashboard](https://baserun.ai/settings) and set it as an environment variable:\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\nUse our Jest preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n\n## Custom logs\n\n### log\nLogs a custom message to Baserun. If Baserun is not initialized, this function will have no effect.\n\n#### Parameters\n* message (string): The custom log message to be recorded.\n* payload (string | object): The log's additional data, which can be either a string or an object.\n\n```typescript\nimport { baserun } from 'baserun';\n\ndescribe(\"Baserun end-to-end tests\", () => {\n  it('should log custom events', () => {\n    ...\n    baserun.log(\"CustomEvent\", { key: \"value\" });\n  });\n})\n```\n\n## Production monitoring with baserun.trace\n\n### trace\nAggregates a trace of all logs generated by a function call to Baserun. By default all OpenAI completion and chat requests will be logged as part of the trace. If Baserun is not initialized, baserun.trace will have no effect.\n\n#### Parameters\n* function (Function): The function to be traced.\n* metadata (object, optional): Additional metadata to record alongside the traced logs.\n\n### Initialization\nAdd your BASERUN_API_KEY as an environment variable and then initialize Baserun at the entry point of your application.\n\n```typescript\nimport { baserun } from 'baserun';\n\nif (process.env.NODE_ENV === 'production') {\n  baserun.init();\n}\n```\n\nThen wrap the function that you would like to trace:\n\n```typescript\nimport { baserun } from 'baserun';\n\nconst traceGetResponse = baserun.trace(aiService.getResponse, {userId: 123});\nconst response = await traceGetResponse(message);\n```","readmeFilename":"README.md","gitHead":"4571fec941828a454d8f491aca14d5f8979b1572","_id":"baserun@1.3.0-beta.1","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-x3KkMYf8+cger7261nOVJKTo8fWEuzATohTpmfwOR930HoGDVxQKmCzJS+heDN8vK6l6Z9hECmClfo2zMh/yxw==","shasum":"c1ac9711507d32db19c8c828d0f6ecc6bdad8094","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.3.0-beta.1.tgz","fileCount":44,"unpackedSize":89478,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDq29/UX92m50CyHvO9skFcBTJeZFtUICOnbcfzgJk3kAIgAYwDNnHJGRKJto13UTTQde+HC7yTvstOM9R5MdQUQhs="}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.3.0-beta.1_1692677932714_0.9338569332967521"},"_hasShrinkwrap":false},"1.3.0-beta.2":{"name":"baserun","version":"1.3.0-beta.2","description":"**[Baserun](https://baserun.ai)** is the collaborative workspace for AI teams. Our mission is to simplify the testing, debugging, and evaluation of LLM features to help you get your app production-ready.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"@anthropic-ai/tokenizer":"^0.0.4","axios":"^1.4.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"readme":"# Baserun\n\n**[Baserun](https://baserun.ai)** is the collaborative workspace for AI teams. Our mission is to simplify the testing, debugging, and evaluation of LLM features to help you get your app production-ready.\n\n## Quick Start\n\nInstall `baserun`\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\nGet your API key from the [Baserun dashboard](https://baserun.ai/settings) and set it as an environment variable:\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\nUse our Jest preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n\n## Custom logs\n\n### log\nLogs a custom message to Baserun. If Baserun is not initialized, this function will have no effect.\n\n#### Parameters\n* message (string): The custom log message to be recorded.\n* payload (string | object): The log's additional data, which can be either a string or an object.\n\n```typescript\nimport { baserun } from 'baserun';\n\ndescribe(\"Baserun end-to-end tests\", () => {\n  it('should log custom events', () => {\n    ...\n    baserun.log(\"CustomEvent\", { key: \"value\" });\n  });\n})\n```\n\n## Production monitoring with baserun.trace\n\n### trace\nAggregates a trace of all logs generated by a function call to Baserun. By default all OpenAI completion and chat requests will be logged as part of the trace. If Baserun is not initialized, baserun.trace will have no effect.\n\n#### Parameters\n* function (Function): The function to be traced.\n* metadata (object, optional): Additional metadata to record alongside the traced logs.\n\n### Initialization\nAdd your BASERUN_API_KEY as an environment variable and then initialize Baserun at the entry point of your application.\n\n```typescript\nimport { baserun } from 'baserun';\n\nif (process.env.NODE_ENV === 'production') {\n  baserun.init();\n}\n```\n\nThen wrap the function that you would like to trace:\n\n```typescript\nimport { baserun } from 'baserun';\n\nconst traceGetResponse = baserun.trace(aiService.getResponse, {userId: 123});\nconst response = await traceGetResponse(message);\n```","readmeFilename":"README.md","gitHead":"ba6571f3910aa5017a10714297d532dc82d70672","_id":"baserun@1.3.0-beta.2","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-Aa9kdgCUD+lpUAFdzjrQ05tU/0jo4eM49Tl9JoIMw3z+y71Ur4upIj+U/WLa9B5ruReuZ58Bm38dr+i6hyBVtg==","shasum":"ec0d04d7086ae0f2ed910ec6f0d1ba95730d199e","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.3.0-beta.2.tgz","fileCount":44,"unpackedSize":89483,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCMK9G6g9GHekRiVGtiGOnmbQP9INCm/2ySvig9zPbJ2gIhAKRICgSAqgcKEw+YU7UJKAW1Z27zsPLA+IBPldoRje8w"}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.3.0-beta.2_1692679033910_0.21710999008204812"},"_hasShrinkwrap":false},"1.3.0":{"name":"baserun","version":"1.3.0","description":"**[Baserun](https://baserun.ai)** is the collaborative workspace for AI teams. Our mission is to simplify the testing, debugging, and evaluation of LLM features to help you get your app production-ready.","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"@anthropic-ai/tokenizer":"^0.0.4","axios":"^1.4.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"gitHead":"41376b5c9bd9df9594c0b642890e3c46f3474a85","_id":"baserun@1.3.0","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-ViTMf/1oM7L9YJSIFn4NVvuJMKMEuQZKtCtj6My0FR92S3zEzk5y2C06fkApJlVwqey9ARszuGDqd0mcpzc9uA==","shasum":"8711a6b99455670b7f9c000a7984eed8026b14f2","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.3.0.tgz","fileCount":44,"unpackedSize":89476,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCHzohuVgmP0/RMEn6jsELSh7HlzNDKZCCaB7rncE6uNkCIQCLkZEEOGiuj1mGgYVfbkx1yNhcKErKcCz/TIz7xbVVFA=="}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.3.0_1692749403336_0.5430757629924274"},"_hasShrinkwrap":false},"1.3.1":{"name":"baserun","version":"1.3.1","description":"","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"@anthropic-ai/tokenizer":"^0.0.4","axios":"^1.4.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"gitHead":"6b885366b8f46723bd15cfd42dcf8f9d4a14b735","_id":"baserun@1.3.1","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-cj2sOQLpyRp2RHS57PFdXKunGMHJCZffNJt3yxUxa1ped1G644A4unxY3kYUM9YsH4ydZSQqAIYZkGoS9efOOg==","shasum":"0cf6581e50e4a9d2a8ffe56c8c11e3790f15126c","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.3.1.tgz","fileCount":44,"unpackedSize":88706,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDuYiJZvfVFAu2jjOKnlGlq3nU81SVbu6CUQAGo/F6i9AIhANtmq9tdkR9bokArEwPbR2uTTaKiL9JRd6bxImfbqmu7"}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.3.1_1692751836737_0.4665764824150722"},"_hasShrinkwrap":false},"1.3.2":{"name":"baserun","version":"1.3.2","description":"","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"axios":"^1.4.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"gitHead":"c25fe579087a92190dca861cbffbfdc9666cefdf","_id":"baserun@1.3.2","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-+PYU7/B57E4BDExvE1gxfG9M1VF5Y90tlJ0oiNuGHRva/n/GxdZq6+BI57ZVg0dH8b7r0yIdmr261mwN+YR/iw==","shasum":"ed19f11c965a75b039291e76a5de8f7fa2544d38","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.3.2.tgz","fileCount":44,"unpackedSize":88188,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICAHHxh/k2tZEdS+9nOL8INdisu6N1yxjQTCqX0RfQ2BAiBjTbgQi2yHF02c8Xg6Yv15Wu4pyErWG/4GK3VfUoYrew=="}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.3.2_1693190910770_0.1900214051793665"},"_hasShrinkwrap":false},"1.3.3":{"name":"baserun","version":"1.3.3","description":"","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"axios":"^1.4.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"gitHead":"5f0f3aa3c05c9b8cf63eda6e9d5d060ac5e19d1c","_id":"baserun@1.3.3","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-zibOh1fuWEuWGZx/B3l3kvCPnNgyPl+94krgC48ZlbdP1y7DS6J94MMDDMetbidHYiM8Kc38KfUpXdnst7iWNg==","shasum":"67260344c21aac861271d19b7e9cac5e6946b884","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.3.3.tgz","fileCount":44,"unpackedSize":96773,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDvgtVyxHikapXSm/5sPwV8p9caCY0jY2TTF9MLyHRgVgIgPg6ip8v9Ihc0kAtJA4U3PsUX1FLaZpP0n8u1W+qAv+Q="}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.3.3_1693535843428_0.12929221128479673"},"_hasShrinkwrap":false},"1.3.4":{"name":"baserun","version":"1.3.4","description":"","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"axios":"^1.4.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"gitHead":"36109c8313d4351d93e21e7167db533cd7edbc5d","_id":"baserun@1.3.4","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-Y/3Ilqa4oeokK4u3R8B7PLzxa9vx0qSNL8Pj6tPnhrIEKOuq9ReEzqBYI7s6lvCRafNYaZ62vkU8biTgnxIVoA==","shasum":"088f9eb41cd024537c88e454e79f1c1a31224f76","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.3.4.tgz","fileCount":38,"unpackedSize":72954,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA3zC2afx0KTtoyKY7pV/qk7bX6YxpNlYVq4xnw6M2hGAiEA9aXM5gbOlStheK0JiG6azFbd3h7hnaJNwScPPh9VXY0="}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.3.4_1693854380799_0.8165914882870093"},"_hasShrinkwrap":false},"1.3.5":{"name":"baserun","version":"1.3.5","description":"","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"axios":"^1.4.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"gitHead":"af2f9a8203406d8088e69e4dcfbd724c220a0186","_id":"baserun@1.3.5","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-O1mLbIc/7JhrHeQccmyEcURS70RIfit8uWHUBDIC1QGv95P0sl4JHq706qdr61nuNQLCiUG3lCsD7X6cZWToMw==","shasum":"bb11d035695e6959b1479cea3e4991b9b4f878fd","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.3.5.tgz","fileCount":40,"unpackedSize":73305,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCD/6yAVgacP2fzl7TtHAS5tfVZwerOqNeFI4/XOg/DhwIgXSEPlQv3lx6ILdhX4GtAw+ntoviBkDMJ/ccN/r3t+tU="}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.3.5_1693856155180_0.3373678050961355"},"_hasShrinkwrap":false},"1.3.6":{"name":"baserun","version":"1.3.6","description":"","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"node-fetch":"^3.3.2","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"gitHead":"edaf783a0dd967c48492dae637b79f2347253c91","_id":"baserun@1.3.6","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-l8L7EWqSlCyRuPsjpMnsQtEV2umsO379nvbRWNJheM6pH9pN8ib821nKgM0O6tbw+PP0Us5fbCVZwKxJJGCNAg==","shasum":"11c2ee314cb521861b3e0e9e658a0c96d35beab5","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.3.6.tgz","fileCount":40,"unpackedSize":73477,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD3tVrKAfQ5Ju4kmXAIURF76fJm4GnY15WJMEeC+CsedQIhAPFTw2S+J+XN4tVRg7TYXasI0CMN8rdoERNzcNnJ0qHD"}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.3.6_1693870906600_0.705647807396629"},"_hasShrinkwrap":false},"1.3.7":{"name":"baserun","version":"1.3.7","description":"","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"node-fetch":"^3.3.2","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"gitHead":"f70bfb05a6b14aea9d9cc9e0a014c3f6d825b947","_id":"baserun@1.3.7","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-unuJEexSkkr2wxap9F7LLFHy1wA+0boMTS3BkHf1VgsS47qjMBRO4WwlzSSroMjyqO2eck+Bi6wcXOYOnxjW5g==","shasum":"5acfbc5a73c12297e3bb37e1961e03c243b95ed9","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.3.7.tgz","fileCount":40,"unpackedSize":73607,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCa4TR/YaVBH6HjjalQMW70cdfBr6P0Du20/PMvmpjm0wIhAJkPhAlllHE3jukValV4jpxbSe8bhtWWKjzud6uL4s/k"}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.3.7_1694468985122_0.6034338243306594"},"_hasShrinkwrap":false},"1.3.8":{"name":"baserun","version":"1.3.8","description":"","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"node-fetch":"^3.3.2","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"gitHead":"4fa944a94fcb8d351b472be64281cafd04175405","_id":"baserun@1.3.8","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-nKtfgx4WG/nvskvQK3Hh54pd48VwtVRwzd+33cq75uKpcUNdx5hFipJYcSGSEw+qa0pyyEC9QfiSGS+Os44mTQ==","shasum":"680c9fec58e4cc5d8425953855dc6966c6a79413","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.3.8.tgz","fileCount":40,"unpackedSize":73498,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCwQWWkcRneRU2GSDmQAFcHHqgpSg+/PMxcS/Id7hPfKwIhAPmkdg48/odXePT6rz72Gf70DmCxCr2HSpK5dDefotHh"}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.3.8_1695076220809_0.03782365935119647"},"_hasShrinkwrap":false},"1.3.9":{"name":"baserun","version":"1.3.9","description":"","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","test":"jest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","prepare":"husky install"},"keywords":[],"author":"","license":"ISC","devDependencies":{"@types/jest":"^29.5.2","@types/json-stringify-safe":"^5.0.1","@types/node":"^20.4.5","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^5.60.0","@typescript-eslint/parser":"^5.60.0","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.5.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","ts-jest":"^29.1.1","typescript":"^5.1.3"},"dependencies":{"json-stringify-safe":"^5.0.1","node-fetch":"^3.3.2","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"gitHead":"72930e6caaac0b576566a4b317ca914e3f38af3f","_id":"baserun@1.3.9","_nodeVersion":"18.16.0","_npmVersion":"9.5.1","dist":{"integrity":"sha512-wj3YnsG9c9dFkHqHQft7BKfdpM2nrSy5O6SvRWWVcoLlB8RFlNRQ8Z/Ri2mKGdc7IIdMS/pOv4P6q9wlCZjTtA==","shasum":"7529d1b6f888c3ddf5458b757f8f9c7b6eba5243","tarball":"https://registry.npmjs.org/baserun/-/baserun-1.3.9.tgz","fileCount":40,"unpackedSize":73877,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEfaNJQR0zGJtRfEL8NVN7Ix2YBnZ4OdjoV2pAUz3xHgAiEA2l1KJXe2FNJ33hE7twp6PnEUnHVrNMeZMqf5XJDzhbg="}]},"_npmUser":{"name":"aginzberg","email":"adam@baserun.ai"},"directories":{},"maintainers":[{"name":"aginzberg","email":"adam@baserun.ai"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_1.3.9_1695407340453_0.0469526608883728"},"_hasShrinkwrap":false},"2.0.0-alpha.1":{"name":"baserun","version":"2.0.0-alpha.1","description":"[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai) [![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai) [![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)]","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","postinstall":"patch-package"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","patch-package":"^8.0.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.0","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","globby":"^14.0.0","google-protobuf":"^3.21.2","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve-pkg":"^2.0.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.1","dist":{"shasum":"61669d2ab04ea52fe589a65c4cdb570e4c9c51e0","integrity":"sha512-8ZbY5S1Hez3XRY+pv2rKC3dApzE87XC897Cf+E45+TJtzYV/3mn8Wm6IIPd53P3a4gcQmSbE6MJu7DltfZk9Wg==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.1.tgz","fileCount":209,"unpackedSize":1780916,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC4igiRbxGIC9bha5jr++cHjmfZslEnDOU851AgmPSChwIgacweIQ3m44gdvMiRhyein88CGgAbko9n5Ye+XHelHRs="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.1_1700604146247_0.6841741354515238"},"_hasShrinkwrap":false},"2.0.0-alpha.2":{"name":"baserun","version":"2.0.0-alpha.2","description":"[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai) [![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai) [![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)]","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","postinstall":"patch-package"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","patch-package":"^8.0.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.0","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","exit-hook":"^4.0.0","globby":"^14.0.0","google-protobuf":"^3.21.2","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve-pkg":"^2.0.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.2","dist":{"shasum":"b817b37329264daef802818636de8b9e005e02f7","integrity":"sha512-3jeSh1nsEzAkGal7URwWUNSfPuZSsPRx0WGpbBwP98Obsv4ixOzU0K6wX5VJhhWoQ6N022z1b6DkU5rB5OsyKQ==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.2.tgz","fileCount":215,"unpackedSize":1808450,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEwI3NG8PpHLW4+f9PmpoiEUGIBHT3XbkUjm7UW9/P3nAiEAlMxdG81VYzPmwE4arkpLEa5NjyR29FjvKfRKeHvd38A="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.2_1700615074554_0.11809072477172267"},"_hasShrinkwrap":false},"2.0.0-alpha.3":{"name":"baserun","version":"2.0.0-alpha.3","description":"[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai) [![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai) [![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)]","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"patch-package && tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","patch-package":"^8.0.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.0","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","exit-hook":"^4.0.0","globby":"^14.0.0","google-protobuf":"^3.21.2","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve-pkg":"^2.0.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.3","dist":{"shasum":"e8e36a65b4a851d95e83150a20799921fe6a2959","integrity":"sha512-h2AkeAgJZ7FNKxOKA3241MgyDvtthtAVthmg7XWzwVPlqir46m0dKo9ZxOy+PdMt9cZwmbYRYmo2sB4tkEo7EA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.3.tgz","fileCount":215,"unpackedSize":1808364,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDJztLPuEliOAgkpY4D1n5rGL6RsdN1k4rB7lgPkuBaBAIhAMLY1UPJ99JHA8fnpKhu84+AqrU39oCyB6nlDzYOnQO6"}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.3_1700616522357_0.9152413957463932"},"_hasShrinkwrap":false},"2.0.0-alpha.4":{"name":"baserun","version":"2.0.0-alpha.4","description":"[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai) [![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai) [![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)]","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"patch-package && tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","patch-package":"^8.0.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.0","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","exit-hook":"^4.0.0","globby":"^14.0.0","google-protobuf":"^3.21.2","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve-pkg":"^2.0.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.4","dist":{"shasum":"4a0606439bdffe14113c04193439d99e3214c2ca","integrity":"sha512-P39QEZ08UnLb8vhKaiqXUxAGDVVGQbrgF1r5P0UJs24fzYDutdexQkKWjMMTMbLgOHD3xGNaTfutJVqsSEMZaQ==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.4.tgz","fileCount":215,"unpackedSize":1809670,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC6HtaNREfLTeRfzy8sBMp8zb2FpwgOLqChaZKs83pn+wIgIR+c47NOe8RKa6I1x1zGFyEPJ6WMMhxNpNyQOGTtqq0="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.4_1700618404694_0.5975102645025019"},"_hasShrinkwrap":false},"2.0.0-alpha.5":{"name":"baserun","version":"2.0.0-alpha.5","description":"[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai) [![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai) [![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)]","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"patch-package && tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","patch-package":"^8.0.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.0","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","exit-hook":"^4.0.0","globby":"^14.0.0","google-protobuf":"^3.21.2","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve-pkg":"^2.0.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.5","dist":{"shasum":"ae422755df888d6c9f2965e0a29891cf1fed6c60","integrity":"sha512-NaSNPzZDY7tpSeshGOKJlJvG1k27bjjh/awZkeh9HdlKH4f1R5a/9D9/jjgFsC9+ncz2zJsEqzNsAlmFelcA4A==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.5.tgz","fileCount":215,"unpackedSize":1811085,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDPZSbqYKuEx4SZopnAxjBaVBJrF2DztC4JN00s0wul6AiBKz4xmxB6Bf6onQ7LY9ZugYzOQQgge7zshgW/YdO6FnQ=="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.5_1700618742978_0.39343208960973897"},"_hasShrinkwrap":false},"2.0.0-alpha.6":{"name":"baserun","version":"2.0.0-alpha.6","description":"[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai) [![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai) [![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)]","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"patch-package && tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","patch-package":"^8.0.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.0","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","exit-hook":"^4.0.0","globby":"^14.0.0","google-protobuf":"^3.21.2","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve-pkg":"^2.0.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.6","dist":{"shasum":"ffce14d3955133513e5e423af656d7063b3891ed","integrity":"sha512-y8nONls161cQKxWOS16uWjo+rzFGxp7OY0ofTs5F9krBX8OZngrnBxqMM/spGeg6ZZC304F8UPskmQDAg88wgA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.6.tgz","fileCount":215,"unpackedSize":1811085,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXDM3kLePoXETc2dwKtCYnkNuANNzXZJiGH+AYd4i7FgIhAL8CdOyxBrwAuXxyNVu2mki3ZASKRJDWim8YzoEAJRX/"}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.6_1700618816323_0.14101429739966997"},"_hasShrinkwrap":false},"2.0.0-alpha.7":{"name":"baserun","version":"2.0.0-alpha.7","description":"[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai) [![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai) [![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)]","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"patch-package && tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","patch-package":"^8.0.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.0","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","exit-hook":"^4.0.0","globby":"^14.0.0","google-protobuf":"^3.21.2","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve-pkg":"^2.0.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.7","dist":{"shasum":"0c7a75a17ab318d4c42945fe31ef3a4a0f7d3d7a","integrity":"sha512-UtNgzsLT3m2bToiS7+A9jJKMZP/mZm4TS5QJZfwOHz0xXJ9EWVW7ZpovsgN4VTP9F8Y9NxK+defCmcmsZC4Ijw==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.7.tgz","fileCount":215,"unpackedSize":1811327,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDXl1OcTDSfMHoCvkzpNj+Uv3XT+Ao1lQt0sFAL8HHs0gIgH9AmY7DQWbLPhjJwTFr3dkI3sGHRTTXZaluw3Eyo8Sc="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.7_1700619080187_0.3650052665307222"},"_hasShrinkwrap":false},"2.0.0-alpha.9":{"name":"baserun","version":"2.0.0-alpha.9","description":"[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai) [![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai) [![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)]","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"patch-package && tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","patch-package":"^8.0.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.0","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","exit-hook":"^4.0.0","globby":"^14.0.0","google-protobuf":"^3.21.2","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve-pkg":"^2.0.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.9","dist":{"shasum":"a9c9bd4a15f92df85da2ccaecadebdc1da2856e2","integrity":"sha512-rpYo5wqu2MjTw5fjPWLDX5rn1SeBC1Mw5RhdVnmCcfKvUAJbLJiw3qlJLkrnPaWUdihtS9g2RIpJtHqTObG4aw==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.9.tgz","fileCount":215,"unpackedSize":1813349,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCBnqYvJEFco6t5IWkAUYwXX3g+YsQKFbX1IJTC4+5PKgIgfJ1hLKw8H+7pGawJw3Z7HxiUzuUMS5egBfjQNDU9HQM="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.9_1700619631806_0.8895822233211244"},"_hasShrinkwrap":false},"2.0.0-alpha.10":{"name":"baserun","version":"2.0.0-alpha.10","description":"[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai) [![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai) [![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)]","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"patch-package && tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","patch-package":"^8.0.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.0","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.10","dist":{"shasum":"b3e81704dcad5d2a838fb8870183b186e7d83010","integrity":"sha512-eWe5xUEGzOd1/g+pqzhy2QSXisFjZK7AORnqOs2scxQ33aNzyIPLgDT7aycBLKuuGHxA2i/rA13Atf3XMg0xcg==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.10.tgz","fileCount":317,"unpackedSize":2259305,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4wGXjbhIxhEfYSsefI30UrvVKPT9woma0iXOCMUKN2gIhALO1ciTr6joB0KVmhVj9j9X3bB0NYRefNdeoyUBrqVaD"}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.10_1700678527327_0.4928098950452138"},"_hasShrinkwrap":false},"2.0.0-alpha.11":{"name":"baserun","version":"2.0.0-alpha.11","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"patch-package && tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","patch-package":"^8.0.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.0","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.11","dist":{"shasum":"1b734ab8cfe4c0f9540015a4206c35a6e0db5d44","integrity":"sha512-PtaxFWsNzi0VdjMr0ce/nPPVDcCXINUJLfrawmpRaWvq0bH/CwHPxZBE9JwLup4KNME23wlZQUOX05qhhzCr1A==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.11.tgz","fileCount":317,"unpackedSize":2259483,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC6Gxy4FdeOrVroZjmOtoUxvHzI5bINaON3KeWMFoNPeAiBK5z3Sfr0P8LYbxx9BFe2+xtrPOTZlKoseQEYIclUWNA=="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.11_1700678602467_0.552007411210282"},"_hasShrinkwrap":false},"2.0.0-alpha.12":{"name":"baserun","version":"2.0.0-alpha.12","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"patch-package && tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","patch-package":"^8.0.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.0","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.12","dist":{"shasum":"ea410cb7d6418a54d2dd2c4610707ec0582f8290","integrity":"sha512-aA2OPakaUDZUYJwDqkmZ2IjyCw4h7gDVEk9L+hqpXKCiiVVLWLxddjHLEVw3B+2A3oCqMhXvL0zNHTaY9eBxkQ==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.12.tgz","fileCount":319,"unpackedSize":2258564,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBQFi9Yiz2ErD3HIzQ7+nQ5+vf20/j6wvOCK69jVchdpAiEAmp0nCwWc2/1BOTfLJKhcbU/5znVJRgNx9Sl2lQZZ8sY="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.12_1700678713693_0.5674907918172154"},"_hasShrinkwrap":false},"2.0.0-alpha.13":{"name":"baserun","version":"2.0.0-alpha.13","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"patch-package && tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","patch-package":"^8.0.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.0","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.13","dist":{"shasum":"73622b9e94d6bd2e72d505b623a17def2322b787","integrity":"sha512-ub7WJJkxH5TBQ77chX9rg3g3Z6bH/Z9HNavVghbnjUv9kgGPESht1boMH/A+/eerJhgHj7uvMDLyzgmBmGo0Vw==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.13.tgz","fileCount":319,"unpackedSize":2258105,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGHHWXOVZxnE8cBzHHgOOmzAxuBfVxWPxnf1C6t2Nx9OAiEA9joFrriGUxvAMhHF0GyKz0PVjrlmYGsiWmYTZnQqbng="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.13_1700679189144_0.7045614017183803"},"_hasShrinkwrap":false},"2.0.0-alpha.14":{"name":"baserun","version":"2.0.0-alpha.14","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"patch-package && tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","patch-package":"^8.0.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.0","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.14","dist":{"shasum":"3ca006cec46ec8b87adae5410f371b4f2d812882","integrity":"sha512-L6WEUwL+PKQ3otpCDilpUmZvGINXomEsoPctdxGQ9cw0c8j2gJzh9rgZlQPccsAmu7t3YLCgTc78ugUMEOeZog==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.14.tgz","fileCount":269,"unpackedSize":1913299,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEHZWFnzlh6KMdAGxj0JApitVvbJryw63z5hpx9XWQidAiBHjeiSAzp06DH3G61aN1lFo3NTpMBxrd4jX9MdKNXDrQ=="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.14_1700679309787_0.4261453772623047"},"_hasShrinkwrap":false},"2.0.0-alpha.15":{"name":"baserun","version":"2.0.0-alpha.15","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"patch-package && tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","patch-package":"^8.0.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.0","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.15","dist":{"shasum":"45c2f529f5c84c7790f90bda71efc9c548661e57","integrity":"sha512-lIkgchUcLKzvaCoznnhPJcTF1Oe+xhe+12Dn4ZCaiwdmw6FlXw7UghC3uIvfU9LaxybaVk13F70UGhbxJS0p3w==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.15.tgz","fileCount":269,"unpackedSize":1913080,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEzN9MrzDKwEwRDd2cFs5dRwRZaF9YfsXjpkL/K6k2CKAiAIbNl27stiErTkKp/Xl9yHGPyQwrWR/YzrUMTT60qK8A=="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.15_1700679396578_0.6181680101752416"},"_hasShrinkwrap":false},"2.0.0-alpha.16":{"name":"baserun","version":"2.0.0-alpha.16","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"patch-package && tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","patch-package":"^8.0.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.0","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.16","dist":{"shasum":"d7e1f626649045e1c0c15290232d5db28a6fd472","integrity":"sha512-GX2MLCBkw7arFBBBgzlnJAiGh/qFcsr1xl4ZY+kgw+lxk6itr1AFHKzHTgNPFkjkJMRgjAzFLYfXNQi3+6zoeA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.16.tgz","fileCount":269,"unpackedSize":1913433,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIF/9DRKXU7EufUZEyaJZElGJugCx6R1f+N727shhCJAtAiBkynkfcWv6TM95zbrZDyAluVq4m2BCNtQoIIvesGoLqQ=="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.16_1700679710356_0.8077950904344828"},"_hasShrinkwrap":false},"2.0.0-beta.1":{"name":"baserun","version":"2.0.0-beta.1","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"patch-package && tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","patch-package":"^8.0.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.0","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-beta.1","dist":{"shasum":"61285ef30207de4abbb6e5d736b83bb5a54c4b2d","integrity":"sha512-HJUAr41GEsCbh7X/97C3h7Td2+UnN9Ow2GGhzyPl9V4RQPhYRl44P5v06Tzpuklc6fAo9laNKUIKupWG1IKg3g==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-beta.1.tgz","fileCount":269,"unpackedSize":1914979,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEC/7ClGvlrVnwc5RHa1trKDCh5V5p8O37H8wEBiTBPRAiEA+qIG16o/xrMG598GxTwFnIPMAEVlH8chA7IaCp/qzIc="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-beta.1_1700687806122_0.25099899817943006"},"_hasShrinkwrap":false},"2.0.0-beta.2":{"name":"baserun","version":"2.0.0-beta.2","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"patch-package && tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","patch-package":"^8.0.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.0","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-beta.2","dist":{"shasum":"9d1f508d089438501a99accd34638230f1623b15","integrity":"sha512-d3EI7qlFeJmANRB0IKWDa/xqrFJ8TExluLTb4c0SilldE55O0BQN8JOXexss8NuDYBtpFBvFdLk/YQT5gyB6eA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-beta.2.tgz","fileCount":269,"unpackedSize":1915431,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCrpfchxEBLQ3LggzF9HNgkdSr687ZQMXONyC0YV0mtbAIhAIdG8oGWvjHFj9aqJOK1hj21KR2uqmLte5LQ8ishwekh"}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-beta.2_1700688878460_0.9853687780498415"},"_hasShrinkwrap":false},"2.0.0-beta.3":{"name":"baserun","version":"2.0.0-beta.3","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"patch-package && tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","patch-package":"^8.0.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.0","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-beta.3","dist":{"shasum":"6546caa1bc1ba8ed96d030875d3d8e6359f60520","integrity":"sha512-bYKf/fpPc8eQm4roz4QTi2LSakOgwRzVtbiOcKNJLJbQLDpUgy8hue/ooowbOmPQriBmaYBtS5bKgdyX7PfxaQ==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-beta.3.tgz","fileCount":269,"unpackedSize":1915775,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4Uuu2Rmqau3iW7n/7sxPDnXIV9XL7DR3cb15tJWkZ5AIhAI37fLe5P+PbQOWjAvcJDKzpAgi40r5hMwXSflV3gncA"}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-beta.3_1700689323100_0.31596629591415626"},"_hasShrinkwrap":false},"2.0.0-alpha.17":{"name":"baserun","version":"2.0.0-alpha.17","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"patch-package && tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","patch-package":"^8.0.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.0","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.17","dist":{"shasum":"34a27a7186c378f62aa43508d66bc8a65b0f2407","integrity":"sha512-O4YeVuoCg1d7ShpoFVoVHvgpQk3y0QcMmjNoFk7U1K4ah2CWgaCR5QdLlLVf9VS7f1Y/TNz/4YlJlwsIC3nJ2A==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.17.tgz","fileCount":269,"unpackedSize":1916436,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCv8NtHXHo6utCzZDpP0W/XvMLaUjPZGaP6sSMtQRmd+gIgJlg1Hpp3J9EfUD1vZP8Gvh1K6Elmxqpkulv6zdImJvM="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.17_1700690284909_0.7914382723364515"},"_hasShrinkwrap":false},"2.0.0-alpha.18":{"name":"baserun","version":"2.0.0-alpha.18","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@kaciras/deasync":"^1.0.3","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.18","dist":{"shasum":"9e89d33846fe38f6f51ed717fe62ad05f7f1177e","integrity":"sha512-PLwmWfKaiSYZGD0GMYKrbWv/s1tAnwo3PVRbwKYJ+WVQy8FyZP/5uXLiQpypWT53VP90m/3b1zRyWh/l/wRxpA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.18.tgz","fileCount":269,"unpackedSize":1916618,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF3JKxVsCfW/07XoPknLfqQcV+09AoA9hiALU8/B0jp6AiEAuSf5RohvBraGmOf2Y0nMFGjteQNM7hOylujxe/ZsHT4="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.18_1700692726760_0.368749577485322"},"_hasShrinkwrap":false},"2.0.0-alpha.19":{"name":"baserun","version":"2.0.0-alpha.19","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@kaciras/deasync":"^1.0.3","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","@webassembly/deasync":"^0.1.23-blitz.1","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.19","dist":{"shasum":"1d5f194b8d218e767ca652678675271d17759ee0","integrity":"sha512-6VDIaCqSj8TPDsxRhtkElhyfgihVd+Hg+tRyFXbO4o1A54PHHusijEGXgWXQJ1zt7sjUBjI02Q2Zapo83PVF3Q==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.19.tgz","fileCount":269,"unpackedSize":1917714,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHVRaZPQhe4QY7mOeE8pEJgSx30mHH8VOjCVu37avx4wAiEAt8WD1AKmzSPFm+hcyrwn9vVT7WTWUA51YWPaqKqFrYM="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.19_1700697136403_0.5747922362481932"},"_hasShrinkwrap":false},"2.0.0-alpha.20":{"name":"baserun","version":"2.0.0-alpha.20","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@kaciras/deasync":"^1.0.3","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","@webassembly/deasync":"^0.1.23-blitz.1","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.20","dist":{"shasum":"406bc4f8682eed3335bab6c6ff3fd5d7eef9e84b","integrity":"sha512-I+NLmjcvsWdXGKvKIi6cPaxMfdbqbFJhsD7exmLN/zF2oyaUzoNcklG0FUiN/l2quoo8Lc1I0cdpIYYdtzxGSg==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.20.tgz","fileCount":269,"unpackedSize":1917714,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDWPWVb60bF2xTtHfNlL8Wxi6XHoOSu2iqcH5ibXLH0jQIgYmFjkYimz1C2k9nj9ssUGrwPtc9XG9DfE37QKbDjXdA="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.20_1700697220784_0.6432222647710089"},"_hasShrinkwrap":false},"2.0.0-alpha.21":{"name":"baserun","version":"2.0.0-alpha.21","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@kaciras/deasync":"^1.0.3","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","@webassembly/deasync":"^0.1.23-blitz.1","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.21","dist":{"shasum":"22b32a445a719f87dd7fb6337e51605a02dc18e2","integrity":"sha512-oKZw1H8ZVhfDryhB8/wM7dSunoB8ix9lMMdkHgaMdd+v8OVJbKp7CsrhIiBoA2FGd2SmvPP48cmUMso/HfQM9A==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.21.tgz","fileCount":269,"unpackedSize":1917714,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB320knkV5UGiIbvYO4BKiE2YOEdQFN499ihIVyY5cqPAiEAzJmF1PDmlIT9WKVaAwe/zh2tNK6+8k7CcJ/jT7nx24w="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.21_1700697349433_0.09651699279881298"},"_hasShrinkwrap":false},"2.0.0-alpha.22":{"name":"baserun","version":"2.0.0-alpha.22","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.22","dist":{"shasum":"d892d75cb7fc26de8f2d2fef416347f39e1fab85","integrity":"sha512-19VcOjBH2xHBMZLMNlpHo8BzWwNPPTlTnccyg88GhdLPRasSNsMNrdWcG+M6gQhmKBIgW6ofA7Tvyzm92WxHkg==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.22.tgz","fileCount":269,"unpackedSize":1917633,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/rrSf7svXURibSoOnPOLH1+8W2YEUf9I17E8JxoNraQIgEtJ16xcZWHpcpK0OMrNMVgaQidvZt/8PZfsN4jfnopw="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.22_1700701705824_0.3190952704906995"},"_hasShrinkwrap":false},"2.0.0-alpha.23":{"name":"baserun","version":"2.0.0-alpha.23","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.23","dist":{"shasum":"737ec795f250f5642fd051f0424c9afabfe7877d","integrity":"sha512-63tm+ebN0zdByeJNjNB8G+UICiDIr3mWxAFlVR6dkIr8NJdAz8BDgV2LIa9Qt1DqBflYrRJx+gPGyKh5mmPVsg==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.23.tgz","fileCount":269,"unpackedSize":1917633,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEjzy8ECgFwVO4ZsnrNOjTwFi/p+UbZJgaQAJM1str8fAiEAwxMYALuDzx8wX8Ubb2vhYUoDg8r4qQ4KEBYBWNZpdGM="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.23_1700701771802_0.014699016012533983"},"_hasShrinkwrap":false},"2.0.0-alpha.25":{"name":"baserun","version":"2.0.0-alpha.25","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.25","dist":{"shasum":"d6281f7310d6d91b573fec1aca62d5b2120a94e2","integrity":"sha512-orRR0nf6nk69VB5eKkS8586Gb3Du3K7zDxpvXX/l51ijOkwxgr650D3c7WQ4oIfZ+aIeXvjD6RwN9hCGZM/fAw==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.25.tgz","fileCount":269,"unpackedSize":1917794,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD3RENCaj98lYzkg88qpzYUEdbU95W8rM+XCQW00y7wWQIgIZyW+YKGQSO9QCpIUmSrg2lRcbXPlTKmJgth6dN6khg="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.25_1700767618905_0.5715543785198598"},"_hasShrinkwrap":false},"2.0.0-alpha.26":{"name":"baserun","version":"2.0.0-alpha.26","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.26","dist":{"shasum":"aea27632c6d45b4da13e930feaaa70bfce6ea70f","integrity":"sha512-EAeERgx0g35W3ejYMwbk7c5t+IkowQi2Go03zb58TBC7sSVI+hrvuC4CXWDUIbAyE6jEOdvVJZsJHDtFZ3te0g==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.26.tgz","fileCount":269,"unpackedSize":1917201,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYPlCZlAhXSayk+qUMmAWfN1Demg+hGvG49M1KT5Xq3gIhAK/BjxIGx6rvq9Nn/JWLnC+QQ9SAmZeAddqy7DfnbfgJ"}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.26_1700767711667_0.6674809362110836"},"_hasShrinkwrap":false},"2.0.0-alpha.27":{"name":"baserun","version":"2.0.0-alpha.27","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.27","dist":{"shasum":"896a617af01503af1513d579a56f0c1b02513fe8","integrity":"sha512-BmtunxfpB2RiwDfvPvmugCrvmZWiVP8lAI8SmFBDWQfmo9IoJCM1O8XsxMwbYkVTH3I1fJGp5mhBrg/+Et+UxA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.27.tgz","fileCount":269,"unpackedSize":1917794,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIELd47uAlzf9ovLvxCk6QSnmhVR4y9YGHvbTJzGOJhiWAiEA8eC86arDzatN+iCUDi45TShx40v8TwfCFlwnPei7x/U="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.27_1700768559765_0.8312845758173928"},"_hasShrinkwrap":false},"2.0.0-alpha.28":{"name":"baserun","version":"2.0.0-alpha.28","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.28","dist":{"shasum":"17bae33f0a51ce59cff8f9003f86d475b4e133cc","integrity":"sha512-T82oy7Quhmuim+MzZO2P0okqy6+89Vu/kRB6t/r3N2FivgbWAeyLiFlXRM9Ye0bSTJLl1Lj2xLl2f3DBzetPaA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.28.tgz","fileCount":269,"unpackedSize":1918698,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCvPGj3CqxUBzctKX5voDwAKHjaGu6SpfRSPaZhB6ZgQQIgFW9AhI9pDfw2EUYqVSuCNKk9dGHQIwapVOFmnQNZBPI="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.28_1700768715010_0.589749814015315"},"_hasShrinkwrap":false},"2.0.0-alpha.29":{"name":"baserun","version":"2.0.0-alpha.29","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.29","dist":{"shasum":"c4828cdc52d30b46bf10e38921dee6efc023ced8","integrity":"sha512-PA0bra94E098tmIPjnhdzJtW8o6S/YVda3azQyXm/b3nGdH9dBwz4lyMunt4xEApyi+oDINk2y+TGQbWHoMt7g==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.29.tgz","fileCount":269,"unpackedSize":1919586,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBMYLiePDdoOerfHj0vTaPPvakAwvu/OYRWBxG55NKKaAiEA/LwHaMD6ROKE6rzKeJ6atT7oq5T5Wrd/+HBTqFH1yZA="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.29_1700770224897_0.3431222157074958"},"_hasShrinkwrap":false},"2.0.0-alpha.30":{"name":"baserun","version":"2.0.0-alpha.30","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.30","dist":{"shasum":"02643e71f4cc23d2d15c792bb9ada1bbb61fafd1","integrity":"sha512-aFbQBIX95p7m+TDmcOnQhSrJinScskKO3n16SE5mG9mag3xBFO+13+xl6dtS4WeKF9B92+VMw54sbLEdlo3cjA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.30.tgz","fileCount":269,"unpackedSize":1919760,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFaywnP3fJXGGr/JNd4EEVO5SrA2tydg+SUp1cVy7ZnLAiBL9GOnmfX64ShLcvfRAM5sUCuZ3jemKSzP15mGtsmjGA=="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.30_1700770323768_0.6544387998038879"},"_hasShrinkwrap":false},"2.0.0-alpha.31":{"name":"baserun","version":"2.0.0-alpha.31","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.31","dist":{"shasum":"81254466a18171760ff1abf4f708a1bce4e42621","integrity":"sha512-2ILwLiuzBUbLnEcKe7Eu/sPaysalmP9/lmNmAUUkrEx8UZnf9JvEVzmX7bTguDWmb0KG4WpTXpEqaobMcVoAFw==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.31.tgz","fileCount":269,"unpackedSize":1920231,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDwNBhZo5oN95fqEt/qncPwptXBDsb9oYtgRQ/480XH3gIhAJYLFPj2zfV6YIP1WODM19Sk6OyuMdBqVQgY4EbMvwCF"}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.31_1700770549554_0.483720961581086"},"_hasShrinkwrap":false},"2.0.0-alpha.32":{"name":"baserun","version":"2.0.0-alpha.32","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.32","dist":{"shasum":"6d3f41a9243e9c460314ce1def89c23ee9c38135","integrity":"sha512-BsSVWINZv/9zRLZazpkWgdqEMIgpWEj50UszWD8wBIbnNSNdxds8JO3ogE7aHjozIZMSU4z5vKc3JP9xR4kblQ==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.32.tgz","fileCount":269,"unpackedSize":1921012,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCisQitq4VeN+6iXZjiRqv4T53xWW11dLLXo18ipmEZCwIhAIvsQhFWu61A6PdWhRb5sLC57GL1czO41gngCg2dLg94"}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.32_1700770910782_0.6325768507066618"},"_hasShrinkwrap":false},"2.0.0-alpha.33":{"name":"baserun","version":"2.0.0-alpha.33","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.33","dist":{"shasum":"f920d1992ec99cafa6156c54c93fcdc69bc014e7","integrity":"sha512-bdSbtira+8+Zq3+yb+nakpkDGWknWGRwBNx/tKkP/qSXarXRxIKVpSkhuhvVBBvmaCa4oR6xdwcmllA10MdMdg==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.33.tgz","fileCount":269,"unpackedSize":1921073,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDTOI0HWsWEWxmJw77o8hOtWTYZiHnYp6aNuOyzgwtl3QIgKoyvkdT0Prwo7BCNEhjLlv8IlSRloa42elQRYm2nJz4="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.33_1700771421421_0.3055592308877493"},"_hasShrinkwrap":false},"2.0.0-alpha.34":{"name":"baserun","version":"2.0.0-alpha.34","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.34","dist":{"shasum":"c371a4ff0bc50884f567fb6606bae3b8439688cd","integrity":"sha512-B5HcyAlk80gSrNqsSVruV06bjB38PE3oxHLndGwepvceVKixgbhCc4tVhdh/RzflvWhX0JIcbNjL7ey9R+avvw==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.34.tgz","fileCount":269,"unpackedSize":1922393,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDf+hjpUMWxHKjq1fqEAklALx5DQ43I9QQ5wVK+Ea88rQIhAMGaIu97M25KiFNo8OebiWH10GbeeBxSF+qPs1vdE3+a"}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.34_1700771756396_0.29978241501831326"},"_hasShrinkwrap":false},"2.0.0-alpha.35":{"name":"baserun","version":"2.0.0-alpha.35","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.35","dist":{"shasum":"c52edcec05522574b682a932a285f1f32863811f","integrity":"sha512-YuvymGtCDMfLqlu/TAnuHsa1QXu+Rt3SVXBiHBwD64TmFCDvwtgEumpko5FQYJfGscDPQhPzO9pslYAWRKSguA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.35.tgz","fileCount":269,"unpackedSize":1922505,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGG9gen4jfecvebLJKqlYyK8DZM+VQKIgIZGGx4PUZKGAiAGKSBuwJSUIDnD8E0NHoiq11rBxwnDxJb4uqbzq4DXFw=="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.35_1700772020957_0.7778022549104644"},"_hasShrinkwrap":false},"2.0.0-alpha.36":{"name":"baserun","version":"2.0.0-alpha.36","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^3.2.1 || ^4.0.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.36","dist":{"shasum":"480da09e2d4458b2e61db11ff2185a31f5ef5943","integrity":"sha512-mrcha4DfqOq+1SmBfZCxevZbdtZq4PNDVQ4TkERaaIam3jhjh9eeoxIflAvP9oLFdT7COQKMmos43bRwt9wrLA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.36.tgz","fileCount":269,"unpackedSize":1922585,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkWakYT2ntJnmEQlbeEP/EpCaHpFfabMcf8DXYbhh+QwIgeXx8+uu+r2emzFPmAMgIlku5VDJajGXEON9CGsHvSwA="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.36_1700772163634_0.17065768818568938"},"_hasShrinkwrap":false},"2.0.0-alpha.37":{"name":"baserun","version":"2.0.0-alpha.37","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","openai":"^4.19.1","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.37","dist":{"shasum":"da3829a269dec5744d6e0d2061ccf70758736c78","integrity":"sha512-jGJE7oIt1wcn8CsK05/kKpUI6HmhXm7aECWH7bJBm0vDO5QEyMafQqlMOlM2QIZRGSK+CwdlKC61XUNCTvOQmQ==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.37.tgz","fileCount":269,"unpackedSize":1922576,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFiqetgRl3UZSDhSW9MQnPTm50XxBxNX53QFEFCP8eUmAiEAz2F72XCi/WOGORHw7UxX2Hgo5/MlcLjO1O9kj0PEQE4="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.37_1700772326914_0.580914122778305"},"_hasShrinkwrap":false},"2.0.0-alpha.38":{"name":"baserun","version":"2.0.0-alpha.38","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0","openai":"^4.19.1"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.38","dist":{"shasum":"e19287725347fe37987daeb8a4fbf33287495738","integrity":"sha512-UtSX8IbnZ8myFlo2sV6+yD3GoSGp3vUSPZM9ODrAtl4K8Z1OmuQxJtw7dgudtLl+oN8QYI3aEVEVwsUB42IMfQ==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.38.tgz","fileCount":269,"unpackedSize":1923254,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICWQWLQfFfOguNv63LATKwquz/SLM6oUh7cbA80OXsz+AiB/YLcd8ubGtd0bhTVzBTXf+dX0MkR+FglW4YpPHq9F/A=="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.38_1700772532794_0.6017083807290435"},"_hasShrinkwrap":false},"2.0.0-alpha.39":{"name":"baserun","version":"2.0.0-alpha.39","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.39","dist":{"shasum":"002efe244b5c36a043a052512068038a6df185ae","integrity":"sha512-PC50IOHbYuJg+BWC7LtfMdPWKVfNuJtSAtZn+mFveSX3ia/QQDEjRQQDR/49sqwSddEuzdKtHP/g4dIMF3i7aA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.39.tgz","fileCount":269,"unpackedSize":1923179,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXXtMh+RHDd4ZIDeARL9p7suDELl6Av/oqEbB21UByWgIhANIDkLd10c+2bowK0NZqNeX36uCSsXTBkKgsxPq4HWt/"}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.39_1700772650229_0.521763844062689"},"_hasShrinkwrap":false},"2.0.0-alpha.40":{"name":"baserun","version":"2.0.0-alpha.40","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.40","dist":{"shasum":"f4f6324afea1a6975544989f8fd66a88a772a7fa","integrity":"sha512-2NNGLtVHhEjjWd2wWI4U6Us5oASYUj9n0k19DpycjImz0K1jeBSFpvBph++sA+PpPanuHziPd/GslLvR80p6lA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.40.tgz","fileCount":269,"unpackedSize":1923123,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG0FY9isaRe1eY+0uhuQXsVscekDi+tExxaKsYpzVWFNAiEA9xeTWf2dNJMJZrEzhJLX1UgPcSYU2inULDFgtqcwaP4="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.40_1700772732508_0.9899539663371315"},"_hasShrinkwrap":false},"2.0.0-alpha.41":{"name":"baserun","version":"2.0.0-alpha.41","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.41","dist":{"shasum":"f4a35870c3a77a5afbcda6b17e83ad6689167478","integrity":"sha512-e2OKjOqWdYPfqm5RIVHssDZM4IiyWKtoFXLKyYBlypnCY2aF9z3amHo41d/zLpCPFg9yXs8Gd8EjVjT29/PCAQ==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.41.tgz","fileCount":269,"unpackedSize":1923098,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBAhJr4lkYqnnf1bDXe6Q8pLrc3DzFlruVDeMD75aqAVAiAFeFKSBdAssK9Scv01ZfFA2bQRdi4QFbtZBjEWElFF6g=="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.41_1700772903685_0.8559150123978501"},"_hasShrinkwrap":false},"2.0.0-alpha.42":{"name":"baserun","version":"2.0.0-alpha.42","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0","openai":"^4.19.1"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.42","dist":{"shasum":"b74e1ed75cada7072800b28a5c73f1c6815f46d1","integrity":"sha512-IIInW1k8cwmUHiXpCdeSI9ZzutxF37RbuHhZoGE6nf90cyi6ZHxS/IxtF84i+2cQVRnyIfT0t2h28752LrnlPg==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.42.tgz","fileCount":269,"unpackedSize":1923123,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICAq2YGmRcQfZa7vPnooQ4dMis0W+hx581BjLzdLwyErAiBBT0lraqf2FaaBu0DjwamwkzmlLZFOwHuQjT8rx9Cd6g=="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.42_1700773079738_0.1886088139043116"},"_hasShrinkwrap":false},"2.0.0-alpha.43":{"name":"baserun","version":"2.0.0-alpha.43","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.43","dist":{"shasum":"91a71ec104c0b838548811303d5ef102daa567c2","integrity":"sha512-CkD3Jpv0IabYb9zYlFeTp99WuG9D1unXn4FaDOsVX6wAloqUr2kSWA72LY4TfUDVBrmkplYITW1tWvKpmiReEw==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.43.tgz","fileCount":269,"unpackedSize":1923123,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEWFZM6/SQhhzLBt/6dLzrPZIzcP6fyxLLu+U3AXvJIXAiEAuMAR5vhLk2Z8KVyhszjfiyayWdouA8H+EYl/wsKzFuM="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.43_1700773179575_0.7852919284703972"},"_hasShrinkwrap":false},"2.0.0-alpha.44":{"name":"baserun","version":"2.0.0-alpha.44","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.44","dist":{"shasum":"7e691252d4f73bb5fbdb644310faf812dda9f47f","integrity":"sha512-YRLS6vsWH0angG1+C8yiZDIyI3lIgoWwB5yBxgokFk252+bEFsdFuAolZAZBWzr2fL5pujMtyeMD2vbcu5Tt5g==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.44.tgz","fileCount":269,"unpackedSize":1923198,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsVHZaI3+1qaOSP+DZmg+cgylzdTUTVP1jm6if3DlTDAIgISgIvLRL/+0BdE+Px/Y/V3XHzyM2naf8a+HE05JDsJs="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.44_1700773282204_0.10719239302155259"},"_hasShrinkwrap":false},"2.0.0-alpha.45":{"name":"baserun","version":"2.0.0-alpha.45","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.45","dist":{"shasum":"e791b207babdff2097f24f01d8f73d26d62335e2","integrity":"sha512-ZQLLUMcDu/8wBIs27iaaYMAWdtUwZYiqmFKXZPM8dQSf4MaVLKjZz1BCGvOxKoco0ycNFCNkj3xPU/1UGnYFeQ==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.45.tgz","fileCount":275,"unpackedSize":1929104,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGnU3aOouuL8TGHVdGl0hkWqwPlCUHLjHZ7c1Aia5tJSAiEAqnQGHTf9iB4Ef3fOvux3np++Vsl3mVx+UOF6TXWhVkg="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.45_1700778352460_0.587277051097763"},"_hasShrinkwrap":false},"2.0.0-alpha.46":{"name":"baserun","version":"2.0.0-alpha.46","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.46","dist":{"shasum":"bff4e550fc366ccf46b8342621d372cc3be32277","integrity":"sha512-i/pUuJ2EgDDLSZQ6j9PQf16RHMkakiPqblOStX/gCffb6AemT+CFUowAbcM94nMmB2K1kGXp2wIZNsqUsoHZ5w==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.46.tgz","fileCount":275,"unpackedSize":1929676,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC58r7oHCxycLJmO23trDgh528/a4QgYElDoMb85hiHCAiEAxKa15G0CKgRhGPxwoxCdzdI79p3beWL4gbNpxl/OKh4="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.46_1700778675282_0.9977476265197549"},"_hasShrinkwrap":false},"2.0.0-alpha.47":{"name":"baserun","version":"2.0.0-alpha.47","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.47","dist":{"shasum":"f5561f052ae7c1510a31412d9b977898c7479470","integrity":"sha512-XKbUFEjOi+CzGaId+G+kxsatMtazoScFIBH+1maA9JY8QxsGfEtkdQQQPTDurwUZt4t3uf0BTLn4y8ij2xFtTw==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.47.tgz","fileCount":275,"unpackedSize":1931610,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA0phm3PP3QzK+m00JCRl/vORdIpt6I5/hOq3O8OhokxAiEA2/NTTQQ3Bm4vo4wF4eOM+ucbr7+jcVf4bLOuM+jWoWA="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.47_1700779803382_0.8146033267604846"},"_hasShrinkwrap":false},"2.0.0-alpha.48":{"name":"baserun","version":"2.0.0-alpha.48","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.48","dist":{"shasum":"4b3d54029cf5e688393b6b26c91ed13a225547a0","integrity":"sha512-9LIGAwVHdZjuEdgmyF7TaAlhnzBS6jm2t7J4A41yvoIOatoSTvN8MzrojKO2UBaCbvU8ujxaIlV91r41mOeVsQ==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.48.tgz","fileCount":275,"unpackedSize":1932996,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICCcIQKqcySlheiFz8IOE6nW34vsE+mhzn61HDOSPt6GAiEAtJN6ydrs6IOmPUxGyNzQSCb4ZvA8QoPDbtZ7rBLyDdg="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.48_1700780379413_0.35456939839169554"},"_hasShrinkwrap":false},"2.0.0-alpha.49":{"name":"baserun","version":"2.0.0-alpha.49","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.49","dist":{"shasum":"fbc13bbaea464b1d4a05704b5e0ccb8d8b2b2b0d","integrity":"sha512-XB5UBdVrxI0B9FI+fZ1LC74TFWw1Vx7TTwdkg/DBN7j5ht5l9D3E8pD0FhxKxMlwk+75hyXMCMCOiuRrU8p/8A==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.49.tgz","fileCount":275,"unpackedSize":1933170,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjGYHYNZs9oTIfYnCiQdQfTB7UhwxJ/u2CDZt8cyV86wIgA+FkU4kK5cIqRg9/mXIQSuDkQtGbKyAJ30mHakYIB2M="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.49_1700780645646_0.6160324133733608"},"_hasShrinkwrap":false},"2.0.0-alpha.50":{"name":"baserun","version":"2.0.0-alpha.50","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.50","dist":{"shasum":"a2affb04ef08e52f037d2203325ca64b0fdefdaf","integrity":"sha512-Jovb7O9W6oSKNcALQCOrgi0YAWEVvAZYoSSeL5p5ZQ8GlxJukOl4YdjKZ/8NwR4rcDgBdWPp7PyQ0Dg+s9g8mQ==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.50.tgz","fileCount":275,"unpackedSize":1933334,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDr16mfd4ChYZOI6Nfac+/3m88E6t5GqJgiyXR+BQCU4AiEAiawYuhRqg1557JPfbmVHq/EuuYdqzeelUawlPG3CBEc="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.50_1700780781400_0.3737499590478739"},"_hasShrinkwrap":false},"2.0.0-alpha.51":{"name":"baserun","version":"2.0.0-alpha.51","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.51","dist":{"shasum":"3a77a35f69fc763f338096a62759b335701bb887","integrity":"sha512-3jqkvD0/AaNEy/eHdopqdxaUtg3UpqSo9T7Yy4SL9Vh/8NqEyY9+Vzt1Y/eRSu0VMt9/qhTwky07L1yIJ0n1xw==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.51.tgz","fileCount":275,"unpackedSize":1934734,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA+SQUVv3LFbWWAV+qqtP+15a2OBH9S9OmygqnKwNzx0AiEAjlFzu6LUQZ80ABQw7efsmV3RsiK05nonTtSB9nbs77g="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.51_1700781607518_0.6589653165808143"},"_hasShrinkwrap":false},"2.0.0-alpha.52":{"name":"baserun","version":"2.0.0-alpha.52","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.52","dist":{"shasum":"0c7443333acb1f372b3766735ba3c34669951e5e","integrity":"sha512-0PPsH/H4tKaOvQ3iUCef1cwjhzHQpH0D5XpYtbQZ0oJznO0OJcDbrlXfeH9xzRdOv2Ad1U57DD1yDdynGLJfjg==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.52.tgz","fileCount":275,"unpackedSize":1941621,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB002kPfxTQgXvBo6HRxqUEvzXJIIn5qkXaXJpuNK1kIAiEAijprfQFfEcZQh/wrAIgkNB+l1G4ABZiIe1K7NQcDffM="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.52_1700788439706_0.4843689813416987"},"_hasShrinkwrap":false},"2.0.0-alpha.53":{"name":"baserun","version":"2.0.0-alpha.53","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:baserun":"jest --testPathPattern=\"/baserun/\" --config=jest.config.baserun.js","test:normal":"jest --testPathIgnorePatterns=\"/baserun/\"","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","test":"concurrently 'npm run test:baserun' 'npm run test:normal'","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun --save-dev\n# or\nyarn add baserun --dev\n```\n\n### 2. Generate an API key\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start testing\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from \"openai\";\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: \"gpt-3.5-turbo\",\n      temperature: 0.7,\n      messages: [\n        {\n          role: \"user\",\n          content: \"What are three activities to do in Paris?\"\n        }\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain('Eiffel Tower');\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset')\nconst baserunPreset = require('baserun/jest-preset')\n\nmodule.exports = {\n    ...tsPreset,\n    ...baserunPreset,\n    testTimeout: 10000,\n}\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-alpha.53","dist":{"shasum":"98d07bf6ef9a9f53cb3efb4cdd6bfd32fff54c88","integrity":"sha512-QyPZtiFgiHZmDAJfFaQnziglw5neITNLiOqz/W3QZ5sSLoqCTx6hOZuuG7gk+4xfC8z3oF3tY4W0Kaq5m0lo4g==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-alpha.53.tgz","fileCount":275,"unpackedSize":1943971,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC2s3ITT/eAFFd9A/VlnUCYaJ2URBJVG3V5IS2dWJcB3wIhAPtqSUCxSV8gQIKe4Y7QApDEfqGASjfZ/JNyuHIMogB/"}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-alpha.53_1700789888027_0.09454472260810864"},"_hasShrinkwrap":false},"2.0.0-beta.4":{"name":"baserun","version":"2.0.0-beta.4","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest","test:normal":"BASERUN_TEST=false vitest","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the logs\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the logs that were just created.\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0-beta.4","dist":{"shasum":"b45c362aac44dea8c9c487b68d49e100e614488a","integrity":"sha512-AjANuvJcvw7k46v/j+aAB8j4dgpDMDpyWujR1T3ktQx3zd/vpB96InTHGDx9vaDCNvTY2vDMYSarVDUer4t9xw==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0-beta.4.tgz","fileCount":293,"unpackedSize":2017672,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/AgzenIwOAcfHuTGdnXLMXp6liJDhTcmNf+fE6BqkrwIgWKjPtGkoZaCsE/pDasiwn/8rtX70XbOW1GrJTekDBfk="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0-beta.4_1700866223479_0.6964649144660584"},"_hasShrinkwrap":false},"2.0.0":{"name":"baserun","version":"2.0.0","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.0","dist":{"shasum":"de05c4f54f6c5976bf70e0b62748c9df32dae219","integrity":"sha512-lNrFYcE0e8liLxojRYjIMlZj9BJy9LlG9gVibNabopQ/6FcmaV+UQLEHZ273tvW7QU96y51QcZtkXl7y1AIBpA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.0.tgz","fileCount":293,"unpackedSize":2016649,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDNSKfzZd1NM1JugqG/W4i344ZTlqA9hAyRsNN/TfW+sAiBVo84Os9UntJoXaC7ygPzT7kNm2iFQZiQSxxWbSXE0gQ=="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.0_1700873928076_0.01610335544365915"},"_hasShrinkwrap":false},"2.0.1-alpha.1":{"name":"baserun","version":"2.0.1-alpha.1","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.1-alpha.1","dist":{"shasum":"e97782ce1762eb1816fbddad1083e9c887c3447f","integrity":"sha512-d1KkcJRm18zA5eBxSvMzwJ8vPx/A87fKpttCETq7bpIF6ci/1/O2tqrP1uYY2YFymWSn2nC9i7lR488drMH9ug==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.1-alpha.1.tgz","fileCount":294,"unpackedSize":2028382,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGDU+1rvfnSOAjyx0jGSu8q/6DAR/eB+WxvArk67kf8wIhAMqmOl7aKuHWRtegs21zo4TLf3EPp+l10PsFgE1W5JJM"}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.1-alpha.1_1701144629264_0.6282952488329443"},"_hasShrinkwrap":false},"2.0.1-alpha.2":{"name":"baserun","version":"2.0.1-alpha.2","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}}},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.1-alpha.2","dist":{"shasum":"518329da869aa5b536f82a868b21ccea76c202b2","integrity":"sha512-vJlWLKHrY7iQXQqzIBhTm3Bmav/zIQiAklhABD3tCBAL1sWO+kpbuYmsRAN3KJSC6F5bgPWgOmR10Pb9LIjAFA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.1-alpha.2.tgz","fileCount":295,"unpackedSize":2028491,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIACGA9vp+FxJvKaJac8cZyaqoRaaWrHv91uBxdxmM1j/AiEAqIbPBw88gO9Bk81YrHVn5GXgQImNtXxoB8au/ZXyFO4="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.1-alpha.2_1701144950571_0.8417946601166801"},"_hasShrinkwrap":false},"2.0.1-alpha.3":{"name":"baserun","version":"2.0.1-alpha.3","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.js","./jest-preset.js":"./jest-preset.js","./jest-preset.mjs":"./jest-preset.mjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.js","./jest-preset.js":"./jest-preset.js","./jest-preset.mjs":"./jest-preset.mjs"},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.1-alpha.3","dist":{"shasum":"964536c299d39c0e1100287ed10ce6959b7565fa","integrity":"sha512-2myONt+OtYP2JXnQCOfIxHZABlKRfBNonEHMS0xKMdGk5cXYYdEb90c4b6jRpNU4CS4f44zdVvQIi2CY4toyLw==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.1-alpha.3.tgz","fileCount":295,"unpackedSize":2028759,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBz9B92hv9os+uWhzZkoF5Q7jBhJof1R2keV2PqH92D8AiEA8Rh+ECdsdoLZ7R5el1sVyIQ/V3pZjCo+I4Xjhc3y81o="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.1-alpha.3_1701145541773_0.13913903645642223"},"_hasShrinkwrap":false},"2.0.1-alpha.4":{"name":"baserun","version":"2.0.1-alpha.4","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.js","./jest-preset.js":"./jest-preset.js","./jest-preset.mjs":"./jest-preset.mjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.js","./jest-preset.js":"./jest-preset.js","./jest-preset.mjs":"./jest-preset.mjs"},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.1-alpha.4","dist":{"shasum":"901c70c2776191b54ad2cd8bc274df60b2a4f9b4","integrity":"sha512-ka/VJu4R7g1bU0HMsWgkcqJ0IRGJ90sZfYg9skDEpQSoF+7v8WaP916j1wNvpE1GItI88xj2eAsFPe9oxA5kqg==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.1-alpha.4.tgz","fileCount":295,"unpackedSize":2028771,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAiTx9WoryRmmzgv//NYeIDp9hkfAH+QUXRndm20JuERAiEA4ZJflpeuEz8jihSl0KLSSVWTA00HLD/AbnJ5KGLtQN0="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.1-alpha.4_1701145697104_0.18608766932621346"},"_hasShrinkwrap":false},"2.0.1-alpha.5":{"name":"baserun","version":"2.0.1-alpha.5","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.js","./jest-preset.js":"./jest-preset.js","./jest-preset.mjs":"./jest-preset.mjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.js","./jest-preset.js":"./jest-preset.js","./jest-preset.mjs":"./jest-preset.mjs"},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.1-alpha.5","dist":{"shasum":"3c2233a4e059ac3fc4f1cf8c10903a4918c31b9c","integrity":"sha512-h1N+kt8FqrVbazACdiADnDB1ClRxJTVVlOcexoEgpKqe5VyJfaT+I0Wm6dKWTANPd2C52xFmX7E9F2Q6gpOlfA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.1-alpha.5.tgz","fileCount":295,"unpackedSize":2028771,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWK5Q4b072kydzcME4IQFB+xFcrWPjDsw0jyamxwj9nAIhAJgiSwbKIu7lSzmKJ2En6RcgPkMEPYFlIIFPXFyCahv+"}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.1-alpha.5_1701145789552_0.42230330455097587"},"_hasShrinkwrap":false},"2.0.1-alpha.6":{"name":"baserun","version":"2.0.1-alpha.6","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.1-alpha.6","dist":{"shasum":"752fb0de4b49241f90c22a8ee1681dff0bce8226","integrity":"sha512-yf+gDqxHX/Nd7GBhVGXuLdseegw3dwUMHH39C/FjKNXxwQRBGTnet2s7A7B8mKHoTGt4KkmWycz+Y1Gwx8KA+g==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.1-alpha.6.tgz","fileCount":295,"unpackedSize":2028589,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDVNvDxp/eza4pbFFEsskewMeF9LK/C3kaQC9JSra16ZAIgSyctHlAW85touPpn9GqsxTajDsZxB70uQvotsS5KFVI="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.1-alpha.6_1701146378917_0.4218719522636474"},"_hasShrinkwrap":false},"2.0.1-alpha.7":{"name":"baserun","version":"2.0.1-alpha.7","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.1-alpha.7","dist":{"shasum":"d29e11404e1fbb7ed7c3944527c3a41f9e78908d","integrity":"sha512-5DA6EzwkVstm9Y1KtvVx7rQry2dgPCwhKGH1BTWvoKcbtiFjgT/KSwh7TmUWhx79VEIRg0dfJo9zXKGHpN3Krg==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.1-alpha.7.tgz","fileCount":296,"unpackedSize":2028671,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjGuXi5CG89JiwEwmVVp6U340FgAsS32+0kdWjdkfRFgIgH8gSfd8mP3+ZukWpdosR9l2xnln8j9kphagdjGKCajQ="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.1-alpha.7_1701146454330_0.08410491682076304"},"_hasShrinkwrap":false},"2.0.1-alpha.8":{"name":"baserun","version":"2.0.1-alpha.8","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.1-alpha.8","dist":{"shasum":"eeadf661707da450d3ac85ab9ee5ceb556d5bf13","integrity":"sha512-larpN29v/NUBBoZMGBhxRpxW4eZPmU0cdO5/hMGOKBMCc+0k3IUZPR3rLduy5pkliiQNKGROKcpq8sTu8CVaOg==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.1-alpha.8.tgz","fileCount":296,"unpackedSize":2028671,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/0XnPuoI96dVgar+NnUw0BtV+h4Z8HwAEXEwKrnK54wIgcWiB3fU+7FTqEcRRo2+Dr6490Zq8tgILAYXc8kovtHU="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.1-alpha.8_1701146725442_0.5352862866286701"},"_hasShrinkwrap":false},"2.0.1-alpha.9":{"name":"baserun","version":"2.0.1-alpha.9","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Testing\n\nBaserun comes with built-in jest support, allowing you to run evaluations on your prompts, which get reported to the Baserun dashboard.\n\n### How to test\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from 'openai';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: 'gpt-3.5-turbo',\n      temperature: 0.7,\n      messages: [\n        {\n          role: 'user',\n          content: 'What are three activities to do in Paris?',\n        },\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain(\n      'Eiffel Tower',\n    );\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset');\nconst baserunPreset = require('baserun/jest-preset');\n\nmodule.exports = {\n  ...tsPreset,\n  ...baserunPreset,\n  testTimeout: 10000,\n};\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.1-alpha.9","dist":{"shasum":"af0ec9be3259ab389016bd66792f81d532e1c040","integrity":"sha512-0q34VU3eOiuBLrYP6dbAwGOyg5/6ICu0f9fXlMUYJXD7xwA5CWLphgEv+kEcMiqkHgd9TlHbkByx2i9FjVUBVA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.1-alpha.9.tgz","fileCount":296,"unpackedSize":2031769,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB1YVMZZQc3NBd/SKcbw9+3mRvhG+Pxg4zv+OMN/YZSIAiEAknbevqXtJCjhvmKuY/ryAJy/IrmeCPCh2AWbygk2pNE="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.1-alpha.9_1701148034726_0.3646913710745334"},"_hasShrinkwrap":false},"2.0.1-alpha.10":{"name":"baserun","version":"2.0.1-alpha.10","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Testing\n\nBaserun comes with built-in jest support, allowing you to run evaluations on your prompts, which get reported to the Baserun dashboard.\n\n### How to test\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from 'openai';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: 'gpt-3.5-turbo',\n      temperature: 0.7,\n      messages: [\n        {\n          role: 'user',\n          content: 'What are three activities to do in Paris?',\n        },\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain(\n      'Eiffel Tower',\n    );\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset');\nconst baserunPreset = require('baserun/jest-preset');\n\nmodule.exports = {\n  ...tsPreset,\n  ...baserunPreset,\n  testTimeout: 10000,\n};\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.1-alpha.10","dist":{"shasum":"f91969772f6e37c50df1dd138054db2794fa5ec5","integrity":"sha512-ZnAQH5O9/MkaBvvInyG0MObuZqW6ch0f+BkHtu1l893+QxExz5hxktjYYnY771/JPiUSqX/UW5MGYdSA4vKQbw==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.1-alpha.10.tgz","fileCount":296,"unpackedSize":2031526,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAQrHsBMvxltij08s3aPSonmmm9ZLSTSCN7BwQt29t2hAiEAp43D1jLBK5areKx/mn6XTBiwjGxAQUzWWJoDxzxAp24="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.1-alpha.10_1701148582054_0.21285254768086048"},"_hasShrinkwrap":false},"2.0.1-alpha.11":{"name":"baserun","version":"2.0.1-alpha.11","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Testing\n\nBaserun comes with built-in jest support, allowing you to run evaluations on your prompts, which get reported to the Baserun dashboard.\n\n### How to test\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from 'openai';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: 'gpt-3.5-turbo',\n      temperature: 0.7,\n      messages: [\n        {\n          role: 'user',\n          content: 'What are three activities to do in Paris?',\n        },\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain(\n      'Eiffel Tower',\n    );\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset');\nconst baserunPreset = require('baserun/jest-preset');\n\nmodule.exports = {\n  ...tsPreset,\n  ...baserunPreset,\n  testTimeout: 10000,\n};\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.1-alpha.11","dist":{"shasum":"800a6ed0fd1d8fb4037c79bd22bf987fb2de3a13","integrity":"sha512-+9cA+J88Tm+KQLnAudVje/uEVo2Dg7f3t99jdTk3Y56+CddfQWuCyQJrmdTxKpppBrF6VQpykVR1AeaZiB9reA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.1-alpha.11.tgz","fileCount":296,"unpackedSize":2031558,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8dU6jidrRQN/BQICURd3iRE/E6pkPAPTIl5mA0uPcXgIhAIQMA9VkBmP/W6QImU5Q0R8zadeX01LUoNeTJgbQZJh6"}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.1-alpha.11_1701148745322_0.20944250928810404"},"_hasShrinkwrap":false},"2.0.1-alpha.12":{"name":"baserun","version":"2.0.1-alpha.12","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Testing\n\nBaserun comes with built-in jest support, allowing you to run evaluations on your prompts, which get reported to the Baserun dashboard.\n\n### How to test\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from 'openai';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: 'gpt-3.5-turbo',\n      temperature: 0.7,\n      messages: [\n        {\n          role: 'user',\n          content: 'What are three activities to do in Paris?',\n        },\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain(\n      'Eiffel Tower',\n    );\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset');\nconst baserunPreset = require('baserun/jest-preset');\n\nmodule.exports = {\n  ...tsPreset,\n  ...baserunPreset,\n  testTimeout: 10000,\n};\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.1-alpha.12","dist":{"shasum":"aacfec553a5fd4ce19c42f9e39482fa6c6da3b9c","integrity":"sha512-tVVUcFzaBtB1LgO4OY6KFTDrhOsVtnhyCgDHFKuFzLdChsX56NSKhQw2eoXvP8P8og14/2DkhexzLK/WQ+YOWw==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.1-alpha.12.tgz","fileCount":296,"unpackedSize":2032538,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHDWvtWnDR0a5hzAIdDVzqS3HvV2b7A+2gfy3U4Il0EPAiEAkYRy6ADiV/bYjQRabFJraGZHOD0WDyST0w0LXLNb/lU="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.1-alpha.12_1701149930529_0.8487152999996532"},"_hasShrinkwrap":false},"2.0.1-alpha.13":{"name":"baserun","version":"2.0.1-alpha.13","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Testing\n\nBaserun comes with built-in jest support, allowing you to run evaluations on your prompts, which get reported to the Baserun dashboard.\n\n### How to test\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from 'openai';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: 'gpt-3.5-turbo',\n      temperature: 0.7,\n      messages: [\n        {\n          role: 'user',\n          content: 'What are three activities to do in Paris?',\n        },\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain(\n      'Eiffel Tower',\n    );\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset');\nconst baserunPreset = require('baserun/jest-preset');\n\nmodule.exports = {\n  ...tsPreset,\n  ...baserunPreset,\n  testTimeout: 10000,\n};\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.1-alpha.13","dist":{"shasum":"4097f9c8fab30c9be145acf3ad26088cd97fa0cb","integrity":"sha512-5u/6eVDGejQMvaKQafvrpkmtM/iXToiyShOoHF4A6EOU+KwwboClpAbUdOeqRw7rrt4RMrR8ynDILiRZDy0VeQ==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.1-alpha.13.tgz","fileCount":296,"unpackedSize":2032538,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDF45JcLdLVJf0UxnHSflKm8a36i91N2FfXSecwtIpR2gIgNE47jnsaE5TJJ4YT0CbO+3YZm2l/5blFx391hFaxRy0="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.1-alpha.13_1701149972642_0.8819869469277233"},"_hasShrinkwrap":false},"2.0.1-alpha.14":{"name":"baserun","version":"2.0.1-alpha.14","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Testing\n\nBaserun comes with built-in jest support, allowing you to run evaluations on your prompts, which get reported to the Baserun dashboard.\n\n### How to test\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from 'openai';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: 'gpt-3.5-turbo',\n      temperature: 0.7,\n      messages: [\n        {\n          role: 'user',\n          content: 'What are three activities to do in Paris?',\n        },\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain(\n      'Eiffel Tower',\n    );\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset');\nconst baserunPreset = require('baserun/jest-preset');\n\nmodule.exports = {\n  ...tsPreset,\n  ...baserunPreset,\n  testTimeout: 10000,\n};\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.1-alpha.14","dist":{"shasum":"7a57ab1ac2557acb4c0abafbc150337f3461c035","integrity":"sha512-/ReYJjEm3my4rl0I4Fao/KezfQS86kas8Zz/E3MR7AlwYoK3vFt/afNlBxZs+v/r7O57zQGJzHV8Imjr2OYdow==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.1-alpha.14.tgz","fileCount":296,"unpackedSize":2036764,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDeHfbZ0Fttxdy/xK1lS1yte7dufzxjTgWqpG38nfm8zQIgUf4nJ1Gg52PVzxcaCJjO9maD6PE7ppqCoKJ3Xjc8Hv4="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.1-alpha.14_1701151080599_0.9304246824085431"},"_hasShrinkwrap":false},"2.0.1-alpha.15":{"name":"baserun","version":"2.0.1-alpha.15","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Testing\n\nBaserun comes with built-in jest support, allowing you to run evaluations on your prompts, which get reported to the Baserun dashboard.\n\n### How to test\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from 'openai';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: 'gpt-3.5-turbo',\n      temperature: 0.7,\n      messages: [\n        {\n          role: 'user',\n          content: 'What are three activities to do in Paris?',\n        },\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain(\n      'Eiffel Tower',\n    );\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset');\nconst baserunPreset = require('baserun/jest-preset');\n\nmodule.exports = {\n  ...tsPreset,\n  ...baserunPreset,\n  testTimeout: 10000,\n};\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.1-alpha.15","dist":{"shasum":"7fc6a1796178fb627d95dcc508fe2eac5d3717a4","integrity":"sha512-NlPiNBvX2JI3eukv10uGIfyF+QM2uQ7un5ysqsOZjzh9z7iSsz8slw8qkrymb3Rm9eneo0K+/4XAdT0CfrWOFw==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.1-alpha.15.tgz","fileCount":296,"unpackedSize":2036764,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCYbWDJVNgbdfHDdovL/1C55E4jwexaejEu/oDJM/WYwIhAOFZRw1ykPgX/rri4TcJKfGv19IgnQPN5kG/1CwYA7kY"}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.1-alpha.15_1701151148666_0.7170500467964551"},"_hasShrinkwrap":false},"2.0.1-alpha.16":{"name":"baserun","version":"2.0.1-alpha.16","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Testing\n\nBaserun comes with built-in jest support, allowing you to run evaluations on your prompts, which get reported to the Baserun dashboard.\n\n### How to test\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from 'openai';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: 'gpt-3.5-turbo',\n      temperature: 0.7,\n      messages: [\n        {\n          role: 'user',\n          content: 'What are three activities to do in Paris?',\n        },\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain(\n      'Eiffel Tower',\n    );\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset');\nconst baserunPreset = require('baserun/jest-preset');\n\nmodule.exports = {\n  ...tsPreset,\n  ...baserunPreset,\n  testTimeout: 10000,\n};\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.1-alpha.16","dist":{"shasum":"d3ce57ea7eb557dfc9478c57a72a7a4d64014bec","integrity":"sha512-DETG36KkwXHFeb0f5ptaMVNOYI4VLgIe4FWqXVENNyrdCLA6JcN8sFppw6DAkLjiOt2QKLLrFqnjUR1Jdt4pvg==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.1-alpha.16.tgz","fileCount":296,"unpackedSize":2036764,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQI3zI/HcaMW+cg11tDpmk/WmK4kLkhtIhqnU8EPuLHwIgVnKIBBrjvZJZqn8Vnx/5ge82IlPHpCIafhUWVDJhwDQ="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.1-alpha.16_1701151191806_0.3880951916338782"},"_hasShrinkwrap":false},"2.0.1-alpha.17":{"name":"baserun","version":"2.0.1-alpha.17","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Testing\n\nBaserun comes with built-in jest support, allowing you to run evaluations on your prompts, which get reported to the Baserun dashboard.\n\n### How to test\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from 'openai';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: 'gpt-3.5-turbo',\n      temperature: 0.7,\n      messages: [\n        {\n          role: 'user',\n          content: 'What are three activities to do in Paris?',\n        },\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain(\n      'Eiffel Tower',\n    );\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset');\nconst baserunPreset = require('baserun/jest-preset');\n\nmodule.exports = {\n  ...tsPreset,\n  ...baserunPreset,\n  testTimeout: 10000,\n};\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.1-alpha.17","dist":{"shasum":"4cfde9ac7746b0e42d527c0b5a35e5ec85314c2b","integrity":"sha512-7mzxPquWYthBKk+hWQ/bs5SoYt4avQVXY7nwYnFUJ/2hXrUc2VUZLyx4DJSOMCJ9Yp1z32AdroupkMnY9ydVKA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.1-alpha.17.tgz","fileCount":296,"unpackedSize":2036330,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGtDH1BlkQWk5Hm1SL1Dk0Ax1/Np8JGzZKr/e11v72/FAiA1L0KqqUoAtnFZJl16ZhDU53bwnIX9JipHLm58sKDIRg=="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.1-alpha.17_1701151589027_0.5716095109488399"},"_hasShrinkwrap":false},"2.0.1-alpha.18":{"name":"baserun","version":"2.0.1-alpha.18","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Testing\n\nBaserun comes with built-in jest support, allowing you to run evaluations on your prompts, which get reported to the Baserun dashboard.\n\n### How to test\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from 'openai';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: 'gpt-3.5-turbo',\n      temperature: 0.7,\n      messages: [\n        {\n          role: 'user',\n          content: 'What are three activities to do in Paris?',\n        },\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain(\n      'Eiffel Tower',\n    );\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset');\nconst baserunPreset = require('baserun/jest-preset');\n\nmodule.exports = {\n  ...tsPreset,\n  ...baserunPreset,\n  testTimeout: 10000,\n};\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.1-alpha.18","dist":{"shasum":"1ddc8511543c7776088dce13ecb39579ced57916","integrity":"sha512-jhFFTI/npxfnXnGvQKUFZsAH4e5FrcsigPq68QCcoIo87bHxzuIDfoLyLSHCWsTMy4mR80t/7tja/f/yl7AqyA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.1-alpha.18.tgz","fileCount":296,"unpackedSize":2036330,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAKYii4XH31D10I17SzXjaHjOJtUGapHtYkKI2ZD6h/zAiEAzlfGUdQi4ZzNp7x3mC0Q3c1QT9T3yXYbrwzrUTudUeA="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.1-alpha.18_1701151723634_0.4931445447478473"},"_hasShrinkwrap":false},"2.0.1":{"name":"baserun","version":"2.0.1","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.1","dist":{"shasum":"b1e3b854b508fc2f048278e11de087cc25357437","integrity":"sha512-vsYuFudqsmFya7Pblg8WHRWiDNYYcYNVgMgLZQElqxP6DIw+XmQwVF1ALs++VPFXx0rTyvRviO9+uAqoffKXIQ==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.1.tgz","fileCount":296,"unpackedSize":2036321,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBBv/JavJkywX+r1Ad4BkxhP985ORmNowoUmwZw/XL6gAiEAxa/bYU0Hi15gPIj6zLjkQpu5GDX4UGojuAKqhugxDzY="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.1_1701152282581_0.5409543649959143"},"_hasShrinkwrap":false},"2.0.2":{"name":"baserun","version":"2.0.2","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.2","dist":{"shasum":"a0eb70e0bfe4452f3e672b4167087073f638a90e","integrity":"sha512-ZUT4+YcqO0dEkDGyQF/WOZ1azFyoI69YHOgPeKsa4m00gzUQMzsRuE3M5w89mCBApYzPO9UvH0n0VbR8CzRzLg==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.2.tgz","fileCount":296,"unpackedSize":2044950,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHPSFJ6pqNidvXKhwyouR7xPLyM6bwN60W/9C6gmGjAVAiB9lLvBZY4rmZVm+gj06EhU/3X7xQQCrv9t8U3BPIgyLg=="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.2_1701475507389_0.11596428235802936"},"_hasShrinkwrap":false},"2.0.3-beta.1":{"name":"baserun","version":"2.0.3-beta.1","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:beta":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=beta","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Testing\n\nBaserun comes with built-in jest support, allowing you to run evaluations on your prompts, which get reported to the Baserun dashboard.\n\n### How to test\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from 'openai';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: 'gpt-3.5-turbo',\n      temperature: 0.7,\n      messages: [\n        {\n          role: 'user',\n          content: 'What are three activities to do in Paris?',\n        },\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain(\n      'Eiffel Tower',\n    );\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset');\nconst baserunPreset = require('baserun/jest-preset');\n\nmodule.exports = {\n  ...tsPreset,\n  ...baserunPreset,\n  testTimeout: 10000,\n};\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.3-beta.1","dist":{"shasum":"ef0342357f4c10de1ab3d5ca30aa06250d176e36","integrity":"sha512-sXh3grpqs4xTP13/aakbbPA4mQyRF5sZ9vpCm2M+/gq3NgLBtpYZuILgMRRBiXnMhbbxtbhOaatxv2hLz/mGUA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.3-beta.1.tgz","fileCount":302,"unpackedSize":2086358,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDpO5G6mjlpASjVpWNLgN+Yarp3uRt15JyEmYE2KOeCrAiBkiSTvbninAUWU1xuoeBYRkGJiTIFDPNsJDecfB3sABg=="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.3-beta.1_1702482268724_0.11526475872461162"},"_hasShrinkwrap":false},"2.0.3-beta.2":{"name":"baserun","version":"2.0.3-beta.2","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:beta":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=beta","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"readmeFilename":"README.md","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://www.baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Testing\n\nBaserun comes with built-in jest support, allowing you to run evaluations on your prompts, which get reported to the Baserun dashboard.\n\n### How to test\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from 'openai';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: 'gpt-3.5-turbo',\n      temperature: 0.7,\n      messages: [\n        {\n          role: 'user',\n          content: 'What are three activities to do in Paris?',\n        },\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain(\n      'Eiffel Tower',\n    );\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset');\nconst baserunPreset = require('baserun/jest-preset');\n\nmodule.exports = {\n  ...tsPreset,\n  ...baserunPreset,\n  testTimeout: 10000,\n};\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.3-beta.2","dist":{"shasum":"3ccca6285bbb7f8e6dd61dfe2e2e4c0ba58564cf","integrity":"sha512-OHztq7gor/Rv5mG1nm6ZLTc1I+NI4VWsQv8nhvDJ02MhapS65YYeLOTi74DcTmTfY/k53SWCoeTnlAi0KpD+iA==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.3-beta.2.tgz","fileCount":302,"unpackedSize":2086086,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEb7yDGG+Dano+unculz8zyB9kkBH2ydlEuCdY/EJtfIAiEArtIB8fql4SDIW6oFzQVhvKurzuMJzSiyBHJtH2aFQns="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.3-beta.2_1702482536468_0.3866769332560458"},"_hasShrinkwrap":false},"2.0.4":{"name":"baserun","version":"2.0.4","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:beta":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=beta","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.4","dist":{"shasum":"7ea5ed1eb75c5797ed47aa71ca422b2fbee06e4a","integrity":"sha512-bA52vqZ73VLnUoiwxrr2GjraDwfjj1GPlKF3R9Lp8BULW5F0Wrrf9q8sEdw6hqs6LTGVSYzKouX6MiXG9yvWTQ==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.4.tgz","fileCount":302,"unpackedSize":2086079,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFWBlPw3bUycPFFlRsMzhl2YJ3qPDAqDwDsxLMqpMKYtAiA6bnbAmtpTACF28WLo4CPgT6pdKhQA4uvRlV5o+05iaA=="}]},"_npmUser":{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.4_1702483438569_0.18818733837997104"},"_hasShrinkwrap":false},"2.0.5":{"name":"baserun","version":"2.0.5","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:beta":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=beta","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.5","dist":{"shasum":"b5d19b8906d36ab312c6eba27ce707c36bd7fa6e","integrity":"sha512-hVAC1baiTKHMttyJN2HT4SB4rKuQU1OcrZ/thkIELPrYOmxb8r3vlw2xYrQAIaeTUArB87zVQP6HBgVZimDGcg==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.5.tgz","fileCount":302,"unpackedSize":2088467,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBxVtkZecKHgfcaYhBlHNX69gLYkyCjYGeqQKWh4RX/BAiAJfY5iYt/2xJR5zPIJ5AtjyImkuUZIWDGEzoQ/OVbk6A=="}]},"_npmUser":{"name":"megarad","email":"e@eriklp.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.5_1707452558889_0.6942249710454713"},"_hasShrinkwrap":false},"2.0.6":{"name":"baserun","version":"2.0.6","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:beta":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=beta","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.0.6","dist":{"shasum":"07ce6b00e5f1467d8994b5162299825bf2b2c126","integrity":"sha512-L4pXsaAlxjd0CBhqxtO+kZZlYMP5lFiJzyNTz96LbRdBltOTxsnLPT50bbKG6tZIcxnro97Dcu+Tmn4vqn71mg==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.0.6.tgz","fileCount":326,"unpackedSize":2245901,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGPkmFZLiz+wPTfNToNoSoNH5n3qNt7Rfkr6ileTMCZPAiAglEcKUHblr+i80MjxIOGaNliMh/LpynIYbSrMEGw4sg=="}]},"_npmUser":{"name":"megarad","email":"e@eriklp.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.0.6_1708453349457_0.31258549069530717"},"_hasShrinkwrap":false},"2.1.0":{"name":"baserun","version":"2.1.0","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:beta":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=beta","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.1.0","dist":{"shasum":"5005823ff45b997bd862fff1877b45acad94e3bf","integrity":"sha512-trRzkOF/RGcC7tQaGV7fT8mbqJ+IwtJ+Om/cbaP0xwooJhKG6ABkH3L7790VBPP6Rq/7pAjNh60i8KOQ1+0cxw==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.1.0.tgz","fileCount":326,"unpackedSize":2245681,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDmuI7cpHsGHuFIna4n+4gRVATMLdSkdzhG4racReuuzwIhAJ3RdIMJDgIbTK+iCEzc/JrMVg8P4wrmsW9eQ6Qtuafu"}]},"_npmUser":{"name":"megarad","email":"e@eriklp.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.1.0_1708467505315_0.6522889747271954"},"_hasShrinkwrap":false},"2.1.1":{"name":"baserun","version":"2.1.1","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:beta":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=beta","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@anthropic-ai/sdk":"^0.9.1","@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"openai":"^4.19.0"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.1.1","dist":{"shasum":"8bfc6d8873f2911c3d5cd56c49630a5948397e77","integrity":"sha512-mXM4ub32dBzOtcK3YeDHBbHLVTKaFXopsSCdCDc5olyVDU1COtVHRhtnOpyoN+Q+9l1/7NL1Qs82GJpH8USdDQ==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.1.1.tgz","fileCount":326,"unpackedSize":2246063,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAUQF3MYU8JgzcAZD8GisdtkVbP9ObEfw7kWyldK2734AiEAxHM5/ehSbY1rEvh0o0FMAcb0HUqhmg6dkDQsIzh7zS4="}]},"_npmUser":{"name":"megarad","email":"e@eriklp.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.1.1_1709677838743_0.22505031525848196"},"_hasShrinkwrap":false},"2.1.2":{"name":"baserun","version":"2.1.2","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:beta":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=beta","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@google/generative-ai":"^0.2.1","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@anthropic-ai/sdk":"^0.16.0","@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"@anthropic-ai/sdk":"^0.16.0","openai":"^4.19.1","@google/generative-ai":"^0.2.1"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.1.2","dist":{"shasum":"dd20b543be5ba6219887db1f1c3e615cc0c2c5cf","integrity":"sha512-QtqoS8wVKTdz0vF7euQZKebWTnmzyucP6Gc9c3oWfL7rgJIXacwKIIE3nKvl4F4DmmnWc2MrJstBbkV+KiVIkw==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.1.2.tgz","fileCount":338,"unpackedSize":2634066,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCoQdlS6wETuU1E/X7XQw+HX2e9tcdSbXSzy5fJ9SOZWAIhALHcVI7j6fsnqebVQ9C5TMOHraNsNp3YJQ9wMQa42FoB"}]},"_npmUser":{"name":"megarad","email":"e@eriklp.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.1.2_1712249765317_0.10428233264203435"},"_hasShrinkwrap":false},"2.1.3":{"name":"baserun","version":"2.1.3","description":"The Baserun TypeScript SDK","main":"./dist/commonjs/index.js","types":"./dist/commonjs/index.d.ts","scripts":{"clean":"rimraf dist","build":"npm run clean && tsc","prepare":"tshy","test:test":"vitest --test-timeout=40000","test:normal":"BASERUN_TEST=false vitest --test-timeout=40000","test:jest":"jest --config=jest.config.baserun.mjs jests/baserun/full_matrix.test.ts","jest:trace":"jest src/jests/trace.test.ts","build:grpc":"protoc --ts_opt client_grpc1 --ts_out ./src/v1/gen --proto_path src/v1/protos src/v1/protos/baserun.proto","vitest":"vitest","lint":"eslint --fix --ext .js,.ts .","format":"prettier --write \"**/*.{js,ts}\"","watch":"tsc --watch","publish:alpha":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=alpha","publish:beta":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish --tag=beta","publish:latest":"rimraf dist && rimraf .tshy && npm run prepare && yarn publish"},"keywords":[],"author":{},"license":"ISC","engines":{"node":">=18.0.0"},"devDependencies":{"@bufbuild/buf":"^1.28.1","@bufbuild/protobuf":"^1.4.2","@bufbuild/protoc-gen-es":"^1.4.2","@connectrpc/connect":"^1.1.3","@connectrpc/connect-node":"^1.1.3","@connectrpc/protoc-gen-connect-es":"^1.1.3","@google/generative-ai":"^0.2.1","@types/google-protobuf":"^3.15.10","@types/jest":"^29.5.8","@types/json-stringify-safe":"^5.0.1","@types/lodash.groupby":"^4.6.9","@types/lodash.pick":"^4.4.9","@types/node":"^20.9.0","@types/promise-retry":"^1.1.6","@types/resolve":"^1.20.6","@types/tmp":"^0.2.3","@types/uuid":"^9.0.2","@typescript-eslint/eslint-plugin":"^6.11.0","@typescript-eslint/parser":"^6.11.0","concurrently":"^8.2.1","eslint":"^8.43.0","eslint-config-prettier":"^8.8.0","eslint-plugin-prettier":"^4.2.1","husky":"^8.0.3","jest":"^29.7.0","lodash.groupby":"^4.6.0","lodash.pick":"^4.4.0","mocha":"^10.2.0","prettier":"^2.8.8","rimraf":"^5.0.1","sinon":"^17.0.1","ts-jest":"^29.1.1","ts-node":"^10.9.1","tshy":"^1.8.1","typescript":"^5.3.2","vitest":"^0.34.6"},"type":"module","dependencies":{"@anthropic-ai/sdk":"^0.16.0","@grpc/grpc-js":"^1.9.9","@protobuf-ts/plugin":"^2.9.1","@types/debug":"^4.1.12","debug":"^4.3.4","fast-glob":"^3.3.2","globby":"^14.0.0","google-protobuf":"^3.21.2","ignore":"5.2.4","import-meta-resolve":"^4.0.0","isomorphic-unfetch":"^4.0.2","json-stringify-safe":"^5.0.1","openai":"^4.19.1","pkg-dir":"^8.0.0","promise-retry":"^2.0.1","resolve":"^1.22.8","resolve-pkg":"^2.0.0","slash":"^5.1.0","uuid":"^9.0.0"},"peerDependencies":{"@anthropic-ai/sdk":"^0.16.0","openai":"^4.19.1","@google/generative-ai":"^0.2.1"},"tshy":{"exports":{"./package.json":"./package.json",".":"./src/index.ts","./jest-preset":"./jest-preset.cjs"}},"exports":{"./package.json":"./package.json",".":{"import":{"types":"./dist/esm/index.d.ts","default":"./dist/esm/index.js"},"require":{"types":"./dist/commonjs/index.d.ts","default":"./dist/commonjs/index.js"}},"./jest-preset":"./jest-preset.cjs"},"licenseText":"MIT License\n\nCopyright (c) 2023 Mochi-Labs\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","_id":"baserun@2.1.3","dist":{"shasum":"ec64939f48c03fec6b45d4ec923e91e94e441b44","integrity":"sha512-AVwuFv4DJOzvCyDewnWPBuRsIQ4lFciu1TbLUSVjPS7yyAPCIVgxsZwpgPLZSa9AECgT3z9+z8jpRR/H4BdPhQ==","tarball":"https://registry.npmjs.org/baserun/-/baserun-2.1.3.tgz","fileCount":338,"unpackedSize":2785836,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDUrOeFHC03N52Ci0QMorYXZS5T535R/3M3+RXIw1Rz3AiEA6+GX8ofrNwdI1AEm64Gr9dLwwS1f2cQvVnoSZfUrkoY="}]},"_npmUser":{"name":"megarad","email":"e@eriklp.com"},"directories":{},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/baserun_2.1.3_1712871048975_0.2718826027724832"},"_hasShrinkwrap":false}},"maintainers":[{"name":"timsuchanek","email":"tim.suchanek@gmail.com"},{"name":"aginzberg","email":"adam@baserun.ai"},{"name":"effy007","email":"effy@baserun.ai"},{"name":"megarad","email":"e@eriklp.com"}],"keywords":[],"license":"ISC","readme":"# Baserun\n\n[![](https://img.shields.io/badge/Visit%20Us-baserun.ai-brightgreen)](https://baserun.ai)\n[![](https://img.shields.io/badge/View%20Documentation-Docs-yellow)](https://docs.baserun.ai)\n[![](https://img.shields.io/badge/Join%20our%20community-Discord-blue)](https://discord.gg/xEPFsvSmkb)\n[![Twitter](https://img.shields.io/twitter/follow/baserun.ai?style=social)](https://twitter.com/baserunai)\n\n**[Baserun](https://baserun.ai)** is the testing and observability platform for LLM apps.\n\n## Quick Start\n\n### 1. Install Baserun\n\n```bash\nnpm install baserun\n# or\nyarn add baserun\n```\n\n### 2. Generate an API key\n\nCreate an account at [https://baserun.ai](https://baserun.ai). Then generate an API key for your project in the [settings](https://baserun.ai/settings) tab and set it as an environment variable.\n\n```bash\nexport BASERUN_API_KEY=\"your_api_key_here\"\n```\n\n### 3. Start monitoring\n\nBaserun will automatically trace all the calls to OpenAI and Anthropic.\nA simple `await baserun.init()` is enough to set everything up.\n\n```typescript\nimport OpenAI from 'openai';\nimport { baserun } from 'baserun';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\nawait baserun.init();\n\nconst chatCompletion = await openai.chat.completions.create({\n  model: 'gpt-3.5-turbo',\n  temperature: 0.7,\n  messages: [\n    {\n      role: 'user',\n      content: 'What are three activities to do in Paris?',\n    },\n  ],\n});\n```\n\n### 4. Check out the traces\n\nNow head over to [https://baserun.ai/monitoring/traces](https://www.baserun.ai/monitoring/traces) and have a look at the traces that were just created.\n\n## Testing\n\nBaserun comes with built-in jest support, allowing you to run evaluations on your prompts, which get reported to the Baserun dashboard.\n\n### How to test\n\nUse our [Jest](https://jestjs.io/docs) preset and start immediately logging to Baserun. By default all OpenAI completion and chat requests will be logged to Baserun. Logs are aggregated by test.\n\n```typescript\n// test_module.spec.ts\n\nimport OpenAI from 'openai';\n\nconst openai = new OpenAI({\n  apiKey: process.env.OPENAI_API_KEY,\n});\n\ndescribe('Baserun end-to-end', () => {\n  it('should suggest the Eiffel Tower', async () => {\n    const chatCompletion = await openai.chat.completions.create({\n      model: 'gpt-3.5-turbo',\n      temperature: 0.7,\n      messages: [\n        {\n          role: 'user',\n          content: 'What are three activities to do in Paris?',\n        },\n      ],\n    });\n\n    expect(chatCompletion.choices[0].message!.content!).toContain(\n      'Eiffel Tower',\n    );\n  });\n});\n```\n\nTo run the test and log to baserun:\n\n```bash\njest --preset baserun test_module.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n### Existing presets\n\nIf you are already using a Jest preset such as ts-jest you will need to merge the presets in a Jest config\n\n```js\n// jest.config.js or jest.config.baserun.js\n\nconst tsPreset = require('ts-jest/jest-preset');\nconst baserunPreset = require('baserun/jest-preset');\n\nmodule.exports = {\n  ...tsPreset,\n  ...baserunPreset,\n  testTimeout: 10000,\n};\n```\n\nThen to run a test and log to baserun:\n\n```bash\njest test_modules.spec.ts\n...\n========================Baserun========================\nTest results available at: https://baserun.ai/runs/<id>\n=======================================================\n```\n\n## Documentation\n\nFor a deeper dive on all capabilities and more advanced usage, please refer to our [Documentation](https://docs.baserun.ai).\n\n## License\n\n[MIT License](https://github.com/baserun-ai/baserun-js/blob/main/LICENSE)\n","readmeFilename":"README.md","description":"The Baserun TypeScript SDK","author":{}}