import { Context } from "../../types" /** * 处理模型代理请求 * @param req * @returns */ export const manageModelProxyReq = async (ctx: Context) => { const { req, headers, logger, path } = ctx if (!path.exact("/v1/models")) { const auth = headers.get("Authorization") logger.info("开始模型代理转发", { Authorization: auth }) if (!auth || auth !== "Bearer sk-21a2ce1c2ee94bc2933798eac1bbcadc") { return ctx.genResp.forbidden("Authorization required") } } const PROXY_URL = "http://ms-13871-nstruct-lmdeploy-2-0109140455.kscn-tj5-prod2-cloudml.xiaomi.srv" // 发起代理请求 const response = await fetch(PROXY_URL + new URL(req.url).pathname, { method: req.method, body: req.body, headers: { // 转发必要的请求头 "Content-Type": headers.get("Content-Type") || "application/json", Accept: headers.get("Accept") || "*/*", }, }) // 获取原始响应的所有头信息 const responseHeaders = new Headers(response.headers) // 添加CORS响应头 responseHeaders.set("Access-Control-Allow-Origin", "*") responseHeaders.set("Access-Control-Allow-Methods", "GET, POST, OPTIONS") responseHeaders.set( "Access-Control-Allow-Headers", "Content-Type, Authorization" ) responseHeaders.set("Access-Control-Expose-Headers", "Content-Type") // 检查是否为流式响应 if (response.headers.get("Content-Type")?.includes("text/event-stream")) { // 处理流式响应 const { readable, writable } = new TransformStream() response.body ?.pipeTo(writable) .catch((err) => logger.error("流式响应传输失败", { error: err.message })) return new Response(readable, { status: response.status, statusText: response.statusText, headers: responseHeaders, }) } else { // 处理非流式响应 return new Response(response.body, { status: response.status, statusText: response.statusText, headers: responseHeaders, }) } }