@alquimia-ai/tools 1.0.3 → 1.0.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/dist/actions/index.d.mts +19 -1
- package/dist/actions/index.d.ts +19 -1
- package/dist/actions/index.js +152 -12
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/index.mjs +152 -12
- package/dist/actions/index.mjs.map +1 -1
- package/dist/hooks/index.js +11 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +11 -0
- package/dist/hooks/index.mjs.map +1 -1
- package/package.json +2 -2
package/dist/actions/index.d.mts
CHANGED
|
@@ -19,4 +19,22 @@ declare function readResource<T>(config: BaseAPIConfig, id?: string): Promise<Ac
|
|
|
19
19
|
declare function updateResource<T>(config: BaseAPIConfig, id: string, data: T): Promise<ActionResponse<T>>;
|
|
20
20
|
declare function deleteResource(config: BaseAPIConfig, id: string): Promise<ActionResponse<void>>;
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
type ChatRouteContext = {
|
|
23
|
+
params: {
|
|
24
|
+
path: string[];
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
type ChatRequestConfig = {
|
|
28
|
+
assistantBaseUrl: string;
|
|
29
|
+
apiKey: string;
|
|
30
|
+
};
|
|
31
|
+
type ChatResponse = Response | any;
|
|
32
|
+
declare function handleChatRequest(request: Request, context: ChatRouteContext, config: ChatRequestConfig): Promise<ChatResponse>;
|
|
33
|
+
declare function handleStreamRequest(request: Request, context: ChatRouteContext, config: ChatRequestConfig): Promise<Response>;
|
|
34
|
+
|
|
35
|
+
type ApmRequestConfig = {
|
|
36
|
+
apmServerUrl: string;
|
|
37
|
+
};
|
|
38
|
+
declare function handleApmRequest(request: Request, config: ApmRequestConfig): Promise<Response>;
|
|
39
|
+
|
|
40
|
+
export { type ApmRequestConfig, type ChatRequestConfig, type ChatResponse, type ChatRouteContext, createResource, deleteResource, handleApmRequest, handleChatRequest, handleStreamRequest, initConversation, readResource, updateResource };
|
package/dist/actions/index.d.ts
CHANGED
|
@@ -19,4 +19,22 @@ declare function readResource<T>(config: BaseAPIConfig, id?: string): Promise<Ac
|
|
|
19
19
|
declare function updateResource<T>(config: BaseAPIConfig, id: string, data: T): Promise<ActionResponse<T>>;
|
|
20
20
|
declare function deleteResource(config: BaseAPIConfig, id: string): Promise<ActionResponse<void>>;
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
type ChatRouteContext = {
|
|
23
|
+
params: {
|
|
24
|
+
path: string[];
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
type ChatRequestConfig = {
|
|
28
|
+
assistantBaseUrl: string;
|
|
29
|
+
apiKey: string;
|
|
30
|
+
};
|
|
31
|
+
type ChatResponse = Response | any;
|
|
32
|
+
declare function handleChatRequest(request: Request, context: ChatRouteContext, config: ChatRequestConfig): Promise<ChatResponse>;
|
|
33
|
+
declare function handleStreamRequest(request: Request, context: ChatRouteContext, config: ChatRequestConfig): Promise<Response>;
|
|
34
|
+
|
|
35
|
+
type ApmRequestConfig = {
|
|
36
|
+
apmServerUrl: string;
|
|
37
|
+
};
|
|
38
|
+
declare function handleApmRequest(request: Request, config: ApmRequestConfig): Promise<Response>;
|
|
39
|
+
|
|
40
|
+
export { type ApmRequestConfig, type ChatRequestConfig, type ChatResponse, type ChatRouteContext, createResource, deleteResource, handleApmRequest, handleChatRequest, handleStreamRequest, initConversation, readResource, updateResource };
|
package/dist/actions/index.js
CHANGED
|
@@ -22,6 +22,9 @@ var actions_exports = {};
|
|
|
22
22
|
__export(actions_exports, {
|
|
23
23
|
createResource: () => createResource,
|
|
24
24
|
deleteResource: () => deleteResource,
|
|
25
|
+
handleApmRequest: () => handleApmRequest,
|
|
26
|
+
handleChatRequest: () => handleChatRequest,
|
|
27
|
+
handleStreamRequest: () => handleStreamRequest,
|
|
25
28
|
initConversation: () => initConversation,
|
|
26
29
|
readResource: () => readResource,
|
|
27
30
|
updateResource: () => updateResource
|
|
@@ -63,18 +66,18 @@ async function initConversation(reset, topicId) {
|
|
|
63
66
|
|
|
64
67
|
// src/utils/utils.ts
|
|
65
68
|
function generateHeaders(config) {
|
|
66
|
-
const
|
|
69
|
+
const headers3 = {
|
|
67
70
|
"Content-Type": "application/json"
|
|
68
71
|
};
|
|
69
72
|
if (config.token) {
|
|
70
|
-
|
|
73
|
+
headers3["Authorization"] = `Bearer ${config.token}`;
|
|
71
74
|
}
|
|
72
75
|
if (config.headers) {
|
|
73
76
|
Object.entries(config.headers).forEach(([key, value]) => {
|
|
74
|
-
|
|
77
|
+
headers3[key] = value;
|
|
75
78
|
});
|
|
76
79
|
}
|
|
77
|
-
return
|
|
80
|
+
return headers3;
|
|
78
81
|
}
|
|
79
82
|
function isTextContent(buffer) {
|
|
80
83
|
try {
|
|
@@ -88,10 +91,10 @@ function isTextContent(buffer) {
|
|
|
88
91
|
// src/actions/baseApi.action.ts
|
|
89
92
|
async function createResource(config, payload) {
|
|
90
93
|
try {
|
|
91
|
-
const
|
|
94
|
+
const headers3 = generateHeaders(config);
|
|
92
95
|
const response = await fetch(`${config.baseUrl}${config.route}`, {
|
|
93
96
|
method: "POST",
|
|
94
|
-
headers,
|
|
97
|
+
headers: headers3,
|
|
95
98
|
body: JSON.stringify(payload),
|
|
96
99
|
cache: "default"
|
|
97
100
|
});
|
|
@@ -119,11 +122,11 @@ async function createResource(config, payload) {
|
|
|
119
122
|
}
|
|
120
123
|
async function readResource(config, id) {
|
|
121
124
|
try {
|
|
122
|
-
const
|
|
125
|
+
const headers3 = generateHeaders(config);
|
|
123
126
|
const url = id ? `${config.baseUrl}${config.route}/${id}` : `${config.baseUrl}${config.route}`;
|
|
124
127
|
const response = await fetch(url, {
|
|
125
128
|
method: "GET",
|
|
126
|
-
headers,
|
|
129
|
+
headers: headers3,
|
|
127
130
|
cache: "default"
|
|
128
131
|
});
|
|
129
132
|
if (!response.ok) {
|
|
@@ -167,10 +170,10 @@ async function readResource(config, id) {
|
|
|
167
170
|
}
|
|
168
171
|
async function updateResource(config, id, data) {
|
|
169
172
|
try {
|
|
170
|
-
const
|
|
173
|
+
const headers3 = generateHeaders(config);
|
|
171
174
|
const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {
|
|
172
175
|
method: "PUT",
|
|
173
|
-
headers,
|
|
176
|
+
headers: headers3,
|
|
174
177
|
body: JSON.stringify(data),
|
|
175
178
|
cache: "default"
|
|
176
179
|
});
|
|
@@ -198,10 +201,10 @@ async function updateResource(config, id, data) {
|
|
|
198
201
|
}
|
|
199
202
|
async function deleteResource(config, id) {
|
|
200
203
|
try {
|
|
201
|
-
const
|
|
204
|
+
const headers3 = generateHeaders(config);
|
|
202
205
|
const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {
|
|
203
206
|
method: "DELETE",
|
|
204
|
-
headers,
|
|
207
|
+
headers: headers3,
|
|
205
208
|
cache: "default"
|
|
206
209
|
});
|
|
207
210
|
if (!response.ok) {
|
|
@@ -225,4 +228,141 @@ async function deleteResource(config, id) {
|
|
|
225
228
|
throw new Error("Failed to delete resource");
|
|
226
229
|
}
|
|
227
230
|
}
|
|
231
|
+
|
|
232
|
+
// src/actions/chat.action.ts
|
|
233
|
+
var import_server = require("next/server");
|
|
234
|
+
var import_headers2 = require("next/headers");
|
|
235
|
+
async function handleChatRequest(request, context, config) {
|
|
236
|
+
try {
|
|
237
|
+
const headersList = await (0, import_headers2.headers)();
|
|
238
|
+
const body = await request.json();
|
|
239
|
+
const routeParams = await context.params;
|
|
240
|
+
const routePath = routeParams.path.join("/");
|
|
241
|
+
const assistantUrl = `${config.assistantBaseUrl}/infer/${routePath}`;
|
|
242
|
+
const response = await fetch(assistantUrl, {
|
|
243
|
+
method: "POST",
|
|
244
|
+
headers: {
|
|
245
|
+
"Content-Type": "application/json",
|
|
246
|
+
Authorization: `Bearer ${config.apiKey}`,
|
|
247
|
+
...headersList
|
|
248
|
+
},
|
|
249
|
+
body: JSON.stringify(body)
|
|
250
|
+
});
|
|
251
|
+
if (!response.ok) {
|
|
252
|
+
const errorJson = await response.json();
|
|
253
|
+
console.error("Chat inference server error:", {
|
|
254
|
+
status: response.status,
|
|
255
|
+
statusText: response.statusText,
|
|
256
|
+
body: errorJson
|
|
257
|
+
});
|
|
258
|
+
return import_server.NextResponse.json(
|
|
259
|
+
{
|
|
260
|
+
error: errorJson.message || response.statusText || "Failed to forward Chat data"
|
|
261
|
+
},
|
|
262
|
+
{ status: response.status }
|
|
263
|
+
);
|
|
264
|
+
}
|
|
265
|
+
return new import_server.NextResponse(response.body, {
|
|
266
|
+
status: 200,
|
|
267
|
+
headers: {
|
|
268
|
+
"Access-Control-Allow-Origin": "*",
|
|
269
|
+
"Access-Control-Allow-Methods": "POST, OPTIONS",
|
|
270
|
+
"Access-Control-Allow-Headers": "Content-Type, Content-Encoding"
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
} catch (error) {
|
|
274
|
+
return import_server.NextResponse.json(
|
|
275
|
+
{ error: "Failed to forward Chat data" },
|
|
276
|
+
{ status: 500 }
|
|
277
|
+
);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
async function handleStreamRequest(request, context, config) {
|
|
281
|
+
try {
|
|
282
|
+
const headersList = await (0, import_headers2.headers)();
|
|
283
|
+
const routeParams = context.params;
|
|
284
|
+
const path = routeParams.path.join("/");
|
|
285
|
+
const streamUrl = `${config.assistantBaseUrl}/stream/${path}`;
|
|
286
|
+
const response = await fetch(streamUrl, {
|
|
287
|
+
headers: {
|
|
288
|
+
"Content-Type": "application/json",
|
|
289
|
+
Authorization: `Bearer ${config.apiKey}`,
|
|
290
|
+
...Object.fromEntries(headersList.entries())
|
|
291
|
+
}
|
|
292
|
+
});
|
|
293
|
+
if (!response.ok) {
|
|
294
|
+
const errorJson = await response.json();
|
|
295
|
+
console.error("Stream server error:", {
|
|
296
|
+
status: response.status,
|
|
297
|
+
statusText: response.statusText,
|
|
298
|
+
body: errorJson
|
|
299
|
+
});
|
|
300
|
+
return new Response(
|
|
301
|
+
JSON.stringify({
|
|
302
|
+
error: errorJson.message || response.statusText || "Failed to forward Stream data"
|
|
303
|
+
}),
|
|
304
|
+
{ status: response.status }
|
|
305
|
+
);
|
|
306
|
+
}
|
|
307
|
+
return new Response(response.body, {
|
|
308
|
+
status: 200,
|
|
309
|
+
headers: {
|
|
310
|
+
"Content-Type": "text/event-stream",
|
|
311
|
+
"Cache-Control": "no-cache",
|
|
312
|
+
Connection: "keep-alive"
|
|
313
|
+
}
|
|
314
|
+
});
|
|
315
|
+
} catch (error) {
|
|
316
|
+
console.error("Stream error:", error);
|
|
317
|
+
return new Response(
|
|
318
|
+
JSON.stringify({ error: "Failed to forward stream data" }),
|
|
319
|
+
{ status: 500 }
|
|
320
|
+
);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
// src/actions/apm.action.ts
|
|
325
|
+
var import_headers3 = require("next/headers");
|
|
326
|
+
async function handleApmRequest(request, config) {
|
|
327
|
+
try {
|
|
328
|
+
const headersList = await (0, import_headers3.headers)();
|
|
329
|
+
const body = await request.arrayBuffer();
|
|
330
|
+
const apmUrl = `${config.apmServerUrl}/intake/v2/rum/events`;
|
|
331
|
+
const response = await fetch(apmUrl, {
|
|
332
|
+
method: "POST",
|
|
333
|
+
headers: {
|
|
334
|
+
"Content-Type": "application/x-ndjson",
|
|
335
|
+
Accept: "*/*",
|
|
336
|
+
"Content-Encoding": "gzip",
|
|
337
|
+
"User-Agent": "elastic-apm-rum/5.15.0"
|
|
338
|
+
},
|
|
339
|
+
body
|
|
340
|
+
});
|
|
341
|
+
if (!response.ok) {
|
|
342
|
+
const errorText = await response.text();
|
|
343
|
+
console.error("APM server error:", {
|
|
344
|
+
status: response.status,
|
|
345
|
+
statusText: response.statusText,
|
|
346
|
+
body: errorText
|
|
347
|
+
});
|
|
348
|
+
throw new Error(
|
|
349
|
+
`APM server responded with ${response.status}: ${errorText}`
|
|
350
|
+
);
|
|
351
|
+
}
|
|
352
|
+
return new Response(null, {
|
|
353
|
+
status: 200,
|
|
354
|
+
headers: {
|
|
355
|
+
"Access-Control-Allow-Origin": "*",
|
|
356
|
+
"Access-Control-Allow-Methods": "POST, OPTIONS",
|
|
357
|
+
"Access-Control-Allow-Headers": "Content-Type, Content-Encoding"
|
|
358
|
+
}
|
|
359
|
+
});
|
|
360
|
+
} catch (error) {
|
|
361
|
+
console.error("APM proxy error:", error);
|
|
362
|
+
return new Response(
|
|
363
|
+
JSON.stringify({ error: "Failed to forward APM data" }),
|
|
364
|
+
{ status: 500 }
|
|
365
|
+
);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
228
368
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/actions/index.ts","../../src/actions/alquimia.action.ts","../../src/utils/utils.ts","../../src/actions/baseApi.action.ts"],"sourcesContent":["export * from './alquimia.action'\nexport * from './baseApi.action'","'use server'\nimport { randomUUID } from \"crypto\";\nimport { cookies } from \"next/headers\";\nimport { ConversationsMap } from \"../types/type\";\n\nexport async function initConversation(reset?: boolean, topicId?: string) {\n const cookieStore = await cookies();\n\n if (!topicId) {\n let conversationId = randomUUID().toString();\n const alquimia_session = cookieStore.get(\"alquimia-session\");\n\n if (!alquimia_session || reset) {\n cookieStore.set(\"alquimia-session\", conversationId);\n } else {\n conversationId = alquimia_session.value;\n }\n\n return conversationId;\n }\n\n let conversationsMap: ConversationsMap = {};\n const existingConversations = cookieStore.get(\"alquimia-sessions\");\n \n if (existingConversations) {\n try {\n const decodedValue = decodeURIComponent(existingConversations.value);\n conversationsMap = JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error('Error parsing conversations cookie:', e);\n conversationsMap = {};\n }\n }\n\n if (!conversationsMap[topicId] || reset) {\n conversationsMap[topicId] = randomUUID().toString();\n }\n\n cookieStore.set(\"alquimia-sessions\", JSON.stringify(conversationsMap));\n \n return conversationsMap[topicId];\n}","import { BaseAPIConfig, ApiError, ConversationsMap } from \"../types/type\";\n\nexport function generateTranslatePrompt(text: string) {\n const prompt = `\n Arrange the following text according to the given object structure and return it as plain json, values summarized to one word, no formatting:\n {\n restrictions: {\n value: [''],\n description: 'Restrictions to certain foods'\n },\n alergies: {\n value: [''],\n description: 'Alergies to certain foods'\n },\n wine_preference: {\n value: [''],\n description: 'Preferences for the wine'\n },\n meal_preference: {\n value: [''],\n description: 'Preferences for the meal'\n }\n }\n\n Text: \"${text}\"\n\n Output:\n `;\n\n return prompt;\n}\n\nexport function getCookies(name: string) {\n if (typeof document === 'undefined') return undefined;\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) return parts.pop()?.split(\";\").shift();\n}\n\nexport function generateHeaders(config: BaseAPIConfig): HeadersInit {\n const headers: HeadersInit = {\n \"Content-Type\": \"application/json\",\n };\n\n if (config.token) {\n headers[\"Authorization\"] = `Bearer ${config.token}`;\n }\n\n if (config.headers) {\n Object.entries(config.headers).forEach(([key, value]) => {\n headers[key] = value;\n });\n }\n\n return headers;\n}\n\nexport function isTextContent(buffer: ArrayBuffer): boolean {\n try {\n const text = new TextDecoder().decode(buffer);\n return /^[\\w\\#\\-\\*]/.test(text.trim());\n } catch {\n return false;\n }\n}\n\nexport function getQueryParam(param: string): string | null {\n if (typeof window !== 'undefined') {\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(param);\n }\n return null;\n}\n\nexport function defineAssistantId(defaultId: string): string {\n if (typeof window !== 'undefined' && window.location.pathname === '/') {\n const queryAssistantId = getQueryParam('talkwith');\n if (queryAssistantId) {\n localStorage.setItem('assistantId', queryAssistantId);\n return queryAssistantId;\n }\n const storedAssistantId = localStorage.getItem('assistantId');\n return storedAssistantId || defaultId;\n }\n return defaultId;\n}\n\nexport function formatTimeWithUnit(timeMs: number): string {\n if (timeMs >= 1000) {\n return `${(timeMs / 1000).toFixed(1)}s`;\n }\n return `${Math.round(timeMs)}ms`;\n};\n\nexport function serializeAxiosError(error: unknown){\n if (error instanceof Error) {\n const customError = error as ApiError;\n return {\n message: customError?.message, \n name: customError?.name,\n stack: customError?.stack,\n code: customError?.code,\n status: customError?.status,\n };\n }\n return {\n message: String(error),\n name: 'Unknown Error',\n };\n};\n\nexport function parseConversationsMapCookie(cookieValue: string): ConversationsMap {\n try {\n const decodedValue = decodeURIComponent(cookieValue);\n return JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error('Error parsing conversations cookie:', e);\n return {};\n }\n}\n\nexport function getTopicSessionId(topicId: string): string {\n const conversationsStr = getCookies(\"alquimia-sessions\") || \"{}\";\n if (!conversationsStr) {\n const sessionCookie = getCookies(\"alquimia-session\");\n return sessionCookie || \"\";\n }\n\n const conversationsMap = parseConversationsMapCookie(conversationsStr);\n return conversationsMap[topicId] || \"\";\n}\n\nexport function createMessageId() {\n return Math.floor(Math.random() * 1000000).toString();\n}\n\n\n","\"use server\";\nimport { BaseAPIConfig } from \"../types/type\";\nimport { generateHeaders, isTextContent } from \"../utils\";\n\ninterface ActionResponse<T = void> {\n success: boolean;\n data?: T;\n contentType?: string;\n error?: {\n message: string;\n code?: string;\n details?: any;\n };\n}\n\nexport async function createResource<TResponse, TPayload>(\n config: BaseAPIConfig,\n payload: TPayload\n): Promise<ActionResponse<TResponse>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n \n return {\n success: true,\n data: await response.json(),\n };\n } catch (error) {\n throw new Error(\"Failed to create resource\");\n }\n}\n\nexport async function readResource<T>(\n config: BaseAPIConfig,\n id?: string\n): Promise<ActionResponse<T>> {\n try {\n const headers = generateHeaders(config);\n const url = id\n ? `${config.baseUrl}${config.route}/${id}`\n : `${config.baseUrl}${config.route}`;\n\n const response = await fetch(url, {\n method: \"GET\",\n headers,\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n const contentType = response.headers.get(\"content-type\");\n if (contentType?.includes(\"application/json\")) {\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || undefined,\n };\n }\n\n const arrayBuffer = await response.arrayBuffer();\n\n if (contentType?.includes(\"octet-stream\") && isTextContent(arrayBuffer)) {\n return {\n success: true,\n data: arrayBuffer as T,\n contentType: \"text/plain\",\n };\n }\n\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || undefined,\n };\n } catch (error) {\n throw new Error(\"Failed to read resource\");\n }\n}\n\nexport async function updateResource<T>(\n config: BaseAPIConfig,\n id: string,\n data: T\n): Promise<ActionResponse<T>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"PUT\",\n headers,\n body: JSON.stringify(data),\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n return {\n success: true,\n data: await response.json(),\n };\n } catch (error) {\n throw new Error(\"Failed to update resource\");\n }\n}\n\nexport async function deleteResource(\n config: BaseAPIConfig,\n id: string\n): Promise<ActionResponse<void>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"DELETE\",\n headers,\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n return {\n success: true,\n };\n } catch (error) {\n throw new Error(\"Failed to delete resource\");\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/actions/index.ts","../../src/actions/alquimia.action.ts","../../src/utils/utils.ts","../../src/actions/baseApi.action.ts","../../src/actions/chat.action.ts","../../src/actions/apm.action.ts"],"sourcesContent":["export * from './alquimia.action'\nexport * from './baseApi.action'\nexport * from './chat.action'\nexport * from './apm.action'","'use server'\nimport { randomUUID } from \"crypto\";\nimport { cookies } from \"next/headers\";\nimport { ConversationsMap } from \"../types/type\";\n\nexport async function initConversation(reset?: boolean, topicId?: string) {\n const cookieStore = await cookies();\n\n if (!topicId) {\n let conversationId = randomUUID().toString();\n const alquimia_session = cookieStore.get(\"alquimia-session\");\n\n if (!alquimia_session || reset) {\n cookieStore.set(\"alquimia-session\", conversationId);\n } else {\n conversationId = alquimia_session.value;\n }\n\n return conversationId;\n }\n\n let conversationsMap: ConversationsMap = {};\n const existingConversations = cookieStore.get(\"alquimia-sessions\");\n \n if (existingConversations) {\n try {\n const decodedValue = decodeURIComponent(existingConversations.value);\n conversationsMap = JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error('Error parsing conversations cookie:', e);\n conversationsMap = {};\n }\n }\n\n if (!conversationsMap[topicId] || reset) {\n conversationsMap[topicId] = randomUUID().toString();\n }\n\n cookieStore.set(\"alquimia-sessions\", JSON.stringify(conversationsMap));\n \n return conversationsMap[topicId];\n}","import { BaseAPIConfig, ApiError, ConversationsMap } from \"../types/type\";\n\nexport function generateTranslatePrompt(text: string) {\n const prompt = `\n Arrange the following text according to the given object structure and return it as plain json, values summarized to one word, no formatting:\n {\n restrictions: {\n value: [''],\n description: 'Restrictions to certain foods'\n },\n alergies: {\n value: [''],\n description: 'Alergies to certain foods'\n },\n wine_preference: {\n value: [''],\n description: 'Preferences for the wine'\n },\n meal_preference: {\n value: [''],\n description: 'Preferences for the meal'\n }\n }\n\n Text: \"${text}\"\n\n Output:\n `;\n\n return prompt;\n}\n\nexport function getCookies(name: string) {\n if (typeof document === 'undefined') return undefined;\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) return parts.pop()?.split(\";\").shift();\n}\n\nexport function generateHeaders(config: BaseAPIConfig): HeadersInit {\n const headers: HeadersInit = {\n \"Content-Type\": \"application/json\",\n };\n\n if (config.token) {\n headers[\"Authorization\"] = `Bearer ${config.token}`;\n }\n\n if (config.headers) {\n Object.entries(config.headers).forEach(([key, value]) => {\n headers[key] = value;\n });\n }\n\n return headers;\n}\n\nexport function isTextContent(buffer: ArrayBuffer): boolean {\n try {\n const text = new TextDecoder().decode(buffer);\n return /^[\\w\\#\\-\\*]/.test(text.trim());\n } catch {\n return false;\n }\n}\n\nexport function getQueryParam(param: string): string | null {\n if (typeof window !== 'undefined') {\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(param);\n }\n return null;\n}\n\nexport function defineAssistantId(defaultId: string): string {\n if (typeof window !== 'undefined' && window.location.pathname === '/') {\n const queryAssistantId = getQueryParam('talkwith');\n if (queryAssistantId) {\n localStorage.setItem('assistantId', queryAssistantId);\n return queryAssistantId;\n }\n const storedAssistantId = localStorage.getItem('assistantId');\n return storedAssistantId || defaultId;\n }\n return defaultId;\n}\n\nexport function formatTimeWithUnit(timeMs: number): string {\n if (timeMs >= 1000) {\n return `${(timeMs / 1000).toFixed(1)}s`;\n }\n return `${Math.round(timeMs)}ms`;\n};\n\nexport function serializeAxiosError(error: unknown){\n if (error instanceof Error) {\n const customError = error as ApiError;\n return {\n message: customError?.message, \n name: customError?.name,\n stack: customError?.stack,\n code: customError?.code,\n status: customError?.status,\n };\n }\n return {\n message: String(error),\n name: 'Unknown Error',\n };\n};\n\nexport function parseConversationsMapCookie(cookieValue: string): ConversationsMap {\n try {\n const decodedValue = decodeURIComponent(cookieValue);\n return JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error('Error parsing conversations cookie:', e);\n return {};\n }\n}\n\nexport function getTopicSessionId(topicId: string): string {\n const conversationsStr = getCookies(\"alquimia-sessions\") || \"{}\";\n if (!conversationsStr) {\n const sessionCookie = getCookies(\"alquimia-session\");\n return sessionCookie || \"\";\n }\n\n const conversationsMap = parseConversationsMapCookie(conversationsStr);\n return conversationsMap[topicId] || \"\";\n}\n\nexport function createMessageId() {\n return Math.floor(Math.random() * 1000000).toString();\n}\n\n\n","\"use server\";\nimport { BaseAPIConfig } from \"../types/type\";\nimport { generateHeaders, isTextContent } from \"../utils\";\n\ninterface ActionResponse<T = void> {\n success: boolean;\n data?: T;\n contentType?: string;\n error?: {\n message: string;\n code?: string;\n details?: any;\n };\n}\n\nexport async function createResource<TResponse, TPayload>(\n config: BaseAPIConfig,\n payload: TPayload\n): Promise<ActionResponse<TResponse>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n \n return {\n success: true,\n data: await response.json(),\n };\n } catch (error) {\n throw new Error(\"Failed to create resource\");\n }\n}\n\nexport async function readResource<T>(\n config: BaseAPIConfig,\n id?: string\n): Promise<ActionResponse<T>> {\n try {\n const headers = generateHeaders(config);\n const url = id\n ? `${config.baseUrl}${config.route}/${id}`\n : `${config.baseUrl}${config.route}`;\n\n const response = await fetch(url, {\n method: \"GET\",\n headers,\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n const contentType = response.headers.get(\"content-type\");\n if (contentType?.includes(\"application/json\")) {\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || undefined,\n };\n }\n\n const arrayBuffer = await response.arrayBuffer();\n\n if (contentType?.includes(\"octet-stream\") && isTextContent(arrayBuffer)) {\n return {\n success: true,\n data: arrayBuffer as T,\n contentType: \"text/plain\",\n };\n }\n\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || undefined,\n };\n } catch (error) {\n throw new Error(\"Failed to read resource\");\n }\n}\n\nexport async function updateResource<T>(\n config: BaseAPIConfig,\n id: string,\n data: T\n): Promise<ActionResponse<T>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"PUT\",\n headers,\n body: JSON.stringify(data),\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n return {\n success: true,\n data: await response.json(),\n };\n } catch (error) {\n throw new Error(\"Failed to update resource\");\n }\n}\n\nexport async function deleteResource(\n config: BaseAPIConfig,\n id: string\n): Promise<ActionResponse<void>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"DELETE\",\n headers,\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n return {\n success: true,\n };\n } catch (error) {\n throw new Error(\"Failed to delete resource\");\n }\n}\n","import { NextResponse } from \"next/server\";\nimport { headers } from \"next/headers\";\n\nexport type ChatRouteContext = {\n params: {\n path: string[];\n };\n};\n\nexport type ChatRequestConfig = {\n assistantBaseUrl: string;\n apiKey: string;\n};\n\nexport type ChatResponse = Response | any;\n\nexport async function handleChatRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<ChatResponse> {\n try {\n const headersList = await headers();\n const body = await request.json();\n const routeParams = await context.params;\n const routePath = routeParams.path.join(\"/\");\n\n const assistantUrl = `${config.assistantBaseUrl}/infer/${routePath}`;\n\n const response = await fetch(assistantUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...headersList,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Chat inference server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return NextResponse.json(\n {\n error:\n errorJson.message ||\n response.statusText ||\n \"Failed to forward Chat data\",\n },\n { status: response.status }\n );\n }\n\n return new NextResponse(response.body, {\n status: 200,\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Content-Encoding\",\n },\n });\n } catch (error) {\n return NextResponse.json(\n { error: \"Failed to forward Chat data\" },\n { status: 500 }\n );\n }\n}\n\nexport async function handleStreamRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<Response> {\n try {\n const headersList = await headers();\n const routeParams = context.params;\n const path = routeParams.path.join(\"/\");\n\n const streamUrl = `${config.assistantBaseUrl}/stream/${path}`;\n\n const response = await fetch(streamUrl, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...Object.fromEntries(headersList.entries()),\n },\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Stream server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return new Response(\n JSON.stringify({\n error:\n errorJson.message ||\n response.statusText ||\n \"Failed to forward Stream data\",\n }),\n { status: response.status }\n );\n }\n\n return new Response(response.body, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Stream error:\", error);\n return new Response(\n JSON.stringify({ error: \"Failed to forward stream data\" }),\n { status: 500 }\n );\n }\n}\n\n","import { headers } from \"next/headers\";\n\nexport type ApmRequestConfig = {\n apmServerUrl: string;\n};\n\nexport async function handleApmRequest(\n request: Request,\n config: ApmRequestConfig\n): Promise<Response> {\n try {\n const headersList = await headers();\n const body = await request.arrayBuffer();\n\n const apmUrl = `${config.apmServerUrl}/intake/v2/rum/events`;\n\n const response = await fetch(apmUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-ndjson\",\n Accept: \"*/*\",\n \"Content-Encoding\": \"gzip\",\n \"User-Agent\": \"elastic-apm-rum/5.15.0\",\n },\n body: body,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n console.error(\"APM server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorText,\n });\n throw new Error(\n `APM server responded with ${response.status}: ${errorText}`\n );\n }\n\n return new Response(null, {\n status: 200,\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Content-Encoding\",\n },\n });\n } catch (error) {\n console.error(\"APM proxy error:\", error);\n return new Response(\n JSON.stringify({ error: \"Failed to forward APM data\" }),\n { status: 500 }\n );\n }\n}\n"],"mappings":"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","names":["headers","headers","import_headers","import_headers"]}
|
package/dist/actions/index.mjs
CHANGED
|
@@ -34,18 +34,18 @@ async function initConversation(reset, topicId) {
|
|
|
34
34
|
|
|
35
35
|
// src/utils/utils.ts
|
|
36
36
|
function generateHeaders(config) {
|
|
37
|
-
const
|
|
37
|
+
const headers3 = {
|
|
38
38
|
"Content-Type": "application/json"
|
|
39
39
|
};
|
|
40
40
|
if (config.token) {
|
|
41
|
-
|
|
41
|
+
headers3["Authorization"] = `Bearer ${config.token}`;
|
|
42
42
|
}
|
|
43
43
|
if (config.headers) {
|
|
44
44
|
Object.entries(config.headers).forEach(([key, value]) => {
|
|
45
|
-
|
|
45
|
+
headers3[key] = value;
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
|
-
return
|
|
48
|
+
return headers3;
|
|
49
49
|
}
|
|
50
50
|
function isTextContent(buffer) {
|
|
51
51
|
try {
|
|
@@ -59,10 +59,10 @@ function isTextContent(buffer) {
|
|
|
59
59
|
// src/actions/baseApi.action.ts
|
|
60
60
|
async function createResource(config, payload) {
|
|
61
61
|
try {
|
|
62
|
-
const
|
|
62
|
+
const headers3 = generateHeaders(config);
|
|
63
63
|
const response = await fetch(`${config.baseUrl}${config.route}`, {
|
|
64
64
|
method: "POST",
|
|
65
|
-
headers,
|
|
65
|
+
headers: headers3,
|
|
66
66
|
body: JSON.stringify(payload),
|
|
67
67
|
cache: "default"
|
|
68
68
|
});
|
|
@@ -90,11 +90,11 @@ async function createResource(config, payload) {
|
|
|
90
90
|
}
|
|
91
91
|
async function readResource(config, id) {
|
|
92
92
|
try {
|
|
93
|
-
const
|
|
93
|
+
const headers3 = generateHeaders(config);
|
|
94
94
|
const url = id ? `${config.baseUrl}${config.route}/${id}` : `${config.baseUrl}${config.route}`;
|
|
95
95
|
const response = await fetch(url, {
|
|
96
96
|
method: "GET",
|
|
97
|
-
headers,
|
|
97
|
+
headers: headers3,
|
|
98
98
|
cache: "default"
|
|
99
99
|
});
|
|
100
100
|
if (!response.ok) {
|
|
@@ -138,10 +138,10 @@ async function readResource(config, id) {
|
|
|
138
138
|
}
|
|
139
139
|
async function updateResource(config, id, data) {
|
|
140
140
|
try {
|
|
141
|
-
const
|
|
141
|
+
const headers3 = generateHeaders(config);
|
|
142
142
|
const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {
|
|
143
143
|
method: "PUT",
|
|
144
|
-
headers,
|
|
144
|
+
headers: headers3,
|
|
145
145
|
body: JSON.stringify(data),
|
|
146
146
|
cache: "default"
|
|
147
147
|
});
|
|
@@ -169,10 +169,10 @@ async function updateResource(config, id, data) {
|
|
|
169
169
|
}
|
|
170
170
|
async function deleteResource(config, id) {
|
|
171
171
|
try {
|
|
172
|
-
const
|
|
172
|
+
const headers3 = generateHeaders(config);
|
|
173
173
|
const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {
|
|
174
174
|
method: "DELETE",
|
|
175
|
-
headers,
|
|
175
|
+
headers: headers3,
|
|
176
176
|
cache: "default"
|
|
177
177
|
});
|
|
178
178
|
if (!response.ok) {
|
|
@@ -196,9 +196,149 @@ async function deleteResource(config, id) {
|
|
|
196
196
|
throw new Error("Failed to delete resource");
|
|
197
197
|
}
|
|
198
198
|
}
|
|
199
|
+
|
|
200
|
+
// src/actions/chat.action.ts
|
|
201
|
+
import { NextResponse } from "next/server";
|
|
202
|
+
import { headers } from "next/headers";
|
|
203
|
+
async function handleChatRequest(request, context, config) {
|
|
204
|
+
try {
|
|
205
|
+
const headersList = await headers();
|
|
206
|
+
const body = await request.json();
|
|
207
|
+
const routeParams = await context.params;
|
|
208
|
+
const routePath = routeParams.path.join("/");
|
|
209
|
+
const assistantUrl = `${config.assistantBaseUrl}/infer/${routePath}`;
|
|
210
|
+
const response = await fetch(assistantUrl, {
|
|
211
|
+
method: "POST",
|
|
212
|
+
headers: {
|
|
213
|
+
"Content-Type": "application/json",
|
|
214
|
+
Authorization: `Bearer ${config.apiKey}`,
|
|
215
|
+
...headersList
|
|
216
|
+
},
|
|
217
|
+
body: JSON.stringify(body)
|
|
218
|
+
});
|
|
219
|
+
if (!response.ok) {
|
|
220
|
+
const errorJson = await response.json();
|
|
221
|
+
console.error("Chat inference server error:", {
|
|
222
|
+
status: response.status,
|
|
223
|
+
statusText: response.statusText,
|
|
224
|
+
body: errorJson
|
|
225
|
+
});
|
|
226
|
+
return NextResponse.json(
|
|
227
|
+
{
|
|
228
|
+
error: errorJson.message || response.statusText || "Failed to forward Chat data"
|
|
229
|
+
},
|
|
230
|
+
{ status: response.status }
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
return new NextResponse(response.body, {
|
|
234
|
+
status: 200,
|
|
235
|
+
headers: {
|
|
236
|
+
"Access-Control-Allow-Origin": "*",
|
|
237
|
+
"Access-Control-Allow-Methods": "POST, OPTIONS",
|
|
238
|
+
"Access-Control-Allow-Headers": "Content-Type, Content-Encoding"
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
} catch (error) {
|
|
242
|
+
return NextResponse.json(
|
|
243
|
+
{ error: "Failed to forward Chat data" },
|
|
244
|
+
{ status: 500 }
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
async function handleStreamRequest(request, context, config) {
|
|
249
|
+
try {
|
|
250
|
+
const headersList = await headers();
|
|
251
|
+
const routeParams = context.params;
|
|
252
|
+
const path = routeParams.path.join("/");
|
|
253
|
+
const streamUrl = `${config.assistantBaseUrl}/stream/${path}`;
|
|
254
|
+
const response = await fetch(streamUrl, {
|
|
255
|
+
headers: {
|
|
256
|
+
"Content-Type": "application/json",
|
|
257
|
+
Authorization: `Bearer ${config.apiKey}`,
|
|
258
|
+
...Object.fromEntries(headersList.entries())
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
if (!response.ok) {
|
|
262
|
+
const errorJson = await response.json();
|
|
263
|
+
console.error("Stream server error:", {
|
|
264
|
+
status: response.status,
|
|
265
|
+
statusText: response.statusText,
|
|
266
|
+
body: errorJson
|
|
267
|
+
});
|
|
268
|
+
return new Response(
|
|
269
|
+
JSON.stringify({
|
|
270
|
+
error: errorJson.message || response.statusText || "Failed to forward Stream data"
|
|
271
|
+
}),
|
|
272
|
+
{ status: response.status }
|
|
273
|
+
);
|
|
274
|
+
}
|
|
275
|
+
return new Response(response.body, {
|
|
276
|
+
status: 200,
|
|
277
|
+
headers: {
|
|
278
|
+
"Content-Type": "text/event-stream",
|
|
279
|
+
"Cache-Control": "no-cache",
|
|
280
|
+
Connection: "keep-alive"
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
} catch (error) {
|
|
284
|
+
console.error("Stream error:", error);
|
|
285
|
+
return new Response(
|
|
286
|
+
JSON.stringify({ error: "Failed to forward stream data" }),
|
|
287
|
+
{ status: 500 }
|
|
288
|
+
);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// src/actions/apm.action.ts
|
|
293
|
+
import { headers as headers2 } from "next/headers";
|
|
294
|
+
async function handleApmRequest(request, config) {
|
|
295
|
+
try {
|
|
296
|
+
const headersList = await headers2();
|
|
297
|
+
const body = await request.arrayBuffer();
|
|
298
|
+
const apmUrl = `${config.apmServerUrl}/intake/v2/rum/events`;
|
|
299
|
+
const response = await fetch(apmUrl, {
|
|
300
|
+
method: "POST",
|
|
301
|
+
headers: {
|
|
302
|
+
"Content-Type": "application/x-ndjson",
|
|
303
|
+
Accept: "*/*",
|
|
304
|
+
"Content-Encoding": "gzip",
|
|
305
|
+
"User-Agent": "elastic-apm-rum/5.15.0"
|
|
306
|
+
},
|
|
307
|
+
body
|
|
308
|
+
});
|
|
309
|
+
if (!response.ok) {
|
|
310
|
+
const errorText = await response.text();
|
|
311
|
+
console.error("APM server error:", {
|
|
312
|
+
status: response.status,
|
|
313
|
+
statusText: response.statusText,
|
|
314
|
+
body: errorText
|
|
315
|
+
});
|
|
316
|
+
throw new Error(
|
|
317
|
+
`APM server responded with ${response.status}: ${errorText}`
|
|
318
|
+
);
|
|
319
|
+
}
|
|
320
|
+
return new Response(null, {
|
|
321
|
+
status: 200,
|
|
322
|
+
headers: {
|
|
323
|
+
"Access-Control-Allow-Origin": "*",
|
|
324
|
+
"Access-Control-Allow-Methods": "POST, OPTIONS",
|
|
325
|
+
"Access-Control-Allow-Headers": "Content-Type, Content-Encoding"
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
} catch (error) {
|
|
329
|
+
console.error("APM proxy error:", error);
|
|
330
|
+
return new Response(
|
|
331
|
+
JSON.stringify({ error: "Failed to forward APM data" }),
|
|
332
|
+
{ status: 500 }
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
199
336
|
export {
|
|
200
337
|
createResource,
|
|
201
338
|
deleteResource,
|
|
339
|
+
handleApmRequest,
|
|
340
|
+
handleChatRequest,
|
|
341
|
+
handleStreamRequest,
|
|
202
342
|
initConversation,
|
|
203
343
|
readResource,
|
|
204
344
|
updateResource
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/actions/alquimia.action.ts","../../src/utils/utils.ts","../../src/actions/baseApi.action.ts"],"sourcesContent":["'use server'\nimport { randomUUID } from \"crypto\";\nimport { cookies } from \"next/headers\";\nimport { ConversationsMap } from \"../types/type\";\n\nexport async function initConversation(reset?: boolean, topicId?: string) {\n const cookieStore = await cookies();\n\n if (!topicId) {\n let conversationId = randomUUID().toString();\n const alquimia_session = cookieStore.get(\"alquimia-session\");\n\n if (!alquimia_session || reset) {\n cookieStore.set(\"alquimia-session\", conversationId);\n } else {\n conversationId = alquimia_session.value;\n }\n\n return conversationId;\n }\n\n let conversationsMap: ConversationsMap = {};\n const existingConversations = cookieStore.get(\"alquimia-sessions\");\n \n if (existingConversations) {\n try {\n const decodedValue = decodeURIComponent(existingConversations.value);\n conversationsMap = JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error('Error parsing conversations cookie:', e);\n conversationsMap = {};\n }\n }\n\n if (!conversationsMap[topicId] || reset) {\n conversationsMap[topicId] = randomUUID().toString();\n }\n\n cookieStore.set(\"alquimia-sessions\", JSON.stringify(conversationsMap));\n \n return conversationsMap[topicId];\n}","import { BaseAPIConfig, ApiError, ConversationsMap } from \"../types/type\";\n\nexport function generateTranslatePrompt(text: string) {\n const prompt = `\n Arrange the following text according to the given object structure and return it as plain json, values summarized to one word, no formatting:\n {\n restrictions: {\n value: [''],\n description: 'Restrictions to certain foods'\n },\n alergies: {\n value: [''],\n description: 'Alergies to certain foods'\n },\n wine_preference: {\n value: [''],\n description: 'Preferences for the wine'\n },\n meal_preference: {\n value: [''],\n description: 'Preferences for the meal'\n }\n }\n\n Text: \"${text}\"\n\n Output:\n `;\n\n return prompt;\n}\n\nexport function getCookies(name: string) {\n if (typeof document === 'undefined') return undefined;\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) return parts.pop()?.split(\";\").shift();\n}\n\nexport function generateHeaders(config: BaseAPIConfig): HeadersInit {\n const headers: HeadersInit = {\n \"Content-Type\": \"application/json\",\n };\n\n if (config.token) {\n headers[\"Authorization\"] = `Bearer ${config.token}`;\n }\n\n if (config.headers) {\n Object.entries(config.headers).forEach(([key, value]) => {\n headers[key] = value;\n });\n }\n\n return headers;\n}\n\nexport function isTextContent(buffer: ArrayBuffer): boolean {\n try {\n const text = new TextDecoder().decode(buffer);\n return /^[\\w\\#\\-\\*]/.test(text.trim());\n } catch {\n return false;\n }\n}\n\nexport function getQueryParam(param: string): string | null {\n if (typeof window !== 'undefined') {\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(param);\n }\n return null;\n}\n\nexport function defineAssistantId(defaultId: string): string {\n if (typeof window !== 'undefined' && window.location.pathname === '/') {\n const queryAssistantId = getQueryParam('talkwith');\n if (queryAssistantId) {\n localStorage.setItem('assistantId', queryAssistantId);\n return queryAssistantId;\n }\n const storedAssistantId = localStorage.getItem('assistantId');\n return storedAssistantId || defaultId;\n }\n return defaultId;\n}\n\nexport function formatTimeWithUnit(timeMs: number): string {\n if (timeMs >= 1000) {\n return `${(timeMs / 1000).toFixed(1)}s`;\n }\n return `${Math.round(timeMs)}ms`;\n};\n\nexport function serializeAxiosError(error: unknown){\n if (error instanceof Error) {\n const customError = error as ApiError;\n return {\n message: customError?.message, \n name: customError?.name,\n stack: customError?.stack,\n code: customError?.code,\n status: customError?.status,\n };\n }\n return {\n message: String(error),\n name: 'Unknown Error',\n };\n};\n\nexport function parseConversationsMapCookie(cookieValue: string): ConversationsMap {\n try {\n const decodedValue = decodeURIComponent(cookieValue);\n return JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error('Error parsing conversations cookie:', e);\n return {};\n }\n}\n\nexport function getTopicSessionId(topicId: string): string {\n const conversationsStr = getCookies(\"alquimia-sessions\") || \"{}\";\n if (!conversationsStr) {\n const sessionCookie = getCookies(\"alquimia-session\");\n return sessionCookie || \"\";\n }\n\n const conversationsMap = parseConversationsMapCookie(conversationsStr);\n return conversationsMap[topicId] || \"\";\n}\n\nexport function createMessageId() {\n return Math.floor(Math.random() * 1000000).toString();\n}\n\n\n","\"use server\";\nimport { BaseAPIConfig } from \"../types/type\";\nimport { generateHeaders, isTextContent } from \"../utils\";\n\ninterface ActionResponse<T = void> {\n success: boolean;\n data?: T;\n contentType?: string;\n error?: {\n message: string;\n code?: string;\n details?: any;\n };\n}\n\nexport async function createResource<TResponse, TPayload>(\n config: BaseAPIConfig,\n payload: TPayload\n): Promise<ActionResponse<TResponse>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n \n return {\n success: true,\n data: await response.json(),\n };\n } catch (error) {\n throw new Error(\"Failed to create resource\");\n }\n}\n\nexport async function readResource<T>(\n config: BaseAPIConfig,\n id?: string\n): Promise<ActionResponse<T>> {\n try {\n const headers = generateHeaders(config);\n const url = id\n ? `${config.baseUrl}${config.route}/${id}`\n : `${config.baseUrl}${config.route}`;\n\n const response = await fetch(url, {\n method: \"GET\",\n headers,\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n const contentType = response.headers.get(\"content-type\");\n if (contentType?.includes(\"application/json\")) {\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || undefined,\n };\n }\n\n const arrayBuffer = await response.arrayBuffer();\n\n if (contentType?.includes(\"octet-stream\") && isTextContent(arrayBuffer)) {\n return {\n success: true,\n data: arrayBuffer as T,\n contentType: \"text/plain\",\n };\n }\n\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || undefined,\n };\n } catch (error) {\n throw new Error(\"Failed to read resource\");\n }\n}\n\nexport async function updateResource<T>(\n config: BaseAPIConfig,\n id: string,\n data: T\n): Promise<ActionResponse<T>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"PUT\",\n headers,\n body: JSON.stringify(data),\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n return {\n success: true,\n data: await response.json(),\n };\n } catch (error) {\n throw new Error(\"Failed to update resource\");\n }\n}\n\nexport async function deleteResource(\n config: BaseAPIConfig,\n id: string\n): Promise<ActionResponse<void>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"DELETE\",\n headers,\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n return {\n success: true,\n };\n } catch (error) {\n throw new Error(\"Failed to delete resource\");\n }\n}\n"],"mappings":";AACA,SAAS,kBAAkB;AAC3B,SAAS,eAAe;AAGxB,eAAsB,iBAAiB,OAAiB,SAAkB;AACxE,QAAM,cAAc,MAAM,QAAQ;AAElC,MAAI,CAAC,SAAS;AACZ,QAAI,iBAAiB,WAAW,EAAE,SAAS;AAC3C,UAAM,mBAAmB,YAAY,IAAI,kBAAkB;AAE3D,QAAI,CAAC,oBAAoB,OAAO;AAC9B,kBAAY,IAAI,oBAAoB,cAAc;AAAA,IACpD,OAAO;AACL,uBAAiB,iBAAiB;AAAA,IACpC;AAEA,WAAO;AAAA,EACT;AAEA,MAAI,mBAAqC,CAAC;AAC1C,QAAM,wBAAwB,YAAY,IAAI,mBAAmB;AAEjE,MAAI,uBAAuB;AACzB,QAAI;AACF,YAAM,eAAe,mBAAmB,sBAAsB,KAAK;AACnE,yBAAmB,KAAK,MAAM,YAAY;AAAA,IAC5C,SAAS,GAAG;AACV,cAAQ,MAAM,uCAAuC,CAAC;AACtD,yBAAmB,CAAC;AAAA,IACtB;AAAA,EACF;AAEA,MAAI,CAAC,iBAAiB,OAAO,KAAK,OAAO;AACvC,qBAAiB,OAAO,IAAI,WAAW,EAAE,SAAS;AAAA,EACpD;AAEA,cAAY,IAAI,qBAAqB,KAAK,UAAU,gBAAgB,CAAC;AAErE,SAAO,iBAAiB,OAAO;AACjC;;;ACFO,SAAS,gBAAgB,QAAoC;AAClE,QAAM,UAAuB;AAAA,IAC3B,gBAAgB;AAAA,EAClB;AAEA,MAAI,OAAO,OAAO;AAChB,YAAQ,eAAe,IAAI,UAAU,OAAO,KAAK;AAAA,EACnD;AAEA,MAAI,OAAO,SAAS;AAClB,WAAO,QAAQ,OAAO,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACvD,cAAQ,GAAG,IAAI;AAAA,IACjB,CAAC;AAAA,EACH;AAEA,SAAO;AACT;AAEO,SAAS,cAAc,QAA8B;AAC1D,MAAI;AACF,UAAM,OAAO,IAAI,YAAY,EAAE,OAAO,MAAM;AAC5C,WAAO,cAAc,KAAK,KAAK,KAAK,CAAC;AAAA,EACvC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;ACjDA,eAAsB,eACpB,QACA,SACoC;AACpC,MAAI;AACF,UAAM,UAAU,gBAAgB,MAAM;AAEtC,UAAM,WAAW,MAAM,MAAM,GAAG,OAAO,OAAO,GAAG,OAAO,KAAK,IAAI;AAAA,MAC/D,QAAQ;AAAA,MACR;AAAA,MACA,MAAM,KAAK,UAAU,OAAO;AAAA,MAC5B,OAAO;AAAA,IACT,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,QAAQ,MAAM,SAAS,KAAK;AAClC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL,SAAS,MAAM,WAAW,mBAAmB,SAAS,MAAM;AAAA,UAC5D,MAAM,SAAS,OAAO,SAAS;AAAA,UAC/B,SAAS;AAAA,YACP,QAAQ,SAAS;AAAA,YACjB,YAAY,SAAS;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,MAAM,SAAS,KAAK;AAAA,IAC5B;AAAA,EACF,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AACF;AAEA,eAAsB,aACpB,QACA,IAC4B;AAC5B,MAAI;AACF,UAAM,UAAU,gBAAgB,MAAM;AACtC,UAAM,MAAM,KACR,GAAG,OAAO,OAAO,GAAG,OAAO,KAAK,IAAI,EAAE,KACtC,GAAG,OAAO,OAAO,GAAG,OAAO,KAAK;AAEpC,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,QAAQ;AAAA,MACR;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,QAAQ,MAAM,SAAS,KAAK;AAClC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL,SAAS,MAAM,WAAW,mBAAmB,SAAS,MAAM;AAAA,UAC5D,MAAM,SAAS,OAAO,SAAS;AAAA,UAC/B,SAAS;AAAA,YACP,QAAQ,SAAS;AAAA,YACjB,YAAY,SAAS;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,cAAc,SAAS,QAAQ,IAAI,cAAc;AACvD,QAAI,aAAa,SAAS,kBAAkB,GAAG;AAC7C,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM,MAAM,SAAS,KAAK;AAAA,QAC1B,aAAa,eAAe;AAAA,MAC9B;AAAA,IACF;AAEA,UAAM,cAAc,MAAM,SAAS,YAAY;AAE/C,QAAI,aAAa,SAAS,cAAc,KAAK,cAAc,WAAW,GAAG;AACvE,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,MAAM,SAAS,KAAK;AAAA,MAC1B,aAAa,eAAe;AAAA,IAC9B;AAAA,EACF,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AACF;AAEA,eAAsB,eACpB,QACA,IACA,MAC4B;AAC5B,MAAI;AACF,UAAM,UAAU,gBAAgB,MAAM;AAEtC,UAAM,WAAW,MAAM,MAAM,GAAG,OAAO,OAAO,GAAG,OAAO,KAAK,IAAI,EAAE,IAAI;AAAA,MACrE,QAAQ;AAAA,MACR;AAAA,MACA,MAAM,KAAK,UAAU,IAAI;AAAA,MACzB,OAAO;AAAA,IACT,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,QAAQ,MAAM,SAAS,KAAK;AAClC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL,SAAS,MAAM,WAAW,mBAAmB,SAAS,MAAM;AAAA,UAC5D,MAAM,SAAS,OAAO,SAAS;AAAA,UAC/B,SAAS;AAAA,YACP,QAAQ,SAAS;AAAA,YACjB,YAAY,SAAS;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,MAAM,SAAS,KAAK;AAAA,IAC5B;AAAA,EACF,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AACF;AAEA,eAAsB,eACpB,QACA,IAC+B;AAC/B,MAAI;AACF,UAAM,UAAU,gBAAgB,MAAM;AAEtC,UAAM,WAAW,MAAM,MAAM,GAAG,OAAO,OAAO,GAAG,OAAO,KAAK,IAAI,EAAE,IAAI;AAAA,MACrE,QAAQ;AAAA,MACR;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,QAAQ,MAAM,SAAS,KAAK;AAClC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL,SAAS,MAAM,WAAW,mBAAmB,SAAS,MAAM;AAAA,UAC5D,MAAM,SAAS,OAAO,SAAS;AAAA,UAC/B,SAAS;AAAA,YACP,QAAQ,SAAS;AAAA,YACjB,YAAY,SAAS;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,IACX;AAAA,EACF,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AACF;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/actions/alquimia.action.ts","../../src/utils/utils.ts","../../src/actions/baseApi.action.ts","../../src/actions/chat.action.ts","../../src/actions/apm.action.ts"],"sourcesContent":["'use server'\nimport { randomUUID } from \"crypto\";\nimport { cookies } from \"next/headers\";\nimport { ConversationsMap } from \"../types/type\";\n\nexport async function initConversation(reset?: boolean, topicId?: string) {\n const cookieStore = await cookies();\n\n if (!topicId) {\n let conversationId = randomUUID().toString();\n const alquimia_session = cookieStore.get(\"alquimia-session\");\n\n if (!alquimia_session || reset) {\n cookieStore.set(\"alquimia-session\", conversationId);\n } else {\n conversationId = alquimia_session.value;\n }\n\n return conversationId;\n }\n\n let conversationsMap: ConversationsMap = {};\n const existingConversations = cookieStore.get(\"alquimia-sessions\");\n \n if (existingConversations) {\n try {\n const decodedValue = decodeURIComponent(existingConversations.value);\n conversationsMap = JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error('Error parsing conversations cookie:', e);\n conversationsMap = {};\n }\n }\n\n if (!conversationsMap[topicId] || reset) {\n conversationsMap[topicId] = randomUUID().toString();\n }\n\n cookieStore.set(\"alquimia-sessions\", JSON.stringify(conversationsMap));\n \n return conversationsMap[topicId];\n}","import { BaseAPIConfig, ApiError, ConversationsMap } from \"../types/type\";\n\nexport function generateTranslatePrompt(text: string) {\n const prompt = `\n Arrange the following text according to the given object structure and return it as plain json, values summarized to one word, no formatting:\n {\n restrictions: {\n value: [''],\n description: 'Restrictions to certain foods'\n },\n alergies: {\n value: [''],\n description: 'Alergies to certain foods'\n },\n wine_preference: {\n value: [''],\n description: 'Preferences for the wine'\n },\n meal_preference: {\n value: [''],\n description: 'Preferences for the meal'\n }\n }\n\n Text: \"${text}\"\n\n Output:\n `;\n\n return prompt;\n}\n\nexport function getCookies(name: string) {\n if (typeof document === 'undefined') return undefined;\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) return parts.pop()?.split(\";\").shift();\n}\n\nexport function generateHeaders(config: BaseAPIConfig): HeadersInit {\n const headers: HeadersInit = {\n \"Content-Type\": \"application/json\",\n };\n\n if (config.token) {\n headers[\"Authorization\"] = `Bearer ${config.token}`;\n }\n\n if (config.headers) {\n Object.entries(config.headers).forEach(([key, value]) => {\n headers[key] = value;\n });\n }\n\n return headers;\n}\n\nexport function isTextContent(buffer: ArrayBuffer): boolean {\n try {\n const text = new TextDecoder().decode(buffer);\n return /^[\\w\\#\\-\\*]/.test(text.trim());\n } catch {\n return false;\n }\n}\n\nexport function getQueryParam(param: string): string | null {\n if (typeof window !== 'undefined') {\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(param);\n }\n return null;\n}\n\nexport function defineAssistantId(defaultId: string): string {\n if (typeof window !== 'undefined' && window.location.pathname === '/') {\n const queryAssistantId = getQueryParam('talkwith');\n if (queryAssistantId) {\n localStorage.setItem('assistantId', queryAssistantId);\n return queryAssistantId;\n }\n const storedAssistantId = localStorage.getItem('assistantId');\n return storedAssistantId || defaultId;\n }\n return defaultId;\n}\n\nexport function formatTimeWithUnit(timeMs: number): string {\n if (timeMs >= 1000) {\n return `${(timeMs / 1000).toFixed(1)}s`;\n }\n return `${Math.round(timeMs)}ms`;\n};\n\nexport function serializeAxiosError(error: unknown){\n if (error instanceof Error) {\n const customError = error as ApiError;\n return {\n message: customError?.message, \n name: customError?.name,\n stack: customError?.stack,\n code: customError?.code,\n status: customError?.status,\n };\n }\n return {\n message: String(error),\n name: 'Unknown Error',\n };\n};\n\nexport function parseConversationsMapCookie(cookieValue: string): ConversationsMap {\n try {\n const decodedValue = decodeURIComponent(cookieValue);\n return JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error('Error parsing conversations cookie:', e);\n return {};\n }\n}\n\nexport function getTopicSessionId(topicId: string): string {\n const conversationsStr = getCookies(\"alquimia-sessions\") || \"{}\";\n if (!conversationsStr) {\n const sessionCookie = getCookies(\"alquimia-session\");\n return sessionCookie || \"\";\n }\n\n const conversationsMap = parseConversationsMapCookie(conversationsStr);\n return conversationsMap[topicId] || \"\";\n}\n\nexport function createMessageId() {\n return Math.floor(Math.random() * 1000000).toString();\n}\n\n\n","\"use server\";\nimport { BaseAPIConfig } from \"../types/type\";\nimport { generateHeaders, isTextContent } from \"../utils\";\n\ninterface ActionResponse<T = void> {\n success: boolean;\n data?: T;\n contentType?: string;\n error?: {\n message: string;\n code?: string;\n details?: any;\n };\n}\n\nexport async function createResource<TResponse, TPayload>(\n config: BaseAPIConfig,\n payload: TPayload\n): Promise<ActionResponse<TResponse>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n \n return {\n success: true,\n data: await response.json(),\n };\n } catch (error) {\n throw new Error(\"Failed to create resource\");\n }\n}\n\nexport async function readResource<T>(\n config: BaseAPIConfig,\n id?: string\n): Promise<ActionResponse<T>> {\n try {\n const headers = generateHeaders(config);\n const url = id\n ? `${config.baseUrl}${config.route}/${id}`\n : `${config.baseUrl}${config.route}`;\n\n const response = await fetch(url, {\n method: \"GET\",\n headers,\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n const contentType = response.headers.get(\"content-type\");\n if (contentType?.includes(\"application/json\")) {\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || undefined,\n };\n }\n\n const arrayBuffer = await response.arrayBuffer();\n\n if (contentType?.includes(\"octet-stream\") && isTextContent(arrayBuffer)) {\n return {\n success: true,\n data: arrayBuffer as T,\n contentType: \"text/plain\",\n };\n }\n\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || undefined,\n };\n } catch (error) {\n throw new Error(\"Failed to read resource\");\n }\n}\n\nexport async function updateResource<T>(\n config: BaseAPIConfig,\n id: string,\n data: T\n): Promise<ActionResponse<T>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"PUT\",\n headers,\n body: JSON.stringify(data),\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n return {\n success: true,\n data: await response.json(),\n };\n } catch (error) {\n throw new Error(\"Failed to update resource\");\n }\n}\n\nexport async function deleteResource(\n config: BaseAPIConfig,\n id: string\n): Promise<ActionResponse<void>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"DELETE\",\n headers,\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n return {\n success: true,\n };\n } catch (error) {\n throw new Error(\"Failed to delete resource\");\n }\n}\n","import { NextResponse } from \"next/server\";\nimport { headers } from \"next/headers\";\n\nexport type ChatRouteContext = {\n params: {\n path: string[];\n };\n};\n\nexport type ChatRequestConfig = {\n assistantBaseUrl: string;\n apiKey: string;\n};\n\nexport type ChatResponse = Response | any;\n\nexport async function handleChatRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<ChatResponse> {\n try {\n const headersList = await headers();\n const body = await request.json();\n const routeParams = await context.params;\n const routePath = routeParams.path.join(\"/\");\n\n const assistantUrl = `${config.assistantBaseUrl}/infer/${routePath}`;\n\n const response = await fetch(assistantUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...headersList,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Chat inference server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return NextResponse.json(\n {\n error:\n errorJson.message ||\n response.statusText ||\n \"Failed to forward Chat data\",\n },\n { status: response.status }\n );\n }\n\n return new NextResponse(response.body, {\n status: 200,\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Content-Encoding\",\n },\n });\n } catch (error) {\n return NextResponse.json(\n { error: \"Failed to forward Chat data\" },\n { status: 500 }\n );\n }\n}\n\nexport async function handleStreamRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<Response> {\n try {\n const headersList = await headers();\n const routeParams = context.params;\n const path = routeParams.path.join(\"/\");\n\n const streamUrl = `${config.assistantBaseUrl}/stream/${path}`;\n\n const response = await fetch(streamUrl, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...Object.fromEntries(headersList.entries()),\n },\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Stream server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return new Response(\n JSON.stringify({\n error:\n errorJson.message ||\n response.statusText ||\n \"Failed to forward Stream data\",\n }),\n { status: response.status }\n );\n }\n\n return new Response(response.body, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Stream error:\", error);\n return new Response(\n JSON.stringify({ error: \"Failed to forward stream data\" }),\n { status: 500 }\n );\n }\n}\n\n","import { headers } from \"next/headers\";\n\nexport type ApmRequestConfig = {\n apmServerUrl: string;\n};\n\nexport async function handleApmRequest(\n request: Request,\n config: ApmRequestConfig\n): Promise<Response> {\n try {\n const headersList = await headers();\n const body = await request.arrayBuffer();\n\n const apmUrl = `${config.apmServerUrl}/intake/v2/rum/events`;\n\n const response = await fetch(apmUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-ndjson\",\n Accept: \"*/*\",\n \"Content-Encoding\": \"gzip\",\n \"User-Agent\": \"elastic-apm-rum/5.15.0\",\n },\n body: body,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n console.error(\"APM server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorText,\n });\n throw new Error(\n `APM server responded with ${response.status}: ${errorText}`\n );\n }\n\n return new Response(null, {\n status: 200,\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Content-Encoding\",\n },\n });\n } catch (error) {\n console.error(\"APM proxy error:\", error);\n return new Response(\n JSON.stringify({ error: \"Failed to forward APM data\" }),\n { status: 500 }\n );\n }\n}\n"],"mappings":"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","names":["headers","headers","headers"]}
|
package/dist/hooks/index.js
CHANGED
|
@@ -175,6 +175,17 @@ function useAlquimia(sdk) {
|
|
|
175
175
|
setLastRequest(message);
|
|
176
176
|
const response = await sdk.widthConversationId(conversationId || "").sendMessage(message, traceParentId);
|
|
177
177
|
const es = new EventSource(response.getUrlStream());
|
|
178
|
+
es.onerror = (event) => {
|
|
179
|
+
console.error("EventSource error:", event);
|
|
180
|
+
callBack({
|
|
181
|
+
type: "error",
|
|
182
|
+
error_code: "EVENT_SOURCE_ERROR",
|
|
183
|
+
error_detail: "Stream server error occurred"
|
|
184
|
+
});
|
|
185
|
+
setIsMessageStreaming(false);
|
|
186
|
+
setStreamingMessageId(null);
|
|
187
|
+
es.close();
|
|
188
|
+
};
|
|
178
189
|
es.onmessage = (event) => {
|
|
179
190
|
const parsedData = JSON.parse(event.data);
|
|
180
191
|
if (parsedData.tooler && parsedData.tooler.length > 0 && !activeTool) {
|
package/dist/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/index.ts","../../src/hooks/alquimia.hook.tsx","../../src/utils/utils.ts","../../src/hooks/useRatings.ts"],"sourcesContent":["export { useAlquimia } from \"./alquimia.hook\";\nexport { useRatings } from \"./useRatings\";","import { Message } from \"ai\";\n\nimport { useEffect, useState } from \"react\";\nimport { AlquimiaSDK } from \"../sdk\";\nimport { AIMessageChunk } from \"../types/type\";\nimport { createMessageId } from \"../utils\";\nexport function useAlquimia(sdk: AlquimiaSDK) {\n const [chunkReceived, setChunkReceived] = useState<string>(\"\");\n const [currentMessageIdChuncked, setCurrentMessageIdChuncked] =\n useState<string>(\"\");\n const [input, setInput] = useState<string>(\"\");\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isMessageStreaming, setIsMessageStreaming] = useState<boolean>(false);\n const [streamingMessageId, setStreamingMessageId] = useState<string | null>(null);\n const [isAudioRecording, setIsAudioRecording] = useState<boolean>(false);\n const [messageMetaData, setMessageMetaData] = useState<any>(null);\n const [messages, setMessages] = useState<\n (Message & { error_code?: string; error_detail?: string })[]\n >([]);\n const [sessionId, setSessionId] = useState<string | null>(null);\n const [activeTool, setActiveTool] = useState<any | null>(null);\n const [lastRequest, setLastRequest] = useState<string | null>(null);\n\n\n useEffect(() => {\n if (chunkReceived)\n processMessageChunk(currentMessageIdChuncked, chunkReceived);\n }, [chunkReceived]);\n\n\n function cleanMessages() {\n setMessages([]);\n }\n async function processMessageChunk(\n messageId: string,\n chunk: string,\n error_code?: string,\n error_detail?: string,\n additionalInfo?: string\n ) {\n setMessages((currentMessages) => {\n const messageIndex = currentMessages.findIndex(\n (message) => message.id === messageId\n );\n if (messageIndex !== -1) {\n const updatedMessages = [...currentMessages];\n\n const updatedMessage: Message & {\n error_code?: string;\n created_at?: string;\n error_detail?: string;\n additionalInfo?: string;\n } = {\n ...updatedMessages[messageIndex],\n content: `${updatedMessages[messageIndex]?.content || \"\"}${chunk}`,\n id: updatedMessages[messageIndex]?.id || \"\",\n role: updatedMessages[messageIndex]?.role || \"assistant\",\n error_code,\n error_detail,\n additionalInfo,\n created_at: new Date().getTime().toString(),\n };\n updatedMessages[messageIndex] = updatedMessage;\n return updatedMessages;\n } else {\n return [\n ...currentMessages,\n {\n content: `${chunk}`,\n role: \"assistant\",\n id: messageId,\n error_code,\n error_detail,\n created_at: new Date().getTime().toString(),\n },\n ];\n }\n });\n }\n\n async function handleSubmit(event: React.FormEvent<HTMLFormElement>, traceParentId?: string, sessionId?: string, additionalInfo?: string) {\n setIsLoading(true);\n event.preventDefault();\n \n if (input) {\n addUserMessage(input);\n const messageId = createMessageId();\n setCurrentMessageIdChuncked(messageId);\n setStreamingMessageId(messageId);\n await sendMessage(input, (chunk: AIMessageChunk) => {\n processMessageChunk(\n messageId,\n chunk?.data?.content || \"\",\n chunk?.error_code,\n chunk?.error_detail,\n additionalInfo\n );\n }, traceParentId, sessionId);\n setInput(\"\");\n }\n setIsLoading(false);\n }\n\n function handleInputChange(event: React.ChangeEvent<HTMLInputElement>) {\n setInput(event.target.value);\n }\n\n function handleReplaceInput(input: string) {\n setInput(input);\n }\n\n function populateMessages(messages: Message[]) {\n setMessages(messages);\n }\n\n function handleLoadingCancel() {\n setIsLoading(false);\n setIsMessageStreaming(false);\n setInput(\"\");\n }\n\n function addUserMessage(message: string) {\n setMessages((prevMessages: Message[]) => [\n ...prevMessages,\n {\n content: message,\n role: \"user\",\n id: createMessageId(),\n created_at: new Date().getTime().toString(),\n },\n ]);\n }\n\n function getCookie(name: string): string | null {\n const cookies = document.cookie.split(\";\");\n for (let cookie of cookies) {\n const [cookieName, cookieValue] = cookie.trim().split(\"=\");\n if (cookieName === name) {\n return decodeURIComponent(cookieValue as string);\n }\n }\n return null;\n }\n\n async function sendMessage(\n message: string,\n callBack: (chunk: AIMessageChunk) => void,\n traceParentId?: string,\n sessionId?: string\n ) {\n const conversationId = sessionId || getCookie(\"alquimia-session\");\n setIsMessageStreaming(true);\n setActiveTool(null);\n setLastRequest(message);\n\n const response = await sdk.widthConversationId(conversationId || \"\").sendMessage(message, traceParentId);\n \n const es = new EventSource(response.getUrlStream())\n es.onmessage = (event: any) => {\n const parsedData = JSON.parse(event.data);\n\n if (parsedData.tooler && parsedData.tooler.length > 0 && !activeTool) {\n setActiveTool({\n tooler: parsedData.tooler,\n });\n }\n\n if (parsedData.error_code) {\n callBack({\n type: \"error\",\n error_code: parsedData.error_code,\n error_detail: parsedData.error_detail,\n });\n }\n\n if (parsedData.is_complete) {\n setIsMessageStreaming(false);\n setStreamingMessageId(null)\n es.close();\n } else {\n callBack(parsedData.answer);\n }\n };\n }\n\n return {\n activeTool,\n cleanMessages,\n createMessageId,\n handleInputChange,\n handleReplaceInput,\n handleSubmit,\n handleLoadingCancel,\n input,\n isLoading,\n isMessageStreaming,\n streamingMessageId,\n isAudioRecording,\n lastRequest,\n messageMetaData,\n messages,\n populateMessages,\n processMessageChunk,\n sendMessage,\n sessionId,\n setActiveTool,\n setSessionId,\n setLastRequest,\n setIsAudioRecording,\n };\n}\n","import { BaseAPIConfig, ApiError, ConversationsMap } from \"../types/type\";\n\nexport function generateTranslatePrompt(text: string) {\n const prompt = `\n Arrange the following text according to the given object structure and return it as plain json, values summarized to one word, no formatting:\n {\n restrictions: {\n value: [''],\n description: 'Restrictions to certain foods'\n },\n alergies: {\n value: [''],\n description: 'Alergies to certain foods'\n },\n wine_preference: {\n value: [''],\n description: 'Preferences for the wine'\n },\n meal_preference: {\n value: [''],\n description: 'Preferences for the meal'\n }\n }\n\n Text: \"${text}\"\n\n Output:\n `;\n\n return prompt;\n}\n\nexport function getCookies(name: string) {\n if (typeof document === 'undefined') return undefined;\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) return parts.pop()?.split(\";\").shift();\n}\n\nexport function generateHeaders(config: BaseAPIConfig): HeadersInit {\n const headers: HeadersInit = {\n \"Content-Type\": \"application/json\",\n };\n\n if (config.token) {\n headers[\"Authorization\"] = `Bearer ${config.token}`;\n }\n\n if (config.headers) {\n Object.entries(config.headers).forEach(([key, value]) => {\n headers[key] = value;\n });\n }\n\n return headers;\n}\n\nexport function isTextContent(buffer: ArrayBuffer): boolean {\n try {\n const text = new TextDecoder().decode(buffer);\n return /^[\\w\\#\\-\\*]/.test(text.trim());\n } catch {\n return false;\n }\n}\n\nexport function getQueryParam(param: string): string | null {\n if (typeof window !== 'undefined') {\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(param);\n }\n return null;\n}\n\nexport function defineAssistantId(defaultId: string): string {\n if (typeof window !== 'undefined' && window.location.pathname === '/') {\n const queryAssistantId = getQueryParam('talkwith');\n if (queryAssistantId) {\n localStorage.setItem('assistantId', queryAssistantId);\n return queryAssistantId;\n }\n const storedAssistantId = localStorage.getItem('assistantId');\n return storedAssistantId || defaultId;\n }\n return defaultId;\n}\n\nexport function formatTimeWithUnit(timeMs: number): string {\n if (timeMs >= 1000) {\n return `${(timeMs / 1000).toFixed(1)}s`;\n }\n return `${Math.round(timeMs)}ms`;\n};\n\nexport function serializeAxiosError(error: unknown){\n if (error instanceof Error) {\n const customError = error as ApiError;\n return {\n message: customError?.message, \n name: customError?.name,\n stack: customError?.stack,\n code: customError?.code,\n status: customError?.status,\n };\n }\n return {\n message: String(error),\n name: 'Unknown Error',\n };\n};\n\nexport function parseConversationsMapCookie(cookieValue: string): ConversationsMap {\n try {\n const decodedValue = decodeURIComponent(cookieValue);\n return JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error('Error parsing conversations cookie:', e);\n return {};\n }\n}\n\nexport function getTopicSessionId(topicId: string): string {\n const conversationsStr = getCookies(\"alquimia-sessions\") || \"{}\";\n if (!conversationsStr) {\n const sessionCookie = getCookies(\"alquimia-session\");\n return sessionCookie || \"\";\n }\n\n const conversationsMap = parseConversationsMapCookie(conversationsStr);\n return conversationsMap[topicId] || \"\";\n}\n\nexport function createMessageId() {\n return Math.floor(Math.random() * 1000000).toString();\n}\n\n\n","\nimport { useState, useReducer } from \"react\";\nimport { RatingData } from \"../types/type\";\nimport { getTopicSessionId } from \"../utils/utils\";\n\ninterface RatingState {\n ratingStars: number;\n ratingThumbs: \"thumbsUp\" | \"thumbsDown\" | \"\";\n ratingComment: string;\n}\n\ntype RatingAction =\n | { type: \"SET_RATING_STARS\"; payload: number }\n | { type: \"SET_RATING_THUMBS\"; payload: \"thumbsUp\" | \"thumbsDown\" | \"\" }\n | { type: \"SET_RATING_COMMENT\"; payload: string };\n\nconst initialState: RatingState = {\n ratingStars: 0,\n ratingThumbs: \"\",\n ratingComment: \"\",\n};\n\nfunction ratingReducer(state: RatingState, action: RatingAction): RatingState {\n switch (action.type) {\n case \"SET_RATING_STARS\":\n return { ...state, ratingStars: action.payload };\n case \"SET_RATING_THUMBS\":\n return { ...state, ratingThumbs: action.payload };\n case \"SET_RATING_COMMENT\":\n return { ...state, ratingComment: action.payload };\n default:\n return state;\n }\n}\n\ninterface UseRatingsParams {\n assistantId: string;\n topicId: string;\n sendRating: (ratingData: RatingData) => Promise<any>;\n onError?: (componentName: string, error: Error) => void;\n}\n\n\nexport function useRatings({ assistantId, sendRating, topicId }: UseRatingsParams) {\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [hasReviewed, setHasReviewed] = useState<boolean>(false);\n const [state, dispatch] = useReducer(ratingReducer, initialState);\n\n const setRatingStars = (rating: number) => {\n dispatch({ type: \"SET_RATING_STARS\", payload: rating });\n };\n\n const setRatingThumbs = (rating: \"thumbsUp\" | \"thumbsDown\" | \"\") => {\n dispatch({ type: \"SET_RATING_THUMBS\", payload: rating });\n };\n\n const setRatingComment = (comment: string) => {\n dispatch({ type: \"SET_RATING_COMMENT\", payload: comment });\n };\n\n const thumbsScore = (value: string) => {\n return value === \"thumbsUp\" ? 5 : value === \"thumbsDown\" ? 0 : 0;\n }\n\n const handleRate = async (key: string, value: any | string, onHandleRateSuccess: (success: boolean, err?: string) => void) => {\n setIsLoading(true);\n const sessionId = getTopicSessionId(topicId);\n\n const ratingObj: RatingData = {\n topicId: parseInt(topicId),\n sessionId: sessionId || \"\",\n assistantId: assistantId,\n score: key === \"score\" ? value : thumbsScore(value),\n description: key === \"description\" ? value : state.ratingComment,\n };\n\n try {\n const response = await sendRating(ratingObj);\n if (!response.success) {\n setIsLoading(false);\n onHandleRateSuccess(false, response.error.message);\n return;\n }\n \n if (key === \"score\") {\n setRatingStars(value);\n } else if (key === \"description\") {\n setRatingComment(value);\n }\n setHasReviewed(true);\n setIsLoading(false);\n onHandleRateSuccess(true);\n } catch (err) {\n setIsLoading(false);\n onHandleRateSuccess(false, String(err));\n }\n };\n\n return {\n handleRate,\n ratingStars: state.ratingStars,\n ratingThumbs: state.ratingThumbs,\n ratingComment: state.ratingComment,\n isLoading,\n hasReviewed\n };\n}\n"],"mappings":"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","names":["sessionId","input","messages","import_react"]}
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/index.ts","../../src/hooks/alquimia.hook.tsx","../../src/utils/utils.ts","../../src/hooks/useRatings.ts"],"sourcesContent":["export { useAlquimia } from \"./alquimia.hook\";\nexport { useRatings } from \"./useRatings\";","import { Message } from \"ai\";\n\nimport { useEffect, useState } from \"react\";\nimport { AlquimiaSDK } from \"../sdk\";\nimport { AIMessageChunk } from \"../types/type\";\nimport { createMessageId } from \"../utils\";\nexport function useAlquimia(sdk: AlquimiaSDK) {\n const [chunkReceived, setChunkReceived] = useState<string>(\"\");\n const [currentMessageIdChuncked, setCurrentMessageIdChuncked] =\n useState<string>(\"\");\n const [input, setInput] = useState<string>(\"\");\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isMessageStreaming, setIsMessageStreaming] = useState<boolean>(false);\n const [streamingMessageId, setStreamingMessageId] = useState<string | null>(null);\n const [isAudioRecording, setIsAudioRecording] = useState<boolean>(false);\n const [messageMetaData, setMessageMetaData] = useState<any>(null);\n const [messages, setMessages] = useState<\n (Message & { error_code?: string; error_detail?: string })[]\n >([]);\n const [sessionId, setSessionId] = useState<string | null>(null);\n const [activeTool, setActiveTool] = useState<any | null>(null);\n const [lastRequest, setLastRequest] = useState<string | null>(null);\n\n\n useEffect(() => {\n if (chunkReceived)\n processMessageChunk(currentMessageIdChuncked, chunkReceived);\n }, [chunkReceived]);\n\n\n function cleanMessages() {\n setMessages([]);\n }\n async function processMessageChunk(\n messageId: string,\n chunk: string,\n error_code?: string,\n error_detail?: string,\n additionalInfo?: string\n ) {\n setMessages((currentMessages) => {\n const messageIndex = currentMessages.findIndex(\n (message) => message.id === messageId\n );\n if (messageIndex !== -1) {\n const updatedMessages = [...currentMessages];\n\n const updatedMessage: Message & {\n error_code?: string;\n created_at?: string;\n error_detail?: string;\n additionalInfo?: string;\n } = {\n ...updatedMessages[messageIndex],\n content: `${updatedMessages[messageIndex]?.content || \"\"}${chunk}`,\n id: updatedMessages[messageIndex]?.id || \"\",\n role: updatedMessages[messageIndex]?.role || \"assistant\",\n error_code,\n error_detail,\n additionalInfo,\n created_at: new Date().getTime().toString(),\n };\n updatedMessages[messageIndex] = updatedMessage;\n return updatedMessages;\n } else {\n return [\n ...currentMessages,\n {\n content: `${chunk}`,\n role: \"assistant\",\n id: messageId,\n error_code,\n error_detail,\n created_at: new Date().getTime().toString(),\n },\n ];\n }\n });\n }\n\n async function handleSubmit(event: React.FormEvent<HTMLFormElement>, traceParentId?: string, sessionId?: string, additionalInfo?: string) {\n setIsLoading(true);\n event.preventDefault();\n \n if (input) {\n addUserMessage(input);\n const messageId = createMessageId();\n setCurrentMessageIdChuncked(messageId);\n setStreamingMessageId(messageId);\n await sendMessage(input, (chunk: AIMessageChunk) => {\n processMessageChunk(\n messageId,\n chunk?.data?.content || \"\",\n chunk?.error_code,\n chunk?.error_detail,\n additionalInfo\n );\n }, traceParentId, sessionId);\n setInput(\"\");\n }\n setIsLoading(false);\n }\n\n function handleInputChange(event: React.ChangeEvent<HTMLInputElement>) {\n setInput(event.target.value);\n }\n\n function handleReplaceInput(input: string) {\n setInput(input);\n }\n\n function populateMessages(messages: Message[]) {\n setMessages(messages);\n }\n\n function handleLoadingCancel() {\n setIsLoading(false);\n setIsMessageStreaming(false);\n setInput(\"\");\n }\n\n function addUserMessage(message: string) {\n setMessages((prevMessages: Message[]) => [\n ...prevMessages,\n {\n content: message,\n role: \"user\",\n id: createMessageId(),\n created_at: new Date().getTime().toString(),\n },\n ]);\n }\n\n function getCookie(name: string): string | null {\n const cookies = document.cookie.split(\";\");\n for (let cookie of cookies) {\n const [cookieName, cookieValue] = cookie.trim().split(\"=\");\n if (cookieName === name) {\n return decodeURIComponent(cookieValue as string);\n }\n }\n return null;\n }\n\n async function sendMessage(\n message: string,\n callBack: (chunk: AIMessageChunk) => void,\n traceParentId?: string,\n sessionId?: string\n ) {\n const conversationId = sessionId || getCookie(\"alquimia-session\");\n setIsMessageStreaming(true);\n setActiveTool(null);\n setLastRequest(message);\n\n const response = await sdk.widthConversationId(conversationId || \"\").sendMessage(message, traceParentId);\n \n const es = new EventSource(response.getUrlStream());\n\n es.onerror = (event) => {\n console.error(\"EventSource error:\", event);\n callBack({\n type: \"error\",\n error_code: \"EVENT_SOURCE_ERROR\",\n error_detail: \"Stream server error occurred\",\n });\n setIsMessageStreaming(false);\n setStreamingMessageId(null);\n es.close();\n };\n \n es.onmessage = (event: any) => {\n const parsedData = JSON.parse(event.data);\n\n if (parsedData.tooler && parsedData.tooler.length > 0 && !activeTool) {\n setActiveTool({\n tooler: parsedData.tooler,\n });\n }\n\n if (parsedData.error_code) {\n callBack({\n type: \"error\",\n error_code: parsedData.error_code,\n error_detail: parsedData.error_detail,\n });\n }\n\n if (parsedData.is_complete) {\n setIsMessageStreaming(false);\n setStreamingMessageId(null)\n es.close();\n } else {\n callBack(parsedData.answer);\n }\n };\n }\n\n return {\n activeTool,\n cleanMessages,\n createMessageId,\n handleInputChange,\n handleReplaceInput,\n handleSubmit,\n handleLoadingCancel,\n input,\n isLoading,\n isMessageStreaming,\n streamingMessageId,\n isAudioRecording,\n lastRequest,\n messageMetaData,\n messages,\n populateMessages,\n processMessageChunk,\n sendMessage,\n sessionId,\n setActiveTool,\n setSessionId,\n setLastRequest,\n setIsAudioRecording,\n };\n}\n","import { BaseAPIConfig, ApiError, ConversationsMap } from \"../types/type\";\n\nexport function generateTranslatePrompt(text: string) {\n const prompt = `\n Arrange the following text according to the given object structure and return it as plain json, values summarized to one word, no formatting:\n {\n restrictions: {\n value: [''],\n description: 'Restrictions to certain foods'\n },\n alergies: {\n value: [''],\n description: 'Alergies to certain foods'\n },\n wine_preference: {\n value: [''],\n description: 'Preferences for the wine'\n },\n meal_preference: {\n value: [''],\n description: 'Preferences for the meal'\n }\n }\n\n Text: \"${text}\"\n\n Output:\n `;\n\n return prompt;\n}\n\nexport function getCookies(name: string) {\n if (typeof document === 'undefined') return undefined;\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) return parts.pop()?.split(\";\").shift();\n}\n\nexport function generateHeaders(config: BaseAPIConfig): HeadersInit {\n const headers: HeadersInit = {\n \"Content-Type\": \"application/json\",\n };\n\n if (config.token) {\n headers[\"Authorization\"] = `Bearer ${config.token}`;\n }\n\n if (config.headers) {\n Object.entries(config.headers).forEach(([key, value]) => {\n headers[key] = value;\n });\n }\n\n return headers;\n}\n\nexport function isTextContent(buffer: ArrayBuffer): boolean {\n try {\n const text = new TextDecoder().decode(buffer);\n return /^[\\w\\#\\-\\*]/.test(text.trim());\n } catch {\n return false;\n }\n}\n\nexport function getQueryParam(param: string): string | null {\n if (typeof window !== 'undefined') {\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(param);\n }\n return null;\n}\n\nexport function defineAssistantId(defaultId: string): string {\n if (typeof window !== 'undefined' && window.location.pathname === '/') {\n const queryAssistantId = getQueryParam('talkwith');\n if (queryAssistantId) {\n localStorage.setItem('assistantId', queryAssistantId);\n return queryAssistantId;\n }\n const storedAssistantId = localStorage.getItem('assistantId');\n return storedAssistantId || defaultId;\n }\n return defaultId;\n}\n\nexport function formatTimeWithUnit(timeMs: number): string {\n if (timeMs >= 1000) {\n return `${(timeMs / 1000).toFixed(1)}s`;\n }\n return `${Math.round(timeMs)}ms`;\n};\n\nexport function serializeAxiosError(error: unknown){\n if (error instanceof Error) {\n const customError = error as ApiError;\n return {\n message: customError?.message, \n name: customError?.name,\n stack: customError?.stack,\n code: customError?.code,\n status: customError?.status,\n };\n }\n return {\n message: String(error),\n name: 'Unknown Error',\n };\n};\n\nexport function parseConversationsMapCookie(cookieValue: string): ConversationsMap {\n try {\n const decodedValue = decodeURIComponent(cookieValue);\n return JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error('Error parsing conversations cookie:', e);\n return {};\n }\n}\n\nexport function getTopicSessionId(topicId: string): string {\n const conversationsStr = getCookies(\"alquimia-sessions\") || \"{}\";\n if (!conversationsStr) {\n const sessionCookie = getCookies(\"alquimia-session\");\n return sessionCookie || \"\";\n }\n\n const conversationsMap = parseConversationsMapCookie(conversationsStr);\n return conversationsMap[topicId] || \"\";\n}\n\nexport function createMessageId() {\n return Math.floor(Math.random() * 1000000).toString();\n}\n\n\n","\nimport { useState, useReducer } from \"react\";\nimport { RatingData } from \"../types/type\";\nimport { getTopicSessionId } from \"../utils/utils\";\n\ninterface RatingState {\n ratingStars: number;\n ratingThumbs: \"thumbsUp\" | \"thumbsDown\" | \"\";\n ratingComment: string;\n}\n\ntype RatingAction =\n | { type: \"SET_RATING_STARS\"; payload: number }\n | { type: \"SET_RATING_THUMBS\"; payload: \"thumbsUp\" | \"thumbsDown\" | \"\" }\n | { type: \"SET_RATING_COMMENT\"; payload: string };\n\nconst initialState: RatingState = {\n ratingStars: 0,\n ratingThumbs: \"\",\n ratingComment: \"\",\n};\n\nfunction ratingReducer(state: RatingState, action: RatingAction): RatingState {\n switch (action.type) {\n case \"SET_RATING_STARS\":\n return { ...state, ratingStars: action.payload };\n case \"SET_RATING_THUMBS\":\n return { ...state, ratingThumbs: action.payload };\n case \"SET_RATING_COMMENT\":\n return { ...state, ratingComment: action.payload };\n default:\n return state;\n }\n}\n\ninterface UseRatingsParams {\n assistantId: string;\n topicId: string;\n sendRating: (ratingData: RatingData) => Promise<any>;\n onError?: (componentName: string, error: Error) => void;\n}\n\n\nexport function useRatings({ assistantId, sendRating, topicId }: UseRatingsParams) {\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [hasReviewed, setHasReviewed] = useState<boolean>(false);\n const [state, dispatch] = useReducer(ratingReducer, initialState);\n\n const setRatingStars = (rating: number) => {\n dispatch({ type: \"SET_RATING_STARS\", payload: rating });\n };\n\n const setRatingThumbs = (rating: \"thumbsUp\" | \"thumbsDown\" | \"\") => {\n dispatch({ type: \"SET_RATING_THUMBS\", payload: rating });\n };\n\n const setRatingComment = (comment: string) => {\n dispatch({ type: \"SET_RATING_COMMENT\", payload: comment });\n };\n\n const thumbsScore = (value: string) => {\n return value === \"thumbsUp\" ? 5 : value === \"thumbsDown\" ? 0 : 0;\n }\n\n const handleRate = async (key: string, value: any | string, onHandleRateSuccess: (success: boolean, err?: string) => void) => {\n setIsLoading(true);\n const sessionId = getTopicSessionId(topicId);\n\n const ratingObj: RatingData = {\n topicId: parseInt(topicId),\n sessionId: sessionId || \"\",\n assistantId: assistantId,\n score: key === \"score\" ? value : thumbsScore(value),\n description: key === \"description\" ? value : state.ratingComment,\n };\n\n try {\n const response = await sendRating(ratingObj);\n if (!response.success) {\n setIsLoading(false);\n onHandleRateSuccess(false, response.error.message);\n return;\n }\n \n if (key === \"score\") {\n setRatingStars(value);\n } else if (key === \"description\") {\n setRatingComment(value);\n }\n setHasReviewed(true);\n setIsLoading(false);\n onHandleRateSuccess(true);\n } catch (err) {\n setIsLoading(false);\n onHandleRateSuccess(false, String(err));\n }\n };\n\n return {\n handleRate,\n ratingStars: state.ratingStars,\n ratingThumbs: state.ratingThumbs,\n ratingComment: state.ratingComment,\n isLoading,\n hasReviewed\n };\n}\n"],"mappings":"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","names":["sessionId","input","messages","import_react"]}
|
package/dist/hooks/index.mjs
CHANGED
|
@@ -148,6 +148,17 @@ function useAlquimia(sdk) {
|
|
|
148
148
|
setLastRequest(message);
|
|
149
149
|
const response = await sdk.widthConversationId(conversationId || "").sendMessage(message, traceParentId);
|
|
150
150
|
const es = new EventSource(response.getUrlStream());
|
|
151
|
+
es.onerror = (event) => {
|
|
152
|
+
console.error("EventSource error:", event);
|
|
153
|
+
callBack({
|
|
154
|
+
type: "error",
|
|
155
|
+
error_code: "EVENT_SOURCE_ERROR",
|
|
156
|
+
error_detail: "Stream server error occurred"
|
|
157
|
+
});
|
|
158
|
+
setIsMessageStreaming(false);
|
|
159
|
+
setStreamingMessageId(null);
|
|
160
|
+
es.close();
|
|
161
|
+
};
|
|
151
162
|
es.onmessage = (event) => {
|
|
152
163
|
const parsedData = JSON.parse(event.data);
|
|
153
164
|
if (parsedData.tooler && parsedData.tooler.length > 0 && !activeTool) {
|
package/dist/hooks/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/alquimia.hook.tsx","../../src/utils/utils.ts","../../src/hooks/useRatings.ts"],"sourcesContent":["import { Message } from \"ai\";\n\nimport { useEffect, useState } from \"react\";\nimport { AlquimiaSDK } from \"../sdk\";\nimport { AIMessageChunk } from \"../types/type\";\nimport { createMessageId } from \"../utils\";\nexport function useAlquimia(sdk: AlquimiaSDK) {\n const [chunkReceived, setChunkReceived] = useState<string>(\"\");\n const [currentMessageIdChuncked, setCurrentMessageIdChuncked] =\n useState<string>(\"\");\n const [input, setInput] = useState<string>(\"\");\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isMessageStreaming, setIsMessageStreaming] = useState<boolean>(false);\n const [streamingMessageId, setStreamingMessageId] = useState<string | null>(null);\n const [isAudioRecording, setIsAudioRecording] = useState<boolean>(false);\n const [messageMetaData, setMessageMetaData] = useState<any>(null);\n const [messages, setMessages] = useState<\n (Message & { error_code?: string; error_detail?: string })[]\n >([]);\n const [sessionId, setSessionId] = useState<string | null>(null);\n const [activeTool, setActiveTool] = useState<any | null>(null);\n const [lastRequest, setLastRequest] = useState<string | null>(null);\n\n\n useEffect(() => {\n if (chunkReceived)\n processMessageChunk(currentMessageIdChuncked, chunkReceived);\n }, [chunkReceived]);\n\n\n function cleanMessages() {\n setMessages([]);\n }\n async function processMessageChunk(\n messageId: string,\n chunk: string,\n error_code?: string,\n error_detail?: string,\n additionalInfo?: string\n ) {\n setMessages((currentMessages) => {\n const messageIndex = currentMessages.findIndex(\n (message) => message.id === messageId\n );\n if (messageIndex !== -1) {\n const updatedMessages = [...currentMessages];\n\n const updatedMessage: Message & {\n error_code?: string;\n created_at?: string;\n error_detail?: string;\n additionalInfo?: string;\n } = {\n ...updatedMessages[messageIndex],\n content: `${updatedMessages[messageIndex]?.content || \"\"}${chunk}`,\n id: updatedMessages[messageIndex]?.id || \"\",\n role: updatedMessages[messageIndex]?.role || \"assistant\",\n error_code,\n error_detail,\n additionalInfo,\n created_at: new Date().getTime().toString(),\n };\n updatedMessages[messageIndex] = updatedMessage;\n return updatedMessages;\n } else {\n return [\n ...currentMessages,\n {\n content: `${chunk}`,\n role: \"assistant\",\n id: messageId,\n error_code,\n error_detail,\n created_at: new Date().getTime().toString(),\n },\n ];\n }\n });\n }\n\n async function handleSubmit(event: React.FormEvent<HTMLFormElement>, traceParentId?: string, sessionId?: string, additionalInfo?: string) {\n setIsLoading(true);\n event.preventDefault();\n \n if (input) {\n addUserMessage(input);\n const messageId = createMessageId();\n setCurrentMessageIdChuncked(messageId);\n setStreamingMessageId(messageId);\n await sendMessage(input, (chunk: AIMessageChunk) => {\n processMessageChunk(\n messageId,\n chunk?.data?.content || \"\",\n chunk?.error_code,\n chunk?.error_detail,\n additionalInfo\n );\n }, traceParentId, sessionId);\n setInput(\"\");\n }\n setIsLoading(false);\n }\n\n function handleInputChange(event: React.ChangeEvent<HTMLInputElement>) {\n setInput(event.target.value);\n }\n\n function handleReplaceInput(input: string) {\n setInput(input);\n }\n\n function populateMessages(messages: Message[]) {\n setMessages(messages);\n }\n\n function handleLoadingCancel() {\n setIsLoading(false);\n setIsMessageStreaming(false);\n setInput(\"\");\n }\n\n function addUserMessage(message: string) {\n setMessages((prevMessages: Message[]) => [\n ...prevMessages,\n {\n content: message,\n role: \"user\",\n id: createMessageId(),\n created_at: new Date().getTime().toString(),\n },\n ]);\n }\n\n function getCookie(name: string): string | null {\n const cookies = document.cookie.split(\";\");\n for (let cookie of cookies) {\n const [cookieName, cookieValue] = cookie.trim().split(\"=\");\n if (cookieName === name) {\n return decodeURIComponent(cookieValue as string);\n }\n }\n return null;\n }\n\n async function sendMessage(\n message: string,\n callBack: (chunk: AIMessageChunk) => void,\n traceParentId?: string,\n sessionId?: string\n ) {\n const conversationId = sessionId || getCookie(\"alquimia-session\");\n setIsMessageStreaming(true);\n setActiveTool(null);\n setLastRequest(message);\n\n const response = await sdk.widthConversationId(conversationId || \"\").sendMessage(message, traceParentId);\n \n const es = new EventSource(response.getUrlStream())\n es.onmessage = (event: any) => {\n const parsedData = JSON.parse(event.data);\n\n if (parsedData.tooler && parsedData.tooler.length > 0 && !activeTool) {\n setActiveTool({\n tooler: parsedData.tooler,\n });\n }\n\n if (parsedData.error_code) {\n callBack({\n type: \"error\",\n error_code: parsedData.error_code,\n error_detail: parsedData.error_detail,\n });\n }\n\n if (parsedData.is_complete) {\n setIsMessageStreaming(false);\n setStreamingMessageId(null)\n es.close();\n } else {\n callBack(parsedData.answer);\n }\n };\n }\n\n return {\n activeTool,\n cleanMessages,\n createMessageId,\n handleInputChange,\n handleReplaceInput,\n handleSubmit,\n handleLoadingCancel,\n input,\n isLoading,\n isMessageStreaming,\n streamingMessageId,\n isAudioRecording,\n lastRequest,\n messageMetaData,\n messages,\n populateMessages,\n processMessageChunk,\n sendMessage,\n sessionId,\n setActiveTool,\n setSessionId,\n setLastRequest,\n setIsAudioRecording,\n };\n}\n","import { BaseAPIConfig, ApiError, ConversationsMap } from \"../types/type\";\n\nexport function generateTranslatePrompt(text: string) {\n const prompt = `\n Arrange the following text according to the given object structure and return it as plain json, values summarized to one word, no formatting:\n {\n restrictions: {\n value: [''],\n description: 'Restrictions to certain foods'\n },\n alergies: {\n value: [''],\n description: 'Alergies to certain foods'\n },\n wine_preference: {\n value: [''],\n description: 'Preferences for the wine'\n },\n meal_preference: {\n value: [''],\n description: 'Preferences for the meal'\n }\n }\n\n Text: \"${text}\"\n\n Output:\n `;\n\n return prompt;\n}\n\nexport function getCookies(name: string) {\n if (typeof document === 'undefined') return undefined;\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) return parts.pop()?.split(\";\").shift();\n}\n\nexport function generateHeaders(config: BaseAPIConfig): HeadersInit {\n const headers: HeadersInit = {\n \"Content-Type\": \"application/json\",\n };\n\n if (config.token) {\n headers[\"Authorization\"] = `Bearer ${config.token}`;\n }\n\n if (config.headers) {\n Object.entries(config.headers).forEach(([key, value]) => {\n headers[key] = value;\n });\n }\n\n return headers;\n}\n\nexport function isTextContent(buffer: ArrayBuffer): boolean {\n try {\n const text = new TextDecoder().decode(buffer);\n return /^[\\w\\#\\-\\*]/.test(text.trim());\n } catch {\n return false;\n }\n}\n\nexport function getQueryParam(param: string): string | null {\n if (typeof window !== 'undefined') {\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(param);\n }\n return null;\n}\n\nexport function defineAssistantId(defaultId: string): string {\n if (typeof window !== 'undefined' && window.location.pathname === '/') {\n const queryAssistantId = getQueryParam('talkwith');\n if (queryAssistantId) {\n localStorage.setItem('assistantId', queryAssistantId);\n return queryAssistantId;\n }\n const storedAssistantId = localStorage.getItem('assistantId');\n return storedAssistantId || defaultId;\n }\n return defaultId;\n}\n\nexport function formatTimeWithUnit(timeMs: number): string {\n if (timeMs >= 1000) {\n return `${(timeMs / 1000).toFixed(1)}s`;\n }\n return `${Math.round(timeMs)}ms`;\n};\n\nexport function serializeAxiosError(error: unknown){\n if (error instanceof Error) {\n const customError = error as ApiError;\n return {\n message: customError?.message, \n name: customError?.name,\n stack: customError?.stack,\n code: customError?.code,\n status: customError?.status,\n };\n }\n return {\n message: String(error),\n name: 'Unknown Error',\n };\n};\n\nexport function parseConversationsMapCookie(cookieValue: string): ConversationsMap {\n try {\n const decodedValue = decodeURIComponent(cookieValue);\n return JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error('Error parsing conversations cookie:', e);\n return {};\n }\n}\n\nexport function getTopicSessionId(topicId: string): string {\n const conversationsStr = getCookies(\"alquimia-sessions\") || \"{}\";\n if (!conversationsStr) {\n const sessionCookie = getCookies(\"alquimia-session\");\n return sessionCookie || \"\";\n }\n\n const conversationsMap = parseConversationsMapCookie(conversationsStr);\n return conversationsMap[topicId] || \"\";\n}\n\nexport function createMessageId() {\n return Math.floor(Math.random() * 1000000).toString();\n}\n\n\n","\nimport { useState, useReducer } from \"react\";\nimport { RatingData } from \"../types/type\";\nimport { getTopicSessionId } from \"../utils/utils\";\n\ninterface RatingState {\n ratingStars: number;\n ratingThumbs: \"thumbsUp\" | \"thumbsDown\" | \"\";\n ratingComment: string;\n}\n\ntype RatingAction =\n | { type: \"SET_RATING_STARS\"; payload: number }\n | { type: \"SET_RATING_THUMBS\"; payload: \"thumbsUp\" | \"thumbsDown\" | \"\" }\n | { type: \"SET_RATING_COMMENT\"; payload: string };\n\nconst initialState: RatingState = {\n ratingStars: 0,\n ratingThumbs: \"\",\n ratingComment: \"\",\n};\n\nfunction ratingReducer(state: RatingState, action: RatingAction): RatingState {\n switch (action.type) {\n case \"SET_RATING_STARS\":\n return { ...state, ratingStars: action.payload };\n case \"SET_RATING_THUMBS\":\n return { ...state, ratingThumbs: action.payload };\n case \"SET_RATING_COMMENT\":\n return { ...state, ratingComment: action.payload };\n default:\n return state;\n }\n}\n\ninterface UseRatingsParams {\n assistantId: string;\n topicId: string;\n sendRating: (ratingData: RatingData) => Promise<any>;\n onError?: (componentName: string, error: Error) => void;\n}\n\n\nexport function useRatings({ assistantId, sendRating, topicId }: UseRatingsParams) {\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [hasReviewed, setHasReviewed] = useState<boolean>(false);\n const [state, dispatch] = useReducer(ratingReducer, initialState);\n\n const setRatingStars = (rating: number) => {\n dispatch({ type: \"SET_RATING_STARS\", payload: rating });\n };\n\n const setRatingThumbs = (rating: \"thumbsUp\" | \"thumbsDown\" | \"\") => {\n dispatch({ type: \"SET_RATING_THUMBS\", payload: rating });\n };\n\n const setRatingComment = (comment: string) => {\n dispatch({ type: \"SET_RATING_COMMENT\", payload: comment });\n };\n\n const thumbsScore = (value: string) => {\n return value === \"thumbsUp\" ? 5 : value === \"thumbsDown\" ? 0 : 0;\n }\n\n const handleRate = async (key: string, value: any | string, onHandleRateSuccess: (success: boolean, err?: string) => void) => {\n setIsLoading(true);\n const sessionId = getTopicSessionId(topicId);\n\n const ratingObj: RatingData = {\n topicId: parseInt(topicId),\n sessionId: sessionId || \"\",\n assistantId: assistantId,\n score: key === \"score\" ? value : thumbsScore(value),\n description: key === \"description\" ? value : state.ratingComment,\n };\n\n try {\n const response = await sendRating(ratingObj);\n if (!response.success) {\n setIsLoading(false);\n onHandleRateSuccess(false, response.error.message);\n return;\n }\n \n if (key === \"score\") {\n setRatingStars(value);\n } else if (key === \"description\") {\n setRatingComment(value);\n }\n setHasReviewed(true);\n setIsLoading(false);\n onHandleRateSuccess(true);\n } catch (err) {\n setIsLoading(false);\n onHandleRateSuccess(false, String(err));\n }\n };\n\n return {\n handleRate,\n ratingStars: state.ratingStars,\n ratingThumbs: state.ratingThumbs,\n ratingComment: state.ratingComment,\n isLoading,\n hasReviewed\n };\n}\n"],"mappings":"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","names":["sessionId","input","messages","useState","useState"]}
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/alquimia.hook.tsx","../../src/utils/utils.ts","../../src/hooks/useRatings.ts"],"sourcesContent":["import { Message } from \"ai\";\n\nimport { useEffect, useState } from \"react\";\nimport { AlquimiaSDK } from \"../sdk\";\nimport { AIMessageChunk } from \"../types/type\";\nimport { createMessageId } from \"../utils\";\nexport function useAlquimia(sdk: AlquimiaSDK) {\n const [chunkReceived, setChunkReceived] = useState<string>(\"\");\n const [currentMessageIdChuncked, setCurrentMessageIdChuncked] =\n useState<string>(\"\");\n const [input, setInput] = useState<string>(\"\");\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [isMessageStreaming, setIsMessageStreaming] = useState<boolean>(false);\n const [streamingMessageId, setStreamingMessageId] = useState<string | null>(null);\n const [isAudioRecording, setIsAudioRecording] = useState<boolean>(false);\n const [messageMetaData, setMessageMetaData] = useState<any>(null);\n const [messages, setMessages] = useState<\n (Message & { error_code?: string; error_detail?: string })[]\n >([]);\n const [sessionId, setSessionId] = useState<string | null>(null);\n const [activeTool, setActiveTool] = useState<any | null>(null);\n const [lastRequest, setLastRequest] = useState<string | null>(null);\n\n\n useEffect(() => {\n if (chunkReceived)\n processMessageChunk(currentMessageIdChuncked, chunkReceived);\n }, [chunkReceived]);\n\n\n function cleanMessages() {\n setMessages([]);\n }\n async function processMessageChunk(\n messageId: string,\n chunk: string,\n error_code?: string,\n error_detail?: string,\n additionalInfo?: string\n ) {\n setMessages((currentMessages) => {\n const messageIndex = currentMessages.findIndex(\n (message) => message.id === messageId\n );\n if (messageIndex !== -1) {\n const updatedMessages = [...currentMessages];\n\n const updatedMessage: Message & {\n error_code?: string;\n created_at?: string;\n error_detail?: string;\n additionalInfo?: string;\n } = {\n ...updatedMessages[messageIndex],\n content: `${updatedMessages[messageIndex]?.content || \"\"}${chunk}`,\n id: updatedMessages[messageIndex]?.id || \"\",\n role: updatedMessages[messageIndex]?.role || \"assistant\",\n error_code,\n error_detail,\n additionalInfo,\n created_at: new Date().getTime().toString(),\n };\n updatedMessages[messageIndex] = updatedMessage;\n return updatedMessages;\n } else {\n return [\n ...currentMessages,\n {\n content: `${chunk}`,\n role: \"assistant\",\n id: messageId,\n error_code,\n error_detail,\n created_at: new Date().getTime().toString(),\n },\n ];\n }\n });\n }\n\n async function handleSubmit(event: React.FormEvent<HTMLFormElement>, traceParentId?: string, sessionId?: string, additionalInfo?: string) {\n setIsLoading(true);\n event.preventDefault();\n \n if (input) {\n addUserMessage(input);\n const messageId = createMessageId();\n setCurrentMessageIdChuncked(messageId);\n setStreamingMessageId(messageId);\n await sendMessage(input, (chunk: AIMessageChunk) => {\n processMessageChunk(\n messageId,\n chunk?.data?.content || \"\",\n chunk?.error_code,\n chunk?.error_detail,\n additionalInfo\n );\n }, traceParentId, sessionId);\n setInput(\"\");\n }\n setIsLoading(false);\n }\n\n function handleInputChange(event: React.ChangeEvent<HTMLInputElement>) {\n setInput(event.target.value);\n }\n\n function handleReplaceInput(input: string) {\n setInput(input);\n }\n\n function populateMessages(messages: Message[]) {\n setMessages(messages);\n }\n\n function handleLoadingCancel() {\n setIsLoading(false);\n setIsMessageStreaming(false);\n setInput(\"\");\n }\n\n function addUserMessage(message: string) {\n setMessages((prevMessages: Message[]) => [\n ...prevMessages,\n {\n content: message,\n role: \"user\",\n id: createMessageId(),\n created_at: new Date().getTime().toString(),\n },\n ]);\n }\n\n function getCookie(name: string): string | null {\n const cookies = document.cookie.split(\";\");\n for (let cookie of cookies) {\n const [cookieName, cookieValue] = cookie.trim().split(\"=\");\n if (cookieName === name) {\n return decodeURIComponent(cookieValue as string);\n }\n }\n return null;\n }\n\n async function sendMessage(\n message: string,\n callBack: (chunk: AIMessageChunk) => void,\n traceParentId?: string,\n sessionId?: string\n ) {\n const conversationId = sessionId || getCookie(\"alquimia-session\");\n setIsMessageStreaming(true);\n setActiveTool(null);\n setLastRequest(message);\n\n const response = await sdk.widthConversationId(conversationId || \"\").sendMessage(message, traceParentId);\n \n const es = new EventSource(response.getUrlStream());\n\n es.onerror = (event) => {\n console.error(\"EventSource error:\", event);\n callBack({\n type: \"error\",\n error_code: \"EVENT_SOURCE_ERROR\",\n error_detail: \"Stream server error occurred\",\n });\n setIsMessageStreaming(false);\n setStreamingMessageId(null);\n es.close();\n };\n \n es.onmessage = (event: any) => {\n const parsedData = JSON.parse(event.data);\n\n if (parsedData.tooler && parsedData.tooler.length > 0 && !activeTool) {\n setActiveTool({\n tooler: parsedData.tooler,\n });\n }\n\n if (parsedData.error_code) {\n callBack({\n type: \"error\",\n error_code: parsedData.error_code,\n error_detail: parsedData.error_detail,\n });\n }\n\n if (parsedData.is_complete) {\n setIsMessageStreaming(false);\n setStreamingMessageId(null)\n es.close();\n } else {\n callBack(parsedData.answer);\n }\n };\n }\n\n return {\n activeTool,\n cleanMessages,\n createMessageId,\n handleInputChange,\n handleReplaceInput,\n handleSubmit,\n handleLoadingCancel,\n input,\n isLoading,\n isMessageStreaming,\n streamingMessageId,\n isAudioRecording,\n lastRequest,\n messageMetaData,\n messages,\n populateMessages,\n processMessageChunk,\n sendMessage,\n sessionId,\n setActiveTool,\n setSessionId,\n setLastRequest,\n setIsAudioRecording,\n };\n}\n","import { BaseAPIConfig, ApiError, ConversationsMap } from \"../types/type\";\n\nexport function generateTranslatePrompt(text: string) {\n const prompt = `\n Arrange the following text according to the given object structure and return it as plain json, values summarized to one word, no formatting:\n {\n restrictions: {\n value: [''],\n description: 'Restrictions to certain foods'\n },\n alergies: {\n value: [''],\n description: 'Alergies to certain foods'\n },\n wine_preference: {\n value: [''],\n description: 'Preferences for the wine'\n },\n meal_preference: {\n value: [''],\n description: 'Preferences for the meal'\n }\n }\n\n Text: \"${text}\"\n\n Output:\n `;\n\n return prompt;\n}\n\nexport function getCookies(name: string) {\n if (typeof document === 'undefined') return undefined;\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) return parts.pop()?.split(\";\").shift();\n}\n\nexport function generateHeaders(config: BaseAPIConfig): HeadersInit {\n const headers: HeadersInit = {\n \"Content-Type\": \"application/json\",\n };\n\n if (config.token) {\n headers[\"Authorization\"] = `Bearer ${config.token}`;\n }\n\n if (config.headers) {\n Object.entries(config.headers).forEach(([key, value]) => {\n headers[key] = value;\n });\n }\n\n return headers;\n}\n\nexport function isTextContent(buffer: ArrayBuffer): boolean {\n try {\n const text = new TextDecoder().decode(buffer);\n return /^[\\w\\#\\-\\*]/.test(text.trim());\n } catch {\n return false;\n }\n}\n\nexport function getQueryParam(param: string): string | null {\n if (typeof window !== 'undefined') {\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(param);\n }\n return null;\n}\n\nexport function defineAssistantId(defaultId: string): string {\n if (typeof window !== 'undefined' && window.location.pathname === '/') {\n const queryAssistantId = getQueryParam('talkwith');\n if (queryAssistantId) {\n localStorage.setItem('assistantId', queryAssistantId);\n return queryAssistantId;\n }\n const storedAssistantId = localStorage.getItem('assistantId');\n return storedAssistantId || defaultId;\n }\n return defaultId;\n}\n\nexport function formatTimeWithUnit(timeMs: number): string {\n if (timeMs >= 1000) {\n return `${(timeMs / 1000).toFixed(1)}s`;\n }\n return `${Math.round(timeMs)}ms`;\n};\n\nexport function serializeAxiosError(error: unknown){\n if (error instanceof Error) {\n const customError = error as ApiError;\n return {\n message: customError?.message, \n name: customError?.name,\n stack: customError?.stack,\n code: customError?.code,\n status: customError?.status,\n };\n }\n return {\n message: String(error),\n name: 'Unknown Error',\n };\n};\n\nexport function parseConversationsMapCookie(cookieValue: string): ConversationsMap {\n try {\n const decodedValue = decodeURIComponent(cookieValue);\n return JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error('Error parsing conversations cookie:', e);\n return {};\n }\n}\n\nexport function getTopicSessionId(topicId: string): string {\n const conversationsStr = getCookies(\"alquimia-sessions\") || \"{}\";\n if (!conversationsStr) {\n const sessionCookie = getCookies(\"alquimia-session\");\n return sessionCookie || \"\";\n }\n\n const conversationsMap = parseConversationsMapCookie(conversationsStr);\n return conversationsMap[topicId] || \"\";\n}\n\nexport function createMessageId() {\n return Math.floor(Math.random() * 1000000).toString();\n}\n\n\n","\nimport { useState, useReducer } from \"react\";\nimport { RatingData } from \"../types/type\";\nimport { getTopicSessionId } from \"../utils/utils\";\n\ninterface RatingState {\n ratingStars: number;\n ratingThumbs: \"thumbsUp\" | \"thumbsDown\" | \"\";\n ratingComment: string;\n}\n\ntype RatingAction =\n | { type: \"SET_RATING_STARS\"; payload: number }\n | { type: \"SET_RATING_THUMBS\"; payload: \"thumbsUp\" | \"thumbsDown\" | \"\" }\n | { type: \"SET_RATING_COMMENT\"; payload: string };\n\nconst initialState: RatingState = {\n ratingStars: 0,\n ratingThumbs: \"\",\n ratingComment: \"\",\n};\n\nfunction ratingReducer(state: RatingState, action: RatingAction): RatingState {\n switch (action.type) {\n case \"SET_RATING_STARS\":\n return { ...state, ratingStars: action.payload };\n case \"SET_RATING_THUMBS\":\n return { ...state, ratingThumbs: action.payload };\n case \"SET_RATING_COMMENT\":\n return { ...state, ratingComment: action.payload };\n default:\n return state;\n }\n}\n\ninterface UseRatingsParams {\n assistantId: string;\n topicId: string;\n sendRating: (ratingData: RatingData) => Promise<any>;\n onError?: (componentName: string, error: Error) => void;\n}\n\n\nexport function useRatings({ assistantId, sendRating, topicId }: UseRatingsParams) {\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [hasReviewed, setHasReviewed] = useState<boolean>(false);\n const [state, dispatch] = useReducer(ratingReducer, initialState);\n\n const setRatingStars = (rating: number) => {\n dispatch({ type: \"SET_RATING_STARS\", payload: rating });\n };\n\n const setRatingThumbs = (rating: \"thumbsUp\" | \"thumbsDown\" | \"\") => {\n dispatch({ type: \"SET_RATING_THUMBS\", payload: rating });\n };\n\n const setRatingComment = (comment: string) => {\n dispatch({ type: \"SET_RATING_COMMENT\", payload: comment });\n };\n\n const thumbsScore = (value: string) => {\n return value === \"thumbsUp\" ? 5 : value === \"thumbsDown\" ? 0 : 0;\n }\n\n const handleRate = async (key: string, value: any | string, onHandleRateSuccess: (success: boolean, err?: string) => void) => {\n setIsLoading(true);\n const sessionId = getTopicSessionId(topicId);\n\n const ratingObj: RatingData = {\n topicId: parseInt(topicId),\n sessionId: sessionId || \"\",\n assistantId: assistantId,\n score: key === \"score\" ? value : thumbsScore(value),\n description: key === \"description\" ? value : state.ratingComment,\n };\n\n try {\n const response = await sendRating(ratingObj);\n if (!response.success) {\n setIsLoading(false);\n onHandleRateSuccess(false, response.error.message);\n return;\n }\n \n if (key === \"score\") {\n setRatingStars(value);\n } else if (key === \"description\") {\n setRatingComment(value);\n }\n setHasReviewed(true);\n setIsLoading(false);\n onHandleRateSuccess(true);\n } catch (err) {\n setIsLoading(false);\n onHandleRateSuccess(false, String(err));\n }\n };\n\n return {\n handleRate,\n ratingStars: state.ratingStars,\n ratingThumbs: state.ratingThumbs,\n ratingComment: state.ratingComment,\n isLoading,\n hasReviewed\n };\n}\n"],"mappings":"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","names":["sessionId","input","messages","useState","useState"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alquimia-ai/tools",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"author": "Alquimia AI",
|
|
5
5
|
"description": "tools for Alquimia SDK",
|
|
6
6
|
"private": false,
|
|
@@ -78,7 +78,7 @@
|
|
|
78
78
|
"idb": "^8.0.0",
|
|
79
79
|
"next": "^14.2.15",
|
|
80
80
|
"openai": "^4.57.0",
|
|
81
|
-
"pino": "^9.
|
|
81
|
+
"pino": "^9.0.0",
|
|
82
82
|
"pino-elasticsearch": "^8.1.0",
|
|
83
83
|
"react": "^18.2.0"
|
|
84
84
|
},
|