Referencia: Módulos de Mindset
@mindsetModule(config?)
Decorador de clase. Marca una clase como módulo de funciones invocables por el LLM.
import { mindsetModule } from '@wabot-dev/framework'| Opción | Tipo | Descripción |
|---|---|---|
language? | string | Idioma de las descripciones internas del módulo. |
@mindsetModule()export class ReservasModule { }La clase se vuelve inyectable automáticamente. Puede recibir dependencias vía constructor (repositorios, servicios, Chat, etc.).
@description(texto)
Decorador de método o propiedad. Registra metadatos que el LLM usa para decidir cuándo llamar la función y qué datos extraer de la conversación.
import { description } from '@wabot-dev/framework'En métodos del módulo — describe cuándo invocar la función:
@mindsetModule()export class ReservasModule { @description(` Crea una reserva cuando el usuario proporciona fecha, hora y número de personas. Llamar solo después de confirmar disponibilidad. `) async crearReserva(req: CrearReservaReq) { // implementación }}En propiedades de la clase request — describe qué dato debe extraer el LLM de la conversación:
export class CrearReservaReq { @isString() @isNotEmpty() @description('Fecha de la reserva en formato YYYY-MM-DD extraída de la conversación.') fecha: string = ''}Clases de request
Cada método del módulo puede recibir cero o un parámetro (la clase request). El framework valida los datos recibidos del LLM antes de invocar el método.
Reglas:
- Cada propiedad debe tener exactamente un decorador de tipo (
@isString,@isNumber,@isBoolean,@isDate,@isArray,@isModel). - Cada propiedad debe tener
@description(). - Las propiedades deben tener valor por defecto (
= '',= 0,= false, etc.). - Si una propiedad puede ser omitida por el LLM, agrega
@isOptional().
import { description, isString, isNumber, isBoolean, isDate, isOptional, isNotEmpty, min, max, isIn } from '@wabot-dev/framework'
export class CrearReservaReq { @isString() @isNotEmpty() @description('Fecha en formato YYYY-MM-DD.') fecha: string = ''
@isString() @isNotEmpty() @description("Hora en formato HH:MM (24h), ej: '20:00'.") hora: string = ''
@isNumber() @min(1) @max(20) @description('Número de personas para la reserva.') personas: number = 1
@isString() @isOptional() @description('Ocasión especial si el usuario la mencionó: cumpleaños, aniversario, etc.') ocasion: string = ''
@isBoolean() @isOptional() @description('true si el usuario solicitó mesa exterior.') exterior: boolean = false}Registrar módulos en un mindset
Los módulos se declaran en el decorador @mindset():
import { mindset, Mindset } from '@wabot-dev/framework'import { ReservasModule } from '@/modules/ReservasModule'import { MenuModule } from '@/modules/MenuModule'
@mindset({ modules: [ReservasModule, MenuModule] })export class RestauranteMindset extends Mindset implements IMindset { }Valor de retorno de las funciones
Las funciones del módulo pueden retornar cualquier valor serializable. El LLM recibe el resultado como JSON para continuar la conversación.
@description('Busca disponibilidad para una fecha y hora.')async verificarDisponibilidad(req: VerificarReq) { const disponible = await this.repo.checkSlot(req.fecha, req.hora) return { disponible, alternativas: disponible ? [] : await this.repo.getAlternatives(req.fecha), } // El LLM recibe: { disponible: false, alternativas: ['19:00', '21:30'] }}Si la función lanza un error, el LLM recibe el mensaje del error y puede informar al usuario.