LibreChat / api /app /clients /chains /runTitleChain.js
N.Achyuth Reddy
Upload 683 files
9705b6c
const { z } = require('zod');
const { langPrompt, createTitlePrompt, escapeBraces, getSnippet } = require('../prompts');
const { createStructuredOutputChainFromZod } = require('langchain/chains/openai_functions');
const langSchema = z.object({
language: z.string().describe('The language of the input text (full noun, no abbreviations).'),
});
const createLanguageChain = (config) =>
createStructuredOutputChainFromZod(langSchema, {
prompt: langPrompt,
...config,
// verbose: true,
});
const titleSchema = z.object({
title: z.string().describe('The conversation title in title-case, in the given language.'),
});
const createTitleChain = ({ convo, ...config }) => {
const titlePrompt = createTitlePrompt({ convo });
return createStructuredOutputChainFromZod(titleSchema, {
prompt: titlePrompt,
...config,
// verbose: true,
});
};
const runTitleChain = async ({ llm, text, convo, signal, callbacks }) => {
let snippet = text;
try {
snippet = getSnippet(text);
} catch (e) {
console.log('Error getting snippet of text for titleChain');
console.log(e);
}
const languageChain = createLanguageChain({ llm, callbacks });
const titleChain = createTitleChain({ llm, callbacks, convo: escapeBraces(convo) });
const { language } = (await languageChain.call({ inputText: snippet, signal })).output;
return (await titleChain.call({ language, signal })).output.title;
};
module.exports = runTitleChain;