modular-voice-agent-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 +102 -0
- package/USAGE.md +567 -0
- package/dist/backends/cloud/index.d.ts +7 -0
- package/dist/backends/cloud/index.d.ts.map +1 -0
- package/dist/backends/cloud/index.js +6 -0
- package/dist/backends/cloud/index.js.map +1 -0
- package/dist/backends/cloud/llm.d.ts +22 -0
- package/dist/backends/cloud/llm.d.ts.map +1 -0
- package/dist/backends/cloud/llm.js +234 -0
- package/dist/backends/cloud/llm.js.map +1 -0
- package/dist/backends/index.d.ts +2 -0
- package/dist/backends/index.d.ts.map +1 -0
- package/dist/backends/index.js +6 -0
- package/dist/backends/index.js.map +1 -0
- package/dist/backends/native/index.d.ts +5 -0
- package/dist/backends/native/index.d.ts.map +1 -0
- package/dist/backends/native/index.js +6 -0
- package/dist/backends/native/index.js.map +1 -0
- package/dist/backends/native/llm.d.ts +71 -0
- package/dist/backends/native/llm.d.ts.map +1 -0
- package/dist/backends/native/llm.js +435 -0
- package/dist/backends/native/llm.js.map +1 -0
- package/dist/backends/native/stt.d.ts +15 -0
- package/dist/backends/native/stt.d.ts.map +1 -0
- package/dist/backends/native/stt.js +94 -0
- package/dist/backends/native/stt.js.map +1 -0
- package/dist/backends/native/tts.d.ts +21 -0
- package/dist/backends/native/tts.d.ts.map +1 -0
- package/dist/backends/native/tts.js +105 -0
- package/dist/backends/native/tts.js.map +1 -0
- package/dist/backends/transformers/index.d.ts +4 -0
- package/dist/backends/transformers/index.d.ts.map +1 -0
- package/dist/backends/transformers/index.js +4 -0
- package/dist/backends/transformers/index.js.map +1 -0
- package/dist/backends/transformers/llm.d.ts +29 -0
- package/dist/backends/transformers/llm.d.ts.map +1 -0
- package/dist/backends/transformers/llm.js +117 -0
- package/dist/backends/transformers/llm.js.map +1 -0
- package/dist/backends/transformers/stt.d.ts +17 -0
- package/dist/backends/transformers/stt.d.ts.map +1 -0
- package/dist/backends/transformers/stt.js +43 -0
- package/dist/backends/transformers/stt.js.map +1 -0
- package/dist/backends/transformers/tts.d.ts +17 -0
- package/dist/backends/transformers/tts.d.ts.map +1 -0
- package/dist/backends/transformers/tts.js +40 -0
- package/dist/backends/transformers/tts.js.map +1 -0
- package/dist/cache.d.ts +37 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +49 -0
- package/dist/cache.js.map +1 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +392 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/audio-player.d.ts +45 -0
- package/dist/client/audio-player.d.ts.map +1 -0
- package/dist/client/audio-player.js +90 -0
- package/dist/client/audio-player.js.map +1 -0
- package/dist/client/audio-recorder.d.ts +42 -0
- package/dist/client/audio-recorder.d.ts.map +1 -0
- package/dist/client/audio-recorder.js +128 -0
- package/dist/client/audio-recorder.js.map +1 -0
- package/dist/client/index.d.ts +34 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +33 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/protocol.d.ts +80 -0
- package/dist/client/protocol.d.ts.map +1 -0
- package/dist/client/protocol.js +29 -0
- package/dist/client/protocol.js.map +1 -0
- package/dist/client/voice-client.d.ts +249 -0
- package/dist/client/voice-client.d.ts.map +1 -0
- package/dist/client/voice-client.js +826 -0
- package/dist/client/voice-client.js.map +1 -0
- package/dist/client/web-speech-stt.d.ts +65 -0
- package/dist/client/web-speech-stt.d.ts.map +1 -0
- package/dist/client/web-speech-stt.js +122 -0
- package/dist/client/web-speech-stt.js.map +1 -0
- package/dist/client/web-speech-tts.d.ts +59 -0
- package/dist/client/web-speech-tts.d.ts.map +1 -0
- package/dist/client/web-speech-tts.js +145 -0
- package/dist/client/web-speech-tts.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/server/encoding.d.ts +18 -0
- package/dist/server/encoding.d.ts.map +1 -0
- package/dist/server/encoding.js +41 -0
- package/dist/server/encoding.js.map +1 -0
- package/dist/server/handler.d.ts +86 -0
- package/dist/server/handler.d.ts.map +1 -0
- package/dist/server/handler.js +224 -0
- package/dist/server/handler.js.map +1 -0
- package/dist/server/index.d.ts +31 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +32 -0
- package/dist/server/index.js.map +1 -0
- package/dist/services/function-service.d.ts +17 -0
- package/dist/services/function-service.d.ts.map +1 -0
- package/dist/services/function-service.js +82 -0
- package/dist/services/function-service.js.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +3 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/llm-logger.d.ts +136 -0
- package/dist/services/llm-logger.d.ts.map +1 -0
- package/dist/services/llm-logger.js +275 -0
- package/dist/services/llm-logger.js.map +1 -0
- package/dist/services/text-normalizer.d.ts +17 -0
- package/dist/services/text-normalizer.d.ts.map +1 -0
- package/dist/services/text-normalizer.js +100 -0
- package/dist/services/text-normalizer.js.map +1 -0
- package/dist/types.d.ts +195 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +48 -0
- package/dist/types.js.map +1 -0
- package/dist/voice-pipeline.d.ts +125 -0
- package/dist/voice-pipeline.d.ts.map +1 -0
- package/dist/voice-pipeline.js +390 -0
- package/dist/voice-pipeline.js.map +1 -0
- package/package.json +96 -0
- package/scripts/setup-binaries.sh +159 -0
- package/scripts/setup.sh +201 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AA8FH;;;GAGG;AACH,MAAM,OAAO,qBAAqB;IAKtB;IACA;IALF,YAAY,GAAwB,IAAI,CAAC;IACzC,UAAU,GAAiC,IAAI,CAAC;IAExD,YACU,KAAmB,EACnB,UAAkB;QADlB,UAAK,GAAL,KAAK,CAAc;QACnB,eAAU,GAAV,UAAU,CAAQ;IACzB,CAAC;IAEJ,WAAW;QACT,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEpC,oEAAoE;QACpE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,gDAAgD;QAChD,IAAI,IAAI,CAAC,YAAY,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAC5C,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QACnC,CAAC;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC1F,sEAAsE;QACtE,MAAM,WAAW,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QAClD,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,CAAC;QACzD,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC;QACrC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAEvD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,UAAW,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YAC3C,IAAI,CAAC,UAAW,CAAC,KAAK,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI;QACF,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;CACF"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Voice Pipeline
|
|
3
|
+
* Main orchestrator: STT → LLM → TTS
|
|
4
|
+
*
|
|
5
|
+
* STT and TTS are optional - omit them if the client handles them locally.
|
|
6
|
+
* Supports tool registration for function calling with any LLM backend.
|
|
7
|
+
*
|
|
8
|
+
* The pipeline is stateless - callers manage conversation history via ConversationContext.
|
|
9
|
+
*/
|
|
10
|
+
import type { STTPipeline, LLMPipeline, TTSPipeline, Message, ProgressCallback, AudioPlayable, Tool, ToolDefinition, ToolCall } from './types';
|
|
11
|
+
export interface VoicePipelineConfig {
|
|
12
|
+
/** STT backend (optional if client does local STT) */
|
|
13
|
+
stt?: STTPipeline | null;
|
|
14
|
+
/** LLM backend (required) */
|
|
15
|
+
llm: LLMPipeline;
|
|
16
|
+
/** TTS backend (optional if client does local TTS) */
|
|
17
|
+
tts?: TTSPipeline | null;
|
|
18
|
+
/** System prompt for the LLM */
|
|
19
|
+
systemPrompt: string;
|
|
20
|
+
/** Registered tools for function calling */
|
|
21
|
+
tools?: Tool[];
|
|
22
|
+
/**
|
|
23
|
+
* Filler phrases to say while executing tools.
|
|
24
|
+
* Set to empty array to disable filler phrases.
|
|
25
|
+
* @default ["Let me check that for you.", "One moment please.", "Let me look that up."]
|
|
26
|
+
*/
|
|
27
|
+
toolFillerPhrases?: string[];
|
|
28
|
+
}
|
|
29
|
+
export interface VoicePipelineCallbacks {
|
|
30
|
+
onTranscript: (text: string) => void;
|
|
31
|
+
onResponseChunk: (text: string) => void;
|
|
32
|
+
onAudio: (playable: AudioPlayable) => void;
|
|
33
|
+
onComplete: () => void;
|
|
34
|
+
onError: (error: Error) => void;
|
|
35
|
+
/** Called when a tool is being executed */
|
|
36
|
+
onToolCall?: (toolCall: ToolCall) => void;
|
|
37
|
+
/** Called when a tool execution completes */
|
|
38
|
+
onToolResult?: (toolCallId: string, result: unknown) => void;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Conversation context - callers manage history externally
|
|
42
|
+
*/
|
|
43
|
+
export interface ConversationContext {
|
|
44
|
+
/** Unique conversation ID for tracking/logging */
|
|
45
|
+
conversationId: string;
|
|
46
|
+
/** Conversation history (managed by caller) */
|
|
47
|
+
history: Message[];
|
|
48
|
+
}
|
|
49
|
+
export declare class VoicePipeline {
|
|
50
|
+
private stt;
|
|
51
|
+
private llm;
|
|
52
|
+
private tts;
|
|
53
|
+
private systemPrompt;
|
|
54
|
+
private textNormalizer;
|
|
55
|
+
private tools;
|
|
56
|
+
private toolDefinitions;
|
|
57
|
+
private toolFillerPhrases;
|
|
58
|
+
private fillerPhraseIndex;
|
|
59
|
+
constructor(config: VoicePipelineConfig);
|
|
60
|
+
/**
|
|
61
|
+
* Register a tool for function calling
|
|
62
|
+
*/
|
|
63
|
+
registerTool(tool: Tool): void;
|
|
64
|
+
/**
|
|
65
|
+
* Unregister a tool
|
|
66
|
+
*/
|
|
67
|
+
unregisterTool(name: string): void;
|
|
68
|
+
/**
|
|
69
|
+
* Get registered tools
|
|
70
|
+
*/
|
|
71
|
+
getTools(): ToolDefinition[];
|
|
72
|
+
/**
|
|
73
|
+
* Get the system prompt (for initializing conversation history)
|
|
74
|
+
*/
|
|
75
|
+
getSystemPrompt(): string;
|
|
76
|
+
/**
|
|
77
|
+
* Create initial history with system prompt
|
|
78
|
+
*/
|
|
79
|
+
createInitialHistory(): Message[];
|
|
80
|
+
initialize(onProgress?: ProgressCallback): Promise<void>;
|
|
81
|
+
isReady(): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Check if pipeline has STT configured
|
|
84
|
+
*/
|
|
85
|
+
hasSTT(): boolean;
|
|
86
|
+
/**
|
|
87
|
+
* Check if pipeline has TTS configured
|
|
88
|
+
*/
|
|
89
|
+
hasTTS(): boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Process text input through LLM (and optionally TTS)
|
|
92
|
+
* Returns new messages to append to history
|
|
93
|
+
*/
|
|
94
|
+
processText(text: string, context: ConversationContext, callbacks: Omit<VoicePipelineCallbacks, 'onTranscript'>): Promise<Message[]>;
|
|
95
|
+
/**
|
|
96
|
+
* Process audio input through STT → LLM → TTS
|
|
97
|
+
* Returns new messages to append to history
|
|
98
|
+
*/
|
|
99
|
+
processAudio(audio: Float32Array, context: ConversationContext, callbacks: VoicePipelineCallbacks): Promise<Message[]>;
|
|
100
|
+
/**
|
|
101
|
+
* Internal: Process transcript through LLM
|
|
102
|
+
*/
|
|
103
|
+
private processTranscript;
|
|
104
|
+
/**
|
|
105
|
+
* Internal: Generate LLM response (with tool loop)
|
|
106
|
+
*/
|
|
107
|
+
private generateResponse;
|
|
108
|
+
/**
|
|
109
|
+
* Stream a response to the client with optional TTS
|
|
110
|
+
*/
|
|
111
|
+
private streamResponse;
|
|
112
|
+
/**
|
|
113
|
+
* Generate LLM response
|
|
114
|
+
*/
|
|
115
|
+
private generateLLMResponse;
|
|
116
|
+
/**
|
|
117
|
+
* Generate with streaming TTS (sentence by sentence)
|
|
118
|
+
*/
|
|
119
|
+
private generateWithStreamingTTS;
|
|
120
|
+
/**
|
|
121
|
+
* Parse tool calls from LLM output (for non-native tool backends)
|
|
122
|
+
*/
|
|
123
|
+
private parsePromptBasedToolCalls;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=voice-pipeline.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice-pipeline.d.ts","sourceRoot":"","sources":["../src/voice-pipeline.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Voice Pipeline
|
|
3
|
+
* Main orchestrator: STT → LLM → TTS
|
|
4
|
+
*
|
|
5
|
+
* STT and TTS are optional - omit them if the client handles them locally.
|
|
6
|
+
* Supports tool registration for function calling with any LLM backend.
|
|
7
|
+
*
|
|
8
|
+
* The pipeline is stateless - callers manage conversation history via ConversationContext.
|
|
9
|
+
*/
|
|
10
|
+
import { TextNormalizer } from './services/text-normalizer';
|
|
11
|
+
/** Maximum number of tool call iterations to prevent infinite loops */
|
|
12
|
+
const MAX_TOOL_ITERATIONS = 10;
|
|
13
|
+
/** Default filler phrases while executing tools */
|
|
14
|
+
const DEFAULT_TOOL_FILLER_PHRASES = [
|
|
15
|
+
'Let me check that for you.',
|
|
16
|
+
'One moment please.',
|
|
17
|
+
'Let me look that up.',
|
|
18
|
+
];
|
|
19
|
+
export class VoicePipeline {
|
|
20
|
+
stt;
|
|
21
|
+
llm;
|
|
22
|
+
tts;
|
|
23
|
+
systemPrompt;
|
|
24
|
+
textNormalizer = new TextNormalizer();
|
|
25
|
+
tools = new Map();
|
|
26
|
+
toolDefinitions = [];
|
|
27
|
+
toolFillerPhrases;
|
|
28
|
+
fillerPhraseIndex = 0;
|
|
29
|
+
constructor(config) {
|
|
30
|
+
this.stt = config.stt ?? null;
|
|
31
|
+
this.llm = config.llm;
|
|
32
|
+
this.tts = config.tts ?? null;
|
|
33
|
+
this.systemPrompt = config.systemPrompt;
|
|
34
|
+
this.toolFillerPhrases = config.toolFillerPhrases ?? DEFAULT_TOOL_FILLER_PHRASES;
|
|
35
|
+
// Register tools
|
|
36
|
+
if (config.tools) {
|
|
37
|
+
for (const tool of config.tools) {
|
|
38
|
+
this.registerTool(tool);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Register a tool for function calling
|
|
44
|
+
*/
|
|
45
|
+
registerTool(tool) {
|
|
46
|
+
this.tools.set(tool.name, tool);
|
|
47
|
+
this.toolDefinitions.push({
|
|
48
|
+
name: tool.name,
|
|
49
|
+
description: tool.description,
|
|
50
|
+
parameters: tool.parameters,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Unregister a tool
|
|
55
|
+
*/
|
|
56
|
+
unregisterTool(name) {
|
|
57
|
+
this.tools.delete(name);
|
|
58
|
+
this.toolDefinitions = this.toolDefinitions.filter(t => t.name !== name);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get registered tools
|
|
62
|
+
*/
|
|
63
|
+
getTools() {
|
|
64
|
+
return [...this.toolDefinitions];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get the system prompt (for initializing conversation history)
|
|
68
|
+
*/
|
|
69
|
+
getSystemPrompt() {
|
|
70
|
+
return this.systemPrompt;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Create initial history with system prompt
|
|
74
|
+
*/
|
|
75
|
+
createInitialHistory() {
|
|
76
|
+
return [{ role: 'system', content: this.systemPrompt }];
|
|
77
|
+
}
|
|
78
|
+
async initialize(onProgress) {
|
|
79
|
+
const promises = [this.llm.initialize(onProgress)];
|
|
80
|
+
if (this.stt) {
|
|
81
|
+
promises.push(this.stt.initialize(onProgress));
|
|
82
|
+
}
|
|
83
|
+
if (this.tts) {
|
|
84
|
+
promises.push(this.tts.initialize(onProgress));
|
|
85
|
+
}
|
|
86
|
+
await Promise.all(promises);
|
|
87
|
+
}
|
|
88
|
+
isReady() {
|
|
89
|
+
const sttReady = this.stt ? this.stt.isReady() : true;
|
|
90
|
+
const ttsReady = this.tts ? this.tts.isReady() : true;
|
|
91
|
+
return sttReady && this.llm.isReady() && ttsReady;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Check if pipeline has STT configured
|
|
95
|
+
*/
|
|
96
|
+
hasSTT() {
|
|
97
|
+
return this.stt !== null;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Check if pipeline has TTS configured
|
|
101
|
+
*/
|
|
102
|
+
hasTTS() {
|
|
103
|
+
return this.tts !== null;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Process text input through LLM (and optionally TTS)
|
|
107
|
+
* Returns new messages to append to history
|
|
108
|
+
*/
|
|
109
|
+
async processText(text, context, callbacks) {
|
|
110
|
+
try {
|
|
111
|
+
const newMessages = await this.processTranscript(text, context, {
|
|
112
|
+
...callbacks,
|
|
113
|
+
onTranscript: () => { },
|
|
114
|
+
});
|
|
115
|
+
callbacks.onComplete();
|
|
116
|
+
return newMessages;
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
callbacks.onError(error instanceof Error ? error : new Error(String(error)));
|
|
120
|
+
return [];
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Process audio input through STT → LLM → TTS
|
|
125
|
+
* Returns new messages to append to history
|
|
126
|
+
*/
|
|
127
|
+
async processAudio(audio, context, callbacks) {
|
|
128
|
+
if (!this.stt) {
|
|
129
|
+
callbacks.onError(new Error('No STT backend configured. Use processText() instead.'));
|
|
130
|
+
return [];
|
|
131
|
+
}
|
|
132
|
+
try {
|
|
133
|
+
const transcript = await this.stt.transcribe(audio);
|
|
134
|
+
if (!transcript.trim()) {
|
|
135
|
+
callbacks.onError(new Error('Could not transcribe audio'));
|
|
136
|
+
return [];
|
|
137
|
+
}
|
|
138
|
+
callbacks.onTranscript(transcript);
|
|
139
|
+
const newMessages = await this.processTranscript(transcript, context, callbacks);
|
|
140
|
+
callbacks.onComplete();
|
|
141
|
+
return newMessages;
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
callbacks.onError(error instanceof Error ? error : new Error(String(error)));
|
|
145
|
+
return [];
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Internal: Process transcript through LLM
|
|
150
|
+
*/
|
|
151
|
+
async processTranscript(transcript, context, callbacks) {
|
|
152
|
+
const newMessages = [];
|
|
153
|
+
// Add user message to context history
|
|
154
|
+
const userMessage = { role: 'user', content: transcript };
|
|
155
|
+
context.history.push(userMessage);
|
|
156
|
+
newMessages.push(userMessage);
|
|
157
|
+
// Generate response with context
|
|
158
|
+
const responseMessages = await this.generateResponse(context, callbacks);
|
|
159
|
+
newMessages.push(...responseMessages);
|
|
160
|
+
return newMessages;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Internal: Generate LLM response (with tool loop)
|
|
164
|
+
*/
|
|
165
|
+
async generateResponse(context, callbacks) {
|
|
166
|
+
const newMessages = [];
|
|
167
|
+
const useNativeTools = (this.llm.supportsTools?.() ?? false) && this.toolDefinitions.length > 0;
|
|
168
|
+
const hasTools = this.toolDefinitions.length > 0;
|
|
169
|
+
// Tool execution loop
|
|
170
|
+
for (let iteration = 0; iteration < MAX_TOOL_ITERATIONS; iteration++) {
|
|
171
|
+
const isToolCheckTurn = hasTools && iteration === 0;
|
|
172
|
+
// Native tools now support streaming (via <text_response> format)
|
|
173
|
+
// So we can stream whenever it's appropriate
|
|
174
|
+
const shouldStream = !isToolCheckTurn || useNativeTools;
|
|
175
|
+
const result = await this.generateLLMResponse(context, callbacks, useNativeTools, shouldStream // Enable streaming for native tools too
|
|
176
|
+
);
|
|
177
|
+
const toolCalls = useNativeTools
|
|
178
|
+
? result.toolCalls
|
|
179
|
+
: this.parsePromptBasedToolCalls(result.content);
|
|
180
|
+
if (!toolCalls || toolCalls.length === 0) {
|
|
181
|
+
// Only call streamResponse if we didn't stream during generation
|
|
182
|
+
// Native tools stream during generation, so skip here
|
|
183
|
+
if (!shouldStream) {
|
|
184
|
+
await this.streamResponse(result.content, callbacks);
|
|
185
|
+
}
|
|
186
|
+
const assistantMsg = { role: 'assistant', content: result.content };
|
|
187
|
+
context.history.push(assistantMsg);
|
|
188
|
+
newMessages.push(assistantMsg);
|
|
189
|
+
return newMessages;
|
|
190
|
+
}
|
|
191
|
+
// Tool call - say filler phrase
|
|
192
|
+
if (this.toolFillerPhrases.length > 0) {
|
|
193
|
+
const fillerPhrase = this.toolFillerPhrases[this.fillerPhraseIndex % this.toolFillerPhrases.length];
|
|
194
|
+
this.fillerPhraseIndex++;
|
|
195
|
+
await this.streamResponse(fillerPhrase + ' ', callbacks);
|
|
196
|
+
}
|
|
197
|
+
const assistantContent = useNativeTools ? result.content : '';
|
|
198
|
+
const assistantMsg = {
|
|
199
|
+
role: 'assistant',
|
|
200
|
+
content: assistantContent,
|
|
201
|
+
toolCalls,
|
|
202
|
+
};
|
|
203
|
+
context.history.push(assistantMsg);
|
|
204
|
+
newMessages.push(assistantMsg);
|
|
205
|
+
// Execute tools
|
|
206
|
+
for (const toolCall of toolCalls) {
|
|
207
|
+
callbacks.onToolCall?.(toolCall);
|
|
208
|
+
const tool = this.tools.get(toolCall.name);
|
|
209
|
+
if (!tool) {
|
|
210
|
+
const errorMsg = {
|
|
211
|
+
role: 'tool',
|
|
212
|
+
toolCallId: toolCall.id,
|
|
213
|
+
content: JSON.stringify({ error: `Unknown tool: ${toolCall.name}` }),
|
|
214
|
+
};
|
|
215
|
+
context.history.push(errorMsg);
|
|
216
|
+
newMessages.push(errorMsg);
|
|
217
|
+
callbacks.onToolResult?.(toolCall.id, { error: `Unknown tool: ${toolCall.name}` });
|
|
218
|
+
continue;
|
|
219
|
+
}
|
|
220
|
+
try {
|
|
221
|
+
const toolResult = await tool.execute(toolCall.arguments);
|
|
222
|
+
const resultMsg = {
|
|
223
|
+
role: 'tool',
|
|
224
|
+
toolCallId: toolCall.id,
|
|
225
|
+
content: JSON.stringify(toolResult),
|
|
226
|
+
};
|
|
227
|
+
context.history.push(resultMsg);
|
|
228
|
+
newMessages.push(resultMsg);
|
|
229
|
+
callbacks.onToolResult?.(toolCall.id, toolResult);
|
|
230
|
+
}
|
|
231
|
+
catch (error) {
|
|
232
|
+
const errorResult = { error: error instanceof Error ? error.message : String(error) };
|
|
233
|
+
const errorMsg = {
|
|
234
|
+
role: 'tool',
|
|
235
|
+
toolCallId: toolCall.id,
|
|
236
|
+
content: JSON.stringify(errorResult),
|
|
237
|
+
};
|
|
238
|
+
context.history.push(errorMsg);
|
|
239
|
+
newMessages.push(errorMsg);
|
|
240
|
+
callbacks.onToolResult?.(toolCall.id, errorResult);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
console.warn('VoicePipeline: Max tool iterations reached');
|
|
245
|
+
return newMessages;
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Stream a response to the client with optional TTS
|
|
249
|
+
*/
|
|
250
|
+
async streamResponse(content, callbacks) {
|
|
251
|
+
if (!content)
|
|
252
|
+
return;
|
|
253
|
+
// Stream text chunks
|
|
254
|
+
callbacks.onResponseChunk(content);
|
|
255
|
+
// TTS if available
|
|
256
|
+
if (this.tts) {
|
|
257
|
+
const normalizedText = this.textNormalizer.normalize(content);
|
|
258
|
+
if (normalizedText) {
|
|
259
|
+
const playable = await this.tts.synthesize(normalizedText);
|
|
260
|
+
callbacks.onAudio(playable);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Generate LLM response
|
|
266
|
+
*/
|
|
267
|
+
async generateLLMResponse(context, callbacks, useNativeTools, shouldStream) {
|
|
268
|
+
const tools = this.toolDefinitions.length > 0 ? this.toolDefinitions : undefined;
|
|
269
|
+
if (shouldStream && this.tts) {
|
|
270
|
+
return this.generateWithStreamingTTS(context, callbacks, useNativeTools);
|
|
271
|
+
}
|
|
272
|
+
if (shouldStream) {
|
|
273
|
+
const result = await this.llm.generate(context.history, {
|
|
274
|
+
tools,
|
|
275
|
+
conversationId: context.conversationId,
|
|
276
|
+
onToken: (token) => callbacks.onResponseChunk(token),
|
|
277
|
+
});
|
|
278
|
+
return { content: result.content, toolCalls: result.toolCalls };
|
|
279
|
+
}
|
|
280
|
+
const result = await this.llm.generate(context.history, {
|
|
281
|
+
tools,
|
|
282
|
+
conversationId: context.conversationId,
|
|
283
|
+
});
|
|
284
|
+
return { content: result.content, toolCalls: result.toolCalls };
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Generate with streaming TTS (sentence by sentence)
|
|
288
|
+
*/
|
|
289
|
+
async generateWithStreamingTTS(context, callbacks, _useNativeTools) {
|
|
290
|
+
const tools = this.toolDefinitions.length > 0 ? this.toolDefinitions : undefined;
|
|
291
|
+
let sentenceBuffer = '';
|
|
292
|
+
const sentenceEnders = /[.!?]/;
|
|
293
|
+
const playableQueue = new Map();
|
|
294
|
+
let nextSentenceIndex = 0;
|
|
295
|
+
let nextToSend = 0;
|
|
296
|
+
const ttsPromises = [];
|
|
297
|
+
const flushPlayableQueue = () => {
|
|
298
|
+
while (playableQueue.has(nextToSend)) {
|
|
299
|
+
const playable = playableQueue.get(nextToSend);
|
|
300
|
+
callbacks.onAudio(playable);
|
|
301
|
+
playableQueue.delete(nextToSend);
|
|
302
|
+
nextToSend++;
|
|
303
|
+
}
|
|
304
|
+
};
|
|
305
|
+
const queueTTS = (sentence, index) => {
|
|
306
|
+
const normalizedText = this.textNormalizer.normalize(sentence);
|
|
307
|
+
const promise = this.tts
|
|
308
|
+
.synthesize(normalizedText)
|
|
309
|
+
.then((playable) => {
|
|
310
|
+
playableQueue.set(index, playable);
|
|
311
|
+
flushPlayableQueue();
|
|
312
|
+
})
|
|
313
|
+
.catch(() => {
|
|
314
|
+
nextToSend = Math.max(nextToSend, index + 1);
|
|
315
|
+
flushPlayableQueue();
|
|
316
|
+
});
|
|
317
|
+
ttsPromises.push(promise);
|
|
318
|
+
};
|
|
319
|
+
const result = await this.llm.generate(context.history, {
|
|
320
|
+
tools,
|
|
321
|
+
conversationId: context.conversationId,
|
|
322
|
+
onToken: (token) => {
|
|
323
|
+
callbacks.onResponseChunk(token);
|
|
324
|
+
sentenceBuffer += token;
|
|
325
|
+
const match = sentenceBuffer.match(sentenceEnders);
|
|
326
|
+
if (match && match.index !== undefined) {
|
|
327
|
+
const sentence = sentenceBuffer.slice(0, match.index + 1).trim();
|
|
328
|
+
sentenceBuffer = sentenceBuffer.slice(match.index + 1);
|
|
329
|
+
if (sentence) {
|
|
330
|
+
queueTTS(sentence, nextSentenceIndex++);
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
});
|
|
335
|
+
if (sentenceBuffer.trim()) {
|
|
336
|
+
queueTTS(sentenceBuffer.trim(), nextSentenceIndex++);
|
|
337
|
+
}
|
|
338
|
+
if (ttsPromises.length > 0) {
|
|
339
|
+
await Promise.all(ttsPromises);
|
|
340
|
+
}
|
|
341
|
+
return { content: result.content, toolCalls: result.toolCalls };
|
|
342
|
+
}
|
|
343
|
+
/**
|
|
344
|
+
* Parse tool calls from LLM output (for non-native tool backends)
|
|
345
|
+
*/
|
|
346
|
+
parsePromptBasedToolCalls(content) {
|
|
347
|
+
if (this.toolDefinitions.length === 0) {
|
|
348
|
+
return undefined;
|
|
349
|
+
}
|
|
350
|
+
// Check if the content looks like a tool call (starts with { and contains "tool_call")
|
|
351
|
+
const trimmed = content.trim();
|
|
352
|
+
if (!trimmed.startsWith('{') || !trimmed.includes('"tool_call"')) {
|
|
353
|
+
return undefined;
|
|
354
|
+
}
|
|
355
|
+
// Try to parse the entire content as a tool call JSON
|
|
356
|
+
try {
|
|
357
|
+
const parsed = JSON.parse(trimmed);
|
|
358
|
+
if (parsed.tool_call?.name) {
|
|
359
|
+
return [{
|
|
360
|
+
id: `prompt-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,
|
|
361
|
+
name: parsed.tool_call.name,
|
|
362
|
+
arguments: parsed.tool_call.arguments || {},
|
|
363
|
+
}];
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
catch {
|
|
367
|
+
// Not valid JSON, try to extract tool call with regex
|
|
368
|
+
}
|
|
369
|
+
// Fallback: try to extract JSON object from content
|
|
370
|
+
// This handles cases where there's extra text around the JSON
|
|
371
|
+
const jsonMatch = content.match(/\{[\s\S]*"tool_call"[\s\S]*\}/);
|
|
372
|
+
if (jsonMatch) {
|
|
373
|
+
try {
|
|
374
|
+
const parsed = JSON.parse(jsonMatch[0]);
|
|
375
|
+
if (parsed.tool_call?.name) {
|
|
376
|
+
return [{
|
|
377
|
+
id: `prompt-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`,
|
|
378
|
+
name: parsed.tool_call.name,
|
|
379
|
+
arguments: parsed.tool_call.arguments || {},
|
|
380
|
+
}];
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
catch {
|
|
384
|
+
// Skip malformed JSON
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
return undefined;
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
//# sourceMappingURL=voice-pipeline.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"voice-pipeline.js","sourceRoot":"","sources":["../src/voice-pipeline.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "modular-voice-agent-sdk",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Modular isomorphic STT → LLM → TTS pipeline library for AI voice agents and voice assistants",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts"
|
|
13
|
+
},
|
|
14
|
+
"./native": {
|
|
15
|
+
"import": "./dist/backends/native/index.js",
|
|
16
|
+
"types": "./dist/backends/native/index.d.ts"
|
|
17
|
+
},
|
|
18
|
+
"./cloud": {
|
|
19
|
+
"import": "./dist/backends/cloud/index.js",
|
|
20
|
+
"types": "./dist/backends/cloud/index.d.ts"
|
|
21
|
+
},
|
|
22
|
+
"./client": {
|
|
23
|
+
"import": "./dist/client/index.js",
|
|
24
|
+
"types": "./dist/client/index.d.ts"
|
|
25
|
+
},
|
|
26
|
+
"./server": {
|
|
27
|
+
"import": "./dist/server/index.js",
|
|
28
|
+
"types": "./dist/server/index.d.ts"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"bin": {
|
|
32
|
+
"mvas": "./dist/cli.js"
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"dist",
|
|
36
|
+
"scripts",
|
|
37
|
+
"README.md",
|
|
38
|
+
"USAGE.md"
|
|
39
|
+
],
|
|
40
|
+
"scripts": {
|
|
41
|
+
"build": "tsc -p tsconfig.build.json",
|
|
42
|
+
"dev": "tsc -p tsconfig.build.json --watch",
|
|
43
|
+
"prepublishOnly": "npm run build"
|
|
44
|
+
},
|
|
45
|
+
"workspaces": [
|
|
46
|
+
"examples"
|
|
47
|
+
],
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@huggingface/transformers": "^3.8.1",
|
|
50
|
+
"number-to-words": "^1.2.4"
|
|
51
|
+
},
|
|
52
|
+
"peerDependencies": {
|
|
53
|
+
"ws": "^8.0.0"
|
|
54
|
+
},
|
|
55
|
+
"peerDependenciesMeta": {
|
|
56
|
+
"ws": {
|
|
57
|
+
"optional": true
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"@types/node": "^20.10.0",
|
|
62
|
+
"@types/number-to-words": "^1.2.3",
|
|
63
|
+
"@types/ws": "^8.5.10",
|
|
64
|
+
"typescript": "^5.3.0"
|
|
65
|
+
},
|
|
66
|
+
"keywords": [
|
|
67
|
+
"voice",
|
|
68
|
+
"voice-agent",
|
|
69
|
+
"voice-assistant",
|
|
70
|
+
"speech-to-text",
|
|
71
|
+
"text-to-speech",
|
|
72
|
+
"speech-to-speech",
|
|
73
|
+
"stt",
|
|
74
|
+
"tts",
|
|
75
|
+
"llm",
|
|
76
|
+
"conversational-ai",
|
|
77
|
+
"voice-ai",
|
|
78
|
+
"realtime",
|
|
79
|
+
"streaming",
|
|
80
|
+
"audio",
|
|
81
|
+
"ai-assistant",
|
|
82
|
+
"modular",
|
|
83
|
+
"MVAS",
|
|
84
|
+
"modular-voice-agent-sdk"
|
|
85
|
+
],
|
|
86
|
+
"license": "MIT",
|
|
87
|
+
"repository": {
|
|
88
|
+
"type": "git",
|
|
89
|
+
"url": "https://github.com/bigfive/modular-voice-agent-sdk.git"
|
|
90
|
+
},
|
|
91
|
+
"author": "Jonathan Williams <bigfive@users.noreply.github.com>",
|
|
92
|
+
"homepage": "https://github.com/bigfive/modular-voice-agent-sdk#readme",
|
|
93
|
+
"bugs": {
|
|
94
|
+
"url": "https://github.com/bigfive/modular-voice-agent-sdk/issues"
|
|
95
|
+
}
|
|
96
|
+
}
|