jazz-ai 0.2.2 → 0.4.3
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 +8 -6
- package/dist/cli/commands/chat-agent.d.ts +3 -1
- package/dist/cli/commands/chat-agent.d.ts.map +1 -1
- package/dist/cli/commands/chat-agent.js +180 -102
- package/dist/cli/commands/chat-agent.js.map +1 -1
- package/dist/cli/commands/edit-agent.d.ts +2 -2
- package/dist/cli/commands/edit-agent.d.ts.map +1 -1
- package/dist/cli/commands/edit-agent.js +20 -10
- package/dist/cli/commands/edit-agent.js.map +1 -1
- package/dist/cli/commands/task-agent.d.ts +1 -1
- package/dist/cli/commands/task-agent.d.ts.map +1 -1
- package/dist/cli/commands/task-agent.js +6 -6
- package/dist/cli/commands/task-agent.js.map +1 -1
- package/dist/constants/agent.d.ts +2 -0
- package/dist/constants/agent.d.ts.map +1 -0
- package/dist/constants/agent.js +5 -0
- package/dist/constants/agent.js.map +1 -0
- package/dist/core/agent/agent-prompt.d.ts +0 -1
- package/dist/core/agent/agent-prompt.d.ts.map +1 -1
- package/dist/core/agent/agent-prompt.js +7 -15
- package/dist/core/agent/agent-prompt.js.map +1 -1
- package/dist/core/agent/agent-runner.d.ts +15 -0
- package/dist/core/agent/agent-runner.d.ts.map +1 -1
- package/dist/core/agent/agent-runner.js +570 -270
- package/dist/core/agent/agent-runner.js.map +1 -1
- package/dist/core/agent/agent-service.d.ts +20 -5
- package/dist/core/agent/agent-service.d.ts.map +1 -1
- package/dist/core/agent/agent-service.js +54 -6
- package/dist/core/agent/agent-service.js.map +1 -1
- package/dist/core/agent/gmail-agent.js +7 -7
- package/dist/core/agent/gmail-agent.js.map +1 -1
- package/dist/core/agent/prompts/coder/v1.d.ts +2 -0
- package/dist/core/agent/prompts/coder/v1.d.ts.map +1 -0
- package/dist/core/agent/prompts/coder/v1.js +370 -0
- package/dist/core/agent/prompts/coder/v1.js.map +1 -0
- package/dist/core/agent/prompts/default/v2.d.ts +1 -1
- package/dist/core/agent/prompts/default/v2.d.ts.map +1 -1
- package/dist/core/agent/prompts/default/v2.js +1 -2
- package/dist/core/agent/prompts/default/v2.js.map +1 -1
- package/dist/core/agent/prompts/gmail/v1.d.ts +1 -1
- package/dist/core/agent/prompts/gmail/v1.d.ts.map +1 -1
- package/dist/core/agent/prompts/gmail/v1.js +5 -5
- package/dist/core/agent/prompts/gmail/v2.d.ts +1 -1
- package/dist/core/agent/prompts/gmail/v2.d.ts.map +1 -1
- package/dist/core/agent/prompts/gmail/v2.js +7 -7
- package/dist/core/agent/tools/base-tool.d.ts +3 -4
- package/dist/core/agent/tools/base-tool.d.ts.map +1 -1
- package/dist/core/agent/tools/base-tool.js +11 -51
- package/dist/core/agent/tools/base-tool.js.map +1 -1
- package/dist/core/agent/tools/context-utils.d.ts +6 -0
- package/dist/core/agent/tools/context-utils.d.ts.map +1 -0
- package/dist/core/agent/tools/context-utils.js +9 -0
- package/dist/core/agent/tools/context-utils.js.map +1 -0
- package/dist/core/agent/tools/env-utils.d.ts +7 -0
- package/dist/core/agent/tools/env-utils.d.ts.map +1 -0
- package/dist/core/agent/tools/env-utils.js +39 -0
- package/dist/core/agent/tools/env-utils.js.map +1 -0
- package/dist/core/agent/tools/fs-tools.d.ts.map +1 -1
- package/dist/core/agent/tools/fs-tools.js +48 -53
- package/dist/core/agent/tools/fs-tools.js.map +1 -1
- package/dist/core/agent/tools/git-tools.d.ts +5 -0
- package/dist/core/agent/tools/git-tools.d.ts.map +1 -1
- package/dist/core/agent/tools/git-tools.js +716 -154
- package/dist/core/agent/tools/git-tools.js.map +1 -1
- package/dist/core/agent/tools/gmail-tools.js +35 -35
- package/dist/core/agent/tools/gmail-tools.js.map +1 -1
- package/dist/core/agent/tools/http-tools.js +2 -2
- package/dist/core/agent/tools/http-tools.js.map +1 -1
- package/dist/core/agent/tools/register-tools.d.ts +18 -1
- package/dist/core/agent/tools/register-tools.d.ts.map +1 -1
- package/dist/core/agent/tools/register-tools.js +52 -6
- package/dist/core/agent/tools/register-tools.js.map +1 -1
- package/dist/core/agent/tools/shell-tools.d.ts.map +1 -1
- package/dist/core/agent/tools/shell-tools.js +10 -20
- package/dist/core/agent/tools/shell-tools.js.map +1 -1
- package/dist/core/agent/tools/tool-registry.d.ts +11 -7
- package/dist/core/agent/tools/tool-registry.d.ts.map +1 -1
- package/dist/core/agent/tools/tool-registry.js +45 -19
- package/dist/core/agent/tools/tool-registry.js.map +1 -1
- package/dist/core/agent/tools/web-search-tools.js +1 -1
- package/dist/core/agent/tools/web-search-tools.js.map +1 -1
- package/dist/core/agent/tracking/agent-run-tracker.d.ts +2 -0
- package/dist/core/agent/tracking/agent-run-tracker.d.ts.map +1 -1
- package/dist/core/agent/tracking/agent-run-tracker.js +40 -2
- package/dist/core/agent/tracking/agent-run-tracker.js.map +1 -1
- package/dist/core/types/index.d.ts +82 -15
- package/dist/core/types/index.d.ts.map +1 -1
- package/dist/core/types/index.js.map +1 -1
- package/dist/core/utils/markdown-renderer.d.ts +25 -0
- package/dist/core/utils/markdown-renderer.d.ts.map +1 -1
- package/dist/core/utils/markdown-renderer.js +100 -1
- package/dist/core/utils/markdown-renderer.js.map +1 -1
- package/dist/core/utils/output-renderer.d.ts +81 -0
- package/dist/core/utils/output-renderer.d.ts.map +1 -0
- package/dist/core/utils/output-renderer.js +291 -0
- package/dist/core/utils/output-renderer.js.map +1 -0
- package/dist/core/utils/output-theme.d.ts +64 -0
- package/dist/core/utils/output-theme.d.ts.map +1 -0
- package/dist/core/utils/output-theme.js +154 -0
- package/dist/core/utils/output-theme.js.map +1 -0
- package/dist/core/utils/output-writer.d.ts +79 -0
- package/dist/core/utils/output-writer.d.ts.map +1 -0
- package/dist/core/utils/output-writer.js +133 -0
- package/dist/core/utils/output-writer.js.map +1 -0
- package/dist/core/utils/runtime-detection.d.ts +28 -0
- package/dist/core/utils/runtime-detection.d.ts.map +1 -0
- package/dist/core/utils/runtime-detection.js +62 -0
- package/dist/core/utils/runtime-detection.js.map +1 -0
- package/dist/core/utils/string.d.ts +8 -0
- package/dist/core/utils/string.d.ts.map +1 -0
- package/dist/core/utils/string.js +19 -0
- package/dist/core/utils/string.js.map +1 -0
- package/dist/core/utils/thinking-renderer.d.ts +56 -0
- package/dist/core/utils/thinking-renderer.d.ts.map +1 -0
- package/dist/core/utils/thinking-renderer.js +174 -0
- package/dist/core/utils/thinking-renderer.js.map +1 -0
- package/dist/core/utils/tool-formatter.d.ts +21 -0
- package/dist/core/utils/tool-formatter.d.ts.map +1 -0
- package/dist/core/utils/tool-formatter.js +343 -0
- package/dist/core/utils/tool-formatter.js.map +1 -0
- package/dist/main.js +11 -4
- package/dist/main.js.map +1 -1
- package/dist/services/config.d.ts.map +1 -1
- package/dist/services/config.js +20 -20
- package/dist/services/config.js.map +1 -1
- package/dist/services/llm/ai-sdk-service.d.ts.map +1 -1
- package/dist/services/llm/ai-sdk-service.js +128 -37
- package/dist/services/llm/ai-sdk-service.js.map +1 -1
- package/dist/services/llm/stream-detector.d.ts +44 -0
- package/dist/services/llm/stream-detector.d.ts.map +1 -0
- package/dist/services/llm/stream-detector.js +81 -0
- package/dist/services/llm/stream-detector.js.map +1 -0
- package/dist/services/llm/stream-processor.d.ts +93 -0
- package/dist/services/llm/stream-processor.d.ts.map +1 -0
- package/dist/services/llm/stream-processor.js +330 -0
- package/dist/services/llm/stream-processor.js.map +1 -0
- package/dist/services/llm/streaming-types.d.ts +131 -0
- package/dist/services/llm/streaming-types.d.ts.map +1 -0
- package/dist/services/llm/streaming-types.js +12 -0
- package/dist/services/llm/streaming-types.js.map +1 -0
- package/dist/services/llm/types.d.ts +8 -0
- package/dist/services/llm/types.d.ts.map +1 -1
- package/dist/services/llm/types.js.map +1 -1
- package/dist/services/logger.d.ts +4 -4
- package/dist/services/logger.d.ts.map +1 -1
- package/dist/services/logger.js +23 -45
- package/dist/services/logger.js.map +1 -1
- package/dist/services/shell.d.ts.map +1 -1
- package/dist/services/shell.js +52 -18
- package/dist/services/shell.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Stream Processing Utilities
|
|
4
|
+
*
|
|
5
|
+
* Clean separation of concerns for AI SDK streaming:
|
|
6
|
+
* - Handles AI SDK StreamText responses
|
|
7
|
+
* - Emits Effect Stream events
|
|
8
|
+
* - Manages completion signals
|
|
9
|
+
* - Tracks reasoning and text streams
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.StreamProcessor = void 0;
|
|
13
|
+
const effect_1 = require("effect");
|
|
14
|
+
/**
|
|
15
|
+
* Create initial processor state
|
|
16
|
+
*/
|
|
17
|
+
function createInitialState() {
|
|
18
|
+
return {
|
|
19
|
+
accumulatedText: "",
|
|
20
|
+
textSequence: 0,
|
|
21
|
+
textStreamCompleted: false,
|
|
22
|
+
hasStartedText: false,
|
|
23
|
+
reasoningSequence: 0,
|
|
24
|
+
reasoningStreamCompleted: false,
|
|
25
|
+
hasStartedReasoning: false,
|
|
26
|
+
thinkingCompleteEmitted: false,
|
|
27
|
+
reasoningTokens: undefined,
|
|
28
|
+
collectedToolCalls: [],
|
|
29
|
+
firstTokenTime: null,
|
|
30
|
+
finishEventReceived: false,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Stream Processor
|
|
35
|
+
* Handles AI SDK streaming responses and emits Effect stream events
|
|
36
|
+
*/
|
|
37
|
+
class StreamProcessor {
|
|
38
|
+
config;
|
|
39
|
+
emit;
|
|
40
|
+
state;
|
|
41
|
+
completionResolver = null;
|
|
42
|
+
completionPromise;
|
|
43
|
+
constructor(config, emit) {
|
|
44
|
+
this.config = config;
|
|
45
|
+
this.emit = emit;
|
|
46
|
+
this.state = createInitialState();
|
|
47
|
+
// Create completion promise
|
|
48
|
+
this.completionPromise = new Promise((resolve) => {
|
|
49
|
+
this.completionResolver = resolve;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get the completion promise
|
|
54
|
+
*/
|
|
55
|
+
get completion() {
|
|
56
|
+
return this.completionPromise;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Process AI SDK StreamText result
|
|
60
|
+
* Returns the final ChatCompletionResponse
|
|
61
|
+
*/
|
|
62
|
+
async process(result) {
|
|
63
|
+
// Emit stream start
|
|
64
|
+
void this.emitEvent({
|
|
65
|
+
type: "stream_start",
|
|
66
|
+
provider: this.config.providerName,
|
|
67
|
+
model: this.config.modelName,
|
|
68
|
+
timestamp: this.config.startTime,
|
|
69
|
+
});
|
|
70
|
+
// Start processing streams in parallel
|
|
71
|
+
await Promise.all([
|
|
72
|
+
this.processTextStream(result),
|
|
73
|
+
this.processReasoningText(result),
|
|
74
|
+
this.processFullStream(result),
|
|
75
|
+
]);
|
|
76
|
+
// Wait for completion
|
|
77
|
+
await this.completionPromise;
|
|
78
|
+
// Build final response
|
|
79
|
+
const finalResponse = await this.buildFinalResponse(result);
|
|
80
|
+
// Emit complete event
|
|
81
|
+
this.emitCompleteEvent(finalResponse);
|
|
82
|
+
return finalResponse;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Process text stream
|
|
86
|
+
*/
|
|
87
|
+
async processTextStream(result) {
|
|
88
|
+
try {
|
|
89
|
+
for await (const textChunk of result.textStream) {
|
|
90
|
+
// Emit text start on first chunk
|
|
91
|
+
if (!this.state.hasStartedText && textChunk.length > 0) {
|
|
92
|
+
void this.emitEvent({ type: "text_start" });
|
|
93
|
+
this.state.hasStartedText = true;
|
|
94
|
+
this.recordFirstToken();
|
|
95
|
+
}
|
|
96
|
+
// Emit text chunk
|
|
97
|
+
if (textChunk.length > 0) {
|
|
98
|
+
this.state.accumulatedText += textChunk;
|
|
99
|
+
void this.emitEvent({
|
|
100
|
+
type: "text_chunk",
|
|
101
|
+
delta: textChunk,
|
|
102
|
+
accumulated: this.state.accumulatedText,
|
|
103
|
+
sequence: this.state.textSequence++,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// Handle stream errors gracefully
|
|
110
|
+
}
|
|
111
|
+
finally {
|
|
112
|
+
this.state.textStreamCompleted = true;
|
|
113
|
+
this.checkCompletion();
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Process reasoning text (for reasoning models)
|
|
118
|
+
*/
|
|
119
|
+
async processReasoningText(result) {
|
|
120
|
+
if (!this.config.hasReasoningEnabled) {
|
|
121
|
+
this.state.reasoningStreamCompleted = true;
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
// Wait for reasoning text with timeout
|
|
126
|
+
const reasoningText = await Promise.race([
|
|
127
|
+
result.reasoningText,
|
|
128
|
+
new Promise((resolve) => setTimeout(() => resolve(undefined), 30 * 60 * 1000)),
|
|
129
|
+
]);
|
|
130
|
+
// Only emit if we have reasoning content
|
|
131
|
+
if (reasoningText && reasoningText.length > 0) {
|
|
132
|
+
// Emit thinking start
|
|
133
|
+
if (!this.state.hasStartedReasoning) {
|
|
134
|
+
void this.emitEvent({ type: "thinking_start", provider: this.config.providerName });
|
|
135
|
+
this.state.hasStartedReasoning = true;
|
|
136
|
+
this.recordFirstToken();
|
|
137
|
+
}
|
|
138
|
+
// Emit reasoning chunks
|
|
139
|
+
const chunkSize = 1000;
|
|
140
|
+
for (let i = 0; i < reasoningText.length; i += chunkSize) {
|
|
141
|
+
const chunk = reasoningText.slice(i, i + chunkSize);
|
|
142
|
+
void this.emitEvent({
|
|
143
|
+
type: "thinking_chunk",
|
|
144
|
+
content: chunk,
|
|
145
|
+
sequence: this.state.reasoningSequence++,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
// Emit thinking complete
|
|
149
|
+
if (!this.state.thinkingCompleteEmitted) {
|
|
150
|
+
void this.emitEvent({
|
|
151
|
+
type: "thinking_complete",
|
|
152
|
+
...(this.state.reasoningTokens !== undefined && { totalTokens: this.state.reasoningTokens }),
|
|
153
|
+
});
|
|
154
|
+
this.state.thinkingCompleteEmitted = true;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
// Silently handle reasoning errors - they shouldn't block the main response
|
|
160
|
+
}
|
|
161
|
+
finally {
|
|
162
|
+
this.state.reasoningStreamCompleted = true;
|
|
163
|
+
this.checkCompletion();
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Process full stream for tool calls and metadata
|
|
168
|
+
*/
|
|
169
|
+
async processFullStream(result) {
|
|
170
|
+
for await (const part of result.fullStream) {
|
|
171
|
+
// Stop if we've finished
|
|
172
|
+
if (this.state.finishEventReceived) {
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
switch (part.type) {
|
|
176
|
+
case "tool-call": {
|
|
177
|
+
const toolCall = {
|
|
178
|
+
id: part.toolCallId,
|
|
179
|
+
type: "function",
|
|
180
|
+
function: {
|
|
181
|
+
name: part.toolName,
|
|
182
|
+
arguments: JSON.stringify(part.input),
|
|
183
|
+
},
|
|
184
|
+
};
|
|
185
|
+
this.state.collectedToolCalls.push(toolCall);
|
|
186
|
+
void this.emitEvent({
|
|
187
|
+
type: "tool_call",
|
|
188
|
+
toolCall,
|
|
189
|
+
sequence: this.state.textSequence++,
|
|
190
|
+
});
|
|
191
|
+
break;
|
|
192
|
+
}
|
|
193
|
+
case "reasoning-end": {
|
|
194
|
+
// Extract reasoning tokens from metadata
|
|
195
|
+
const totalUsage = "totalUsage" in part ? part.totalUsage : undefined;
|
|
196
|
+
const usage = "usage" in part ? part.usage : undefined;
|
|
197
|
+
const reasoningTokens = totalUsage && typeof totalUsage === "object" && "reasoningTokens" in totalUsage
|
|
198
|
+
? totalUsage.reasoningTokens
|
|
199
|
+
: usage && typeof usage === "object" && "reasoningTokens" in usage
|
|
200
|
+
? usage.reasoningTokens
|
|
201
|
+
: undefined;
|
|
202
|
+
if (reasoningTokens !== undefined) {
|
|
203
|
+
this.state.reasoningTokens = reasoningTokens;
|
|
204
|
+
}
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
case "finish": {
|
|
208
|
+
this.state.finishEventReceived = true;
|
|
209
|
+
// For non-reasoning models, resolve immediately
|
|
210
|
+
// For reasoning models, wait for reasoning text to complete
|
|
211
|
+
if (!this.config.hasReasoningEnabled) {
|
|
212
|
+
this.resolveCompletion();
|
|
213
|
+
}
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
case "error": {
|
|
217
|
+
throw part.error;
|
|
218
|
+
}
|
|
219
|
+
// Ignore other event types (text-delta, text-start, etc.) - handled by textStream
|
|
220
|
+
default:
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Build final response
|
|
227
|
+
*/
|
|
228
|
+
async buildFinalResponse(result) {
|
|
229
|
+
const finalText = this.state.accumulatedText;
|
|
230
|
+
const toolCalls = this.state.collectedToolCalls.length > 0 ? this.state.collectedToolCalls : undefined;
|
|
231
|
+
// Try to get usage quickly (50ms timeout)
|
|
232
|
+
let usage;
|
|
233
|
+
try {
|
|
234
|
+
const usageResult = await Promise.race([
|
|
235
|
+
result.usage,
|
|
236
|
+
new Promise((resolve) => setTimeout(() => resolve(undefined), 50)),
|
|
237
|
+
]);
|
|
238
|
+
if (usageResult) {
|
|
239
|
+
usage = {
|
|
240
|
+
promptTokens: usageResult.inputTokens ?? 0,
|
|
241
|
+
completionTokens: usageResult.outputTokens ?? 0,
|
|
242
|
+
totalTokens: usageResult.totalTokens ?? 0,
|
|
243
|
+
};
|
|
244
|
+
// Emit usage update
|
|
245
|
+
void this.emitEvent({ type: "usage_update", usage });
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
// Ignore usage errors
|
|
250
|
+
}
|
|
251
|
+
return {
|
|
252
|
+
id: "",
|
|
253
|
+
model: this.config.modelName,
|
|
254
|
+
content: finalText,
|
|
255
|
+
...(toolCalls && { toolCalls }),
|
|
256
|
+
...(usage && { usage }),
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Emit complete event with metrics
|
|
261
|
+
*/
|
|
262
|
+
emitCompleteEvent(response) {
|
|
263
|
+
const endTime = Date.now();
|
|
264
|
+
const totalDurationMs = endTime - this.config.startTime;
|
|
265
|
+
let metrics;
|
|
266
|
+
if (this.state.firstTokenTime) {
|
|
267
|
+
const firstTokenLatencyMs = this.state.firstTokenTime - this.config.startTime;
|
|
268
|
+
metrics = { firstTokenLatencyMs };
|
|
269
|
+
if (response.usage?.totalTokens) {
|
|
270
|
+
metrics.tokensPerSecond = (response.usage.totalTokens / totalDurationMs) * 1000;
|
|
271
|
+
metrics.totalTokens = response.usage.totalTokens;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
this.emitEvent({
|
|
275
|
+
type: "complete",
|
|
276
|
+
response,
|
|
277
|
+
totalDurationMs,
|
|
278
|
+
...(metrics && { metrics }),
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Record first token time
|
|
283
|
+
*/
|
|
284
|
+
recordFirstToken() {
|
|
285
|
+
if (!this.state.firstTokenTime) {
|
|
286
|
+
this.state.firstTokenTime = Date.now();
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Check if we can resolve completion
|
|
291
|
+
*/
|
|
292
|
+
checkCompletion() {
|
|
293
|
+
// For reasoning models: wait for both text and reasoning streams
|
|
294
|
+
// For non-reasoning models: wait for text stream only
|
|
295
|
+
if (this.config.hasReasoningEnabled) {
|
|
296
|
+
if (this.state.textStreamCompleted && this.state.reasoningStreamCompleted) {
|
|
297
|
+
this.resolveCompletion();
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
if (this.state.textStreamCompleted) {
|
|
302
|
+
this.resolveCompletion();
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Resolve completion
|
|
308
|
+
*/
|
|
309
|
+
resolveCompletion() {
|
|
310
|
+
if (this.completionResolver) {
|
|
311
|
+
this.completionResolver();
|
|
312
|
+
this.completionResolver = null;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Emit a stream event
|
|
317
|
+
*/
|
|
318
|
+
emitEvent(event) {
|
|
319
|
+
this.emit(effect_1.Effect.succeed(effect_1.Chunk.of(event)));
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Close the stream
|
|
323
|
+
*/
|
|
324
|
+
close() {
|
|
325
|
+
// Signal end of stream
|
|
326
|
+
this.emit(effect_1.Effect.fail(effect_1.Option.none()));
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
exports.StreamProcessor = StreamProcessor;
|
|
330
|
+
//# sourceMappingURL=stream-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream-processor.js","sourceRoot":"","sources":["../../../src/services/llm/stream-processor.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAGH,mCAA+C;AAmD/C;;GAEG;AACH,SAAS,kBAAkB;IACzB,OAAO;QACL,eAAe,EAAE,EAAE;QACnB,YAAY,EAAE,CAAC;QACf,mBAAmB,EAAE,KAAK;QAC1B,cAAc,EAAE,KAAK;QACrB,iBAAiB,EAAE,CAAC;QACpB,wBAAwB,EAAE,KAAK;QAC/B,mBAAmB,EAAE,KAAK;QAC1B,uBAAuB,EAAE,KAAK;QAC9B,eAAe,EAAE,SAAS;QAC1B,kBAAkB,EAAE,EAAE;QACtB,cAAc,EAAE,IAAI;QACpB,mBAAmB,EAAE,KAAK;KAC3B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAa,eAAe;IAMP;IACA;IANX,KAAK,CAAuB;IAC5B,kBAAkB,GAAwB,IAAI,CAAC;IAC/C,iBAAiB,CAAgB;IAEzC,YACmB,MAA6B,EAC7B,IAAkB;QADlB,WAAM,GAAN,MAAM,CAAuB;QAC7B,SAAI,GAAJ,IAAI,CAAc;QAEnC,IAAI,CAAC,KAAK,GAAG,kBAAkB,EAAE,CAAC;QAElC,4BAA4B;QAC5B,IAAI,CAAC,iBAAiB,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YACrD,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO,CAAC,MAAwB;QACpC,oBAAoB;QACpB,KAAK,IAAI,CAAC,SAAS,CAAC;YAClB,IAAI,EAAE,cAAc;YACpB,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;YAClC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YAC5B,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;SACjC,CAAC,CAAC;QAEH,uCAAuC;QACvC,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;YAC9B,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC;YACjC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;SAC/B,CAAC,CAAC;QAEH,sBAAsB;QACtB,MAAM,IAAI,CAAC,iBAAiB,CAAC;QAE7B,uBAAuB;QACvB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAE5D,sBAAsB;QACtB,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QAEtC,OAAO,aAAa,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAAC,MAAwB;QACtD,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;gBAChD,iCAAiC;gBACjC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvD,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;oBAC5C,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;oBACjC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,CAAC;gBAED,kBAAkB;gBAClB,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzB,IAAI,CAAC,KAAK,CAAC,eAAe,IAAI,SAAS,CAAC;oBACxC,KAAK,IAAI,CAAC,SAAS,CAAC;wBAClB,IAAI,EAAE,YAAY;wBAClB,KAAK,EAAE,SAAS;wBAChB,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe;wBACvC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;qBACpC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC;YACtC,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB,CAAC,MAAwB;QACzD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC;YAC3C,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,uCAAuC;YACvC,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBACvC,MAAM,CAAC,aAAa;gBACpB,IAAI,OAAO,CAAqB,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;aACnG,CAAC,CAAC;YAEH,yCAAyC;YACzC,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9C,sBAAsB;gBACtB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;oBACpC,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;oBACpF,IAAI,CAAC,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC;oBACtC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBAC1B,CAAC;gBAED,wBAAwB;gBACxB,MAAM,SAAS,GAAG,IAAI,CAAC;gBACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;oBACzD,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC;oBACpD,KAAK,IAAI,CAAC,SAAS,CAAC;wBAClB,IAAI,EAAE,gBAAgB;wBACtB,OAAO,EAAE,KAAK;wBACd,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE;qBACzC,CAAC,CAAC;gBACL,CAAC;gBAED,yBAAyB;gBACzB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC;oBACxC,KAAK,IAAI,CAAC,SAAS,CAAC;wBAClB,IAAI,EAAE,mBAAmB;wBACzB,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;qBAC7F,CAAC,CAAC;oBACH,IAAI,CAAC,KAAK,CAAC,uBAAuB,GAAG,IAAI,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,4EAA4E;QAC9E,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC;YAC3C,IAAI,CAAC,eAAe,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAAC,MAAwB;QACtD,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YACzC,yBAAyB;YACzB,IAAI,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;gBACnC,MAAM;YACR,CAAC;YAED,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,KAAK,WAAW,CAAC,CAAC,CAAC;oBACjB,MAAM,QAAQ,GAAa;wBACzB,EAAE,EAAE,IAAI,CAAC,UAAU;wBACnB,IAAI,EAAE,UAAU;wBAChB,QAAQ,EAAE;4BACR,IAAI,EAAE,IAAI,CAAC,QAAQ;4BACnB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;yBACtC;qBACF,CAAC;oBACF,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;oBAE7C,KAAK,IAAI,CAAC,SAAS,CAAC;wBAClB,IAAI,EAAE,WAAW;wBACjB,QAAQ;wBACR,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE;qBACpC,CAAC,CAAC;oBACH,MAAM;gBACR,CAAC;gBAED,KAAK,eAAe,CAAC,CAAC,CAAC;oBACrB,yCAAyC;oBACzC,MAAM,UAAU,GAAG,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;oBACtE,MAAM,KAAK,GAAG,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;oBAEvD,MAAM,eAAe,GACnB,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,iBAAiB,IAAI,UAAU;wBAC7E,CAAC,CAAE,UAA2C,CAAC,eAAe;wBAC9D,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,iBAAiB,IAAI,KAAK;4BAChE,CAAC,CAAE,KAAsC,CAAC,eAAe;4BACzD,CAAC,CAAC,SAAS,CAAC;oBAElB,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;wBAClC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC;oBAC/C,CAAC;oBACD,MAAM;gBACR,CAAC;gBAED,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,IAAI,CAAC,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC;oBACtC,gDAAgD;oBAChD,4DAA4D;oBAC5D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;wBACrC,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBAC3B,CAAC;oBACD,MAAM;gBACR,CAAC;gBAED,KAAK,OAAO,CAAC,CAAC,CAAC;oBACb,MAAM,IAAI,CAAC,KAAK,CAAC;gBACnB,CAAC;gBAED,kFAAkF;gBAClF;oBACE,MAAM;YACV,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,kBAAkB,CAAC,MAAwB;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC;QAEvG,0CAA0C;QAC1C,IAAI,KAAkD,CAAC;QACvD,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC;gBACrC,MAAM,CAAC,KAAK;gBACZ,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;aAC9E,CAAC,CAAC;YAEH,IAAI,WAAW,EAAE,CAAC;gBAChB,KAAK,GAAG;oBACN,YAAY,EAAE,WAAW,CAAC,WAAW,IAAI,CAAC;oBAC1C,gBAAgB,EAAE,WAAW,CAAC,YAAY,IAAI,CAAC;oBAC/C,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,CAAC;iBAC1C,CAAC;gBAEF,oBAAoB;gBACpB,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,sBAAsB;QACxB,CAAC;QAED,OAAO;YACL,EAAE,EAAE,EAAE;YACN,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;YAC5B,OAAO,EAAE,SAAS;YAClB,GAAG,CAAC,SAAS,IAAI,EAAE,SAAS,EAAE,CAAC;YAC/B,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;SACxB,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,QAAgC;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QAExD,IAAI,OAMS,CAAC;QAEd,IAAI,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAC9B,MAAM,mBAAmB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YAC9E,OAAO,GAAG,EAAE,mBAAmB,EAAE,CAAC;YAElC,IAAI,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC;gBAChC,OAAO,CAAC,eAAe,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,GAAG,eAAe,CAAC,GAAG,IAAI,CAAC;gBAChF,OAAO,CAAC,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC;YACnD,CAAC;QACH,CAAC;QAED,IAAI,CAAC,SAAS,CAAC;YACb,IAAI,EAAE,UAAU;YAChB,QAAQ;YACR,eAAe;YACf,GAAG,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,CAAC;SAC5B,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,eAAe;QACrB,iEAAiE;QACjE,sDAAsD;QACtD,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,CAAC;YACpC,IAAI,IAAI,CAAC,KAAK,CAAC,mBAAmB,IAAI,IAAI,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC;gBAC1E,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;gBACnC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,iBAAiB;QACvB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QACjC,CAAC;IACH,CAAC;IAED;;OAEG;IACK,SAAS,CAAC,KAAkB;QAClC,IAAI,CAAC,IAAI,CAAC,eAAM,CAAC,OAAO,CAAC,cAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED;;OAEG;IACH,KAAK;QACH,uBAAuB;QACvB,IAAI,CAAC,IAAI,CAAC,eAAM,CAAC,IAAI,CAAC,eAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;CACF;AA3UD,0CA2UC"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { Effect, Stream } from "effect";
|
|
2
|
+
import type { ChatCompletionResponse, LLMError, ToolCall } from "./types";
|
|
3
|
+
/**
|
|
4
|
+
* Streaming LLM types and interfaces
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Token usage information
|
|
8
|
+
*/
|
|
9
|
+
export interface TokenUsage {
|
|
10
|
+
promptTokens: number;
|
|
11
|
+
completionTokens: number;
|
|
12
|
+
totalTokens: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Structured streaming events - discriminated union
|
|
16
|
+
* These events allow consumers to react to different phases of the streaming response
|
|
17
|
+
*/
|
|
18
|
+
export type StreamEvent = {
|
|
19
|
+
type: "stream_start";
|
|
20
|
+
provider: string;
|
|
21
|
+
model: string;
|
|
22
|
+
timestamp: number;
|
|
23
|
+
} | {
|
|
24
|
+
type: "complete";
|
|
25
|
+
response: ChatCompletionResponse;
|
|
26
|
+
totalDurationMs: number;
|
|
27
|
+
/**
|
|
28
|
+
* Performance metrics (only included if logging.showMetrics is enabled)
|
|
29
|
+
*/
|
|
30
|
+
metrics?: {
|
|
31
|
+
firstTokenLatencyMs: number;
|
|
32
|
+
tokensPerSecond?: number;
|
|
33
|
+
totalTokens?: number;
|
|
34
|
+
};
|
|
35
|
+
} | {
|
|
36
|
+
type: "error";
|
|
37
|
+
error: LLMError;
|
|
38
|
+
recoverable: boolean;
|
|
39
|
+
} | {
|
|
40
|
+
type: "thinking_start";
|
|
41
|
+
provider: string;
|
|
42
|
+
} | {
|
|
43
|
+
type: "thinking_chunk";
|
|
44
|
+
content: string;
|
|
45
|
+
sequence: number;
|
|
46
|
+
} | {
|
|
47
|
+
type: "thinking_complete";
|
|
48
|
+
totalTokens?: number;
|
|
49
|
+
} | {
|
|
50
|
+
type: "text_start";
|
|
51
|
+
} | {
|
|
52
|
+
type: "text_chunk";
|
|
53
|
+
delta: string;
|
|
54
|
+
accumulated: string;
|
|
55
|
+
sequence: number;
|
|
56
|
+
} | {
|
|
57
|
+
type: "tool_call";
|
|
58
|
+
toolCall: ToolCall;
|
|
59
|
+
sequence: number;
|
|
60
|
+
} | {
|
|
61
|
+
type: "tools_detected";
|
|
62
|
+
toolNames: readonly string[];
|
|
63
|
+
agentName: string;
|
|
64
|
+
} | {
|
|
65
|
+
type: "tool_execution_start";
|
|
66
|
+
toolName: string;
|
|
67
|
+
toolCallId: string;
|
|
68
|
+
arguments?: Record<string, unknown>;
|
|
69
|
+
} | {
|
|
70
|
+
type: "tool_execution_complete";
|
|
71
|
+
toolCallId: string;
|
|
72
|
+
result: string;
|
|
73
|
+
durationMs: number;
|
|
74
|
+
summary?: string;
|
|
75
|
+
} | {
|
|
76
|
+
type: "usage_update";
|
|
77
|
+
usage: TokenUsage;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Streaming configuration - controls HOW content is streamed
|
|
81
|
+
* All fields optional with sensible defaults
|
|
82
|
+
*/
|
|
83
|
+
export interface StreamingConfig {
|
|
84
|
+
/**
|
|
85
|
+
* Enable streaming mode
|
|
86
|
+
* - true: Always stream
|
|
87
|
+
* - false: Never stream
|
|
88
|
+
* - "auto": Auto-detect based on TTY (default)
|
|
89
|
+
*/
|
|
90
|
+
readonly enabled: boolean | "auto";
|
|
91
|
+
/**
|
|
92
|
+
* Enable progressive markdown rendering with formatting
|
|
93
|
+
* Only applies when streaming is enabled
|
|
94
|
+
* Default: true
|
|
95
|
+
*/
|
|
96
|
+
readonly progressiveMarkdown: boolean;
|
|
97
|
+
/**
|
|
98
|
+
* Text buffer delay in milliseconds
|
|
99
|
+
* Batches small chunks for smoother rendering
|
|
100
|
+
* Only applies when streaming is enabled
|
|
101
|
+
* Default: 50
|
|
102
|
+
*/
|
|
103
|
+
readonly textBufferMs: number;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Result of streaming operation
|
|
107
|
+
*/
|
|
108
|
+
export interface StreamingResult {
|
|
109
|
+
/**
|
|
110
|
+
* The event stream
|
|
111
|
+
* Consumers process this stream for real-time updates
|
|
112
|
+
*/
|
|
113
|
+
readonly stream: Stream.Stream<StreamEvent, LLMError>;
|
|
114
|
+
/**
|
|
115
|
+
* Effect that completes with final response
|
|
116
|
+
* Consumers can either:
|
|
117
|
+
* 1. Process the stream for real-time updates
|
|
118
|
+
* 2. Just await the response for final result
|
|
119
|
+
*/
|
|
120
|
+
readonly response: Effect.Effect<ChatCompletionResponse, LLMError>;
|
|
121
|
+
/**
|
|
122
|
+
* Cancel/abort the streaming operation
|
|
123
|
+
* Uses AbortSignal internally to cancel the AI SDK request
|
|
124
|
+
*/
|
|
125
|
+
readonly cancel: Effect.Effect<void, never>;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Default streaming configuration
|
|
129
|
+
*/
|
|
130
|
+
export declare const DEFAULT_STREAMING_CONFIG: StreamingConfig;
|
|
131
|
+
//# sourceMappingURL=streaming-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming-types.d.ts","sourceRoot":"","sources":["../../../src/services/llm/streaming-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DEFAULT_STREAMING_CONFIG = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Default streaming configuration
|
|
6
|
+
*/
|
|
7
|
+
exports.DEFAULT_STREAMING_CONFIG = {
|
|
8
|
+
enabled: true, // Used internally after auto-detection
|
|
9
|
+
progressiveMarkdown: true,
|
|
10
|
+
textBufferMs: 50,
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=streaming-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streaming-types.js","sourceRoot":"","sources":["../../../src/services/llm/streaming-types.ts"],"names":[],"mappings":";;;AA8HA;;GAEG;AACU,QAAA,wBAAwB,GAAoB;IACvD,OAAO,EAAE,IAAI,EAAE,uCAAuC;IACtD,mBAAmB,EAAE,IAAI;IACzB,YAAY,EAAE,EAAE;CACjB,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Context, Effect } from "effect";
|
|
2
2
|
import type z from "zod";
|
|
3
|
+
import type { StreamingResult } from "./streaming-types";
|
|
3
4
|
/**
|
|
4
5
|
* LLM service types and interfaces
|
|
5
6
|
*/
|
|
@@ -108,7 +109,14 @@ export interface LLMProvider {
|
|
|
108
109
|
export interface LLMService {
|
|
109
110
|
readonly getProvider: (providerName: string) => Effect.Effect<LLMProvider, LLMConfigurationError>;
|
|
110
111
|
readonly listProviders: () => Effect.Effect<readonly string[], never>;
|
|
112
|
+
/**
|
|
113
|
+
* Create a non-streaming chat completion
|
|
114
|
+
*/
|
|
111
115
|
readonly createChatCompletion: (providerName: string, options: ChatCompletionOptions) => Effect.Effect<ChatCompletionResponse, LLMError>;
|
|
116
|
+
/**
|
|
117
|
+
* Create a streaming chat completion
|
|
118
|
+
*/
|
|
119
|
+
readonly createStreamingChatCompletion: (providerName: string, options: ChatCompletionOptions) => Effect.Effect<StreamingResult, LLMError>;
|
|
112
120
|
}
|
|
113
121
|
export declare const LLMServiceTag: Context.Tag<LLMService, LLMService>;
|
|
114
122
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/llm/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/llm/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/llm/types.ts"],"names":[],"mappings":";;;AAAA,mCAAyC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/llm/types.ts"],"names":[],"mappings":";;;AAAA,mCAAyC;AAIzC;;GAEG;AAEH,mBAAmB;AACnB,MAAa,sBAAuB,SAAQ,KAAK;IAG7B;IAFT,IAAI,GAAG,wBAAwB,CAAC;IACzC,YACkB,QAAgB,EAChC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,aAAQ,GAAR,QAAQ,CAAQ;QAIhC,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AATD,wDASC;AAED,MAAa,eAAgB,SAAQ,KAAK;IAGtB;IAFT,IAAI,GAAG,iBAAiB,CAAC;IAClC,YACkB,QAAgB,EAChC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,aAAQ,GAAR,QAAQ,CAAQ;QAKhC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAVD,0CAUC;AAED,MAAa,iBAAkB,SAAQ,KAAK;IAGxB;IAFT,IAAI,GAAG,mBAAmB,CAAC;IACpC,YACkB,QAAgB,EAChC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,aAAQ,GAAR,QAAQ,CAAQ;QAIhC,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF;AATD,8CASC;AAED,MAAa,qBAAsB,SAAQ,KAAK;IAG5B;IAFT,IAAI,GAAG,uBAAuB,CAAC;IACxC,YACkB,QAAgB,EAChC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHC,aAAQ,GAAR,QAAQ,CAAQ;QAIhC,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AATD,sDASC;AAsHD,uCAAuC;AAC1B,QAAA,aAAa,GAAG,gBAAO,CAAC,UAAU,CAAa,YAAY,CAAC,CAAC"}
|
|
@@ -21,8 +21,8 @@ export declare function createLoggerLayer(): Layer.Layer<LoggerService, never, C
|
|
|
21
21
|
export declare function logAgentOperation(agentId: string, operation: string, meta?: Record<string, unknown>): Effect.Effect<void, never, LoggerService | ConfigService>;
|
|
22
22
|
export declare function logTaskExecution(taskId: string, status: "started" | "completed" | "failed", meta?: Record<string, unknown>): Effect.Effect<void, never, LoggerService | ConfigService>;
|
|
23
23
|
export declare function logAutomationEvent(automationId: string, event: string, meta?: Record<string, unknown>): Effect.Effect<void, never, LoggerService | ConfigService>;
|
|
24
|
-
export declare function logToolExecutionStart(toolName: string,
|
|
25
|
-
export declare function logToolExecutionSuccess(toolName: string,
|
|
26
|
-
export declare function logToolExecutionError(toolName: string,
|
|
27
|
-
export declare function logToolExecutionApproval(toolName: string,
|
|
24
|
+
export declare function logToolExecutionStart(toolName: string, args?: Record<string, unknown>): Effect.Effect<void, never, LoggerService | ConfigService>;
|
|
25
|
+
export declare function logToolExecutionSuccess(toolName: string, durationMs: number, resultSummary?: string): Effect.Effect<void, never, LoggerService | ConfigService>;
|
|
26
|
+
export declare function logToolExecutionError(toolName: string, durationMs: number, error: string): Effect.Effect<void, never, LoggerService | ConfigService>;
|
|
27
|
+
export declare function logToolExecutionApproval(toolName: string, durationMs: number, approvalMessage: string): Effect.Effect<void, never, LoggerService | ConfigService>;
|
|
28
28
|
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/services/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/services/logger.ts"],"names":[],"mappings":"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"}
|