import { ArcjetRedact, ArcjetSensitiveInfoType,} from "@langchain/community/llms/arcjet";import { OpenAI } from "@langchain/openai";// Create an instance of another LLM for Arcjet to wrapconst openai = new OpenAI({ modelName: "gpt-3.5-turbo-instruct", openAIApiKey: process.env.OPENAI_API_KEY,});const arcjetRedactOptions = { // Specify a LLM that Arcjet Redact will call once it has redacted the input. llm: openai, // Specify the list of entities that should be redacted. // If this isn't specified then all entities will be redacted. entities: ["email", "phone-number", "ip-address", "credit-card"] as ArcjetSensitiveInfoType[], // You can provide a custom detect function to detect entities that we don't support yet. // It takes a list of tokens and you return a list of identified types or undefined. // The undefined types that you return should be added to the entities list if used. detect: (tokens: string[]) => { return tokens.map((t) => t === "some-sensitive-info" ? "custom-entity" : undefined) }, // The number of tokens to provide to the custom detect function. This defaults to 1. // It can be used to provide additional context when detecting custom entity types. contextWindowSize: 1, // This allows you to provide custom replacements when redacting. Please ensure // that the replacements are unique so that unredaction works as expected. replace: (identifiedType: string) => { return identifiedType === "email" ? "redacted@example.com" : undefined; },};const arcjetRedact = new ArcjetRedact(arcjetRedactOptions);const response = await arcjetRedact.invoke( "My email address is test@example.com, here is some-sensitive-info");