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,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud LLM Pipeline (OpenAI-compatible API)
|
|
3
|
+
* Works with: OpenAI, Ollama, vLLM, LMStudio, and any OpenAI-compatible endpoint
|
|
4
|
+
*
|
|
5
|
+
* Uses native fetch with streaming - no external dependencies required.
|
|
6
|
+
* Supports native tool calling via the OpenAI function calling API.
|
|
7
|
+
*/
|
|
8
|
+
import type { LLMPipeline, CloudLLMConfig, ProgressCallback, Message, LLMGenerateOptions, LLMGenerateResult } from '../../types';
|
|
9
|
+
export declare class CloudLLM implements LLMPipeline {
|
|
10
|
+
private config;
|
|
11
|
+
private ready;
|
|
12
|
+
private tracker;
|
|
13
|
+
constructor(config: CloudLLMConfig);
|
|
14
|
+
initialize(_onProgress?: ProgressCallback): Promise<void>;
|
|
15
|
+
supportsTools(): boolean;
|
|
16
|
+
generate(messages: Message[], options?: LLMGenerateOptions): Promise<LLMGenerateResult>;
|
|
17
|
+
private convertMessages;
|
|
18
|
+
private convertTools;
|
|
19
|
+
private getHeaders;
|
|
20
|
+
isReady(): boolean;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=llm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../../src/backends/cloud/llm.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,OAAO,EACP,kBAAkB,EAClB,iBAAiB,EAKlB,MAAM,aAAa,CAAC;AAuBrB,qBAAa,QAAS,YAAW,WAAW;IAC1C,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAyB;gBAE5B,MAAM,EAAE,cAAc;IAS5B,UAAU,CAAC,WAAW,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B/D,aAAa,IAAI,OAAO;IAIlB,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA+J7F,OAAO,CAAC,eAAe;IAuCvB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,UAAU;IAUlB,OAAO,IAAI,OAAO;CAGnB"}
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud LLM Pipeline (OpenAI-compatible API)
|
|
3
|
+
* Works with: OpenAI, Ollama, vLLM, LMStudio, and any OpenAI-compatible endpoint
|
|
4
|
+
*
|
|
5
|
+
* Uses native fetch with streaming - no external dependencies required.
|
|
6
|
+
* Supports native tool calling via the OpenAI function calling API.
|
|
7
|
+
*/
|
|
8
|
+
import { LLMLogger, LLMConversationTracker } from '../../services';
|
|
9
|
+
export class CloudLLM {
|
|
10
|
+
config;
|
|
11
|
+
ready = false;
|
|
12
|
+
tracker;
|
|
13
|
+
constructor(config) {
|
|
14
|
+
this.config = {
|
|
15
|
+
maxTokens: 256,
|
|
16
|
+
temperature: 0.7,
|
|
17
|
+
...config,
|
|
18
|
+
};
|
|
19
|
+
this.tracker = new LLMConversationTracker(new LLMLogger());
|
|
20
|
+
}
|
|
21
|
+
async initialize(_onProgress) {
|
|
22
|
+
console.log(`Initializing Cloud LLM (${this.config.baseUrl})...`);
|
|
23
|
+
console.log(` Model: ${this.config.model}`);
|
|
24
|
+
// Validate the endpoint is reachable (optional health check)
|
|
25
|
+
try {
|
|
26
|
+
const modelsUrl = `${this.config.baseUrl}/models`;
|
|
27
|
+
const response = await fetch(modelsUrl, {
|
|
28
|
+
method: 'GET',
|
|
29
|
+
headers: this.getHeaders(),
|
|
30
|
+
});
|
|
31
|
+
if (!response.ok) {
|
|
32
|
+
// Some endpoints don't have /models, that's okay
|
|
33
|
+
console.log(' Note: /models endpoint not available (this is fine for some providers)');
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.log(' API endpoint verified.');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
// Connection errors are fine during init - we'll fail at generate time if needed
|
|
41
|
+
console.log(' Note: Could not verify API endpoint (will retry on first request)');
|
|
42
|
+
}
|
|
43
|
+
this.ready = true;
|
|
44
|
+
console.log('Cloud LLM ready.');
|
|
45
|
+
}
|
|
46
|
+
supportsTools() {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
async generate(messages, options) {
|
|
50
|
+
if (!this.ready) {
|
|
51
|
+
throw new Error('LLM pipeline not initialized');
|
|
52
|
+
}
|
|
53
|
+
// Use conversation ID if provided, else default
|
|
54
|
+
const conversationId = options?.conversationId ?? 'default';
|
|
55
|
+
// Log the input messages
|
|
56
|
+
this.tracker.logInput(conversationId, messages);
|
|
57
|
+
const url = `${this.config.baseUrl}/chat/completions`;
|
|
58
|
+
// Convert messages to OpenAI format
|
|
59
|
+
const openaiMessages = this.convertMessages(messages);
|
|
60
|
+
// Build request body
|
|
61
|
+
const body = {
|
|
62
|
+
model: this.config.model,
|
|
63
|
+
messages: openaiMessages,
|
|
64
|
+
max_tokens: this.config.maxTokens,
|
|
65
|
+
temperature: this.config.temperature,
|
|
66
|
+
stream: true,
|
|
67
|
+
};
|
|
68
|
+
// Add tools if provided
|
|
69
|
+
if (options?.tools && options.tools.length > 0) {
|
|
70
|
+
body.tools = this.convertTools(options.tools);
|
|
71
|
+
}
|
|
72
|
+
const response = await fetch(url, {
|
|
73
|
+
method: 'POST',
|
|
74
|
+
headers: {
|
|
75
|
+
...this.getHeaders(),
|
|
76
|
+
'Content-Type': 'application/json',
|
|
77
|
+
},
|
|
78
|
+
body: JSON.stringify(body),
|
|
79
|
+
});
|
|
80
|
+
if (!response.ok) {
|
|
81
|
+
const errorText = await response.text();
|
|
82
|
+
throw new Error(`Cloud LLM API error (${response.status}): ${errorText}`);
|
|
83
|
+
}
|
|
84
|
+
if (!response.body) {
|
|
85
|
+
throw new Error('No response body received');
|
|
86
|
+
}
|
|
87
|
+
// Parse SSE stream
|
|
88
|
+
const reader = response.body.getReader();
|
|
89
|
+
const decoder = new TextDecoder();
|
|
90
|
+
let fullContent = '';
|
|
91
|
+
let buffer = '';
|
|
92
|
+
const toolCalls = new Map();
|
|
93
|
+
let finishReason = 'stop';
|
|
94
|
+
while (true) {
|
|
95
|
+
const { done, value } = await reader.read();
|
|
96
|
+
if (done) {
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
buffer += decoder.decode(value, { stream: true });
|
|
100
|
+
// Process complete SSE lines
|
|
101
|
+
const lines = buffer.split('\n');
|
|
102
|
+
buffer = lines.pop() || ''; // Keep incomplete line in buffer
|
|
103
|
+
for (const line of lines) {
|
|
104
|
+
const trimmed = line.trim();
|
|
105
|
+
if (!trimmed || trimmed === 'data: [DONE]') {
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
if (trimmed.startsWith('data: ')) {
|
|
109
|
+
const jsonStr = trimmed.slice(6);
|
|
110
|
+
try {
|
|
111
|
+
const parsed = JSON.parse(jsonStr);
|
|
112
|
+
const choice = parsed.choices?.[0];
|
|
113
|
+
const delta = choice?.delta;
|
|
114
|
+
// Handle text content
|
|
115
|
+
if (delta?.content) {
|
|
116
|
+
fullContent += delta.content;
|
|
117
|
+
options?.onToken?.(delta.content);
|
|
118
|
+
}
|
|
119
|
+
// Handle tool calls (streamed incrementally)
|
|
120
|
+
if (delta?.tool_calls) {
|
|
121
|
+
for (const tc of delta.tool_calls) {
|
|
122
|
+
const index = tc.index ?? 0;
|
|
123
|
+
if (!toolCalls.has(index)) {
|
|
124
|
+
toolCalls.set(index, { id: '', name: '', arguments: '' });
|
|
125
|
+
}
|
|
126
|
+
const existing = toolCalls.get(index);
|
|
127
|
+
if (tc.id) {
|
|
128
|
+
existing.id = tc.id;
|
|
129
|
+
}
|
|
130
|
+
if (tc.function?.name) {
|
|
131
|
+
existing.name = tc.function.name;
|
|
132
|
+
}
|
|
133
|
+
if (tc.function?.arguments) {
|
|
134
|
+
existing.arguments += tc.function.arguments;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Check finish reason
|
|
139
|
+
if (choice?.finish_reason === 'tool_calls') {
|
|
140
|
+
finishReason = 'tool_calls';
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
// Skip malformed JSON lines (can happen with some providers)
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
// Convert collected tool calls to our format
|
|
150
|
+
const resultToolCalls = [];
|
|
151
|
+
for (const [, tc] of toolCalls) {
|
|
152
|
+
if (tc.id && tc.name) {
|
|
153
|
+
let args = {};
|
|
154
|
+
try {
|
|
155
|
+
args = JSON.parse(tc.arguments || '{}');
|
|
156
|
+
}
|
|
157
|
+
catch {
|
|
158
|
+
// Use empty args if parsing fails
|
|
159
|
+
}
|
|
160
|
+
const toolCall = {
|
|
161
|
+
id: tc.id,
|
|
162
|
+
name: tc.name,
|
|
163
|
+
arguments: args,
|
|
164
|
+
};
|
|
165
|
+
resultToolCalls.push(toolCall);
|
|
166
|
+
options?.onToolCall?.(toolCall);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// Log the response
|
|
170
|
+
this.tracker.logOutput(conversationId, fullContent, resultToolCalls.length > 0 ? resultToolCalls : undefined);
|
|
171
|
+
return {
|
|
172
|
+
content: fullContent,
|
|
173
|
+
toolCalls: resultToolCalls.length > 0 ? resultToolCalls : undefined,
|
|
174
|
+
finishReason: resultToolCalls.length > 0 ? 'tool_calls' : finishReason,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
convertMessages(messages) {
|
|
178
|
+
return messages.map((m) => {
|
|
179
|
+
// Handle tool messages
|
|
180
|
+
if (m.role === 'tool') {
|
|
181
|
+
const toolMsg = m;
|
|
182
|
+
return {
|
|
183
|
+
role: 'tool',
|
|
184
|
+
content: toolMsg.content,
|
|
185
|
+
tool_call_id: toolMsg.toolCallId,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
// Handle assistant messages with tool calls
|
|
189
|
+
if (m.role === 'assistant') {
|
|
190
|
+
const assistantMsg = m;
|
|
191
|
+
if (assistantMsg.toolCalls && assistantMsg.toolCalls.length > 0) {
|
|
192
|
+
return {
|
|
193
|
+
role: 'assistant',
|
|
194
|
+
content: assistantMsg.content || null,
|
|
195
|
+
tool_calls: assistantMsg.toolCalls.map((tc) => ({
|
|
196
|
+
id: tc.id,
|
|
197
|
+
type: 'function',
|
|
198
|
+
function: {
|
|
199
|
+
name: tc.name,
|
|
200
|
+
arguments: JSON.stringify(tc.arguments),
|
|
201
|
+
},
|
|
202
|
+
})),
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// Regular messages
|
|
207
|
+
return {
|
|
208
|
+
role: m.role,
|
|
209
|
+
content: m.content,
|
|
210
|
+
};
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
convertTools(tools) {
|
|
214
|
+
return tools.map((tool) => ({
|
|
215
|
+
type: 'function',
|
|
216
|
+
function: {
|
|
217
|
+
name: tool.name,
|
|
218
|
+
description: tool.description,
|
|
219
|
+
parameters: tool.parameters,
|
|
220
|
+
},
|
|
221
|
+
}));
|
|
222
|
+
}
|
|
223
|
+
getHeaders() {
|
|
224
|
+
const headers = {};
|
|
225
|
+
if (this.config.apiKey) {
|
|
226
|
+
headers['Authorization'] = `Bearer ${this.config.apiKey}`;
|
|
227
|
+
}
|
|
228
|
+
return headers;
|
|
229
|
+
}
|
|
230
|
+
isReady() {
|
|
231
|
+
return this.ready;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
//# sourceMappingURL=llm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm.js","sourceRoot":"","sources":["../../../src/backends/cloud/llm.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/backends/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// Export transformers (browser + Node.js compatible) from main index
|
|
2
|
+
// Native backends must be imported directly: import { ... } from 'modular-voice-agent-sdk/native'
|
|
3
|
+
// Cloud backends must be imported directly: import { CloudLLM } from 'modular-voice-agent-sdk/cloud'
|
|
4
|
+
// Web Speech APIs are in the client module: import { WebSpeechSTT, WebSpeechTTS } from 'modular-voice-agent-sdk/client'
|
|
5
|
+
export * from './transformers';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/backends/index.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,kGAAkG;AAClG,qGAAqG;AACrG,wHAAwH;AACxH,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/backends/native/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGlC,OAAO,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,aAAa,EACb,eAAe,GAChB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { NativeSTT } from './stt';
|
|
2
|
+
export { NativeLLM } from './llm';
|
|
3
|
+
export { NativeTTS } from './tts';
|
|
4
|
+
// Cache utilities (Node.js only)
|
|
5
|
+
export { getCacheDir, getModelsDir, getBinDir, getModelPath, getBinaryPath, defaultBinaries, } from '../../cache';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/backends/native/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,iCAAiC;AACjC,OAAO,EACL,WAAW,EACX,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,aAAa,EACb,eAAe,GAChB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native LLM Pipeline (llama.cpp)
|
|
3
|
+
* Server-only - requires native binary (llama-completion)
|
|
4
|
+
*
|
|
5
|
+
* When tools are provided, uses GBNF grammar that allows either:
|
|
6
|
+
* - TOOL: [{"name": "...", "arguments": {...}}] for tool invocations
|
|
7
|
+
* - SAY: natural language for direct responses (streamable!)
|
|
8
|
+
*
|
|
9
|
+
* This allows real token streaming for text responses while maintaining
|
|
10
|
+
* structured tool calling when needed.
|
|
11
|
+
*/
|
|
12
|
+
import type { LLMPipeline, NativeLLMConfig, ProgressCallback, Message, LLMGenerateOptions, LLMGenerateResult } from '../../types';
|
|
13
|
+
export declare class NativeLLM implements LLMPipeline {
|
|
14
|
+
private config;
|
|
15
|
+
private ready;
|
|
16
|
+
private tracker;
|
|
17
|
+
constructor(config: NativeLLMConfig);
|
|
18
|
+
initialize(_onProgress?: ProgressCallback): Promise<void>;
|
|
19
|
+
supportsTools(): boolean;
|
|
20
|
+
generate(messages: Message[], options?: LLMGenerateOptions): Promise<LLMGenerateResult>;
|
|
21
|
+
/**
|
|
22
|
+
* Build the tool system prompt
|
|
23
|
+
*/
|
|
24
|
+
private buildToolSystemPrompt;
|
|
25
|
+
/**
|
|
26
|
+
* Generate with GBNF grammar constraint
|
|
27
|
+
* Allows either:
|
|
28
|
+
* - TOOL: [{...}] for tool invocations
|
|
29
|
+
* - SAY: text for streamable text responses
|
|
30
|
+
*/
|
|
31
|
+
private generateWithGrammar;
|
|
32
|
+
/**
|
|
33
|
+
* Parse tool call output
|
|
34
|
+
* TOOL: [{"name": "...", "arguments": {...}}]
|
|
35
|
+
*/
|
|
36
|
+
private parseToolCallOutput;
|
|
37
|
+
/**
|
|
38
|
+
* Build GBNF grammar that allows either:
|
|
39
|
+
* - TOOL: [{"name": "...", "arguments": {...}}]
|
|
40
|
+
* - SAY: free text
|
|
41
|
+
*/
|
|
42
|
+
private buildToolGrammar;
|
|
43
|
+
/**
|
|
44
|
+
* Format chat prompt with tool definitions (for grammar mode)
|
|
45
|
+
* Uses ChatML format with tool instructions
|
|
46
|
+
*/
|
|
47
|
+
private formatChatPromptWithTools;
|
|
48
|
+
/** Special tokens to filter from output */
|
|
49
|
+
private static readonly SPECIAL_TOKENS;
|
|
50
|
+
/**
|
|
51
|
+
* Run llama-completion and capture output
|
|
52
|
+
* Output goes to stdout, debug/timing info goes to stderr (ignored)
|
|
53
|
+
*/
|
|
54
|
+
private runLlamaCompletion;
|
|
55
|
+
/**
|
|
56
|
+
* Run llama-completion with smart streaming
|
|
57
|
+
* - SAY: streams tokens as they arrive
|
|
58
|
+
* - TOOL: buffers until complete, then parses
|
|
59
|
+
*/
|
|
60
|
+
private runLlamaCompletionWithStreaming;
|
|
61
|
+
/**
|
|
62
|
+
* Freeform generation (no grammar) - used when no tools are provided
|
|
63
|
+
*/
|
|
64
|
+
private generateFreeform;
|
|
65
|
+
/**
|
|
66
|
+
* Format basic chat prompt (for non-tool mode)
|
|
67
|
+
*/
|
|
68
|
+
private formatChatPrompt;
|
|
69
|
+
isReady(): boolean;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=llm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm.d.ts","sourceRoot":"","sources":["../../../src/backends/native/llm.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,OAAO,EACP,kBAAkB,EAClB,iBAAiB,EAGlB,MAAM,aAAa,CAAC;AAGrB,qBAAa,SAAU,YAAW,WAAW;IAC3C,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAyB;gBAE5B,MAAM,EAAE,eAAe;IAK7B,UAAU,CAAC,WAAW,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/D,aAAa,IAAI,OAAO;IAIlB,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAe7F;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA+B7B;;;;;OAKG;YACW,mBAAmB;IA8CjC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAuB3B;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAyCxB;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAwCjC,2CAA2C;IAC3C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAmE;IAEzG;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IA8C1B;;;;OAIG;IACH,OAAO,CAAC,+BAA+B;IAyHvC;;OAEG;YACW,gBAAgB;IA6B9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,IAAI,OAAO;CAGnB"}
|