@langchain/community
Version:
Third-party integrations for LangChain.js
107 lines (106 loc) • 3.51 kB
JavaScript
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
let _langchain_core_language_models_chat_models = require("@langchain/core/language_models/chat_models");
//#region src/chat_models/arcjet.ts
var arcjet_exports = /* @__PURE__ */ require_runtime.__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 _langchain_core_language_models_chat_models.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
exports.ArcjetRedact = ArcjetRedact;
Object.defineProperty(exports, "arcjet_exports", {
enumerable: true,
get: function() {
return arcjet_exports;
}
});
//# sourceMappingURL=arcjet.cjs.map