openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
71 lines (70 loc) • 2.6 kB
JavaScript
import { r as assertOkOrThrowHttpError } from "./provider-http-errors-DqaqQLLZ.js";
import { r as describeImagesWithModel, t as describeImageWithModel } from "./image-runtime-CmS6zMcE.js";
import { i as resolveMediaUnderstandingString, n as buildOpenAiCompatibleVideoRequestBody, r as coerceOpenAiCompatibleVideoText } from "./media-understanding-1KBZ_bnJ.js";
import { c as postJsonRequest, p as resolveProviderHttpRequestConfig } from "./shared-IuCmx8oC.js";
import "./provider-http-BXCBCi4E.js";
import { S as QWEN_STANDARD_GLOBAL_BASE_URL } from "./models-BMEcWkNl.js";
//#region extensions/qwen/media-understanding-provider.ts
const DEFAULT_QWEN_VIDEO_MODEL = "qwen-vl-max-latest";
const DEFAULT_QWEN_VIDEO_PROMPT = "Describe the video in detail.";
async function describeQwenVideo(params) {
const fetchFn = params.fetchFn ?? fetch;
const model = resolveMediaUnderstandingString(params.model, DEFAULT_QWEN_VIDEO_MODEL);
const mime = resolveMediaUnderstandingString(params.mime, "video/mp4");
const prompt = resolveMediaUnderstandingString(params.prompt, DEFAULT_QWEN_VIDEO_PROMPT);
const { baseUrl, allowPrivateNetwork, headers, dispatcherPolicy } = resolveProviderHttpRequestConfig({
baseUrl: params.baseUrl,
defaultBaseUrl: QWEN_STANDARD_GLOBAL_BASE_URL,
headers: params.headers,
request: params.request,
defaultHeaders: {
"content-type": "application/json",
authorization: `Bearer ${params.apiKey}`
},
provider: "qwen",
api: "openai-completions",
capability: "video",
transport: "media-understanding"
});
const { response: res, release } = await postJsonRequest({
url: `${baseUrl}/chat/completions`,
headers,
body: buildOpenAiCompatibleVideoRequestBody({
model,
prompt,
mime,
buffer: params.buffer
}),
timeoutMs: params.timeoutMs,
fetchFn,
allowPrivateNetwork,
dispatcherPolicy
});
try {
await assertOkOrThrowHttpError(res, "Qwen video description failed");
const text = coerceOpenAiCompatibleVideoText(await res.json());
if (!text) throw new Error("Qwen video description response missing content");
return {
text,
model
};
} finally {
await release();
}
}
function buildQwenMediaUnderstandingProvider() {
return {
id: "qwen",
capabilities: ["image", "video"],
defaultModels: {
image: "qwen-vl-max-latest",
video: DEFAULT_QWEN_VIDEO_MODEL
},
autoPriority: { video: 15 },
describeImage: describeImageWithModel,
describeImages: describeImagesWithModel,
describeVideo: describeQwenVideo
};
}
//#endregion
export { describeQwenVideo as n, buildQwenMediaUnderstandingProvider as t };