@mosaicoo/svg-engine/ai/nlu é a camada de linguagem natural opt-in (headless,
sem Material/CDK). Ela transforma uma frase como “desenhe um círculo vermelho” numa
ação do editor: um engine baseado em regras casa o texto com intents registrados,
extrai slots e retorna candidatos ranqueados ou auto-executa o melhor. Uma camada de
LLM local opcional cuida do que as regras não dão conta.
O registry de intents + matcher. registerIntent(intent) → Disposable; parse(text, ctx, opts?) retorna NluCandidate[] ranqueados; execute(text, ctx, opts?) faz parse e auto-executa o melhor quando confiante; signals intents/intentsCount.
Registrar intents e transformar texto em ações do editor.
builtinNluPlugin
Um plugin (instale via provideSvgEnginePlugin(builtinNluPlugin)) que auto-descobre todo comando de menu como intent e adiciona built-ins como create-shape, set-fill, move-selected, resize-selected, duplicate-selected.
Ter um vocabulário de comandos funcional de imediato.
Definição de intent: id, keywords, opcionais actionKeywords/slots/destructive/description, e execute(slots, ctx).
NluContext
O contexto por-chamada — carrega o injector para o intent resolver serviços do editor.
NluCandidate
Um resultado de parse: o intent casado, uma confidence em [0,1], os slots extraídos e os matches que o explicam.
NluSlotSchema
A forma de um slot: number, color, shape, enum, string, point ou gradient, com optional/default/anchor keywords.
NluParseOptions
threshold (padrão 0.3) e maxResults (padrão 5).
NluExecuteOptions
Adiciona autoExecuteThreshold (padrão 0.7) e confirmGate (hook de confirmação — obrigatório para intents destructive).
NluExecuteResult
O resultado: executed, o candidate, alternatives, e um motivo de rejection (no-match, below-threshold, confirmation-declined, destructive-no-gate, execute-error ou null).
Padrões: http://localhost:11434, qwen2.5:3b, e uma pequena lista de modelos Qwen sugeridos.
LlmIntentResolverService
A camada de escalada: resolvePlan(text, ctx) pede ao LLM para quebrar um pedido complexo num plano de intents em múltiplos passos; resolveAndExecute(text, ctx) o executa.
AiChatMessage / AiChatOptions
A mensagem de chat (role, content) e as opções por-chamada (model, format, temperature, …).