import "./type"; import u from "@/utils"; import modelList from "./modelList"; import axios from "axios"; import volcengine from "./owned/volcengine"; import kling from "./owned/kling"; import vidu from "./owned/vidu"; import runninghub from "./owned/runninghub"; import apimart from "./owned/apimart"; import other from "./owned/other"; import gemini from "./owned/gemini"; import modelScope from "./owned/modelScope"; import grsai from "./owned/grsai"; const urlToBase64 = async (url: string): Promise => { const res = await axios.get(url, { responseType: "arraybuffer" }); const base64 = Buffer.from(res.data).toString("base64"); const mimeType = res.headers["content-type"] || "image/png"; return `data:${mimeType};base64,${base64}`; }; const modelInstance = { gemini: gemini, volcengine: volcengine, kling: kling, vidu: vidu, runninghub: runninghub, // apimart: apimart, modelScope, other, grsai } as const; export default async (input: ImageConfig, config: AIConfig) => { const { model, apiKey, baseURL, manufacturer } = { ...config }; if (!config || !config?.model || !config?.apiKey || !config?.manufacturer) throw new Error("请检查模型配置是否正确"); const manufacturerFn = modelInstance[manufacturer as keyof typeof modelInstance]; if (!manufacturerFn) if (!manufacturerFn) throw new Error("不支持的图片厂商"); // if (manufacturer !== "other") { // const owned = modelList.find((m) => m.model === model); // if (!owned) throw new Error("不支持的模型"); // } // 补充图片的 base64 内容类型字符串 if (input.imageBase64 && input.imageBase64.length > 0) { input.imageBase64 = input.imageBase64.map((img) => { if (img.startsWith("data:image/")) { return img; } // 根据 base64 头部判断图片类型 if (img.startsWith("/9j/")) { return `data:image/jpeg;base64,${img}`; } if (img.startsWith("iVBORw")) { return `data:image/png;base64,${img}`; } if (img.startsWith("R0lGOD")) { return `data:image/gif;base64,${img}`; } if (img.startsWith("UklGR")) { return `data:image/webp;base64,${img}`; } // 默认使用 png return `data:image/png;base64,${img}`; }); } let imageUrl = await manufacturerFn(input, { model, apiKey, baseURL }); if (!input.resType) input.resType = "b64"; if (input.resType === "b64" && imageUrl.startsWith("http")) imageUrl = await urlToBase64(imageUrl); return imageUrl; };