braintrust 0.0.4 → 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -14,9 +14,11 @@ your BrainTrust API key):
14
14
  ```javascript
15
15
  const braintrust = require("braintrust");
16
16
 
17
- const experiment = await braintrust.init("NodeTest", {api_key: "YOUR_API_KEY"});
17
+ const experiment = await braintrust.init("NodeTest", {
18
+ api_key: "YOUR_API_KEY",
19
+ });
18
20
  experiment.log({
19
- inputs: {test: 1},
21
+ inputs: { test: 1 },
20
22
  output: "foo",
21
23
  expected: "bar",
22
24
  scores: {
@@ -0,0 +1,3 @@
1
+ export declare const CACHE_PATH: string;
2
+ export declare const EXPERIMENTS_PATH: string;
3
+ export declare const LOGIN_INFO_PATH: string;
package/dist/cache.js ADDED
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.LOGIN_INFO_PATH = exports.EXPERIMENTS_PATH = exports.CACHE_PATH = void 0;
27
+ const os = __importStar(require("os"));
28
+ const path = __importStar(require("path"));
29
+ exports.CACHE_PATH = path.join(os.homedir(), ".cache", "braintrust");
30
+ exports.EXPERIMENTS_PATH = path.join(exports.CACHE_PATH, "experiments");
31
+ exports.LOGIN_INFO_PATH = path.join(exports.CACHE_PATH, "api_info.json");
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Information about the current HEAD of the repo.
3
+ */
4
+ export interface RepoStatus {
5
+ commit?: string;
6
+ branch?: string;
7
+ tag?: string;
8
+ dirty: boolean;
9
+ author_name?: string;
10
+ author_email?: string;
11
+ commit_message?: string;
12
+ commit_time?: string;
13
+ }
14
+ export declare function currentRepo(): Promise<import("simple-git").SimpleGit | null>;
15
+ export declare function getPastNAncestors(n?: number, remote?: string | undefined): Promise<string[]>;
16
+ export declare function getRepoStatus(): Promise<{
17
+ commit: string | undefined;
18
+ branch: string | undefined;
19
+ tag: string | undefined;
20
+ dirty: boolean;
21
+ author_name: string | undefined;
22
+ author_email: string | undefined;
23
+ commit_message: string | undefined;
24
+ commit_time: string | undefined;
25
+ } | undefined>;
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getRepoStatus = exports.getPastNAncestors = exports.currentRepo = void 0;
13
+ const simple_git_1 = require("simple-git");
14
+ function currentRepo() {
15
+ return __awaiter(this, void 0, void 0, function* () {
16
+ const git = (0, simple_git_1.simpleGit)();
17
+ if (yield git.checkIsRepo()) {
18
+ return git;
19
+ }
20
+ else {
21
+ return null;
22
+ }
23
+ });
24
+ }
25
+ exports.currentRepo = currentRepo;
26
+ let _baseBranch = null;
27
+ function getBaseBranch(remote = undefined) {
28
+ var _a;
29
+ return __awaiter(this, void 0, void 0, function* () {
30
+ if (_baseBranch === null) {
31
+ const git = yield currentRepo();
32
+ if (git === null) {
33
+ throw new Error("Not in a git repo");
34
+ }
35
+ const remoteName = remote !== null && remote !== void 0 ? remote : (_a = (yield git.getRemotes())[0]) === null || _a === void 0 ? void 0 : _a.name;
36
+ if (!remoteName) {
37
+ // TODO: We should fix this in the Python SDK too. If you have a repo with no remotes, it will
38
+ // fail with a cryptic error message.
39
+ throw new Error("No remote found");
40
+ }
41
+ const remoteInfo = yield git.remote(["show", remoteName]);
42
+ if (!remoteInfo) {
43
+ throw new Error(`Could not find remote ${remoteName}`);
44
+ }
45
+ const match = remoteInfo.match(/\s*HEAD branch:\s*(.*)$/m);
46
+ if (!match) {
47
+ throw new Error(`Could not find HEAD branch in remote ${remoteName}`);
48
+ }
49
+ _baseBranch = { remote: remoteName, branch: match[1] };
50
+ }
51
+ return _baseBranch;
52
+ });
53
+ }
54
+ function getBaseBranchAncestor(remote = undefined) {
55
+ return __awaiter(this, void 0, void 0, function* () {
56
+ const git = yield currentRepo();
57
+ if (git === null) {
58
+ throw new Error("Not in a git repo");
59
+ }
60
+ const { remote: remoteName, branch: baseBranch } = yield getBaseBranch(remote);
61
+ const isDirty = (yield git.diffSummary()).files.length > 0;
62
+ const head = isDirty ? "HEAD" : "HEAD^";
63
+ try {
64
+ const ancestor = yield git.raw([
65
+ "merge-base",
66
+ head,
67
+ `${remoteName}/${baseBranch}`,
68
+ ]);
69
+ return ancestor.trim();
70
+ }
71
+ catch (e) {
72
+ console.warn(`Could not find a common ancestor with ${remoteName}/${baseBranch}`, e);
73
+ return undefined;
74
+ }
75
+ });
76
+ }
77
+ function getPastNAncestors(n = 10, remote = undefined) {
78
+ return __awaiter(this, void 0, void 0, function* () {
79
+ const git = yield currentRepo();
80
+ if (git === null) {
81
+ return [];
82
+ }
83
+ const ancestor = yield getBaseBranchAncestor(remote);
84
+ const commits = yield git.log({ from: ancestor, to: "HEAD" });
85
+ return commits.all.map((c) => c.hash);
86
+ });
87
+ }
88
+ exports.getPastNAncestors = getPastNAncestors;
89
+ function attempt(fn) {
90
+ return __awaiter(this, void 0, void 0, function* () {
91
+ try {
92
+ return yield fn();
93
+ }
94
+ catch (e) {
95
+ return undefined;
96
+ }
97
+ });
98
+ }
99
+ function getRepoStatus() {
100
+ return __awaiter(this, void 0, void 0, function* () {
101
+ const git = yield currentRepo();
102
+ if (git === null) {
103
+ return undefined;
104
+ }
105
+ let commit = undefined;
106
+ let commit_message = undefined;
107
+ let commit_time = undefined;
108
+ let author_name = undefined;
109
+ let author_email = undefined;
110
+ let tag = undefined;
111
+ let branch = undefined;
112
+ const dirty = (yield git.diffSummary()).files.length > 0;
113
+ if (!dirty) {
114
+ commit = yield attempt(() => __awaiter(this, void 0, void 0, function* () { return yield git.revparse(["HEAD"]); }));
115
+ commit_message = yield attempt(() => __awaiter(this, void 0, void 0, function* () { return (yield git.raw(["log", "-1", "--pretty=%B"])).trim(); }));
116
+ commit_time = yield attempt(() => __awaiter(this, void 0, void 0, function* () { return (yield git.raw(["log", "-1", "--pretty=%cI"])).trim(); }));
117
+ author_name = yield attempt(() => __awaiter(this, void 0, void 0, function* () { return (yield git.raw(["log", "-1", "--pretty=%aN"])).trim(); }));
118
+ author_email = yield attempt(() => __awaiter(this, void 0, void 0, function* () { return (yield git.raw(["log", "-1", "--pretty=%aE"])).trim(); }));
119
+ tag = yield attempt(() => __awaiter(this, void 0, void 0, function* () {
120
+ return (yield git.raw(["describe", "--tags", "--exact-match", "--always"])).trim();
121
+ }));
122
+ }
123
+ branch = yield attempt(() => __awaiter(this, void 0, void 0, function* () { return (yield git.raw(["rev-parse", "--abbrev-ref", "HEAD"])).trim(); }));
124
+ return {
125
+ commit,
126
+ branch,
127
+ tag,
128
+ dirty,
129
+ author_name,
130
+ author_email,
131
+ commit_message,
132
+ commit_time,
133
+ };
134
+ });
135
+ }
136
+ exports.getRepoStatus = getRepoStatus;
package/dist/index.d.ts CHANGED
@@ -52,7 +52,7 @@ export declare class Project {
52
52
  * key is specified, will prompt the user to login.
53
53
  * @param options.org_name (Optional) The name of a specific organization to connect to. This is useful if you belong to multiple.
54
54
  * @param options.disable_cache Do not use cached login information.
55
- * @returns The experiment object.
55
+ * @returns The newly created Experiment.
56
56
  */
57
57
  export declare function init(project: string, options?: {
58
58
  readonly experiment?: string;
@@ -67,14 +67,13 @@ export declare function init(project: string, options?: {
67
67
  * Log into BrainTrust. This will prompt you for your API token, which you can find at
68
68
  * https://www.braintrustdata.com/app/token. This method is called automatically by `init()`.
69
69
  *
70
- * @param options
70
+ * @param options Options for configuring login().
71
71
  * @param options.api_url The URL of the BrainTrust API. Defaults to https://www.braintrustdata.com.
72
72
  * @param options.api_key The API key to use. If the parameter is not specified, will try to use the `BRAINTRUST_API_KEY` environment variable. If no API
73
73
  * key is specified, will prompt the user to login.
74
74
  * @param options.org_name (Optional) The name of a specific organization to connect to. This is useful if you belong to multiple.
75
75
  * @param options.disable_cache Do not use cached login information.
76
76
  * @param options.force_login Login again, even if you have already logged in (by default, this function will exit quickly if you have already logged in)
77
- * @returns
78
77
  */
79
78
  export declare function login(options?: {
80
79
  api_url?: string;
@@ -82,30 +81,30 @@ export declare function login(options?: {
82
81
  org_name?: string;
83
82
  disable_cache?: boolean;
84
83
  force_login?: boolean;
85
- } | undefined): Promise<void>;
84
+ }): Promise<void>;
86
85
  /**
87
86
  * Log a single event to the current experiment. The event will be batched and uploaded behind the scenes.
88
87
  *
89
- * @param values
90
- * @param values.inputs The arguments that uniquely define a test case (an arbitrary, JSON serializable object). Later on,
88
+ * @param event The event to log.
89
+ * @param event.inputs The arguments that uniquely define a test case (an arbitrary, JSON serializable object). Later on,
91
90
  * BrainTrust will use the `inputs` to know whether two test casess are the same between experiments, so they should
92
91
  * not contain experiment-specific state. A simple rule of thumb is that if you run the same experiment twice, the
93
92
  * `inputs` should be identical.
94
- * @param values.output The output of your application, including post-processing (an arbitrary, JSON serializable object),
93
+ * @param event.output The output of your application, including post-processing (an arbitrary, JSON serializable object),
95
94
  * that allows you to determine whether the result is correct or not. For example, in an app that generates SQL queries,
96
95
  * the `output` should be the _result_ of the SQL query generated by the model, not the query itself, because there may
97
96
  * be multiple valid queries that answer a single question.
98
- * @param values.expected The ground truth value (an arbitrary, JSON serializable object) that you'd compare to `output` to
97
+ * @param event.expected The ground truth value (an arbitrary, JSON serializable object) that you'd compare to `output` to
99
98
  * determine if your `output` value is correct or not. BrainTrust currently does not compare `output` to `expected` for
100
99
  * you, since there are so many different ways to do that correctly. Instead, these values are just used to help you
101
100
  * navigate your experiments while digging into analyses. However, we may later use these values to re-score outputs or
102
101
  * fine-tune your models.
103
- * @param values.scores A dictionary of numeric values (between 0 and 1) to log. The scores should give you a variety of signals
102
+ * @param event.scores A dictionary of numeric values (between 0 and 1) to log. The scores should give you a variety of signals
104
103
  * that help you determine how accurate the outputs are compared to what you expect and diagnose failures. For example, a
105
104
  * summarization app might have one score that tells you how accurate the summary is, and another that measures the word similarity
106
105
  * between the generated and grouth truth summary. The word similarity score could help you determine whether the summarization was
107
106
  * covering similar concepts or not. You can use these scores to help you sort, filter, and compare experiments.
108
- * @param values.metadata (Optional) a dictionary with additional data about the test example, model outputs, or just
107
+ * @param event.metadata (Optional) a dictionary with additional data about the test example, model outputs, or just
109
108
  * about anything else that's relevant, that you can use to help find and analyze examples later. For example, you could log the
110
109
  * `prompt`, example's `id`, or anything else that would be useful to slice/dice later. The values in `metadata` can be any
111
110
  * JSON-serializable type, but its keys must be strings.
@@ -121,15 +120,15 @@ export declare function log(options: {
121
120
  /**
122
121
  * Summarize the current experiment, including the scores (compared to the closest reference experiment) and metadata.
123
122
  *
124
- * @param options
125
- * @param summarize_scores Whether to summarize the scores. If False, only the metadata will be returned.
126
- * @param comparison_experiment_id The experiment to compare against. If None, the most recent experiment on the origin's main branch will be used.
127
- * @returns `ExperimentSummary`
123
+ * @param options Options for summarizing the experiment.
124
+ * @param options.summarizeScores Whether to summarize the scores. If False, only the metadata will be returned.
125
+ * @param options.comparisonExperimentId The experiment to compare against. If None, the most recent experiment on the origin's main branch will be used.
126
+ * @returns A summary of the experiment, including the scores (compared to the closest reference experiment) and metadata.
128
127
  */
129
128
  export declare function summarize(options?: {
130
129
  readonly summarizeScores?: boolean;
131
130
  readonly comparisonExperimentId?: string;
132
- } | undefined): Promise<ExperimentSummary>;
131
+ }): Promise<ExperimentSummary>;
133
132
  /**
134
133
  * An experiment is a collection of logged events, such as model inputs and outputs, which represent
135
134
  * a snapshot of your application at a particular point in time. An experiment is meant to capture more
@@ -149,34 +148,29 @@ export declare class Experiment {
149
148
  readonly user_id: string;
150
149
  private logger;
151
150
  constructor(project: Project, id: string, name: string, user_id: string);
152
- static init(project: Project, { name, description, base_experiment, }?: {
153
- name?: string;
154
- description?: string;
155
- base_experiment?: string;
156
- }): Promise<Experiment>;
157
151
  /**
158
152
  * Log a single event to the experiment. The event will be batched and uploaded behind the scenes.
159
153
  *
160
- * @param values
161
- * @param values.inputs The arguments that uniquely define a test case (an arbitrary, JSON serializable object). Later on,
154
+ * @param event The event to log.
155
+ * @param event.inputs The arguments that uniquely define a test case (an arbitrary, JSON serializable object). Later on,
162
156
  * BrainTrust will use the `inputs` to know whether two test casess are the same between experiments, so they should
163
157
  * not contain experiment-specific state. A simple rule of thumb is that if you run the same experiment twice, the
164
158
  * `inputs` should be identical.
165
- * @param values.output The output of your application, including post-processing (an arbitrary, JSON serializable object),
159
+ * @param event.output The output of your application, including post-processing (an arbitrary, JSON serializable object),
166
160
  * that allows you to determine whether the result is correct or not. For example, in an app that generates SQL queries,
167
161
  * the `output` should be the _result_ of the SQL query generated by the model, not the query itself, because there may
168
162
  * be multiple valid queries that answer a single question.
169
- * @param values.expected The ground truth value (an arbitrary, JSON serializable object) that you'd compare to `output` to
163
+ * @param event.expected The ground truth value (an arbitrary, JSON serializable object) that you'd compare to `output` to
170
164
  * determine if your `output` value is correct or not. BrainTrust currently does not compare `output` to `expected` for
171
165
  * you, since there are so many different ways to do that correctly. Instead, these values are just used to help you
172
166
  * navigate your experiments while digging into analyses. However, we may later use these values to re-score outputs or
173
167
  * fine-tune your models.
174
- * @param values.scores A dictionary of numeric values (between 0 and 1) to log. The scores should give you a variety of signals
168
+ * @param event.scores A dictionary of numeric values (between 0 and 1) to log. The scores should give you a variety of signals
175
169
  * that help you determine how accurate the outputs are compared to what you expect and diagnose failures. For example, a
176
170
  * summarization app might have one score that tells you how accurate the summary is, and another that measures the word similarity
177
171
  * between the generated and grouth truth summary. The word similarity score could help you determine whether the summarization was
178
172
  * covering similar concepts or not. You can use these scores to help you sort, filter, and compare experiments.
179
- * @param values.metadata (Optional) a dictionary with additional data about the test example, model outputs, or just
173
+ * @param event.metadata (Optional) a dictionary with additional data about the test example, model outputs, or just
180
174
  * about anything else that's relevant, that you can use to help find and analyze examples later. For example, you could log the
181
175
  * `prompt`, example's `id`, or anything else that would be useful to slice/dice later. The values in `metadata` can be any
182
176
  * JSON-serializable type, but its keys must be strings.
@@ -192,15 +186,15 @@ export declare class Experiment {
192
186
  /**
193
187
  * Summarize the experiment, including the scores (compared to the closest reference experiment) and metadata.
194
188
  *
195
- * @param options
196
- * @param summarize_scores Whether to summarize the scores. If False, only the metadata will be returned.
197
- * @param comparison_experiment_id The experiment to compare against. If None, the most recent experiment on the origin's main branch will be used.
198
- * @returns `ExperimentSummary`
189
+ * @param options Options for summarizing the experiment.
190
+ * @param options.summarizeScores Whether to summarize the scores. If False, only the metadata will be returned.
191
+ * @param options.comparisonExperimentId The experiment to compare against. If None, the most recent experiment on the origin's main branch will be used.
192
+ * @returns A summary of the experiment, including the scores (compared to the closest reference experiment) and metadata.
199
193
  */
200
194
  summarize(options?: {
201
195
  readonly summarizeScores?: boolean;
202
196
  readonly comparisonExperimentId?: string;
203
- } | undefined): Promise<ExperimentSummary>;
197
+ }): Promise<ExperimentSummary>;
204
198
  }
205
199
  /**
206
200
  * Summary of a score's performance.
@@ -210,7 +204,7 @@ export declare class Experiment {
210
204
  * @property improvements Number of improvements in the score.
211
205
  * @property regressions Number of regressions in the score.
212
206
  */
213
- interface ScoreSummary {
207
+ export interface ScoreSummary {
214
208
  name: string;
215
209
  score: number;
216
210
  diff: number;
@@ -226,7 +220,7 @@ interface ScoreSummary {
226
220
  * @property comparisonExperimentName The experiment scores are baselined against.
227
221
  * @property scores Summary of the experiment's scores.
228
222
  */
229
- interface ExperimentSummary {
223
+ export interface ExperimentSummary {
230
224
  projectName: string;
231
225
  experimentName: string;
232
226
  projectUrl: string;
@@ -234,4 +228,3 @@ interface ExperimentSummary {
234
228
  comparisonExperimentName: string | undefined;
235
229
  scores: Record<string, ScoreSummary> | undefined;
236
230
  }
237
- export {};
package/dist/index.js CHANGED
@@ -74,6 +74,8 @@ const http = __importStar(require("http"));
74
74
  const https = __importStar(require("https"));
75
75
  const axios_1 = __importDefault(require("axios"));
76
76
  const uuid_1 = require("uuid");
77
+ const git = __importStar(require("./gitutil"));
78
+ const oai_1 = require("./oai");
77
79
  let _state = {
78
80
  current_project: null,
79
81
  current_experiment: null,
@@ -223,40 +225,61 @@ The input format is the output of "git diff". For example, "foo-bar" is valid bu
223
225
  "content": f"Branch: {branch}" + (f"\n\nDiff:\n{diff[:4096]}" if diff else ""),
224
226
  },
225
227
  ]
226
-
227
-
228
- def guess_experiment_name():
229
- # OpenAI is very slow to import, so we only do it when we need it
230
- import openai
231
-
232
- if openai.api_key is None:
233
- return None
234
-
235
- messages = guess_notebook_block_name()
236
- if not messages:
237
- messages = guess_git_experiment_name()
238
-
239
- if not messages:
240
- return None
241
-
242
- resp = run_cached_request(
243
- Completion=openai.ChatCompletion,
244
- model="gpt-3.5-turbo",
245
- messages=messages,
246
- max_tokens=128,
247
- temperature=0.7,
248
- )
249
-
250
- name = None
251
- if len(resp["choices"]) > 0:
252
- name = "-".join(resp["choices"][0]["message"]["content"].split("-")[:2])
253
- # Strip punctuation and whitespace from the prefix and suffix
254
- name = name.strip(" .,;:!?-")
255
- return name
256
228
  */
257
- function guess_experiment_name() {
258
- // TODO: Implement experiment name guessing from git
259
- return null;
229
+ function guessGitExperimentName() {
230
+ return __awaiter(this, void 0, void 0, function* () {
231
+ const repo = yield git.currentRepo();
232
+ if (!repo) {
233
+ return undefined;
234
+ }
235
+ const branch = yield repo.raw(["rev-parse", "--abbrev-ref", "HEAD"]);
236
+ let diff = yield repo.diff();
237
+ if (!diff) {
238
+ const last_commit = yield repo.log({ maxCount: 2 });
239
+ if (last_commit.all.length > 1) {
240
+ const parent = last_commit.all[1];
241
+ diff = parent.message + "\n" + (yield repo.diff(["HEAD", parent.hash]));
242
+ }
243
+ }
244
+ return [
245
+ {
246
+ role: "system",
247
+ content: `You can generate two word summaries for machine learning experiment names, based
248
+ on the branch name and an optional "diff" of the experiment's code on top of the branch.
249
+ The experiment name should be exactly two words, concatenated with a hyphen, all lowercase.
250
+ The input format is the output of "git diff". For example, "foo-bar" is valid but
251
+ "foo-bar-baz" is not.`,
252
+ },
253
+ {
254
+ role: "user",
255
+ content: `Branch: ${branch}` + (diff ? `\n\nDiff:\n${diff.slice(0, 4096)}` : ""),
256
+ },
257
+ ];
258
+ });
259
+ }
260
+ function guessExperimentName() {
261
+ return __awaiter(this, void 0, void 0, function* () {
262
+ if ((0, oai_1.openAI)() === null) {
263
+ return undefined;
264
+ }
265
+ const messages = yield guessGitExperimentName();
266
+ if (!messages) {
267
+ return undefined;
268
+ }
269
+ const resp = yield (0, oai_1.cachedChatCompletion)({
270
+ model: "gpt-3.5-turbo",
271
+ messages,
272
+ max_tokens: 128,
273
+ temperature: 0.7,
274
+ });
275
+ let name = undefined;
276
+ if (resp.choices.length > 0) {
277
+ name = resp.choices[0].message.content.split("-").slice(0, 2).join("-");
278
+ // Strip punctuation and whitespace from the prefix and suffix
279
+ name = name === null || name === void 0 ? void 0 : name.replace(/^[ .,;:!?-]+|[ .,;:!?-]+$/g, "");
280
+ }
281
+ return name;
282
+ });
260
283
  }
261
284
  class LogThread {
262
285
  constructor() {
@@ -316,7 +339,7 @@ class LogThread {
316
339
  * key is specified, will prompt the user to login.
317
340
  * @param options.org_name (Optional) The name of a specific organization to connect to. This is useful if you belong to multiple.
318
341
  * @param options.disable_cache Do not use cached login information.
319
- * @returns The experiment object.
342
+ * @returns The newly created Experiment.
320
343
  */
321
344
  function init(project, options = {}) {
322
345
  return __awaiter(this, void 0, void 0, function* () {
@@ -328,7 +351,7 @@ function init(project, options = {}) {
328
351
  api_url,
329
352
  });
330
353
  _state.current_project = yield initProject(project);
331
- _state.current_experiment = yield Experiment.init(_state.current_project, {
354
+ _state.current_experiment = yield initExperiment(_state.current_project, {
332
355
  name: experiment,
333
356
  description,
334
357
  base_experiment,
@@ -341,16 +364,15 @@ exports.init = init;
341
364
  * Log into BrainTrust. This will prompt you for your API token, which you can find at
342
365
  * https://www.braintrustdata.com/app/token. This method is called automatically by `init()`.
343
366
  *
344
- * @param options
367
+ * @param options Options for configuring login().
345
368
  * @param options.api_url The URL of the BrainTrust API. Defaults to https://www.braintrustdata.com.
346
369
  * @param options.api_key The API key to use. If the parameter is not specified, will try to use the `BRAINTRUST_API_KEY` environment variable. If no API
347
370
  * key is specified, will prompt the user to login.
348
371
  * @param options.org_name (Optional) The name of a specific organization to connect to. This is useful if you belong to multiple.
349
372
  * @param options.disable_cache Do not use cached login information.
350
373
  * @param options.force_login Login again, even if you have already logged in (by default, this function will exit quickly if you have already logged in)
351
- * @returns
352
374
  */
353
- function login(options = undefined) {
375
+ function login(options = {}) {
354
376
  return __awaiter(this, void 0, void 0, function* () {
355
377
  const { api_url = process.env.BRAINTRUST_API_URL ||
356
378
  "https://www.braintrustdata.com", api_key = process.env.BRAINTRUST_API_KEY, org_name = undefined, disable_cache = false, force_login = false, } = options || {};
@@ -389,26 +411,26 @@ exports.login = login;
389
411
  /**
390
412
  * Log a single event to the current experiment. The event will be batched and uploaded behind the scenes.
391
413
  *
392
- * @param values
393
- * @param values.inputs The arguments that uniquely define a test case (an arbitrary, JSON serializable object). Later on,
414
+ * @param event The event to log.
415
+ * @param event.inputs The arguments that uniquely define a test case (an arbitrary, JSON serializable object). Later on,
394
416
  * BrainTrust will use the `inputs` to know whether two test casess are the same between experiments, so they should
395
417
  * not contain experiment-specific state. A simple rule of thumb is that if you run the same experiment twice, the
396
418
  * `inputs` should be identical.
397
- * @param values.output The output of your application, including post-processing (an arbitrary, JSON serializable object),
419
+ * @param event.output The output of your application, including post-processing (an arbitrary, JSON serializable object),
398
420
  * that allows you to determine whether the result is correct or not. For example, in an app that generates SQL queries,
399
421
  * the `output` should be the _result_ of the SQL query generated by the model, not the query itself, because there may
400
422
  * be multiple valid queries that answer a single question.
401
- * @param values.expected The ground truth value (an arbitrary, JSON serializable object) that you'd compare to `output` to
423
+ * @param event.expected The ground truth value (an arbitrary, JSON serializable object) that you'd compare to `output` to
402
424
  * determine if your `output` value is correct or not. BrainTrust currently does not compare `output` to `expected` for
403
425
  * you, since there are so many different ways to do that correctly. Instead, these values are just used to help you
404
426
  * navigate your experiments while digging into analyses. However, we may later use these values to re-score outputs or
405
427
  * fine-tune your models.
406
- * @param values.scores A dictionary of numeric values (between 0 and 1) to log. The scores should give you a variety of signals
428
+ * @param event.scores A dictionary of numeric values (between 0 and 1) to log. The scores should give you a variety of signals
407
429
  * that help you determine how accurate the outputs are compared to what you expect and diagnose failures. For example, a
408
430
  * summarization app might have one score that tells you how accurate the summary is, and another that measures the word similarity
409
431
  * between the generated and grouth truth summary. The word similarity score could help you determine whether the summarization was
410
432
  * covering similar concepts or not. You can use these scores to help you sort, filter, and compare experiments.
411
- * @param values.metadata (Optional) a dictionary with additional data about the test example, model outputs, or just
433
+ * @param event.metadata (Optional) a dictionary with additional data about the test example, model outputs, or just
412
434
  * about anything else that's relevant, that you can use to help find and analyze examples later. For example, you could log the
413
435
  * `prompt`, example's `id`, or anything else that would be useful to slice/dice later. The values in `metadata` can be any
414
436
  * JSON-serializable type, but its keys must be strings.
@@ -424,12 +446,12 @@ exports.log = log;
424
446
  /**
425
447
  * Summarize the current experiment, including the scores (compared to the closest reference experiment) and metadata.
426
448
  *
427
- * @param options
428
- * @param summarize_scores Whether to summarize the scores. If False, only the metadata will be returned.
429
- * @param comparison_experiment_id The experiment to compare against. If None, the most recent experiment on the origin's main branch will be used.
430
- * @returns `ExperimentSummary`
449
+ * @param options Options for summarizing the experiment.
450
+ * @param options.summarizeScores Whether to summarize the scores. If False, only the metadata will be returned.
451
+ * @param options.comparisonExperimentId The experiment to compare against. If None, the most recent experiment on the origin's main branch will be used.
452
+ * @returns A summary of the experiment, including the scores (compared to the closest reference experiment) and metadata.
431
453
  */
432
- function summarize(options = undefined) {
454
+ function summarize(options = {}) {
433
455
  return __awaiter(this, void 0, void 0, function* () {
434
456
  if (!_state.current_experiment) {
435
457
  throw new Error("Not initialized. Please call init() first");
@@ -459,6 +481,59 @@ function _check_org_info(org_info, org_name) {
459
481
  function _urljoin(...parts) {
460
482
  return parts.map((x) => x.replace(/^\//, "")).join("/");
461
483
  }
484
+ function initExperiment(project, { name, description, base_experiment, } = {
485
+ name: undefined,
486
+ description: undefined,
487
+ base_experiment: undefined,
488
+ }) {
489
+ return __awaiter(this, void 0, void 0, function* () {
490
+ const args = { project_id: project.id };
491
+ if (!name) {
492
+ name = yield guessExperimentName();
493
+ }
494
+ if (name) {
495
+ args["name"] = name;
496
+ }
497
+ if (description) {
498
+ args["description"] = description;
499
+ }
500
+ const repoStatus = yield git.getRepoStatus();
501
+ if (repoStatus) {
502
+ args["repo_info"] = repoStatus;
503
+ }
504
+ const conn = api_conn();
505
+ let base_exp_id = undefined;
506
+ if (base_experiment !== undefined) {
507
+ const resp = yield conn.get("experiments", {
508
+ project_id: project.id,
509
+ name: base_experiment,
510
+ });
511
+ const experiments = resp.data;
512
+ if (experiments.length > 0) {
513
+ base_exp_id = experiments[0]["id"];
514
+ }
515
+ else {
516
+ throw new Error(`Base experiment ${base_experiment} not found`);
517
+ }
518
+ }
519
+ if (base_exp_id === undefined) {
520
+ const resp = yield conn.post("experiments-by-commits", {
521
+ project_id: project.id,
522
+ commits: yield git.getPastNAncestors(),
523
+ });
524
+ base_exp_id = resp.data["experiment_id"];
525
+ }
526
+ if (base_exp_id !== undefined) {
527
+ args["base_exp_id"] = base_exp_id;
528
+ }
529
+ const data = (yield api_insert("register-experiment", args))[0];
530
+ // NOTE: This is a deviation from the Python lib and allows the log() method
531
+ // to not be async.
532
+ //
533
+ const user_id = (yield _user_info())["id"];
534
+ return new Experiment(project, data.id, data.name, user_id);
535
+ });
536
+ }
462
537
  /**
463
538
  * An experiment is a collection of logged events, such as model inputs and outputs, which represent
464
539
  * a snapshot of your application at a particular point in time. An experiment is meant to capture more
@@ -479,89 +554,29 @@ class Experiment {
479
554
  this.user_id = user_id;
480
555
  this.logger = new LogThread();
481
556
  }
482
- static init(project, { name, description, base_experiment, } = {
483
- name: undefined,
484
- description: undefined,
485
- base_experiment: undefined,
486
- }) {
487
- return __awaiter(this, void 0, void 0, function* () {
488
- const args = { project_id: project.id };
489
- // TODO
490
- /*
491
- if (!name) {
492
- name = guessExperimentName();
493
- }
494
- */
495
- if (name) {
496
- args["name"] = name;
497
- }
498
- if (description) {
499
- args["description"] = description;
500
- }
501
- // TODO
502
- /*
503
- const repoStatus = await get_repo_status();
504
- if (repoStatus) {
505
- args["repo_info"] = repoStatus;
506
- }
507
- */
508
- const conn = api_conn();
509
- let base_exp_id = undefined;
510
- if (base_experiment !== undefined) {
511
- const resp = yield conn.get("experiments", {
512
- project_id: project.id,
513
- name: base_experiment,
514
- });
515
- const experiments = resp.data;
516
- if (experiments.length > 0) {
517
- base_exp_id = experiments[0]["id"];
518
- }
519
- else {
520
- throw new Error(`Base experiment ${base_experiment} not found`);
521
- }
522
- }
523
- if (base_exp_id === undefined) {
524
- const resp = yield conn.post("experiments-by-commits", {
525
- project_id: project.id,
526
- // TODO
527
- commits: [] /* await get_past_n_ancestors() */,
528
- });
529
- base_exp_id = resp.data["experiment_id"];
530
- }
531
- if (base_exp_id !== undefined) {
532
- args["base_exp_id"] = base_exp_id;
533
- }
534
- const data = (yield api_insert("register-experiment", args))[0];
535
- // NOTE: This is a deviation from the Python lib and allows the log() method
536
- // to not be async.
537
- //
538
- const user_id = (yield _user_info())["id"];
539
- return new Experiment(project, data.id, data.name, user_id);
540
- });
541
- }
542
557
  /**
543
558
  * Log a single event to the experiment. The event will be batched and uploaded behind the scenes.
544
559
  *
545
- * @param values
546
- * @param values.inputs The arguments that uniquely define a test case (an arbitrary, JSON serializable object). Later on,
560
+ * @param event The event to log.
561
+ * @param event.inputs The arguments that uniquely define a test case (an arbitrary, JSON serializable object). Later on,
547
562
  * BrainTrust will use the `inputs` to know whether two test casess are the same between experiments, so they should
548
563
  * not contain experiment-specific state. A simple rule of thumb is that if you run the same experiment twice, the
549
564
  * `inputs` should be identical.
550
- * @param values.output The output of your application, including post-processing (an arbitrary, JSON serializable object),
565
+ * @param event.output The output of your application, including post-processing (an arbitrary, JSON serializable object),
551
566
  * that allows you to determine whether the result is correct or not. For example, in an app that generates SQL queries,
552
567
  * the `output` should be the _result_ of the SQL query generated by the model, not the query itself, because there may
553
568
  * be multiple valid queries that answer a single question.
554
- * @param values.expected The ground truth value (an arbitrary, JSON serializable object) that you'd compare to `output` to
569
+ * @param event.expected The ground truth value (an arbitrary, JSON serializable object) that you'd compare to `output` to
555
570
  * determine if your `output` value is correct or not. BrainTrust currently does not compare `output` to `expected` for
556
571
  * you, since there are so many different ways to do that correctly. Instead, these values are just used to help you
557
572
  * navigate your experiments while digging into analyses. However, we may later use these values to re-score outputs or
558
573
  * fine-tune your models.
559
- * @param values.scores A dictionary of numeric values (between 0 and 1) to log. The scores should give you a variety of signals
574
+ * @param event.scores A dictionary of numeric values (between 0 and 1) to log. The scores should give you a variety of signals
560
575
  * that help you determine how accurate the outputs are compared to what you expect and diagnose failures. For example, a
561
576
  * summarization app might have one score that tells you how accurate the summary is, and another that measures the word similarity
562
577
  * between the generated and grouth truth summary. The word similarity score could help you determine whether the summarization was
563
578
  * covering similar concepts or not. You can use these scores to help you sort, filter, and compare experiments.
564
- * @param values.metadata (Optional) a dictionary with additional data about the test example, model outputs, or just
579
+ * @param event.metadata (Optional) a dictionary with additional data about the test example, model outputs, or just
565
580
  * about anything else that's relevant, that you can use to help find and analyze examples later. For example, you could log the
566
581
  * `prompt`, example's `id`, or anything else that would be useful to slice/dice later. The values in `metadata` can be any
567
582
  * JSON-serializable type, but its keys must be strings.
@@ -604,12 +619,12 @@ class Experiment {
604
619
  /**
605
620
  * Summarize the experiment, including the scores (compared to the closest reference experiment) and metadata.
606
621
  *
607
- * @param options
608
- * @param summarize_scores Whether to summarize the scores. If False, only the metadata will be returned.
609
- * @param comparison_experiment_id The experiment to compare against. If None, the most recent experiment on the origin's main branch will be used.
610
- * @returns `ExperimentSummary`
622
+ * @param options Options for summarizing the experiment.
623
+ * @param options.summarizeScores Whether to summarize the scores. If False, only the metadata will be returned.
624
+ * @param options.comparisonExperimentId The experiment to compare against. If None, the most recent experiment on the origin's main branch will be used.
625
+ * @returns A summary of the experiment, including the scores (compared to the closest reference experiment) and metadata.
611
626
  */
612
- summarize(options = undefined) {
627
+ summarize(options = {}) {
613
628
  return __awaiter(this, void 0, void 0, function* () {
614
629
  let { summarizeScores = true, comparisonExperimentId = undefined } = options || {};
615
630
  yield this.logger.flush();
package/dist/oai.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import { OpenAIApi } from "openai";
2
+ export declare function openAI(): OpenAIApi | null;
3
+ export declare function cachedChatCompletion(args: any): Promise<any>;
package/dist/oai.js ADDED
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.cachedChatCompletion = exports.openAI = void 0;
36
+ const path = __importStar(require("path"));
37
+ const sqlite3 = __importStar(require("sqlite3"));
38
+ const fs = __importStar(require("fs"));
39
+ const cache_1 = require("./cache");
40
+ const openai_1 = require("openai");
41
+ const OAI_CACHE = path.join(cache_1.CACHE_PATH, "oai.sqlite");
42
+ let _db = null;
43
+ function openCache() {
44
+ return __awaiter(this, void 0, void 0, function* () {
45
+ if (_db === null) {
46
+ fs.mkdirSync(cache_1.CACHE_PATH, { recursive: true });
47
+ _db = new sqlite3.Database(OAI_CACHE);
48
+ yield new Promise((resolve, reject) => {
49
+ _db.run("CREATE TABLE IF NOT EXISTS cache (params text, response text)", (err) => {
50
+ if (err) {
51
+ reject(err);
52
+ }
53
+ else {
54
+ resolve(undefined);
55
+ }
56
+ });
57
+ });
58
+ }
59
+ return _db;
60
+ });
61
+ }
62
+ let _openai = null;
63
+ function openAI() {
64
+ if (_openai === null && process.env.OPENAI_API_KEY) {
65
+ const config = new openai_1.Configuration({ apiKey: process.env.OPENAI_API_KEY });
66
+ _openai = new openai_1.OpenAIApi(config);
67
+ }
68
+ return _openai;
69
+ }
70
+ exports.openAI = openAI;
71
+ function cachedChatCompletion(args) {
72
+ return __awaiter(this, void 0, void 0, function* () {
73
+ const db = yield openCache();
74
+ const param_key = JSON.stringify(args);
75
+ const query = `SELECT response FROM "cache" WHERE params=?`;
76
+ const resp = yield new Promise((resolve, reject) => {
77
+ db.get(query, [param_key], (err, row) => {
78
+ if (err) {
79
+ reject(err);
80
+ }
81
+ else {
82
+ resolve(row);
83
+ }
84
+ });
85
+ });
86
+ if (resp) {
87
+ return JSON.parse(resp.response);
88
+ }
89
+ const openai = openAI();
90
+ if (openai === null) {
91
+ return new Error("OPENAI_API_KEY not set");
92
+ }
93
+ const completion = yield openai.createChatCompletion(args);
94
+ const data = completion.data;
95
+ db.run(`INSERT INTO "cache" VALUES (?, ?)`, [
96
+ param_key,
97
+ JSON.stringify(data),
98
+ ]);
99
+ return data;
100
+ });
101
+ }
102
+ exports.cachedChatCompletion = cachedChatCompletion;
@@ -1 +1 @@
1
- {"program":{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/axios/index.d.ts","../node_modules/@types/uuid/index.d.ts","../src/index.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/dom-events.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/index.d.ts"],"fileInfos":[{"version":"f59215c5f1d886b05395ee7aca73e0ac69ddfad2843aa88530e797879d511bad","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","dc48272d7c333ccf58034c0026162576b7d50ea0e69c3b9292f803fc20720fd5","27147504487dc1159369da4f4da8a26406364624fa9bc3db632f7d94a5bae2c3","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4",{"version":"9d9885c728913c1d16e0d2831b40341d6ad9a0ceecaabc55209b306ad9c736a5","affectsGlobalScope":true},{"version":"17bea081b9c0541f39dd1ae9bc8c78bdd561879a682e60e2f25f688c0ecab248","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"ab22100fdd0d24cfc2cc59d0a00fc8cf449830d9c4030dc54390a46bd562e929","affectsGlobalScope":true},{"version":"f7bd636ae3a4623c503359ada74510c4005df5b36de7f23e1db8a5c543fd176b","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"0c20f4d2358eb679e4ae8a4432bdd96c857a2960fd6800b21ec4008ec59d60ea","affectsGlobalScope":true},{"version":"36ae84ccc0633f7c0787bc6108386c8b773e95d3b052d9464a99cd9b8795fbec","affectsGlobalScope":true},{"version":"82d0d8e269b9eeac02c3bd1c9e884e85d483fcb2cd168bccd6bc54df663da031","affectsGlobalScope":true},{"version":"b8deab98702588840be73d67f02412a2d45a417a3c097b2e96f7f3a42ac483d1","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"376d554d042fb409cb55b5cbaf0b2b4b7e669619493c5d18d5fa8bd67273f82a","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"c4138a3dd7cd6cf1f363ca0f905554e8d81b45844feea17786cdf1626cb8ea06","affectsGlobalScope":true},{"version":"6ff3e2452b055d8f0ec026511c6582b55d935675af67cdb67dd1dc671e8065df","affectsGlobalScope":true},{"version":"03de17b810f426a2f47396b0b99b53a82c1b60e9cba7a7edda47f9bb077882f4","affectsGlobalScope":true},{"version":"8184c6ddf48f0c98429326b428478ecc6143c27f79b79e85740f17e6feb090f1","affectsGlobalScope":true},{"version":"261c4d2cf86ac5a89ad3fb3fafed74cbb6f2f7c1d139b0540933df567d64a6ca","affectsGlobalScope":true},{"version":"6af1425e9973f4924fca986636ac19a0cf9909a7e0d9d3009c349e6244e957b6","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"15a630d6817718a2ddd7088c4f83e4673fde19fa992d2eae2cf51132a302a5d3","affectsGlobalScope":true},{"version":"f06948deb2a51aae25184561c9640fb66afeddb34531a9212d011792b1d19e0a","affectsGlobalScope":true},{"version":"01e0ee7e1f661acedb08b51f8a9b7d7f959e9cdb6441360f06522cc3aea1bf2e","affectsGlobalScope":true},{"version":"ac17a97f816d53d9dd79b0d235e1c0ed54a8cc6a0677e9a3d61efb480b2a3e4e","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"ec0104fee478075cb5171e5f4e3f23add8e02d845ae0165bfa3f1099241fa2aa","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"9cc66b0513ad41cb5f5372cca86ef83a0d37d1c1017580b7dace3ea5661836df","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"307c8b7ebbd7f23a92b73a4c6c0a697beca05b06b036c23a34553e5fe65e4fdc","affectsGlobalScope":true},{"version":"189c0703923150aa30673fa3de411346d727cc44a11c75d05d7cf9ef095daa22","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"1d729ea435a93e1a70519d06a6f13fa418c4c39a52b69e6db86750ebfcdf5554","95c617b16c4765ff6de307629b6918181908bee82a59fca0b2c95f170a4be7ea",{"version":"953cc0f7f15219f652f865083404e93e79314a8dedbedfd017320871eac2619c","signature":"503e6fc7e1a057c9c51962e32bac1f31827fae2100f413341595c165936ac140"},"587f13f1e8157bd8cec0adda0de4ef558bb8573daa9d518d1e2af38e87ecc91f","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"bce910d9164785c9f0d4dcea4be359f5f92130c7c7833dea6138ab1db310a1f9","affectsGlobalScope":true},"7a435e0c814f58f23e9a0979045ec0ef5909aac95a70986e8bcce30c27dff228",{"version":"c81c51f43e343b6d89114b17341fb9d381c4ccbb25e0ee77532376052c801ba7","affectsGlobalScope":true},"db71be322f07f769200108aa19b79a75dd19a187c9dca2a30c4537b233aa2863","57135ce61976a8b1dadd01bb412406d1805b90db6e8ecb726d0d78e0b5f76050",{"version":"49479e21a040c0177d1b1bc05a124c0383df7a08a0726ad4d9457619642e875a","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","f302f3a47d7758f67f2afc753b9375d6504dde05d2e6ecdb1df50abbb131fc89","3690133deae19c8127c5505fcb67b04bdc9eb053796008538a9b9abbb70d85aa","5b1c0a23f464f894e7c2b2b6c56df7b9afa60ed48c5345f8618d389a636b2108","be2b092f2765222757c6441b86c53a5ea8dfed47bbc43eab4c5fe37942c866b3","8e6b05abc98adba15e1ac78e137c64576c74002e301d682e66feb77a23907ab8","1ca735bb3d407b2af4fbee7665f3a0a83be52168c728cc209755060ba7ed67bd",{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true},{"version":"b85c02e14ecb2a873dad5a1de72319b265160ba48f1b83661aeb3bba1366c1bc","affectsGlobalScope":true},"7a2ba0c9af860ac3e77b35ed01fd96d15986f17aa22fe40f188ae556fb1070df","fc3764040518a1008dd04bdc80964591b566b896283e00df85c95851c1f46237","55709608060f77965c270ac10ac646286589f1bd1cb174fff1778a2dd9a7ef31","790623a47c5eda62910098884ecb154dc0e5f3a23fc36c1bfb3b5b9ed44e2c2d","42b40e40f2a358cda332456214fad311e1806a6abf3cebaaac72496e07556642","354612fe1d49ecc9551ea3a27d94eef2887b64ef4a71f72ca444efe0f2f0ba80",{"version":"ac0c77cd7db52b3c278bdd1452ce754014835493d05b84535f46854fdc2063b2","affectsGlobalScope":true},"f5490f53d40291cc8607f5463434d1ac6c5564bc4fbb03abceb03a8f6b014457","5e2b91328a540a0933ab5c2203f4358918e6f0fe7505d22840a891a6117735f1","3abc3512fa04aa0230f59ea1019311fd8667bd935d28306311dccc8b17e79d5d",{"version":"14a50dafe3f45713f7f27cb6320dff07c6ac31678f07959c2134260061bf91ff","affectsGlobalScope":true},{"version":"19da7150ca062323b1db6311a6ef058c9b0a39cc64d836b5e9b75d301869653b","affectsGlobalScope":true},"1349077576abb41f0e9c78ec30762ff75b710208aff77f5fdcc6a8c8ce6289dd","e2ce82603102b5c0563f59fb40314cc1ff95a4d521a66ad14146e130ea80d89c","a3e0395220255a350aa9c6d56f882bfcb5b85c19fddf5419ec822cf22246a26d","c27b01e8ddff5cd280711af5e13aecd9a3228d1c256ea797dd64f8fdec5f7df5","898840e876dfd21843db9f2aa6ae38ba2eab550eb780ff62b894b9fbfebfae6b","0cab4d7d4edc40cd3af9eea7c3ed6d1016910c0954c49c4297e479bf3822a625","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","785e5be57d4f20f290a20e7b0c6263f6c57fd6e51283050756cef07d6d651c68","44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","164deb2409ac5f4da3cd139dbcee7f7d66753d90363a4d7e2db8d8874f272270",{"version":"ffc62d73b4fa10ca8c59f8802df88efefe447025730a24ee977b60adedc5bf37","affectsGlobalScope":true},{"version":"ab294c4b7279318ee2a8fdf681305457ecc05970c94108d304933f18823eeac1","affectsGlobalScope":true},"ad08154d9602429522cac965a715fde27d421d69b24756c5d291877dda75353e","5bc85813bfcb6907cc3a960fec8734a29d7884e0e372515147720c5991b8bc22","812b25f798033c202baedf386a1ccc41f9191b122f089bffd10fdccce99fba11","993325544790073f77e945bee046d53988c0bc3ac5695c9cf8098166feb82661",{"version":"75dd741ca6a6c8d2437a6ca8349b64b816421dbf9fe82dd026afaba965576962","affectsGlobalScope":true},{"version":"0e08c360c9b5961ecb0537b703e253842b3ded53151ee07024148219b61a8baf","affectsGlobalScope":true},"2ce2210032ccaff7710e2abf6a722e62c54960458e73e356b6a365c93ab6ca66","92db194ef7d208d5e4b6242a3434573fd142a621ff996d84cc9dbba3553277d0","16a3080e885ed52d4017c902227a8d0d8daf723d062bec9e45627c6fdcd6699b",{"version":"0bd9543cd8fc0959c76fb8f4f5a26626c2ed62ef4be98fd857bce268066db0a2","affectsGlobalScope":true},"1ca6858a0cbcd74d7db72d7b14c5360a928d1d16748a55ecfa6bfaff8b83071b",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"ebf3434b09c527078aa74139ff367fffa64fea32a01d6c06fb0a69b0ecadf43e"],"root":[46],"options":{"declaration":true,"esModuleInterop":true,"module":1,"outDir":"./","strict":true,"target":2},"fileIdsList":[[47,93],[50,93],[51,56,84,93],[52,63,64,71,81,92,93],[52,53,63,71,93],[54,93],[55,56,64,72,93],[56,81,89,93],[57,59,63,71,93],[58,93],[59,60,93],[63,93],[61,63,93],[63,64,65,81,92,93],[63,64,65,78,81,84,93],[93,97],[93],[59,63,66,71,81,92,93],[63,64,66,67,71,81,89,92,93],[66,68,81,89,92,93],[47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99],[63,69,93],[70,92,93],[59,63,71,81,93],[72,93],[73,93],[50,74,93],[75,91,93,97],[76,93],[77,93],[63,78,79,93],[78,80,93,95],[51,63,81,82,83,84,93],[51,81,83,93],[81,82,93],[84,93],[85,93],[81,93],[63,87,88,93],[87,88,93],[56,71,81,89,93],[90,93],[71,91,93],[51,66,77,92,93],[56,93],[81,93,94],[93,95],[93,96],[51,56,63,65,74,81,92,93,95,97],[81,93,98],[44,45,66,68,93]],"referencedMap":[[47,1],[48,1],[50,2],[51,3],[52,4],[53,5],[54,6],[55,7],[56,8],[57,9],[58,10],[59,11],[60,11],[62,12],[61,13],[63,12],[64,14],[65,15],[49,16],[99,17],[66,18],[67,19],[68,20],[100,21],[69,22],[70,23],[71,24],[72,25],[73,26],[74,27],[75,28],[76,29],[77,30],[78,31],[79,31],[80,32],[81,33],[83,34],[82,35],[84,36],[85,37],[86,38],[87,39],[88,40],[89,41],[90,42],[91,43],[92,44],[93,45],[94,46],[95,47],[96,48],[97,49],[98,50],[45,17],[44,17],[42,17],[43,17],[9,17],[8,17],[2,17],[10,17],[11,17],[12,17],[13,17],[14,17],[15,17],[16,17],[17,17],[3,17],[4,17],[21,17],[18,17],[19,17],[20,17],[22,17],[23,17],[24,17],[5,17],[25,17],[26,17],[27,17],[28,17],[6,17],[32,17],[29,17],[30,17],[31,17],[33,17],[7,17],[34,17],[39,17],[40,17],[35,17],[36,17],[37,17],[38,17],[1,17],[41,17],[46,51]],"exportedModulesMap":[[47,1],[48,1],[50,2],[51,3],[52,4],[53,5],[54,6],[55,7],[56,8],[57,9],[58,10],[59,11],[60,11],[62,12],[61,13],[63,12],[64,14],[65,15],[49,16],[99,17],[66,18],[67,19],[68,20],[100,21],[69,22],[70,23],[71,24],[72,25],[73,26],[74,27],[75,28],[76,29],[77,30],[78,31],[79,31],[80,32],[81,33],[83,34],[82,35],[84,36],[85,37],[86,38],[87,39],[88,40],[89,41],[90,42],[91,43],[92,44],[93,45],[94,46],[95,47],[96,48],[97,49],[98,50],[45,17],[44,17],[17,17],[3,17],[4,17],[21,17],[18,17],[19,17],[20,17],[22,17],[23,17],[24,17],[5,17],[25,17],[26,17],[27,17],[28,17],[6,17],[32,17],[29,17],[30,17],[31,17],[33,17],[7,17],[34,17],[39,17],[40,17],[35,17],[36,17],[37,17],[38,17],[41,17]],"semanticDiagnosticsPerFile":[47,48,50,51,52,53,54,55,56,57,58,59,60,62,61,63,64,65,49,99,66,67,68,100,69,70,71,72,73,74,75,76,77,78,79,80,81,83,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,45,44,42,43,9,8,2,10,11,12,13,14,15,16,17,3,4,21,18,19,20,22,23,24,5,25,26,27,28,6,32,29,30,31,33,7,34,39,40,35,36,37,38,1,41,46]},"version":"5.1.6"}
1
+ {"program":{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../src/cache.ts","../node_modules/@types/node/assert.d.ts","../node_modules/@types/node/assert/strict.d.ts","../node_modules/@types/node/globals.d.ts","../node_modules/@types/node/async_hooks.d.ts","../node_modules/@types/node/buffer.d.ts","../node_modules/@types/node/child_process.d.ts","../node_modules/@types/node/cluster.d.ts","../node_modules/@types/node/console.d.ts","../node_modules/@types/node/constants.d.ts","../node_modules/@types/node/crypto.d.ts","../node_modules/@types/node/dgram.d.ts","../node_modules/@types/node/diagnostics_channel.d.ts","../node_modules/@types/node/dns.d.ts","../node_modules/@types/node/dns/promises.d.ts","../node_modules/@types/node/domain.d.ts","../node_modules/@types/node/dom-events.d.ts","../node_modules/@types/node/events.d.ts","../node_modules/@types/node/fs.d.ts","../node_modules/@types/node/fs/promises.d.ts","../node_modules/@types/node/http.d.ts","../node_modules/@types/node/http2.d.ts","../node_modules/@types/node/https.d.ts","../node_modules/@types/node/inspector.d.ts","../node_modules/@types/node/module.d.ts","../node_modules/@types/node/net.d.ts","../node_modules/@types/node/os.d.ts","../node_modules/@types/node/path.d.ts","../node_modules/@types/node/perf_hooks.d.ts","../node_modules/@types/node/process.d.ts","../node_modules/@types/node/punycode.d.ts","../node_modules/@types/node/querystring.d.ts","../node_modules/@types/node/readline.d.ts","../node_modules/@types/node/readline/promises.d.ts","../node_modules/@types/node/repl.d.ts","../node_modules/@types/node/stream.d.ts","../node_modules/@types/node/stream/promises.d.ts","../node_modules/@types/node/stream/consumers.d.ts","../node_modules/@types/node/stream/web.d.ts","../node_modules/@types/node/string_decoder.d.ts","../node_modules/@types/node/test.d.ts","../node_modules/@types/node/timers.d.ts","../node_modules/@types/node/timers/promises.d.ts","../node_modules/@types/node/tls.d.ts","../node_modules/@types/node/trace_events.d.ts","../node_modules/@types/node/tty.d.ts","../node_modules/@types/node/url.d.ts","../node_modules/@types/node/util.d.ts","../node_modules/@types/node/v8.d.ts","../node_modules/@types/node/vm.d.ts","../node_modules/@types/node/wasi.d.ts","../node_modules/@types/node/worker_threads.d.ts","../node_modules/@types/node/zlib.d.ts","../node_modules/@types/node/globals.global.d.ts","../node_modules/@types/node/index.d.ts","../node_modules/simple-git/dist/src/lib/tasks/task.d.ts","../node_modules/simple-git/dist/src/lib/types/tasks.d.ts","../node_modules/simple-git/dist/src/lib/errors/git-error.d.ts","../node_modules/simple-git/dist/src/lib/types/handlers.d.ts","../node_modules/simple-git/dist/src/lib/types/index.d.ts","../node_modules/simple-git/dist/src/lib/tasks/log.d.ts","../node_modules/simple-git/dist/typings/response.d.ts","../node_modules/simple-git/dist/src/lib/responses/getremotesummary.d.ts","../node_modules/simple-git/dist/src/lib/args/pathspec.d.ts","../node_modules/simple-git/dist/src/lib/tasks/apply-patch.d.ts","../node_modules/simple-git/dist/src/lib/tasks/check-is-repo.d.ts","../node_modules/simple-git/dist/src/lib/tasks/clean.d.ts","../node_modules/simple-git/dist/src/lib/tasks/clone.d.ts","../node_modules/simple-git/dist/src/lib/tasks/config.d.ts","../node_modules/simple-git/dist/src/lib/tasks/grep.d.ts","../node_modules/simple-git/dist/src/lib/tasks/reset.d.ts","../node_modules/simple-git/dist/src/lib/tasks/version.d.ts","../node_modules/simple-git/dist/typings/types.d.ts","../node_modules/simple-git/dist/src/lib/errors/git-construct-error.d.ts","../node_modules/simple-git/dist/src/lib/errors/git-plugin-error.d.ts","../node_modules/simple-git/dist/src/lib/errors/git-response-error.d.ts","../node_modules/simple-git/dist/src/lib/errors/task-configuration-error.d.ts","../node_modules/simple-git/dist/typings/errors.d.ts","../node_modules/simple-git/dist/typings/simple-git.d.ts","../node_modules/simple-git/dist/typings/index.d.ts","../src/gitutil.ts","../node_modules/axios/index.d.ts","../node_modules/@types/uuid/index.d.ts","../node_modules/sqlite3/lib/sqlite3.d.ts","../node_modules/openai/dist/configuration.d.ts","../node_modules/openai/node_modules/axios/index.d.ts","../node_modules/openai/dist/base.d.ts","../node_modules/openai/dist/api.d.ts","../node_modules/openai/dist/index.d.ts","../src/oai.ts","../src/index.ts"],"fileInfos":[{"version":"f59215c5f1d886b05395ee7aca73e0ac69ddfad2843aa88530e797879d511bad","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","dc48272d7c333ccf58034c0026162576b7d50ea0e69c3b9292f803fc20720fd5","27147504487dc1159369da4f4da8a26406364624fa9bc3db632f7d94a5bae2c3","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4",{"version":"9d9885c728913c1d16e0d2831b40341d6ad9a0ceecaabc55209b306ad9c736a5","affectsGlobalScope":true},{"version":"17bea081b9c0541f39dd1ae9bc8c78bdd561879a682e60e2f25f688c0ecab248","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"ab22100fdd0d24cfc2cc59d0a00fc8cf449830d9c4030dc54390a46bd562e929","affectsGlobalScope":true},{"version":"f7bd636ae3a4623c503359ada74510c4005df5b36de7f23e1db8a5c543fd176b","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"0c20f4d2358eb679e4ae8a4432bdd96c857a2960fd6800b21ec4008ec59d60ea","affectsGlobalScope":true},{"version":"36ae84ccc0633f7c0787bc6108386c8b773e95d3b052d9464a99cd9b8795fbec","affectsGlobalScope":true},{"version":"82d0d8e269b9eeac02c3bd1c9e884e85d483fcb2cd168bccd6bc54df663da031","affectsGlobalScope":true},{"version":"b8deab98702588840be73d67f02412a2d45a417a3c097b2e96f7f3a42ac483d1","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"376d554d042fb409cb55b5cbaf0b2b4b7e669619493c5d18d5fa8bd67273f82a","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"c4138a3dd7cd6cf1f363ca0f905554e8d81b45844feea17786cdf1626cb8ea06","affectsGlobalScope":true},{"version":"6ff3e2452b055d8f0ec026511c6582b55d935675af67cdb67dd1dc671e8065df","affectsGlobalScope":true},{"version":"03de17b810f426a2f47396b0b99b53a82c1b60e9cba7a7edda47f9bb077882f4","affectsGlobalScope":true},{"version":"8184c6ddf48f0c98429326b428478ecc6143c27f79b79e85740f17e6feb090f1","affectsGlobalScope":true},{"version":"261c4d2cf86ac5a89ad3fb3fafed74cbb6f2f7c1d139b0540933df567d64a6ca","affectsGlobalScope":true},{"version":"6af1425e9973f4924fca986636ac19a0cf9909a7e0d9d3009c349e6244e957b6","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"15a630d6817718a2ddd7088c4f83e4673fde19fa992d2eae2cf51132a302a5d3","affectsGlobalScope":true},{"version":"f06948deb2a51aae25184561c9640fb66afeddb34531a9212d011792b1d19e0a","affectsGlobalScope":true},{"version":"01e0ee7e1f661acedb08b51f8a9b7d7f959e9cdb6441360f06522cc3aea1bf2e","affectsGlobalScope":true},{"version":"ac17a97f816d53d9dd79b0d235e1c0ed54a8cc6a0677e9a3d61efb480b2a3e4e","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"ec0104fee478075cb5171e5f4e3f23add8e02d845ae0165bfa3f1099241fa2aa","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"9cc66b0513ad41cb5f5372cca86ef83a0d37d1c1017580b7dace3ea5661836df","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"307c8b7ebbd7f23a92b73a4c6c0a697beca05b06b036c23a34553e5fe65e4fdc","affectsGlobalScope":true},{"version":"189c0703923150aa30673fa3de411346d727cc44a11c75d05d7cf9ef095daa22","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},{"version":"43361e6b831db1ef828f60d9219c09bfc43acb1b75ce86ead48f557a0935c0d2","signature":"b4324240466cc26262b0a4876ba6e405a8ad714cd15d4e309b765a3b41d90fb9"},"587f13f1e8157bd8cec0adda0de4ef558bb8573daa9d518d1e2af38e87ecc91f","a69c09dbea52352f479d3e7ac949fde3d17b195abe90b045d619f747b38d6d1a",{"version":"bce910d9164785c9f0d4dcea4be359f5f92130c7c7833dea6138ab1db310a1f9","affectsGlobalScope":true},"7a435e0c814f58f23e9a0979045ec0ef5909aac95a70986e8bcce30c27dff228",{"version":"c81c51f43e343b6d89114b17341fb9d381c4ccbb25e0ee77532376052c801ba7","affectsGlobalScope":true},"db71be322f07f769200108aa19b79a75dd19a187c9dca2a30c4537b233aa2863","57135ce61976a8b1dadd01bb412406d1805b90db6e8ecb726d0d78e0b5f76050",{"version":"49479e21a040c0177d1b1bc05a124c0383df7a08a0726ad4d9457619642e875a","affectsGlobalScope":true},"82408ed3e959ddc60d3e9904481b5a8dc16469928257af22a3f7d1a3bc7fd8c4","f302f3a47d7758f67f2afc753b9375d6504dde05d2e6ecdb1df50abbb131fc89","3690133deae19c8127c5505fcb67b04bdc9eb053796008538a9b9abbb70d85aa","5b1c0a23f464f894e7c2b2b6c56df7b9afa60ed48c5345f8618d389a636b2108","be2b092f2765222757c6441b86c53a5ea8dfed47bbc43eab4c5fe37942c866b3","8e6b05abc98adba15e1ac78e137c64576c74002e301d682e66feb77a23907ab8","1ca735bb3d407b2af4fbee7665f3a0a83be52168c728cc209755060ba7ed67bd",{"version":"6b526a5ec4a401ca7c26cfe6a48e641d8f30af76673bad3b06a1b4504594a960","affectsGlobalScope":true},{"version":"b85c02e14ecb2a873dad5a1de72319b265160ba48f1b83661aeb3bba1366c1bc","affectsGlobalScope":true},"7a2ba0c9af860ac3e77b35ed01fd96d15986f17aa22fe40f188ae556fb1070df","fc3764040518a1008dd04bdc80964591b566b896283e00df85c95851c1f46237","55709608060f77965c270ac10ac646286589f1bd1cb174fff1778a2dd9a7ef31","790623a47c5eda62910098884ecb154dc0e5f3a23fc36c1bfb3b5b9ed44e2c2d","42b40e40f2a358cda332456214fad311e1806a6abf3cebaaac72496e07556642","354612fe1d49ecc9551ea3a27d94eef2887b64ef4a71f72ca444efe0f2f0ba80",{"version":"ac0c77cd7db52b3c278bdd1452ce754014835493d05b84535f46854fdc2063b2","affectsGlobalScope":true},"f5490f53d40291cc8607f5463434d1ac6c5564bc4fbb03abceb03a8f6b014457","5e2b91328a540a0933ab5c2203f4358918e6f0fe7505d22840a891a6117735f1","3abc3512fa04aa0230f59ea1019311fd8667bd935d28306311dccc8b17e79d5d",{"version":"14a50dafe3f45713f7f27cb6320dff07c6ac31678f07959c2134260061bf91ff","affectsGlobalScope":true},{"version":"19da7150ca062323b1db6311a6ef058c9b0a39cc64d836b5e9b75d301869653b","affectsGlobalScope":true},"1349077576abb41f0e9c78ec30762ff75b710208aff77f5fdcc6a8c8ce6289dd","e2ce82603102b5c0563f59fb40314cc1ff95a4d521a66ad14146e130ea80d89c","a3e0395220255a350aa9c6d56f882bfcb5b85c19fddf5419ec822cf22246a26d","c27b01e8ddff5cd280711af5e13aecd9a3228d1c256ea797dd64f8fdec5f7df5","898840e876dfd21843db9f2aa6ae38ba2eab550eb780ff62b894b9fbfebfae6b","0cab4d7d4edc40cd3af9eea7c3ed6d1016910c0954c49c4297e479bf3822a625","1b952304137851e45bc009785de89ada562d9376177c97e37702e39e60c2f1ff","785e5be57d4f20f290a20e7b0c6263f6c57fd6e51283050756cef07d6d651c68","44b8b584a338b190a59f4f6929d072431950c7bd92ec2694821c11bce180c8a5","164deb2409ac5f4da3cd139dbcee7f7d66753d90363a4d7e2db8d8874f272270",{"version":"ffc62d73b4fa10ca8c59f8802df88efefe447025730a24ee977b60adedc5bf37","affectsGlobalScope":true},{"version":"ab294c4b7279318ee2a8fdf681305457ecc05970c94108d304933f18823eeac1","affectsGlobalScope":true},"ad08154d9602429522cac965a715fde27d421d69b24756c5d291877dda75353e","5bc85813bfcb6907cc3a960fec8734a29d7884e0e372515147720c5991b8bc22","812b25f798033c202baedf386a1ccc41f9191b122f089bffd10fdccce99fba11","993325544790073f77e945bee046d53988c0bc3ac5695c9cf8098166feb82661",{"version":"75dd741ca6a6c8d2437a6ca8349b64b816421dbf9fe82dd026afaba965576962","affectsGlobalScope":true},{"version":"0e08c360c9b5961ecb0537b703e253842b3ded53151ee07024148219b61a8baf","affectsGlobalScope":true},"2ce2210032ccaff7710e2abf6a722e62c54960458e73e356b6a365c93ab6ca66","92db194ef7d208d5e4b6242a3434573fd142a621ff996d84cc9dbba3553277d0","16a3080e885ed52d4017c902227a8d0d8daf723d062bec9e45627c6fdcd6699b",{"version":"0bd9543cd8fc0959c76fb8f4f5a26626c2ed62ef4be98fd857bce268066db0a2","affectsGlobalScope":true},"1ca6858a0cbcd74d7db72d7b14c5360a928d1d16748a55ecfa6bfaff8b83071b",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"ebf3434b09c527078aa74139ff367fffa64fea32a01d6c06fb0a69b0ecadf43e","82c661f1f20d29212d2e0408bee2e0f54bf8930cdcdd88f23ef8e03e4618afb4","d53d8a71b9525be3fb65c331f20db99b826edfa922703578af284736dc780db5","6256cf36c8ae7e82bff606595af8fe08a06f8478140fcf304ee2f10c7716ddc8","2ba0457b958954b9b2041077df992fad015e85c615dc1ccebeddb561d4ab89cf","81c4fd49117bc25b8aac796a345db4315cc31861f61772da6bd405989ede0f79","1f8d4c8257ba50385865ce887940c8fdc745bcf3cea2dc09173bc8d3320b6efe","8459a11cb29556837148a3f82ccff6f3d9745070c3ed77264e279e7fe35ed0b7","7c774169686976056434799723bd7a48348df9d2204b928a0b77920505585214","5e95379e81e2d373e5235cedc4579938e39db274a32cfa32f8906e7ff6698763","d3c8a891b0554f4319651b5c89c2d91a442a792bf84afcbc399be033b96b4abd","8758b438b12ea50fb8b678d29ab0ef42d77abfb801cec481596ce6002b537a6f","88074e936d33e224b83f81eebbaf835467e1c0a6ba1239b950e6476dd7f73356","c895675912a8b2d0dcb13d24433757d233de16a3bb5c60f7d903099d96d61ea8","f73cf81342d2a25b65179c262ca7c38df023969129094607d0eb52510a56f10f","e7d7e67bd66b30f2216e4678b97bb09629a2b31766a79119acaa30e3005ef5fb","4a7b9005bef99460ba60da67219f0aff852cfd44038f17626bf59a6b5c6960b5","e137f087bda0256410b28743ef9a1bf57a4cafd43ffa6b62d5c17a8f5a08b3b5","fa8d9c5ea6ad2a5d3d6ee7703cfe1ddd962f1e4da08a370c6db642b1a1a091b8","af504042a6db047c40cc0aeb14550bbc954f194f2b8c5ad8944f2da502f45bf5","5b25b6ab5ad6c17f90b592162b2e9978ad8d81edf24cd3957306eb6e5edb89a9","24693bd77ac3be0b16e564d0ab498a397feb758ce7f4ed9f13478d566e3aafde","208dad548b895c7d02465de6ba79064b7c67bc4d94e5227b09f21d58790e634c","048c0ced65fa41fbf4bcc3d5e8e5b6f6c7f27335ceb54d401be654e821adbc08","f1c7ab18a927d1a9e3a452ef9b5d2d636dc7f39a116add1a48b0b78a323f19eb","9a57d654b0a0e4bf56a8eb0aa3ede1c7d349cec6220e36b5288c26626c8688ed",{"version":"d18e167fda7c040db40ef4f429a193e2e27c4542a483c45454671a39850dd322","signature":"68212fb8e2c0dae39c22959cf18904f22a1315a856c20173484371cbb74addbf"},"1d729ea435a93e1a70519d06a6f13fa418c4c39a52b69e6db86750ebfcdf5554","95c617b16c4765ff6de307629b6918181908bee82a59fca0b2c95f170a4be7ea","a39db87a3a3aa954ac3f6553b9fbfc642eb22bef7586cc1f0559e676aa073fa8","3ac893bb831cf929af812392e1568467766536d79abd4e29d6ae653695c18cdd","2808645b990069e5f8b5ff14c9f1e6077eb642583c3f7854012d60757f23c70e","98cd87f84eb134151b0b760d49e09f0ae3ca01d9f86e6b64f6bb933cc4a40b29","db750d991d0c6e773c114cfe170c5ee4fc1bea43364e0efa5cecb03d198be80a","c5dde9dd9e1bf7168d8a2480a31f9799158f84e3aa1bb061fd09a0cf5a1fcb14",{"version":"9c0c13dc449915d4cf6440b281e9f61be32943f2c08f9344b0ed26daa1b30450","signature":"002bac90ef81fada08d5f6e9609cf9f0b39e41f75ed344d2d6a06c0f6b455a59"},{"version":"3150d638567290c5554ab1581ad2c8b69e4047fc7cb5a6b7eba0383fc9ed0831","signature":"a98eeafa6619401f1b4381c14eef1c9a72201b4731a66f77775aa58b42d48d4f"}],"root":[44,124,133,134],"options":{"declaration":true,"esModuleInterop":true,"module":1,"outDir":"./","strict":true,"target":2},"fileIdsList":[[45,91],[48,91],[49,54,82,91],[50,61,62,69,79,90,91],[50,51,61,69,91],[52,91],[53,54,62,70,91],[54,79,87,91],[55,57,61,69,91],[56,91],[57,58,91],[61,91],[59,61,91],[61,62,63,79,90,91],[61,62,63,76,79,82,91],[91,95],[91],[57,61,64,69,79,90,91],[61,62,64,65,69,79,87,90,91],[64,66,79,87,90,91],[45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97],[61,67,91],[68,90,91],[57,61,69,79,91],[70,91],[71,91],[48,72,91],[73,89,91,95],[74,91],[75,91],[61,76,77,91],[76,78,91,93],[49,61,79,80,81,82,91],[49,79,81,91],[79,80,91],[82,91],[83,91],[79,91],[61,85,86,91],[85,86,91],[54,69,79,87,91],[88,91],[69,89,91],[49,64,75,90,91],[54,91],[79,91,92],[91,93],[91,94],[49,54,61,63,72,79,90,91,93,95],[79,91,96],[91,128,129,130],[91,128,129],[91,128,131],[91,101,103],[91,103],[91,101],[91,99,103,123],[91,99,103],[91,123],[91,103,123],[50,91,98,100,102],[91,98,99,103],[91,101,117,118,119,120],[91,105,116,121,122],[91,104],[91,105,116,121],[91,103,104,106,107,108,109,110,111,112,113,114,115],[61,91,98],[70,71,91],[64,66,91,124,125,126,133],[44,62,71,91,127,132],[123],[132]],"referencedMap":[[45,1],[46,1],[48,2],[49,3],[50,4],[51,5],[52,6],[53,7],[54,8],[55,9],[56,10],[57,11],[58,11],[60,12],[59,13],[61,12],[62,14],[63,15],[47,16],[97,17],[64,18],[65,19],[66,20],[98,21],[67,22],[68,23],[69,24],[70,25],[71,26],[72,27],[73,28],[74,29],[75,30],[76,31],[77,31],[78,32],[79,33],[81,34],[80,35],[82,36],[83,37],[84,38],[85,39],[86,40],[87,41],[88,42],[89,43],[90,44],[91,45],[92,46],[93,47],[94,48],[95,49],[96,50],[126,17],[125,17],[131,51],[130,52],[128,17],[132,53],[129,17],[107,17],[117,54],[101,55],[118,54],[119,56],[120,56],[106,17],[108,55],[109,55],[110,57],[111,58],[112,59],[113,59],[104,60],[114,55],[99,55],[115,59],[102,56],[103,61],[100,62],[121,63],[123,64],[105,65],[122,66],[116,67],[127,68],[42,17],[43,17],[9,17],[8,17],[2,17],[10,17],[11,17],[12,17],[13,17],[14,17],[15,17],[16,17],[17,17],[3,17],[4,17],[21,17],[18,17],[19,17],[20,17],[22,17],[23,17],[24,17],[5,17],[25,17],[26,17],[27,17],[28,17],[6,17],[32,17],[29,17],[30,17],[31,17],[33,17],[7,17],[34,17],[39,17],[40,17],[35,17],[36,17],[37,17],[38,17],[1,17],[41,17],[44,69],[124,59],[134,70],[133,71]],"exportedModulesMap":[[45,1],[46,1],[48,2],[49,3],[50,4],[51,5],[52,6],[53,7],[54,8],[55,9],[56,10],[57,11],[58,11],[60,12],[59,13],[61,12],[62,14],[63,15],[47,16],[97,17],[64,18],[65,19],[66,20],[98,21],[67,22],[68,23],[69,24],[70,25],[71,26],[72,27],[73,28],[74,29],[75,30],[76,31],[77,31],[78,32],[79,33],[81,34],[80,35],[82,36],[83,37],[84,38],[85,39],[86,40],[87,41],[88,42],[89,43],[90,44],[91,45],[92,46],[93,47],[94,48],[95,49],[96,50],[126,17],[125,17],[131,51],[130,52],[128,17],[132,53],[129,17],[107,17],[117,54],[101,55],[118,54],[119,56],[120,56],[106,17],[108,55],[109,55],[110,57],[111,58],[112,59],[113,59],[104,60],[114,55],[99,55],[115,59],[102,56],[103,61],[100,62],[121,63],[123,64],[105,65],[122,66],[116,67],[127,68],[17,17],[3,17],[4,17],[21,17],[18,17],[19,17],[20,17],[22,17],[23,17],[24,17],[5,17],[25,17],[26,17],[27,17],[28,17],[6,17],[32,17],[29,17],[30,17],[31,17],[33,17],[7,17],[34,17],[39,17],[40,17],[35,17],[36,17],[37,17],[38,17],[41,17],[124,72],[133,73]],"semanticDiagnosticsPerFile":[45,46,48,49,50,51,52,53,54,55,56,57,58,60,59,61,62,63,47,97,64,65,66,98,67,68,69,70,71,72,73,74,75,76,77,78,79,81,80,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,126,125,[131,[{"file":"../node_modules/openai/dist/api.d.ts","start":67639,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":69959,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":69988,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":71025,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":74136,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":75453,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":85137,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":87624,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":87653,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":88749,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":92053,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":93442,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":103453,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":105730,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":105759,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":106785,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":109879,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":111198,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":120818,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":123314,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":123343,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":124442,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":127755,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304},{"file":"../node_modules/openai/dist/api.d.ts","start":129147,"length":4,"messageText":"Cannot find name 'File'.","category":1,"code":2304}]],130,128,132,129,107,117,101,118,119,120,106,108,109,110,111,112,113,104,114,99,115,102,103,100,121,123,105,122,116,127,42,43,9,8,2,10,11,12,13,14,15,16,17,3,4,21,18,19,20,22,23,24,5,25,26,27,28,6,32,29,30,31,33,7,34,39,40,35,36,37,38,1,41,44,124,134,133]},"version":"5.1.6"}
@@ -0,0 +1,4 @@
1
+ {
2
+ "ExperimentSummary": "ExperimentSummary",
3
+ "ScoreSummary": "ScoreSummary"
4
+ }
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "braintrust",
3
- "version": "0.0.4",
3
+ "version": "0.0.11",
4
4
  "description": "SDK for integrating BrainTrust",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
7
7
  "build": "tsc",
8
8
  "watch": "tsc --watch",
9
- "docs": "npx typedoc --plugin typedoc-plugin-markdown --out ../app/pages/docs/libs/js src/index.ts --publicPath /docs/libs/js/ --githubPages false --disableSources true --hideInPageTOC true",
10
- "test": "jest"
9
+ "docs": "npx typedoc --options typedoc.json src/index.ts",
10
+ "test": "jest",
11
+ "publish": "npm run build && npm publish"
11
12
  },
12
13
  "author": "",
13
14
  "license": "MIT",
@@ -21,6 +22,9 @@
21
22
  "@types/axios": "^0.14.0",
22
23
  "@types/node": "^20.4.1",
23
24
  "axios": "^1.4.0",
25
+ "openai": "^3.3.0",
26
+ "simple-git": "^3.19.1",
27
+ "sqlite3": "^5.1.6",
24
28
  "uuid": "^9.0.0"
25
29
  }
26
30
  }
package/typedoc.json ADDED
@@ -0,0 +1,18 @@
1
+ {
2
+ "compilerOptions": {
3
+ "skipLibCheck": true
4
+ },
5
+ "excludeExternals": true,
6
+ "externalPattern": [
7
+ "**/node_modules/**"
8
+ ],
9
+ "plugin": ["typedoc-plugin-markdown"],
10
+ "out": "../app/pages/docs/libs/nodejs",
11
+ "publicPath": "/docs/libs/nodejs/",
12
+ "githubPages": false,
13
+ "disableSources": true,
14
+ "hideInPageTOC": true,
15
+ "excludePrivate": true,
16
+ "hideBreadcrumbs": true,
17
+ "theme": "markdown"
18
+ }