@mosaicoo/svg-engine 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/NOTICE +21 -0
- package/README.md +249 -0
- package/fesm2022/mosaicoo-svg-engine-ai-nlu-ui.mjs +459 -0
- package/fesm2022/mosaicoo-svg-engine-ai-nlu-voice-wasm.mjs +1 -0
- package/fesm2022/mosaicoo-svg-engine-ai-nlu.mjs +11 -0
- package/fesm2022/mosaicoo-svg-engine-core.mjs +3 -0
- package/fesm2022/mosaicoo-svg-engine-edit.mjs +2292 -0
- package/fesm2022/mosaicoo-svg-engine-io.mjs +47 -0
- package/fesm2022/mosaicoo-svg-engine-optimize.mjs +1 -0
- package/fesm2022/mosaicoo-svg-engine-render.mjs +301 -0
- package/fesm2022/mosaicoo-svg-engine-ui.mjs +14236 -0
- package/fesm2022/mosaicoo-svg-engine.mjs +1 -0
- package/package.json +105 -0
- package/types/mosaicoo-svg-engine-ai-nlu-ui.d.ts +416 -0
- package/types/mosaicoo-svg-engine-ai-nlu-voice-wasm.d.ts +175 -0
- package/types/mosaicoo-svg-engine-ai-nlu.d.ts +1834 -0
- package/types/mosaicoo-svg-engine-core.d.ts +5139 -0
- package/types/mosaicoo-svg-engine-edit.d.ts +11922 -0
- package/types/mosaicoo-svg-engine-io.d.ts +476 -0
- package/types/mosaicoo-svg-engine-optimize.d.ts +183 -0
- package/types/mosaicoo-svg-engine-render.d.ts +628 -0
- package/types/mosaicoo-svg-engine-ui.d.ts +6861 -0
- package/types/mosaicoo-svg-engine.d.ts +30 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, Provider, Signal } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* **D-046 voz local (Whisper WASM)** — configuração do provider de
|
|
6
|
+
* reconhecimento de voz **100% offline** baseado em
|
|
7
|
+
* `@huggingface/transformers` (transformers.js) + onnxruntime-web.
|
|
8
|
+
*
|
|
9
|
+
* Todos os caminhos apontam para assets **servidos pela própria
|
|
10
|
+
* origem** do app (sem CDN / sem `huggingface.co` em runtime). O modelo
|
|
11
|
+
* vem do submódulo `assets/ml/whisper` (repo `svgengine-ml-assets`); os
|
|
12
|
+
* binários `.wasm` do onnxruntime são copiados do pacote npm para os
|
|
13
|
+
* assets do app (ver `angular.json`).
|
|
14
|
+
*/
|
|
15
|
+
interface WhisperVoiceConfig {
|
|
16
|
+
/**
|
|
17
|
+
* Base servida onde o transformers.js procura o modelo
|
|
18
|
+
* (`env.localModelPath`). O modelo é resolvido em
|
|
19
|
+
* `${modelBasePath}/${modelId}/...`. Default: `/assets/ml/whisper`.
|
|
20
|
+
*/
|
|
21
|
+
readonly modelBasePath: string;
|
|
22
|
+
/**
|
|
23
|
+
* Id/pasta do modelo dentro de `modelBasePath`. Default:
|
|
24
|
+
* `whisper-base`.
|
|
25
|
+
*/
|
|
26
|
+
readonly modelId: string;
|
|
27
|
+
/**
|
|
28
|
+
* Base servida com os binários `.wasm` do onnxruntime-web
|
|
29
|
+
* (`env.backends.onnx.wasm.wasmPaths`). Default: `/assets/ml/ort/`.
|
|
30
|
+
*/
|
|
31
|
+
readonly wasmBasePath: string;
|
|
32
|
+
/**
|
|
33
|
+
* dtype do modelo ONNX. `'q8'` mapeia para os arquivos
|
|
34
|
+
* `*_quantized.onnx` (que vendoramos: encoder/decoder int8). Mantenha
|
|
35
|
+
* `'q8'` salvo se vendorar outra variante.
|
|
36
|
+
*/
|
|
37
|
+
readonly dtype: 'q8' | 'fp32' | 'fp16' | 'int8' | 'uint8' | 'q4' | 'q4f16';
|
|
38
|
+
/**
|
|
39
|
+
* Nº de threads WASM. **1** (default) evita exigir cross-origin
|
|
40
|
+
* isolation (COOP/COEP) — funciona em qualquer hospedagem. Aumente
|
|
41
|
+
* apenas se o app já servir os headers de isolamento.
|
|
42
|
+
*/
|
|
43
|
+
readonly numThreads: number;
|
|
44
|
+
/**
|
|
45
|
+
* Nível de otimização de grafo do onnxruntime (`session_options`).
|
|
46
|
+
* **`'disabled'`** (default) evita a passada
|
|
47
|
+
* `TransposeDQWeightsForMatMulNBits` do ORT 1.26, que falha ao carregar
|
|
48
|
+
* o decoder int8 do Whisper base (`Missing required scale` no
|
|
49
|
+
* `embed_tokens` merged/transposto). O modelo carrega e roda normal
|
|
50
|
+
* sem essa fusão — só perde uma otimização de performance irrelevante
|
|
51
|
+
* para comandos curtos. Suba para `'basic'`/`'all'` apenas se vendorar
|
|
52
|
+
* um modelo cuja quantização o ORT consiga fundir.
|
|
53
|
+
*/
|
|
54
|
+
readonly graphOptimizationLevel: 'disabled' | 'basic' | 'extended' | 'all';
|
|
55
|
+
/**
|
|
56
|
+
* Idioma BCP-47 padrão quando o chamador não informa. Default
|
|
57
|
+
* `'pt'`. O Whisper base é multilíngue (PT-BR / ES / EN / …).
|
|
58
|
+
*/
|
|
59
|
+
readonly defaultLanguage: string;
|
|
60
|
+
/**
|
|
61
|
+
* Duração máxima de captura por sessão (ms) antes de parar
|
|
62
|
+
* automaticamente e transcrever. Funciona como teto de segurança
|
|
63
|
+
* caso o VAD nunca dispare (ruído constante). Default 15000.
|
|
64
|
+
*/
|
|
65
|
+
readonly maxRecordMs: number;
|
|
66
|
+
/**
|
|
67
|
+
* **VAD (detecção de silêncio)** — após a fala começar, encerra a
|
|
68
|
+
* captura automaticamente quando o silêncio durar este tempo (ms).
|
|
69
|
+
* Espelha o auto-stop da Web Speech para manter o comportamento
|
|
70
|
+
* consistente entre as engines. Default 1000 (1 s).
|
|
71
|
+
* `0` desliga o VAD (só para via `stop()` ou `maxRecordMs`).
|
|
72
|
+
*/
|
|
73
|
+
readonly silenceMs: number;
|
|
74
|
+
/**
|
|
75
|
+
* Limiar de energia (RMS, 0–1 no domínio do tempo) acima do qual o
|
|
76
|
+
* áudio é considerado fala pelo VAD. Default 0.015. Aumente se o
|
|
77
|
+
* ruído de fundo disparar falso-positivo; diminua se a fala não
|
|
78
|
+
* estiver sendo detectada (mic baixo/distante).
|
|
79
|
+
*/
|
|
80
|
+
readonly silenceThreshold: number;
|
|
81
|
+
/**
|
|
82
|
+
* **Timeout de "nenhuma fala"** — se o VAD **não** detectar fala
|
|
83
|
+
* dentro deste tempo (ms) após iniciar, encerra a captura mesmo
|
|
84
|
+
* assim. Evita o microfone ficar "preso" ligado quando o áudio fica
|
|
85
|
+
* abaixo do limiar. Default 6000. `0` desliga (só `maxRecordMs`).
|
|
86
|
+
*/
|
|
87
|
+
readonly noSpeechTimeoutMs: number;
|
|
88
|
+
}
|
|
89
|
+
/** Defaults aplicáveis ao layout padrão de assets dos apps SVGEngine. */
|
|
90
|
+
declare const DEFAULT_WHISPER_VOICE_CONFIG: WhisperVoiceConfig;
|
|
91
|
+
/** Token DI para a configuração do provider Whisper. */
|
|
92
|
+
declare const WHISPER_VOICE_CONFIG: InjectionToken<WhisperVoiceConfig>;
|
|
93
|
+
/**
|
|
94
|
+
* Helper de bootstrap — registra a configuração do provider Whisper.
|
|
95
|
+
* Passe um patch parcial; os campos ausentes usam
|
|
96
|
+
* {@link DEFAULT_WHISPER_VOICE_CONFIG}.
|
|
97
|
+
*
|
|
98
|
+
* ```ts
|
|
99
|
+
* providers: [provideWhisperVoice({ modelBasePath: '/custom/assets/whisper' })]
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
declare function provideWhisperVoice(config?: Partial<WhisperVoiceConfig>): Provider;
|
|
103
|
+
|
|
104
|
+
declare class WhisperVoiceService {
|
|
105
|
+
private readonly config;
|
|
106
|
+
/** `false` quando o ambiente não tem mic/WebAssembly (UI esconde o botão). */
|
|
107
|
+
readonly isSupported: Signal<boolean>;
|
|
108
|
+
private readonly _listening;
|
|
109
|
+
/** `true` enquanto está gravando OU transcrevendo. */
|
|
110
|
+
readonly listening: Signal<boolean>;
|
|
111
|
+
private readonly _modelLoading;
|
|
112
|
+
/** `true` durante o (primeiro) carregamento do modelo do disco. */
|
|
113
|
+
readonly modelLoading: Signal<boolean>;
|
|
114
|
+
private readonly _lastError;
|
|
115
|
+
/** Último erro (`'not-allowed'`, `'audio-capture'`, `'load-failed'`, …). */
|
|
116
|
+
readonly lastError: Signal<string | null>;
|
|
117
|
+
/** Pipeline ASR carregado uma vez e reutilizado entre capturas. */
|
|
118
|
+
private transcriber;
|
|
119
|
+
/** Recorder/stream da captura ativa (para `stop()`). */
|
|
120
|
+
private activeRecorder;
|
|
121
|
+
private activeStream;
|
|
122
|
+
/**
|
|
123
|
+
* Inicia a captura e resolve com a transcrição final. Grava até
|
|
124
|
+
* `stop()` ser chamado OU `maxRecordMs` expirar, então transcreve.
|
|
125
|
+
*
|
|
126
|
+
* @param lang BCP-47 (default `config.defaultLanguage`)
|
|
127
|
+
* @param options.timeoutMs duração máxima de captura (default
|
|
128
|
+
* `config.maxRecordMs`)
|
|
129
|
+
*/
|
|
130
|
+
listen(lang?: string, options?: {
|
|
131
|
+
readonly timeoutMs?: number;
|
|
132
|
+
}): Promise<string>;
|
|
133
|
+
/** Encerra a captura ativa (dispara a transcrição do que foi gravado). */
|
|
134
|
+
stop(): void;
|
|
135
|
+
/** Decodifica + downmix mono + reamostra para 16 kHz e roda o ASR. */
|
|
136
|
+
private transcribe;
|
|
137
|
+
/**
|
|
138
|
+
* Carrega (uma vez) o pipeline ASR a partir dos assets locais. Lazy
|
|
139
|
+
* `import()` do transformers.js — só puxa a lib quando a voz Whisper é
|
|
140
|
+
* realmente usada. Configura o env para **não** acessar a rede externa.
|
|
141
|
+
*/
|
|
142
|
+
private ensurePipeline;
|
|
143
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<WhisperVoiceService, never>;
|
|
144
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<WhisperVoiceService>;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/**
|
|
148
|
+
* **Bootstrap da voz local (Whisper) como engine selecionável.**
|
|
149
|
+
*
|
|
150
|
+
* Registra o {@link WhisperVoiceService} no token opcional
|
|
151
|
+
* `VOICE_WHISPER_PROVIDER` (de `svg-engine/ai/nlu`), tornando-o
|
|
152
|
+
* disponível para o `VoiceEngineService` (orquestrador em `nlu-ui`).
|
|
153
|
+
* A partir daí o usuário pode escolher a engine `'whisper'` ou
|
|
154
|
+
* `'auto'` no `<svge-nlu-input>`.
|
|
155
|
+
*
|
|
156
|
+
* Aceita um patch opcional de {@link WhisperVoiceConfig} (caminhos de
|
|
157
|
+
* assets, dtype, idioma padrão). Sem o patch, usa os defaults
|
|
158
|
+
* (`/assets/ml/whisper`, `/assets/ml/ort/`, `whisper-base`, `q8`).
|
|
159
|
+
*
|
|
160
|
+
* ```ts
|
|
161
|
+
* // app.config.ts
|
|
162
|
+
* providers: [
|
|
163
|
+
* ...provideWhisperVoiceEngine(),
|
|
164
|
+
* // ou com caminhos custom:
|
|
165
|
+
* ...provideWhisperVoiceEngine({ modelBasePath: '/cdn/whisper' }),
|
|
166
|
+
* ]
|
|
167
|
+
* ```
|
|
168
|
+
*
|
|
169
|
+
* **Pré-requisito**: os assets do modelo + `.wasm` do onnxruntime
|
|
170
|
+
* precisam estar servidos pela origem do app (ver `angular.json`).
|
|
171
|
+
*/
|
|
172
|
+
declare function provideWhisperVoiceEngine(config?: Partial<WhisperVoiceConfig>): Provider[];
|
|
173
|
+
|
|
174
|
+
export { DEFAULT_WHISPER_VOICE_CONFIG, WHISPER_VOICE_CONFIG, WhisperVoiceService, provideWhisperVoice, provideWhisperVoiceEngine };
|
|
175
|
+
export type { WhisperVoiceConfig };
|