Spaces:
Sleeping
Sleeping
File size: 2,796 Bytes
4450790 |
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 |
class RgthreeApi {
constructor(baseUrl) {
this.getCheckpointsPromise = null;
this.getSamplersPromise = null;
this.getSchedulersPromise = null;
this.getLorasPromise = null;
this.getWorkflowsPromise = null;
this.baseUrl = baseUrl || "./rgthree/api";
}
apiURL(route) {
return `${this.baseUrl}${route}`;
}
fetchApi(route, options) {
return fetch(this.apiURL(route), options);
}
async fetchJson(route, options) {
const r = await this.fetchApi(route, options);
return await r.json();
}
async postJson(route, json) {
const body = new FormData();
body.append("json", JSON.stringify(json));
return await rgthreeApi.fetchJson(route, { method: "POST", body });
}
getLoras(force = false) {
if (!this.getLorasPromise || force) {
this.getLorasPromise = this.fetchJson("/loras", { cache: "no-store" });
}
return this.getLorasPromise;
}
async fetchApiJsonOrNull(route, options) {
const response = await this.fetchJson(route, options);
if (response.status === 200 && response.data) {
return response.data || null;
}
return null;
}
async getLorasInfo(...args) {
return this.getModelInfo("loras", ...args);
}
async refreshLorasInfo(file) {
return this.refreshModelInfo("loras", file);
}
async clearLorasInfo(file) {
return this.clearModelInfo("loras", file);
}
async saveLoraInfo(file, data) {
return this.saveModelInfo("loras", file, data);
}
async getModelInfo(type, ...args) {
const params = new URLSearchParams();
const isSingle = typeof args[0] == "string";
if (isSingle) {
params.set("file", args[0]);
}
params.set("light", (isSingle ? args[1] : args[0]) === false ? "0" : "1");
const path = `/${type}/info?` + params.toString();
return await this.fetchApiJsonOrNull(path);
}
async refreshModelInfo(type, file) {
const path = `/${type}/info/refresh` + (file ? `?file=${encodeURIComponent(file)}` : "");
const infos = await this.fetchApiJsonOrNull(path);
return infos;
}
async clearModelInfo(type, file) {
const path = `/${type}/info/clear` + (file ? `?file=${encodeURIComponent(file)}` : "");
await this.fetchApiJsonOrNull(path);
return;
}
async saveModelInfo(type, file, data) {
const body = new FormData();
body.append("json", JSON.stringify(data));
return await this.fetchApiJsonOrNull(`/${type}/info?file=${encodeURIComponent(file)}`, { cache: "no-store", method: "POST", body });
}
}
export const rgthreeApi = new RgthreeApi();
|