-
Notifications
You must be signed in to change notification settings - Fork 0
/
store.js
56 lines (48 loc) · 1.82 KB
/
store.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import fs from 'fs'
let versions = new Map()
function getNextVersion(base) {
if (versions.get(base)) {
let next = Number(versions.get(base)) + 1
versions.set(base, next)
return next
}
console.log("No in-mem filename history for", base)
let files = fs.readdirSync(`./output/${base}/`)
.filter(f => f.startsWith(base))
.filter(f => f.endsWith(".txt"))
.map(f => f.substring(base.length))
.map(f => f.substring(0, f.length - 4))
.sort()
if (files.length == 0) {
console.log("I think this is the first stored", base, " ...starting at 1")
versions.set(base, 1)
return 1
}
let next = Number(files[files.length - 1]) + 1
versions.set(base, next)
console.log("using", next)
return next
}
function ensureDirectoryExists(base) {
let dir = `./output/${base}`;
if (!fs.existsSync(dir)){
console.log("Creating dir for", base)
fs.mkdirSync(dir, { recursive: true });
}
}
function store(prompt) {
if (prompt.store == undefined || prompt.store == true) {
console.log("Writing", prompt.title, "response to disk")
ensureDirectoryExists(prompt.title)
let frontmatter = "-- finish reason: " + prompt.response.finish_reason
frontmatter += "\n-- generated: " + new Date().toString()
frontmatter += "\n-- duration: " + Math.round(prompt.response.duration / 60) + " min"
frontmatter += "\n-- prompt md5: " + prompt.md5
let text = `${frontmatter}\n\n${prompt.response.text}\n`
let version = getNextVersion(prompt.title)
fs.promises.writeFile(`./output/${prompt.title}/${prompt.title}${version}.txt`, text, 'utf8')
} else {
console.log("Instructed not to write", prompt.title, "response to disk.")
}
}
export default store