-
Notifications
You must be signed in to change notification settings - Fork 17
/
dalle-node.js
68 lines (60 loc) · 1.64 KB
/
dalle-node.js
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
import got from 'got';
export class DalleError extends Error {
constructor(response) {
super();
this.response = response;
}
}
export class Dalle {
constructor(bearerToken) {
this.bearerToken = bearerToken;
this.url = "https://labs.openai.com/api/labs";
}
async generate(prompt) {
let task = await got.post(`${this.url}/tasks`, {
json: {
task_type: "text2im",
prompt: {
caption: prompt,
batch_size: 4,
},
},
headers: {
Authorization: `Bearer ${ this.bearerToken }`
}
}).json();
const refreshIntervalId = setInterval(async () => {
task = await this.getTask(task.id)
switch (task.status) {
case "succeeded":
clearInterval(refreshIntervalId);
return task.generations;
case "rejected":
clearInterval(refreshIntervalId);
return new DalleError(task.status_information);
case "pending":
}
}, 2000);
}
async getTask(taskId) {
return await got.get(`${this.url}/tasks/${ taskId }`, {
headers: {
Authorization: "Bearer " + this.bearerToken,
},
}).json();
}
async list(options = { limit: 50, fromTs: 0 }) {
return await got.get(`${this.url}/tasks?limit=${ options.limit }${ options.fromTs ? `&from_ts=${ options.fromTs }` : '' }`, {
headers: {
Authorization: "Bearer " + this.bearerToken,
},
}).json();
}
async getCredits() {
return await got.get(`${ this.url }/billing/credit_summary`, {
headers: {
Authorization: "Bearer " + this.bearerToken,
},
}).json();
}
}