@runanywhere/web 0.1.0-beta.1
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 +795 -0
- package/dist/Foundation/ErrorTypes.d.ts +61 -0
- package/dist/Foundation/ErrorTypes.d.ts.map +1 -0
- package/dist/Foundation/ErrorTypes.js +90 -0
- package/dist/Foundation/ErrorTypes.js.map +1 -0
- package/dist/Foundation/EventBus.d.ts +171 -0
- package/dist/Foundation/EventBus.d.ts.map +1 -0
- package/dist/Foundation/EventBus.js +113 -0
- package/dist/Foundation/EventBus.js.map +1 -0
- package/dist/Foundation/PlatformAdapter.d.ts +101 -0
- package/dist/Foundation/PlatformAdapter.d.ts.map +1 -0
- package/dist/Foundation/PlatformAdapter.js +417 -0
- package/dist/Foundation/PlatformAdapter.js.map +1 -0
- package/dist/Foundation/SDKLogger.d.ts +33 -0
- package/dist/Foundation/SDKLogger.d.ts.map +1 -0
- package/dist/Foundation/SDKLogger.js +82 -0
- package/dist/Foundation/SDKLogger.js.map +1 -0
- package/dist/Foundation/SherpaONNXBridge.d.ts +134 -0
- package/dist/Foundation/SherpaONNXBridge.d.ts.map +1 -0
- package/dist/Foundation/SherpaONNXBridge.js +332 -0
- package/dist/Foundation/SherpaONNXBridge.js.map +1 -0
- package/dist/Foundation/StructOffsets.d.ts +147 -0
- package/dist/Foundation/StructOffsets.d.ts.map +1 -0
- package/dist/Foundation/StructOffsets.js +161 -0
- package/dist/Foundation/StructOffsets.js.map +1 -0
- package/dist/Foundation/WASMBridge.d.ts +241 -0
- package/dist/Foundation/WASMBridge.d.ts.map +1 -0
- package/dist/Foundation/WASMBridge.js +393 -0
- package/dist/Foundation/WASMBridge.js.map +1 -0
- package/dist/Infrastructure/ArchiveUtility.d.ts +25 -0
- package/dist/Infrastructure/ArchiveUtility.d.ts.map +1 -0
- package/dist/Infrastructure/ArchiveUtility.js +139 -0
- package/dist/Infrastructure/ArchiveUtility.js.map +1 -0
- package/dist/Infrastructure/AudioCapture.d.ts +87 -0
- package/dist/Infrastructure/AudioCapture.d.ts.map +1 -0
- package/dist/Infrastructure/AudioCapture.js +231 -0
- package/dist/Infrastructure/AudioCapture.js.map +1 -0
- package/dist/Infrastructure/AudioPlayback.d.ts +53 -0
- package/dist/Infrastructure/AudioPlayback.d.ts.map +1 -0
- package/dist/Infrastructure/AudioPlayback.js +117 -0
- package/dist/Infrastructure/AudioPlayback.js.map +1 -0
- package/dist/Infrastructure/DeviceCapabilities.d.ts +39 -0
- package/dist/Infrastructure/DeviceCapabilities.d.ts.map +1 -0
- package/dist/Infrastructure/DeviceCapabilities.js +111 -0
- package/dist/Infrastructure/DeviceCapabilities.js.map +1 -0
- package/dist/Infrastructure/ExtensionRegistry.d.ts +30 -0
- package/dist/Infrastructure/ExtensionRegistry.d.ts.map +1 -0
- package/dist/Infrastructure/ExtensionRegistry.js +41 -0
- package/dist/Infrastructure/ExtensionRegistry.js.map +1 -0
- package/dist/Infrastructure/ModelDownloader.d.ts +98 -0
- package/dist/Infrastructure/ModelDownloader.d.ts.map +1 -0
- package/dist/Infrastructure/ModelDownloader.js +431 -0
- package/dist/Infrastructure/ModelDownloader.js.map +1 -0
- package/dist/Infrastructure/ModelLoaderTypes.d.ts +34 -0
- package/dist/Infrastructure/ModelLoaderTypes.d.ts.map +1 -0
- package/dist/Infrastructure/ModelLoaderTypes.js +12 -0
- package/dist/Infrastructure/ModelLoaderTypes.js.map +1 -0
- package/dist/Infrastructure/ModelManager.d.ts +219 -0
- package/dist/Infrastructure/ModelManager.d.ts.map +1 -0
- package/dist/Infrastructure/ModelManager.js +885 -0
- package/dist/Infrastructure/ModelManager.js.map +1 -0
- package/dist/Infrastructure/ModelRegistry.d.ts +131 -0
- package/dist/Infrastructure/ModelRegistry.d.ts.map +1 -0
- package/dist/Infrastructure/ModelRegistry.js +122 -0
- package/dist/Infrastructure/ModelRegistry.js.map +1 -0
- package/dist/Infrastructure/OPFSStorage.d.ts +143 -0
- package/dist/Infrastructure/OPFSStorage.d.ts.map +1 -0
- package/dist/Infrastructure/OPFSStorage.js +330 -0
- package/dist/Infrastructure/OPFSStorage.js.map +1 -0
- package/dist/Infrastructure/VLMWorkerBridge.d.ts +211 -0
- package/dist/Infrastructure/VLMWorkerBridge.d.ts.map +1 -0
- package/dist/Infrastructure/VLMWorkerBridge.js +264 -0
- package/dist/Infrastructure/VLMWorkerBridge.js.map +1 -0
- package/dist/Infrastructure/VLMWorkerRuntime.d.ts +38 -0
- package/dist/Infrastructure/VLMWorkerRuntime.d.ts.map +1 -0
- package/dist/Infrastructure/VLMWorkerRuntime.js +503 -0
- package/dist/Infrastructure/VLMWorkerRuntime.js.map +1 -0
- package/dist/Infrastructure/VideoCapture.d.ts +118 -0
- package/dist/Infrastructure/VideoCapture.d.ts.map +1 -0
- package/dist/Infrastructure/VideoCapture.js +207 -0
- package/dist/Infrastructure/VideoCapture.js.map +1 -0
- package/dist/Public/Extensions/DiffusionTypes.d.ts +64 -0
- package/dist/Public/Extensions/DiffusionTypes.d.ts.map +1 -0
- package/dist/Public/Extensions/DiffusionTypes.js +28 -0
- package/dist/Public/Extensions/DiffusionTypes.js.map +1 -0
- package/dist/Public/Extensions/EmbeddingsTypes.d.ts +33 -0
- package/dist/Public/Extensions/EmbeddingsTypes.d.ts.map +1 -0
- package/dist/Public/Extensions/EmbeddingsTypes.js +13 -0
- package/dist/Public/Extensions/EmbeddingsTypes.js.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+Diffusion.d.ts +44 -0
- package/dist/Public/Extensions/RunAnywhere+Diffusion.d.ts.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+Diffusion.js +189 -0
- package/dist/Public/Extensions/RunAnywhere+Diffusion.js.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+Embeddings.d.ts +56 -0
- package/dist/Public/Extensions/RunAnywhere+Embeddings.d.ts.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+Embeddings.js +240 -0
- package/dist/Public/Extensions/RunAnywhere+Embeddings.js.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+ModelManagement.d.ts +53 -0
- package/dist/Public/Extensions/RunAnywhere+ModelManagement.d.ts.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+ModelManagement.js +153 -0
- package/dist/Public/Extensions/RunAnywhere+ModelManagement.js.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+STT.d.ts +95 -0
- package/dist/Public/Extensions/RunAnywhere+STT.d.ts.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+STT.js +417 -0
- package/dist/Public/Extensions/RunAnywhere+STT.js.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+StructuredOutput.d.ts +69 -0
- package/dist/Public/Extensions/RunAnywhere+StructuredOutput.d.ts.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+StructuredOutput.js +196 -0
- package/dist/Public/Extensions/RunAnywhere+StructuredOutput.js.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+TTS.d.ts +55 -0
- package/dist/Public/Extensions/RunAnywhere+TTS.d.ts.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+TTS.js +253 -0
- package/dist/Public/Extensions/RunAnywhere+TTS.js.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+TextGeneration.d.ts +80 -0
- package/dist/Public/Extensions/RunAnywhere+TextGeneration.d.ts.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+TextGeneration.js +436 -0
- package/dist/Public/Extensions/RunAnywhere+TextGeneration.js.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+ToolCalling.d.ts +82 -0
- package/dist/Public/Extensions/RunAnywhere+ToolCalling.d.ts.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+ToolCalling.js +576 -0
- package/dist/Public/Extensions/RunAnywhere+ToolCalling.js.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+VAD.d.ts +70 -0
- package/dist/Public/Extensions/RunAnywhere+VAD.d.ts.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+VAD.js +231 -0
- package/dist/Public/Extensions/RunAnywhere+VAD.js.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+VLM.d.ts +58 -0
- package/dist/Public/Extensions/RunAnywhere+VLM.d.ts.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+VLM.js +262 -0
- package/dist/Public/Extensions/RunAnywhere+VLM.js.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+VoiceAgent.d.ts +49 -0
- package/dist/Public/Extensions/RunAnywhere+VoiceAgent.d.ts.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+VoiceAgent.js +222 -0
- package/dist/Public/Extensions/RunAnywhere+VoiceAgent.js.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+VoicePipeline.d.ts +63 -0
- package/dist/Public/Extensions/RunAnywhere+VoicePipeline.d.ts.map +1 -0
- package/dist/Public/Extensions/RunAnywhere+VoicePipeline.js +168 -0
- package/dist/Public/Extensions/RunAnywhere+VoicePipeline.js.map +1 -0
- package/dist/Public/Extensions/STTTypes.d.ts +53 -0
- package/dist/Public/Extensions/STTTypes.d.ts.map +1 -0
- package/dist/Public/Extensions/STTTypes.js +16 -0
- package/dist/Public/Extensions/STTTypes.js.map +1 -0
- package/dist/Public/Extensions/TTSTypes.d.ts +31 -0
- package/dist/Public/Extensions/TTSTypes.d.ts.map +1 -0
- package/dist/Public/Extensions/TTSTypes.js +3 -0
- package/dist/Public/Extensions/TTSTypes.js.map +1 -0
- package/dist/Public/Extensions/ToolCallingTypes.d.ts +78 -0
- package/dist/Public/Extensions/ToolCallingTypes.d.ts.map +1 -0
- package/dist/Public/Extensions/ToolCallingTypes.js +8 -0
- package/dist/Public/Extensions/ToolCallingTypes.js.map +1 -0
- package/dist/Public/Extensions/VADTypes.d.ts +30 -0
- package/dist/Public/Extensions/VADTypes.d.ts.map +1 -0
- package/dist/Public/Extensions/VADTypes.js +8 -0
- package/dist/Public/Extensions/VADTypes.js.map +1 -0
- package/dist/Public/Extensions/VLMTypes.d.ts +56 -0
- package/dist/Public/Extensions/VLMTypes.d.ts.map +1 -0
- package/dist/Public/Extensions/VLMTypes.js +24 -0
- package/dist/Public/Extensions/VLMTypes.js.map +1 -0
- package/dist/Public/Extensions/VoiceAgentTypes.d.ts +42 -0
- package/dist/Public/Extensions/VoiceAgentTypes.d.ts.map +1 -0
- package/dist/Public/Extensions/VoiceAgentTypes.js +12 -0
- package/dist/Public/Extensions/VoiceAgentTypes.js.map +1 -0
- package/dist/Public/Extensions/VoicePipelineTypes.d.ts +69 -0
- package/dist/Public/Extensions/VoicePipelineTypes.d.ts.map +1 -0
- package/dist/Public/Extensions/VoicePipelineTypes.js +9 -0
- package/dist/Public/Extensions/VoicePipelineTypes.js.map +1 -0
- package/dist/Public/RunAnywhere.d.ts +121 -0
- package/dist/Public/RunAnywhere.d.ts.map +1 -0
- package/dist/Public/RunAnywhere.js +332 -0
- package/dist/Public/RunAnywhere.js.map +1 -0
- package/dist/index.d.ts +67 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/types/LLMTypes.d.ts +48 -0
- package/dist/types/LLMTypes.d.ts.map +1 -0
- package/dist/types/LLMTypes.js +8 -0
- package/dist/types/LLMTypes.js.map +1 -0
- package/dist/types/enums.d.ts +144 -0
- package/dist/types/enums.d.ts.map +1 -0
- package/dist/types/enums.js +159 -0
- package/dist/types/enums.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/models.d.ts +154 -0
- package/dist/types/models.d.ts.map +1 -0
- package/dist/types/models.js +8 -0
- package/dist/types/models.js.map +1 -0
- package/dist/workers/vlm-worker.d.ts +9 -0
- package/dist/workers/vlm-worker.d.ts.map +1 -0
- package/dist/workers/vlm-worker.js +10 -0
- package/dist/workers/vlm-worker.js.map +1 -0
- package/package.json +62 -0
- package/wasm/racommons-webgpu.js +156 -0
- package/wasm/racommons-webgpu.wasm +0 -0
- package/wasm/racommons.js +126 -0
- package/wasm/racommons.wasm +0 -0
- package/wasm/sherpa/sherpa-onnx-asr.js +1538 -0
- package/wasm/sherpa/sherpa-onnx-glue-original.js +19 -0
- package/wasm/sherpa/sherpa-onnx-glue.js +17 -0
- package/wasm/sherpa/sherpa-onnx-tts.js +657 -0
- package/wasm/sherpa/sherpa-onnx-vad.js +337 -0
- package/wasm/sherpa/sherpa-onnx-wave.js +88 -0
- package/wasm/sherpa/sherpa-onnx.wasm +0 -0
|
@@ -0,0 +1,576 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RunAnywhere Web SDK - Tool Calling Extension
|
|
3
|
+
*
|
|
4
|
+
* Adds tool calling (function calling) capabilities to LLM generation.
|
|
5
|
+
* The LLM can request external actions (API calls, calculations, etc.)
|
|
6
|
+
* and the SDK orchestrates the generate -> parse -> execute -> loop cycle.
|
|
7
|
+
*
|
|
8
|
+
* Architecture:
|
|
9
|
+
* - C++ (rac_tool_calling.h): ALL parsing, prompt formatting, JSON handling
|
|
10
|
+
* - This file: Tool registry, executor storage, orchestration
|
|
11
|
+
*
|
|
12
|
+
* Mirrors: sdk/runanywhere-swift/Sources/RunAnywhere/Public/Extensions/LLM/
|
|
13
|
+
*
|
|
14
|
+
* Usage:
|
|
15
|
+
* import { ToolCalling } from '@runanywhere/web';
|
|
16
|
+
*
|
|
17
|
+
* ToolCalling.registerTool(
|
|
18
|
+
* { name: 'get_weather', description: 'Gets weather', parameters: [...] },
|
|
19
|
+
* async (args) => ({ temperature: '72F', condition: 'Sunny' })
|
|
20
|
+
* );
|
|
21
|
+
*
|
|
22
|
+
* const result = await ToolCalling.generateWithTools('What is the weather?');
|
|
23
|
+
* console.log(result.text);
|
|
24
|
+
*/
|
|
25
|
+
import { RunAnywhere } from '../RunAnywhere';
|
|
26
|
+
import { WASMBridge } from '../../Foundation/WASMBridge';
|
|
27
|
+
import { SDKError, SDKErrorCode } from '../../Foundation/ErrorTypes';
|
|
28
|
+
import { SDKLogger } from '../../Foundation/SDKLogger';
|
|
29
|
+
import { TextGeneration } from './RunAnywhere+TextGeneration';
|
|
30
|
+
import { ToolCallFormat, } from './ToolCallingTypes';
|
|
31
|
+
export { ToolCallFormat, } from './ToolCallingTypes';
|
|
32
|
+
const logger = new SDKLogger('ToolCalling');
|
|
33
|
+
/**
|
|
34
|
+
* Generate text and return the complete result.
|
|
35
|
+
*
|
|
36
|
+
* Uses the streaming path (`generateStream`) and drains the token stream
|
|
37
|
+
* to collect the full response text. On WebGPU + JSPI builds the
|
|
38
|
+
* non-streaming `generate()` C function triggers "trying to suspend
|
|
39
|
+
* JS frames" because the Emscripten JSPI `Suspending` wrapper cannot
|
|
40
|
+
* unwind through mixed WASM/JS frames in the non-streaming code path.
|
|
41
|
+
* The streaming path works because its token callbacks return to JS
|
|
42
|
+
* cleanly between each suspension point.
|
|
43
|
+
*/
|
|
44
|
+
async function collectGeneration(prompt, opts) {
|
|
45
|
+
const { stream } = await TextGeneration.generateStream(prompt, opts);
|
|
46
|
+
let text = '';
|
|
47
|
+
for await (const token of stream) {
|
|
48
|
+
text += token;
|
|
49
|
+
}
|
|
50
|
+
return { text };
|
|
51
|
+
}
|
|
52
|
+
function requireBridge() {
|
|
53
|
+
if (!RunAnywhere.isInitialized)
|
|
54
|
+
throw SDKError.notInitialized();
|
|
55
|
+
return WASMBridge.shared;
|
|
56
|
+
}
|
|
57
|
+
// ---------------------------------------------------------------------------
|
|
58
|
+
// ToolValue helpers
|
|
59
|
+
// ---------------------------------------------------------------------------
|
|
60
|
+
/** Create a ToolValue from a plain JS value. */
|
|
61
|
+
export function toToolValue(val) {
|
|
62
|
+
if (val === null || val === undefined)
|
|
63
|
+
return { type: 'null' };
|
|
64
|
+
if (typeof val === 'string')
|
|
65
|
+
return { type: 'string', value: val };
|
|
66
|
+
if (typeof val === 'number')
|
|
67
|
+
return { type: 'number', value: val };
|
|
68
|
+
if (typeof val === 'boolean')
|
|
69
|
+
return { type: 'boolean', value: val };
|
|
70
|
+
if (Array.isArray(val))
|
|
71
|
+
return { type: 'array', value: val.map(toToolValue) };
|
|
72
|
+
if (typeof val === 'object') {
|
|
73
|
+
const obj = {};
|
|
74
|
+
for (const [k, v] of Object.entries(val)) {
|
|
75
|
+
obj[k] = toToolValue(v);
|
|
76
|
+
}
|
|
77
|
+
return { type: 'object', value: obj };
|
|
78
|
+
}
|
|
79
|
+
return { type: 'null' };
|
|
80
|
+
}
|
|
81
|
+
/** Convert a ToolValue to a plain JS value. */
|
|
82
|
+
export function fromToolValue(tv) {
|
|
83
|
+
switch (tv.type) {
|
|
84
|
+
case 'string': return tv.value;
|
|
85
|
+
case 'number': return tv.value;
|
|
86
|
+
case 'boolean': return tv.value;
|
|
87
|
+
case 'array': return tv.value.map(fromToolValue);
|
|
88
|
+
case 'object': {
|
|
89
|
+
const obj = {};
|
|
90
|
+
for (const [k, v] of Object.entries(tv.value)) {
|
|
91
|
+
obj[k] = fromToolValue(v);
|
|
92
|
+
}
|
|
93
|
+
return obj;
|
|
94
|
+
}
|
|
95
|
+
case 'null': return null;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
/** Get a string argument from tool call args. */
|
|
99
|
+
export function getStringArg(args, key) {
|
|
100
|
+
const v = args[key];
|
|
101
|
+
return v?.type === 'string' ? v.value : undefined;
|
|
102
|
+
}
|
|
103
|
+
/** Get a number argument from tool call args. */
|
|
104
|
+
export function getNumberArg(args, key) {
|
|
105
|
+
const v = args[key];
|
|
106
|
+
return v?.type === 'number' ? v.value : undefined;
|
|
107
|
+
}
|
|
108
|
+
// ---------------------------------------------------------------------------
|
|
109
|
+
// Internal: C++ Bridge helpers
|
|
110
|
+
// ---------------------------------------------------------------------------
|
|
111
|
+
/**
|
|
112
|
+
* Check if C++ tool calling functions are available in the WASM module.
|
|
113
|
+
*
|
|
114
|
+
* On WebGPU builds, all WASM imports are wrapped with WebAssembly.Suspending.
|
|
115
|
+
* Synchronous ccall to C++ tool-calling functions (which are NOT
|
|
116
|
+
* WebAssembly.promising-wrapped) will throw "trying to suspend without
|
|
117
|
+
* WebAssembly.promising" if any import inside the C++ code returns a Promise.
|
|
118
|
+
* To avoid this, we always use the TypeScript fallback on WebGPU builds.
|
|
119
|
+
*/
|
|
120
|
+
function hasNativeToolCalling() {
|
|
121
|
+
try {
|
|
122
|
+
const bridge = requireBridge();
|
|
123
|
+
// WebGPU builds have JSPI Suspending on ALL imports, so synchronous
|
|
124
|
+
// ccall to native tool helpers triggers SuspendError. Use TS fallback.
|
|
125
|
+
if (bridge.accelerationMode === 'webgpu')
|
|
126
|
+
return false;
|
|
127
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
128
|
+
return typeof bridge.module['_rac_tool_call_parse'] === 'function';
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Parse LLM output for tool calls.
|
|
136
|
+
* Uses C++ when available, falls back to TypeScript regex parsing.
|
|
137
|
+
*/
|
|
138
|
+
function parseToolCall(llmOutput) {
|
|
139
|
+
if (hasNativeToolCalling()) {
|
|
140
|
+
return parseToolCallNative(llmOutput);
|
|
141
|
+
}
|
|
142
|
+
return parseToolCallTS(llmOutput);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Parse via C++ rac_tool_call_parse.
|
|
146
|
+
*/
|
|
147
|
+
function parseToolCallNative(llmOutput) {
|
|
148
|
+
const bridge = requireBridge();
|
|
149
|
+
const m = bridge.module;
|
|
150
|
+
// Allocate result struct (rac_tool_call_t)
|
|
151
|
+
// Fields: has_tool_call (i32), tool_name (ptr), arguments_json (ptr),
|
|
152
|
+
// clean_text (ptr), call_id (i64), format (i32)
|
|
153
|
+
const resultSize = 40; // generous
|
|
154
|
+
const resultPtr = m._malloc(resultSize);
|
|
155
|
+
for (let i = 0; i < resultSize; i++)
|
|
156
|
+
m.setValue(resultPtr + i, 0, 'i8');
|
|
157
|
+
const inputPtr = bridge.allocString(llmOutput);
|
|
158
|
+
try {
|
|
159
|
+
const rc = m.ccall('rac_tool_call_parse', 'number', ['number', 'number'], [inputPtr, resultPtr]);
|
|
160
|
+
const hasToolCall = m.getValue(resultPtr, 'i32');
|
|
161
|
+
const toolNamePtr = m.getValue(resultPtr + 4, '*');
|
|
162
|
+
const argsJsonPtr = m.getValue(resultPtr + 8, '*');
|
|
163
|
+
const cleanTextPtr = m.getValue(resultPtr + 12, '*');
|
|
164
|
+
const callId = m.getValue(resultPtr + 16, 'i32');
|
|
165
|
+
const cleanText = cleanTextPtr ? bridge.readString(cleanTextPtr) : llmOutput;
|
|
166
|
+
if (rc !== 0 || hasToolCall !== 1 || !toolNamePtr) {
|
|
167
|
+
// Free the result struct
|
|
168
|
+
m.ccall('rac_tool_call_free', null, ['number'], [resultPtr]);
|
|
169
|
+
return { text: cleanText, toolCall: null };
|
|
170
|
+
}
|
|
171
|
+
const toolName = bridge.readString(toolNamePtr);
|
|
172
|
+
const argsJson = argsJsonPtr ? bridge.readString(argsJsonPtr) : '{}';
|
|
173
|
+
const args = parseJsonToToolValues(argsJson);
|
|
174
|
+
// Free the result struct
|
|
175
|
+
m.ccall('rac_tool_call_free', null, ['number'], [resultPtr]);
|
|
176
|
+
return {
|
|
177
|
+
text: cleanText,
|
|
178
|
+
toolCall: {
|
|
179
|
+
toolName,
|
|
180
|
+
arguments: args,
|
|
181
|
+
callId: `call_${callId}`,
|
|
182
|
+
},
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
finally {
|
|
186
|
+
bridge.free(inputPtr);
|
|
187
|
+
m._free(resultPtr);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* TypeScript fallback parser for when WASM doesn't have tool_calling compiled.
|
|
192
|
+
* Handles both default and LFM2 formats.
|
|
193
|
+
*/
|
|
194
|
+
function parseToolCallTS(llmOutput) {
|
|
195
|
+
// Try default format: <tool_call>{"tool":"name","arguments":{...}}</tool_call>
|
|
196
|
+
const defaultMatch = llmOutput.match(/<tool_call>([\s\S]*?)(?:<\/tool_call>|$)/);
|
|
197
|
+
if (defaultMatch) {
|
|
198
|
+
const jsonStr = defaultMatch[1].trim();
|
|
199
|
+
const cleanText = llmOutput.replace(/<tool_call>[\s\S]*?(?:<\/tool_call>|$)/, '').trim();
|
|
200
|
+
try {
|
|
201
|
+
const parsed = JSON.parse(jsonStr);
|
|
202
|
+
const toolName = parsed.tool || parsed.name || parsed.function || '';
|
|
203
|
+
const rawArgs = parsed.arguments || parsed.args || parsed.parameters || {};
|
|
204
|
+
return {
|
|
205
|
+
text: cleanText,
|
|
206
|
+
toolCall: {
|
|
207
|
+
toolName,
|
|
208
|
+
arguments: jsonToToolValues(rawArgs),
|
|
209
|
+
callId: `call_${Date.now()}`,
|
|
210
|
+
},
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
// Try to fix common LLM JSON issues (unquoted keys)
|
|
215
|
+
try {
|
|
216
|
+
const fixed = jsonStr.replace(/([{,]\s*)(\w+)\s*:/g, '$1"$2":');
|
|
217
|
+
const parsed = JSON.parse(fixed);
|
|
218
|
+
const toolName = parsed.tool || parsed.name || parsed.function || '';
|
|
219
|
+
const rawArgs = parsed.arguments || parsed.args || parsed.parameters || {};
|
|
220
|
+
return {
|
|
221
|
+
text: cleanText,
|
|
222
|
+
toolCall: {
|
|
223
|
+
toolName,
|
|
224
|
+
arguments: jsonToToolValues(rawArgs),
|
|
225
|
+
callId: `call_${Date.now()}`,
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
return { text: llmOutput, toolCall: null };
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// Try LFM2 format: <|tool_call_start|>[func_name(arg="val")]<|tool_call_end|>
|
|
235
|
+
const lfm2Match = llmOutput.match(/<\|tool_call_start\|>\s*\[(\w+)\((.*?)\)\]\s*<\|tool_call_end\|>/);
|
|
236
|
+
if (lfm2Match) {
|
|
237
|
+
const funcName = lfm2Match[1];
|
|
238
|
+
const argsStr = lfm2Match[2];
|
|
239
|
+
const cleanText = llmOutput.replace(/<\|tool_call_start\|>[\s\S]*?<\|tool_call_end\|>/, '').trim();
|
|
240
|
+
// Parse LFM2 arguments: arg1="val1", arg2="val2"
|
|
241
|
+
const args = {};
|
|
242
|
+
const argPattern = /(\w+)="([^"]*)"/g;
|
|
243
|
+
let argMatch;
|
|
244
|
+
while ((argMatch = argPattern.exec(argsStr)) !== null) {
|
|
245
|
+
args[argMatch[1]] = { type: 'string', value: argMatch[2] };
|
|
246
|
+
}
|
|
247
|
+
return {
|
|
248
|
+
text: cleanText,
|
|
249
|
+
toolCall: {
|
|
250
|
+
toolName: funcName,
|
|
251
|
+
arguments: args,
|
|
252
|
+
callId: `call_${Date.now()}`,
|
|
253
|
+
},
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
return { text: llmOutput, toolCall: null };
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Format tool definitions into system prompt.
|
|
260
|
+
* Uses C++ when available, falls back to TypeScript.
|
|
261
|
+
*/
|
|
262
|
+
function formatToolsForPrompt(tools, format = ToolCallFormat.Default) {
|
|
263
|
+
if (tools.length === 0)
|
|
264
|
+
return '';
|
|
265
|
+
const toolsJson = serializeToolDefinitions(tools);
|
|
266
|
+
if (hasNativeToolCalling()) {
|
|
267
|
+
const bridge = requireBridge();
|
|
268
|
+
const m = bridge.module;
|
|
269
|
+
const jsonPtr = bridge.allocString(toolsJson);
|
|
270
|
+
const fmtPtr = bridge.allocString(format);
|
|
271
|
+
const outPtrPtr = m._malloc(4);
|
|
272
|
+
m.setValue(outPtrPtr, 0, '*');
|
|
273
|
+
try {
|
|
274
|
+
const rc = m.ccall('rac_tool_call_format_prompt_json_with_format_name', 'number', ['number', 'number', 'number'], [jsonPtr, fmtPtr, outPtrPtr]);
|
|
275
|
+
if (rc === 0) {
|
|
276
|
+
const outPtr = m.getValue(outPtrPtr, '*');
|
|
277
|
+
if (outPtr) {
|
|
278
|
+
const result = bridge.readString(outPtr);
|
|
279
|
+
m.ccall('rac_free', null, ['number'], [outPtr]);
|
|
280
|
+
return result;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
finally {
|
|
285
|
+
bridge.free(jsonPtr);
|
|
286
|
+
bridge.free(fmtPtr);
|
|
287
|
+
m._free(outPtrPtr);
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
// Fallback: build prompt in TypeScript
|
|
291
|
+
return formatToolsForPromptTS(tools, format);
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Build follow-up prompt after tool execution.
|
|
295
|
+
* Uses C++ when available, falls back to TypeScript.
|
|
296
|
+
*/
|
|
297
|
+
function buildFollowUpPrompt(originalPrompt, toolsPrompt, toolName, toolResultJson, keepToolsAvailable) {
|
|
298
|
+
if (hasNativeToolCalling()) {
|
|
299
|
+
const bridge = requireBridge();
|
|
300
|
+
const m = bridge.module;
|
|
301
|
+
const promptPtr = bridge.allocString(originalPrompt);
|
|
302
|
+
const toolsPromptPtr = toolsPrompt ? bridge.allocString(toolsPrompt) : 0;
|
|
303
|
+
const namePtr = bridge.allocString(toolName);
|
|
304
|
+
const resultPtr = bridge.allocString(toolResultJson);
|
|
305
|
+
const outPtrPtr = m._malloc(4);
|
|
306
|
+
m.setValue(outPtrPtr, 0, '*');
|
|
307
|
+
try {
|
|
308
|
+
const rc = m.ccall('rac_tool_call_build_followup_prompt', 'number', ['number', 'number', 'number', 'number', 'number', 'number'], [promptPtr, toolsPromptPtr, namePtr, resultPtr, keepToolsAvailable ? 1 : 0, outPtrPtr]);
|
|
309
|
+
if (rc === 0) {
|
|
310
|
+
const outPtr = m.getValue(outPtrPtr, '*');
|
|
311
|
+
if (outPtr) {
|
|
312
|
+
const result = bridge.readString(outPtr);
|
|
313
|
+
m.ccall('rac_free', null, ['number'], [outPtr]);
|
|
314
|
+
return result;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
finally {
|
|
319
|
+
bridge.free(promptPtr);
|
|
320
|
+
if (toolsPromptPtr)
|
|
321
|
+
bridge.free(toolsPromptPtr);
|
|
322
|
+
bridge.free(namePtr);
|
|
323
|
+
bridge.free(resultPtr);
|
|
324
|
+
m._free(outPtrPtr);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
// Fallback: build in TypeScript
|
|
328
|
+
return buildFollowUpPromptTS(originalPrompt, toolName, toolResultJson, keepToolsAvailable);
|
|
329
|
+
}
|
|
330
|
+
// ---------------------------------------------------------------------------
|
|
331
|
+
// TypeScript fallback helpers
|
|
332
|
+
// ---------------------------------------------------------------------------
|
|
333
|
+
function formatToolsForPromptTS(tools, format) {
|
|
334
|
+
const toolDescriptions = tools.map((t) => {
|
|
335
|
+
const params = t.parameters.map((p) => {
|
|
336
|
+
const req = p.required !== false ? ' (required)' : ' (optional)';
|
|
337
|
+
return ` - ${p.name} (${p.type}${req}): ${p.description}`;
|
|
338
|
+
}).join('\n');
|
|
339
|
+
return ` ${t.name}: ${t.description}\n Parameters:\n${params}`;
|
|
340
|
+
}).join('\n\n');
|
|
341
|
+
if (format === ToolCallFormat.LFM2) {
|
|
342
|
+
return `You have access to the following tools:\n\n${toolDescriptions}\n\nTo use a tool, respond with:\n<|tool_call_start|>[tool_name(arg1="value1", arg2="value2")]<|tool_call_end|>\n\nIf no tool is needed, respond normally.`;
|
|
343
|
+
}
|
|
344
|
+
return `You have access to the following tools:\n\n${toolDescriptions}\n\nTo use a tool, respond with:\n<tool_call>{"tool": "tool_name", "arguments": {"arg1": "value1"}}</tool_call>\n\nIf no tool is needed, respond normally.`;
|
|
345
|
+
}
|
|
346
|
+
function buildFollowUpPromptTS(originalPrompt, toolName, toolResultJson, keepToolsAvailable) {
|
|
347
|
+
if (keepToolsAvailable) {
|
|
348
|
+
return `User: ${originalPrompt}\n\nYou previously used the ${toolName} tool and received:\n${toolResultJson}\n\nBased on this tool result, either use another tool if needed, or provide a helpful response.`;
|
|
349
|
+
}
|
|
350
|
+
return `The user asked: "${originalPrompt}"\n\nYou used the ${toolName} tool and received this data:\n${toolResultJson}\n\nNow provide a helpful, natural response to the user based on this information.`;
|
|
351
|
+
}
|
|
352
|
+
// ---------------------------------------------------------------------------
|
|
353
|
+
// JSON <-> ToolValue conversion
|
|
354
|
+
// ---------------------------------------------------------------------------
|
|
355
|
+
function parseJsonToToolValues(json) {
|
|
356
|
+
try {
|
|
357
|
+
const parsed = JSON.parse(json);
|
|
358
|
+
return jsonToToolValues(parsed);
|
|
359
|
+
}
|
|
360
|
+
catch {
|
|
361
|
+
return {};
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
function jsonToToolValues(obj) {
|
|
365
|
+
const result = {};
|
|
366
|
+
for (const [key, val] of Object.entries(obj)) {
|
|
367
|
+
result[key] = toToolValue(val);
|
|
368
|
+
}
|
|
369
|
+
return result;
|
|
370
|
+
}
|
|
371
|
+
function toolValueToJson(val) {
|
|
372
|
+
return fromToolValue(val);
|
|
373
|
+
}
|
|
374
|
+
function toolResultToJsonString(result) {
|
|
375
|
+
const plain = {};
|
|
376
|
+
for (const [k, v] of Object.entries(result)) {
|
|
377
|
+
plain[k] = toolValueToJson(v);
|
|
378
|
+
}
|
|
379
|
+
return JSON.stringify(plain);
|
|
380
|
+
}
|
|
381
|
+
function serializeToolDefinitions(tools) {
|
|
382
|
+
return JSON.stringify(tools.map((t) => ({
|
|
383
|
+
name: t.name,
|
|
384
|
+
description: t.description,
|
|
385
|
+
parameters: t.parameters.map((p) => ({
|
|
386
|
+
name: p.name,
|
|
387
|
+
type: p.type,
|
|
388
|
+
description: p.description,
|
|
389
|
+
required: p.required ?? true,
|
|
390
|
+
...(p.enumValues ? { enumValues: p.enumValues } : {}),
|
|
391
|
+
})),
|
|
392
|
+
})));
|
|
393
|
+
}
|
|
394
|
+
// ---------------------------------------------------------------------------
|
|
395
|
+
// Tool Calling Extension
|
|
396
|
+
// ---------------------------------------------------------------------------
|
|
397
|
+
class ToolCallingImpl {
|
|
398
|
+
extensionName = 'ToolCalling';
|
|
399
|
+
toolRegistry = new Map();
|
|
400
|
+
/**
|
|
401
|
+
* Register a tool that the LLM can use.
|
|
402
|
+
*
|
|
403
|
+
* @param definition - Tool definition (name, description, parameters)
|
|
404
|
+
* @param executor - Async function that executes the tool
|
|
405
|
+
*/
|
|
406
|
+
registerTool(definition, executor) {
|
|
407
|
+
this.toolRegistry.set(definition.name, { definition, executor });
|
|
408
|
+
logger.info(`Tool registered: ${definition.name}`);
|
|
409
|
+
}
|
|
410
|
+
/**
|
|
411
|
+
* Unregister a tool by name.
|
|
412
|
+
*/
|
|
413
|
+
unregisterTool(name) {
|
|
414
|
+
this.toolRegistry.delete(name);
|
|
415
|
+
logger.info(`Tool unregistered: ${name}`);
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Get all registered tool definitions.
|
|
419
|
+
*/
|
|
420
|
+
getRegisteredTools() {
|
|
421
|
+
return Array.from(this.toolRegistry.values()).map((t) => t.definition);
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Clear all registered tools.
|
|
425
|
+
*/
|
|
426
|
+
clearTools() {
|
|
427
|
+
this.toolRegistry.clear();
|
|
428
|
+
logger.info('All tools cleared');
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Execute a tool call by looking up the registered executor.
|
|
432
|
+
*/
|
|
433
|
+
async executeTool(toolCall) {
|
|
434
|
+
const registered = this.toolRegistry.get(toolCall.toolName);
|
|
435
|
+
if (!registered) {
|
|
436
|
+
return {
|
|
437
|
+
toolName: toolCall.toolName,
|
|
438
|
+
success: false,
|
|
439
|
+
error: `Unknown tool: ${toolCall.toolName}`,
|
|
440
|
+
callId: toolCall.callId,
|
|
441
|
+
};
|
|
442
|
+
}
|
|
443
|
+
try {
|
|
444
|
+
const result = await registered.executor(toolCall.arguments);
|
|
445
|
+
return {
|
|
446
|
+
toolName: toolCall.toolName,
|
|
447
|
+
success: true,
|
|
448
|
+
result,
|
|
449
|
+
callId: toolCall.callId,
|
|
450
|
+
};
|
|
451
|
+
}
|
|
452
|
+
catch (err) {
|
|
453
|
+
return {
|
|
454
|
+
toolName: toolCall.toolName,
|
|
455
|
+
success: false,
|
|
456
|
+
error: err instanceof Error ? err.message : String(err),
|
|
457
|
+
callId: toolCall.callId,
|
|
458
|
+
};
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
/**
|
|
462
|
+
* Generate a response with tool calling support.
|
|
463
|
+
*
|
|
464
|
+
* Orchestrates: generate -> parse -> execute -> loop
|
|
465
|
+
*
|
|
466
|
+
* @param prompt - The user's prompt
|
|
467
|
+
* @param options - Tool calling options
|
|
468
|
+
* @returns Result with final text, all tool calls, and their results
|
|
469
|
+
*/
|
|
470
|
+
async generateWithTools(prompt, options = {}) {
|
|
471
|
+
if (!RunAnywhere.isInitialized) {
|
|
472
|
+
throw SDKError.notInitialized();
|
|
473
|
+
}
|
|
474
|
+
if (!TextGeneration.isModelLoaded) {
|
|
475
|
+
throw new SDKError(SDKErrorCode.ModelNotLoaded, 'No LLM model loaded. Call loadModel() first.');
|
|
476
|
+
}
|
|
477
|
+
const maxToolCalls = options.maxToolCalls ?? 5;
|
|
478
|
+
const autoExecute = options.autoExecute ?? true;
|
|
479
|
+
const format = options.format ?? ToolCallFormat.Default;
|
|
480
|
+
const registeredTools = this.getRegisteredTools();
|
|
481
|
+
const tools = options.tools ?? registeredTools;
|
|
482
|
+
// Build tool system prompt
|
|
483
|
+
logger.debug('[generateWithTools] Formatting tools for prompt...');
|
|
484
|
+
let toolsPrompt;
|
|
485
|
+
try {
|
|
486
|
+
toolsPrompt = formatToolsForPrompt(tools, format);
|
|
487
|
+
logger.debug(`[generateWithTools] Tools prompt formatted (${toolsPrompt.length} chars)`);
|
|
488
|
+
}
|
|
489
|
+
catch (fmtErr) {
|
|
490
|
+
logger.error(`[generateWithTools] formatToolsForPrompt failed: ${fmtErr instanceof Error ? fmtErr.message : String(fmtErr)}`);
|
|
491
|
+
throw fmtErr;
|
|
492
|
+
}
|
|
493
|
+
let systemPrompt;
|
|
494
|
+
if (options.replaceSystemPrompt && options.systemPrompt) {
|
|
495
|
+
systemPrompt = options.systemPrompt;
|
|
496
|
+
}
|
|
497
|
+
else if (options.systemPrompt) {
|
|
498
|
+
systemPrompt = `${options.systemPrompt}\n\n${toolsPrompt}`;
|
|
499
|
+
}
|
|
500
|
+
else {
|
|
501
|
+
systemPrompt = toolsPrompt;
|
|
502
|
+
}
|
|
503
|
+
let fullPrompt = systemPrompt ? `${systemPrompt}\n\nUser: ${prompt}` : prompt;
|
|
504
|
+
const allToolCalls = [];
|
|
505
|
+
const allToolResults = [];
|
|
506
|
+
let finalText = '';
|
|
507
|
+
for (let i = 0; i < maxToolCalls; i++) {
|
|
508
|
+
// Generate – non-streaming avoids JSPI callback issues with WebGPU
|
|
509
|
+
logger.debug(`[generateWithTools] Round ${i + 1}/${maxToolCalls}, calling collectGeneration...`);
|
|
510
|
+
let genResult;
|
|
511
|
+
try {
|
|
512
|
+
genResult = await collectGeneration(fullPrompt, {
|
|
513
|
+
maxTokens: options.maxTokens ?? 1024,
|
|
514
|
+
temperature: options.temperature ?? 0.3,
|
|
515
|
+
});
|
|
516
|
+
logger.debug(`[generateWithTools] Generation complete (${genResult.text.length} chars)`);
|
|
517
|
+
}
|
|
518
|
+
catch (genErr) {
|
|
519
|
+
logger.error(`[generateWithTools] collectGeneration failed: ${genErr instanceof Error ? `${genErr.message}\nStack: ${genErr.stack}` : String(genErr)}`);
|
|
520
|
+
throw genErr;
|
|
521
|
+
}
|
|
522
|
+
// Parse for tool calls
|
|
523
|
+
const { text, toolCall } = parseToolCall(genResult.text);
|
|
524
|
+
finalText = text;
|
|
525
|
+
if (!toolCall)
|
|
526
|
+
break;
|
|
527
|
+
allToolCalls.push(toolCall);
|
|
528
|
+
logger.info(`Tool call detected: ${toolCall.toolName}`);
|
|
529
|
+
if (!autoExecute) {
|
|
530
|
+
return {
|
|
531
|
+
text: finalText,
|
|
532
|
+
toolCalls: allToolCalls,
|
|
533
|
+
toolResults: [],
|
|
534
|
+
isComplete: false,
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
// Execute tool
|
|
538
|
+
const result = await this.executeTool(toolCall);
|
|
539
|
+
allToolResults.push(result);
|
|
540
|
+
const resultJson = result.success && result.result
|
|
541
|
+
? toolResultToJsonString(result.result)
|
|
542
|
+
: JSON.stringify({ error: result.error ?? 'Unknown error' });
|
|
543
|
+
logger.info(`Tool ${toolCall.toolName} ${result.success ? 'succeeded' : 'failed'}`);
|
|
544
|
+
// Build follow-up prompt
|
|
545
|
+
fullPrompt = buildFollowUpPrompt(prompt, options.keepToolsAvailable ? toolsPrompt : null, toolCall.toolName, resultJson, options.keepToolsAvailable ?? false);
|
|
546
|
+
}
|
|
547
|
+
return {
|
|
548
|
+
text: finalText,
|
|
549
|
+
toolCalls: allToolCalls,
|
|
550
|
+
toolResults: allToolResults,
|
|
551
|
+
isComplete: true,
|
|
552
|
+
};
|
|
553
|
+
}
|
|
554
|
+
/**
|
|
555
|
+
* Clean up the tool calling extension (clears all registered tools).
|
|
556
|
+
*/
|
|
557
|
+
cleanup() {
|
|
558
|
+
this.toolRegistry.clear();
|
|
559
|
+
}
|
|
560
|
+
/**
|
|
561
|
+
* Continue generation after manual tool execution.
|
|
562
|
+
* Use when autoExecute is false.
|
|
563
|
+
*/
|
|
564
|
+
async continueWithToolResult(previousPrompt, toolCall, toolResult, options) {
|
|
565
|
+
const resultJson = toolResult.success && toolResult.result
|
|
566
|
+
? toolResultToJsonString(toolResult.result)
|
|
567
|
+
: `Error: ${toolResult.error ?? 'Unknown error'}`;
|
|
568
|
+
const continuedPrompt = `${previousPrompt}\n\nTool Result for ${toolCall.toolName}: ${resultJson}\n\nBased on the tool result, please provide your response:`;
|
|
569
|
+
return this.generateWithTools(continuedPrompt, {
|
|
570
|
+
...options,
|
|
571
|
+
maxToolCalls: (options?.maxToolCalls ?? 5) - 1,
|
|
572
|
+
});
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
export const ToolCalling = new ToolCallingImpl();
|
|
576
|
+
//# sourceMappingURL=RunAnywhere+ToolCalling.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RunAnywhere+ToolCalling.js","sourceRoot":"","sources":["../../../src/Public/Extensions/RunAnywhere+ToolCalling.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RunAnywhere Web SDK - Voice Activity Detection Extension
|
|
3
|
+
*
|
|
4
|
+
* Adds VAD capabilities via sherpa-onnx WASM using Silero VAD model.
|
|
5
|
+
* Detects speech segments in audio streams with high accuracy.
|
|
6
|
+
*
|
|
7
|
+
* Mirrors: sdk/runanywhere-swift/Sources/RunAnywhere/Public/Extensions/VAD/
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* import { VAD } from '@runanywhere/web';
|
|
11
|
+
*
|
|
12
|
+
* await VAD.loadModel({
|
|
13
|
+
* modelPath: '/models/vad/silero_vad.onnx',
|
|
14
|
+
* threshold: 0.5,
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* const hasVoice = VAD.processSamples(audioFloat32Array);
|
|
18
|
+
* if (hasVoice) console.log('Speech detected!');
|
|
19
|
+
*/
|
|
20
|
+
import type { SpeechActivityCallback, VADModelConfig, SpeechSegment } from './VADTypes';
|
|
21
|
+
export { SpeechActivity } from './VADTypes';
|
|
22
|
+
export type { SpeechActivityCallback, VADModelConfig, SpeechSegment } from './VADTypes';
|
|
23
|
+
declare class VADImpl {
|
|
24
|
+
readonly extensionName = "VAD";
|
|
25
|
+
private _vadHandle;
|
|
26
|
+
private _sampleRate;
|
|
27
|
+
private _jsActivityCallback;
|
|
28
|
+
private _lastSpeechState;
|
|
29
|
+
/**
|
|
30
|
+
* Load the Silero VAD model via sherpa-onnx.
|
|
31
|
+
* The model file must already be in the sherpa-onnx virtual FS.
|
|
32
|
+
*/
|
|
33
|
+
loadModel(config: VADModelConfig): Promise<void>;
|
|
34
|
+
/** Whether VAD model is loaded. */
|
|
35
|
+
get isInitialized(): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Register a callback for speech activity events.
|
|
38
|
+
* Called when speech starts, ends, or is ongoing.
|
|
39
|
+
*/
|
|
40
|
+
onSpeechActivity(callback: SpeechActivityCallback): () => void;
|
|
41
|
+
/**
|
|
42
|
+
* Process audio samples through VAD.
|
|
43
|
+
* Returns whether speech was detected in this frame.
|
|
44
|
+
*
|
|
45
|
+
* The Silero VAD expects 512-sample windows at 16kHz.
|
|
46
|
+
* This method handles arbitrary-length input by feeding in chunks.
|
|
47
|
+
*
|
|
48
|
+
* @param samples - Float32Array of PCM audio samples (mono, 16kHz)
|
|
49
|
+
* @returns Whether speech is currently detected
|
|
50
|
+
*/
|
|
51
|
+
processSamples(samples: Float32Array): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Get the next available speech segment (if any).
|
|
54
|
+
* Returns null if no complete segments are available.
|
|
55
|
+
*
|
|
56
|
+
* After calling processSamples(), check for available segments
|
|
57
|
+
* using this method. Call repeatedly until it returns null.
|
|
58
|
+
*/
|
|
59
|
+
popSpeechSegment(): SpeechSegment | null;
|
|
60
|
+
/** Whether speech is currently detected. */
|
|
61
|
+
get isSpeechActive(): boolean;
|
|
62
|
+
/** Reset VAD state. */
|
|
63
|
+
reset(): void;
|
|
64
|
+
/** Flush remaining audio through VAD. */
|
|
65
|
+
flush(): void;
|
|
66
|
+
/** Clean up the VAD resources. */
|
|
67
|
+
cleanup(): void;
|
|
68
|
+
}
|
|
69
|
+
export declare const VAD: VADImpl;
|
|
70
|
+
//# sourceMappingURL=RunAnywhere+VAD.d.ts.map
|