Skip to content

Commit 116ce68

Browse files
committed
wip
1 parent 21cdf05 commit 116ce68

1 file changed

Lines changed: 122 additions & 0 deletions

File tree

src/cli/dumpOutlineResult.ts

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
import * as fs from 'fs/promises';
2+
import * as path from 'path';
3+
import {
4+
IOutlineData,
5+
IOutlineParam,
6+
IOutlineResult,
7+
} from "src/interfaces/Outline.interface";
8+
9+
export const dumpOutlineResult = async <
10+
Data extends IOutlineData = IOutlineData,
11+
Param extends IOutlineParam = IOutlineParam
12+
>(
13+
result: IOutlineResult<Data, Param>,
14+
outputDir = "./dump/outline"
15+
) => {
16+
17+
if (!result.isValid) {
18+
return;
19+
}
20+
21+
try {
22+
await fs.access(outputDir);
23+
} catch {
24+
await fs.mkdir(outputDir, { recursive: true });
25+
}
26+
27+
const datetime = new Date().toISOString();
28+
29+
const subfolderPath = path.join(outputDir, result.resultId);
30+
31+
try {
32+
await fs.access(subfolderPath);
33+
} catch {
34+
await fs.mkdir(subfolderPath, { recursive: true });
35+
}
36+
37+
const createdFiles: string[] = [];
38+
39+
let summary = `# Outline Result Summary\n`;
40+
41+
{
42+
summary += `\n`;
43+
summary += `**ResultId**: ${result.resultId}\n`;
44+
summary += `**Generation Date**: ${datetime}\n`;
45+
summary += `\n`;
46+
}
47+
48+
if (result.param) {
49+
summary += `## Input Parameters\n\n`;
50+
summary += '```json\n';
51+
summary += JSON.stringify(result.param, null, 2);
52+
summary += '\n```\n\n';
53+
}
54+
55+
if (result.data) {
56+
summary += `## Generated Data\n\n`;
57+
summary += '```json\n';
58+
summary += JSON.stringify(result.data, null, 2);
59+
summary += '\n```\n\n';
60+
}
61+
62+
// Extract system messages and system reminders from existing data
63+
const systemMessages = result.history.filter(m => m.role === 'system');
64+
65+
// Add system messages to summary
66+
if (systemMessages.length > 0) {
67+
summary += `## System Messages\n\n`;
68+
systemMessages.forEach((msg, idx) => {
69+
summary += `### System Message ${idx + 1}\n\n`;
70+
summary += `**History Index**: ${msg.index}\n\n`;
71+
summary += '```\n';
72+
summary += msg.content;
73+
summary += '\n```\n\n';
74+
});
75+
}
76+
77+
const summaryFile = path.join(subfolderPath, '00_summary.md');
78+
await fs.writeFile(summaryFile, summary, 'utf8');
79+
createdFiles.push(summaryFile);
80+
81+
const userMessages = result.history.filter(m => m.role === 'user');
82+
for (const [idx, message] of userMessages.entries()) {
83+
const messageNum = String(idx + 1).padStart(2, '0');
84+
const fileName = `${messageNum}_user_message.md`;
85+
const filePath = path.join(subfolderPath, fileName);
86+
87+
let content = `# User Input ${idx + 1}\n\n`;
88+
content += `**Role**: ${message.role}\n`;
89+
content += `**ResultId**: ${result.resultId}\n\n`;
90+
content += `## Content\n\n`;
91+
content += '```\n';
92+
content += message.content;
93+
content += '\n```\n';
94+
95+
96+
await fs.writeFile(filePath, content, 'utf8');
97+
createdFiles.push(filePath);
98+
}
99+
100+
const fullDataFileName = `${String(userMessages.length + 1).padStart(2, '0')}_llm_output.md`;
101+
const fullDataFilePath = path.join(subfolderPath, fullDataFileName);
102+
103+
let fullDataContent = `# Full Outline Result\n\n`;
104+
fullDataContent += `**ResultId**: ${result.resultId}\n\n`;
105+
106+
if (result.param) {
107+
fullDataContent += `## Completion Input Data\n\n`;
108+
fullDataContent += '```json\n';
109+
fullDataContent += JSON.stringify(result.param, null, 2);
110+
fullDataContent += '\n```\n\n';
111+
}
112+
113+
if (result.data) {
114+
fullDataContent += `## Completion Output Data\n\n`;
115+
fullDataContent += '```json\n';
116+
fullDataContent += JSON.stringify(result.data, null, 2);
117+
fullDataContent += '\n```\n';
118+
}
119+
120+
await fs.writeFile(fullDataFilePath, fullDataContent, 'utf8');
121+
createdFiles.push(fullDataFilePath);
122+
};

0 commit comments

Comments
 (0)