@alquimia-ai/tools 1.0.1 → 1.0.2
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/alquimia.action.d.mts +3 -0
- package/dist/actions/alquimia.action.d.ts +3 -0
- package/dist/actions/alquimia.action.js +62 -0
- package/dist/actions/alquimia.action.js.map +1 -0
- package/dist/actions/alquimia.action.mjs +38 -0
- package/dist/actions/alquimia.action.mjs.map +1 -0
- package/dist/actions/baseApi.action.d.mts +20 -0
- package/dist/actions/baseApi.action.d.ts +20 -0
- package/dist/actions/baseApi.action.js +202 -0
- package/dist/actions/baseApi.action.js.map +1 -0
- package/dist/actions/baseApi.action.mjs +173 -0
- package/dist/actions/baseApi.action.mjs.map +1 -0
- package/dist/actions/index.d.mts +5 -0
- package/dist/actions/index.d.ts +5 -0
- package/dist/actions/index.js +236 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/actions/index.mjs +205 -0
- package/dist/actions/index.mjs.map +1 -0
- package/dist/alquimia-sdk-DK0XLjol.d.mts +77 -0
- package/dist/alquimia-sdk-DK0XLjol.d.ts +77 -0
- package/dist/context/index.d.mts +22 -0
- package/dist/context/index.d.ts +22 -0
- package/dist/context/index.js +124 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/index.mjs +96 -0
- package/dist/context/index.mjs.map +1 -0
- package/dist/hooks/index.d.mts +54 -0
- package/dist/hooks/index.d.ts +54 -0
- package/dist/hooks/index.js +344 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/index.mjs +316 -0
- package/dist/hooks/index.mjs.map +1 -0
- package/dist/index.d.mts +14 -303
- package/dist/index.d.ts +14 -303
- package/dist/index.js +1143 -2448
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1079 -2213
- package/dist/index.mjs.map +1 -1
- package/dist/sdk/index.d.mts +74 -0
- package/dist/sdk/index.d.ts +74 -0
- package/dist/sdk/index.js +561 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/sdk/index.mjs +510 -0
- package/dist/sdk/index.mjs.map +1 -0
- package/dist/services/index.d.mts +26 -0
- package/dist/services/index.d.ts +26 -0
- package/dist/services/index.js +93 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/index.mjs +63 -0
- package/dist/services/index.mjs.map +1 -0
- package/dist/types/index.d.mts +105 -0
- package/dist/types/index.d.ts +105 -0
- package/dist/types/index.js +41 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/index.mjs +14 -0
- package/dist/types/index.mjs.map +1 -0
- package/dist/utils/index.d.mts +29 -0
- package/dist/utils/index.d.ts +29 -0
- package/dist/utils/index.js +170 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/index.mjs +133 -0
- package/dist/utils/index.mjs.map +1 -0
- package/package.json +42 -13
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/hooks/index.ts
|
|
21
|
+
var hooks_exports = {};
|
|
22
|
+
__export(hooks_exports, {
|
|
23
|
+
useAlquimia: () => useAlquimia,
|
|
24
|
+
useRatings: () => useRatings
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(hooks_exports);
|
|
27
|
+
|
|
28
|
+
// src/hooks/alquimia.hook.tsx
|
|
29
|
+
var import_react2 = require("react");
|
|
30
|
+
|
|
31
|
+
// src/context/session-context.tsx
|
|
32
|
+
var import_react = require("react");
|
|
33
|
+
|
|
34
|
+
// src/utils/utils.ts
|
|
35
|
+
function getCookies(name) {
|
|
36
|
+
if (typeof document === "undefined") return void 0;
|
|
37
|
+
const value = `; ${document.cookie}`;
|
|
38
|
+
const parts = value.split(`; ${name}=`);
|
|
39
|
+
if (parts.length === 2) return parts.pop()?.split(";").shift();
|
|
40
|
+
}
|
|
41
|
+
function parseConversationsMapCookie(cookieValue) {
|
|
42
|
+
try {
|
|
43
|
+
const decodedValue = decodeURIComponent(cookieValue);
|
|
44
|
+
return JSON.parse(decodedValue);
|
|
45
|
+
} catch (e) {
|
|
46
|
+
console.error("Error parsing conversations cookie:", e);
|
|
47
|
+
return {};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function getTopicSessionId(topicId) {
|
|
51
|
+
const conversationsStr = getCookies("alquimia-sessions") || "{}";
|
|
52
|
+
if (!conversationsStr) {
|
|
53
|
+
const sessionCookie = getCookies("alquimia-session");
|
|
54
|
+
return sessionCookie || "";
|
|
55
|
+
}
|
|
56
|
+
const conversationsMap = parseConversationsMapCookie(conversationsStr);
|
|
57
|
+
return conversationsMap[topicId] || "";
|
|
58
|
+
}
|
|
59
|
+
function createMessageId() {
|
|
60
|
+
return Math.floor(Math.random() * 1e6).toString();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// src/context/session-context.tsx
|
|
64
|
+
var import_idb = require("idb");
|
|
65
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
66
|
+
var initialState = {
|
|
67
|
+
sessionId: null,
|
|
68
|
+
characterizationData: null
|
|
69
|
+
};
|
|
70
|
+
var AlquimiaContext = (0, import_react.createContext)(null);
|
|
71
|
+
var useSessionContext = () => {
|
|
72
|
+
const context = (0, import_react.useContext)(AlquimiaContext);
|
|
73
|
+
if (!context) {
|
|
74
|
+
console.warn("useSessionContext must be used within a session provider. Returning default value.");
|
|
75
|
+
return {
|
|
76
|
+
userSessionState: initialState,
|
|
77
|
+
saveUserSession: null
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
return context;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
// src/hooks/alquimia.hook.tsx
|
|
84
|
+
function useAlquimia(sdk) {
|
|
85
|
+
const [chunkReceived, setChunkReceived] = (0, import_react2.useState)("");
|
|
86
|
+
const [currentMessageIdChuncked, setCurrentMessageIdChuncked] = (0, import_react2.useState)("");
|
|
87
|
+
const [input, setInput] = (0, import_react2.useState)("");
|
|
88
|
+
const [isLoading, setIsLoading] = (0, import_react2.useState)(false);
|
|
89
|
+
const [isMessageStreaming, setIsMessageStreaming] = (0, import_react2.useState)(false);
|
|
90
|
+
const [streamingMessageId, setStreamingMessageId] = (0, import_react2.useState)(null);
|
|
91
|
+
const [isAudioRecording, setIsAudioRecording] = (0, import_react2.useState)(false);
|
|
92
|
+
const [messageMetaData, setMessageMetaData] = (0, import_react2.useState)(null);
|
|
93
|
+
const [messages, setMessages] = (0, import_react2.useState)([]);
|
|
94
|
+
const [sessionId, setSessionId] = (0, import_react2.useState)(null);
|
|
95
|
+
const [activeTool, setActiveTool] = (0, import_react2.useState)(null);
|
|
96
|
+
const [lastRequest, setLastRequest] = (0, import_react2.useState)(null);
|
|
97
|
+
const { userSessionState, saveUserSession } = useSessionContext();
|
|
98
|
+
const shouldShowCharacterizationButton = sdk.getEnforceCharacterization() && !userSessionState?.characterizationData;
|
|
99
|
+
(0, import_react2.useEffect)(() => {
|
|
100
|
+
if (chunkReceived)
|
|
101
|
+
processMessageChunk(currentMessageIdChuncked, chunkReceived);
|
|
102
|
+
}, [chunkReceived]);
|
|
103
|
+
(0, import_react2.useEffect)(() => {
|
|
104
|
+
if (userSessionState?.characterizationData && sdk.getEnforceCharacterization()) {
|
|
105
|
+
sdk.withExtraData(userSessionState?.characterizationData);
|
|
106
|
+
}
|
|
107
|
+
}, [userSessionState]);
|
|
108
|
+
function cleanMessages() {
|
|
109
|
+
setMessages([]);
|
|
110
|
+
}
|
|
111
|
+
async function processMessageChunk(messageId, chunk, error_code, error_detail, additionalInfo) {
|
|
112
|
+
setMessages((currentMessages) => {
|
|
113
|
+
const messageIndex = currentMessages.findIndex(
|
|
114
|
+
(message) => message.id === messageId
|
|
115
|
+
);
|
|
116
|
+
if (messageIndex !== -1) {
|
|
117
|
+
const updatedMessages = [...currentMessages];
|
|
118
|
+
const updatedMessage = {
|
|
119
|
+
...updatedMessages[messageIndex],
|
|
120
|
+
content: `${updatedMessages[messageIndex]?.content || ""}${chunk}`,
|
|
121
|
+
id: updatedMessages[messageIndex]?.id || "",
|
|
122
|
+
role: updatedMessages[messageIndex]?.role || "assistant",
|
|
123
|
+
error_code,
|
|
124
|
+
error_detail,
|
|
125
|
+
additionalInfo,
|
|
126
|
+
created_at: (/* @__PURE__ */ new Date()).getTime().toString()
|
|
127
|
+
};
|
|
128
|
+
updatedMessages[messageIndex] = updatedMessage;
|
|
129
|
+
return updatedMessages;
|
|
130
|
+
} else {
|
|
131
|
+
return [
|
|
132
|
+
...currentMessages,
|
|
133
|
+
{
|
|
134
|
+
content: `${chunk}`,
|
|
135
|
+
role: "assistant",
|
|
136
|
+
id: messageId,
|
|
137
|
+
error_code,
|
|
138
|
+
error_detail,
|
|
139
|
+
created_at: (/* @__PURE__ */ new Date()).getTime().toString()
|
|
140
|
+
}
|
|
141
|
+
];
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
async function handleSubmit(event, traceParentId, sessionId2, additionalInfo) {
|
|
146
|
+
setIsLoading(true);
|
|
147
|
+
event.preventDefault();
|
|
148
|
+
if (input) {
|
|
149
|
+
addUserMessage(input);
|
|
150
|
+
const messageId = createMessageId();
|
|
151
|
+
setCurrentMessageIdChuncked(messageId);
|
|
152
|
+
setStreamingMessageId(messageId);
|
|
153
|
+
await sendMessage(input, (chunk) => {
|
|
154
|
+
processMessageChunk(
|
|
155
|
+
messageId,
|
|
156
|
+
chunk?.data?.content || "",
|
|
157
|
+
chunk?.error_code,
|
|
158
|
+
chunk?.error_detail,
|
|
159
|
+
additionalInfo
|
|
160
|
+
);
|
|
161
|
+
}, traceParentId, sessionId2);
|
|
162
|
+
setInput("");
|
|
163
|
+
}
|
|
164
|
+
setIsLoading(false);
|
|
165
|
+
}
|
|
166
|
+
function handleInputChange(event) {
|
|
167
|
+
setInput(event.target.value);
|
|
168
|
+
}
|
|
169
|
+
function handleReplaceInput(input2) {
|
|
170
|
+
setInput(input2);
|
|
171
|
+
}
|
|
172
|
+
function populateMessages(messages2) {
|
|
173
|
+
setMessages(messages2);
|
|
174
|
+
}
|
|
175
|
+
function handleLoadingCancel() {
|
|
176
|
+
setIsLoading(false);
|
|
177
|
+
setIsMessageStreaming(false);
|
|
178
|
+
setInput("");
|
|
179
|
+
}
|
|
180
|
+
function addUserMessage(message) {
|
|
181
|
+
setMessages((prevMessages) => [
|
|
182
|
+
...prevMessages,
|
|
183
|
+
{
|
|
184
|
+
content: message,
|
|
185
|
+
role: "user",
|
|
186
|
+
id: createMessageId(),
|
|
187
|
+
created_at: (/* @__PURE__ */ new Date()).getTime().toString()
|
|
188
|
+
}
|
|
189
|
+
]);
|
|
190
|
+
}
|
|
191
|
+
function getCookie(name) {
|
|
192
|
+
const cookies = document.cookie.split(";");
|
|
193
|
+
for (let cookie of cookies) {
|
|
194
|
+
const [cookieName, cookieValue] = cookie.trim().split("=");
|
|
195
|
+
if (cookieName === name) {
|
|
196
|
+
return decodeURIComponent(cookieValue);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
async function sendMessage(message, callBack, traceParentId, sessionId2) {
|
|
202
|
+
const conversationId = sessionId2 || getCookie("alquimia-session");
|
|
203
|
+
setIsMessageStreaming(true);
|
|
204
|
+
setActiveTool(null);
|
|
205
|
+
setLastRequest(message);
|
|
206
|
+
const response = await sdk.widthConversationId(conversationId || "").sendMessage(message, traceParentId);
|
|
207
|
+
const es = new EventSource(response.getUrlStream());
|
|
208
|
+
es.onmessage = (event) => {
|
|
209
|
+
const parsedData = JSON.parse(event.data);
|
|
210
|
+
if (parsedData.tooler && parsedData.tooler.length > 0 && !activeTool) {
|
|
211
|
+
setActiveTool({
|
|
212
|
+
tooler: parsedData.tooler
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
if (parsedData.error_code) {
|
|
216
|
+
callBack({
|
|
217
|
+
type: "error",
|
|
218
|
+
error_code: parsedData.error_code,
|
|
219
|
+
error_detail: parsedData.error_detail
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
if (parsedData.is_complete) {
|
|
223
|
+
setIsMessageStreaming(false);
|
|
224
|
+
setStreamingMessageId(null);
|
|
225
|
+
es.close();
|
|
226
|
+
} else {
|
|
227
|
+
callBack(parsedData.answer);
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
async function handleSaveCharacterization(translation) {
|
|
232
|
+
const conversationId = getCookie("alquimia-session");
|
|
233
|
+
if (!conversationId || !saveUserSession) return;
|
|
234
|
+
saveUserSession(conversationId, translation);
|
|
235
|
+
}
|
|
236
|
+
return {
|
|
237
|
+
activeTool,
|
|
238
|
+
cleanMessages,
|
|
239
|
+
createMessageId,
|
|
240
|
+
handleInputChange,
|
|
241
|
+
handleReplaceInput,
|
|
242
|
+
handleSubmit,
|
|
243
|
+
handleSaveCharacterization,
|
|
244
|
+
handleLoadingCancel,
|
|
245
|
+
input,
|
|
246
|
+
isLoading,
|
|
247
|
+
isMessageStreaming,
|
|
248
|
+
streamingMessageId,
|
|
249
|
+
isAudioRecording,
|
|
250
|
+
shouldShowCharacterizationButton,
|
|
251
|
+
lastRequest,
|
|
252
|
+
messageMetaData,
|
|
253
|
+
messages,
|
|
254
|
+
populateMessages,
|
|
255
|
+
processMessageChunk,
|
|
256
|
+
sendMessage,
|
|
257
|
+
sessionId,
|
|
258
|
+
setActiveTool,
|
|
259
|
+
setSessionId,
|
|
260
|
+
setLastRequest,
|
|
261
|
+
setIsAudioRecording
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// src/hooks/useRatings.ts
|
|
266
|
+
var import_react3 = require("react");
|
|
267
|
+
var initialState2 = {
|
|
268
|
+
ratingStars: 0,
|
|
269
|
+
ratingThumbs: "",
|
|
270
|
+
ratingComment: ""
|
|
271
|
+
};
|
|
272
|
+
function ratingReducer(state, action) {
|
|
273
|
+
switch (action.type) {
|
|
274
|
+
case "SET_RATING_STARS":
|
|
275
|
+
return { ...state, ratingStars: action.payload };
|
|
276
|
+
case "SET_RATING_THUMBS":
|
|
277
|
+
return { ...state, ratingThumbs: action.payload };
|
|
278
|
+
case "SET_RATING_COMMENT":
|
|
279
|
+
return { ...state, ratingComment: action.payload };
|
|
280
|
+
default:
|
|
281
|
+
return state;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
function useRatings({ assistantId, sendRating, topicId }) {
|
|
285
|
+
const [isLoading, setIsLoading] = (0, import_react3.useState)(false);
|
|
286
|
+
const [hasReviewed, setHasReviewed] = (0, import_react3.useState)(false);
|
|
287
|
+
const [state, dispatch] = (0, import_react3.useReducer)(ratingReducer, initialState2);
|
|
288
|
+
const setRatingStars = (rating) => {
|
|
289
|
+
dispatch({ type: "SET_RATING_STARS", payload: rating });
|
|
290
|
+
};
|
|
291
|
+
const setRatingThumbs = (rating) => {
|
|
292
|
+
dispatch({ type: "SET_RATING_THUMBS", payload: rating });
|
|
293
|
+
};
|
|
294
|
+
const setRatingComment = (comment) => {
|
|
295
|
+
dispatch({ type: "SET_RATING_COMMENT", payload: comment });
|
|
296
|
+
};
|
|
297
|
+
const thumbsScore = (value) => {
|
|
298
|
+
return value === "thumbsUp" ? 5 : value === "thumbsDown" ? 0 : 0;
|
|
299
|
+
};
|
|
300
|
+
const handleRate = async (key, value, onHandleRateSuccess) => {
|
|
301
|
+
setIsLoading(true);
|
|
302
|
+
const sessionId = getTopicSessionId(topicId);
|
|
303
|
+
const ratingObj = {
|
|
304
|
+
topicId: parseInt(topicId),
|
|
305
|
+
sessionId: sessionId || "",
|
|
306
|
+
assistantId,
|
|
307
|
+
score: key === "score" ? value : thumbsScore(value),
|
|
308
|
+
description: key === "description" ? value : state.ratingComment
|
|
309
|
+
};
|
|
310
|
+
try {
|
|
311
|
+
const response = await sendRating(ratingObj);
|
|
312
|
+
if (!response.success) {
|
|
313
|
+
setIsLoading(false);
|
|
314
|
+
onHandleRateSuccess(false, response.error.message);
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
if (key === "score") {
|
|
318
|
+
setRatingStars(value);
|
|
319
|
+
} else if (key === "description") {
|
|
320
|
+
setRatingComment(value);
|
|
321
|
+
}
|
|
322
|
+
setHasReviewed(true);
|
|
323
|
+
setIsLoading(false);
|
|
324
|
+
onHandleRateSuccess(true);
|
|
325
|
+
} catch (err) {
|
|
326
|
+
setIsLoading(false);
|
|
327
|
+
onHandleRateSuccess(false, String(err));
|
|
328
|
+
}
|
|
329
|
+
};
|
|
330
|
+
return {
|
|
331
|
+
handleRate,
|
|
332
|
+
ratingStars: state.ratingStars,
|
|
333
|
+
ratingThumbs: state.ratingThumbs,
|
|
334
|
+
ratingComment: state.ratingComment,
|
|
335
|
+
isLoading,
|
|
336
|
+
hasReviewed
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
340
|
+
0 && (module.exports = {
|
|
341
|
+
useAlquimia,
|
|
342
|
+
useRatings
|
|
343
|
+
});
|
|
344
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/index.ts","../../src/hooks/alquimia.hook.tsx","../../src/context/session-context.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 { useSessionContext } from \"../context/session-context\";\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 const { userSessionState, saveUserSession } = useSessionContext();\n\n const shouldShowCharacterizationButton =\n sdk.getEnforceCharacterization() && !userSessionState?.characterizationData;\n\n useEffect(() => {\n if (chunkReceived)\n processMessageChunk(currentMessageIdChuncked, chunkReceived);\n }, [chunkReceived]);\n\n useEffect(() => {\n if (\n userSessionState?.characterizationData &&\n sdk.getEnforceCharacterization()\n ) {\n sdk.withExtraData(userSessionState?.characterizationData);\n }\n }, [userSessionState]);\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 async function handleSaveCharacterization(translation: Record<string, any>) {\n const conversationId = getCookie(\"alquimia-session\");\n if (!conversationId || !saveUserSession) return;\n saveUserSession(conversationId, translation);\n }\n\n return {\n activeTool,\n cleanMessages,\n createMessageId,\n handleInputChange,\n handleReplaceInput,\n handleSubmit,\n handleSaveCharacterization,\n handleLoadingCancel,\n input,\n isLoading,\n isMessageStreaming,\n streamingMessageId,\n isAudioRecording,\n shouldShowCharacterizationButton,\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 React, { createContext, useContext, useEffect, useReducer, ReactNode } from 'react';\nimport { characterizationReducer, CharacterizationState, CharacterizationAction } from '../reducer/characterization-reducer';\nimport { getCookies } from '../utils/utils';\nimport { openDB, IDBPDatabase } from 'idb';\n\ninterface SessionProviderProps {\n children: ReactNode;\n}\n\ninterface AlquimiaContextType {\n getSessionData: () => CharacterizationState;\n userSessionState?: CharacterizationState;\n saveUserSession: (id: string, data: any) => Promise<void>;\n}\n\nconst initialState: CharacterizationState = {\n sessionId: null,\n characterizationData: null,\n};\n\nconst AlquimiaContext = createContext<AlquimiaContextType | null>(null);\n\nexport const useSessionContext = () => {\n const context = useContext(AlquimiaContext);\n if (!context) {\n console.warn(\"useSessionContext must be used within a session provider. Returning default value.\");\n return {\n userSessionState: initialState,\n saveUserSession: null,\n };\n }\n return context;\n};\n\nexport const SessionProvider: React.FC<SessionProviderProps> = ({ children }) => {\n const [userSessionState, sessionDispatch] = useReducer(characterizationReducer, initialState);\n\n useEffect(() => {\n getSession();\n }, []);\n \n const getSession = async () => {\n const userCookie = await getCookies('alquimia-session') || '';\n \n const db = await openDB('alquimiaDB', 1, {\n upgrade(db: IDBPDatabase) {\n if (!db.objectStoreNames.contains('session')) {\n db.createObjectStore('session', { keyPath: 'key' });\n }\n },\n });\n \n const sessionIdEntry = await db.get('session', 'sessionId');\n const characterizationDataEntry = await db.get('session', 'characterizationData');\n const sessionDataMatchesCookie = sessionIdEntry?.value === userCookie;\n\n if (sessionIdEntry && characterizationDataEntry && sessionDataMatchesCookie) {\n sessionDispatch({\n type: 'SET_SESSION',\n payload: {\n sessionId: sessionIdEntry.value,\n characterizationData: characterizationDataEntry.value,\n },\n });\n }\n };\n\n const saveUserSession = async (id: string, data: any) => {\n const db = await openDB('alquimiaDB', 1);\n await db.put('session', { key: 'sessionId', value: id });\n await db.put('session', { key: 'characterizationData', value: data });\n\n sessionDispatch({\n type: 'SET_SESSION',\n payload: { sessionId: id, characterizationData: data },\n });\n };\n\n const getSessionData = () => {\n return userSessionState;\n }\n\n return (\n <AlquimiaContext.Provider value={{ userSessionState, getSessionData, saveUserSession }}>\n {children}\n </AlquimiaContext.Provider>\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":["import_react","sessionId","input","messages","import_react","initialState"]}
|