85 lines
2.7 KiB
TypeScript
85 lines
2.7 KiB
TypeScript
import _ from "lodash";
|
|
|
|
import Request from "@/lib/request/Request.ts";
|
|
import { generateImages } from "@/api/controllers/images.ts";
|
|
import { tokenSplit } from "@/api/controllers/core.ts";
|
|
import util from "@/lib/util.ts";
|
|
import { ImagesTaskCache } from '@/api/ImagesTaskCache.ts';
|
|
|
|
export default {
|
|
prefix: "/v1/images",
|
|
get: {
|
|
"/query": async (request: Request) => {
|
|
const imagesTaskCache = ImagesTaskCache.getInstance();
|
|
request
|
|
.validate("query.task_id", _.isString) // 从 query 中校验
|
|
const {
|
|
task_id,
|
|
} = request.query; // 从 query 中获取
|
|
let res = imagesTaskCache.getTaskStatus(task_id);
|
|
// console.log("查询任务状态", task_id, 'res:',res);
|
|
if(typeof res === 'string'){
|
|
return {
|
|
created: util.unixTimestamp(),
|
|
data:{task_id, url:res, status:-1},
|
|
};
|
|
}else{
|
|
return {
|
|
created: util.unixTimestamp(),
|
|
data:{task_id, url:"", status:res||0},
|
|
};
|
|
}
|
|
},
|
|
},
|
|
|
|
post: {
|
|
"/generations": async (request: Request) => {
|
|
request
|
|
// .validate("body.model", v => _.isUndefined(v) || _.isString(v))
|
|
.validate("body.task_id", _.isString)
|
|
.validate("body.prompt", _.isString)
|
|
// .validate("body.negative_prompt", v => _.isUndefined(v) || _.isString(v))
|
|
.validate("body.width", v => _.isUndefined(v) || _.isFinite(v))
|
|
.validate("body.height", v => _.isUndefined(v) || _.isFinite(v))
|
|
// .validate("body.sample_strength", v => _.isUndefined(v) || _.isFinite(v))
|
|
.validate("body.response_format", v => _.isUndefined(v) || _.isString(v))
|
|
.validate("headers.authorization", _.isString);
|
|
// refresh_token切分
|
|
const tokens = tokenSplit(request.headers.authorization);
|
|
// 随机挑选一个refresh_token
|
|
const token = _.sample(tokens);
|
|
const {
|
|
// model,
|
|
task_id,
|
|
prompt,
|
|
// negative_prompt: negativePrompt,
|
|
width,
|
|
height,
|
|
// sample_strength: sampleStrength,
|
|
response_format,
|
|
} = request.body;
|
|
const responseFormat = _.defaultTo(response_format, "url");
|
|
const imageUrls = await generateImages('jimeng-3.1', task_id, prompt, {
|
|
width,
|
|
height,
|
|
sampleStrength:0.5,
|
|
negativePrompt:"",
|
|
}, token);
|
|
let data = [];
|
|
if (responseFormat == "b64_json") {
|
|
data = (
|
|
await Promise.all(imageUrls.map((url) => util.fetchFileBASE64(url)))
|
|
).map((b64) => ({ b64_json: b64 }));
|
|
} else {
|
|
data = imageUrls.map((url) => ({
|
|
url,
|
|
}));
|
|
}
|
|
return {
|
|
created: util.unixTimestamp(),
|
|
data,
|
|
};
|
|
},
|
|
},
|
|
};
|