@onereach/step-create-chat-completion 0.0.7-rc.5
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 +3 -0
- package/dist/index.d.ts +446 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/package.json +47 -0
package/README.md
ADDED
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
import Step from '@onereach/flow-sdk/step';
|
|
2
|
+
import { CONFIG, IThread, IThreadId, IActionEvent, ACTION, IEvent } from '@onereach/flow-sdk/types';
|
|
3
|
+
import { z } from 'zod/v4-mini';
|
|
4
|
+
import { ChatCompletionChunk, ChatCompletionMessageToolCall, ChatCompletion, ChatCompletionToolMessageParam, ChatCompletionMessageParam } from 'openai/resources';
|
|
5
|
+
|
|
6
|
+
declare const dataInSchema: z.ZodMiniObject<{
|
|
7
|
+
provider: z.ZodMiniString<string>;
|
|
8
|
+
model: z.ZodMiniString<string>;
|
|
9
|
+
tokenName: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
10
|
+
tokenNameHeader: z.ZodMiniDefault<z.ZodMiniString<string>>;
|
|
11
|
+
sessionIdHeader: z.ZodMiniDefault<z.ZodMiniString<string>>;
|
|
12
|
+
typeOfStep: z.ZodMiniEnum<{
|
|
13
|
+
chat: "chat";
|
|
14
|
+
completion: "completion";
|
|
15
|
+
}>;
|
|
16
|
+
systemMessage: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
17
|
+
userMessage: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
18
|
+
switchAssistantsMessage: z.ZodMiniDefault<z.ZodMiniBoolean<boolean>>;
|
|
19
|
+
assistantsFirstMessage: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
20
|
+
userSettings: z.ZodMiniObject<{
|
|
21
|
+
temperature: z.ZodMiniPromise<z.ZodMiniDefault<z.ZodMiniNumber<unknown>>>;
|
|
22
|
+
topP: z.ZodMiniPromise<z.ZodMiniOptional<z.ZodMiniNumber<unknown>>>;
|
|
23
|
+
maxTokens: z.ZodMiniPromise<z.ZodMiniOptional<z.ZodMiniNumber<unknown>>>;
|
|
24
|
+
presencePenalty: z.ZodMiniPromise<z.ZodMiniOptional<z.ZodMiniNumber<unknown>>>;
|
|
25
|
+
frequencyPenalty: z.ZodMiniPromise<z.ZodMiniOptional<z.ZodMiniNumber<unknown>>>;
|
|
26
|
+
stop: z.ZodMiniPromise<z.ZodMiniOptional<z.ZodMiniArray<z.ZodMiniObject<{
|
|
27
|
+
token: z.ZodMiniString<string>;
|
|
28
|
+
}, z.core.$strip>>>>;
|
|
29
|
+
}, z.core.$strip>;
|
|
30
|
+
n: z.ZodMiniDefault<z.ZodMiniNumber<unknown>>;
|
|
31
|
+
streamResponse: z.ZodMiniDefault<z.ZodMiniBoolean<boolean>>;
|
|
32
|
+
streamSettings: z.ZodMiniOptional<z.ZodMiniObject<{
|
|
33
|
+
maxBufferLength: z.ZodMiniPromise<z.ZodMiniNumber<unknown>>;
|
|
34
|
+
debounceDuration: z.ZodMiniPromise<z.ZodMiniNumber<unknown>>;
|
|
35
|
+
}, z.core.$strip>>;
|
|
36
|
+
customHistory: z.ZodMiniDefault<z.ZodMiniBoolean<boolean>>;
|
|
37
|
+
historyRange: z.ZodMiniDefault<z.ZodMiniNumber<unknown>>;
|
|
38
|
+
historyMode: z.ZodMiniOptional<z.ZodMiniEnum<{
|
|
39
|
+
mergefield: "mergefield";
|
|
40
|
+
codeHistory: "codeHistory";
|
|
41
|
+
}>>;
|
|
42
|
+
historyMergefield: z.ZodMiniOptional<z.ZodMiniArray<z.ZodMiniDiscriminatedUnion<[z.ZodMiniObject<{
|
|
43
|
+
role: z.ZodMiniLiteral<"system">;
|
|
44
|
+
content: z.ZodMiniString<string>;
|
|
45
|
+
}, z.core.$strip>, z.ZodMiniObject<{
|
|
46
|
+
role: z.ZodMiniLiteral<"user">;
|
|
47
|
+
content: z.ZodMiniString<string>;
|
|
48
|
+
name: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
49
|
+
}, z.core.$strip>, z.ZodMiniObject<{
|
|
50
|
+
role: z.ZodMiniLiteral<"assistant">;
|
|
51
|
+
content: z.ZodMiniNullable<z.ZodMiniString<string>>;
|
|
52
|
+
tool_calls: z.ZodMiniOptional<z.ZodMiniArray<z.ZodMiniObject<{
|
|
53
|
+
id: z.ZodMiniString<string>;
|
|
54
|
+
type: z.ZodMiniLiteral<"function">;
|
|
55
|
+
function: z.ZodMiniObject<{
|
|
56
|
+
name: z.ZodMiniString<string>;
|
|
57
|
+
arguments: z.ZodMiniString<string>;
|
|
58
|
+
}, z.core.$strip>;
|
|
59
|
+
}, z.core.$strip>>>;
|
|
60
|
+
}, z.core.$strip>, z.ZodMiniObject<{
|
|
61
|
+
role: z.ZodMiniLiteral<"tool">;
|
|
62
|
+
content: z.ZodMiniString<string>;
|
|
63
|
+
name: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
64
|
+
tool_call_id: z.ZodMiniString<string>;
|
|
65
|
+
}, z.core.$strip>]>>>;
|
|
66
|
+
historyCode: z.ZodMiniOptional<z.ZodMiniArray<z.ZodMiniDiscriminatedUnion<[z.ZodMiniObject<{
|
|
67
|
+
role: z.ZodMiniLiteral<"system">;
|
|
68
|
+
content: z.ZodMiniString<string>;
|
|
69
|
+
}, z.core.$strip>, z.ZodMiniObject<{
|
|
70
|
+
role: z.ZodMiniLiteral<"user">;
|
|
71
|
+
content: z.ZodMiniString<string>;
|
|
72
|
+
name: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
73
|
+
}, z.core.$strip>, z.ZodMiniObject<{
|
|
74
|
+
role: z.ZodMiniLiteral<"assistant">;
|
|
75
|
+
content: z.ZodMiniNullable<z.ZodMiniString<string>>;
|
|
76
|
+
tool_calls: z.ZodMiniOptional<z.ZodMiniArray<z.ZodMiniObject<{
|
|
77
|
+
id: z.ZodMiniString<string>;
|
|
78
|
+
type: z.ZodMiniLiteral<"function">;
|
|
79
|
+
function: z.ZodMiniObject<{
|
|
80
|
+
name: z.ZodMiniString<string>;
|
|
81
|
+
arguments: z.ZodMiniString<string>;
|
|
82
|
+
}, z.core.$strip>;
|
|
83
|
+
}, z.core.$strip>>>;
|
|
84
|
+
}, z.core.$strip>, z.ZodMiniObject<{
|
|
85
|
+
role: z.ZodMiniLiteral<"tool">;
|
|
86
|
+
content: z.ZodMiniString<string>;
|
|
87
|
+
name: z.ZodMiniOptional<z.ZodMiniString<string>>;
|
|
88
|
+
tool_call_id: z.ZodMiniString<string>;
|
|
89
|
+
}, z.core.$strip>]>>>;
|
|
90
|
+
processError: z.ZodMiniBoolean<boolean>;
|
|
91
|
+
processTimeout: z.ZodMiniBoolean<boolean>;
|
|
92
|
+
timeoutDuration: z.ZodMiniString<string>;
|
|
93
|
+
}, z.core.$strip>;
|
|
94
|
+
type DataIn = z.infer<typeof dataInSchema>;
|
|
95
|
+
|
|
96
|
+
declare class StreamWorker extends Step<StreamWorkerConfig> {
|
|
97
|
+
static readonly class = "str_wrk";
|
|
98
|
+
static start(step: Step<StreamControllerConfig>, event: ContentChunk): Promise<void>;
|
|
99
|
+
static isBusy(step: Step<StreamControllerConfig>): boolean;
|
|
100
|
+
static getThread(step: Step<StreamControllerConfig>): IThread<StreamWorkerConfig> | undefined;
|
|
101
|
+
static getThreadId(step: Step<StreamControllerConfig>): IThreadId;
|
|
102
|
+
runStep(): void;
|
|
103
|
+
}
|
|
104
|
+
type ContentChunk = {
|
|
105
|
+
content: string;
|
|
106
|
+
index: number;
|
|
107
|
+
ts: number;
|
|
108
|
+
};
|
|
109
|
+
type StreamWorkerOut = {
|
|
110
|
+
chunk: ContentChunk;
|
|
111
|
+
};
|
|
112
|
+
type StreamWorkerState = {
|
|
113
|
+
class: typeof StreamWorker.class;
|
|
114
|
+
event: ContentChunk;
|
|
115
|
+
};
|
|
116
|
+
interface StreamWorkerConfig extends CONFIG {
|
|
117
|
+
dataIn: DataIn;
|
|
118
|
+
dataOut: StreamWorkerOut;
|
|
119
|
+
state: StreamWorkerState;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
declare class StreamController extends Step<StreamControllerConfig> {
|
|
123
|
+
static readonly class = "str_ctrl";
|
|
124
|
+
static start(step: Step<ChatCompletionConfig>): Promise<void>;
|
|
125
|
+
static handleChunk(step: Step<ChatCompletionConfig>, chunk: ChatCompletionChunk): Promise<void>;
|
|
126
|
+
static lastChunkReceived(step: Step<ChatCompletionConfig>): Promise<void>;
|
|
127
|
+
static getThreadId(step: Step): IThreadId;
|
|
128
|
+
runStep(): void;
|
|
129
|
+
/**
|
|
130
|
+
* Handler of the worker thread end event.
|
|
131
|
+
*/
|
|
132
|
+
onWorkerThreadEnd(event: IActionEvent<StreamWorkerConfig, ACTION.end>): void;
|
|
133
|
+
/**
|
|
134
|
+
* Handles a single chunk of the streaming response from the OpenAI API.
|
|
135
|
+
*/
|
|
136
|
+
onStreamChunk(event: IEvent<StreamChunkParams, EventName$2.handleChunk>): void;
|
|
137
|
+
protected handleMultipleChoices(choice: ChatCompletionChunk.Choice): void;
|
|
138
|
+
protected handleLengthFinishReason(choice: ChatCompletionChunk.Choice): void;
|
|
139
|
+
protected onToolCall(toolCall: ChatCompletionMessageToolCall): void;
|
|
140
|
+
/**
|
|
141
|
+
* Tries to flush the queue of response chunks to the controller thread.
|
|
142
|
+
* If the first event in the queue is not full, it waits for a debounce duration before flushing.
|
|
143
|
+
* If the first event is full, it flushes it immediately.
|
|
144
|
+
*/
|
|
145
|
+
private scheduleNextContentEvent;
|
|
146
|
+
/**
|
|
147
|
+
* Compacts the content into the controller thread's events queue.
|
|
148
|
+
* If the content is too long, it splits it into multiple events.
|
|
149
|
+
* If the last event is not full, it extends it with the new content.
|
|
150
|
+
*/
|
|
151
|
+
private addContentToQueue;
|
|
152
|
+
/**
|
|
153
|
+
* Processes the next event in the controller thread's queue.
|
|
154
|
+
* If the worker thread is busy, it skips processing.
|
|
155
|
+
* If the event is the termination marker, it notifies the end of the controller thread.
|
|
156
|
+
* If the event is ready for processing, it starts the worker thread to handle it.
|
|
157
|
+
*/
|
|
158
|
+
tryRunWorker(): void;
|
|
159
|
+
private isEventReady;
|
|
160
|
+
private getEventToProcess;
|
|
161
|
+
/**
|
|
162
|
+
* Handles the notification that all response chunks were received from the OpenAI API.
|
|
163
|
+
*/
|
|
164
|
+
onLastStreamChunkReceived(): Promise<void>;
|
|
165
|
+
protected get maxChunkContentLength(): number;
|
|
166
|
+
protected get debounceDuration(): number;
|
|
167
|
+
}
|
|
168
|
+
declare enum EventName$2 {
|
|
169
|
+
handleChunk = "add_chunk",
|
|
170
|
+
lastStreamChunkReceived = "llm_rsp_end"
|
|
171
|
+
}
|
|
172
|
+
type ContentChunkEvent = {
|
|
173
|
+
content: string;
|
|
174
|
+
index: number;
|
|
175
|
+
ts: number;
|
|
176
|
+
};
|
|
177
|
+
type ContentEndEvent = {
|
|
178
|
+
lastChunkReceived: true;
|
|
179
|
+
};
|
|
180
|
+
type ContentEvent = ContentChunkEvent | ContentEndEvent;
|
|
181
|
+
type StreamChunkParams = {
|
|
182
|
+
chunk: ChatCompletionChunk;
|
|
183
|
+
};
|
|
184
|
+
type StreamControllerEvents = IEvent<StreamChunkParams, 'add_chunk'> | IEvent<unknown, 'llm_rsp_end'>;
|
|
185
|
+
type StreamControllerState = {
|
|
186
|
+
class: typeof StreamController.class;
|
|
187
|
+
completionResult: Partial<ChatCompletion>;
|
|
188
|
+
events: ContentEvent[];
|
|
189
|
+
index: number;
|
|
190
|
+
lastChunkReceived: boolean;
|
|
191
|
+
debounceId?: NodeJS.Timeout;
|
|
192
|
+
skipIndexWarning: boolean;
|
|
193
|
+
};
|
|
194
|
+
type StreamControllerResult = {
|
|
195
|
+
status: 'ok';
|
|
196
|
+
completion: ChatCompletion;
|
|
197
|
+
};
|
|
198
|
+
interface StreamControllerConfig extends CONFIG {
|
|
199
|
+
dataIn: DataIn;
|
|
200
|
+
state: StreamControllerState;
|
|
201
|
+
result: StreamControllerResult;
|
|
202
|
+
events: StreamControllerEvents;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
declare class ToolsWorker<TArgs extends ParsedArguments, TResult> extends Step<ToolsWorkerConfig<TArgs, TResult>> {
|
|
206
|
+
static readonly class = "tl_wrk";
|
|
207
|
+
static start<TArgs extends ParsedArguments, TResult>(step: Step<ToolsControllerConfig<TResult>>, toolCall: ChatCompletionMessageToolCall): Promise<void>;
|
|
208
|
+
static getThreadId(toolCall: ChatCompletionMessageToolCall): IThreadId;
|
|
209
|
+
/**
|
|
210
|
+
* Initializes the tool worker thread to handle processing of repackaged content chunks.
|
|
211
|
+
*/
|
|
212
|
+
runStep(): void;
|
|
213
|
+
protected getExitName(toolCall: ChatCompletionMessageToolCall): string;
|
|
214
|
+
}
|
|
215
|
+
type ParsedArguments<TArgs extends Record<string, unknown> = Record<string, unknown>> = TArgs;
|
|
216
|
+
type ToolCallWithParsedArgs<TArgs extends ParsedArguments> = {
|
|
217
|
+
id: string;
|
|
218
|
+
type: 'function';
|
|
219
|
+
function: {
|
|
220
|
+
name: string;
|
|
221
|
+
arguments: TArgs;
|
|
222
|
+
};
|
|
223
|
+
};
|
|
224
|
+
type ToolsWorkerMergeField<TArgs extends ParsedArguments> = {
|
|
225
|
+
toolCall: ToolCallWithParsedArgs<TArgs>;
|
|
226
|
+
};
|
|
227
|
+
type ToolsWorkerOut<TArgs extends ParsedArguments> = ToolsWorkerMergeField<TArgs>;
|
|
228
|
+
type ToolsWorkerState = {
|
|
229
|
+
class: typeof ToolsWorker.class;
|
|
230
|
+
};
|
|
231
|
+
type ToolsWorkerLocal<TArgs extends ParsedArguments> = {
|
|
232
|
+
toolCall: ChatCompletionMessageToolCall;
|
|
233
|
+
parsedArguments: TArgs;
|
|
234
|
+
};
|
|
235
|
+
type ThreadWorkerResult<TResult> = {
|
|
236
|
+
toolCallId: string;
|
|
237
|
+
data: TResult;
|
|
238
|
+
};
|
|
239
|
+
interface ToolsWorkerConfig<TArgs extends ParsedArguments, TResult> extends CONFIG {
|
|
240
|
+
dataIn: DataIn;
|
|
241
|
+
dataOut: ToolsWorkerOut<TArgs>;
|
|
242
|
+
state: ToolsWorkerState;
|
|
243
|
+
result: ThreadWorkerResult<TResult>;
|
|
244
|
+
local: ToolsWorkerLocal<TArgs>;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
declare class ToolsController<TArgs extends ParsedArguments, TResult> extends Step<ToolsControllerConfig<TResult>> {
|
|
248
|
+
static readonly class = "tl_ctrl";
|
|
249
|
+
static start<TResult>(step: Step<ChatCompletionConfig>): Promise<void>;
|
|
250
|
+
static callTool<T extends ChatCompletionConfig | StreamControllerConfig>(step: Step<T>, toolCall: ChatCompletionMessageToolCall): Promise<void>;
|
|
251
|
+
static lastToolCallReceived<T extends ChatCompletionConfig | StreamControllerConfig>(step: Step<T>): Promise<void>;
|
|
252
|
+
static getThreadId<T extends CONFIG>(step: Step<T>): IThreadId;
|
|
253
|
+
runStep(): void;
|
|
254
|
+
onCallTool(event: IEvent<CallToolParams, EventName$1.callTool>): void;
|
|
255
|
+
onLastToolCallReceived(): void;
|
|
256
|
+
/**
|
|
257
|
+
* Starts the tool worker thread to process the tool call.
|
|
258
|
+
*/
|
|
259
|
+
protected startToolWorkerThread(toolCall: ChatCompletionMessageToolCall): void;
|
|
260
|
+
onToolWorkerThreadEnd(event: IActionEvent<ToolsWorkerConfig<TArgs, TResult>, ACTION.end>): void;
|
|
261
|
+
protected setToolCallResult(toolCallId: string, result: TResult): void;
|
|
262
|
+
protected tryEndToolsControllerThread(): void;
|
|
263
|
+
protected get messages(): ChatCompletionToolMessageParam[];
|
|
264
|
+
}
|
|
265
|
+
declare enum EventName$1 {
|
|
266
|
+
callTool = "tl_run_call",
|
|
267
|
+
lastToolCallReceived = "tl_rsp_end"
|
|
268
|
+
}
|
|
269
|
+
type ToolCallTask<TResult> = {
|
|
270
|
+
status: 'pending' | 'completed' | 'failed';
|
|
271
|
+
call: ChatCompletionMessageToolCall;
|
|
272
|
+
result?: TResult;
|
|
273
|
+
};
|
|
274
|
+
type TasksMap<TResult> = Record<ChatCompletionMessageToolCall['id'], ToolCallTask<TResult>>;
|
|
275
|
+
type ToolsControllerResult = {
|
|
276
|
+
status: 'ok';
|
|
277
|
+
messages: ChatCompletionToolMessageParam[];
|
|
278
|
+
};
|
|
279
|
+
type CallToolParams = {
|
|
280
|
+
toolCall: ChatCompletionMessageToolCall;
|
|
281
|
+
};
|
|
282
|
+
type ToolsControllerEvents = IEvent<CallToolParams, EventName$1.callTool> | IEvent<never, EventName$1.lastToolCallReceived>;
|
|
283
|
+
type ToolsControllerState<TResult> = {
|
|
284
|
+
tasks: TasksMap<TResult>;
|
|
285
|
+
expectMoreTasks: boolean;
|
|
286
|
+
};
|
|
287
|
+
interface ToolsControllerConfig<TResult> extends CONFIG {
|
|
288
|
+
dataIn: DataIn;
|
|
289
|
+
state: ToolsControllerState<TResult>;
|
|
290
|
+
result: ToolsControllerResult;
|
|
291
|
+
events: ToolsControllerEvents;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
declare class CreateChatCompletionStep<TResult> extends Step<ChatCompletionConfig> {
|
|
295
|
+
resolveDataIn(): Promise<{
|
|
296
|
+
provider: string;
|
|
297
|
+
model: string;
|
|
298
|
+
tokenNameHeader: string;
|
|
299
|
+
sessionIdHeader: string;
|
|
300
|
+
typeOfStep: "chat" | "completion";
|
|
301
|
+
switchAssistantsMessage: boolean;
|
|
302
|
+
userSettings: {
|
|
303
|
+
temperature: number;
|
|
304
|
+
topP: number | undefined;
|
|
305
|
+
maxTokens: number | undefined;
|
|
306
|
+
presencePenalty: number | undefined;
|
|
307
|
+
frequencyPenalty: number | undefined;
|
|
308
|
+
stop: {
|
|
309
|
+
token: string;
|
|
310
|
+
}[] | undefined;
|
|
311
|
+
};
|
|
312
|
+
n: number;
|
|
313
|
+
streamResponse: boolean;
|
|
314
|
+
customHistory: boolean;
|
|
315
|
+
historyRange: number;
|
|
316
|
+
processError: boolean;
|
|
317
|
+
processTimeout: boolean;
|
|
318
|
+
timeoutDuration: string;
|
|
319
|
+
tokenName?: string | undefined;
|
|
320
|
+
systemMessage?: string | undefined;
|
|
321
|
+
userMessage?: string | undefined;
|
|
322
|
+
assistantsFirstMessage?: string | undefined;
|
|
323
|
+
streamSettings?: {
|
|
324
|
+
maxBufferLength: number;
|
|
325
|
+
debounceDuration: number;
|
|
326
|
+
} | undefined;
|
|
327
|
+
historyMode?: "mergefield" | "codeHistory" | undefined;
|
|
328
|
+
historyMergefield?: ({
|
|
329
|
+
role: "system";
|
|
330
|
+
content: string;
|
|
331
|
+
} | {
|
|
332
|
+
role: "user";
|
|
333
|
+
content: string;
|
|
334
|
+
name?: string | undefined;
|
|
335
|
+
} | {
|
|
336
|
+
role: "assistant";
|
|
337
|
+
content: string | null;
|
|
338
|
+
tool_calls?: {
|
|
339
|
+
id: string;
|
|
340
|
+
type: "function";
|
|
341
|
+
function: {
|
|
342
|
+
name: string;
|
|
343
|
+
arguments: string;
|
|
344
|
+
};
|
|
345
|
+
}[] | undefined;
|
|
346
|
+
} | {
|
|
347
|
+
role: "tool";
|
|
348
|
+
content: string;
|
|
349
|
+
tool_call_id: string;
|
|
350
|
+
name?: string | undefined;
|
|
351
|
+
})[] | undefined;
|
|
352
|
+
historyCode?: ({
|
|
353
|
+
role: "system";
|
|
354
|
+
content: string;
|
|
355
|
+
} | {
|
|
356
|
+
role: "user";
|
|
357
|
+
content: string;
|
|
358
|
+
name?: string | undefined;
|
|
359
|
+
} | {
|
|
360
|
+
role: "assistant";
|
|
361
|
+
content: string | null;
|
|
362
|
+
tool_calls?: {
|
|
363
|
+
id: string;
|
|
364
|
+
type: "function";
|
|
365
|
+
function: {
|
|
366
|
+
name: string;
|
|
367
|
+
arguments: string;
|
|
368
|
+
};
|
|
369
|
+
}[] | undefined;
|
|
370
|
+
} | {
|
|
371
|
+
role: "tool";
|
|
372
|
+
content: string;
|
|
373
|
+
tool_call_id: string;
|
|
374
|
+
name?: string | undefined;
|
|
375
|
+
})[] | undefined;
|
|
376
|
+
}>;
|
|
377
|
+
runStep(): void;
|
|
378
|
+
initRequest(): Promise<void>;
|
|
379
|
+
private handleResponse;
|
|
380
|
+
private handleStreamResponse;
|
|
381
|
+
onToolsControllerEnd(event: IActionEvent<ToolsControllerConfig<TResult>, ACTION.end>): Promise<void>;
|
|
382
|
+
onStreamControllerThreadEnd(event: IActionEvent<StreamControllerConfig, ACTION.end>): Promise<void>;
|
|
383
|
+
private tryToExitStep;
|
|
384
|
+
private get history();
|
|
385
|
+
private get openAiService();
|
|
386
|
+
}
|
|
387
|
+
type ChatCompletionOut = ChatCompletion & {
|
|
388
|
+
_history: ChatCompletionMessageParam[];
|
|
389
|
+
};
|
|
390
|
+
type ChatCompletionState = {
|
|
391
|
+
toolsReady: boolean;
|
|
392
|
+
contentReady: boolean;
|
|
393
|
+
chatCompletion?: ChatCompletion;
|
|
394
|
+
toolsResults: ChatCompletionToolMessageParam[];
|
|
395
|
+
};
|
|
396
|
+
interface ChatCompletionConfig extends CONFIG {
|
|
397
|
+
dataIn: DataIn;
|
|
398
|
+
dataOut: ChatCompletionOut;
|
|
399
|
+
state: ChatCompletionState;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
declare class HistoryController extends Step<HistoryControllerConfig> {
|
|
403
|
+
static readonly class = "hst_ctrl";
|
|
404
|
+
static start(step: Step<ChatCompletionConfig>): Promise<void>;
|
|
405
|
+
static appendToHistory(step: Step, message: ChatCompletionMessageParam | ChatCompletionMessageParam[]): Promise<void>;
|
|
406
|
+
static getHistory(step: Step): ChatCompletionMessageParam[];
|
|
407
|
+
static getThreadId(step: Step): IThreadId;
|
|
408
|
+
runStep(): void;
|
|
409
|
+
initialize(): void;
|
|
410
|
+
onAppendToHistory(event: IEvent<HistoryControllerAppendParams, EventName.appendToHistory>): void;
|
|
411
|
+
/**
|
|
412
|
+
* Adds a message to the managed history of this step
|
|
413
|
+
*/
|
|
414
|
+
protected appendToManagedHistory(messages: ChatCompletionMessageParam[]): void;
|
|
415
|
+
/**
|
|
416
|
+
* Returns the messages to be sent to the OpenAI API.
|
|
417
|
+
*/
|
|
418
|
+
protected get initialMessages(): ChatCompletionMessageParam[];
|
|
419
|
+
}
|
|
420
|
+
declare enum EventName {
|
|
421
|
+
appendToHistory = "hst_append"
|
|
422
|
+
}
|
|
423
|
+
type HistoryControllerAppendParams = {
|
|
424
|
+
message: ChatCompletionMessageParam | ChatCompletionMessageParam[];
|
|
425
|
+
};
|
|
426
|
+
type HistoryControllerEvents = IEvent<HistoryControllerAppendParams, EventName.appendToHistory>;
|
|
427
|
+
type HistoryControllerState = {
|
|
428
|
+
class: typeof HistoryController.class;
|
|
429
|
+
messages: ChatCompletionMessageParam[];
|
|
430
|
+
};
|
|
431
|
+
interface HistoryControllerConfig extends CONFIG {
|
|
432
|
+
dataIn: DataIn;
|
|
433
|
+
state: HistoryControllerState;
|
|
434
|
+
events: HistoryControllerEvents;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
declare const step: typeof CreateChatCompletionStep;
|
|
438
|
+
declare const states: {
|
|
439
|
+
hst_ctrl: typeof HistoryController;
|
|
440
|
+
tl_ctrl: typeof ToolsController;
|
|
441
|
+
tl_wrk: typeof ToolsWorker;
|
|
442
|
+
str_ctrl: typeof StreamController;
|
|
443
|
+
str_wrk: typeof StreamWorker;
|
|
444
|
+
};
|
|
445
|
+
|
|
446
|
+
export { states, step };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";function e(e,t){if(t==null||t>e.length)t=e.length;for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function t(e){if(Array.isArray(e))return e}function n(t){if(Array.isArray(t))return e(t)}function r(e){if(e===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return e}function o(e){var t,n,r,o=2;for("undefined"!=typeof Symbol&&(n=Symbol.asyncIterator,r=Symbol.iterator);o--;){if(n&&null!=(t=e[n]))return t.call(e);if(r&&null!=(t=e[r]))return new i(t.call(e));n="@@asyncIterator",r="@@iterator"}throw new TypeError("Object is not async iterable")}function i(e){function t(e){if(Object(e)!==e)return Promise.reject(new TypeError(e+" is not an object."));var t=e.done;return Promise.resolve(e.value).then(function(e){return{value:e,done:t}})}return i=function(e){this.s=e,this.n=e.next},i.prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var n=this.s.return;return void 0===n?Promise.resolve({value:e,done:!0}):t(n.apply(this.s,arguments))},throw:function(e){var n=this.s.return;return void 0===n?Promise.reject(e):t(n.apply(this.s,arguments))}},new i(e)}function a(e,t,n,r,o,i,a){try{var s=e[i](a);var l=s.value}catch(e){n(e);return}if(s.done){t(l)}else{Promise.resolve(l).then(r,o)}}function s(e){return function(){var t=this,n=arguments;return new Promise(function(r,o){var i=e.apply(t,n);function s(e){a(i,r,o,s,l,"next",e)}function l(e){a(i,r,o,s,l,"throw",e)}s(undefined)})}}function l(e,t,n){t=p(t);return T(e,A()?Reflect.construct(t,n||[],p(e).constructor):t.apply(e,n))}function u(e,t){if(!(e instanceof t)){throw new TypeError("Cannot call a class as a function")}}function c(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||false;r.configurable=true;if("value"in r)r.writable=true;Object.defineProperty(e,r.key,r)}}function d(e,t,n){if(t)c(e.prototype,t);if(n)c(e,n);return e}function f(e,t,n){if(t in e){Object.defineProperty(e,t,{value:n,enumerable:true,configurable:true,writable:true})}else{e[t]=n}return e}function h(e,t,n){if(typeof Reflect!=="undefined"&&Reflect.get){h=Reflect.get}else{h=function e(e,t,n){var r=I(e,t);if(!r)return;var o=Object.getOwnPropertyDescriptor(r,t);if(o.get){return o.get.call(n||e)}return o.value}}return h(e,t,n||e)}function p(e){p=Object.setPrototypeOf?Object.getPrototypeOf:function e(e){return e.__proto__||Object.getPrototypeOf(e)};return p(e)}function v(e,t){if(typeof t!=="function"&&t!==null){throw new TypeError("Super expression must either be null or a function")}e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:true,configurable:true}});if(t)S(e,t)}function y(e,t){if(t!=null&&typeof Symbol!=="undefined"&&t[Symbol.hasInstance]){return!!t[Symbol.hasInstance](e)}else{return e instanceof t}}function m(e){if(typeof Symbol!=="undefined"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function g(e,t){var n=e==null?null:typeof Symbol!=="undefined"&&e[Symbol.iterator]||e["@@iterator"];if(n==null)return;var r=[];var o=true;var i=false;var a,s;try{for(n=n.call(e);!(o=(a=n.next()).done);o=true){r.push(a.value);if(t&&r.length===t)break}}catch(e){i=true;s=e}finally{try{if(!o&&n["return"]!=null)n["return"]()}finally{if(i)throw s}}return r}function b(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function k(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function z(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]!=null?arguments[t]:{};var r=Object.keys(n);if(typeof Object.getOwnPropertySymbols==="function"){r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))}r.forEach(function(t){f(e,t,n[t])})}return e}function _(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);if(t){r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})}n.push.apply(n,r)}return n}function w(e,t){t=t!=null?t:{};if(Object.getOwnPropertyDescriptors){Object.defineProperties(e,Object.getOwnPropertyDescriptors(t))}else{_(Object(t)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))})}return e}function E(e,t){if(e==null)return{};var n=R(e,t);var r,o;if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(o=0;o<i.length;o++){r=i[o];if(t.indexOf(r)>=0)continue;if(!Object.prototype.propertyIsEnumerable.call(e,r))continue;n[r]=e[r]}}return n}function R(e,t){if(e==null)return{};var n={};var r=Object.keys(e);var o,i;for(i=0;i<r.length;i++){o=r[i];if(t.indexOf(o)>=0)continue;n[o]=e[o]}return n}function T(e,t){if(t&&(j(t)==="object"||typeof t==="function")){return t}return r(e)}function S(e,t){S=Object.setPrototypeOf||function e(e,t){e.__proto__=t;return e};return S(e,t)}function O(e,n){return t(e)||g(e,n)||P(e,n)||b()}function I(e,t){while(!Object.prototype.hasOwnProperty.call(e,t)){e=p(e);if(e===null)break}return e}function C(e){return n(e)||m(e)||P(e)||k()}function j(e){"@swc/helpers - typeof";return e&&typeof Symbol!=="undefined"&&e.constructor===Symbol?"symbol":typeof e}function P(t,n){if(!t)return;if(typeof t==="string")return e(t,n);var r=Object.prototype.toString.call(t).slice(8,-1);if(r==="Object"&&t.constructor)r=t.constructor.name;if(r==="Map"||r==="Set")return Array.from(r);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return e(t,n)}function A(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(A=function(){return!!e})()}function U(e,t){var n,r,o,i={label:0,sent:function(){if(o[0]&1)throw o[1];return o[1]},trys:[],ops:[]},a=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return a.next=s(0),a["throw"]=s(1),a["return"]=s(2),typeof Symbol==="function"&&(a[Symbol.iterator]=function(){return this}),a;function s(e){return function(t){return l([e,t])}}function l(s){if(n)throw new TypeError("Generator is already executing.");while(a&&(a=0,s[0]&&(i=0)),i)try{if(n=1,r&&(o=s[0]&2?r["return"]:s[0]?r["throw"]||((o=r["return"])&&o.call(r),0):r.next)&&!(o=o.call(r,s[1])).done)return o;if(r=0,o)s=[s[0]&2,o.value];switch(s[0]){case 0:case 1:o=s;break;case 4:i.label++;return{value:s[1],done:false};case 5:i.label++;r=s[1];s=[0];continue;case 7:s=i.ops.pop();i.trys.pop();continue;default:if(!(o=i.trys,o=o.length>0&&o[o.length-1])&&(s[0]===6||s[0]===2)){i=0;continue}if(s[0]===3&&(!o||s[1]>o[0]&&s[1]<o[3])){i.label=s[1];break}if(s[0]===6&&i.label<o[1]){i.label=o[1];o=s;break}if(o&&i.label<o[2]){i.label=o[2];i.ops.push(s);break}if(o[2])i.ops.pop();i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e];r=0}finally{n=o=0}if(s[0]&5)throw s[1];return{value:s[0]?s[1]:void 0,done:true}}}var L=Object.create;var x=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,q=Object.prototype.hasOwnProperty;var G=function(e,t,n){return t in e?x(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n};var H=function(e,t){return x(e,"name",{value:t,configurable:!0})};var B=function(e,t){for(var n in t)x(e,n,{get:t[n],enumerable:!0})},F=function(e,t,n,r){var o=true,i=false,a=undefined;if(t&&(typeof t==="undefined"?"undefined":j(t))=="object"||typeof t=="function")try{var s=function(){var o=u.value;!q.call(e,o)&&o!==n&&x(e,o,{get:function(){return t[o]},enumerable:!(r=D(t,o))||r.enumerable})};for(var l=M(t)[Symbol.iterator](),u;!(o=(u=l.next()).done);o=true)s()}catch(e){i=true;a=e}finally{try{if(!o&&l.return!=null){l.return()}}finally{if(i){throw a}}}return e};var W=function(e,t,n){return n=e!=null?L(N(e)):{},F(t||!e||!e.__esModule?x(n,"default",{value:e,enumerable:!0}):n,e)},V=function(e){return F(x({},"__esModule",{value:!0}),e)};var K=function(e,t,n){return G(e,(typeof t==="undefined"?"undefined":j(t))!="symbol"?t+"":t,n)};var J={};B(J,{states:function(){return e9},step:function(){return e5}});module.exports=V(J);var Q=require("source-map-support");var $=W(require("@onereach/flow-sdk/step"));var Z=W(require("@onereach/flow-sdk/step"));var X=W(require("@onereach/flow-sdk/errors/timeout")),Y=require("zod/v4-mini");var ee=W(require("@onereach/flow-sdk/errors/base"));var et=function(e){return e.UNKNOWN="UNKNOWN",e.STEP_LOGIC_ISSUE="STEP_LOGIC_ISSUE",e.AUTH="AUTH",e.TIMEOUT="TIMEOUT",e.VALIDATION="VALIDATION",e.INVALID_REQUEST="INVALID_REQUEST",e.RATE_LIMITED="RATE_LIMITED",e.LLM_FINISH_LENGTH="LLM_FINISH_LENGTH",e.SERVER_ERROR="SERVER_ERROR",e.UNSUPPORTED="UNSUPPORTED",e}({}),en=/*#__PURE__*/function(e){v(t,e);function t(){u(this,t);return l(this,t,arguments)}return t}(ee.default);H(en,"CreateChatCompletionStepError");var er=en;function eo(e){if(y(e,er)||y(e,X.default))return e;if(y(e,Y.z.core.$ZodError))return new er(Y.z.prettifyError(e),e,{code:et.VALIDATION});if(y(e,Error)){var t,n,r;if(e.message.includes("Request timed out"))return new X.default("Timeout",e,{code:et.TIMEOUT});if(e.message.includes("API key is required"))return new er("API key is required",e,{code:et.AUTH});var o=e===null||e===void 0?void 0:(r=e.response)===null||r===void 0?void 0:(n=r.data)===null||n===void 0?void 0:(t=n.error)===null||t===void 0?void 0:t.message;if(o!=null)return new er(o,e,{code:et.SERVER_ERROR})}return typeof e=="string"?new er(e,{code:et.UNKNOWN}):y(e,Error)?new er("Unknown error",e,{code:et.UNKNOWN}):new er("Unknown error",{code:et.UNKNOWN,data:e})}H(eo,"errorFilter");function ei(e,t,n){var r=n.value;if(!r||typeof r!="function")return;var o=H(function(){var e=this;for(var n=arguments.length,o=new Array(n),i=0;i<n;i++){o[i]=arguments[i]}try{var a=r.apply(this,o);return y(a,Promise)?a.catch(function(n){var r,o;var i=t.toString();throw(r=(o=e.log).DEBUG)===null||r===void 0?void 0:r.call(o,"Error in method '".concat(i,"'"),n),eo(n)}):a}catch(e){var s,l;var u=t.toString();throw(s=(l=this.log).DEBUG)===null||s===void 0?void 0:s.call(l,"Error in method '".concat(u,"'"),e),eo(e)}},"wrappedMethod");return(r===null||r===void 0?void 0:r.name)!=null&&Object.defineProperty(o,"name",{value:r.name}),n.value=o,n}H(ei,"ErrorFilter");function ea(e,t,n,r){var o=arguments.length,i=o<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,a;if((typeof Reflect==="undefined"?"undefined":j(Reflect))=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(a=e[s])&&(i=(o<3?a(i):o>3?a(t,n,i):a(t,n))||i);return o>3&&i&&Object.defineProperty(t,n,i),i}H(ea,"_ts_decorate");function es(e,t){if((typeof Reflect==="undefined"?"undefined":j(Reflect))=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(e,t)}H(es,"_ts_metadata");var el=/*#__PURE__*/function(e){v(t,e);function t(){u(this,t);return l(this,t,arguments)}d(t,[{key:"runStep",value:function e(){this.triggers.local("hst_append",this.onAppendToHistory).otherwise(this.initialize)}},{key:"initialize",value:function e(){var e,t;(e=(t=this.log).DEBUG)===null||e===void 0?void 0:e.call(t,"Initializing history controller thread"),this.state.messages.length===0&&(this.state.messages=this.initialMessages)}},{key:"onAppendToHistory",value:function e(e){var t,n;(t=(n=this.log).DEBUG)===null||t===void 0?void 0:t.call(n,"Appending message to history",e.params);var r=e.params,o=r.message,i=Array.isArray(o)?o:[o];this.appendToManagedHistory(i)}},{key:"appendToManagedHistory",value:function e(e){var t;if(this.data.customHistory)throw new er("Managed history is not available in custom history mode",{code:et.VALIDATION});(t=this.state.messages).push.apply(t,C(e))}},{key:"initialMessages",get:function e(){var e=this.data,t=e.typeOfStep,n=e.customHistory,r=e.historyMode,o=e.historyMergefield,i=e.historyCode,a=e.historyRange,s=e.systemMessage,l=e.userMessage,u=e.assistantsFirstMessage;if(t==="completion")return[{role:"user",content:l}];var c=[];return n?(c=r==="mergefield"?o:i,c=c.slice(-1*a)):(c=this.state.messages,c.length===0&&u!=null&&u.length>0&&c.push({role:"assistant",content:u}),c.push({role:"user",content:l}),c=c.slice(-1*a),this.state.messages=c),s!=null&&s.length>0&&c.unshift({role:"system",content:s}),c}}],[{key:"start",value:function e(e){return s(function(){var t,n;return U(this,function(r){switch(r.label){case 0:t=this.getThreadId(e);n=e.process.getThread(t)==null;if(!n)return[3,2];return[4,e.thread.runThread({id:t,background:!0,state:{step:e.id,class:this.class,messages:[]}})];case 1:n=r.sent();r.label=2;case 2:n;return[2]}})}).call(this)}},{key:"appendToHistory",value:function e(e,t){return s(function(){return U(this,function(n){switch(n.label){case 0:return[4,e.process.enqueueAndRun({thread:this.getThreadId(e),name:"hst_append",params:{message:t}})];case 1:n.sent();return[2]}})}).call(this)}},{key:"getHistory",value:function e(e){return e.process.getSafeThread(this.getThreadId(e)).state.messages}},{key:"getThreadId",value:function e(e){return"llm_cmp_".concat(this.class,"_").concat(e.id)}}]);return t}(Z.default);H(el,"HistoryController"),K(el,"class","hst_ctrl");var eu=el;ea([ei,es("design:type",Function),es("design:paramtypes",[]),es("design:returntype",void 0)],eu.prototype,"runStep",null);ea([ei,es("design:type",Function),es("design:paramtypes",[]),es("design:returntype",void 0)],eu.prototype,"initialize",null);ea([ei,es("design:type",Function),es("design:paramtypes",[(typeof IEvent==="undefined"?"undefined":j(IEvent))>"u"?Object:IEvent]),es("design:returntype",void 0)],eu.prototype,"onAppendToHistory",null);var ec=W(require("@onereach/flow-sdk/step"));var ed=W(require("@onereach/flow-sdk/step"));var ef=require("@onereach/flow-sdk/types");function eh(e,t){return s(function(){var n,r,o,i,a,s;return U(this,function(l){switch(l.label){case 0:n=t.id,r=t.state,o=E(t,["id","state"]);s=e.process.getThread(n);if(!((i=(a=e.log).DEBUG)===null||i===void 0?void 0:i.call(a,"runThread: thread with id '".concat(n,"'"),o),s==null))return[3,2];return[4,e.thread.runThread(z({id:n,background:!0,state:r},o))];case 1:return[2,l.sent()];case 2:if(!s.ended)throw new Error("Thread with id '".concat(n,"' has not ended yet, cannot start it again"));if(r==null)throw new Error("Thread with id '".concat(n,"' must have a state to run"));return[4,s.enqueueAndRun({name:ef.ACTION.goto,state:r})];case 3:return[2,l.sent()]}})})()}H(eh,"runThread");function ep(e,t,n,r){var o=arguments.length,i=o<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,a;if((typeof Reflect==="undefined"?"undefined":j(Reflect))=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(a=e[s])&&(i=(o<3?a(i):o>3?a(t,n,i):a(t,n))||i);return o>3&&i&&Object.defineProperty(t,n,i),i}H(ep,"_ts_decorate");function ev(e,t){if((typeof Reflect==="undefined"?"undefined":j(Reflect))=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(e,t)}H(ev,"_ts_metadata");var ey=/*#__PURE__*/function(e){v(t,e);function t(){u(this,t);return l(this,t,arguments)}d(t,[{key:"runStep",value:function e(){var e,t;if(!("event"in this.state)||this.state.event==null)throw new er("Stream worker thread state must contain an event to process",{code:et.STEP_LOGIC_ISSUE});var n=this.state.event;(e=(t=this.log).DEBUG)===null||e===void 0?void 0:e.call(t,"Executing stream worker thread",n),this.exitStep("chunk",{chunk:n})}}],[{key:"start",value:function e(e,t){return s(function(){return U(this,function(n){switch(n.label){case 0:return[4,eh(e,{id:this.getThreadId(e),state:{step:e.id,class:this.class,event:t}})];case 1:n.sent();return[2]}})}).call(this)}},{key:"isBusy",value:function e(e){var t=this.getThread(e);return t!=null&&!t.ended}},{key:"getThread",value:function e(e){var t=this.getThreadId(e);return e.process.getThread(t)}},{key:"getThreadId",value:function e(e){return"llm_cmp_".concat(this.class,"_").concat(e.id)}}]);return t}(ed.default);H(ey,"StreamWorker"),K(ey,"class","str_wrk");var em=ey;ep([ei,ev("design:type",Function),ev("design:paramtypes",[]),ev("design:returntype",void 0)],em.prototype,"runStep",null);var eg=W(require("@onereach/flow-sdk/step"));var eb=W(require("@onereach/flow-sdk/step"));function ek(e,t,n,r){var o=arguments.length,i=o<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,a;if((typeof Reflect==="undefined"?"undefined":j(Reflect))=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(a=e[s])&&(i=(o<3?a(i):o>3?a(t,n,i):a(t,n))||i);return o>3&&i&&Object.defineProperty(t,n,i),i}H(ek,"_ts_decorate");function ez(e,t){if((typeof Reflect==="undefined"?"undefined":j(Reflect))=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(e,t)}H(ez,"_ts_metadata");var e_=/*#__PURE__*/function(e){v(t,e);function t(){u(this,t);return l(this,t,arguments)}d(t,[{key:"runStep",value:function e(){var e,t;var n=this.local,r=n.toolCall,o=n.parsedArguments;(e=(t=this.log).DEBUG)===null||e===void 0?void 0:e.call(t,"Initializing tool worker thread",r),this.exitStep(this.getExitName(r),{toolCall:{id:r.id,type:r.type,function:{name:r.function.name,arguments:o}}})}},{key:"getExitName",value:function e(e){return e.function.name}}],[{key:"start",value:function e(e,t){return s(function(){var n,r;return U(this,function(o){switch(o.label){case 0:r=JSON.parse((n=t.function)===null||n===void 0?void 0:n.arguments);return[4,eh(e,{id:this.getThreadId(t),state:{step:e.id,class:this.class},local:{toolCall:t,parsedArguments:r}})];case 1:o.sent();return[2]}})}).call(this)}},{key:"getThreadId",value:function e(e){return"llm_cmp_".concat(this.class,"_").concat(e.id)}}]);return t}(eb.default);H(e_,"ToolsWorker"),K(e_,"class","tl_wrk");var ew=e_;ek([ei,ez("design:type",Function),ez("design:paramtypes",[]),ez("design:returntype",void 0)],ew.prototype,"runStep",null);var eE=require("@onereach/flow-sdk/types");function eR(e,t,n,r){var o=arguments.length,i=o<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,a;if((typeof Reflect==="undefined"?"undefined":j(Reflect))=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(a=e[s])&&(i=(o<3?a(i):o>3?a(t,n,i):a(t,n))||i);return o>3&&i&&Object.defineProperty(t,n,i),i}H(eR,"_ts_decorate");function eT(e,t){if((typeof Reflect==="undefined"?"undefined":j(Reflect))=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(e,t)}H(eT,"_ts_metadata");var eS=/*#__PURE__*/function(e){v(t,e);function t(){u(this,t);return l(this,t,arguments)}d(t,[{key:"runStep",value:function e(){var e=this;this.triggers.local("tl_run_call",this.onCallTool).local("tl_rsp_end",this.onLastToolCallReceived).otherwise(function(){var t,n;(t=(n=e.log).DEBUG)===null||t===void 0?void 0:t.call(n,"Initializing tools controller thread")})}},{key:"onCallTool",value:function e(e){var t=e.params,n=t.toolCall;if(n.type!=="function")throw new er("Only function tools are supported at the moment",{code:et.UNSUPPORTED});this.state.tasks[n.id]={call:n,status:"pending"},this.startToolWorkerThread(n)}},{key:"onLastToolCallReceived",value:function e(){var e,t;(e=(t=this.log).DEBUG)===null||e===void 0?void 0:e.call(t,"No more tool calls expected",this.state.tasks),this.state.expectMoreTasks=!1,this.tryEndToolsControllerThread()}},{key:"startToolWorkerThread",value:function e(e){this.triggers.hook({name:eE.ACTION.end,thread:ew.getThreadId(e)},this.onToolWorkerThreadEnd),ew.start(this,e)}},{key:"onToolWorkerThreadEnd",value:function e(e){var t,n,r,o;if((t=(n=this.log).DEBUG)===null||t===void 0?void 0:t.call(n,"Tool caller worker thread has ended",e),!("result"in e.params)||e.params.result==null)throw new er("Tool worker thread ended without result",{code:et.STEP_LOGIC_ISSUE});var i=e.params,a=i.result;if(y(a,Error))throw new er("Tool worker thread ended with error",a,{code:et.STEP_LOGIC_ISSUE});(r=(o=this.log).DEBUG)===null||r===void 0?void 0:r.call(o,"Tool worker thread completed successfully",{toolCallId:a.toolCallId,result:a.data}),this.setToolCallResult(a.toolCallId,a.data),this.tryEndToolsControllerThread()}},{key:"setToolCallResult",value:function e(e,t){var n=this.state.tasks[e];if(n==null)throw new er("Unknown tool call with id '".concat(e,"'"),{code:et.STEP_LOGIC_ISSUE});n.status="completed",n.result=t}},{key:"tryEndToolsControllerThread",value:function e(){var e,t;this.state.expectMoreTasks||Object.values(this.state.tasks).some(function(e){return e.status==="pending"})||((e=(t=this.log).DEBUG)===null||e===void 0?void 0:e.call(t,"All tool calls completed or failed",this.state.tasks),this.end({status:"ok",messages:this.messages}))}},{key:"messages",get:function e(){return Object.values(this.state.tasks).map(function(e){return{role:"tool",tool_call_id:e.call.id,content:JSON.stringify(e.result)}})}}],[{key:"start",value:function e(e){return s(function(){var t;return U(this,function(n){switch(n.label){case 0:t=this.getThreadId(e);return[4,eh(e,{id:t,state:{step:e.id,class:this.class,tasks:{},expectMoreTasks:!0}})];case 1:n.sent();return[2]}})}).call(this)}},{key:"callTool",value:function e(e,t){return s(function(){return U(this,function(n){switch(n.label){case 0:return[4,e.process.enqueueAndRun({thread:this.getThreadId(e),name:"tl_run_call",params:{toolCall:t}})];case 1:n.sent();return[2]}})}).call(this)}},{key:"lastToolCallReceived",value:function e(e){return s(function(){return U(this,function(t){switch(t.label){case 0:return[4,e.process.enqueueAndRun({thread:this.getThreadId(e),name:"tl_rsp_end"})];case 1:t.sent();return[2]}})}).call(this)}},{key:"getThreadId",value:function e(e){return"llm_cmp_".concat(this.class,"_").concat(e.id)}}]);return t}(eg.default);H(eS,"ToolsController"),K(eS,"class","tl_ctrl");var eO=eS;eR([ei,eT("design:type",Function),eT("design:paramtypes",[]),eT("design:returntype",void 0)],eO.prototype,"runStep",null);eR([ei,eT("design:type",Function),eT("design:paramtypes",[(typeof IEvent==="undefined"?"undefined":j(IEvent))>"u"?Object:IEvent]),eT("design:returntype",void 0)],eO.prototype,"onCallTool",null);eR([ei,eT("design:type",Function),eT("design:paramtypes",[]),eT("design:returntype",void 0)],eO.prototype,"onLastToolCallReceived",null);eR([ei,eT("design:type",Function),eT("design:paramtypes",[(typeof IActionEvent==="undefined"?"undefined":j(IActionEvent))>"u"?Object:IActionEvent]),eT("design:returntype",void 0)],eO.prototype,"onToolWorkerThreadEnd",null);var eI=require("zod/v4-mini"),eC=eI.z.object({name:eI.z.string(),params:eI.z.object({chunk:eI.z.object({id:eI.z.string(),object:eI.z.literal("chat.completion.chunk"),created:eI.z.number(),model:eI.z.string(),service_tier:eI.z.optional(eI.z.union([eI.z.literal("default"),eI.z.literal("auto"),eI.z.literal("flex"),eI.z.literal("scale"),eI.z.literal("priority"),eI.z.null()])),system_fingerprint:eI.z.optional(eI.z.string()),choices:eI.z.array(eI.z.object({index:eI.z.number(),delta:eI.z.object({role:eI.z.optional(eI.z.enum(["developer","system","user","assistant","tool"])),content:eI.z.optional(eI.z.string()),refusal:eI.z.nullish(eI.z.string()),tool_calls:eI.z.optional(eI.z.array(eI.z.object({index:eI.z.number().check(eI.z.int(),eI.z.gte(0)),id:eI.z.optional(eI.z.string()),type:eI.z.optional(eI.z.literal("function")),function:eI.z.object({name:eI.z.optional(eI.z.string()),arguments:eI.z.optional(eI.z.string())})})))}),logprobs:eI.z.optional(eI.z.any()),finish_reason:eI.z.union([eI.z.literal("stop"),eI.z.literal("length"),eI.z.literal("tool_calls"),eI.z.literal("content_filter"),eI.z.null()])})),logprobs:eI.z.nullish(eI.z.object({content:eI.z.nullable(eI.z.array(eI.z.looseObject({}))),refusal:eI.z.nullable(eI.z.array(eI.z.looseObject({})))})),usage:eI.z.nullish(eI.z.object({prompt_tokens:eI.z.number(),completion_tokens:eI.z.number(),total_tokens:eI.z.number(),completion_tokens_details:eI.z.optional(eI.z.object({accepted_prediction_tokens:eI.z.optional(eI.z.number()),audio_tokens:eI.z.optional(eI.z.number()),reasoning_tokens:eI.z.optional(eI.z.number()),rejected_prediction_tokens:eI.z.optional(eI.z.number())})),prompt_tokens_details:eI.z.optional(eI.z.object({audio_tokens:eI.z.optional(eI.z.number()),cached_tokens:eI.z.optional(eI.z.number())}))}))})})});var ej=/*#__PURE__*/function(){function e(t,n){u(this,e);K(this,"_result");K(this,"_onToolCall");this._result=t,this._onToolCall=n}d(e,[{key:"reduceChunk",value:function e(e){var t,n,r;if(Object.keys(this._result).length===0){var o=e.choices,i=E(e,["choices"]);Object.assign(this._result,i),this._result.object!=null&&(this._result.object="chat.completion")}e.usage&&(this._result.usage=e.usage);var a=true,s=false,l=undefined;try{for(var u=e.choices[Symbol.iterator](),c;!(a=(c=u.next()).done);a=true){var d=c.value;var f=d;var h,p,v;var y=(h=this._result.choices)===null||h===void 0?void 0:h[f.index];if(!y){var m=f.delta,g=E(f,["delta"]);var b;y=g,(b=(t=this._result).choices)!==null&&b!==void 0?b:t.choices=[],this._result.choices[f.index]=y}if(f.finish_reason!=null&&(y.finish_reason=f.finish_reason),f.logprobs!=null&&(y.logprobs=f.logprobs),((p=f.delta)===null||p===void 0?void 0:p.content)!=null){var k=f.delta,z=k.content,_=E(k,["content"]);var w,R;(w=y.message)!==null&&w!==void 0?w:y.message=_,(R=(n=y.message).content)!==null&&R!==void 0?R:n.content="",y.message.content+=z}if(((v=f.delta)===null||v===void 0?void 0:v.tool_calls)!=null){var T=f.delta,S=T.tool_calls,O=E(T,["tool_calls"]);var I,C;(I=y.message)!==null&&I!==void 0?I:y.message=O,(C=(r=y.message).tool_calls)!==null&&C!==void 0?C:r.tool_calls=[];var j=true,P=false,A=undefined;try{for(var U=f.delta.tool_calls[Symbol.iterator](),L;!(j=(L=U.next()).done);j=true){var x=L.value;var D;var M=x.index;var N;y.message.tool_calls[M]==null?y.message.tool_calls[M]=structuredClone(x):y.message.tool_calls[M].function.arguments+=(N=(D=x.function)===null||D===void 0?void 0:D.arguments)!==null&&N!==void 0?N:"",f.index===0&&this.tryParseToolCall(y.message.tool_calls[M])}}catch(e){P=true;A=e}finally{try{if(!j&&U.return!=null){U.return()}}finally{if(P){throw A}}}}}}catch(e){s=true;l=e}finally{try{if(!a&&u.return!=null){u.return()}}finally{if(s){throw l}}}}},{key:"tryParseToolCall",value:function e(e){try{var t=JSON.parse(e.function.arguments);this._onToolCall(e,t)}catch(e){}}}]);return e}();H(ej,"StreamReducerService");var eP=ej;var eA=require("@onereach/flow-sdk/types");function eU(e,t,n,r){var o=arguments.length,i=o<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,a;if((typeof Reflect==="undefined"?"undefined":j(Reflect))=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(a=e[s])&&(i=(o<3?a(i):o>3?a(t,n,i):a(t,n))||i);return o>3&&i&&Object.defineProperty(t,n,i),i}H(eU,"_ts_decorate");function eL(e,t){if((typeof Reflect==="undefined"?"undefined":j(Reflect))=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(e,t)}H(eL,"_ts_metadata");var ex=/*#__PURE__*/function(e){v(t,e);function t(){u(this,t);return l(this,t,arguments)}d(t,[{key:"runStep",value:function e(){var e=this;this.triggers.hook({name:eA.ACTION.end,thread:em.getThreadId(this)},this.onWorkerThreadEnd).local("add_chunk",this.onStreamChunk).local("llm_rsp_end",this.onLastStreamChunkReceived).otherwise(function(){var t,n;(t=(n=e.log).DEBUG)===null||t===void 0?void 0:t.call(n,"Initializing stream controller thread")})}},{key:"onWorkerThreadEnd",value:function e(e){var t,n;(t=(n=this.log).DEBUG)===null||t===void 0?void 0:t.call(n,"Stream worker thread finished processing chunk",e.params.result),this.tryRunWorker()}},{key:"onStreamChunk",value:function e(e){var t=eC.parse(e).params.chunk;new eP(this.state.completionResult,this.onToolCall.bind(this)).reduceChunk(t);var n=true,r=false,o=undefined;try{for(var i=t.choices[Symbol.iterator](),a;!(n=(a=i.next()).done);n=true){var s=a.value;var l,u,c;if((l=(u=this.log).DEBUG)===null||l===void 0?void 0:l.call(u,"LLM stream response chunk",s),s.index>0){this.handleMultipleChoices(s);continue}var d=(c=s.delta)===null||c===void 0?void 0:c.content;d!=null&&d.length>0&&(this.addContentToQueue(d),this.scheduleNextContentEvent()),this.handleLengthFinishReason(s)}}catch(e){r=true;o=e}finally{try{if(!n&&i.return!=null){i.return()}}finally{if(r){throw o}}}}},{key:"handleMultipleChoices",value:function e(e){var t,n;this.state.skipIndexWarning||((t=(n=this.log).WARN)===null||t===void 0?void 0:t.call(n,"Multiple choices received from LLM, but only the first one will be processed",{choiceIndex:e.index}),this.state.skipIndexWarning=!0)}},{key:"handleLengthFinishReason",value:function e(e){if(e.finish_reason==="length")throw new er("Reached limit of tokens for LLM completion response",{code:et.LLM_FINISH_LENGTH})}},{key:"onToolCall",value:function e(e){var t,n;(t=(n=this.log).DEBUG)===null||t===void 0?void 0:t.call(n,"Tool call received",e),eO.callTool(this,e)}},{key:"scheduleNextContentEvent",value:function e(){var e=this.state.events[0];e==null||!this.isEventReady(e)||"lastChunkReceived"in e||this.tryRunWorker()}},{key:"addContentToQueue",value:function e(e){var t=this.state.events.at(-1);if(t!=null){if("lastChunkReceived"in t){var n,r;(n=(r=this.log).WARN)===null||n===void 0?void 0:n.call(r,"A new chunk received after the `lastChunkReceived` event. Ignoring it.");return}if(t.content.length<this.maxChunkContentLength){var o,i;var a="".concat(t.content).concat(e);t.content=a.slice(0,this.maxChunkContentLength),(o=(i=this.log).DEBUG)===null||o===void 0?void 0:o.call(i,"Compacting response chunk into last queue event",t),e=a.slice(this.maxChunkContentLength)}}for(;e;){var s,l;this.state.index+=1;var u={content:e.slice(0,this.maxChunkContentLength),index:this.state.index,ts:Date.now()};(s=(l=this.log).DEBUG)===null||s===void 0?void 0:s.call(l,"Add new event into the queue",u),this.state.events.push(u),e=e.slice(this.maxChunkContentLength)}}},{key:"tryRunWorker",value:function e(){if(em.isBusy(this)){var e,t;(e=(t=this.log).DEBUG)===null||e===void 0?void 0:e.call(t,"Skip event processing. Worker thread is busy");return}var n=this.getEventToProcess();if(n!=null){var r,o;if("lastChunkReceived"in n){var i,a;(i=(a=this.log).DEBUG)===null||i===void 0?void 0:i.call(a,"Stopping controller thread. All response content chunks were processed and no new chunks are coming"),this.end({status:"ok",completion:this.state.completionResult});return}(r=(o=this.log).DEBUG)===null||r===void 0?void 0:r.call(o,"Notify stream worker thread about response chunk to process",n),em.start(this,n)}}},{key:"isEventReady",value:function e(e){if(e==null)return!1;if("lastChunkReceived"in e)return!0;if(e.content==null)return!1;var t=Date.now()-e.ts;return this.state.lastChunkReceived||t>=this.debounceDuration||e.content.length>=this.maxChunkContentLength}},{key:"getEventToProcess",value:function e(){var e=this.state.events[0];if(e!=null&&this.isEventReady(e))return"lastChunkReceived"in e||this.state.events.shift(),e}},{key:"onLastStreamChunkReceived",value:function e(){return s(function(){var e,t;return U(this,function(n){switch(n.label){case 0:(e=(t=this.log).DEBUG)===null||e===void 0?void 0:e.call(t,"All LLM response chunks were received. No more response chunks expected"),this.state.events.push({lastChunkReceived:!0}),this.state.lastChunkReceived=!0,this.tryRunWorker();return[4,eO.lastToolCallReceived(this)];case 1:n.sent();return[2]}})}).call(this)}},{key:"maxChunkContentLength",get:function e(){var e;var t;return(t=(e=this.data.streamSettings)===null||e===void 0?void 0:e.maxBufferLength)!==null&&t!==void 0?t:100}},{key:"debounceDuration",get:function e(){var e;var t;return(t=(e=this.data.streamSettings)===null||e===void 0?void 0:e.debounceDuration)!==null&&t!==void 0?t:200}}],[{key:"start",value:function e(e){return s(function(){return U(this,function(t){switch(t.label){case 0:return[4,eh(e,{id:this.getThreadId(e),state:{step:e.id,class:this.class,completionResult:{},events:[],lastChunkReceived:!1,index:-1,skipIndexWarning:!1}})];case 1:t.sent();return[2]}})}).call(this)}},{key:"handleChunk",value:function e(e,t){return s(function(){return U(this,function(n){switch(n.label){case 0:return[4,e.process.enqueueAndRun({thread:this.getThreadId(e),name:"add_chunk",params:{chunk:t}})];case 1:n.sent();return[2]}})}).call(this)}},{key:"lastChunkReceived",value:function e(e){return s(function(){return U(this,function(t){switch(t.label){case 0:return[4,e.process.enqueueAndRun({thread:this.getThreadId(e),name:"llm_rsp_end"})];case 1:t.sent();return[2]}})}).call(this)}},{key:"getThreadId",value:function e(e){return"llm_cmp_".concat(this.class,"_").concat(e.id)}}]);return t}(ec.default);H(ex,"StreamController"),K(ex,"class","str_ctrl");var eD=ex;eU([ei,eL("design:type",Function),eL("design:paramtypes",[]),eL("design:returntype",void 0)],eD.prototype,"runStep",null);eU([ei,eL("design:type",Function),eL("design:paramtypes",[(typeof IActionEvent==="undefined"?"undefined":j(IActionEvent))>"u"?Object:IActionEvent]),eL("design:returntype",void 0)],eD.prototype,"onWorkerThreadEnd",null);eU([ei,eL("design:type",Function),eL("design:paramtypes",[(typeof IEvent==="undefined"?"undefined":j(IEvent))>"u"?Object:IEvent]),eL("design:returntype",void 0)],eD.prototype,"onStreamChunk",null);eU([ei,eL("design:type",Function),eL("design:paramtypes",[]),eL("design:returntype",void 0)],eD.prototype,"tryRunWorker",null);eU([ei,eL("design:type",Function),eL("design:paramtypes",[]),eL("design:returntype",Promise)],eD.prototype,"onLastStreamChunkReceived",null);var eM=require("zod/v4-mini"),eN=require("zod/v4/locales");eM.z.config((0,eN.en)());var eq=eM.z.string().check(eM.z.trim(),eM.z.refine(function(e){return!["undefined","null"].includes(e)},{error:"Unexpected undefined or null merge-field value"})),eG=eM.z.discriminatedUnion("role",[eM.z.object({role:eM.z.literal("system"),content:eq}),eM.z.object({role:eM.z.literal("user"),content:eq,name:eM.z.optional(eM.z.string().check(eM.z.minLength(1),eM.z.maxLength(64)))}),eM.z.object({role:eM.z.literal("assistant"),content:eM.z.nullable(eq),tool_calls:eM.z.optional(eM.z.array(eM.z.object({id:eM.z.string().check(eM.z.minLength(1)),type:eM.z.literal("function"),function:eM.z.object({name:eM.z.string().check(eM.z.minLength(1)),arguments:eM.z.string().check(eM.z.trim(),eM.z.minLength(1))})})))}),eM.z.object({role:eM.z.literal("tool"),content:eq,name:eM.z.optional(eM.z.string().check(eM.z.minLength(1),eM.z.maxLength(64))),tool_call_id:eM.z.string().check(eM.z.minLength(1))})]),eH=eM.z.object({provider:eM.z.string().check(eM.z.minLength(1)),model:eM.z.string().check(eM.z.minLength(1)),tokenName:eM.z.optional(eM.z.string()).check(eM.z.overwrite(function(e){return e===""?void 0:e})),tokenNameHeader:eM.z._default(eM.z.string().check(eM.z.minLength(1)),"x-or-account-token-name"),sessionIdHeader:eM.z._default(eM.z.string().check(eM.z.minLength(1)),"x-or-session-id"),typeOfStep:eM.z.enum(["chat","completion"]),systemMessage:eM.z.optional(eq),userMessage:eM.z.optional(eq),switchAssistantsMessage:eM.z._default(eM.z.boolean(),!1),assistantsFirstMessage:eM.z.optional(eq),userSettings:eM.z.object({temperature:eM.z.promise(eM.z._default(eM.z.coerce.number().check(eM.z.gte(0),eM.z.lte(2)),1)),topP:eM.z.promise(eM.z.optional(eM.z.coerce.number().check(eM.z.gte(0),eM.z.lte(1)))),maxTokens:eM.z.promise(eM.z.optional(eM.z.coerce.number().check(eM.z.int(),eM.z.gte(1)))),presencePenalty:eM.z.promise(eM.z.optional(eM.z.coerce.number().check(eM.z.gte(-2),eM.z.lte(2)))),frequencyPenalty:eM.z.promise(eM.z.optional(eM.z.coerce.number().check(eM.z.gte(-2),eM.z.lte(2)))),stop:eM.z.promise(eM.z.optional(eM.z.array(eM.z.object({token:eM.z.string().check(eM.z.minLength(1),eM.z.maxLength(64))})).check(eM.z.maxLength(4))))}),n:eM.z._default(eM.z.coerce.number().check(eM.z.int(),eM.z.gte(1),eM.z.lte(128)),1),streamResponse:eM.z._default(eM.z.boolean(),!1),streamSettings:eM.z.optional(eM.z.object({maxBufferLength:eM.z.promise(eM.z.coerce.number().check(eM.z.int(),eM.z.gte(1),eM.z.lte(32768))),debounceDuration:eM.z.promise(eM.z.coerce.number().check(eM.z.int(),eM.z.gte(0),eM.z.lte(1e4)))})),customHistory:eM.z._default(eM.z.boolean(),!1),historyRange:eM.z._default(eM.z.coerce.number().check(eM.z.int(),eM.z.gte(1),eM.z.lte(10)),10),historyMode:eM.z.optional(eM.z.enum(["mergefield","codeHistory"])),historyMergefield:eM.z.optional(eM.z.array(eG)),historyCode:eM.z.optional(eM.z.array(eG)),processError:eM.z.boolean(),processTimeout:eM.z.boolean(),timeoutDuration:eM.z.string().check(eM.z.trim(),eM.z.minLength(1))}).check(eM.z.refine(function(e){return!e.streamResponse||e.provider==="openai"},{error:"Streaming is only supported for OpenAI provider"}),eM.z.refine(function(e){return!e.streamResponse||e.streamSettings!==void 0},{error:'Missing "Stream settings" for response streaming mode'}),eM.z.refine(function(e){return e.typeOfStep!=="chat"||e.customHistory||!e.switchAssistantsMessage||e.assistantsFirstMessage!==void 0},{error:'Missing "Assistant\'s first message" value'}),eM.z.refine(function(e){return e.customHistory||e.userMessage!==void 0},{error:'Missing "User message" value'}),eM.z.refine(function(e){return e.typeOfStep!=="chat"||!e.customHistory||e.historyMode!==void 0},{error:'Missing "History mode" value'}),eM.z.refine(function(e){return e.typeOfStep!=="chat"||!e.customHistory||e.historyMode!=="mergefield"||e.historyMergefield!==void 0},{error:'Missing "History" data via merge-field'}),eM.z.refine(function(e){var t,n;return e.typeOfStep!=="chat"||!e.customHistory||e.historyMode!=="mergefield"||((n=e.historyMergefield)===null||n===void 0?void 0:(t=n.find)===null||t===void 0?void 0:t.call(n,function(e){return e.role==="user"}))},{error:'Missing at least one message with role "user" message in "History" data via merge-field'}),eM.z.refine(function(e){return e.typeOfStep!=="chat"||!e.customHistory||e.historyMode!=="codeHistory"||e.historyCode!==void 0},{error:'Missing "History" data as code'}),eM.z.refine(function(e){var t,n;return e.typeOfStep!=="chat"||!e.customHistory||e.historyMode!=="codeHistory"||((n=e.historyCode)===null||n===void 0?void 0:(t=n.find)===null||t===void 0?void 0:t.call(n,function(e){return e.role==="user"}))},{error:'Missing at least one message with role "user" message in "History" data via code'}));var eB=W(require("openai")),eF=W(require("timestring")),eW=require("zod/v4-mini"),eV=require("typescript-memoize"),eK=W(require("@onereach/flow-sdk/services/basic"));function eJ(e,t,n,r){var o=arguments.length,i=o<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,a;if((typeof Reflect==="undefined"?"undefined":j(Reflect))=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(a=e[s])&&(i=(o<3?a(i):o>3?a(t,n,i):a(t,n))||i);return o>3&&i&&Object.defineProperty(t,n,i),i}H(eJ,"_ts_decorate");function eQ(e,t){if((typeof Reflect==="undefined"?"undefined":j(Reflect))=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(e,t)}H(eQ,"_ts_metadata");var e$=/*#__PURE__*/function(e){v(t,e);function t(e,n){u(this,t);var r;var o,i;r=l(this,t,[e]);K(r,"data");r.data=n,(o=(i=r.log).DEBUG)===null||o===void 0?void 0:o.call(i,"OpenAIRequestService initialized");return r}d(t,[{key:"makeOpenAiRequest",value:function e(e){return s(function(){var t,n,r,o,i,a,s,l,u,c,d,f,h,p,v,y;return U(this,function(m){switch(m.label){case 0:i=this.data,a=i.model,s=i.userSettings,l=s.temperature,u=s.topP,c=s.maxTokens,d=s.frequencyPenalty,f=s.presencePenalty,h=i.n,p=i.streamResponse,v={messages:structuredClone(e),model:a,temperature:l,top_p:u,max_tokens:c,frequency_penalty:d,presence_penalty:f,stop:this.stopSequences,n:h};(t=(n=this.log).DEBUG)===null||t===void 0?void 0:t.call(n,"LLM request",v);return[4,this.openAiClient.chat.completions.create(v,{stream:p})];case 1:y=m.sent();return[2,(p||((r=(o=this.log).DEBUG)===null||r===void 0?void 0:r.call(o,"LLM response",y)),y)]}})}).call(this)}},{key:"openAiClient",get:function e(){var e,t;var n=this.data,r=n.provider,o=n.tokenName,i=n.tokenNameHeader,a=n.sessionIdHeader,s={baseURL:"".concat(this.config.env.OPENAI_API_URL,"/").concat(r),apiKey:"",defaultHeaders:z(f({Authorization:this.config.authorization},a,this.session.get(["reporting","sessionId"])),o?f({},i,o):null),timeout:this.timeoutMs};return(e=(t=this.log).DEBUG)===null||e===void 0?void 0:e.call(t,"OpenAI client options",s),new eB.default(s)}},{key:"stopSequences",get:function e(){var e;return((e=this.data.userSettings.stop)!==null&&e!==void 0?e:[]).map(function(e){return e.token}).filter(function(e){return e.length>0})}},{key:"timeoutMs",get:function e(){var e=(0,eF.default)(this.data.timeoutDuration,"ms");return eW.z.number().check(eW.z.int(),eW.z.gte(1e3),eW.z.lte(6e5)).parse(e)}}]);return t}(eK.default);H(e$,"OpenAIRequestService");var eZ=e$;eJ([(0,eV.Memoize)(),eQ("design:type",Number),eQ("design:paramtypes",[])],eZ.prototype,"timeoutMs",null);var eX=require("typescript-memoize");var eY=require("fs/promises");function e0(e){return s(function(){var t,n,r,o,i,a,s,l,u,c,d,f,h;return U(this,function(p){switch(p.label){case 0:if(typeof e!="string"||!e.match(/^\d+\.\d+\.\d+$/))throw new Error("Invalid minimum version format: ".concat(e));t=require.resolve("@onereach/flow-sdk/package.json");if(!t)throw new Error("Could not find package.json for @onereach/flow-sdk");return[4,(0,eY.readFile)(t,"utf-8")];case 1:n=p.sent(),r=JSON.parse(n),o=r.version,i=o.match(RegExp("^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)"))||{},a=i.groups;if(!a)throw new Error("Invalid Flow SDK version format: ".concat(o));s=parseInt(a.major,10),l=parseInt(a.minor,10),u=parseInt(a.patch,10),c=O(e.split(".").map(function(e){return parseInt(e,10)}),3),d=c[0],f=c[1],h=c[2];if(s<d||s===d&&l<f||s===d&&l===f&&u<h)throw new Error("Flow SDK version '".concat(o,"' is lower than required minimum version '").concat(e,"' for the step"));return[2]}})})()}H(e0,"validateFlowSdkVersion");var e1=require("@onereach/flow-sdk/types");function e2(e,t,n,r){var o=arguments.length,i=o<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,a;if((typeof Reflect==="undefined"?"undefined":j(Reflect))=="object"&&typeof Reflect.decorate=="function")i=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(a=e[s])&&(i=(o<3?a(i):o>3?a(t,n,i):a(t,n))||i);return o>3&&i&&Object.defineProperty(t,n,i),i}H(e2,"_ts_decorate");function e3(e,t){if((typeof Reflect==="undefined"?"undefined":j(Reflect))=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(e,t)}H(e3,"_ts_metadata");var e4="8.0.15",e6=/*#__PURE__*/function(e){v(t,e);function t(){u(this,t);return l(this,t,arguments)}d(t,[{key:"resolveDataIn",value:function e(){var e=this;var n=this,r=function(){return h(p(t.prototype),"resolveDataIn",e)};return s(function(){var e,t,o;return U(this,function(i){switch(i.label){case 0:return[4,r().call(n)];case 1:o=i.sent();(e=(t=this.log).DEBUG)===null||e===void 0?void 0:e.call(t,"data in before validation",o);return[4,eH.parseAsync(o)];case 2:return[2,i.sent()]}})}).call(this)}},{key:"runStep",value:function e(){var e=this.data,t=e.streamResponse;t&&this.triggers.hook({name:e1.ACTION.end,thread:eD.getThreadId(this)},this.onStreamControllerThreadEnd),this.triggers.hook({name:e1.ACTION.end,thread:eO.getThreadId(this)},this.onToolsControllerEnd),this.triggers.otherwise(this.initRequest)}},{key:"initRequest",value:function e(){return s(function(){var e,t,n,r;return U(this,function(o){switch(o.label){case 0:return[4,e0(e4)];case 1:o.sent(),this.state.contentReady=!1,this.state.toolsReady=!1,this.state.chatCompletion=void 0,this.state.toolsResults=[];e=this.data,t=e.streamResponse;return[4,Promise.all([eO.start(this),t?eD.start(this):void 0,eu.start(this)])];case 2:o.sent();return[4,this.openAiService.makeOpenAiRequest(this.history)];case 3:n=o.sent();if(!t)return[3,5];return[4,this.handleStreamResponse(n)];case 4:r=o.sent();return[3,7];case 5:return[4,this.handleResponse(n)];case 6:r=o.sent();o.label=7;case 7:r;return[2]}})}).call(this)}},{key:"handleResponse",value:function e(e){return s(function(){var t,n,r,o,i,a,s,l,u,c,d,f;return U(this,function(h){switch(h.label){case 0:this.state.chatCompletion=e,this.state.contentReady=!0,e.choices.length>1&&((t=(n=this.log).WARN)===null||t===void 0?void 0:t.call(n,"Multiple choices received from LLM, but only the first one will be processed",{choicesNumber:e.choices.length}));i=(o=(r=e.choices[0])===null||r===void 0?void 0:r.message.tool_calls)!==null&&o!==void 0?o:[];a=true,s=false,l=undefined;h.label=1;case 1:h.trys.push([1,6,7,8]);u=i[Symbol.iterator]();h.label=2;case 2:if(!!(a=(c=u.next()).done))return[3,5];d=c.value;return[4,eO.callTool(this,d)];case 3:h.sent();h.label=4;case 4:a=true;return[3,2];case 5:return[3,8];case 6:f=h.sent();s=true;l=f;return[3,8];case 7:try{if(!a&&u.return!=null){u.return()}}finally{if(s){throw l}}return[7];case 8:return[4,eO.lastToolCallReceived(this)];case 9:h.sent();return[2]}})}).call(this)}},{key:"handleStreamResponse",value:function e(e){return s(function(){var t,n,r,i,a,s,l,u,c,d;return U(this,function(f){switch(f.label){case 0:(t=(n=this.log).DEBUG)===null||t===void 0?void 0:t.call(n,"Start processing stream of chunks from LLM");r=false,i=false;f.label=1;case 1:f.trys.push([1,7,8,13]);s=o(e);f.label=2;case 2:return[4,s.next()];case 3:if(!(r=!(l=f.sent()).done))return[3,6];u=l.value;c=u;return[4,eD.handleChunk(this,c)];case 4:f.sent();f.label=5;case 5:r=false;return[3,2];case 6:return[3,13];case 7:d=f.sent();i=true;a=d;return[3,13];case 8:f.trys.push([8,,11,12]);if(!(r&&s.return!=null))return[3,10];return[4,s.return()];case 9:f.sent();f.label=10;case 10:return[3,12];case 11:if(i){throw a}return[7];case 12:return[7];case 13:return[4,eD.lastChunkReceived(this)];case 14:f.sent();return[2]}})}).call(this)}},{key:"onToolsControllerEnd",value:function e(e){return s(function(){var t,n,r,o,i,a,s;return U(this,function(l){switch(l.label){case 0:r=e.params,o=r.result;if((t=(n=this.log).DEBUG)===null||t===void 0?void 0:t.call(n,"Tools controller ended with messages",o),y(o,Error))throw new er("Tools controller thread ended with an error",o,{code:et.STEP_LOGIC_ISSUE});i=o!==null&&o!==void 0?o:{},a=i.status,s=i.messages;if(a!=="ok"||!Array.isArray(s))throw new er("Unexpected end of the tools controller thread",{code:et.STEP_LOGIC_ISSUE,data:e.params.result});this.state.toolsResults=s,this.state.toolsReady=!0;return[4,this.tryToExitStep()];case 1:l.sent();return[2]}})}).call(this)}},{key:"onStreamControllerThreadEnd",value:function e(e){return s(function(){var t,n,r,o,i,a,s,l,u;return U(this,function(c){switch(c.label){case 0:i=e.params,a=i.result;if((t=(n=this.log).DEBUG)===null||t===void 0?void 0:t.call(n,"Stream controller ended with result",a),y(a,Error))throw new er("Stream controller thread ended with an error",a,{code:et.STEP_LOGIC_ISSUE});s=a!==null&&a!==void 0?a:{},l=s.status,u=s.completion;if(l!=="ok"||u==null)throw new er("Unexpected end of the stream controller thread",{code:et.STEP_LOGIC_ISSUE,data:e.params.result});(r=(o=this.log).DEBUG)===null||r===void 0?void 0:r.call(o,"Create Chat Completion result",u),this.state.contentReady=!0,this.state.chatCompletion=u;return[4,this.tryToExitStep()];case 1:c.sent();return[2]}})}).call(this)}},{key:"tryToExitStep",value:function e(){return s(function(){var e,t,n,r,o,i,a,s,l,u,c,d;return U(this,function(f){switch(f.label){case 0:a=this.state,s=a.toolsReady,l=a.contentReady,u=a.chatCompletion,c=a.toolsResults;if(!s||!l)return[2];if(u==null)throw new er("Missing chat completion result, but request is marked as processed",{code:et.STEP_LOGIC_ISSUE});d=(t=u.choices)===null||t===void 0?void 0:(e=t[0])===null||e===void 0?void 0:e.message;if(d==null)throw new er("Missing completion message in chat completion result",{code:et.STEP_LOGIC_ISSUE});return[4,eu.appendToHistory(this,[d].concat(C(c)))];case 1:if(f.sent(),(u===null||u===void 0?void 0:(r=u.choices)===null||r===void 0?void 0:(n=r[0])===null||n===void 0?void 0:n.finish_reason)==="tool_calls"){this.thread.jumpTo(this.currentStepId);return[2]}if(u==null)throw new er("Missing chat completion result, but request is marked as processed",{code:et.STEP_LOGIC_ISSUE});(o=(i=this.log).DEBUG)===null||o===void 0?void 0:o.call(i,"Exiting step with collected data",u),this.exitStep("next",w(z({},u),{_history:this.history}));return[2]}})}).call(this)}},{key:"history",get:function e(){return eu.getHistory(this)}},{key:"openAiService",get:function e(){return new eZ(this.thread,this.data)}}]);return t}($.default);H(e6,"CreateChatCompletionStep");var e8=e6;e2([ei,e3("design:type",Function),e3("design:paramtypes",[]),e3("design:returntype",Promise)],e8.prototype,"resolveDataIn",null);e2([ei,e3("design:type",Function),e3("design:paramtypes",[]),e3("design:returntype",void 0)],e8.prototype,"runStep",null);e2([ei,e3("design:type",Function),e3("design:paramtypes",[]),e3("design:returntype",Promise)],e8.prototype,"initRequest",null);e2([ei,e3("design:type",Function),e3("design:paramtypes",[(typeof IActionEvent==="undefined"?"undefined":j(IActionEvent))>"u"?Object:IActionEvent]),e3("design:returntype",Promise)],e8.prototype,"onToolsControllerEnd",null);e2([ei,e3("design:type",Function),e3("design:paramtypes",[(typeof IActionEvent==="undefined"?"undefined":j(IActionEvent))>"u"?Object:IActionEvent]),e3("design:returntype",Promise)],e8.prototype,"onStreamControllerThreadEnd",null);e2([(0,eX.Memoize)(),e3("design:type",(typeof eZ==="undefined"?"undefined":j(eZ))>"u"?Object:eZ),e3("design:paramtypes",[])],e8.prototype,"openAiService",null);(0,Q.install)();var e7;var e5=e8,e9=(e7={},f(e7,eu.class,eu),f(e7,eO.class,eO),f(e7,ew.class,ew),f(e7,eD.class,eD),f(e7,em.class,em),e7);0&&(module.exports={states:states,step:step});//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/antonyhell/Developer/llm-toolkit/packages/create_chat_completion_logic/dist/index.js","../src/index.ts","../src/step.ts","../src/layers/history/controller.ts","../src/errors/error_filter.ts","../src/errors/step_error.ts","../src/decorators/error_filter.ts","../src/layers/stream_handler/controller.ts","../src/layers/stream_handler/worker.ts","../src/utils/run_thread.ts","../src/layers/tools_caller/controller.ts","../src/layers/tools_caller/worker.ts","../src/layers/stream_handler/schemas/stream_chunk.ts","../src/layers/stream_handler/services/stream_reducer.ts","../src/schemas/data_in.ts","../src/services/openai_request.ts","../src/utils/validate_flow_sdk_version.ts"],"names":["Ie","Object","create","U","defineProperty","be","getOwnPropertyDescriptor","Ce","getOwnPropertyNames","Oe","getPrototypeOf","Le","prototype","hasOwnProperty","xe","n","e","t","enumerable","configurable","writable","value","d","Ue","get","ne","r","l","call","w","__esModule","je","_","index_exports","__export","states","step","module","exports","__toCommonJS","import_source_map_support","require","import_step","import_timeout","import_v4_mini","import_base","ErrorCode","CreateChatCompletionStepError","BaseError","_CreateChatCompletionStepError","errorFilter","error","TimeoutError","z","core","$ZodError","prettifyError","code","VALIDATION","Error","message","includes","TIMEOUT","AUTH","responseErrorMessage","response","data","SERVER_ERROR","UNKNOWN","ErrorFilter","_target","propertyKey","descriptor","originalMethod","wrappedMethod","__name","args","result","apply","Promise","catch","methodName","toString","log","DEBUG","name","_ts_decorate","decorators","target","key","desc","arguments","length","s","a","Reflect","decorate","c","b","metadata","HistoryController","runStep","triggers","local","onAppendToHistory","otherwise","initialize","state","messages","initialMessages","event","params","Array","isArray","appendToManagedHistory","customHistory","push","typeOfStep","historyMode","historyMergefield","historyCode","historyRange","systemMessage","userMessage","assistantsFirstMessage","role","content","slice","unshift","start","threadId","getThreadId","process","getThread","thread","runThread","id","background","class","appendToHistory","enqueueAndRun","getHistory","getSafeThread","Step","__publicField","_HistoryController","k","V","p","Function","IEvent","import_types","options","ended","ACTION","goto","StreamWorker","STEP_LOGIC_ISSUE","chunk","exitStep","isBusy","workerThread","workerThreadId","_StreamWorker","S","Me","Q","ToolsWorker","toolCall","parsedArguments","getExitName","type","function","JSON","parse","_ToolsWorker","C","v","ToolsController","onCallTool","onLastToolCallReceived","UNSUPPORTED","tasks","status","startToolWorkerThread","expectMoreTasks","tryEndToolsControllerThread","hook","end","onToolWorkerThreadEnd","toolCallId","setToolCallResult","values","some","task","map","tool_call_id","stringify","callTool","lastToolCallReceived","_ToolsController","f","H","IActionEvent","streamChunkEventSchema","object","string","literal","created","number","model","service_tier","optional","union","null","system_fingerprint","choices","array","index","delta","enum","refusal","nullish","tool_calls","check","int","gte","logprobs","any","finish_reason","nullable","looseObject","usage","prompt_tokens","completion_tokens","total_tokens","completion_tokens_details","accepted_prediction_tokens","audio_tokens","reasoning_tokens","rejected_prediction_tokens","prompt_tokens_details","cached_tokens","StreamReducerService","memo","onToolCall","_result","_onToolCall","reduceChunk","_a","_b","_c","keys","rest","assign","choice","existing","deltaToolCall","i","structuredClone","tryParseToolCall","parsedArgs","_StreamReducerService","T","StreamController","onWorkerThreadEnd","onStreamChunk","onLastStreamChunkReceived","tryRunWorker","completionResult","bind","chunkChoice","handleMultipleChoices","addContentToQueue","scheduleNextContentEvent","handleLengthFinishReason","skipIndexWarning","WARN","choiceIndex","LLM_FINISH_LENGTH","firstEvent","events","isEventReady","lastEvent","at","maxChunkContentLength","mergedChunk","ts","Date","now","getEventToProcess","completion","eventDelay","lastChunkReceived","debounceDuration","shift","streamSettings","maxBufferLength","handleChunk","_StreamController","E","A","import_locales","config","en","stringNoUndefinedSchema","trim","refine","val","messageSchema","discriminatedUnion","minLength","maxLength","dataInSchema","provider","tokenName","overwrite","undefined","tokenNameHeader","_default","sessionIdHeader","switchAssistantsMessage","boolean","userSettings","temperature","promise","coerce","lte","topP","maxTokens","presencePenalty","frequencyPenalty","stop","token","streamResponse","processError","processTimeout","timeoutDuration","find","msg","import_openai","import_timestring","import_typescript_memoize","import_basic","De","ge","OpenAIRequestService","makeOpenAiRequest","request","top_p","max_tokens","frequency_penalty","presence_penalty","stopSequences","openAiClient","chat","completions","stream","clientOptions","baseURL","env","OPENAI_API_URL","apiKey","defaultHeaders","Authorization","authorization","session","timeout","timeoutMs","OpenAI","item","filter","timestring","BasicThreadService","_OpenAIRequestService","import_promises","validateFlowSdkVersion","minVersion","packageJsonPath","packageJsonContent","version","groups","major","minor","patch","minMajor","minMinor","minPatch","match","readFile","parseInt","split","x","g","MINIMAL_FLOW_SDK_VERSION","CreateChatCompletionStep","resolveDataIn","dataIn","parseAsync","onStreamControllerThreadEnd","onToolsControllerEnd","initRequest","contentReady","toolsReady","chatCompletion","toolsResults","all","openAiService","history","handleStreamResponse","handleResponse","toolCalls","choicesNumber","tryToExitStep","completionMessage","jumpTo","currentStepId","_history","_CreateChatCompletionStep","I","j","ve","Memoize","install"],"mappings":"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","sourcesContent":["\"use strict\";var Ie=Object.create;var U=Object.defineProperty;var be=Object.getOwnPropertyDescriptor;var Ce=Object.getOwnPropertyNames;var Oe=Object.getPrototypeOf,Le=Object.prototype.hasOwnProperty;var xe=(n,e,t)=>e in n?U(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var d=(n,e)=>U(n,\"name\",{value:e,configurable:!0});var Ue=(n,e)=>{for(var t in e)U(n,t,{get:e[t],enumerable:!0})},ne=(n,e,t,r)=>{if(e&&typeof e==\"object\"||typeof e==\"function\")for(let l of Ce(e))!Le.call(n,l)&&l!==t&&U(n,l,{get:()=>e[l],enumerable:!(r=be(e,l))||r.enumerable});return n};var w=(n,e,t)=>(t=n!=null?Ie(Oe(n)):{},ne(e||!n||!n.__esModule?U(t,\"default\",{value:n,enumerable:!0}):t,n)),je=n=>ne(U({},\"__esModule\",{value:!0}),n);var _=(n,e,t)=>xe(n,typeof e!=\"symbol\"?e+\"\":e,t);var Fe={};Ue(Fe,{states:()=>Ge,step:()=>Pe});module.exports=je(Fe);var Se=require(\"source-map-support\");var ke=w(require(\"@onereach/flow-sdk/step\"));var se=w(require(\"@onereach/flow-sdk/step\"));var W=w(require(\"@onereach/flow-sdk/errors/timeout\")),z=require(\"zod/v4-mini\");var oe=w(require(\"@onereach/flow-sdk/errors/base\"));var u=function(n){return n.UNKNOWN=\"UNKNOWN\",n.STEP_LOGIC_ISSUE=\"STEP_LOGIC_ISSUE\",n.AUTH=\"AUTH\",n.TIMEOUT=\"TIMEOUT\",n.VALIDATION=\"VALIDATION\",n.INVALID_REQUEST=\"INVALID_REQUEST\",n.RATE_LIMITED=\"RATE_LIMITED\",n.LLM_FINISH_LENGTH=\"LLM_FINISH_LENGTH\",n.SERVER_ERROR=\"SERVER_ERROR\",n.UNSUPPORTED=\"UNSUPPORTED\",n}({}),$=class $ extends oe.default{};d($,\"CreateChatCompletionStepError\");var h=$;function K(n){if(n instanceof h||n instanceof W.default)return n;if(n instanceof z.z.core.$ZodError)return new h(z.z.prettifyError(n),n,{code:u.VALIDATION});if(n instanceof Error){if(n.message.includes(\"Request timed out\"))return new W.default(\"Timeout\",n,{code:u.TIMEOUT});if(n.message.includes(\"API key is required\"))return new h(\"API key is required\",n,{code:u.AUTH});let e=n?.response?.data?.error?.message;if(e!=null)return new h(e,n,{code:u.SERVER_ERROR})}return typeof n==\"string\"?new h(n,{code:u.UNKNOWN}):n instanceof Error?new h(\"Unknown error\",n,{code:u.UNKNOWN}):new h(\"Unknown error\",{code:u.UNKNOWN,data:n})}d(K,\"errorFilter\");function p(n,e,t){let r=t.value;if(!r||typeof r!=\"function\")return;let l=d(function(...s){try{let a=r.apply(this,s);return a instanceof Promise?a.catch(c=>{let y=e.toString();throw this.log.DEBUG?.(`Error in method '${y}'`,c),K(c)}):a}catch(a){let c=e.toString();throw this.log.DEBUG?.(`Error in method '${c}'`,a),K(a)}},\"wrappedMethod\");return r?.name!=null&&Object.defineProperty(l,\"name\",{value:r.name}),t.value=l,t}d(p,\"ErrorFilter\");function V(n,e,t,r){var l=arguments.length,s=l<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,a;if(typeof Reflect==\"object\"&&typeof Reflect.decorate==\"function\")s=Reflect.decorate(n,e,t,r);else for(var c=n.length-1;c>=0;c--)(a=n[c])&&(s=(l<3?a(s):l>3?a(e,t,s):a(e,t))||s);return l>3&&s&&Object.defineProperty(e,t,s),s}d(V,\"_ts_decorate\");function b(n,e){if(typeof Reflect==\"object\"&&typeof Reflect.metadata==\"function\")return Reflect.metadata(n,e)}d(b,\"_ts_metadata\");var N=class N extends se.default{static async start(e){let t=this.getThreadId(e);e.process.getThread(t)==null&&await e.thread.runThread({id:t,background:!0,state:{step:e.id,class:this.class,messages:[]}})}static async appendToHistory(e,t){await e.process.enqueueAndRun({thread:this.getThreadId(e),name:\"hst_append\",params:{message:t}})}static getHistory(e){return e.process.getSafeThread(this.getThreadId(e)).state.messages}static getThreadId(e){return`llm_cmp_${this.class}_${e.id}`}runStep(){this.triggers.local(\"hst_append\",this.onAppendToHistory).otherwise(this.initialize)}initialize(){this.log.DEBUG?.(\"Initializing history controller thread\"),this.state.messages.length===0&&(this.state.messages=this.initialMessages)}onAppendToHistory(e){this.log.DEBUG?.(\"Appending message to history\",e.params);let{message:t}=e.params,r=Array.isArray(t)?t:[t];this.appendToManagedHistory(r)}appendToManagedHistory(e){if(this.data.customHistory)throw new h(\"Managed history is not available in custom history mode\",{code:u.VALIDATION});this.state.messages.push(...e)}get initialMessages(){let{typeOfStep:e,customHistory:t,historyMode:r,historyMergefield:l,historyCode:s,historyRange:a,systemMessage:c,userMessage:y,assistantsFirstMessage:R}=this.data;if(e===\"completion\")return[{role:\"user\",content:y}];let m=[];return t?(m=r===\"mergefield\"?l:s,m=m.slice(-1*a)):(m=this.state.messages,m.length===0&&R!=null&&R.length>0&&m.push({role:\"assistant\",content:R}),m.push({role:\"user\",content:y}),m=m.slice(-1*a),this.state.messages=m),c!=null&&c.length>0&&m.unshift({role:\"system\",content:c}),m}};d(N,\"HistoryController\"),_(N,\"class\",\"hst_ctrl\");var k=N;V([p,b(\"design:type\",Function),b(\"design:paramtypes\",[]),b(\"design:returntype\",void 0)],k.prototype,\"runStep\",null);V([p,b(\"design:type\",Function),b(\"design:paramtypes\",[]),b(\"design:returntype\",void 0)],k.prototype,\"initialize\",null);V([p,b(\"design:type\",Function),b(\"design:paramtypes\",[typeof IEvent>\"u\"?Object:IEvent]),b(\"design:returntype\",void 0)],k.prototype,\"onAppendToHistory\",null);var he=w(require(\"@onereach/flow-sdk/step\"));var ie=w(require(\"@onereach/flow-sdk/step\"));var re=require(\"@onereach/flow-sdk/types\");async function O(n,{id:e,state:t,...r}){let l=n.process.getThread(e);if(n.log.DEBUG?.(`runThread: thread with id '${e}'`,r),l==null)return await n.thread.runThread({id:e,background:!0,state:t,...r});if(!l.ended)throw new Error(`Thread with id '${e}' has not ended yet, cannot start it again`);if(t==null)throw new Error(`Thread with id '${e}' must have a state to run`);return await l.enqueueAndRun({name:re.ACTION.goto,state:t})}d(O,\"runThread\");function Ae(n,e,t,r){var l=arguments.length,s=l<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,a;if(typeof Reflect==\"object\"&&typeof Reflect.decorate==\"function\")s=Reflect.decorate(n,e,t,r);else for(var c=n.length-1;c>=0;c--)(a=n[c])&&(s=(l<3?a(s):l>3?a(e,t,s):a(e,t))||s);return l>3&&s&&Object.defineProperty(e,t,s),s}d(Ae,\"_ts_decorate\");function J(n,e){if(typeof Reflect==\"object\"&&typeof Reflect.metadata==\"function\")return Reflect.metadata(n,e)}d(J,\"_ts_metadata\");var P=class P extends ie.default{static async start(e,t){await O(e,{id:this.getThreadId(e),state:{step:e.id,class:this.class,event:t}})}static isBusy(e){let t=this.getThread(e);return t!=null&&!t.ended}static getThread(e){let t=this.getThreadId(e);return e.process.getThread(t)}static getThreadId(e){return`llm_cmp_${this.class}_${e.id}`}runStep(){if(!(\"event\"in this.state)||this.state.event==null)throw new h(\"Stream worker thread state must contain an event to process\",{code:u.STEP_LOGIC_ISSUE});let e=this.state.event;this.log.DEBUG?.(\"Executing stream worker thread\",e),this.exitStep(\"chunk\",{chunk:e})}};d(P,\"StreamWorker\"),_(P,\"class\",\"str_wrk\");var S=P;Ae([p,J(\"design:type\",Function),J(\"design:paramtypes\",[]),J(\"design:returntype\",void 0)],S.prototype,\"runStep\",null);var le=w(require(\"@onereach/flow-sdk/step\"));var ae=w(require(\"@onereach/flow-sdk/step\"));function Me(n,e,t,r){var l=arguments.length,s=l<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,a;if(typeof Reflect==\"object\"&&typeof Reflect.decorate==\"function\")s=Reflect.decorate(n,e,t,r);else for(var c=n.length-1;c>=0;c--)(a=n[c])&&(s=(l<3?a(s):l>3?a(e,t,s):a(e,t))||s);return l>3&&s&&Object.defineProperty(e,t,s),s}d(Me,\"_ts_decorate\");function Q(n,e){if(typeof Reflect==\"object\"&&typeof Reflect.metadata==\"function\")return Reflect.metadata(n,e)}d(Q,\"_ts_metadata\");var G=class G extends ae.default{static async start(e,t){let r=JSON.parse(t.function?.arguments);await O(e,{id:this.getThreadId(t),state:{step:e.id,class:this.class},local:{toolCall:t,parsedArguments:r}})}static getThreadId(e){return`llm_cmp_${this.class}_${e.id}`}runStep(){let{toolCall:e,parsedArguments:t}=this.local;this.log.DEBUG?.(\"Initializing tool worker thread\",e),this.exitStep(this.getExitName(e),{toolCall:{id:e.id,type:e.type,function:{name:e.function.name,arguments:t}}})}getExitName(e){return e.function.name}};d(G,\"ToolsWorker\"),_(G,\"class\",\"tl_wrk\");var C=G;Me([p,Q(\"design:type\",Function),Q(\"design:paramtypes\",[]),Q(\"design:returntype\",void 0)],C.prototype,\"runStep\",null);var ce=require(\"@onereach/flow-sdk/types\");function H(n,e,t,r){var l=arguments.length,s=l<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,a;if(typeof Reflect==\"object\"&&typeof Reflect.decorate==\"function\")s=Reflect.decorate(n,e,t,r);else for(var c=n.length-1;c>=0;c--)(a=n[c])&&(s=(l<3?a(s):l>3?a(e,t,s):a(e,t))||s);return l>3&&s&&Object.defineProperty(e,t,s),s}d(H,\"_ts_decorate\");function v(n,e){if(typeof Reflect==\"object\"&&typeof Reflect.metadata==\"function\")return Reflect.metadata(n,e)}d(v,\"_ts_metadata\");var F=class F extends le.default{static async start(e){let t=this.getThreadId(e);await O(e,{id:t,state:{step:e.id,class:this.class,tasks:{},expectMoreTasks:!0}})}static async callTool(e,t){await e.process.enqueueAndRun({thread:this.getThreadId(e),name:\"tl_run_call\",params:{toolCall:t}})}static async lastToolCallReceived(e){await e.process.enqueueAndRun({thread:this.getThreadId(e),name:\"tl_rsp_end\"})}static getThreadId(e){return`llm_cmp_${this.class}_${e.id}`}runStep(){this.triggers.local(\"tl_run_call\",this.onCallTool).local(\"tl_rsp_end\",this.onLastToolCallReceived).otherwise(()=>{this.log.DEBUG?.(\"Initializing tools controller thread\")})}onCallTool(e){let{toolCall:t}=e.params;if(t.type!==\"function\")throw new h(\"Only function tools are supported at the moment\",{code:u.UNSUPPORTED});this.state.tasks[t.id]={call:t,status:\"pending\"},this.startToolWorkerThread(t)}onLastToolCallReceived(){this.log.DEBUG?.(\"No more tool calls expected\",this.state.tasks),this.state.expectMoreTasks=!1,this.tryEndToolsControllerThread()}startToolWorkerThread(e){this.triggers.hook({name:ce.ACTION.end,thread:C.getThreadId(e)},this.onToolWorkerThreadEnd),C.start(this,e)}onToolWorkerThreadEnd(e){if(this.log.DEBUG?.(\"Tool caller worker thread has ended\",e),!(\"result\"in e.params)||e.params.result==null)throw new h(\"Tool worker thread ended without result\",{code:u.STEP_LOGIC_ISSUE});let{result:t}=e.params;if(t instanceof Error)throw new h(\"Tool worker thread ended with error\",t,{code:u.STEP_LOGIC_ISSUE});this.log.DEBUG?.(\"Tool worker thread completed successfully\",{toolCallId:t.toolCallId,result:t.data}),this.setToolCallResult(t.toolCallId,t.data),this.tryEndToolsControllerThread()}setToolCallResult(e,t){let r=this.state.tasks[e];if(r==null)throw new h(`Unknown tool call with id '${e}'`,{code:u.STEP_LOGIC_ISSUE});r.status=\"completed\",r.result=t}tryEndToolsControllerThread(){this.state.expectMoreTasks||Object.values(this.state.tasks).some(t=>t.status===\"pending\")||(this.log.DEBUG?.(\"All tool calls completed or failed\",this.state.tasks),this.end({status:\"ok\",messages:this.messages}))}get messages(){return Object.values(this.state.tasks).map(e=>({role:\"tool\",tool_call_id:e.call.id,content:JSON.stringify(e.result)}))}};d(F,\"ToolsController\"),_(F,\"class\",\"tl_ctrl\");var f=F;H([p,v(\"design:type\",Function),v(\"design:paramtypes\",[]),v(\"design:returntype\",void 0)],f.prototype,\"runStep\",null);H([p,v(\"design:type\",Function),v(\"design:paramtypes\",[typeof IEvent>\"u\"?Object:IEvent]),v(\"design:returntype\",void 0)],f.prototype,\"onCallTool\",null);H([p,v(\"design:type\",Function),v(\"design:paramtypes\",[]),v(\"design:returntype\",void 0)],f.prototype,\"onLastToolCallReceived\",null);H([p,v(\"design:type\",Function),v(\"design:paramtypes\",[typeof IActionEvent>\"u\"?Object:IActionEvent]),v(\"design:returntype\",void 0)],f.prototype,\"onToolWorkerThreadEnd\",null);var i=require(\"zod/v4-mini\"),de=i.z.object({name:i.z.string(),params:i.z.object({chunk:i.z.object({id:i.z.string(),object:i.z.literal(\"chat.completion.chunk\"),created:i.z.number(),model:i.z.string(),service_tier:i.z.optional(i.z.union([i.z.literal(\"default\"),i.z.literal(\"auto\"),i.z.literal(\"flex\"),i.z.literal(\"scale\"),i.z.literal(\"priority\"),i.z.null()])),system_fingerprint:i.z.optional(i.z.string()),choices:i.z.array(i.z.object({index:i.z.number(),delta:i.z.object({role:i.z.optional(i.z.enum([\"developer\",\"system\",\"user\",\"assistant\",\"tool\"])),content:i.z.optional(i.z.string()),refusal:i.z.nullish(i.z.string()),tool_calls:i.z.optional(i.z.array(i.z.object({index:i.z.number().check(i.z.int(),i.z.gte(0)),id:i.z.optional(i.z.string()),type:i.z.optional(i.z.literal(\"function\")),function:i.z.object({name:i.z.optional(i.z.string()),arguments:i.z.optional(i.z.string())})})))}),logprobs:i.z.optional(i.z.any()),finish_reason:i.z.union([i.z.literal(\"stop\"),i.z.literal(\"length\"),i.z.literal(\"tool_calls\"),i.z.literal(\"content_filter\"),i.z.null()])})),logprobs:i.z.nullish(i.z.object({content:i.z.nullable(i.z.array(i.z.looseObject({}))),refusal:i.z.nullable(i.z.array(i.z.looseObject({})))})),usage:i.z.nullish(i.z.object({prompt_tokens:i.z.number(),completion_tokens:i.z.number(),total_tokens:i.z.number(),completion_tokens_details:i.z.optional(i.z.object({accepted_prediction_tokens:i.z.optional(i.z.number()),audio_tokens:i.z.optional(i.z.number()),reasoning_tokens:i.z.optional(i.z.number()),rejected_prediction_tokens:i.z.optional(i.z.number())})),prompt_tokens_details:i.z.optional(i.z.object({audio_tokens:i.z.optional(i.z.number()),cached_tokens:i.z.optional(i.z.number())}))}))})})});var Z=class Z{constructor(e,t){_(this,\"_result\");_(this,\"_onToolCall\");this._result=e,this._onToolCall=t}reduceChunk(e){var t,r,l;if(Object.keys(this._result).length===0){let{choices:s,...a}=e;Object.assign(this._result,a),this._result.object!=null&&(this._result.object=\"chat.completion\")}e.usage&&(this._result.usage=e.usage);for(let s of e.choices){let a=this._result.choices?.[s.index];if(!a){let{delta:c,...y}=s;a=y,(t=this._result).choices??(t.choices=[]),this._result.choices[s.index]=a}if(s.finish_reason!=null&&(a.finish_reason=s.finish_reason),s.logprobs!=null&&(a.logprobs=s.logprobs),s.delta?.content!=null){let{content:c,...y}=s.delta;a.message??(a.message=y),(r=a.message).content??(r.content=\"\"),a.message.content+=c}if(s.delta?.tool_calls!=null){let{tool_calls:c,...y}=s.delta;a.message??(a.message=y),(l=a.message).tool_calls??(l.tool_calls=[]);for(let R of s.delta.tool_calls){let m=R.index;a.message.tool_calls[m]==null?a.message.tool_calls[m]=structuredClone(R):a.message.tool_calls[m].function.arguments+=R.function?.arguments??\"\",s.index===0&&this.tryParseToolCall(a.message.tool_calls[m])}}}}tryParseToolCall(e){try{let t=JSON.parse(e.function.arguments);this._onToolCall(e,t)}catch{}}};d(Z,\"StreamReducerService\");var B=Z;var ue=require(\"@onereach/flow-sdk/types\");function A(n,e,t,r){var l=arguments.length,s=l<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,a;if(typeof Reflect==\"object\"&&typeof Reflect.decorate==\"function\")s=Reflect.decorate(n,e,t,r);else for(var c=n.length-1;c>=0;c--)(a=n[c])&&(s=(l<3?a(s):l>3?a(e,t,s):a(e,t))||s);return l>3&&s&&Object.defineProperty(e,t,s),s}d(A,\"_ts_decorate\");function T(n,e){if(typeof Reflect==\"object\"&&typeof Reflect.metadata==\"function\")return Reflect.metadata(n,e)}d(T,\"_ts_metadata\");var q=class q extends he.default{static async start(e){await O(e,{id:this.getThreadId(e),state:{step:e.id,class:this.class,completionResult:{},events:[],lastChunkReceived:!1,index:-1,skipIndexWarning:!1}})}static async handleChunk(e,t){await e.process.enqueueAndRun({thread:this.getThreadId(e),name:\"add_chunk\",params:{chunk:t}})}static async lastChunkReceived(e){await e.process.enqueueAndRun({thread:this.getThreadId(e),name:\"llm_rsp_end\"})}static getThreadId(e){return`llm_cmp_${this.class}_${e.id}`}runStep(){this.triggers.hook({name:ue.ACTION.end,thread:S.getThreadId(this)},this.onWorkerThreadEnd).local(\"add_chunk\",this.onStreamChunk).local(\"llm_rsp_end\",this.onLastStreamChunkReceived).otherwise(()=>{this.log.DEBUG?.(\"Initializing stream controller thread\")})}onWorkerThreadEnd(e){this.log.DEBUG?.(\"Stream worker thread finished processing chunk\",e.params.result),this.tryRunWorker()}onStreamChunk(e){let r=de.parse(e).params.chunk;new B(this.state.completionResult,this.onToolCall.bind(this)).reduceChunk(r);for(let s of r.choices){if(this.log.DEBUG?.(\"LLM stream response chunk\",s),s.index>0){this.handleMultipleChoices(s);continue}let a=s.delta?.content;a!=null&&a.length>0&&(this.addContentToQueue(a),this.scheduleNextContentEvent()),this.handleLengthFinishReason(s)}}handleMultipleChoices(e){this.state.skipIndexWarning||(this.log.WARN?.(\"Multiple choices received from LLM, but only the first one will be processed\",{choiceIndex:e.index}),this.state.skipIndexWarning=!0)}handleLengthFinishReason(e){if(e.finish_reason===\"length\")throw new h(\"Reached limit of tokens for LLM completion response\",{code:u.LLM_FINISH_LENGTH})}onToolCall(e){this.log.DEBUG?.(\"Tool call received\",e),f.callTool(this,e)}scheduleNextContentEvent(){let e=this.state.events[0];e==null||!this.isEventReady(e)||\"lastChunkReceived\"in e||this.tryRunWorker()}addContentToQueue(e){let t=this.state.events.at(-1);if(t!=null){if(\"lastChunkReceived\"in t){this.log.WARN?.(\"A new chunk received after the `lastChunkReceived` event. Ignoring it.\");return}if(t.content.length<this.maxChunkContentLength){let r=`${t.content}${e}`;t.content=r.slice(0,this.maxChunkContentLength),this.log.DEBUG?.(\"Compacting response chunk into last queue event\",t),e=r.slice(this.maxChunkContentLength)}}for(;e;){this.state.index+=1;let r={content:e.slice(0,this.maxChunkContentLength),index:this.state.index,ts:Date.now()};this.log.DEBUG?.(\"Add new event into the queue\",r),this.state.events.push(r),e=e.slice(this.maxChunkContentLength)}}tryRunWorker(){if(S.isBusy(this)){this.log.DEBUG?.(\"Skip event processing. Worker thread is busy\");return}let e=this.getEventToProcess();if(e!=null){if(\"lastChunkReceived\"in e){this.log.DEBUG?.(\"Stopping controller thread. All response content chunks were processed and no new chunks are coming\"),this.end({status:\"ok\",completion:this.state.completionResult});return}this.log.DEBUG?.(\"Notify stream worker thread about response chunk to process\",e),S.start(this,e)}}isEventReady(e){if(e==null)return!1;if(\"lastChunkReceived\"in e)return!0;if(e.content==null)return!1;let t=Date.now()-e.ts;return this.state.lastChunkReceived||t>=this.debounceDuration||e.content.length>=this.maxChunkContentLength}getEventToProcess(){let e=this.state.events[0];if(e!=null&&this.isEventReady(e))return\"lastChunkReceived\"in e||this.state.events.shift(),e}async onLastStreamChunkReceived(){this.log.DEBUG?.(\"All LLM response chunks were received. No more response chunks expected\"),this.state.events.push({lastChunkReceived:!0}),this.state.lastChunkReceived=!0,this.tryRunWorker(),await f.lastToolCallReceived(this)}get maxChunkContentLength(){return this.data.streamSettings?.maxBufferLength??100}get debounceDuration(){return this.data.streamSettings?.debounceDuration??200}};d(q,\"StreamController\"),_(q,\"class\",\"str_ctrl\");var E=q;A([p,T(\"design:type\",Function),T(\"design:paramtypes\",[]),T(\"design:returntype\",void 0)],E.prototype,\"runStep\",null);A([p,T(\"design:type\",Function),T(\"design:paramtypes\",[typeof IActionEvent>\"u\"?Object:IActionEvent]),T(\"design:returntype\",void 0)],E.prototype,\"onWorkerThreadEnd\",null);A([p,T(\"design:type\",Function),T(\"design:paramtypes\",[typeof IEvent>\"u\"?Object:IEvent]),T(\"design:returntype\",void 0)],E.prototype,\"onStreamChunk\",null);A([p,T(\"design:type\",Function),T(\"design:paramtypes\",[]),T(\"design:returntype\",void 0)],E.prototype,\"tryRunWorker\",null);A([p,T(\"design:type\",Function),T(\"design:paramtypes\",[]),T(\"design:returntype\",Promise)],E.prototype,\"onLastStreamChunkReceived\",null);var o=require(\"zod/v4-mini\"),me=require(\"zod/v4/locales\");o.z.config((0,me.en)());var L=o.z.string().check(o.z.trim(),o.z.refine(n=>![\"undefined\",\"null\"].includes(n),{error:\"Unexpected undefined or null merge-field value\"})),pe=o.z.discriminatedUnion(\"role\",[o.z.object({role:o.z.literal(\"system\"),content:L}),o.z.object({role:o.z.literal(\"user\"),content:L,name:o.z.optional(o.z.string().check(o.z.minLength(1),o.z.maxLength(64)))}),o.z.object({role:o.z.literal(\"assistant\"),content:o.z.nullable(L),tool_calls:o.z.optional(o.z.array(o.z.object({id:o.z.string().check(o.z.minLength(1)),type:o.z.literal(\"function\"),function:o.z.object({name:o.z.string().check(o.z.minLength(1)),arguments:o.z.string().check(o.z.trim(),o.z.minLength(1))})})))}),o.z.object({role:o.z.literal(\"tool\"),content:L,name:o.z.optional(o.z.string().check(o.z.minLength(1),o.z.maxLength(64))),tool_call_id:o.z.string().check(o.z.minLength(1))})]),fe=o.z.object({provider:o.z.string().check(o.z.minLength(1)),model:o.z.string().check(o.z.minLength(1)),tokenName:o.z.optional(o.z.string()).check(o.z.overwrite(n=>n===\"\"?void 0:n)),tokenNameHeader:o.z._default(o.z.string().check(o.z.minLength(1)),\"x-or-account-token-name\"),sessionIdHeader:o.z._default(o.z.string().check(o.z.minLength(1)),\"x-or-session-id\"),typeOfStep:o.z.enum([\"chat\",\"completion\"]),systemMessage:o.z.optional(L),userMessage:o.z.optional(L),switchAssistantsMessage:o.z._default(o.z.boolean(),!1),assistantsFirstMessage:o.z.optional(L),userSettings:o.z.object({temperature:o.z.promise(o.z._default(o.z.coerce.number().check(o.z.gte(0),o.z.lte(2)),1)),topP:o.z.promise(o.z.optional(o.z.coerce.number().check(o.z.gte(0),o.z.lte(1)))),maxTokens:o.z.promise(o.z.optional(o.z.coerce.number().check(o.z.int(),o.z.gte(1)))),presencePenalty:o.z.promise(o.z.optional(o.z.coerce.number().check(o.z.gte(-2),o.z.lte(2)))),frequencyPenalty:o.z.promise(o.z.optional(o.z.coerce.number().check(o.z.gte(-2),o.z.lte(2)))),stop:o.z.promise(o.z.optional(o.z.array(o.z.object({token:o.z.string().check(o.z.minLength(1),o.z.maxLength(64))})).check(o.z.maxLength(4))))}),n:o.z._default(o.z.coerce.number().check(o.z.int(),o.z.gte(1),o.z.lte(128)),1),streamResponse:o.z._default(o.z.boolean(),!1),streamSettings:o.z.optional(o.z.object({maxBufferLength:o.z.promise(o.z.coerce.number().check(o.z.int(),o.z.gte(1),o.z.lte(32768))),debounceDuration:o.z.promise(o.z.coerce.number().check(o.z.int(),o.z.gte(0),o.z.lte(1e4)))})),customHistory:o.z._default(o.z.boolean(),!1),historyRange:o.z._default(o.z.coerce.number().check(o.z.int(),o.z.gte(1),o.z.lte(10)),10),historyMode:o.z.optional(o.z.enum([\"mergefield\",\"codeHistory\"])),historyMergefield:o.z.optional(o.z.array(pe)),historyCode:o.z.optional(o.z.array(pe)),processError:o.z.boolean(),processTimeout:o.z.boolean(),timeoutDuration:o.z.string().check(o.z.trim(),o.z.minLength(1))}).check(o.z.refine(n=>!n.streamResponse||n.provider===\"openai\",{error:\"Streaming is only supported for OpenAI provider\"}),o.z.refine(n=>!n.streamResponse||n.streamSettings!==void 0,{error:'Missing \"Stream settings\" for response streaming mode'}),o.z.refine(n=>n.typeOfStep!==\"chat\"||n.customHistory||!n.switchAssistantsMessage||n.assistantsFirstMessage!==void 0,{error:`Missing \"Assistant's first message\" value`}),o.z.refine(n=>n.customHistory||n.userMessage!==void 0,{error:'Missing \"User message\" value'}),o.z.refine(n=>n.typeOfStep!==\"chat\"||!n.customHistory||n.historyMode!==void 0,{error:'Missing \"History mode\" value'}),o.z.refine(n=>n.typeOfStep!==\"chat\"||!n.customHistory||n.historyMode!==\"mergefield\"||n.historyMergefield!==void 0,{error:'Missing \"History\" data via merge-field'}),o.z.refine(n=>n.typeOfStep!==\"chat\"||!n.customHistory||n.historyMode!==\"mergefield\"||n.historyMergefield?.find?.(e=>e.role===\"user\"),{error:'Missing at least one message with role \"user\" message in \"History\" data via merge-field'}),o.z.refine(n=>n.typeOfStep!==\"chat\"||!n.customHistory||n.historyMode!==\"codeHistory\"||n.historyCode!==void 0,{error:'Missing \"History\" data as code'}),o.z.refine(n=>n.typeOfStep!==\"chat\"||!n.customHistory||n.historyMode!==\"codeHistory\"||n.historyCode?.find?.(e=>e.role===\"user\"),{error:'Missing at least one message with role \"user\" message in \"History\" data via code'}));var ye=w(require(\"openai\")),_e=w(require(\"timestring\")),M=require(\"zod/v4-mini\"),Te=require(\"typescript-memoize\"),Ee=w(require(\"@onereach/flow-sdk/services/basic\"));function De(n,e,t,r){var l=arguments.length,s=l<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,a;if(typeof Reflect==\"object\"&&typeof Reflect.decorate==\"function\")s=Reflect.decorate(n,e,t,r);else for(var c=n.length-1;c>=0;c--)(a=n[c])&&(s=(l<3?a(s):l>3?a(e,t,s):a(e,t))||s);return l>3&&s&&Object.defineProperty(e,t,s),s}d(De,\"_ts_decorate\");function ge(n,e){if(typeof Reflect==\"object\"&&typeof Reflect.metadata==\"function\")return Reflect.metadata(n,e)}d(ge,\"_ts_metadata\");var X=class X extends Ee.default{constructor(t,r){super(t);_(this,\"data\");this.data=r,this.log.DEBUG?.(\"OpenAIRequestService initialized\")}async makeOpenAiRequest(t){let{model:r,userSettings:{temperature:l,topP:s,maxTokens:a,frequencyPenalty:c,presencePenalty:y},n:R,streamResponse:m}=this.data,D={messages:structuredClone(t),model:r,temperature:l,top_p:s,max_tokens:a,frequency_penalty:c,presence_penalty:y,stop:this.stopSequences,n:R};this.log.DEBUG?.(\"LLM request\",D);let te=await this.openAiClient.chat.completions.create(D,{stream:m});return m||this.log.DEBUG?.(\"LLM response\",te),te}get openAiClient(){let{provider:t,tokenName:r,tokenNameHeader:l,sessionIdHeader:s}=this.data,a={baseURL:`${this.config.env.OPENAI_API_URL}/${t}`,apiKey:\"\",defaultHeaders:{Authorization:this.config.authorization,[s]:this.session.get([\"reporting\",\"sessionId\"]),...r?{[l]:r}:null},timeout:this.timeoutMs};return this.log.DEBUG?.(\"OpenAI client options\",a),new ye.default(a)}get stopSequences(){return(this.data.userSettings.stop??[]).map(r=>r.token).filter(r=>r.length>0)}get timeoutMs(){let t=(0,_e.default)(this.data.timeoutDuration,\"ms\");return M.z.number().check(M.z.int(),M.z.gte(1e3),M.z.lte(6e5)).parse(t)}};d(X,\"OpenAIRequestService\");var x=X;De([(0,Te.Memoize)(),ge(\"design:type\",Number),ge(\"design:paramtypes\",[])],x.prototype,\"timeoutMs\",null);var ve=require(\"typescript-memoize\");var Re=require(\"fs/promises\");async function we(n){if(typeof n!=\"string\"||!n.match(/^\\d+\\.\\d+\\.\\d+$/))throw new Error(`Invalid minimum version format: ${n}`);let e=require.resolve(\"@onereach/flow-sdk/package.json\");if(!e)throw new Error(\"Could not find package.json for @onereach/flow-sdk\");let t=await(0,Re.readFile)(e,\"utf-8\"),{version:r}=JSON.parse(t),{groups:l}=r.match(/^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)/)||{};if(!l)throw new Error(`Invalid Flow SDK version format: ${r}`);let s=parseInt(l.major,10),a=parseInt(l.minor,10),c=parseInt(l.patch,10),[y,R,m]=n.split(\".\").map(D=>parseInt(D,10));if(s<y||s===y&&a<R||s===y&&a===R&&c<m)throw new Error(`Flow SDK version '${r}' is lower than required minimum version '${n}' for the step`)}d(we,\"validateFlowSdkVersion\");var Y=require(\"@onereach/flow-sdk/types\");function j(n,e,t,r){var l=arguments.length,s=l<3?e:r===null?r=Object.getOwnPropertyDescriptor(e,t):r,a;if(typeof Reflect==\"object\"&&typeof Reflect.decorate==\"function\")s=Reflect.decorate(n,e,t,r);else for(var c=n.length-1;c>=0;c--)(a=n[c])&&(s=(l<3?a(s):l>3?a(e,t,s):a(e,t))||s);return l>3&&s&&Object.defineProperty(e,t,s),s}d(j,\"_ts_decorate\");function g(n,e){if(typeof Reflect==\"object\"&&typeof Reflect.metadata==\"function\")return Reflect.metadata(n,e)}d(g,\"_ts_metadata\");var Ne=\"8.0.15\",ee=class ee extends ke.default{async resolveDataIn(){let e=await super.resolveDataIn();return this.log.DEBUG?.(\"data in before validation\",e),await fe.parseAsync(e)}runStep(){let{streamResponse:e}=this.data;e&&this.triggers.hook({name:Y.ACTION.end,thread:E.getThreadId(this)},this.onStreamControllerThreadEnd),this.triggers.hook({name:Y.ACTION.end,thread:f.getThreadId(this)},this.onToolsControllerEnd),this.triggers.otherwise(this.initRequest)}async initRequest(){await we(Ne),this.state.contentReady=!1,this.state.toolsReady=!1,this.state.chatCompletion=void 0,this.state.toolsResults=[];let{streamResponse:e}=this.data;await Promise.all([f.start(this),e?E.start(this):void 0,k.start(this)]);let t=await this.openAiService.makeOpenAiRequest(this.history);e?await this.handleStreamResponse(t):await this.handleResponse(t)}async handleResponse(e){this.state.chatCompletion=e,this.state.contentReady=!0,e.choices.length>1&&this.log.WARN?.(\"Multiple choices received from LLM, but only the first one will be processed\",{choicesNumber:e.choices.length});let r=e.choices[0]?.message.tool_calls??[];for(let l of r)await f.callTool(this,l);await f.lastToolCallReceived(this)}async handleStreamResponse(e){this.log.DEBUG?.(\"Start processing stream of chunks from LLM\");for await(let t of e)await E.handleChunk(this,t);await E.lastChunkReceived(this)}async onToolsControllerEnd(e){let{result:t}=e.params;if(this.log.DEBUG?.(\"Tools controller ended with messages\",t),t instanceof Error)throw new h(\"Tools controller thread ended with an error\",t,{code:u.STEP_LOGIC_ISSUE});let{status:r,messages:l}=t??{};if(r!==\"ok\"||!Array.isArray(l))throw new h(\"Unexpected end of the tools controller thread\",{code:u.STEP_LOGIC_ISSUE,data:e.params.result});this.state.toolsResults=l,this.state.toolsReady=!0,await this.tryToExitStep()}async onStreamControllerThreadEnd(e){let{result:t}=e.params;if(this.log.DEBUG?.(\"Stream controller ended with result\",t),t instanceof Error)throw new h(\"Stream controller thread ended with an error\",t,{code:u.STEP_LOGIC_ISSUE});let{status:r,completion:l}=t??{};if(r!==\"ok\"||l==null)throw new h(\"Unexpected end of the stream controller thread\",{code:u.STEP_LOGIC_ISSUE,data:e.params.result});this.log.DEBUG?.(\"Create Chat Completion result\",l),this.state.contentReady=!0,this.state.chatCompletion=l,await this.tryToExitStep()}async tryToExitStep(){let{toolsReady:e,contentReady:t,chatCompletion:r,toolsResults:l}=this.state;if(!e||!t)return;if(r==null)throw new h(\"Missing chat completion result, but request is marked as processed\",{code:u.STEP_LOGIC_ISSUE});let s=r.choices?.[0]?.message;if(s==null)throw new h(\"Missing completion message in chat completion result\",{code:u.STEP_LOGIC_ISSUE});if(await k.appendToHistory(this,[s,...l]),r?.choices?.[0]?.finish_reason===\"tool_calls\"){this.thread.jumpTo(this.currentStepId);return}if(r==null)throw new h(\"Missing chat completion result, but request is marked as processed\",{code:u.STEP_LOGIC_ISSUE});this.log.DEBUG?.(\"Exiting step with collected data\",r),this.exitStep(\"next\",{...r,_history:this.history})}get history(){return k.getHistory(this)}get openAiService(){return new x(this.thread,this.data)}};d(ee,\"CreateChatCompletionStep\");var I=ee;j([p,g(\"design:type\",Function),g(\"design:paramtypes\",[]),g(\"design:returntype\",Promise)],I.prototype,\"resolveDataIn\",null);j([p,g(\"design:type\",Function),g(\"design:paramtypes\",[]),g(\"design:returntype\",void 0)],I.prototype,\"runStep\",null);j([p,g(\"design:type\",Function),g(\"design:paramtypes\",[]),g(\"design:returntype\",Promise)],I.prototype,\"initRequest\",null);j([p,g(\"design:type\",Function),g(\"design:paramtypes\",[typeof IActionEvent>\"u\"?Object:IActionEvent]),g(\"design:returntype\",Promise)],I.prototype,\"onToolsControllerEnd\",null);j([p,g(\"design:type\",Function),g(\"design:paramtypes\",[typeof IActionEvent>\"u\"?Object:IActionEvent]),g(\"design:returntype\",Promise)],I.prototype,\"onStreamControllerThreadEnd\",null);j([(0,ve.Memoize)(),g(\"design:type\",typeof x>\"u\"?Object:x),g(\"design:paramtypes\",[])],I.prototype,\"openAiService\",null);(0,Se.install)();var Pe=I,Ge={[k.class]:k,[f.class]:f,[C.class]:C,[E.class]:E,[S.class]:S};0&&(module.exports={states,step});\n","import { install } from 'source-map-support';\nimport { CreateChatCompletionStep } from './step';\nimport { HistoryController } from './layers/history/controller';\nimport { StreamController } from './layers/stream_handler/controller';\nimport { StreamWorker } from './layers/stream_handler/worker';\nimport { ToolsController } from './layers/tools_caller/controller';\nimport { ToolsWorker } from './layers/tools_caller/worker';\n\n// enable source map support for better error stack traces\ninstall();\n\nconst step = CreateChatCompletionStep;\nconst states = {\n [HistoryController.class]: HistoryController,\n [ToolsController.class]: ToolsController,\n [ToolsWorker.class]: ToolsWorker,\n [StreamController.class]: StreamController,\n [StreamWorker.class]: StreamWorker,\n};\n\nexport { step, states };\n","/* eslint-disable @typescript-eslint/unbound-method */\n\nimport Step from '@onereach/flow-sdk/step';\nimport { HistoryController } from './layers/history/controller';\nimport { StreamController, StreamControllerConfig } from './layers/stream_handler/controller';\nimport { ToolsController, ToolsControllerConfig } from './layers/tools_caller/controller';\nimport { ErrorFilter } from './decorators/error_filter';\nimport { CreateChatCompletionStepError, ErrorCode } from './errors/step_error';\nimport { type DataIn, dataInSchema } from './schemas/data_in';\nimport { OpenAIRequestService } from './services/openai_request';\nimport { Memoize } from 'typescript-memoize';\nimport { validateFlowSdkVersion } from './utils/validate_flow_sdk_version';\nimport { ACTION } from '@onereach/flow-sdk/types';\n\nimport type {\n ChatCompletion,\n ChatCompletionChunk,\n ChatCompletionMessageParam,\n ChatCompletionToolMessageParam,\n} from 'openai/resources';\nimport type { CONFIG, IActionEvent } from '@onereach/flow-sdk/types';\nimport type { Stream } from 'openai/core/streaming.js';\n\nconst MINIMAL_FLOW_SDK_VERSION = '8.0.15';\n\nexport class CreateChatCompletionStep<TResult> extends Step<ChatCompletionConfig> {\n @ErrorFilter\n public async resolveDataIn() {\n const dataIn = await super.resolveDataIn();\n\n // validate dataIn against schema\n this.log.DEBUG?.('data in before validation', dataIn);\n return await dataInSchema.parseAsync(dataIn);\n }\n\n @ErrorFilter\n public runStep(): void {\n const { streamResponse } = this.data;\n\n if (streamResponse) {\n this.triggers.hook<StreamControllerConfig, ACTION.end>(\n { name: ACTION.end, thread: StreamController.getThreadId(this) },\n this.onStreamControllerThreadEnd,\n );\n }\n this.triggers.hook<ToolsControllerConfig<TResult>, ACTION.end>(\n { name: ACTION.end, thread: ToolsController.getThreadId(this) },\n this.onToolsControllerEnd,\n );\n this.triggers.otherwise(this.initRequest);\n }\n\n @ErrorFilter\n public async initRequest(): Promise<void> {\n await validateFlowSdkVersion(MINIMAL_FLOW_SDK_VERSION);\n\n // reset the state\n this.state.contentReady = false;\n this.state.toolsReady = false;\n this.state.chatCompletion = undefined;\n this.state.toolsResults = [];\n\n const { streamResponse } = this.data;\n\n await Promise.all([\n ToolsController.start(this),\n streamResponse ? StreamController.start(this) : undefined,\n HistoryController.start(this),\n ]);\n\n const response = await this.openAiService.makeOpenAiRequest(this.history);\n if (streamResponse) {\n await this.handleStreamResponse(response as Stream<ChatCompletionChunk>);\n } else {\n await this.handleResponse(response as ChatCompletion);\n }\n }\n\n private async handleResponse(response: ChatCompletion): Promise<void> {\n // set result to state\n this.state.chatCompletion = response;\n this.state.contentReady = true;\n\n // TODO: handle multiple choices\n if (response.choices.length > 1) {\n this.log.WARN?.('Multiple choices received from LLM, but only the first one will be processed', {\n choicesNumber: response.choices.length,\n });\n }\n\n const choice = response.choices[0];\n\n // Process tool calls if any\n const toolCalls = choice?.message.tool_calls ?? [];\n for (const toolCall of toolCalls) {\n await ToolsController.callTool(this, toolCall);\n }\n\n // notify ToolsController no more tool calls will be made\n await ToolsController.lastToolCallReceived(this);\n }\n\n private async handleStreamResponse(response: Stream<ChatCompletionChunk>): Promise<void> {\n this.log.DEBUG?.('Start processing stream of chunks from LLM');\n for await (const chunk of response) {\n // send each chunk to the controller thread for processing\n await StreamController.handleChunk(this, chunk);\n }\n\n // send last chunk to the controller thread to mark the end of the stream\n await StreamController.lastChunkReceived(this);\n }\n\n @ErrorFilter\n public async onToolsControllerEnd(event: IActionEvent<ToolsControllerConfig<TResult>, ACTION.end>): Promise<void> {\n const { result } = event.params;\n\n this.log.DEBUG?.('Tools controller ended with messages', result);\n\n if (result instanceof Error) {\n throw new CreateChatCompletionStepError('Tools controller thread ended with an error', result, {\n code: ErrorCode.STEP_LOGIC_ISSUE,\n });\n }\n\n const { status, messages } = result ?? {};\n\n if (status !== 'ok' || !Array.isArray(messages)) {\n throw new CreateChatCompletionStepError('Unexpected end of the tools controller thread', {\n code: ErrorCode.STEP_LOGIC_ISSUE,\n data: event.params.result,\n });\n }\n\n this.state.toolsResults = messages;\n this.state.toolsReady = true;\n\n await this.tryToExitStep();\n }\n\n @ErrorFilter\n public async onStreamControllerThreadEnd(event: IActionEvent<StreamControllerConfig, ACTION.end>): Promise<void> {\n const { result } = event.params;\n this.log.DEBUG?.('Stream controller ended with result', result);\n\n if (result instanceof Error) {\n throw new CreateChatCompletionStepError('Stream controller thread ended with an error', result, {\n code: ErrorCode.STEP_LOGIC_ISSUE,\n });\n }\n\n // TODO: figure out better way to check for correct structure of the event (zod?)\n const { status, completion } = result ?? {};\n\n if (status !== 'ok' || completion == null) {\n throw new CreateChatCompletionStepError('Unexpected end of the stream controller thread', {\n code: ErrorCode.STEP_LOGIC_ISSUE,\n data: event.params.result,\n });\n }\n\n this.log.DEBUG?.('Create Chat Completion result', completion);\n\n this.state.contentReady = true;\n this.state.chatCompletion = completion;\n\n await this.tryToExitStep();\n }\n\n private async tryToExitStep(): Promise<void> {\n const { toolsReady, contentReady, chatCompletion, toolsResults } = this.state;\n if (!toolsReady || !contentReady) return;\n\n if (chatCompletion == null) {\n throw new CreateChatCompletionStepError('Missing chat completion result, but request is marked as processed', {\n code: ErrorCode.STEP_LOGIC_ISSUE,\n });\n }\n\n const completionMessage = chatCompletion.choices?.[0]?.message;\n if (completionMessage == null) {\n throw new CreateChatCompletionStepError('Missing completion message in chat completion result', {\n code: ErrorCode.STEP_LOGIC_ISSUE,\n });\n }\n\n // add completion message and possible tool results to history\n await HistoryController.appendToHistory(this, [completionMessage, ...toolsResults]);\n\n if (chatCompletion?.choices?.[0]?.finish_reason === 'tool_calls') {\n // reset the step and run request again\n this.thread.jumpTo(this.currentStepId);\n return;\n }\n\n if (chatCompletion == null) {\n throw new CreateChatCompletionStepError('Missing chat completion result, but request is marked as processed', {\n code: ErrorCode.STEP_LOGIC_ISSUE,\n });\n }\n\n // both tools and content are ready, we can exit the step\n this.log.DEBUG?.('Exiting step with collected data', chatCompletion);\n this.exitStep('next', { ...chatCompletion, _history: this.history });\n }\n\n private get history(): ChatCompletionMessageParam[] {\n return HistoryController.getHistory(this);\n }\n\n @Memoize()\n private get openAiService(): OpenAIRequestService<ChatCompletionConfig> {\n return new OpenAIRequestService(this.thread, this.data);\n }\n}\n\nexport type ChatCompletionOut = ChatCompletion & {\n _history: ChatCompletionMessageParam[];\n};\n\nexport type ChatCompletionState = {\n toolsReady: boolean;\n contentReady: boolean;\n chatCompletion?: ChatCompletion;\n toolsResults: ChatCompletionToolMessageParam[];\n};\n\nexport interface ChatCompletionConfig extends CONFIG {\n dataIn: DataIn;\n dataOut: ChatCompletionOut;\n state: ChatCompletionState;\n}\n","/* eslint-disable @typescript-eslint/unbound-method */\n\nimport Step from '@onereach/flow-sdk/step';\nimport { ErrorFilter } from '../../decorators/error_filter';\nimport { CreateChatCompletionStepError, ErrorCode } from '../../errors/step_error';\n\nimport type { CONFIG, IThreadId, IEvent } from '@onereach/flow-sdk/types';\nimport type { ChatCompletionMessageParam } from 'openai/resources';\nimport type { DataIn } from '../../schemas/data_in';\nimport type { ChatCompletionConfig } from '../../step';\n\nexport class HistoryController extends Step<HistoryControllerConfig> {\n public static readonly class = 'hst_ctrl';\n\n public static async start(step: Step<ChatCompletionConfig>): Promise<void> {\n const threadId = this.getThreadId(step);\n const thread = step.process.getThread<HistoryControllerConfig>(threadId);\n\n if (thread != null) return; // thread already exists\n\n // create tools controller thread\n await step.thread.runThread<HistoryControllerConfig>({\n id: threadId,\n background: true,\n state: {\n step: step.id,\n class: this.class,\n\n messages: [], // messages to send to OpenAI API\n },\n });\n }\n\n public static async appendToHistory(\n step: Step,\n message: ChatCompletionMessageParam | ChatCompletionMessageParam[],\n ): Promise<void> {\n await step.process.enqueueAndRun<EventName.appendToHistory, HistoryControllerAppendParams>({\n thread: this.getThreadId(step),\n name: EventName.appendToHistory,\n params: { message },\n });\n }\n\n public static getHistory(step: Step): ChatCompletionMessageParam[] {\n return step.process.getSafeThread<HistoryControllerConfig>(this.getThreadId(step)).state.messages;\n }\n\n public static getThreadId(step: Step): IThreadId {\n return `llm_cmp_${this.class}_${step.id}`;\n }\n\n // ---------------------------------------\n\n @ErrorFilter\n public runStep(): void {\n this.triggers.local(EventName.appendToHistory, this.onAppendToHistory).otherwise(this.initialize);\n }\n\n @ErrorFilter\n public initialize(): void {\n this.log.DEBUG?.('Initializing history controller thread');\n\n if (this.state.messages.length === 0) {\n this.state.messages = this.initialMessages;\n }\n }\n\n @ErrorFilter\n public onAppendToHistory(event: IEvent<HistoryControllerAppendParams, EventName.appendToHistory>): void {\n this.log.DEBUG?.('Appending message to history', event.params);\n\n const { message } = event.params;\n const messages = Array.isArray(message) ? message : [message];\n this.appendToManagedHistory(messages);\n }\n\n /**\n * Adds a message to the managed history of this step\n */\n protected appendToManagedHistory(messages: ChatCompletionMessageParam[]): void {\n if (this.data.customHistory) {\n throw new CreateChatCompletionStepError('Managed history is not available in custom history mode', {\n code: ErrorCode.VALIDATION,\n });\n }\n\n this.state.messages.push(...messages);\n }\n\n /**\n * Returns the messages to be sent to the OpenAI API.\n */\n protected get initialMessages(): ChatCompletionMessageParam[] {\n const {\n typeOfStep,\n customHistory,\n historyMode,\n historyMergefield,\n historyCode,\n historyRange,\n systemMessage,\n userMessage,\n assistantsFirstMessage,\n } = this.data;\n\n // text completion mode\n if (typeOfStep === 'completion') {\n return [\n {\n role: 'user',\n content: userMessage!, // never would be undefined due to validation against schema\n },\n ];\n }\n\n // chat completion mode\n let messages: ChatCompletionMessageParam[] = [];\n\n if (customHistory) {\n // custom history\n messages = historyMode === 'mergefield' ? historyMergefield! : historyCode!;\n\n // trim history length\n messages = messages.slice(-1 * historyRange);\n } else {\n // not custom history (use step managed history)\n messages = this.state.messages;\n\n // is a fresh conversation?\n if (messages.length === 0 && assistantsFirstMessage != null && assistantsFirstMessage.length > 0) {\n messages.push({\n role: 'assistant',\n content: assistantsFirstMessage,\n });\n }\n\n messages.push({\n role: 'user',\n content: userMessage!, // never would be undefined due to validation against schema\n // TODO: add support for optional user name\n // name: userName,\n });\n\n // trim history length\n messages = messages.slice(-1 * historyRange);\n\n this.state.messages = messages; // store managed history\n }\n\n if (systemMessage != null && systemMessage.length > 0) {\n messages.unshift({\n role: 'system',\n content: systemMessage,\n });\n }\n\n return messages;\n }\n}\n\n// ----------------- TYPES -----------------\n\nexport enum EventName {\n appendToHistory = 'hst_append',\n}\n\nexport type HistoryControllerAppendParams = {\n message: ChatCompletionMessageParam | ChatCompletionMessageParam[];\n};\n\nexport type HistoryControllerEvents = IEvent<HistoryControllerAppendParams, EventName.appendToHistory>;\n\nexport type HistoryControllerState = {\n class: typeof HistoryController.class;\n\n messages: ChatCompletionMessageParam[]; // messages to send to OpenAI API\n};\n\nexport interface HistoryControllerConfig extends CONFIG {\n dataIn: DataIn;\n state: HistoryControllerState;\n events: HistoryControllerEvents;\n}\n","import TimeoutError from '@onereach/flow-sdk/errors/timeout';\nimport { z } from 'zod/v4-mini';\n\nimport { CreateChatCompletionStepError, ErrorCode } from './step_error.js';\n\nexport function errorFilter(error: unknown): CreateChatCompletionStepError | TimeoutError {\n // if error is CreateChatCompletionStepError or TimeoutError, return it directly\n if (error instanceof CreateChatCompletionStepError || error instanceof TimeoutError) {\n return error;\n }\n\n // validation errors\n if (error instanceof z.core.$ZodError) {\n return new CreateChatCompletionStepError(z.prettifyError(error), error, {\n code: ErrorCode.VALIDATION,\n });\n }\n\n if (error instanceof Error) {\n // timeout errors\n if (error.message.includes('Request timed out')) {\n return new TimeoutError('Timeout', error, { code: ErrorCode.TIMEOUT });\n }\n\n // authentication errors\n if (error.message.includes('API key is required')) {\n // TODO: add logic for handling using custom 'no auth' exit here?\n return new CreateChatCompletionStepError('API key is required', error, {\n code: ErrorCode.AUTH,\n });\n }\n\n // TODO: fix interpreting of this kind of errors\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any\n const responseErrorMessage: string | undefined =\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-explicit-any\n (error as unknown as any)?.response?.data?.error?.message;\n if (responseErrorMessage != null) {\n return new CreateChatCompletionStepError(responseErrorMessage, error, {\n code: ErrorCode.SERVER_ERROR,\n });\n }\n }\n\n // if error is a string assume it's an error message\n if (typeof error === 'string') {\n return new CreateChatCompletionStepError(error, {\n code: ErrorCode.UNKNOWN,\n });\n }\n\n if (error instanceof Error) {\n return new CreateChatCompletionStepError('Unknown error', error, {\n code: ErrorCode.UNKNOWN,\n });\n }\n\n // catch all for unknown errors\n return new CreateChatCompletionStepError('Unknown error', {\n code: ErrorCode.UNKNOWN,\n data: error,\n });\n}\n","import BaseError from '@onereach/flow-sdk/errors/base';\n\nexport enum ErrorCode {\n UNKNOWN = 'UNKNOWN',\n STEP_LOGIC_ISSUE = 'STEP_LOGIC_ISSUE',\n AUTH = 'AUTH',\n TIMEOUT = 'TIMEOUT',\n VALIDATION = 'VALIDATION',\n INVALID_REQUEST = 'INVALID_REQUEST',\n RATE_LIMITED = 'RATE_LIMITED',\n LLM_FINISH_LENGTH = 'LLM_FINISH_LENGTH',\n SERVER_ERROR = 'SERVER_ERROR',\n UNSUPPORTED = 'UNSUPPORTED',\n}\n\nexport class CreateChatCompletionStepError extends BaseError<{\n code: ErrorCode;\n data?: unknown;\n}> {}\n","import { errorFilter } from '../errors/error_filter';\nimport Step from '@onereach/flow-sdk/step';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function ErrorFilter<T extends (...args: any[]) => unknown>(\n _target: object,\n propertyKey: string | symbol,\n descriptor: TypedPropertyDescriptor<T>,\n): TypedPropertyDescriptor<T> | void {\n const originalMethod = descriptor.value;\n\n if (!originalMethod || typeof originalMethod !== 'function') return;\n\n const wrappedMethod = function (this: Step, ...args: Parameters<T>): ReturnType<T> {\n try {\n const result = originalMethod.apply(this, args) as ReturnType<T>;\n\n if (result instanceof Promise) {\n return result.catch((error: unknown) => {\n const methodName = propertyKey.toString();\n this.log.DEBUG?.(`Error in method '${methodName}'`, error);\n throw errorFilter(error);\n }) as ReturnType<T>;\n }\n\n return result;\n } catch (error) {\n const methodName = propertyKey.toString();\n this.log.DEBUG?.(`Error in method '${methodName}'`, error);\n throw errorFilter(error);\n }\n };\n\n if (originalMethod?.name != null) {\n Object.defineProperty(wrappedMethod, 'name', {\n value: originalMethod.name,\n });\n }\n descriptor.value = wrappedMethod as T;\n\n return descriptor;\n}\n","/* eslint-disable @typescript-eslint/unbound-method */\n\nimport Step from '@onereach/flow-sdk/step';\nimport { StreamWorker, StreamWorkerConfig } from './worker';\nimport { ErrorFilter } from '../../decorators/error_filter';\nimport { ToolsController } from '../tools_caller/controller';\nimport { CreateChatCompletionStepError, ErrorCode } from '../../errors/step_error';\nimport { streamChunkEventSchema } from './schemas/stream_chunk';\nimport { StreamReducerService } from './services/stream_reducer';\nimport { runThread } from '../../utils/run_thread';\nimport { ACTION } from '@onereach/flow-sdk/types';\n\nimport type { CONFIG, IThreadId, IEvent, IActionEvent } from '@onereach/flow-sdk/types';\nimport type { ChatCompletion, ChatCompletionChunk, ChatCompletionMessageToolCall } from 'openai/resources';\nimport type { DataIn } from '../../schemas/data_in';\nimport type { ChatCompletionConfig } from '../../step';\n\nexport class StreamController extends Step<StreamControllerConfig> {\n public static readonly class = 'str_ctrl';\n\n public static async start(step: Step<ChatCompletionConfig>): Promise<void> {\n await runThread<StreamControllerConfig>(step, {\n id: this.getThreadId(step),\n state: {\n step: step.id,\n class: this.class,\n\n completionResult: {}, // aggregated result of the LLM response\n\n events: [], // queue of response chunks\n lastChunkReceived: false,\n index: -1, // last index for a chunk\n skipIndexWarning: false, // skip warning about multiple choices\n },\n });\n }\n\n public static async handleChunk(step: Step<ChatCompletionConfig>, chunk: ChatCompletionChunk): Promise<void> {\n await step.process.enqueueAndRun({\n thread: this.getThreadId(step),\n name: EventName.handleChunk,\n params: { chunk },\n });\n }\n\n public static async lastChunkReceived(step: Step<ChatCompletionConfig>): Promise<void> {\n await step.process.enqueueAndRun({\n thread: this.getThreadId(step),\n name: EventName.lastStreamChunkReceived,\n });\n }\n\n public static getThreadId(step: Step): IThreadId {\n return `llm_cmp_${this.class}_${step.id}`;\n }\n\n // ---------------------------------------\n\n @ErrorFilter\n public runStep(): void {\n this.triggers\n .hook<StreamWorkerConfig, ACTION.end>(\n { name: ACTION.end, thread: StreamWorker.getThreadId(this) },\n this.onWorkerThreadEnd,\n )\n .local(EventName.handleChunk, this.onStreamChunk)\n .local(EventName.lastStreamChunkReceived, this.onLastStreamChunkReceived)\n .otherwise(() => {\n this.log.DEBUG?.('Initializing stream controller thread');\n });\n }\n\n /**\n * Handler of the worker thread end event.\n */\n @ErrorFilter\n public onWorkerThreadEnd(event: IActionEvent<StreamWorkerConfig, ACTION.end>): void {\n // TODO: check if end was due to error or normal end in event.params\n this.log.DEBUG?.('Stream worker thread finished processing chunk', event.params.result);\n\n // check if there are more tool calls or content chunks to process\n this.tryRunWorker();\n }\n\n /**\n * Handles a single chunk of the streaming response from the OpenAI API.\n */\n @ErrorFilter\n public onStreamChunk(event: IEvent<StreamChunkParams, EventName.handleChunk>): void {\n const parsedEvent = streamChunkEventSchema.parse(event);\n const chunk = parsedEvent.params.chunk satisfies ChatCompletionChunk;\n\n const streamReducer = new StreamReducerService(this.state.completionResult, this.onToolCall.bind(this));\n streamReducer.reduceChunk(chunk);\n\n for (const chunkChoice of chunk.choices) {\n this.log.DEBUG?.('LLM stream response chunk', chunkChoice);\n\n if (chunkChoice.index > 0) {\n // TODO: figure out how to handle all choices not just first one\n // maybe more than 1 chunk exit?\n // skip streaming additional choices (if n > 1)\n this.handleMultipleChoices(chunkChoice);\n continue;\n }\n\n // aggregate content\n const content = chunkChoice.delta?.content;\n if (content != null && content.length > 0) {\n this.addContentToQueue(content);\n this.scheduleNextContentEvent();\n }\n\n this.handleLengthFinishReason(chunkChoice);\n }\n }\n\n protected handleMultipleChoices(choice: ChatCompletionChunk.Choice): void {\n if (this.state.skipIndexWarning) return;\n\n this.log.WARN?.('Multiple choices received from LLM, but only the first one will be processed', {\n choiceIndex: choice.index,\n });\n this.state.skipIndexWarning = true;\n }\n\n protected handleLengthFinishReason(choice: ChatCompletionChunk.Choice): void {\n // TODO: move logic of handling 'length' out of stream mixin\n if (choice.finish_reason === 'length') {\n // TODO: allow to proceed with partial data?\n throw new CreateChatCompletionStepError('Reached limit of tokens for LLM completion response', {\n code: ErrorCode.LLM_FINISH_LENGTH,\n });\n }\n }\n\n protected onToolCall(toolCall: ChatCompletionMessageToolCall): void {\n this.log.DEBUG?.('Tool call received', toolCall);\n void ToolsController.callTool(this, toolCall);\n }\n\n /**\n * Tries to flush the queue of response chunks to the controller thread.\n * If the first event in the queue is not full, it waits for a debounce duration before flushing.\n * If the first event is full, it flushes it immediately.\n */\n private scheduleNextContentEvent(): void {\n const firstEvent = this.state.events[0];\n\n if (firstEvent == null || !this.isEventReady(firstEvent) || 'lastChunkReceived' in firstEvent) return;\n\n this.tryRunWorker();\n }\n\n /**\n * Compacts the content into the controller thread's events queue.\n * If the content is too long, it splits it into multiple events.\n * If the last event is not full, it extends it with the new content.\n */\n private addContentToQueue(content: string): void {\n // extend content chunk in the last event to max event size\n const lastEvent: ContentEvent | undefined = this.state.events.at(-1);\n\n if (lastEvent != null) {\n if ('lastChunkReceived' in lastEvent) {\n this.log.WARN?.('A new chunk received after the `lastChunkReceived` event. Ignoring it.');\n return;\n }\n\n if (lastEvent.content.length < this.maxChunkContentLength) {\n const mergedChunk = `${lastEvent.content}${content}`;\n // TODO: might be an issue with streaming to TTS\n lastEvent.content = mergedChunk.slice(0, this.maxChunkContentLength);\n this.log.DEBUG?.('Compacting response chunk into last queue event', lastEvent);\n\n content = mergedChunk.slice(this.maxChunkContentLength);\n }\n }\n\n // split chunk into max socket size events\n while (content) {\n this.state.index += 1;\n\n const event: ContentChunkEvent = {\n // TODO: might be an issue with streaming to TTS\n content: content.slice(0, this.maxChunkContentLength),\n index: this.state.index,\n ts: Date.now(),\n };\n this.log.DEBUG?.('Add new event into the queue', event);\n this.state.events.push(event);\n\n content = content.slice(this.maxChunkContentLength);\n }\n }\n\n /**\n * Processes the next event in the controller thread's queue.\n * If the worker thread is busy, it skips processing.\n * If the event is the termination marker, it notifies the end of the controller thread.\n * If the event is ready for processing, it starts the worker thread to handle it.\n */\n @ErrorFilter\n public tryRunWorker(): void {\n // skip if worker thread is busy\n if (StreamWorker.isBusy(this)) {\n this.log.DEBUG?.('Skip event processing. Worker thread is busy');\n return;\n }\n\n const event: ContentEvent | undefined = this.getEventToProcess();\n\n if (event == null) return;\n\n if ('lastChunkReceived' in event) {\n // if last chunk received, stop stream controller thread with aggregated response\n this.log.DEBUG?.(\n 'Stopping controller thread. All response content chunks were processed and no new chunks are coming',\n );\n this.end({\n status: 'ok',\n completion: this.state.completionResult as ChatCompletion, // TODO: maybe validate that completionResult is correct?\n });\n return;\n }\n\n this.log.DEBUG?.('Notify stream worker thread about response chunk to process', event);\n\n void StreamWorker.start(this, event);\n }\n\n private isEventReady(event: ContentEvent): boolean {\n if (event == null) return false;\n if ('lastChunkReceived' in event) return true;\n if (event.content == null) return false; // TODO: is it even possible? add test for this use-case\n\n const eventDelay = Date.now() - event.ts;\n return (\n this.state.lastChunkReceived ||\n eventDelay >= this.debounceDuration ||\n event.content.length >= this.maxChunkContentLength\n );\n }\n\n private getEventToProcess(): ContentEvent | undefined {\n const firstEvent = this.state.events[0];\n\n if (firstEvent == null) return undefined;\n if (!this.isEventReady(firstEvent)) return undefined;\n if ('lastChunkReceived' in firstEvent) return firstEvent;\n\n this.state.events.shift();\n return firstEvent;\n }\n\n /**\n * Handles the notification that all response chunks were received from the OpenAI API.\n */\n @ErrorFilter\n public async onLastStreamChunkReceived(): Promise<void> {\n this.log.DEBUG?.('All LLM response chunks were received. No more response chunks expected');\n\n // add fake event as marker for end of stream\n this.state.events.push({ lastChunkReceived: true });\n\n // mark last chunk was received in stream controller thread state\n this.state.lastChunkReceived = true;\n\n // force processing of the top chunk in the content queue\n this.tryRunWorker();\n\n // notify tools controller thread that no more tool calls are expected\n // set immediate to make sure last tool call callback is called\n await ToolsController.lastToolCallReceived(this);\n }\n\n protected get maxChunkContentLength(): number {\n return this.data.streamSettings?.maxBufferLength ?? 100;\n }\n\n protected get debounceDuration(): number {\n return this.data.streamSettings?.debounceDuration ?? 200;\n }\n}\n\nexport enum EventName {\n handleChunk = 'add_chunk',\n lastStreamChunkReceived = 'llm_rsp_end',\n}\n\nexport type ContentChunkEvent = {\n content: string;\n index: number;\n ts: number;\n};\nexport type ContentEndEvent = {\n // marker for end of content stream\n lastChunkReceived: true;\n};\nexport type ContentEvent = ContentChunkEvent | ContentEndEvent;\n\nexport type StreamChunkParams = { chunk: ChatCompletionChunk };\n\nexport type StreamControllerEvents = IEvent<StreamChunkParams, 'add_chunk'> | IEvent<unknown, 'llm_rsp_end'>;\n\nexport type StreamControllerState = {\n class: typeof StreamController.class;\n\n completionResult: Partial<ChatCompletion>;\n events: ContentEvent[];\n index: number;\n lastChunkReceived: boolean; // marker for end of response stream\n debounceId?: NodeJS.Timeout;\n skipIndexWarning: boolean;\n};\n\nexport type StreamControllerResult = {\n status: 'ok';\n completion: ChatCompletion;\n};\n\nexport interface StreamControllerConfig extends CONFIG {\n dataIn: DataIn;\n state: StreamControllerState;\n result: StreamControllerResult;\n events: StreamControllerEvents;\n}\n","import Step from '@onereach/flow-sdk/step';\nimport { ErrorFilter } from '../../decorators/error_filter';\nimport { CreateChatCompletionStepError, ErrorCode } from '../../errors/step_error';\nimport { runThread } from '../../utils/run_thread';\n\nimport type { CONFIG, IThread, IThreadId } from '@onereach/flow-sdk/types';\nimport type { DataIn } from '../../schemas/data_in';\nimport type { StreamControllerConfig } from './controller';\n\nexport class StreamWorker extends Step<StreamWorkerConfig> {\n public static readonly class = 'str_wrk';\n\n public static async start(step: Step<StreamControllerConfig>, event: ContentChunk): Promise<void> {\n await runThread<StreamWorkerConfig>(step, {\n id: this.getThreadId(step),\n state: {\n step: step.id,\n class: this.class,\n\n event,\n },\n });\n }\n\n public static isBusy(step: Step<StreamControllerConfig>): boolean {\n const workerThread = this.getThread(step);\n return workerThread != null && !workerThread.ended;\n }\n\n public static getThread(step: Step<StreamControllerConfig>): IThread<StreamWorkerConfig> | undefined {\n const workerThreadId = this.getThreadId(step);\n return step.process.getThread(workerThreadId);\n }\n\n public static getThreadId(step: Step<StreamControllerConfig>): IThreadId {\n return `llm_cmp_${this.class}_${step.id}`;\n }\n\n // ----------------------------------------------\n\n @ErrorFilter\n public runStep(): void {\n if ('event' in this.state === false || this.state.event == null) {\n throw new CreateChatCompletionStepError('Stream worker thread state must contain an event to process', {\n code: ErrorCode.STEP_LOGIC_ISSUE,\n });\n }\n\n const chunk = this.state.event;\n this.log.DEBUG?.('Executing stream worker thread', chunk);\n this.exitStep(WithStreamingStepExitName.chunk, { chunk });\n }\n}\n\nexport enum WithStreamingStepExitName {\n chunk = 'chunk',\n}\n\nexport type ContentChunk = {\n content: string;\n index: number;\n ts: number;\n};\n\nexport type StreamWorkerOut = {\n chunk: ContentChunk;\n};\n\nexport type StreamWorkerState = {\n class: typeof StreamWorker.class;\n\n event: ContentChunk;\n};\n\nexport interface StreamWorkerConfig extends CONFIG {\n dataIn: DataIn;\n dataOut: StreamWorkerOut;\n state: StreamWorkerState;\n}\n","import Step from '@onereach/flow-sdk/step';\nimport { ACTION } from '@onereach/flow-sdk/types';\nimport type { AnyConfig, CONFIG, IThread, IThreadOptions } from '@onereach/flow-sdk/types';\n\n/**\n * Runs a new thread or reuses an existing one (if it ended).\n * @param step The step to run the thread for.\n * @throws Error if the thread is not ended or if the state is not provided.\n */\nexport async function runThread<ThreadConfig extends CONFIG, StepConfig extends CONFIG = AnyConfig>(\n step: Step<StepConfig>,\n { id, state, ...options }: IThreadOptions<ThreadConfig>,\n): Promise<ReturnType<IThread<ThreadConfig>['runThread']>> {\n const thread = step.process.getThread<ThreadConfig>(id);\n step.log.DEBUG?.(`runThread: thread with id '${id}'`, options);\n\n if (thread == null) {\n // create thread\n return await step.thread.runThread<ThreadConfig>({\n id,\n background: true,\n state,\n ...options,\n });\n } else {\n if (!thread.ended) throw new Error(`Thread with id '${id}' has not ended yet, cannot start it again`);\n if (state == null) throw new Error(`Thread with id '${id}' must have a state to run`);\n\n // reuse existing thread\n return await thread.enqueueAndRun({\n name: ACTION.goto,\n state,\n });\n }\n}\n","/* eslint-disable @typescript-eslint/unbound-method */\n\nimport Step from '@onereach/flow-sdk/step';\nimport { ErrorFilter } from '../../decorators/error_filter';\nimport { CreateChatCompletionStepError, ErrorCode } from '../../errors/step_error';\nimport { ParsedArguments, ToolsWorker, ToolsWorkerConfig } from './worker';\nimport { runThread } from '../../utils/run_thread';\nimport { ACTION } from '@onereach/flow-sdk/types';\n\nimport type { CONFIG, IActionEvent, IEvent, IThreadId } from '@onereach/flow-sdk/types';\nimport type { ChatCompletionMessageToolCall, ChatCompletionToolMessageParam } from 'openai/resources';\nimport type { DataIn } from '../../schemas/data_in';\nimport type { ChatCompletionConfig } from '../../step';\nimport { StreamControllerConfig } from '../stream_handler/controller';\n\nexport class ToolsController<TArgs extends ParsedArguments, TResult> extends Step<ToolsControllerConfig<TResult>> {\n public static readonly class = 'tl_ctrl';\n\n public static async start<TResult>(step: Step<ChatCompletionConfig>): Promise<void> {\n const threadId = this.getThreadId(step);\n await runThread<ToolsControllerConfig<TResult>>(step, {\n id: threadId,\n state: {\n step: step.id,\n class: this.class,\n\n tasks: {}, // tool calls from LLM response\n expectMoreTasks: true, // flag to indicate if there are more tasks to process\n },\n });\n }\n\n public static async callTool<T extends ChatCompletionConfig | StreamControllerConfig>(\n step: Step<T>,\n toolCall: ChatCompletionMessageToolCall,\n ): Promise<void> {\n await step.process.enqueueAndRun<EventName.callTool, CallToolParams>({\n thread: this.getThreadId(step),\n name: EventName.callTool,\n params: { toolCall },\n });\n }\n\n public static async lastToolCallReceived<T extends ChatCompletionConfig | StreamControllerConfig>(\n step: Step<T>,\n ): Promise<void> {\n // notify tools controller thread that no more tool calls are expected\n // without await to prevent blocking the stream controller thread\n await step.process.enqueueAndRun<EventName.lastToolCallReceived>({\n thread: this.getThreadId(step),\n name: EventName.lastToolCallReceived,\n });\n }\n\n public static getThreadId<T extends CONFIG>(step: Step<T>): IThreadId {\n return `llm_cmp_${this.class}_${step.id}`;\n }\n\n // ---------------------------------------\n\n @ErrorFilter\n public runStep(): void {\n this.triggers\n .local(EventName.callTool, this.onCallTool)\n .local(EventName.lastToolCallReceived, this.onLastToolCallReceived)\n .otherwise(() => {\n this.log.DEBUG?.('Initializing tools controller thread');\n });\n }\n\n @ErrorFilter\n public onCallTool(event: IEvent<CallToolParams, EventName.callTool>): void {\n const { toolCall } = event.params;\n\n // TODO: support other tool types\n if (toolCall.type !== 'function') {\n throw new CreateChatCompletionStepError('Only function tools are supported at the moment', {\n code: ErrorCode.UNSUPPORTED,\n });\n }\n\n this.state.tasks[toolCall.id] = {\n call: toolCall,\n status: 'pending',\n };\n\n this.startToolWorkerThread(toolCall);\n }\n\n @ErrorFilter\n public onLastToolCallReceived(): void {\n this.log.DEBUG?.('No more tool calls expected', this.state.tasks);\n this.state.expectMoreTasks = false; // set flag to indicate no more tasks expected\n this.tryEndToolsControllerThread();\n }\n\n /**\n * Starts the tool worker thread to process the tool call.\n */\n protected startToolWorkerThread(toolCall: ChatCompletionMessageToolCall): void {\n // TODO: handle error from tool worker thread\n // subscribe to tool worker thread end event\n this.triggers.hook<ToolsWorkerConfig<TArgs, TResult>, ACTION.end>(\n { name: ACTION.end, thread: ToolsWorker.getThreadId(toolCall) },\n this.onToolWorkerThreadEnd,\n );\n\n void ToolsWorker.start<TArgs, TResult>(this, toolCall);\n }\n\n @ErrorFilter\n public onToolWorkerThreadEnd(event: IActionEvent<ToolsWorkerConfig<TArgs, TResult>, ACTION.end>): void {\n this.log.DEBUG?.('Tool caller worker thread has ended', event);\n\n if (!('result' in event.params) || event.params.result == null) {\n throw new CreateChatCompletionStepError('Tool worker thread ended without result', {\n code: ErrorCode.STEP_LOGIC_ISSUE,\n });\n }\n\n // TODO: figure out how to make sure what worker thread has ended? (local.toolCall?)\n // TODO: add setting 'failed' status to the tool call if worker thread ended with error\n\n // const toolCallId = 'toolCallId' in event.params.result\n // ? event.params.result.toolCallId\n // : undefined\n\n const { result } = event.params;\n\n if (result instanceof Error) {\n // TODO: handle error from tool worker thread\n throw new CreateChatCompletionStepError('Tool worker thread ended with error', result, {\n code: ErrorCode.STEP_LOGIC_ISSUE,\n });\n }\n\n this.log.DEBUG?.(`Tool worker thread completed successfully`, {\n toolCallId: result.toolCallId,\n result: result.data,\n });\n this.setToolCallResult(result.toolCallId, result.data);\n\n this.tryEndToolsControllerThread();\n }\n\n protected setToolCallResult(toolCallId: string, result: TResult): void {\n const toolCall = this.state.tasks[toolCallId];\n\n if (toolCall == null) {\n throw new CreateChatCompletionStepError(`Unknown tool call with id '${toolCallId}'`, {\n code: ErrorCode.STEP_LOGIC_ISSUE,\n });\n }\n\n toolCall.status = 'completed';\n toolCall.result = result;\n }\n\n protected tryEndToolsControllerThread(): void {\n if (this.state.expectMoreTasks) return;\n\n // TODO: handle errored out tool calls\n\n // check if all tool calls are completed\n const hasActiveTasks = Object.values(this.state.tasks).some((task) => task.status === 'pending');\n if (hasActiveTasks) return;\n\n this.log.DEBUG?.('All tool calls completed or failed', this.state.tasks);\n this.end({\n status: 'ok',\n messages: this.messages,\n });\n }\n\n protected get messages(): ChatCompletionToolMessageParam[] {\n return Object.values(this.state.tasks).map((task) => ({\n role: 'tool',\n tool_call_id: task.call.id,\n content: JSON.stringify(task.result),\n }));\n }\n}\n\n// ----------------- TYPES -----------------\n\nexport enum EventName {\n callTool = 'tl_run_call',\n lastToolCallReceived = 'tl_rsp_end',\n}\n\nexport type ToolCallTask<TResult> = {\n status: 'pending' | 'completed' | 'failed';\n call: ChatCompletionMessageToolCall;\n result?: TResult; // result of the tool call, if completed\n};\nexport type TasksMap<TResult> = Record<ChatCompletionMessageToolCall['id'], ToolCallTask<TResult>>;\n\nexport type ToolsControllerResult = {\n status: 'ok';\n messages: ChatCompletionToolMessageParam[]; // messages to be sent to the LLM\n};\n\nexport type CallToolParams = {\n toolCall: ChatCompletionMessageToolCall;\n};\n\nexport type ToolsControllerEvents =\n | IEvent<CallToolParams, EventName.callTool>\n | IEvent<never, EventName.lastToolCallReceived>;\n\nexport type ToolsControllerState<TResult> = {\n tasks: TasksMap<TResult>; // tool calls from LLM response,\n expectMoreTasks: boolean; // flag to indicate if there are more tasks to process\n};\n\nexport interface ToolsControllerConfig<TResult> extends CONFIG {\n dataIn: DataIn;\n state: ToolsControllerState<TResult>;\n result: ToolsControllerResult;\n events: ToolsControllerEvents;\n}\n","import Step from '@onereach/flow-sdk/step';\nimport { ErrorFilter } from '../../decorators/error_filter';\nimport { runThread } from '../../utils/run_thread';\n\nimport type { CONFIG, IThreadId } from '@onereach/flow-sdk/types';\nimport type { ChatCompletionMessageToolCall } from 'openai/resources';\nimport type { DataIn } from '../../schemas/data_in';\nimport type { ToolsControllerConfig } from './controller';\n\nexport class ToolsWorker<TArgs extends ParsedArguments, TResult> extends Step<ToolsWorkerConfig<TArgs, TResult>> {\n public static readonly class = 'tl_wrk';\n\n public static async start<TArgs extends ParsedArguments, TResult>(\n step: Step<ToolsControllerConfig<TResult>>,\n toolCall: ChatCompletionMessageToolCall,\n ): Promise<void> {\n // parse tool call arguments if they are in string format\n const parsedArguments = JSON.parse(toolCall.function?.arguments) as TArgs;\n\n await runThread<ToolsWorkerConfig<TArgs, TResult>>(step, {\n id: this.getThreadId(toolCall),\n state: {\n step: step.id,\n class: this.class,\n },\n local: {\n toolCall,\n parsedArguments,\n },\n });\n }\n\n public static getThreadId(toolCall: ChatCompletionMessageToolCall): IThreadId {\n return `llm_cmp_${this.class}_${toolCall.id}`;\n }\n\n // -----------------------------------------------------------------------------------\n\n /**\n * Initializes the tool worker thread to handle processing of repackaged content chunks.\n */\n @ErrorFilter\n public runStep(): void {\n const { toolCall, parsedArguments } = this.local as ToolsWorkerLocal<TArgs>; // TODO: remove type cast\n\n this.log.DEBUG?.('Initializing tool worker thread', toolCall);\n this.exitStep(this.getExitName(toolCall), {\n toolCall: {\n id: toolCall.id,\n type: toolCall.type,\n function: {\n name: toolCall.function.name,\n arguments: parsedArguments, // use parsed arguments\n },\n },\n });\n }\n\n protected getExitName(toolCall: ChatCompletionMessageToolCall): string {\n // TODO: add support for all tool calls into same exit 'function'\n return toolCall.function.name;\n }\n}\n\n// ----------------- TYPES -----------------\n\nexport type ParsedArguments<TArgs extends Record<string, unknown> = Record<string, unknown>> = TArgs;\nexport type ToolCallWithParsedArgs<TArgs extends ParsedArguments> = {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: TArgs;\n };\n};\nexport type ToolsWorkerMergeField<TArgs extends ParsedArguments> = {\n toolCall: ToolCallWithParsedArgs<TArgs>;\n};\n\nexport type ToolsWorkerOut<TArgs extends ParsedArguments> = ToolsWorkerMergeField<TArgs>;\n\nexport type ToolsWorkerState = {\n class: typeof ToolsWorker.class;\n};\n\nexport type ToolsWorkerLocal<TArgs extends ParsedArguments> = {\n toolCall: ChatCompletionMessageToolCall;\n parsedArguments: TArgs;\n};\n\nexport type ThreadWorkerResult<TResult> = {\n toolCallId: string; // ID of the tool call that was processed\n data: TResult; // result of the tool call\n};\n\nexport interface ToolsWorkerConfig<TArgs extends ParsedArguments, TResult> extends CONFIG {\n dataIn: DataIn;\n dataOut: ToolsWorkerOut<TArgs>;\n state: ToolsWorkerState;\n result: ThreadWorkerResult<TResult>;\n local: ToolsWorkerLocal<TArgs>;\n}\n","import { z } from 'zod/v4-mini';\nimport { StreamChunkParams } from '../controller';\nimport { ChatCompletionChunk } from 'openai/resources';\nimport { IEvent } from '@onereach/flow-sdk/types';\n\nexport const streamChunkEventSchema = z.object({\n name: z.string(),\n params: z.object({\n chunk: z.object({\n id: z.string(),\n object: z.literal('chat.completion.chunk'),\n created: z.number(),\n model: z.string(),\n service_tier: z.optional(\n z.union([\n z.literal('default'),\n z.literal('auto'),\n z.literal('flex'),\n z.literal('scale'),\n z.literal('priority'),\n z.null(),\n ]),\n ),\n system_fingerprint: z.optional(z.string()),\n choices: z.array(\n z.object({\n index: z.number(),\n delta: z.object({\n role: z.optional(z.enum(['developer', 'system', 'user', 'assistant', 'tool'])),\n content: z.optional(z.string()),\n refusal: z.nullish(z.string()),\n tool_calls: z.optional(\n z.array(\n z.object({\n index: z.number().check(z.int(), z.gte(0)),\n id: z.optional(z.string()),\n type: z.optional(z.literal('function')),\n function: z.object({\n name: z.optional(z.string()),\n arguments: z.optional(z.string()),\n }),\n }) satisfies z.core.$ZodType<ChatCompletionChunk.Choice.Delta.ToolCall>,\n ),\n ),\n }),\n logprobs: z.optional(z.any()), // logprobs may be null or omitted\n finish_reason: z.union([\n z.literal('stop'),\n z.literal('length'),\n z.literal('tool_calls'),\n z.literal('content_filter'),\n z.null(),\n ]),\n }),\n ),\n\n logprobs: z.nullish(\n z.object({\n content: z.nullable(z.array(z.looseObject({}))),\n refusal: z.nullable(z.array(z.looseObject({}))),\n }),\n ),\n\n usage: z.nullish(\n z.object({\n prompt_tokens: z.number(),\n completion_tokens: z.number(),\n total_tokens: z.number(),\n completion_tokens_details: z.optional(\n z.object({\n accepted_prediction_tokens: z.optional(z.number()),\n audio_tokens: z.optional(z.number()),\n reasoning_tokens: z.optional(z.number()),\n rejected_prediction_tokens: z.optional(z.number()),\n }),\n ),\n prompt_tokens_details: z.optional(\n z.object({\n audio_tokens: z.optional(z.number()),\n cached_tokens: z.optional(z.number()),\n }),\n ),\n }),\n ),\n }) satisfies z.core.$ZodType<ChatCompletionChunk>,\n }),\n}) satisfies z.core.$ZodType<IEvent<StreamChunkParams>>;\n\nexport type StreamChunkEvent = z.infer<typeof streamChunkEventSchema>;\n","import type {\n ChatCompletion,\n ChatCompletionChunk,\n ChatCompletionMessage,\n ChatCompletionMessageToolCall,\n} from 'openai/resources';\nimport { ParsedArguments } from '../../tools_caller/worker';\n\nexport class StreamReducerService<TArgs = ParsedArguments> {\n protected _result: Partial<ChatCompletion>;\n protected readonly _onToolCall: OnToolCallCallback<TArgs>;\n\n constructor(memo: Partial<ChatCompletion>, onToolCall: OnToolCallCallback<TArgs>) {\n this._result = memo;\n this._onToolCall = onToolCall;\n }\n\n public reduceChunk(chunk: ChatCompletionChunk): void {\n if (Object.keys(this._result).length === 0) {\n const { choices, ...rest } = chunk; // eslint-disable-line @typescript-eslint/no-unused-vars\n Object.assign(this._result, rest);\n\n if (this._result.object != null) {\n this._result.object = 'chat.completion';\n }\n }\n\n if (chunk.usage) {\n this._result.usage = chunk.usage;\n // return\n }\n\n for (const choice of chunk.choices) {\n let existing = this._result.choices?.[choice.index];\n\n if (!existing) {\n const { delta, ...rest } = choice; // eslint-disable-line @typescript-eslint/no-unused-vars\n existing = rest as ChatCompletion.Choice;\n this._result.choices ??= [];\n this._result.choices[choice.index] = existing;\n }\n\n if (choice.finish_reason != null) {\n existing.finish_reason = choice.finish_reason;\n }\n\n if (choice.logprobs != null) {\n existing.logprobs = choice.logprobs;\n }\n\n if (choice.delta?.content != null) {\n const { content, ...delta } = choice.delta;\n existing.message ??= delta as ChatCompletionMessage; // TODO: not sure if it's correct to cast here\n existing.message.content ??= '';\n existing.message.content += content;\n }\n\n if (choice.delta?.tool_calls != null) {\n const { tool_calls, ...delta } = choice.delta; // eslint-disable-line @typescript-eslint/no-unused-vars\n existing.message ??= delta as ChatCompletionMessage; // TODO: not sure if it's correct to cast here\n existing.message.tool_calls ??= [];\n\n for (const deltaToolCall of choice.delta.tool_calls) {\n const i = deltaToolCall.index;\n if (existing.message.tool_calls[i] == null) {\n existing.message.tool_calls[i] = structuredClone(deltaToolCall) as ChatCompletionMessageToolCall;\n } else {\n existing.message.tool_calls[i].function.arguments += deltaToolCall.function?.arguments ?? '';\n }\n\n // set immediate to not block the event loop\n if (choice.index === 0) {\n this.tryParseToolCall(existing.message.tool_calls[i]);\n }\n }\n }\n }\n }\n\n protected tryParseToolCall(toolCall: ChatCompletionMessageToolCall): void {\n try {\n const parsedArgs = JSON.parse(toolCall.function.arguments) as TArgs;\n this._onToolCall(toolCall, parsedArgs);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n // if failed to parse, just ignore it assume it's not fully loaded yet\n }\n }\n}\n\nexport type OnToolCallCallback<TArgs = ParsedArguments> = (\n toolCall: ChatCompletionMessageToolCall,\n parsedArgs: TArgs,\n) => void;\n","import { z } from 'zod/v4-mini';\nimport { en } from 'zod/v4/locales';\n\nz.config(en());\n\n// string that prevents\nconst stringNoUndefinedSchema = z.string().check(\n z.trim(),\n z.refine((val) => !['undefined', 'null'].includes(val), {\n error: 'Unexpected undefined or null merge-field value',\n }),\n);\n\nconst messageSchema = z.discriminatedUnion('role', [\n z.object({\n role: z.literal('system'),\n content: stringNoUndefinedSchema,\n }),\n z.object({\n role: z.literal('user'),\n content: stringNoUndefinedSchema,\n name: z.optional(z.string().check(z.minLength(1), z.maxLength(64))),\n }),\n z.object({\n role: z.literal('assistant'),\n content: z.nullable(stringNoUndefinedSchema),\n\n // TODO: add support for annotations and refusal\n // params to support in the future\n // refusal: z.nullable(z.string().check(z.trim(), z.minLength(1))),\n // annotations: z.optional(z.array(z.any())), // TODO: replace z.any() with more details\n tool_calls: z.optional(\n z.array(\n z.object({\n id: z.string().check(z.minLength(1)),\n type: z.literal('function'),\n function: z.object({\n name: z.string().check(z.minLength(1)),\n arguments: z.string().check(z.trim(), z.minLength(1)),\n }),\n }),\n ),\n ),\n }),\n z.object({\n role: z.literal('tool'),\n content: stringNoUndefinedSchema,\n name: z.optional(z.string().check(z.minLength(1), z.maxLength(64))),\n tool_call_id: z.string().check(z.minLength(1)),\n }),\n]);\nexport type Message = z.infer<typeof messageSchema>;\n\nexport const dataInSchema = z\n .object({\n provider: z.string().check(z.minLength(1)),\n model: z.string().check(z.minLength(1)),\n\n tokenName: z.optional(z.string()).check(z.overwrite((val) => (val === '' ? undefined : val))), // transform empty string to undefined\n tokenNameHeader: z._default(z.string().check(z.minLength(1)), 'x-or-account-token-name'),\n sessionIdHeader: z._default(z.string().check(z.minLength(1)), 'x-or-session-id'),\n\n typeOfStep: z.enum(['chat', 'completion']),\n\n systemMessage: z.optional(stringNoUndefinedSchema),\n userMessage: z.optional(stringNoUndefinedSchema),\n switchAssistantsMessage: z._default(z.boolean(), false), // Add assistant's first message\n assistantsFirstMessage: z.optional(stringNoUndefinedSchema),\n\n userSettings: z.object({\n temperature: z.promise(z._default(z.coerce.number().check(z.gte(0), z.lte(2)), 1)),\n topP: z.promise(z.optional(z.coerce.number().check(z.gte(0), z.lte(1)))),\n maxTokens: z.promise(z.optional(z.coerce.number().check(z.int(), z.gte(1)))),\n presencePenalty: z.promise(z.optional(z.coerce.number().check(z.gte(-2), z.lte(2)))),\n frequencyPenalty: z.promise(z.optional(z.coerce.number().check(z.gte(-2), z.lte(2)))),\n stop: z.promise(\n z.optional(\n z\n .array(\n z.object({\n token: z.string().check(z.minLength(1), z.maxLength(64)),\n }),\n )\n .check(z.maxLength(4)),\n ),\n ),\n }),\n n: z._default(z.coerce.number().check(z.int(), z.gte(1), z.lte(128)), 1),\n\n // streaming\n streamResponse: z._default(z.boolean(), false),\n streamSettings: z.optional(\n z.object({\n maxBufferLength: z.promise(z.coerce.number().check(z.int(), z.gte(1), z.lte(32768))),\n debounceDuration: z.promise(z.coerce.number().check(z.int(), z.gte(0), z.lte(10_000))), // in milliseconds\n }),\n ),\n\n // history\n customHistory: z._default(z.boolean(), false), // only for 'chat' mode\n historyRange: z._default(z.coerce.number().check(z.int(), z.gte(1), z.lte(10)), 10),\n historyMode: z.optional(z.enum(['mergefield', 'codeHistory'])),\n historyMergefield: z.optional(z.array(messageSchema)),\n historyCode: z.optional(z.array(messageSchema)),\n\n processError: z.boolean(),\n processTimeout: z.boolean(),\n timeoutDuration: z.string().check(z.trim(), z.minLength(1)),\n })\n .check(\n z.refine((data) => !data.streamResponse || data.provider === 'openai', {\n error: 'Streaming is only supported for OpenAI provider',\n }),\n z.refine((data) => !data.streamResponse || data.streamSettings !== undefined, {\n error: 'Missing \"Stream settings\" for response streaming mode',\n }),\n z.refine(\n (data) =>\n data.typeOfStep !== 'chat' ||\n data.customHistory ||\n !data.switchAssistantsMessage ||\n data.assistantsFirstMessage !== undefined,\n { error: 'Missing \"Assistant\\'s first message\" value' },\n ),\n z.refine((data) => data.customHistory || data.userMessage !== undefined, {\n error: 'Missing \"User message\" value',\n }),\n z.refine((data) => data.typeOfStep !== 'chat' || !data.customHistory || data.historyMode !== undefined, {\n error: 'Missing \"History mode\" value',\n }),\n z.refine(\n (data) =>\n data.typeOfStep !== 'chat' ||\n !data.customHistory ||\n data.historyMode !== 'mergefield' ||\n data.historyMergefield !== undefined,\n { error: 'Missing \"History\" data via merge-field' },\n ),\n z.refine(\n (data) =>\n data.typeOfStep !== 'chat' ||\n !data.customHistory ||\n data.historyMode !== 'mergefield' ||\n data.historyMergefield?.find?.((msg) => msg.role === 'user'),\n {\n error: 'Missing at least one message with role \"user\" message in \"History\" data via merge-field',\n },\n ),\n z.refine(\n (data) =>\n data.typeOfStep !== 'chat' ||\n !data.customHistory ||\n data.historyMode !== 'codeHistory' ||\n data.historyCode !== undefined,\n { error: 'Missing \"History\" data as code' },\n ),\n z.refine(\n (data) =>\n data.typeOfStep !== 'chat' ||\n !data.customHistory ||\n data.historyMode !== 'codeHistory' ||\n data.historyCode?.find?.((msg) => msg.role === 'user'),\n {\n error: 'Missing at least one message with role \"user\" message in \"History\" data via code',\n },\n ),\n );\n\nexport type DataIn = z.infer<typeof dataInSchema>;\n","import OpenAI from 'openai';\nimport timestring from 'timestring';\nimport { z } from 'zod/v4-mini';\nimport { Memoize } from 'typescript-memoize';\nimport BasicThreadService from '@onereach/flow-sdk/services/basic';\n\nimport type { Stream } from 'openai/core/streaming.js';\nimport type { ChatCompletion, ChatCompletionChunk, ChatCompletionMessageParam } from 'openai/resources';\nimport type { DataIn } from '../schemas/data_in';\nimport type { CONFIG, IThread } from '@onereach/flow-sdk/types';\n\nexport class OpenAIRequestService<TConfig extends CONFIG> extends BasicThreadService<TConfig> {\n constructor(\n thread: IThread<TConfig>,\n private readonly data: DataIn,\n ) {\n super(thread);\n this.log.DEBUG?.('OpenAIRequestService initialized');\n }\n\n /**\n * Makes a request to the OpenAI API to create a chat completion.\n */\n public async makeOpenAiRequest(\n messages: ChatCompletionMessageParam[],\n ): Promise<ChatCompletion | Stream<ChatCompletionChunk>> {\n const {\n model,\n userSettings: { temperature, topP, maxTokens, frequencyPenalty, presencePenalty },\n n,\n streamResponse,\n } = this.data;\n\n const request = {\n messages: structuredClone(messages), // clone to avoid mutation\n model,\n temperature,\n top_p: topP,\n max_tokens: maxTokens,\n frequency_penalty: frequencyPenalty,\n presence_penalty: presencePenalty,\n stop: this.stopSequences,\n n,\n };\n this.log.DEBUG?.('LLM request', request);\n const response = await this.openAiClient.chat.completions.create(request, { stream: streamResponse });\n\n if (!streamResponse) this.log.DEBUG?.('LLM response', response);\n\n return response;\n }\n\n /**\n * Returns the OpenAI client instance configured with the step's data.\n */\n private get openAiClient(): OpenAI {\n const { provider, tokenName, tokenNameHeader, sessionIdHeader } = this.data;\n\n const clientOptions = {\n baseURL: `${this.config.env.OPENAI_API_URL}/${provider}`,\n apiKey: '',\n defaultHeaders: {\n Authorization: this.config.authorization,\n [sessionIdHeader]: this.session.get<string>(['reporting', 'sessionId']),\n ...(tokenName ? { [tokenNameHeader]: tokenName } : null),\n },\n timeout: this.timeoutMs,\n };\n this.log.DEBUG?.('OpenAI client options', clientOptions);\n\n return new OpenAI(clientOptions);\n }\n\n private get stopSequences(): string[] {\n const list = this.data.userSettings.stop ?? [];\n return list.map((item) => item.token).filter((token) => token.length > 0);\n }\n\n /**\n * Returns the timeout duration in milliseconds.\n */\n @Memoize()\n private get timeoutMs(): number {\n const value = timestring(this.data.timeoutDuration, 'ms');\n\n // 1 second to 10 minutes\n return z.number().check(z.int(), z.gte(1000), z.lte(600_000)).parse(value);\n }\n}\n","import { readFile } from 'fs/promises';\n\nexport async function validateFlowSdkVersion(minVersion: string): Promise<void> {\n if (typeof minVersion !== 'string' || !minVersion.match(/^\\d+\\.\\d+\\.\\d+$/)) {\n throw new Error(`Invalid minimum version format: ${minVersion}`);\n }\n\n const packageJsonPath = require.resolve('@onereach/flow-sdk/package.json');\n if (!packageJsonPath) {\n throw new Error(`Could not find package.json for @onereach/flow-sdk`);\n }\n // Read the package.json file to get the version\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const packageJsonContent = await readFile(packageJsonPath, 'utf-8');\n\n const { version } = JSON.parse(packageJsonContent) as { version: string };\n const { groups } = version.match(/^(?<major>\\d+)\\.(?<minor>\\d+)\\.(?<patch>\\d+)/) || {};\n\n if (!groups) throw new Error(`Invalid Flow SDK version format: ${version}`);\n\n const major = parseInt(groups.major, 10);\n const minor = parseInt(groups.minor, 10);\n const patch = parseInt(groups.patch, 10);\n\n const [minMajor, minMinor, minPatch] = minVersion.split('.').map((x) => parseInt(x, 10));\n\n if (\n major < minMajor ||\n (major === minMajor && minor < minMinor) ||\n (major === minMajor && minor === minMinor && patch < minPatch)\n ) {\n throw new Error(\n `Flow SDK version '${version}' is lower than required minimum version '${minVersion}' for the step`,\n );\n }\n}\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@onereach/step-create-chat-completion",
|
|
3
|
+
"version": "0.0.7-rc.5",
|
|
4
|
+
"description": "Logic for creating LLM chat completion step",
|
|
5
|
+
"keywords": [],
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Antony Peklo <antony.peklo@onereach.com>",
|
|
8
|
+
"main": "dist/index.js",
|
|
9
|
+
"types": "dist/index.d.ts",
|
|
10
|
+
"publishConfig": {
|
|
11
|
+
"access": "public"
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"dist",
|
|
15
|
+
"!dist/metafile*.json"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "tsup --config tsup.config.ts",
|
|
19
|
+
"build:visualize": "esbuild-visualizer --filename '.build/stats.html' --metadata 'dist/metafile-cjs.json' --open",
|
|
20
|
+
"test": "npm run unit",
|
|
21
|
+
"unit": "vitest run"
|
|
22
|
+
},
|
|
23
|
+
"dependencies": {
|
|
24
|
+
"openai": "^5.10.2",
|
|
25
|
+
"source-map-support": "^0.5.21",
|
|
26
|
+
"timestring": "^7.0.0",
|
|
27
|
+
"typescript-memoize": "^1.1.1",
|
|
28
|
+
"zod": "^3.25.76"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@aws-sdk/client-kms": "^3.854.0",
|
|
32
|
+
"@onereach/flow-sdk": "^8.0.17",
|
|
33
|
+
"@onereach/get-version-data": "^3.1.0",
|
|
34
|
+
"@onereach/orb-em-core": "7.2.12",
|
|
35
|
+
"@onereach/orb-test-helpers": "7.2.12",
|
|
36
|
+
"@swc/core": "^1.13.2",
|
|
37
|
+
"@types/node": "^24.1.0",
|
|
38
|
+
"@types/source-map-support": "^0.5.10",
|
|
39
|
+
"@types/timestring": "^7.0.0",
|
|
40
|
+
"esbuild-visualizer": "^0.7.0",
|
|
41
|
+
"source-map-explorer": "^2.5.3",
|
|
42
|
+
"tslib": "^2.8.1",
|
|
43
|
+
"tsup": "^8.5.0",
|
|
44
|
+
"typescript": "^5.8.3",
|
|
45
|
+
"vitest": "^3.2.4"
|
|
46
|
+
}
|
|
47
|
+
}
|