56 lines
2.2 KiB
JavaScript

import { Router } from 'express';
import { v4 as uuidv4 } from 'uuid';
import db from '../db.js';
import { authenticateToken } from '../middleware/auth.js';
import { processTrainingPrompt, generateCharacterSuggestion, DEFAULT_KNOWLEDGE } from '../ai/trainer.js';
const router = Router();
router.post('/suggest', authenticateToken, async (req, res) => {
const { prompt } = req.body;
if (!prompt) return res.status(400).json({ error: 'Prompt is required' });
const suggestion = await processTrainingPrompt(prompt, req.userId);
res.json({ suggestion });
});
router.post('/generate-name', authenticateToken, (req, res) => {
const { style } = req.body;
const name = generateCharacterSuggestion('generate name', req.userId).name;
res.json({ name });
});
router.post('/train', authenticateToken, (req, res) => {
const { prompt, response, category } = req.body;
if (!prompt || !response) return res.status(400).json({ error: 'Prompt and response are required' });
const id = uuidv4();
db.prepare('INSERT INTO ai_training_data (id, user_id, prompt, response, category) VALUES (?, ?, ?, ?, ?)')
.run(id, req.userId, prompt, response, category || 'general');
res.status(201).json({ message: 'Training data added', id });
});
router.get('/training-data', authenticateToken, (req, res) => {
const data = db.prepare('SELECT id, prompt, response, category, created_at FROM ai_training_data WHERE user_id = ? ORDER BY created_at DESC').all(req.userId);
res.json({ training_data: data });
});
router.delete('/training-data/:id', authenticateToken, (req, res) => {
const existing = db.prepare('SELECT * FROM ai_training_data WHERE id = ? AND user_id = ?').get(req.params.id, req.userId);
if (!existing) return res.status(404).json({ error: 'Training data not found' });
db.prepare('DELETE FROM ai_training_data WHERE id = ?').run(req.params.id);
res.json({ message: 'Training data deleted' });
});
router.get('/knowledge', authenticateToken, (req, res) => {
const archetypes = DEFAULT_KNOWLEDGE.character_archetypes.map(a => ({
name: a.name,
traits: a.traits,
needs_priority: a.needs_priority
}));
res.json({ archetypes, name_styles: Object.keys(DEFAULT_KNOWLEDGE.name_generators) });
});
export default router;