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, }; }, }, };