56 lines
2.2 KiB
JavaScript
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;
|