openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
128 lines (127 loc) • 5.96 kB
JavaScript
import { a as asOptionalRecord } from "./record-coerce-DItp3I4t.js";
import { c as normalizeOptionalLowercaseString } from "./string-coerce-CIXf7egm.js";
import { r as createLazyRuntimeModule } from "./lazy-runtime-CgCh8H_K.js";
//#region src/llm/providers/stream-wrappers/moonshot-thinking.ts
const loadDefaultStream = createLazyRuntimeModule(() => import("./stream-CzqDyX2g.js"));
const MOONSHOT_ALWAYS_THINKING = {
"kimi-k2.7-code": "low",
"kimi-k2.7-code-highspeed": "low",
"kimi-k3": "max"
};
const FIXED_SAMPLING_FIELDS = "temperature top_p n presence_penalty frequency_penalty".split(" ");
function normalizeMoonshotThinkingType(value) {
const type = asOptionalRecord(value)?.type ?? value;
if (typeof type === "boolean") return type ? "enabled" : "disabled";
const normalized = normalizeOptionalLowercaseString(type);
if ([
"enabled",
"enable",
"on",
"true"
].includes(normalized ?? "")) return "enabled";
if ([
"disabled",
"disable",
"off",
"false"
].includes(normalized ?? "")) return "disabled";
}
function isMoonshotToolChoiceCompatible(toolChoice) {
const type = asOptionalRecord(toolChoice)?.type ?? toolChoice;
return type == null || type === "auto" || type === "none";
}
function ensureMoonshotToolCallReasoningContent(payload) {
const messages = Array.isArray(payload.messages) ? payload.messages : [];
for (const message of messages) {
const record = asOptionalRecord(message);
if (record?.role !== "assistant" || !Array.isArray(record.tool_calls)) continue;
if (record.tool_calls.length > 0 && !("reasoning_content" in record)) record.reasoning_content = "";
}
}
function resolveAlwaysThinkingEffort(modelId, directMoonshotModel) {
const effort = MOONSHOT_ALWAYS_THINKING[modelId];
return effort && (modelId !== "kimi-k3" || directMoonshotModel) ? effort : void 0;
}
function sanitizeAlwaysThinkingPayload(payload, effort) {
delete payload.thinking;
delete payload.reasoningEffort;
FIXED_SAMPLING_FIELDS.forEach((field) => Reflect.deleteProperty(payload, field));
if (effort === "max") payload.reasoning_effort = effort;
else {
delete payload.reasoning_effort;
if (!isMoonshotToolChoiceCompatible(payload.tool_choice)) payload.tool_choice = "auto";
}
}
function prepareThinkingPayload(payload, modelId, directMoonshotModel, thinkingType, thinkingKeep) {
const payloadModelId = typeof payload.model === "string" ? payload.model.trim().toLowerCase() : modelId;
let effectiveThinkingType = normalizeMoonshotThinkingType(payload.thinking);
if (thinkingType) {
payload.thinking = { type: thinkingType };
effectiveThinkingType = thinkingType;
}
const effort = resolveAlwaysThinkingEffort(payloadModelId, directMoonshotModel);
if (effort) {
sanitizeAlwaysThinkingPayload(payload, effort);
return (finalPayload) => {
sanitizeAlwaysThinkingPayload(finalPayload, effort);
ensureMoonshotToolCallReasoningContent(finalPayload);
};
}
if (effectiveThinkingType === "enabled" && !isMoonshotToolChoiceCompatible(payload.tool_choice)) {
const toolChoiceType = asOptionalRecord(payload.tool_choice)?.type;
if (payload.tool_choice === "required") payload.tool_choice = "auto";
else if (toolChoiceType === "tool" || toolChoiceType === "function") {
payload.thinking = { type: "disabled" };
effectiveThinkingType = "disabled";
}
}
const thinking = asOptionalRecord(payload.thinking);
const preserveKeep = payloadModelId === "kimi-k2.6" && effectiveThinkingType === "enabled" && thinkingKeep === "all";
if (thinking) {
delete thinking.keep;
Object.assign(thinking, preserveKeep ? { keep: "all" } : {});
}
return effectiveThinkingType === "enabled" ? ensureMoonshotToolCallReasoningContent : () => void 0;
}
/** @deprecated Moonshot provider-owned stream helper; do not use from third-party plugins. */
function resolveMoonshotThinkingType(params) {
return normalizeMoonshotThinkingType(params.configuredThinking) ?? (params.thinkingLevel ? params.thinkingLevel === "off" ? "disabled" : "enabled" : void 0);
}
/** @deprecated Moonshot provider-owned stream helper; do not use from third-party plugins. */
function resolveMoonshotThinkingKeep(params) {
return normalizeOptionalLowercaseString(asOptionalRecord(params.configuredThinking)?.keep) === "all" ? "all" : void 0;
}
/** @deprecated Moonshot provider-owned stream helper; do not use from third-party plugins. */
function createMoonshotThinkingWrapper(baseStreamFn, thinkingType, thinkingKeep, finalizePayload) {
const underlying = baseStreamFn ?? (async (...args) => (await loadDefaultStream()).streamSimple(...args));
return function moonshotThinkingStream(model, context, options) {
const modelId = model.id.trim().toLowerCase();
const directMoonshotModel = normalizeOptionalLowercaseString(model.provider) === "moonshot";
const alwaysThinkingEffort = resolveAlwaysThinkingEffort(modelId, directMoonshotModel);
const streamModel = alwaysThinkingEffort ? {
...model,
reasoning: true
} : model;
const streamOptions = alwaysThinkingEffort ? {
...options,
reasoning: alwaysThinkingEffort
} : options;
return underlying(streamModel, context, {
...streamOptions,
onPayload(payload, payloadModel) {
const record = asOptionalRecord(payload);
if (!record) return streamOptions?.onPayload?.(payload, payloadModel);
const postThinking = prepareThinkingPayload(record, modelId, directMoonshotModel, thinkingType, thinkingKeep);
const finish = (result) => {
const finalPayload = asOptionalRecord(result) ?? record;
postThinking(finalPayload);
return finalizePayload ? finalizePayload(result, finalPayload) : result;
};
const result = streamOptions?.onPayload?.(payload, payloadModel);
return result && typeof result.then === "function" ? Promise.resolve(result).then(finish) : finish(result);
}
});
};
}
//#endregion
export { resolveMoonshotThinkingKeep as n, resolveMoonshotThinkingType as r, createMoonshotThinkingWrapper as t };