import { readFileSync } from "node:fs"; const readPrompt = (filename: string) => { return readFileSync(new URL(`./prompts/${filename}`, import.meta.url), "utf-8"); }; // ponytail: single template with per-source substitutions; produced text is identical per source type const parserTemplate = readPrompt("parser-system.md"); type ParserVars = { FORMAT_HEADER: string; FORMAT_NOUN: string; ALLOWED_INPUT: string; URL_CLAUSE: string; EXTRA_RULES: string; FALLBACK_CLAUSE: string; }; function makeParserPrompt(vars: ParserVars): string { return Object.entries(vars).reduce((acc, [k, v]) => acc.replaceAll(`{{${k}}}`, v), parserTemplate); } const pdfParserSystemPrompt = makeParserPrompt({ FORMAT_HEADER: "PDF files", FORMAT_NOUN: "PDF", ALLOWED_INPUT: "- Use only the visible content from the attached PDF document.\n- Ignore OCR noise, watermarks, repeated headers/footers, and broken line wraps.", URL_CLAUSE: "full URLs that are explicitly present", EXTRA_RULES: "", FALLBACK_CLAUSE: "PDF is low quality or partially unreadable", }); const docxParserSystemPrompt = makeParserPrompt({ FORMAT_HEADER: "Microsoft Word files (DOC/DOCX)", FORMAT_NOUN: "document", ALLOWED_INPUT: "- Use only visible, intended content from the attached document.\n- Ignore hidden text, comments, track changes, revision history, document metadata, and layout artifacts.", URL_CLAUSE: "URLs explicitly visible in document content", EXTRA_RULES: "- Lists and tables: extract visible text faithfully; preserve relationships in section fields.\n- Headers/footers: include only if they contain real resume data.\n", FALLBACK_CLAUSE: "document is malformed or partially unreadable", }); const analyzeResumeSystemPrompt = readPrompt("analyze-resume-system.md"); const chatSystemPromptTemplate = readPrompt("chat-system.md"); const docxParserUserPrompt = readPrompt("docx-parser-user.md"); const pdfParserUserPrompt = readPrompt("pdf-parser-user.md"); export { analyzeResumeSystemPrompt, chatSystemPromptTemplate, docxParserSystemPrompt, docxParserUserPrompt, pdfParserSystemPrompt, pdfParserUserPrompt, };