openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
49 lines (48 loc) • 1.75 kB
JavaScript
import { c as isRecord } from "./record-coerce-TIsquoVR.mjs";
import { i as sha256StableValue, n as sha256Hex } from "./node-crypto-BG4u3UnX.mjs";
import { serializeModelRequestBody } from "@openclaw/ai/internal/openai";
//#region src/agents/embedded-agent-runner/provider-prompt-serialization.ts
const MAX_MESSAGE_FINGERPRINTS = 512;
function fingerprintEncodedPrompt(body) {
if (body.byteLength === 0) return;
const payload = JSON.parse(new TextDecoder().decode(body));
if (!isRecord(payload)) return;
const { instructions, system, tools, ...parameters } = payload;
let messageField;
let messages = [];
if (Array.isArray(parameters.input)) {
messageField = "input";
messages = parameters.input;
delete parameters.input;
} else if (Array.isArray(parameters.messages)) {
messageField = "messages";
messages = parameters.messages;
delete parameters.messages;
}
return {
system: sha256Hex(JSON.stringify({
instructions,
system
})),
tools: sha256Hex(JSON.stringify({ tools })),
messages: messages.slice(0, MAX_MESSAGE_FINGERPRINTS).map((message) => sha256Hex(JSON.stringify(message))),
messageCount: messages.length,
...messages.length > MAX_MESSAGE_FINGERPRINTS ? { tail: sha256Hex(JSON.stringify(messages.slice(MAX_MESSAGE_FINGERPRINTS))) } : {},
parameters: sha256Hex(JSON.stringify([messageField, parameters]))
};
}
function prepareProviderPrompt({ payload, encode }) {
if (!encode) return {
...sha256StableValue(payload),
encoded: void 0
};
const encoded = serializeModelRequestBody(payload);
return {
digest: sha256Hex(encoded.body),
byteWeight: encoded.body.byteLength,
encoded,
cachePrefix: fingerprintEncodedPrompt(encoded.body)
};
}
//#endregion
export { prepareProviderPrompt as t };