UNPKG

@langchain/community

Version:
100 lines (99 loc) 3.22 kB
import { __exportAll } from "../_virtual/_rolldown/runtime.js"; import { BaseChatModel } from "@langchain/core/language_models/chat_models"; //#region src/chat_models/arcjet.ts var arcjet_exports = /* @__PURE__ */ __exportAll({ ArcjetRedact: () => ArcjetRedact }); async function transformTextMessageAsync(message, transformer) { if (typeof message.content === "string") { message.content = await transformer(message.content); return message; } message.content = await Promise.all(message.content.map(async (m) => { if (m.type === "text") return { ...m, text: await transformer(m.text) }; else return Promise.resolve(m); })); return message; } function transformTextMessage(message, transformer) { if (typeof message.content === "string") { message.content = transformer(message.content); return message; } message.content = message.content.map((m) => { if (m.type === "text") return { ...m, text: transformer(m.text) }; else return m; }); return message; } var ArcjetRedact = class extends BaseChatModel { static lc_name() { return "ArcjetRedact"; } chatModel; entities; contextWindowSize; detect; replace; index; constructor(options) { super(options); if (options.entities && options.entities.length === 0) throw new Error("no entities configured for redaction"); this.chatModel = options.chatModel; this.entities = options.entities; this.contextWindowSize = options.contextWindowSize; this.detect = options.detect; this.replace = options.replace; this.index = 0; } _createUniqueReplacement(entity) { const userReplacement = typeof this.replace !== "undefined" ? this.replace(entity) : void 0; if (typeof userReplacement !== "undefined") return userReplacement; this.index++; if (entity === "email") return `<Redacted email #${this.index}>`; if (entity === "phone-number") return `<Redacted phone number #${this.index}>`; if (entity === "ip-address") return `<Redacted IP address #${this.index}>`; if (entity === "credit-card-number") return `<Redacted credit card number #${this.index}>`; return `<Redacted ${entity} #${this.index}>`; } _llmType() { return "arcjet_redact"; } async _generate(messages, options, runManager) { const ajOptions = { entities: this.entities, contextWindowSize: this.contextWindowSize, detect: this.detect, replace: this._createUniqueReplacement.bind(this) }; const unredactors = []; const { redact } = await import("@arcjet/redact"); const redacted = await Promise.all(messages.map(async (message) => { return await transformTextMessageAsync(message, async (message) => { const [redacted, unredact] = await redact(message, ajOptions); unredactors.push(unredact); return redacted; }); })); const response = await this.chatModel._generate(redacted, options, runManager); return { ...response, generations: response.generations.map((resp) => { return { ...resp, message: transformTextMessage(resp.message, (message) => { for (const unredact of unredactors) message = unredact(message); return message; }) }; }) }; } }; //#endregion export { ArcjetRedact, arcjet_exports }; //# sourceMappingURL=arcjet.js.map