@teenth/sdk-tool
Version:
sdk-tool with R2 storage support
231 lines (230 loc) • 7.16 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.kieChat = exports.grsaiStatus = exports.replicateFlux = exports.tuziFlux = exports.grsaiResult = exports.grsaiNanoBananaChat = exports.grsaiChat = exports.type = exports.handleChatCallback = exports.flux = void 0;
const request_1 = require("../request");
const grsai_secret = process.env.GRSAI_SECRET;
const tuzi_secret = process.env.TUZI_SECRET;
const kie_secret = process.env.KIE_SECRET;
const urlPrefix = process.env.URL_PREFIX;
exports.flux = __importStar(require("./flux"));
if (!grsai_secret || !tuzi_secret || !kie_secret || !urlPrefix) {
throw new Error(`Missing environment variables: grsai_secret: ${grsai_secret}, tuzi_secret: ${tuzi_secret}, kie_secret: ${kie_secret}, urlPrefix: ${urlPrefix}`);
}
function formatUrls(urls) {
if (Array.isArray(urls)) {
return urls;
}
if (urls) {
return [urls];
}
return null;
}
// 兼容各个平台的回调参数处理
const handleChatCallback = (data) => {
// kie
if (data.code) {
if (data.code === 200) {
const { taskId, info } = data.data;
return {
id: taskId,
url: info.result_urls?.[0],
status: "succeeded",
results: info.result_urls,
};
}
return {
id: data.taskId,
url: "",
status: "failed",
results: [],
};
}
if (data.results) {
return {
id: data.id,
url: data.results[0]?.url,
status: data.status,
results: data.results,
};
}
// grsai
return {
id: data.id,
url: data.url,
status: data.status,
results: [],
};
};
exports.handleChatCallback = handleChatCallback;
const grsaiHeader = {
"Content-Type": "application/json",
Authorization: `Bearer ${grsai_secret}`,
};
const tuziHeader = {
"Content-Type": "application/json",
Authorization: `Bearer ${tuzi_secret}`,
};
const kieHeader = {
"Content-Type": "application/json",
Authorization: `Bearer ${kie_secret}`,
};
exports.type = {
GRSAI: "grsai",
TUZI: "tuzi",
};
async function grsaiChat(req) {
const response = await (0, request_1.post)("https://grsai.dakka.com.cn/v1/draw/completions", {
method: "POST",
headers: grsaiHeader,
body: {
model: "sora-image",
prompt: req.prompt,
size: req.aspectRatio,
variants: 1,
urls: formatUrls(req.userImg),
webHook: req.webHook,
shutProgress: false,
},
});
return response;
}
exports.grsaiChat = grsaiChat;
async function grsaiNanoBananaChat(req) {
const response = await (0, request_1.post)("https://grsai.dakka.com.cn/v1/draw/nano-banana", {
method: "POST",
headers: grsaiHeader,
body: {
model: req.model || "nano-banana",
prompt: req.prompt,
urls: formatUrls(req.userImg),
webHook: req.webHook,
shutProgress: false,
},
});
return response;
}
exports.grsaiNanoBananaChat = grsaiNanoBananaChat;
async function grsaiResult(id) {
const response = await (0, request_1.post)(`https://grsai.dakka.com.cn/v1/draw/completions`, {
method: "POST",
headers: grsaiHeader,
body: {
id,
},
});
return response;
}
exports.grsaiResult = grsaiResult;
async function tuziFlux(req) {
console.log("tuziFlux 后续不在维护", req);
const prompt = `${req.userImg}, ${req.prompt}`;
const res = await fetch("https://api.tu-zi.com/v1/images/generations", {
method: "POST",
headers: tuziHeader,
body: JSON.stringify({
model: "flux-kontext-pro",
prompt,
aspect_ratio: req.aspectRatio,
output_format: "png",
safety_tolerance: 2,
prompt_upsampling: false,
}),
});
if (res.ok) {
const data = await res.json();
return data;
}
else {
const error = await res.text();
return {
code: 500,
data: null,
message: error,
};
}
}
exports.tuziFlux = tuziFlux;
async function replicateFlux(req) {
console.log("replicateFlux 后续不在维护", req);
const prompt = `${req.userImg}, ${req.prompt}`;
const res = await fetch("https://api.replicate.com/v1/models/black-forest-labs/flux-kontext-pro/predictions", {
method: "POST",
headers: tuziHeader,
body: JSON.stringify({
model: "flux-kontext-pro",
prompt,
aspect_ratio: req.aspectRatio,
output_format: "png",
safety_tolerance: 2,
prompt_upsampling: false,
}),
});
if (res.ok) {
const data = await res.json();
return data;
}
else {
const error = await res.text();
return {
code: 500,
data: null,
message: error,
};
}
}
exports.replicateFlux = replicateFlux;
async function grsaiStatus() {
const res = await (0, request_1.get)(`https://grsai.dakka.com.cn/client/common/getModelStatus?model=sora-image`, {
method: "GET",
headers: grsaiHeader,
});
return res;
}
exports.grsaiStatus = grsaiStatus;
async function kieChat(req) {
console.log("kieChat flux 后续不在维护", req);
const res = await (0, request_1.post)("https://kieai.erweima.ai/api/v1/flux/kontext/generate", {
method: "POST",
headers: kieHeader,
body: {
prompt: req.prompt,
input_image: req.userImg,
size: req.aspectRatio,
output_format: "png",
enableFallback: true,
fallbackModel: "GPT_IMAGE_1",
callBackUrl: req.webHook,
},
});
const { data } = res;
return {
code: 200,
data: {
id: data.taskId,
},
};
}
exports.kieChat = kieChat;