2024-05-09 20:39:38 +05:30
|
|
|
import { BaseOutputParser } from '@langchain/core/output_parsers';
|
|
|
|
|
|
|
|
interface LineListOutputParserArgs {
|
|
|
|
key?: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
class LineListOutputParser extends BaseOutputParser<string[]> {
|
|
|
|
private key = 'questions';
|
|
|
|
|
|
|
|
constructor(args?: LineListOutputParserArgs) {
|
|
|
|
super();
|
2024-05-18 13:10:39 +05:30
|
|
|
this.key = args.key ?? this.key;
|
2024-05-09 20:39:38 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
static lc_name() {
|
|
|
|
return 'LineListOutputParser';
|
|
|
|
}
|
|
|
|
|
|
|
|
lc_namespace = ['langchain', 'output_parsers', 'line_list_output_parser'];
|
|
|
|
|
|
|
|
async parse(text: string): Promise<string[]> {
|
2025-01-31 17:51:16 +05:30
|
|
|
text = text.trim() || '';
|
|
|
|
|
2024-05-09 20:39:38 +05:30
|
|
|
const regex = /^(\s*(-|\*|\d+\.\s|\d+\)\s|\u2022)\s*)+/;
|
|
|
|
const startKeyIndex = text.indexOf(`<${this.key}>`);
|
|
|
|
const endKeyIndex = text.indexOf(`</${this.key}>`);
|
2024-07-30 10:06:52 +05:30
|
|
|
|
2025-01-31 17:51:16 +05:30
|
|
|
if (startKeyIndex === -1 || endKeyIndex === -1) {
|
2024-07-30 10:06:52 +05:30
|
|
|
return [];
|
|
|
|
}
|
|
|
|
|
2024-05-09 20:39:38 +05:30
|
|
|
const questionsStartIndex =
|
|
|
|
startKeyIndex === -1 ? 0 : startKeyIndex + `<${this.key}>`.length;
|
|
|
|
const questionsEndIndex = endKeyIndex === -1 ? text.length : endKeyIndex;
|
|
|
|
const lines = text
|
|
|
|
.slice(questionsStartIndex, questionsEndIndex)
|
|
|
|
.trim()
|
|
|
|
.split('\n')
|
|
|
|
.filter((line) => line.trim() !== '')
|
|
|
|
.map((line) => line.replace(regex, ''));
|
|
|
|
|
|
|
|
return lines;
|
|
|
|
}
|
|
|
|
|
|
|
|
getFormatInstructions(): string {
|
|
|
|
throw new Error('Not implemented.');
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
export default LineListOutputParser;
|