keepwork-sdk 1.0.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/README.md +21 -0
- package/dist-npm/keepwork-sdk.js +37514 -0
- package/dist-npm/keepwork-sdk.js.map +1 -0
- package/dist-npm/md5-CZ0vz1_S.js +240 -0
- package/dist-npm/md5-CZ0vz1_S.js.map +1 -0
- package/dist-npm/types/index.d.ts +42 -0
- package/dist-npm/types/index.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIChat.core.d.ts +218 -0
- package/dist-npm/types/src/ai-chat/AIChat.core.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIChat.d.ts +18 -0
- package/dist-npm/types/src/ai-chat/AIChat.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIChat.session.d.ts +201 -0
- package/dist-npm/types/src/ai-chat/AIChat.session.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.base.d.ts +297 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.base.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.d.ts +15 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.media.d.ts +208 -0
- package/dist-npm/types/src/ai-chat/AIGenerators.media.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/ChildSessionMixin.d.ts +153 -0
- package/dist-npm/types/src/ai-chat/ChildSessionMixin.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/CopilotTools.d.ts +150 -0
- package/dist-npm/types/src/ai-chat/CopilotTools.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/MqttManager.d.ts +123 -0
- package/dist-npm/types/src/ai-chat/MqttManager.d.ts.map +1 -0
- package/dist-npm/types/src/ai-chat/SandboxToolEnv.d.ts +210 -0
- package/dist-npm/types/src/ai-chat/SandboxToolEnv.d.ts.map +1 -0
- package/dist-npm/types/src/audio/AudioEngine.d.ts +272 -0
- package/dist-npm/types/src/audio/AudioEngine.d.ts.map +1 -0
- package/dist-npm/types/src/audio/AudioEngine.utils.d.ts +72 -0
- package/dist-npm/types/src/audio/AudioEngine.utils.d.ts.map +1 -0
- package/dist-npm/types/src/audio/Speech.d.ts +247 -0
- package/dist-npm/types/src/audio/Speech.d.ts.map +1 -0
- package/dist-npm/types/src/core/AgentConfig.d.ts +104 -0
- package/dist-npm/types/src/core/AgentConfig.d.ts.map +1 -0
- package/dist-npm/types/src/core/AgentRouter.d.ts +342 -0
- package/dist-npm/types/src/core/AgentRouter.d.ts.map +1 -0
- package/dist-npm/types/src/core/NPL.d.ts +251 -0
- package/dist-npm/types/src/core/NPL.d.ts.map +1 -0
- package/dist-npm/types/src/core/RemoteLog.d.ts +132 -0
- package/dist-npm/types/src/core/RemoteLog.d.ts.map +1 -0
- package/dist-npm/types/src/core/keepworkSDK.core.d.ts +84 -0
- package/dist-npm/types/src/core/keepworkSDK.core.d.ts.map +1 -0
- package/dist-npm/types/src/core/keepworkSDK.d.ts +129 -0
- package/dist-npm/types/src/core/keepworkSDK.d.ts.map +1 -0
- package/dist-npm/types/src/core/keepworkSDK.pages.d.ts +101 -0
- package/dist-npm/types/src/core/keepworkSDK.pages.d.ts.map +1 -0
- package/dist-npm/types/src/core/keepworkSDK.utils.d.ts +40 -0
- package/dist-npm/types/src/core/keepworkSDK.utils.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHuman.d.ts +1316 -0
- package/dist-npm/types/src/digital-human/DigitalHuman.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanBridge.d.ts +54 -0
- package/dist-npm/types/src/digital-human/DigitalHumanBridge.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanConfig.d.ts +104 -0
- package/dist-npm/types/src/digital-human/DigitalHumanConfig.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanFrame.d.ts +390 -0
- package/dist-npm/types/src/digital-human/DigitalHumanFrame.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanFrameMessages.d.ts +59 -0
- package/dist-npm/types/src/digital-human/DigitalHumanFrameMessages.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanSubtitleOverlay.d.ts +114 -0
- package/dist-npm/types/src/digital-human/DigitalHumanSubtitleOverlay.d.ts.map +1 -0
- package/dist-npm/types/src/digital-human/DigitalHumanUtils.d.ts +53 -0
- package/dist-npm/types/src/digital-human/DigitalHumanUtils.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTC.constants.d.ts +65 -0
- package/dist-npm/types/src/rtc/AIChatRTC.constants.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTC.d.ts +91 -0
- package/dist-npm/types/src/rtc/AIChatRTC.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTC.session.d.ts +268 -0
- package/dist-npm/types/src/rtc/AIChatRTC.session.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.backends.d.ts +232 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.backends.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.core.d.ts +92 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.core.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.d.ts +15 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.session.d.ts +127 -0
- package/dist-npm/types/src/rtc/AIChatRTCLocal.session.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/LocalRTC.d.ts +91 -0
- package/dist-npm/types/src/rtc/LocalRTC.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/SpeechRTC.d.ts +156 -0
- package/dist-npm/types/src/rtc/SpeechRTC.d.ts.map +1 -0
- package/dist-npm/types/src/rtc/SpeechRTC.transport.d.ts +191 -0
- package/dist-npm/types/src/rtc/SpeechRTC.transport.d.ts.map +1 -0
- package/dist-npm/types/src/store/CloudDrive.d.ts +140 -0
- package/dist-npm/types/src/store/CloudDrive.d.ts.map +1 -0
- package/dist-npm/types/src/store/LocalStorageUtil.d.ts +136 -0
- package/dist-npm/types/src/store/LocalStorageUtil.d.ts.map +1 -0
- package/dist-npm/types/src/store/PersonalPageStore.base.d.ts +267 -0
- package/dist-npm/types/src/store/PersonalPageStore.base.d.ts.map +1 -0
- package/dist-npm/types/src/store/PersonalPageStore.d.ts +13 -0
- package/dist-npm/types/src/store/PersonalPageStore.d.ts.map +1 -0
- package/dist-npm/types/src/store/PersonalPageStore.data.d.ts +198 -0
- package/dist-npm/types/src/store/PersonalPageStore.data.d.ts.map +1 -0
- package/dist-npm/types/src/store/PersonalPageStore.sync.d.ts +171 -0
- package/dist-npm/types/src/store/PersonalPageStore.sync.d.ts.map +1 -0
- package/dist-npm/types/src/store/PersonalPageStore.types.d.ts +92 -0
- package/dist-npm/types/src/store/PersonalPageStore.types.d.ts.map +1 -0
- package/dist-npm/types/src/store/YMLParser.d.ts +96 -0
- package/dist-npm/types/src/store/YMLParser.d.ts.map +1 -0
- package/dist-npm/types/src/tools/AgentTool.d.ts +110 -0
- package/dist-npm/types/src/tools/AgentTool.d.ts.map +1 -0
- package/dist-npm/types/src/tools/AppTools.d.ts +122 -0
- package/dist-npm/types/src/tools/AppTools.d.ts.map +1 -0
- package/dist-npm/types/src/tools/ExecuteTool.d.ts +96 -0
- package/dist-npm/types/src/tools/ExecuteTool.d.ts.map +1 -0
- package/dist-npm/types/src/tools/FileTools.d.ts +77 -0
- package/dist-npm/types/src/tools/FileTools.d.ts.map +1 -0
- package/dist-npm/types/src/tools/MinigameTools.d.ts +234 -0
- package/dist-npm/types/src/tools/MinigameTools.d.ts.map +1 -0
- package/dist-npm/types/src/tools/MqttTool.d.ts +53 -0
- package/dist-npm/types/src/tools/MqttTool.d.ts.map +1 -0
- package/dist-npm/types/src/tools/PersonalPageTool.d.ts +57 -0
- package/dist-npm/types/src/tools/PersonalPageTool.d.ts.map +1 -0
- package/dist-npm/types/src/tools/SummarizeTool.d.ts +279 -0
- package/dist-npm/types/src/tools/SummarizeTool.d.ts.map +1 -0
- package/dist-npm/types/src/tools/WebTool.d.ts +106 -0
- package/dist-npm/types/src/tools/WebTool.d.ts.map +1 -0
- package/dist-npm/types/src/types/common.d.ts +164 -0
- package/dist-npm/types/src/types/common.d.ts.map +1 -0
- package/dist-npm/types/src/ui/LocalAPIKeySettings.d.ts +229 -0
- package/dist-npm/types/src/ui/LocalAPIKeySettings.d.ts.map +1 -0
- package/dist-npm/types/src/ui/LoginWindow.d.ts +163 -0
- package/dist-npm/types/src/ui/LoginWindow.d.ts.map +1 -0
- package/dist-npm/types/src/ui/ProfileWindow.d.ts +75 -0
- package/dist-npm/types/src/ui/ProfileWindow.d.ts.map +1 -0
- package/dist-npm/types/src/ui/VerifyHuman.d.ts +23 -0
- package/dist-npm/types/src/ui/VerifyHuman.d.ts.map +1 -0
- package/dist-npm/types/src/ui/WorkspaceViewer.d.ts +184 -0
- package/dist-npm/types/src/ui/WorkspaceViewer.d.ts.map +1 -0
- package/dist-npm/types/src/user/SocialFriends.d.ts +173 -0
- package/dist-npm/types/src/user/SocialFriends.d.ts.map +1 -0
- package/dist-npm/types/src/user/UserWorks.d.ts +187 -0
- package/dist-npm/types/src/user/UserWorks.d.ts.map +1 -0
- package/dist-npm/types/src/utils/ImageUtils.d.ts +107 -0
- package/dist-npm/types/src/utils/ImageUtils.d.ts.map +1 -0
- package/dist-npm/types/src/utils/SDKLogger.d.ts +111 -0
- package/dist-npm/types/src/utils/SDKLogger.d.ts.map +1 -0
- package/dist-npm/types/src/utils/translation.d.ts +95 -0
- package/dist-npm/types/src/utils/translation.d.ts.map +1 -0
- package/dist-npm/types/src/wechat/WxAuth.d.ts +126 -0
- package/dist-npm/types/src/wechat/WxAuth.d.ts.map +1 -0
- package/dist-npm/types/src/wechat/WxLaunchApp.d.ts +96 -0
- package/dist-npm/types/src/wechat/WxLaunchApp.d.ts.map +1 -0
- package/dist-npm/types/src/wechat/WxUtils.d.ts +145 -0
- package/dist-npm/types/src/wechat/WxUtils.d.ts.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AIChatRTCLocal — Local (browser-only) voice chat module.
|
|
3
|
+
*
|
|
4
|
+
* A zero-server-cost alternative to AIChatRTC that replaces VolcEngine RTC's
|
|
5
|
+
* server-side ASR/LLM/TTS pipeline with:
|
|
6
|
+
* - Silero neural VAD (single-thread WASM) + energy-threshold fallback
|
|
7
|
+
* - Web Speech API (SpeechRecognition) for STT fallback
|
|
8
|
+
* - Optional local neural streaming ASR via a small Sherpa-ONNX-style model
|
|
9
|
+
* - Optional local Whisper ASR for Chinese/English mixed utterances
|
|
10
|
+
* - Optional local neural TTS with browser speechSynthesis fallback
|
|
11
|
+
* - Existing sdk.aiChat.chat() SSE streaming for LLM
|
|
12
|
+
*
|
|
13
|
+
* Mirrors AIChatRTC's public API shape so consumers can swap backends with
|
|
14
|
+
* minimal changes. Supports tool calling via SandboxToolEnv and child-agent
|
|
15
|
+
* sessions via ChildSessionMixin — same interface as RTCChatSession.
|
|
16
|
+
*
|
|
17
|
+
* Usage:
|
|
18
|
+
* const rtcLocal = new AIChatRTCLocal(window.keepwork);
|
|
19
|
+
* const session = rtcLocal.createSession({
|
|
20
|
+
* agentConfig: { WelcomeMessage: 'Hello!' },
|
|
21
|
+
* config: {
|
|
22
|
+
* LLMConfig: { Model: 'keepwork-flash', SystemMessages: ['You are a helpful assistant.'] },
|
|
23
|
+
* ASRConfig: { Language: 'zh-CN' },
|
|
24
|
+
* TTSConfig: { Speed: 1.0 },
|
|
25
|
+
* },
|
|
26
|
+
* workspace: 'myWorkspace',
|
|
27
|
+
* enabledToolCategories: ['fileOps', 'agent'],
|
|
28
|
+
* });
|
|
29
|
+
* session.on('subtitle', ({ text, isUser }) => console.log(text));
|
|
30
|
+
* session.on('state', ({ code, label }) => console.log(label));
|
|
31
|
+
* session.on('functionCallInfo', ({ name }) => console.log('calling', name));
|
|
32
|
+
* await session.start();
|
|
33
|
+
* // speak into microphone → VAD detects → STT → LLM → TTS
|
|
34
|
+
* session.sendText('Hi there'); // or type text
|
|
35
|
+
* await session.stop();
|
|
36
|
+
*/
|
|
37
|
+
type RTCLocalAny = Record<string, any>;
|
|
38
|
+
/** CDN paths for Silero VAD (single-thread WASM) */
|
|
39
|
+
declare const DEFAULT_VAD_CDN: {
|
|
40
|
+
ortUrl: string;
|
|
41
|
+
onnxWASMBasePath: string;
|
|
42
|
+
bundleUrl: string;
|
|
43
|
+
modelURL: string;
|
|
44
|
+
workletURL: string;
|
|
45
|
+
};
|
|
46
|
+
declare const DEFAULT_ASSET_CACHE: {
|
|
47
|
+
dbName: string;
|
|
48
|
+
storeName: string;
|
|
49
|
+
namespace: string;
|
|
50
|
+
modelFileName: string;
|
|
51
|
+
wasmFileNames: string[];
|
|
52
|
+
};
|
|
53
|
+
/** Energy-VAD defaults */
|
|
54
|
+
declare const ENERGY_VAD: {
|
|
55
|
+
SAMPLE_INTERVAL: number;
|
|
56
|
+
SPEECH_THRESHOLD: number;
|
|
57
|
+
SILENCE_DURATION: number;
|
|
58
|
+
SPEECH_MIN_DURATION: number;
|
|
59
|
+
};
|
|
60
|
+
declare const DEFAULT_AUDIO_CONSTRAINTS: {
|
|
61
|
+
channelCount: number;
|
|
62
|
+
echoCancellation: boolean;
|
|
63
|
+
noiseSuppression: boolean;
|
|
64
|
+
autoGainControl: boolean;
|
|
65
|
+
voiceIsolation: boolean;
|
|
66
|
+
};
|
|
67
|
+
declare const ASR_PROVIDER: {
|
|
68
|
+
LOCAL_NEURAL: string;
|
|
69
|
+
WHISPER: string;
|
|
70
|
+
WEB_SPEECH: string;
|
|
71
|
+
};
|
|
72
|
+
declare const DEFAULT_ASR_OPTIONS: {
|
|
73
|
+
provider: string;
|
|
74
|
+
fallbackProvider: string;
|
|
75
|
+
};
|
|
76
|
+
declare const DEFAULT_LOCAL_NEURAL_ASR: {
|
|
77
|
+
sampleRate: number;
|
|
78
|
+
featureDim: number;
|
|
79
|
+
numThreads: number;
|
|
80
|
+
executionProvider: string;
|
|
81
|
+
modelingUnit: string;
|
|
82
|
+
decodingMethod: string;
|
|
83
|
+
tailPaddingSeconds: number;
|
|
84
|
+
bufferSize: number;
|
|
85
|
+
initTimeoutMs: number;
|
|
86
|
+
emitPartials: boolean;
|
|
87
|
+
};
|
|
88
|
+
declare const DEFAULT_WHISPER_ASR: {
|
|
89
|
+
sampleRate: number;
|
|
90
|
+
featureDim: number;
|
|
91
|
+
numThreads: number;
|
|
92
|
+
executionProvider: string;
|
|
93
|
+
decodingMethod: string;
|
|
94
|
+
task: string;
|
|
95
|
+
tailPaddings: number;
|
|
96
|
+
initTimeoutMs: number;
|
|
97
|
+
};
|
|
98
|
+
declare const TTS_PROVIDER: {
|
|
99
|
+
LOCAL_NEURAL: string;
|
|
100
|
+
BROWSER_SPEECH: string;
|
|
101
|
+
};
|
|
102
|
+
declare const DEFAULT_TTS_OPTIONS: {
|
|
103
|
+
provider: string;
|
|
104
|
+
fallbackProvider: string;
|
|
105
|
+
};
|
|
106
|
+
declare const DEFAULT_KEEPWORK_MODEL_CDN = "https://cdn.keepwork.com/keepwork/cdn/models";
|
|
107
|
+
/**
|
|
108
|
+
* Resolve the default model asset base at runtime.
|
|
109
|
+
* On localhost / LAN / file: serve from the local ./models directory;
|
|
110
|
+
* everywhere else (production Keepwork pages) use the CDN.
|
|
111
|
+
*/
|
|
112
|
+
declare function getDefaultModelAssetBase(): string;
|
|
113
|
+
declare const DEFAULT_LOCAL_NEURAL_TTS: {
|
|
114
|
+
numThreads: number;
|
|
115
|
+
executionProvider: string;
|
|
116
|
+
initTimeoutMs: number;
|
|
117
|
+
speed: number;
|
|
118
|
+
volume: number;
|
|
119
|
+
speakerId: number;
|
|
120
|
+
silenceScale: number;
|
|
121
|
+
maxNumSentences: number;
|
|
122
|
+
};
|
|
123
|
+
declare const DEFAULT_LOCAL_NEURAL_TTS_PRESET = "vits_melo_zh_en";
|
|
124
|
+
declare const DEFAULT_LOCAL_NEURAL_TTS_ASSET_BASE: string;
|
|
125
|
+
declare const LOCAL_NEURAL_TTS_PRESETS: Record<string, RTCLocalAny>;
|
|
126
|
+
declare const LOCAL_NEURAL_TTS_PRESET_ALIASES: Record<string, string>;
|
|
127
|
+
declare const DEFAULT_LOCAL_NEURAL_PRESET = "zipformer_small_bilingual_zh_en";
|
|
128
|
+
declare const DEFAULT_LOCAL_NEURAL_ASSET_BASE: string;
|
|
129
|
+
declare const LOCAL_NEURAL_ASR_PRESETS: Record<string, RTCLocalAny>;
|
|
130
|
+
declare const LOCAL_NEURAL_ASR_PRESET_ALIASES: Record<string, string>;
|
|
131
|
+
declare const DEFAULT_WHISPER_PRESET = "whisper_tiny_multilingual";
|
|
132
|
+
declare const LOCAL_WHISPER_ASR_PRESETS: Record<string, RTCLocalAny>;
|
|
133
|
+
declare const LOCAL_WHISPER_ASR_PRESET_ALIASES: Record<string, string>;
|
|
134
|
+
declare function normalizeASRProvider(provider: unknown): string;
|
|
135
|
+
declare function normalizeTTSProvider(provider: unknown): string;
|
|
136
|
+
declare function parseOptionalInteger(value: unknown): number | undefined;
|
|
137
|
+
declare function trimTrailingSlash(url: unknown): string;
|
|
138
|
+
declare function normalizeLocalNeuralTTSPreset(preset: unknown): string;
|
|
139
|
+
declare function isMixedChineseEnglishLanguage(language: unknown): boolean;
|
|
140
|
+
declare function hasWhisperASRHints(asrConfig?: RTCLocalAny): boolean;
|
|
141
|
+
declare function getDefaultASRFallbackProviders(preferredProvider: unknown): string[];
|
|
142
|
+
declare class BaseASRBackend {
|
|
143
|
+
session: RTCLocalAny;
|
|
144
|
+
config: RTCLocalAny;
|
|
145
|
+
name: string;
|
|
146
|
+
[key: string]: any;
|
|
147
|
+
constructor(session: RTCLocalAny, config?: RTCLocalAny);
|
|
148
|
+
initialize(): Promise<void>;
|
|
149
|
+
startUtterance(): Promise<void>;
|
|
150
|
+
submitBufferedAudio(..._args: unknown[]): Promise<void>;
|
|
151
|
+
stopUtterance(): Promise<void>;
|
|
152
|
+
attachMediaStream(..._args: unknown[]): Promise<void>;
|
|
153
|
+
destroy(): Promise<void>;
|
|
154
|
+
}
|
|
155
|
+
declare class WebSpeechASRBackend extends BaseASRBackend {
|
|
156
|
+
constructor(session: RTCLocalAny, config?: RTCLocalAny);
|
|
157
|
+
initialize(): Promise<void>;
|
|
158
|
+
startUtterance(): Promise<void>;
|
|
159
|
+
stopUtterance(): Promise<void>;
|
|
160
|
+
destroy(): Promise<void>;
|
|
161
|
+
}
|
|
162
|
+
declare class WhisperASRBackend extends BaseASRBackend {
|
|
163
|
+
constructor(session: RTCLocalAny, config?: RTCLocalAny);
|
|
164
|
+
initialize(): Promise<void>;
|
|
165
|
+
_resolveRuntimeConfig(): Promise<{
|
|
166
|
+
runtimeConfig: unknown;
|
|
167
|
+
recognizerConfig: unknown;
|
|
168
|
+
initTimeoutMs: any;
|
|
169
|
+
}>;
|
|
170
|
+
_resolveRemoteUrls(value: unknown): Promise<unknown>;
|
|
171
|
+
startUtterance(): Promise<void>;
|
|
172
|
+
submitBufferedAudio(samples: unknown, sampleRate?: number): Promise<void>;
|
|
173
|
+
stopUtterance(): Promise<void>;
|
|
174
|
+
destroy(): Promise<void>;
|
|
175
|
+
}
|
|
176
|
+
declare class LocalNeuralASRBackend extends BaseASRBackend {
|
|
177
|
+
constructor(session: RTCLocalAny, config?: RTCLocalAny);
|
|
178
|
+
initialize(): Promise<void>;
|
|
179
|
+
_resolveRuntimeConfig(): Promise<{
|
|
180
|
+
runtimeConfig: unknown;
|
|
181
|
+
recognizerConfig: unknown;
|
|
182
|
+
initTimeoutMs: any;
|
|
183
|
+
}>;
|
|
184
|
+
_resolveRemoteUrls(value: unknown): Promise<unknown>;
|
|
185
|
+
attachMediaStream(stream: RTCLocalAny): Promise<void>;
|
|
186
|
+
_teardownAudioTap(): Promise<void>;
|
|
187
|
+
startUtterance(): Promise<void>;
|
|
188
|
+
submitBufferedAudio(samples: unknown, sampleRate?: number): Promise<void>;
|
|
189
|
+
stopUtterance(): Promise<void>;
|
|
190
|
+
destroy(): Promise<void>;
|
|
191
|
+
}
|
|
192
|
+
declare class BaseTTSBackend {
|
|
193
|
+
session: RTCLocalAny;
|
|
194
|
+
config: RTCLocalAny;
|
|
195
|
+
name: string;
|
|
196
|
+
[key: string]: any;
|
|
197
|
+
constructor(session: RTCLocalAny, config?: RTCLocalAny);
|
|
198
|
+
initialize(): Promise<void>;
|
|
199
|
+
speak(..._args: unknown[]): Promise<void>;
|
|
200
|
+
cancel(): void;
|
|
201
|
+
destroy(): Promise<void>;
|
|
202
|
+
}
|
|
203
|
+
declare class BrowserSpeechTTSBackend extends BaseTTSBackend {
|
|
204
|
+
constructor(session: RTCLocalAny, config?: RTCLocalAny);
|
|
205
|
+
initialize(): Promise<void>;
|
|
206
|
+
speak(text: string, ttsConfig?: RTCLocalAny): Promise<void>;
|
|
207
|
+
cancel(): void;
|
|
208
|
+
destroy(): Promise<void>;
|
|
209
|
+
}
|
|
210
|
+
declare class LocalNeuralTTSBackend extends BaseTTSBackend {
|
|
211
|
+
constructor(session: RTCLocalAny, config?: RTCLocalAny);
|
|
212
|
+
initialize(): Promise<void>;
|
|
213
|
+
_resolveRuntimeConfig(): Promise<{
|
|
214
|
+
runtimeConfig: unknown;
|
|
215
|
+
offlineTtsConfig: unknown;
|
|
216
|
+
initTimeoutMs: any;
|
|
217
|
+
defaultSpeakerId: any;
|
|
218
|
+
sampleRate: any;
|
|
219
|
+
activePreset: RTCLocalAny;
|
|
220
|
+
}>;
|
|
221
|
+
_resolveRemoteUrls(value: unknown): Promise<unknown>;
|
|
222
|
+
_ensureAudioContext(): Promise<any>;
|
|
223
|
+
_synthesize(text: string, generationConfig: RTCLocalAny): Promise<RTCLocalAny>;
|
|
224
|
+
_playAudio(samples: unknown, sampleRate: number, speakToken: number, playbackVolume: number): Promise<void>;
|
|
225
|
+
speak(text: string, ttsConfig?: RTCLocalAny): Promise<void>;
|
|
226
|
+
cancel(): void;
|
|
227
|
+
destroy(): Promise<void>;
|
|
228
|
+
}
|
|
229
|
+
/** Sentence-end regex for TTS chunking (Chinese & Western punctuation + newlines) */
|
|
230
|
+
declare const SENTENCE_END_RE: RegExp;
|
|
231
|
+
export { BaseASRBackend, WebSpeechASRBackend, WhisperASRBackend, LocalNeuralASRBackend, BaseTTSBackend, BrowserSpeechTTSBackend, LocalNeuralTTSBackend, DEFAULT_VAD_CDN, DEFAULT_ASR_OPTIONS, DEFAULT_TTS_OPTIONS, DEFAULT_LOCAL_NEURAL_ASR, DEFAULT_WHISPER_ASR, DEFAULT_LOCAL_NEURAL_TTS, DEFAULT_LOCAL_NEURAL_TTS_PRESET, DEFAULT_LOCAL_NEURAL_TTS_ASSET_BASE, LOCAL_NEURAL_TTS_PRESETS, LOCAL_NEURAL_TTS_PRESET_ALIASES, DEFAULT_LOCAL_NEURAL_PRESET, DEFAULT_LOCAL_NEURAL_ASSET_BASE, LOCAL_NEURAL_ASR_PRESETS, LOCAL_NEURAL_ASR_PRESET_ALIASES, DEFAULT_WHISPER_PRESET, LOCAL_WHISPER_ASR_PRESETS, LOCAL_WHISPER_ASR_PRESET_ALIASES, DEFAULT_KEEPWORK_MODEL_CDN, getDefaultModelAssetBase, normalizeASRProvider, normalizeTTSProvider, parseOptionalInteger, trimTrailingSlash, normalizeLocalNeuralTTSPreset, isMixedChineseEnglishLanguage, hasWhisperASRHints, getDefaultASRFallbackProviders, DEFAULT_ASSET_CACHE, ENERGY_VAD, DEFAULT_AUDIO_CONSTRAINTS, ASR_PROVIDER, TTS_PROVIDER, SENTENCE_END_RE, };
|
|
232
|
+
//# sourceMappingURL=AIChatRTCLocal.backends.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIChatRTCLocal.backends.d.ts","sourceRoot":"","sources":["../../../../src/rtc/AIChatRTCLocal.backends.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AIChatRTCLocal.core.ts — AIChatRTCLocal 主类
|
|
3
|
+
*
|
|
4
|
+
* 提供 createSession() 入口,管理共享单例和会话生命周期。
|
|
5
|
+
* backend 类在 AIChatRTCLocal.backends.ts,会话类在 AIChatRTCLocal.session.ts。
|
|
6
|
+
*/
|
|
7
|
+
import { AGENT_STATE } from './AIChatRTC';
|
|
8
|
+
import LocalRTCSession from './AIChatRTCLocal.session';
|
|
9
|
+
type CoreAny = Record<string, any>;
|
|
10
|
+
declare class AIChatRTCLocal {
|
|
11
|
+
static AGENT_STATE: {
|
|
12
|
+
UNKNOWN: number;
|
|
13
|
+
LISTENING: number;
|
|
14
|
+
THINKING: number;
|
|
15
|
+
SPEAKING: number;
|
|
16
|
+
INTERRUPTED: number;
|
|
17
|
+
FINISHED: number;
|
|
18
|
+
};
|
|
19
|
+
static AGENT_STATE_LABELS: {
|
|
20
|
+
[AGENT_STATE.UNKNOWN]: string;
|
|
21
|
+
[AGENT_STATE.LISTENING]: string;
|
|
22
|
+
[AGENT_STATE.THINKING]: string;
|
|
23
|
+
[AGENT_STATE.SPEAKING]: string;
|
|
24
|
+
[AGENT_STATE.INTERRUPTED]: string;
|
|
25
|
+
[AGENT_STATE.FINISHED]: string;
|
|
26
|
+
};
|
|
27
|
+
static LOCAL_NEURAL_ASR_PRESETS: Record<string, {
|
|
28
|
+
[x: string]: any;
|
|
29
|
+
}>;
|
|
30
|
+
static DEFAULT_LOCAL_NEURAL_PRESET: string;
|
|
31
|
+
static LOCAL_WHISPER_ASR_PRESETS: Record<string, {
|
|
32
|
+
[x: string]: any;
|
|
33
|
+
}>;
|
|
34
|
+
static DEFAULT_WHISPER_PRESET: string;
|
|
35
|
+
sdk: CoreAny;
|
|
36
|
+
_loadPromise: Promise<void> | null;
|
|
37
|
+
_assetDBPromise: Promise<unknown> | null;
|
|
38
|
+
_assetBlobUrls: Map<string, string>;
|
|
39
|
+
[key: string]: any;
|
|
40
|
+
/**
|
|
41
|
+
* @param {Object} sdk - KeepworkSDK instance
|
|
42
|
+
* @param {Object} [options]
|
|
43
|
+
* @param {string} [options.ortUrl] - Override ORT standalone script CDN URL
|
|
44
|
+
* @param {string} [options.onnxWASMBasePath] - Override ONNX WASM CDN base
|
|
45
|
+
* @param {string} [options.vadBundleUrl] - Override VAD bundle CDN URL
|
|
46
|
+
* @param {string} [options.vadModelURL] - Override Silero model URL
|
|
47
|
+
* @param {string} [options.vadWorkletURL] - Override VAD worklet URL
|
|
48
|
+
* @param {boolean} [options.cacheBinaryAssetsToIndexedDB=false] - Cache ONNX/WASM blobs in IndexedDB
|
|
49
|
+
* @param {string} [options.assetCacheNamespace] - Cache namespace/version for invalidation
|
|
50
|
+
*/
|
|
51
|
+
constructor(sdk: unknown, options?: CoreAny);
|
|
52
|
+
/**
|
|
53
|
+
* Preload the Silero VAD library. Called automatically by session.start(),
|
|
54
|
+
* but can be invoked earlier for faster startup.
|
|
55
|
+
* If loading fails, sessions will fall back to energy-based VAD.
|
|
56
|
+
* @returns {Promise<void>}
|
|
57
|
+
*/
|
|
58
|
+
loadSDK(): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* Load ORT + VAD scripts sequentially.
|
|
61
|
+
* ORT must be loaded first (window.ort) because vad-web's bundle.min.js
|
|
62
|
+
* declares onnxruntime-web as an external and reads window.ort at init time.
|
|
63
|
+
*/
|
|
64
|
+
_loadScripts(): Promise<void>;
|
|
65
|
+
/** Load a single script tag and return a promise. */
|
|
66
|
+
_loadScript(url: string): Promise<void>;
|
|
67
|
+
_resolveBinaryAssetUrls(): Promise<{
|
|
68
|
+
modelURL: any;
|
|
69
|
+
wasmPaths: any;
|
|
70
|
+
}>;
|
|
71
|
+
_getOrCacheBinaryAssetURL(remoteUrl: string, fileName: string): Promise<string | null | undefined>;
|
|
72
|
+
_rememberBlobURL(cacheKey: string, blob: Blob): string;
|
|
73
|
+
_getAssetDB(): Promise<unknown>;
|
|
74
|
+
_withAssetStore(mode: IDBTransactionMode, callback: (store: CoreAny, resolve: (v?: unknown) => void, reject: (e?: unknown) => void) => void): Promise<unknown>;
|
|
75
|
+
_readCachedBinaryAsset(cacheKey: string): Promise<unknown>;
|
|
76
|
+
_writeCachedBinaryAsset(cacheKey: string, record: CoreAny): Promise<unknown>;
|
|
77
|
+
/**
|
|
78
|
+
* Create a new local voice chat session.
|
|
79
|
+
* @param {Object} config - Session configuration (compatible with AIChatRTC.createSession)
|
|
80
|
+
* @param {Object} [config.agentConfig] - Agent config (WelcomeMessage, SystemMessages, etc.)
|
|
81
|
+
* @param {Object} [config.config] - Config block (LLMConfig, ASRConfig, TTSConfig)
|
|
82
|
+
* @param {string} [config.workspace] - SandboxToolEnv workspace name
|
|
83
|
+
* @param {string[]} [config.enabledToolCategories=['fileOps','agent']] - Tool categories for SandboxToolEnv
|
|
84
|
+
* @param {Array} [config.tools] - Additional custom tool definitions (OpenAI format)
|
|
85
|
+
* @param {Object} [config.toolProxy] - Tool proxy config for AgentRouter
|
|
86
|
+
* @returns {LocalRTCSession}
|
|
87
|
+
*/
|
|
88
|
+
createSession(config?: {}): LocalRTCSession;
|
|
89
|
+
}
|
|
90
|
+
export default AIChatRTCLocal;
|
|
91
|
+
export { AIChatRTCLocal };
|
|
92
|
+
//# sourceMappingURL=AIChatRTCLocal.core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIChatRTCLocal.core.d.ts","sourceRoot":"","sources":["../../../../src/rtc/AIChatRTCLocal.core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAsB,MAAM,aAAa,CAAC;AAgB9D,OAAO,eAAe,MAAM,0BAA0B,CAAC;AAIvD,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAInC,cAAM,cAAc;IAClB,MAAM,CAAC,WAAW;;;;;;;MAAe;IACjC,MAAM,CAAC,kBAAkB;QAjB4B,CAAI,WAClD,CAAC,OAAO,CAAC;QAAM,CAAI,WAAW,CAAC,SAAS,CAAC;QAChD,CAAE,WAAW,CAAC,QAAQ,CAAC;QAAa,CAAI,WAAW,CAAC,QACrD,CAAC;QAAa,CAAI,WAAW,CAAC,WAAW,CAAC;QAAgB,CAAI,WAAW,CAAC,QAAQ,CAAC;MAcnC;IAC/C,MAAM,CAAC,wBAAwB;;OAA4B;IAC3D,MAAM,CAAC,2BAA2B,SAA+B;IACjE,MAAM,CAAC,yBAAyB;;OAA6B;IAC7D,MAAM,CAAC,sBAAsB,SAA0B;IAEvD,GAAG,EAAE,OAAO,CAAC;IACb,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAQ;IAC1C,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAQ;IAChD,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAa;IAEhD,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IAEnB;;;;;;;;;;OAUG;gBACS,GAAG,EAAE,OAAO,EAAE,OAAO,GAAE,OAAY;IAgB/C;;;;;OAKG;IACH,OAAO;IAqBP;;;;OAIG;IACG,YAAY;IAqBlB,qDAAqD;IACrD,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjC,uBAAuB;;;;IA6BvB,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAkCnE,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI;IAM7C,WAAW;IA6BL,eAAe,CAAC,IAAI,EAAE,kBAAkB,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI;IAa3I,sBAAsB,CAAC,QAAQ,EAAE,MAAM;IAWvC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAQ/D;;;;;;;;;;OAUG;IACH,aAAa,CAAC,MAAM,KAAK;CAG1B;AAQD,eAAe,cAAc,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AIChatRTCLocal.ts — 本地语音会话模块入口
|
|
3
|
+
*
|
|
4
|
+
* 拆分结构:
|
|
5
|
+
* - AIChatRTCLocal.backends.ts : ASR/TTS backend 类
|
|
6
|
+
* - AIChatRTCLocal.core.ts : AIChatRTCLocal 主类
|
|
7
|
+
* - AIChatRTCLocal.session.ts : LocalRTCSession 会话类
|
|
8
|
+
*/
|
|
9
|
+
import './AIChatRTCLocal.backends';
|
|
10
|
+
import _AIChatRTCLocal from './AIChatRTCLocal.core';
|
|
11
|
+
import { LocalRTCSession } from './AIChatRTCLocal.session';
|
|
12
|
+
declare const AIChatRTCLocal: typeof _AIChatRTCLocal;
|
|
13
|
+
export default AIChatRTCLocal;
|
|
14
|
+
export { AIChatRTCLocal, LocalRTCSession };
|
|
15
|
+
//# sourceMappingURL=AIChatRTCLocal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIChatRTCLocal.d.ts","sourceRoot":"","sources":["../../../../src/rtc/AIChatRTCLocal.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,2BAA2B,CAAC;AACnC,OAAO,eAAe,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D,QAAA,MAAM,cAAc,wBAAkB,CAAC;AACvC,eAAe,cAAc,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,CAAC"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AIChatRTCLocal.session.ts — LocalRTCSession
|
|
3
|
+
*
|
|
4
|
+
* 管理单次本地语音会话生命周期:VAD → ASR → LLM → TTS。
|
|
5
|
+
* 依赖 ChildSessionMixin、SandboxToolEnv、backend 类。
|
|
6
|
+
*/
|
|
7
|
+
import { WebSpeechASRBackend, WhisperASRBackend, LocalNeuralASRBackend, BrowserSpeechTTSBackend, LocalNeuralTTSBackend } from './AIChatRTCLocal.backends';
|
|
8
|
+
type SessAny = Record<string, any>;
|
|
9
|
+
declare class LocalRTCSession {
|
|
10
|
+
parent: SessAny;
|
|
11
|
+
sdk: SessAny;
|
|
12
|
+
_cleanupChildSessions: () => void;
|
|
13
|
+
_cancelDebounceTimers: () => void;
|
|
14
|
+
_consumePendingChildResults: () => unknown[];
|
|
15
|
+
[key: string]: any;
|
|
16
|
+
/**
|
|
17
|
+
* @param {AIChatRTCLocal} parent - Parent AIChatRTCLocal instance
|
|
18
|
+
* @param {Object} config - Session configuration
|
|
19
|
+
*/
|
|
20
|
+
constructor(parent: SessAny, config?: SessAny);
|
|
21
|
+
on(event: string, callback: (data?: unknown) => void): this;
|
|
22
|
+
off(event: string, callback: (data?: unknown) => void): this;
|
|
23
|
+
emit(event: string, data?: unknown): void;
|
|
24
|
+
/**
|
|
25
|
+
* Start the session: load VAD SDK → request mic → init VAD + STT.
|
|
26
|
+
* @returns {Promise<void>}
|
|
27
|
+
*/
|
|
28
|
+
start(): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Stop the session and release all resources.
|
|
31
|
+
* @returns {Promise<void>}
|
|
32
|
+
*/
|
|
33
|
+
stop(): Promise<void>;
|
|
34
|
+
/** Alias for stop() */
|
|
35
|
+
destroy(): Promise<void>;
|
|
36
|
+
_cleanup(): void;
|
|
37
|
+
_mergeConfigSection(currentConfig?: SessAny, nextConfig?: SessAny): SessAny;
|
|
38
|
+
_buildTTSBackendSignature(ttsConfig?: SessAny): string;
|
|
39
|
+
_reloadTTSBackend(): Promise<void>;
|
|
40
|
+
updateTTSConfig(nextTTSConfig?: SessAny, options?: SessAny): Promise<{
|
|
41
|
+
applied: boolean;
|
|
42
|
+
reinitialized: boolean;
|
|
43
|
+
}>;
|
|
44
|
+
/**
|
|
45
|
+
* Send text to the LLM (bypass voice pipeline).
|
|
46
|
+
* @param {string} text
|
|
47
|
+
*/
|
|
48
|
+
sendText(text: string): void;
|
|
49
|
+
/**
|
|
50
|
+
* Interrupt: cancel TTS + abort LLM.
|
|
51
|
+
*/
|
|
52
|
+
interrupt(): void;
|
|
53
|
+
/**
|
|
54
|
+
* Mute: pause VAD (stop detecting speech).
|
|
55
|
+
*/
|
|
56
|
+
mute(): void;
|
|
57
|
+
/**
|
|
58
|
+
* Unmute: resume VAD.
|
|
59
|
+
*/
|
|
60
|
+
unmute(): void;
|
|
61
|
+
/**
|
|
62
|
+
* Get accumulated conversation history.
|
|
63
|
+
* @returns {Array<{ role: string, text: string, roundId: string|null }>}
|
|
64
|
+
*/
|
|
65
|
+
getHistory(): any[];
|
|
66
|
+
/** Clear conversation history. */
|
|
67
|
+
clear(): void;
|
|
68
|
+
_getAudioConstraints(): any;
|
|
69
|
+
_getMicrophoneStream(): Promise<MediaStream>;
|
|
70
|
+
_releaseMediaStream(stream?: any): void;
|
|
71
|
+
_initSileroVAD(): Promise<void>;
|
|
72
|
+
_initEnergyVAD(): Promise<void>;
|
|
73
|
+
_onSpeechStart(): void;
|
|
74
|
+
_onSpeechEnd(audio?: SessAny): void;
|
|
75
|
+
_initializeASRBackend(): Promise<void>;
|
|
76
|
+
_createASRBackend(provider: string, asrConfig: SessAny): WebSpeechASRBackend | WhisperASRBackend | LocalNeuralASRBackend | null;
|
|
77
|
+
_emitASRStatus(phase: string, extra?: SessAny): void;
|
|
78
|
+
_initializeTTSBackend(): Promise<void>;
|
|
79
|
+
_createTTSBackend(provider: string, ttsConfig: SessAny): BrowserSpeechTTSBackend | LocalNeuralTTSBackend | null;
|
|
80
|
+
_emitTTSStatus(phase: string, extra?: SessAny): void;
|
|
81
|
+
_resolveLocalNeuralTTSSpeakerId(ttsConfig: SessAny, defaultSpeakerId: number): number | undefined;
|
|
82
|
+
_notifyMediaStreamChanged(stream: SessAny | null): void;
|
|
83
|
+
_beginRecognitionRound(): void;
|
|
84
|
+
_handleASRInterimText(text: string): void;
|
|
85
|
+
_handleASRFinalText(text: string): void;
|
|
86
|
+
_handleASRUtteranceEnd(): void;
|
|
87
|
+
_handleASRError(message: unknown, { fatal }?: {
|
|
88
|
+
fatal?: boolean;
|
|
89
|
+
}): void;
|
|
90
|
+
_startRecognition(): Promise<void>;
|
|
91
|
+
_stopRecognition(): Promise<void>;
|
|
92
|
+
_finalizeSpeech(): void;
|
|
93
|
+
_sendToLLM(userText: string, roundId: unknown): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* Execute one LLM round. If the LLM returns tool_calls, execute them and recurse.
|
|
96
|
+
* @param {string} roundId
|
|
97
|
+
* @param {Array} tools - Tool definitions for the LLM
|
|
98
|
+
* @param {number} iteration - Current iteration (guards against runaway loops)
|
|
99
|
+
*/
|
|
100
|
+
_llmRound(roundId: unknown, tools: unknown, iteration: number): Promise<void>;
|
|
101
|
+
_getSystemMessages(): any[];
|
|
102
|
+
/**
|
|
103
|
+
* Expand all ${...} template expressions in SystemMessages using the sandbox.
|
|
104
|
+
* Called once during start().
|
|
105
|
+
*/
|
|
106
|
+
_expandSystemMessages(): Promise<void>;
|
|
107
|
+
/**
|
|
108
|
+
* Split buffered text on sentence boundaries and enqueue complete sentences.
|
|
109
|
+
*/
|
|
110
|
+
_flushSentencesToTTS(): void;
|
|
111
|
+
_enqueueTTS(text: string): void;
|
|
112
|
+
_cancelTTS(): void;
|
|
113
|
+
_drainTTSQueue(): Promise<void>;
|
|
114
|
+
_startTTSLevelTimer(): void;
|
|
115
|
+
_stopTTSLevelTimer(): void;
|
|
116
|
+
_applyTTSConfig(utterance: SessAny, ttsConfig: SessAny): void;
|
|
117
|
+
_selectVoice(utterance: SessAny, voiceType: string, lang: string): void;
|
|
118
|
+
/**
|
|
119
|
+
* Speak text directly (utility method, bypasses queue).
|
|
120
|
+
*/
|
|
121
|
+
_speak(text: string): void;
|
|
122
|
+
_setState(code: number): void;
|
|
123
|
+
_addHistory(role: string, text: string, roundId?: unknown): void;
|
|
124
|
+
}
|
|
125
|
+
export default LocalRTCSession;
|
|
126
|
+
export { LocalRTCSession };
|
|
127
|
+
//# sourceMappingURL=AIChatRTCLocal.session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AIChatRTCLocal.session.d.ts","sourceRoot":"","sources":["../../../../src/rtc/AIChatRTCLocal.session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LocalRTC.ts — SherpaOnnxLocalRTC 的 KeepworkSDK 薄封装
|
|
3
|
+
*
|
|
4
|
+
* 将运行时 CDN 加载的 `window.SherpaOnnxLocalRTC` 重新导出为 `LocalRTC`,
|
|
5
|
+
* 供 SDK 内部统一引用。
|
|
6
|
+
*
|
|
7
|
+
* 前置依赖(须在此模块前加载):
|
|
8
|
+
* ```html
|
|
9
|
+
* <script src="https://cdn.keepwork.com/npm/sherpaonnx-full-js/sherpa-onnx-local-rtc.js"></script>
|
|
10
|
+
* ```
|
|
11
|
+
*
|
|
12
|
+
* 该脚本在 window 上挂载 `SherpaOnnxLocalRTC`,提供 KWS + ASR 功能。
|
|
13
|
+
* 未加载时 `LocalRTC` 为 `null`,使用前需检查。
|
|
14
|
+
*
|
|
15
|
+
* @see LocalRTC.js 中的完整 JSDoc(含构造选项、状态机、所有方法说明)
|
|
16
|
+
*/
|
|
17
|
+
/** SherpaOnnxLocalRTC 实例选项(简化类型,运行时由 CDN 库实现) */
|
|
18
|
+
export interface LocalRTCOptions {
|
|
19
|
+
baseUrl?: string;
|
|
20
|
+
kwsKeywords?: Array<{
|
|
21
|
+
phonemes: string;
|
|
22
|
+
keyword: string;
|
|
23
|
+
type?: 'start' | 'stop';
|
|
24
|
+
}>;
|
|
25
|
+
kwsThreshold?: number;
|
|
26
|
+
asrRuntime?: 'wasm' | 'android';
|
|
27
|
+
minAudioRms?: number;
|
|
28
|
+
vadConfig?: {
|
|
29
|
+
enabled?: boolean;
|
|
30
|
+
threshold?: number;
|
|
31
|
+
minSilenceDuration?: number;
|
|
32
|
+
minSpeechDuration?: number;
|
|
33
|
+
};
|
|
34
|
+
audioSource?: 'voice_communication' | 'voice_recognition' | 'mic';
|
|
35
|
+
aecEnabled?: boolean;
|
|
36
|
+
bargeInThreshold?: number;
|
|
37
|
+
bargeInMinFrames?: number;
|
|
38
|
+
onLog?: (msg: string) => void;
|
|
39
|
+
onError?: (msg: string) => void;
|
|
40
|
+
onProgress?: (label: string, pct: number, source: string) => void;
|
|
41
|
+
onStateChange?: (newState: string, oldState: string) => void;
|
|
42
|
+
onKwsDetected?: (keyword: string, action: 'start' | 'stop' | 'wakeup') => void;
|
|
43
|
+
onAsrResult?: (text: string, allResults: string[]) => void;
|
|
44
|
+
onAsrPartial?: (text: string) => void;
|
|
45
|
+
onBargeIn?: (rms: number) => void;
|
|
46
|
+
[key: string]: unknown;
|
|
47
|
+
}
|
|
48
|
+
/** SherpaOnnxLocalRTC 实例最小接口 */
|
|
49
|
+
export interface LocalRTCInstance {
|
|
50
|
+
init(): Promise<void>;
|
|
51
|
+
preloadKws(): Promise<void>;
|
|
52
|
+
preloadAsr(): Promise<void>;
|
|
53
|
+
start(): Promise<void>;
|
|
54
|
+
stop(): void;
|
|
55
|
+
destroy(): void;
|
|
56
|
+
switchToKws(): void;
|
|
57
|
+
switchToAsr(): Promise<boolean>;
|
|
58
|
+
stopAsr(): void;
|
|
59
|
+
pauseAsr(): Promise<void>;
|
|
60
|
+
resumeAsr(): Promise<void>;
|
|
61
|
+
isAsrPaused(): boolean;
|
|
62
|
+
getState(): string;
|
|
63
|
+
getVersion(): string;
|
|
64
|
+
getAsrResults(): string[];
|
|
65
|
+
getAsrLastResult(): string;
|
|
66
|
+
clearAsrResults(): void;
|
|
67
|
+
setKwsKeywords(keywords: LocalRTCOptions['kwsKeywords']): void;
|
|
68
|
+
setKwsThreshold(threshold: number): void;
|
|
69
|
+
setAecEnabled(enabled: boolean): void;
|
|
70
|
+
setMinAudioRms(val: number): void;
|
|
71
|
+
getAsrRuntime(): 'wasm' | 'android';
|
|
72
|
+
needsWasm(): boolean;
|
|
73
|
+
[key: string]: unknown;
|
|
74
|
+
}
|
|
75
|
+
/** LocalRTC 构造函数类型(可能为 null,取决于 CDN 是否已加载) */
|
|
76
|
+
export type LocalRTCConstructor = ((new (options: LocalRTCOptions) => LocalRTCInstance) & {
|
|
77
|
+
STATE: {
|
|
78
|
+
IDLE: string;
|
|
79
|
+
KWS: string;
|
|
80
|
+
ASR: string;
|
|
81
|
+
};
|
|
82
|
+
Cache?: unknown;
|
|
83
|
+
samplesToWav?(samples: Float32Array, sampleRate: number): Blob;
|
|
84
|
+
isLikelyEcho?(asrText: string, ttsText: string, opts?: {
|
|
85
|
+
prefixRatio?: number;
|
|
86
|
+
bigramRatio?: number;
|
|
87
|
+
}): boolean;
|
|
88
|
+
}) | null;
|
|
89
|
+
declare const LocalRTC: LocalRTCConstructor;
|
|
90
|
+
export default LocalRTC;
|
|
91
|
+
//# sourceMappingURL=LocalRTC.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LocalRTC.d.ts","sourceRoot":"","sources":["../../../../src/rtc/LocalRTC.ts"],"names":[],"mappings":"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"}
|