godmod3-api / api /routes /dataset.ts
pliny-the-prompter's picture
Upload 22 files
c78c312 verified
Raw
History Blame Contribute Delete
1.79 kB
/**
* Dataset API Routes
*
* GET /v1/dataset/stats — Dataset statistics
* GET /v1/dataset/export — Export full dataset as JSON (JSONL-compatible)
* DELETE /v1/dataset/:id — Delete a specific entry (for GDPR-style right to delete)
*/
import { Router } from 'express'
import { getDataset, getDatasetStats, deleteEntry } from '../lib/dataset'
export const datasetRoutes = Router()
datasetRoutes.get('/stats', (_req, res) => {
res.json(getDatasetStats())
})
datasetRoutes.get('/export', (req, res) => {
const format = req.query.format || 'json'
const dataset = getDataset()
if (format === 'jsonl') {
// JSONL format — one JSON object per line, ideal for HF Datasets
res.setHeader('Content-Type', 'application/x-ndjson')
res.setHeader('Content-Disposition', 'attachment; filename="g0dm0d3-dataset.jsonl"')
const lines = dataset.map(entry => JSON.stringify(entry))
res.send(lines.join('\n') + '\n')
} else {
// Standard JSON array
res.setHeader('Content-Type', 'application/json')
res.setHeader('Content-Disposition', 'attachment; filename="g0dm0d3-dataset.json"')
res.json({
metadata: {
name: 'G0DM0D3 Research Dataset',
description: 'Opt-in collection of LLM interactions with AutoTune, Parseltongue, and ULTRAPLINIAN pipeline metadata.',
license: 'AGPL-3.0',
source: 'https://github.com/LYS10S/G0DM0D3',
exported_at: new Date().toISOString(),
total_entries: dataset.length,
},
data: dataset,
})
}
})
datasetRoutes.delete('/:id', (req, res) => {
const { id } = req.params
const deleted = deleteEntry(id)
if (deleted) {
res.json({ deleted: true, id })
} else {
res.status(404).json({ error: 'Entry not found', id })
}
})