dtamind-components
Version:
Apps integration for Dtamind. Contain Nodes and Credentials.
40 lines (36 loc) • 1.68 kB
text/typescript
import { Moderation } from '../Moderation'
import { BaseChatModel } from '@langchain/core/language_models/chat_models'
export class SimplePromptModerationRunner implements Moderation {
private readonly denyList: string = ''
private readonly moderationErrorMessage: string = ''
private readonly model: BaseChatModel
constructor(denyList: string, moderationErrorMessage: string, model?: BaseChatModel) {
this.denyList = denyList
if (denyList.indexOf('\n') === -1) {
this.denyList += '\n'
}
this.moderationErrorMessage = moderationErrorMessage
if (model) this.model = model
}
async checkForViolations(input: string): Promise<string> {
if (this.model) {
const denyArray = this.denyList.split('\n')
for (const denyStr of denyArray) {
if (!denyStr || denyStr === '') continue
const res = await this.model.invoke(
`Are these two sentences similar to each other? Only return Yes or No.\nFirst sentence: ${input}\nSecond sentence: ${denyStr}`
)
if (res.content.toString().toLowerCase().includes('yes')) {
throw Error(this.moderationErrorMessage)
}
}
} else {
this.denyList.split('\n').forEach((denyListItem) => {
if (denyListItem && denyListItem !== '' && input.toLowerCase().includes(denyListItem.toLowerCase())) {
throw Error(this.moderationErrorMessage)
}
})
}
return Promise.resolve(input)
}
}