-
Notifications
You must be signed in to change notification settings - Fork 2
/
utils.ts
91 lines (72 loc) · 1.83 KB
/
utils.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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
import { Configuration, OpenAIApi } from "openai";
export const OpenAI = () => {
if (!process.env.OPENAI_API_KEY) {
throw new Error("OPENAI_API_KEY not set");
}
const openai = new OpenAIApi(
new Configuration({
apiKey: process.env.OPENAI_API_KEY,
})
);
return openai;
};
/**
* recursive depth first search to return a list of object subtrees
* at a certain level.
*/
export const objectSubtrees = (data: any, levelsLeft: number): any[] => {
if (levelsLeft === 0) {
return [data];
}
if (Array.isArray(data)) {
const ret = data.flatMap((item) => objectSubtrees(item, levelsLeft - 1));
return ret;
}
if (typeof data === "object") {
const ret = Object.entries(data).flatMap(([key, value]) => {
return objectSubtrees(value, levelsLeft - 1).map((subtree) => ({
[key]: subtree,
}));
});
return ret;
}
return [data];
};
export const getAide = async (input: string) => {
const openai = OpenAI();
const prompt = `Data:
${input}
Write a paragraph using all of the following data. PLEASE USE EVERY FIELD!
`;
const { data } = await openai.createCompletion({
model: "text-davinci-003",
prompt,
max_tokens: 2000,
temperature: 0.1,
presence_penalty: 0,
frequency_penalty: 0,
best_of: 1,
n: 1,
stream: false,
});
return data.choices[0].text;
};
export const getJSONPath = async (tsDescription: string, query: string) => {
const openai = OpenAI();
const prompt = `The JSON has this format.
${tsDescription}
Generate a JSONPath for the following query: ${query}
`;
const { data } = await openai.createCompletion({
model: "text-davinci-003",
prompt,
max_tokens: 2000,
temperature: 0.1,
presence_penalty: 0,
frequency_penalty: 0,
best_of: 1,
n: 1,
stream: false,
});
return data.choices[0].text
}