Spaces:
Running
Running
File size: 1,892 Bytes
c78c312 | 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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | /**
* STM (Semantic Transformation Module) API Routes
*
* POST /v1/transform — Apply one or more STM modules to text
*/
import { Router } from 'express'
import {
allModules,
applySTMs,
type STMModule,
} from '../../src/stm/modules'
export const transformRoutes = Router()
const AVAILABLE_MODULE_IDS = allModules.map(m => m.id)
transformRoutes.post('/', (req, res) => {
try {
const { text, modules: requestedModules } = req.body
if (!text || typeof text !== 'string') {
res.status(400).json({ error: 'text (string) is required' })
return
}
// Default: apply all modules
let moduleIds: string[] = AVAILABLE_MODULE_IDS
if (Array.isArray(requestedModules)) {
// Validate module IDs
const invalid = requestedModules.filter((id: string) => !AVAILABLE_MODULE_IDS.includes(id))
if (invalid.length > 0) {
res.status(400).json({
error: `Invalid module ID(s): ${invalid.join(', ')}. Available: ${AVAILABLE_MODULE_IDS.join(', ')}`,
})
return
}
moduleIds = requestedModules
}
// Create module copies with enabled set based on request
const enabledModules: STMModule[] = allModules.map(m => ({
...m,
enabled: moduleIds.includes(m.id),
}))
const result = applySTMs(text, enabledModules)
res.json({
original_text: text,
transformed_text: result,
modules_applied: moduleIds,
available_modules: allModules.map(m => ({
id: m.id,
name: m.name,
description: m.description,
})),
})
} catch (err: any) {
res.status(500).json({ error: err.message })
}
})
transformRoutes.get('/modules', (_req, res) => {
res.json({
modules: allModules.map(m => ({
id: m.id,
name: m.name,
description: m.description,
version: m.version,
author: m.author,
})),
})
})
|