@haylee-ai/chat-sdk 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +2051 -0
- package/dist/index.cjs +322 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +201 -0
- package/dist/index.d.ts +201 -0
- package/dist/index.js +282 -0
- package/dist/index.js.map +1 -0
- package/package.json +48 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
20
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
21
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
22
|
+
if (decorator = decorators[i])
|
|
23
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
24
|
+
if (kind && result) __defProp(target, key, result);
|
|
25
|
+
return result;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// src/index.ts
|
|
29
|
+
var index_exports = {};
|
|
30
|
+
__export(index_exports, {
|
|
31
|
+
AuthenticationError: () => AuthenticationError,
|
|
32
|
+
AuthorizationError: () => AuthorizationError,
|
|
33
|
+
BaseEvent: () => BaseEvent,
|
|
34
|
+
CreateMessageDto: () => CreateMessageDto,
|
|
35
|
+
EndEvent: () => EndEvent,
|
|
36
|
+
EventKind: () => EventKind,
|
|
37
|
+
HayleeAI: () => HayleeAI,
|
|
38
|
+
HayleeAIClient: () => HayleeAIClient,
|
|
39
|
+
HayleeAIError: () => HayleeAIError,
|
|
40
|
+
IHistoryPayload: () => IHistoryPayload,
|
|
41
|
+
LlmTokenContent: () => LlmTokenContent,
|
|
42
|
+
LlmTokenEvent: () => LlmTokenEvent,
|
|
43
|
+
MessageService: () => MessageService,
|
|
44
|
+
NotFoundError: () => NotFoundError,
|
|
45
|
+
Role: () => Role,
|
|
46
|
+
ToolStatus: () => ToolStatus,
|
|
47
|
+
ValidationError: () => ValidationError
|
|
48
|
+
});
|
|
49
|
+
module.exports = __toCommonJS(index_exports);
|
|
50
|
+
|
|
51
|
+
// src/_internal/client.ts
|
|
52
|
+
var import_fetch_event_source = require("@microsoft/fetch-event-source");
|
|
53
|
+
var HayleeAIClient = class {
|
|
54
|
+
/**
|
|
55
|
+
* @property baseURL - the base URL to make requests to
|
|
56
|
+
*/
|
|
57
|
+
baseURL;
|
|
58
|
+
/**
|
|
59
|
+
* @param options - Auth, and baseURL
|
|
60
|
+
*/
|
|
61
|
+
constructor(options) {
|
|
62
|
+
this.baseURL = options.baseUrl || "http://localhost:3000/api/v1/chat";
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Internal stream callout
|
|
66
|
+
* @param payload - Message DTO
|
|
67
|
+
* @param [signal] - Abort signal
|
|
68
|
+
*/
|
|
69
|
+
async *_stream(payload, signal) {
|
|
70
|
+
const queue = [];
|
|
71
|
+
let resolve = null;
|
|
72
|
+
let done = false;
|
|
73
|
+
(0, import_fetch_event_source.fetchEventSource)(`${this.baseURL}`, {
|
|
74
|
+
headers: {
|
|
75
|
+
"Content-Type": "application/json"
|
|
76
|
+
},
|
|
77
|
+
credentials: "include",
|
|
78
|
+
method: "POST",
|
|
79
|
+
body: JSON.stringify(payload),
|
|
80
|
+
openWhenHidden: true,
|
|
81
|
+
onmessage(ev) {
|
|
82
|
+
queue.push(ev.data);
|
|
83
|
+
resolve?.();
|
|
84
|
+
},
|
|
85
|
+
onclose() {
|
|
86
|
+
done = true;
|
|
87
|
+
resolve?.();
|
|
88
|
+
},
|
|
89
|
+
onerror(err) {
|
|
90
|
+
done = true;
|
|
91
|
+
resolve?.();
|
|
92
|
+
throw err;
|
|
93
|
+
},
|
|
94
|
+
signal
|
|
95
|
+
});
|
|
96
|
+
if (signal) {
|
|
97
|
+
signal.addEventListener("abort", () => {
|
|
98
|
+
done = true;
|
|
99
|
+
resolve?.();
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
while (!done || queue.length > 0) {
|
|
103
|
+
if (queue.length === 0) {
|
|
104
|
+
await new Promise((r) => {
|
|
105
|
+
resolve = r;
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
while (queue.length > 0) {
|
|
109
|
+
yield queue.shift();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
// src/messages/types.ts
|
|
116
|
+
var EventKind = /* @__PURE__ */ ((EventKind2) => {
|
|
117
|
+
EventKind2["LLM_TOKEN"] = "llm_token";
|
|
118
|
+
EventKind2["TOOLS"] = "tools";
|
|
119
|
+
return EventKind2;
|
|
120
|
+
})(EventKind || {});
|
|
121
|
+
var BaseEvent = class {
|
|
122
|
+
/*
|
|
123
|
+
* @property kind - Used to separate streams
|
|
124
|
+
*/
|
|
125
|
+
kind;
|
|
126
|
+
/**
|
|
127
|
+
* @property node - Source node in langgraph
|
|
128
|
+
*/
|
|
129
|
+
node;
|
|
130
|
+
};
|
|
131
|
+
var LlmTokenContent = class {
|
|
132
|
+
/**
|
|
133
|
+
* @property type - Always text
|
|
134
|
+
*/
|
|
135
|
+
type;
|
|
136
|
+
/**
|
|
137
|
+
* @property text - The text content
|
|
138
|
+
*/
|
|
139
|
+
text;
|
|
140
|
+
};
|
|
141
|
+
var LlmTokenEvent = class extends BaseEvent {
|
|
142
|
+
/**
|
|
143
|
+
* @property content - An array of LlmTokenContent. Always an array. Non-empty or empty. Make sure to handle all items in the array.
|
|
144
|
+
*/
|
|
145
|
+
content;
|
|
146
|
+
/**
|
|
147
|
+
* @property model - The LLM model used.
|
|
148
|
+
*/
|
|
149
|
+
model;
|
|
150
|
+
};
|
|
151
|
+
var EndEvent = class {
|
|
152
|
+
success;
|
|
153
|
+
};
|
|
154
|
+
var ToolStatus = /* @__PURE__ */ ((ToolStatus2) => {
|
|
155
|
+
ToolStatus2["START"] = "START";
|
|
156
|
+
ToolStatus2["END"] = "END";
|
|
157
|
+
ToolStatus2["ERROR"] = "ERROR";
|
|
158
|
+
return ToolStatus2;
|
|
159
|
+
})(ToolStatus || {});
|
|
160
|
+
|
|
161
|
+
// src/errors/base.ts
|
|
162
|
+
var HayleeAIError = class _HayleeAIError extends Error {
|
|
163
|
+
name = "HayleeAIError";
|
|
164
|
+
constructor(message) {
|
|
165
|
+
super(message);
|
|
166
|
+
Object.setPrototypeOf(this, _HayleeAIError.prototype);
|
|
167
|
+
}
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
// src/errors/parse.error.ts
|
|
171
|
+
var ParseError = class _ParseError extends HayleeAIError {
|
|
172
|
+
constructor(message, details) {
|
|
173
|
+
super(message);
|
|
174
|
+
this.details = details;
|
|
175
|
+
Object.setPrototypeOf(this, _ParseError.prototype);
|
|
176
|
+
}
|
|
177
|
+
name = "ParseError";
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
// src/_shared/parse.helper.ts
|
|
181
|
+
function parseEvent(data) {
|
|
182
|
+
try {
|
|
183
|
+
return JSON.parse(data);
|
|
184
|
+
} catch {
|
|
185
|
+
throw new ParseError("Failed to parse event data to JSON.");
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// src/messages/message.service.ts
|
|
190
|
+
var MessageService = class {
|
|
191
|
+
constructor(client) {
|
|
192
|
+
this.client = client;
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* @param payload - The create message payload
|
|
196
|
+
* @param options - Config for streaming
|
|
197
|
+
*/
|
|
198
|
+
async stream(payload, options) {
|
|
199
|
+
for await (const ev of this.client._stream(payload, options?.signal)) {
|
|
200
|
+
if (!ev || !ev.trim()) continue;
|
|
201
|
+
try {
|
|
202
|
+
const event = parseEvent(ev);
|
|
203
|
+
switch (event.kind) {
|
|
204
|
+
case "llm_token" /* LLM_TOKEN */: {
|
|
205
|
+
options?.onLlmToken?.(event);
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
case "tools" /* TOOLS */: {
|
|
209
|
+
const typedEvent = event;
|
|
210
|
+
if (typedEvent.status == "START" /* START */) {
|
|
211
|
+
options?.onToolStart?.(typedEvent);
|
|
212
|
+
} else if (typedEvent.status == "END" /* END */) {
|
|
213
|
+
options?.onToolEnd?.(typedEvent);
|
|
214
|
+
}
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
} catch (err) {
|
|
219
|
+
options?.onEnd?.({ success: false });
|
|
220
|
+
console.error("Failed to parse event data to JSON.", err);
|
|
221
|
+
options?.onError?.(err);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
options?.onEnd?.({ success: true });
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
// src/errors/validation.error.ts
|
|
229
|
+
var ValidationError = class _ValidationError extends HayleeAIError {
|
|
230
|
+
constructor(message, details) {
|
|
231
|
+
super(message);
|
|
232
|
+
this.details = details;
|
|
233
|
+
Object.setPrototypeOf(this, _ValidationError.prototype);
|
|
234
|
+
}
|
|
235
|
+
name = "ValidationError";
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
// src/errors/not-found.error.ts
|
|
239
|
+
var NotFoundError = class _NotFoundError extends HayleeAIError {
|
|
240
|
+
name = "NotFoundError";
|
|
241
|
+
constructor(message) {
|
|
242
|
+
super(message);
|
|
243
|
+
Object.setPrototypeOf(this, _NotFoundError.prototype);
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
|
|
247
|
+
// src/errors/authorization.error.ts
|
|
248
|
+
var AuthorizationError = class _AuthorizationError extends HayleeAIError {
|
|
249
|
+
name = "AuthorizationError";
|
|
250
|
+
constructor(message) {
|
|
251
|
+
super(message);
|
|
252
|
+
Object.setPrototypeOf(this, _AuthorizationError.prototype);
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
|
|
256
|
+
// src/errors/authentication.error.ts
|
|
257
|
+
var AuthenticationError = class _AuthenticationError extends HayleeAIError {
|
|
258
|
+
name = "AuthenticationError";
|
|
259
|
+
constructor(message) {
|
|
260
|
+
super(message);
|
|
261
|
+
Object.setPrototypeOf(this, _AuthenticationError.prototype);
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
|
|
265
|
+
// src/types/chat.interface.ts
|
|
266
|
+
var import_class_validator = require("class-validator");
|
|
267
|
+
var CreateMessageDto = class {
|
|
268
|
+
message;
|
|
269
|
+
/* Array of messages */
|
|
270
|
+
conversation_history;
|
|
271
|
+
};
|
|
272
|
+
__decorateClass([
|
|
273
|
+
(0, import_class_validator.IsString)()
|
|
274
|
+
], CreateMessageDto.prototype, "message", 2);
|
|
275
|
+
var Role = /* @__PURE__ */ ((Role2) => {
|
|
276
|
+
Role2["HUMAN"] = "human";
|
|
277
|
+
Role2["AI"] = "ai";
|
|
278
|
+
return Role2;
|
|
279
|
+
})(Role || {});
|
|
280
|
+
var IHistoryPayload = class {
|
|
281
|
+
role;
|
|
282
|
+
content;
|
|
283
|
+
};
|
|
284
|
+
__decorateClass([
|
|
285
|
+
(0, import_class_validator.IsEnum)(Role)
|
|
286
|
+
], IHistoryPayload.prototype, "role", 2);
|
|
287
|
+
__decorateClass([
|
|
288
|
+
(0, import_class_validator.IsString)()
|
|
289
|
+
], IHistoryPayload.prototype, "content", 2);
|
|
290
|
+
|
|
291
|
+
// src/index.ts
|
|
292
|
+
var HayleeAI = class extends HayleeAIClient {
|
|
293
|
+
messages;
|
|
294
|
+
/**
|
|
295
|
+
* @param options - HayleeAIChatClientOptions
|
|
296
|
+
*/
|
|
297
|
+
constructor(options) {
|
|
298
|
+
super(options);
|
|
299
|
+
this.messages = new MessageService(this);
|
|
300
|
+
}
|
|
301
|
+
};
|
|
302
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
303
|
+
0 && (module.exports = {
|
|
304
|
+
AuthenticationError,
|
|
305
|
+
AuthorizationError,
|
|
306
|
+
BaseEvent,
|
|
307
|
+
CreateMessageDto,
|
|
308
|
+
EndEvent,
|
|
309
|
+
EventKind,
|
|
310
|
+
HayleeAI,
|
|
311
|
+
HayleeAIClient,
|
|
312
|
+
HayleeAIError,
|
|
313
|
+
IHistoryPayload,
|
|
314
|
+
LlmTokenContent,
|
|
315
|
+
LlmTokenEvent,
|
|
316
|
+
MessageService,
|
|
317
|
+
NotFoundError,
|
|
318
|
+
Role,
|
|
319
|
+
ToolStatus,
|
|
320
|
+
ValidationError
|
|
321
|
+
});
|
|
322
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/_internal/client.ts","../src/messages/types.ts","../src/errors/base.ts","../src/errors/parse.error.ts","../src/_shared/parse.helper.ts","../src/messages/message.service.ts","../src/errors/validation.error.ts","../src/errors/not-found.error.ts","../src/errors/authorization.error.ts","../src/errors/authentication.error.ts","../src/types/chat.interface.ts"],"sourcesContent":["import { HayleeAIClient, HayleeAIChatClientOptions } from \"./_internal/client\";\nimport { MessageService } from \"./messages\";\n\n/**\n * Instantiate a new HayleeAI connection\n */\nclass HayleeAI extends HayleeAIClient {\n public messages: MessageService;\n\n /**\n * @param options - HayleeAIChatClientOptions \n */\n constructor(options: HayleeAIChatClientOptions){\n super(options);\n this.messages = new MessageService(this);\n }\n}\n\nexport {\n HayleeAI,\n HayleeAIChatClientOptions \n}\nexport * from \"./errors\";\nexport * from \"./messages\";\nexport * from \"./types/chat.interface\";\nexport * from \"./_internal/client\";\n","import { CreateMessageDto } from \"@/types/chat.interface\";\nimport { fetchEventSource } from \"@microsoft/fetch-event-source\";\n\n/**\n * Options for the HayleeAI Client \n * @property apiKey - API key for authentication\n * @property baseUrl - Optional base URL, defaults to production\n */\nexport type HayleeAIChatClientOptions = {\n baseUrl?: string;\n}\n\n/**\n * Internal HayleeAI Client. Do not use unless necessary.\n * @class HayleeAIClient \n * @property baseURL - Base URL to make requests to\n */\nexport class HayleeAIClient {\n /**\n * @property baseURL - the base URL to make requests to\n */\n private baseURL: string;\n /**\n * @param options - Auth, and baseURL\n */\n constructor(options: HayleeAIChatClientOptions) {\n this.baseURL = options.baseUrl || \"http://localhost:3000/api/v1/chat\";\n }\n\n /**\n * Internal stream callout\n * @param payload - Message DTO\n * @param [signal] - Abort signal\n */\n async *_stream(payload: CreateMessageDto, signal?: AbortSignal) {\n const queue: string[] = [];\n let resolve: (() => void) | null = null;\n let done = false;\n\n fetchEventSource(`${this.baseURL}`, {\n headers: {\n 'Content-Type': 'application/json',\n },\n credentials: 'include',\n method: 'POST',\n body: JSON.stringify(payload),\n openWhenHidden: true,\n onmessage(ev) {\n queue.push(ev.data);\n resolve?.(); // wake up the generator\n },\n onclose() {\n done = true;\n resolve?.();\n },\n onerror(err) {\n done = true;\n resolve?.();\n throw err;\n },\n signal\n });\n\n if (signal) {\n signal.addEventListener(\"abort\", () => {\n done = true;\n resolve?.();\n });\n }\n\n while (!done || queue.length > 0) {\n if (queue.length === 0) {\n //wait until onmessage pushes something\n await new Promise<void>(r => { resolve = r; });\n }\n while (queue.length > 0) {\n yield queue.shift()!;\n }\n }\n }}\n","export enum EventKind {\n LLM_TOKEN = \"llm_token\",\n TOOLS = \"tools\"\n}\n\n/**\n * Base event for Streaming\n * @class BaseEvent\n * @property kind - Used to separate streams\n * @property node - Source node in langgraph\n */\nexport class BaseEvent {\n /*\n * @property kind - Used to separate streams\n */\n kind!: EventKind;\n /**\n * @property node - Source node in langgraph\n */\n node!: string;\n}\n\n\n/**\n * @class LLmTokenContent\n */\nexport class LlmTokenContent {\n /**\n * @property type - Always text\n */\n type!: \"text\";\n /**\n * @property text - The text content\n */\n text!: string;\n}\n\nexport class LlmTokenEvent extends BaseEvent {\n /**\n * @property content - An array of LlmTokenContent. Always an array. Non-empty or empty. Make sure to handle all items in the array.\n */\n content!: LlmTokenContent[];\n /**\n * @property model - The LLM model used.\n */\n model!: string;\n}\n\nexport class EndEvent {\n success!: boolean;\n}\n\nexport interface ToolEvent extends BaseEvent {\n content?: ToolContent;\n name: string;\n tool_call_id?: string;\n status: ToolStatus;\n results: ToolResultContent[];\n}\n\nexport enum ToolStatus {\n START = \"START\",\n END = \"END\",\n ERROR = \"ERROR\"\n}\n\nexport interface ToolContent {\n params: unknown;\n}\n\nexport interface ToolResultContent {\n /* type is text or json */\n type: string;\n /* can be string or object or array, ANY */\n content: any;\n}\n\n","export class HayleeAIError extends Error {\n public readonly name: string = \"HayleeAIError\";\n\n constructor(message: string) {\n super(message);\n Object.setPrototypeOf(this, HayleeAIError.prototype);\n }\n}\n","import { HayleeAIError } from \"./base\";\n\nexport class ParseError extends HayleeAIError {\n public readonly name: string = \"ParseError\";\n constructor(message: string, public details?: any){\n super(message);\n Object.setPrototypeOf(this, ParseError.prototype);\n }\n}\n","import { ParseError } from \"@/errors/parse.error\";\n\nexport function parseEvent<T>(data: string): T {\n try {\n return JSON.parse(data) as T;\n } catch {\n throw new ParseError(\"Failed to parse event data to JSON.\");\n }\n}\n","import { CreateMessageDto } from \"../types/chat.interface\";\nimport { parseEvent } from \"@/_shared/parse.helper\";\nimport { BaseEvent, EndEvent, EventKind, LlmTokenEvent, ToolEvent, ToolStatus } from \"./types\";\nimport { HayleeAIClient } from \"@/_internal/client\";\n\n/**\n * @property onLlmToken - Streams llm tokens for output\n * @property onSearchUpdate - Streams pending / done updates along with search results if status is DONE\n * @property onError - Streams errors on runtime\n * @property signal - AbortSignal for terminating the upstream stream\n */\nexport interface MessageServiceOptions {\n /**\n * Streams llm tokens for output\n * @param ev - LlmTokenEvent\n */\n onLlmToken?(ev: LlmTokenEvent): void;\n /**\n * triggers upon stream end\n * @param ev - EndEvent\n * */\n onEnd?(ev: EndEvent): void;\n /**\n * Streams tool start updates\n * @param ev - ToolEvent\n */\n onToolStart?(ev: ToolEvent): void;\n /**\n * Streams tool end updates\n * @param ev - ToolEvent\n */\n onToolEnd?(ev: ToolEvent): void;\n /**\n * Streams errors on runtime\n * @param err - Error or unknown value\n */\n onError?(err: unknown): void;\n /**\n * @property signal - Abort signal to abort the stream\n */\n signal?: AbortSignal;\n}\n\nexport class MessageService {\n\n constructor(private readonly client: HayleeAIClient) {}\n\n /**\n * @param payload - The create message payload\n * @param options - Config for streaming\n */\n async stream(payload: CreateMessageDto, options?: MessageServiceOptions) {\n\n for await (const ev of this.client._stream(payload, options?.signal)) {\n if(!ev || !ev.trim()) continue;\n try {\n const event = parseEvent<BaseEvent>(ev);\n\n switch(event.kind) {\n case EventKind.LLM_TOKEN: {\n options?.onLlmToken?.(event as LlmTokenEvent);\n break;\n }\n case EventKind.TOOLS: {\n const typedEvent = event as ToolEvent;\n if(typedEvent.status == ToolStatus.START) {\n options?.onToolStart?.(typedEvent);\n } else if (typedEvent.status == ToolStatus.END) {\n options?.onToolEnd?.(typedEvent);\n }\n break;\n }\n }\n } catch (err) {\n options?.onEnd?.({ success: false });\n //throw new ParseError(\"Failed to parse event data to JSON.\")\n console.error(\"Failed to parse event data to JSON.\", err);\n options?.onError?.(err);\n }\n }\n options?.onEnd?.({ success: true });\n }\n\n}\n","import { HayleeAIError } from \"./base\";\n\nexport class ValidationError extends HayleeAIError {\n public readonly name: string = \"ValidationError\";\n constructor(message: string, public details?: any){\n super(message);\n Object.setPrototypeOf(this, ValidationError.prototype);\n }\n}\n","import { HayleeAIError } from \"./base\";\n\nexport class NotFoundError extends HayleeAIError {\n public readonly name: string = \"NotFoundError\";\n\n constructor(message: string) {\n super(message);\n Object.setPrototypeOf(this, NotFoundError.prototype);\n }\n}\n","import { HayleeAIError } from \"./base\";\n\nexport class AuthorizationError extends HayleeAIError {\n public readonly name: string = \"AuthorizationError\";\n\n constructor(message: string) {\n super(message);\n Object.setPrototypeOf(this, AuthorizationError.prototype);\n }\n}\n\n\n","import { HayleeAIError } from \"./base\";\n\nexport class AuthenticationError extends HayleeAIError {\n public readonly name: string = \"AuthenticationError\";\n\n constructor(message: string) {\n super(message);\n Object.setPrototypeOf(this, AuthenticationError.prototype);\n }\n}\n\n","import { IsEnum, IsString } from \"class-validator\";\n\n/** \n * DTO for creating a message\n * @property message - User message\n * @property conversation_history - Array of messages\n */\nexport class CreateMessageDto {\n /* Message to send */\n @IsString()\n message!: string;\n /* Array of messages */\n conversation_history!: IHistoryPayload[];\n}\n\n/*\n * @enum Role - Role of message\n */\nexport enum Role {\n HUMAN = \"human\",\n AI = \"ai\"\n}\n\n\n/**\n * History payload\n * @property role - Role of message sender\n * @property content - Content of message\n */\nexport class IHistoryPayload {\n @IsEnum(Role)\n role!: Role;\n @IsString()\n content!: string;\n};\n"],"mappings":"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","names":["EventKind","ToolStatus","Role"]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DTO for creating a message
|
|
3
|
+
* @property message - User message
|
|
4
|
+
* @property conversation_history - Array of messages
|
|
5
|
+
*/
|
|
6
|
+
declare class CreateMessageDto {
|
|
7
|
+
message: string;
|
|
8
|
+
conversation_history: IHistoryPayload[];
|
|
9
|
+
}
|
|
10
|
+
declare enum Role {
|
|
11
|
+
HUMAN = "human",
|
|
12
|
+
AI = "ai"
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* History payload
|
|
16
|
+
* @property role - Role of message sender
|
|
17
|
+
* @property content - Content of message
|
|
18
|
+
*/
|
|
19
|
+
declare class IHistoryPayload {
|
|
20
|
+
role: Role;
|
|
21
|
+
content: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Options for the HayleeAI Client
|
|
26
|
+
* @property apiKey - API key for authentication
|
|
27
|
+
* @property baseUrl - Optional base URL, defaults to production
|
|
28
|
+
*/
|
|
29
|
+
type HayleeAIChatClientOptions = {
|
|
30
|
+
baseUrl?: string;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Internal HayleeAI Client. Do not use unless necessary.
|
|
34
|
+
* @class HayleeAIClient
|
|
35
|
+
* @property baseURL - Base URL to make requests to
|
|
36
|
+
*/
|
|
37
|
+
declare class HayleeAIClient {
|
|
38
|
+
/**
|
|
39
|
+
* @property baseURL - the base URL to make requests to
|
|
40
|
+
*/
|
|
41
|
+
private baseURL;
|
|
42
|
+
/**
|
|
43
|
+
* @param options - Auth, and baseURL
|
|
44
|
+
*/
|
|
45
|
+
constructor(options: HayleeAIChatClientOptions);
|
|
46
|
+
/**
|
|
47
|
+
* Internal stream callout
|
|
48
|
+
* @param payload - Message DTO
|
|
49
|
+
* @param [signal] - Abort signal
|
|
50
|
+
*/
|
|
51
|
+
_stream(payload: CreateMessageDto, signal?: AbortSignal): AsyncGenerator<string, void, unknown>;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
declare enum EventKind {
|
|
55
|
+
LLM_TOKEN = "llm_token",
|
|
56
|
+
TOOLS = "tools"
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Base event for Streaming
|
|
60
|
+
* @class BaseEvent
|
|
61
|
+
* @property kind - Used to separate streams
|
|
62
|
+
* @property node - Source node in langgraph
|
|
63
|
+
*/
|
|
64
|
+
declare class BaseEvent {
|
|
65
|
+
kind: EventKind;
|
|
66
|
+
/**
|
|
67
|
+
* @property node - Source node in langgraph
|
|
68
|
+
*/
|
|
69
|
+
node: string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* @class LLmTokenContent
|
|
73
|
+
*/
|
|
74
|
+
declare class LlmTokenContent {
|
|
75
|
+
/**
|
|
76
|
+
* @property type - Always text
|
|
77
|
+
*/
|
|
78
|
+
type: "text";
|
|
79
|
+
/**
|
|
80
|
+
* @property text - The text content
|
|
81
|
+
*/
|
|
82
|
+
text: string;
|
|
83
|
+
}
|
|
84
|
+
declare class LlmTokenEvent extends BaseEvent {
|
|
85
|
+
/**
|
|
86
|
+
* @property content - An array of LlmTokenContent. Always an array. Non-empty or empty. Make sure to handle all items in the array.
|
|
87
|
+
*/
|
|
88
|
+
content: LlmTokenContent[];
|
|
89
|
+
/**
|
|
90
|
+
* @property model - The LLM model used.
|
|
91
|
+
*/
|
|
92
|
+
model: string;
|
|
93
|
+
}
|
|
94
|
+
declare class EndEvent {
|
|
95
|
+
success: boolean;
|
|
96
|
+
}
|
|
97
|
+
interface ToolEvent extends BaseEvent {
|
|
98
|
+
content?: ToolContent;
|
|
99
|
+
name: string;
|
|
100
|
+
tool_call_id?: string;
|
|
101
|
+
status: ToolStatus;
|
|
102
|
+
results: ToolResultContent[];
|
|
103
|
+
}
|
|
104
|
+
declare enum ToolStatus {
|
|
105
|
+
START = "START",
|
|
106
|
+
END = "END",
|
|
107
|
+
ERROR = "ERROR"
|
|
108
|
+
}
|
|
109
|
+
interface ToolContent {
|
|
110
|
+
params: unknown;
|
|
111
|
+
}
|
|
112
|
+
interface ToolResultContent {
|
|
113
|
+
type: string;
|
|
114
|
+
content: any;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* @property onLlmToken - Streams llm tokens for output
|
|
119
|
+
* @property onSearchUpdate - Streams pending / done updates along with search results if status is DONE
|
|
120
|
+
* @property onError - Streams errors on runtime
|
|
121
|
+
* @property signal - AbortSignal for terminating the upstream stream
|
|
122
|
+
*/
|
|
123
|
+
interface MessageServiceOptions {
|
|
124
|
+
/**
|
|
125
|
+
* Streams llm tokens for output
|
|
126
|
+
* @param ev - LlmTokenEvent
|
|
127
|
+
*/
|
|
128
|
+
onLlmToken?(ev: LlmTokenEvent): void;
|
|
129
|
+
/**
|
|
130
|
+
* triggers upon stream end
|
|
131
|
+
* @param ev - EndEvent
|
|
132
|
+
* */
|
|
133
|
+
onEnd?(ev: EndEvent): void;
|
|
134
|
+
/**
|
|
135
|
+
* Streams tool start updates
|
|
136
|
+
* @param ev - ToolEvent
|
|
137
|
+
*/
|
|
138
|
+
onToolStart?(ev: ToolEvent): void;
|
|
139
|
+
/**
|
|
140
|
+
* Streams tool end updates
|
|
141
|
+
* @param ev - ToolEvent
|
|
142
|
+
*/
|
|
143
|
+
onToolEnd?(ev: ToolEvent): void;
|
|
144
|
+
/**
|
|
145
|
+
* Streams errors on runtime
|
|
146
|
+
* @param err - Error or unknown value
|
|
147
|
+
*/
|
|
148
|
+
onError?(err: unknown): void;
|
|
149
|
+
/**
|
|
150
|
+
* @property signal - Abort signal to abort the stream
|
|
151
|
+
*/
|
|
152
|
+
signal?: AbortSignal;
|
|
153
|
+
}
|
|
154
|
+
declare class MessageService {
|
|
155
|
+
private readonly client;
|
|
156
|
+
constructor(client: HayleeAIClient);
|
|
157
|
+
/**
|
|
158
|
+
* @param payload - The create message payload
|
|
159
|
+
* @param options - Config for streaming
|
|
160
|
+
*/
|
|
161
|
+
stream(payload: CreateMessageDto, options?: MessageServiceOptions): Promise<void>;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
declare class HayleeAIError extends Error {
|
|
165
|
+
readonly name: string;
|
|
166
|
+
constructor(message: string);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
declare class ValidationError extends HayleeAIError {
|
|
170
|
+
details?: any | undefined;
|
|
171
|
+
readonly name: string;
|
|
172
|
+
constructor(message: string, details?: any | undefined);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
declare class NotFoundError extends HayleeAIError {
|
|
176
|
+
readonly name: string;
|
|
177
|
+
constructor(message: string);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
declare class AuthorizationError extends HayleeAIError {
|
|
181
|
+
readonly name: string;
|
|
182
|
+
constructor(message: string);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
declare class AuthenticationError extends HayleeAIError {
|
|
186
|
+
readonly name: string;
|
|
187
|
+
constructor(message: string);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Instantiate a new HayleeAI connection
|
|
192
|
+
*/
|
|
193
|
+
declare class HayleeAI extends HayleeAIClient {
|
|
194
|
+
messages: MessageService;
|
|
195
|
+
/**
|
|
196
|
+
* @param options - HayleeAIChatClientOptions
|
|
197
|
+
*/
|
|
198
|
+
constructor(options: HayleeAIChatClientOptions);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export { AuthenticationError, AuthorizationError, BaseEvent, CreateMessageDto, EndEvent, EventKind, HayleeAI, type HayleeAIChatClientOptions, HayleeAIClient, HayleeAIError, IHistoryPayload, LlmTokenContent, LlmTokenEvent, MessageService, type MessageServiceOptions, NotFoundError, Role, type ToolContent, type ToolEvent, type ToolResultContent, ToolStatus, ValidationError };
|