@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,22 @@
|
|
|
1
|
+
import react__default, { ReactNode } from 'react';
|
|
2
|
+
|
|
3
|
+
interface CharacterizationState {
|
|
4
|
+
sessionId: string | null;
|
|
5
|
+
characterizationData: any;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
interface SessionProviderProps {
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
}
|
|
11
|
+
interface AlquimiaContextType {
|
|
12
|
+
getSessionData: () => CharacterizationState;
|
|
13
|
+
userSessionState?: CharacterizationState;
|
|
14
|
+
saveUserSession: (id: string, data: any) => Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
declare const useSessionContext: () => AlquimiaContextType | {
|
|
17
|
+
userSessionState: CharacterizationState;
|
|
18
|
+
saveUserSession: null;
|
|
19
|
+
};
|
|
20
|
+
declare const SessionProvider: react__default.FC<SessionProviderProps>;
|
|
21
|
+
|
|
22
|
+
export { SessionProvider, useSessionContext };
|
|
@@ -0,0 +1,124 @@
|
|
|
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/context/index.ts
|
|
21
|
+
var context_exports = {};
|
|
22
|
+
__export(context_exports, {
|
|
23
|
+
SessionProvider: () => SessionProvider,
|
|
24
|
+
useSessionContext: () => useSessionContext
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(context_exports);
|
|
27
|
+
|
|
28
|
+
// src/context/session-context.tsx
|
|
29
|
+
var import_react = require("react");
|
|
30
|
+
|
|
31
|
+
// src/reducer/characterization-reducer.tsx
|
|
32
|
+
var characterizationReducer = (state, action) => {
|
|
33
|
+
switch (action.type) {
|
|
34
|
+
case "SET_SESSION":
|
|
35
|
+
return {
|
|
36
|
+
...state,
|
|
37
|
+
sessionId: action.payload.sessionId,
|
|
38
|
+
characterizationData: action.payload.characterizationData
|
|
39
|
+
};
|
|
40
|
+
case "CLEAR_SESSION":
|
|
41
|
+
return {
|
|
42
|
+
...state,
|
|
43
|
+
sessionId: null,
|
|
44
|
+
characterizationData: null
|
|
45
|
+
};
|
|
46
|
+
default:
|
|
47
|
+
return state;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
// src/utils/utils.ts
|
|
52
|
+
function getCookies(name) {
|
|
53
|
+
if (typeof document === "undefined") return void 0;
|
|
54
|
+
const value = `; ${document.cookie}`;
|
|
55
|
+
const parts = value.split(`; ${name}=`);
|
|
56
|
+
if (parts.length === 2) return parts.pop()?.split(";").shift();
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// src/context/session-context.tsx
|
|
60
|
+
var import_idb = require("idb");
|
|
61
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
62
|
+
var initialState = {
|
|
63
|
+
sessionId: null,
|
|
64
|
+
characterizationData: null
|
|
65
|
+
};
|
|
66
|
+
var AlquimiaContext = (0, import_react.createContext)(null);
|
|
67
|
+
var useSessionContext = () => {
|
|
68
|
+
const context = (0, import_react.useContext)(AlquimiaContext);
|
|
69
|
+
if (!context) {
|
|
70
|
+
console.warn("useSessionContext must be used within a session provider. Returning default value.");
|
|
71
|
+
return {
|
|
72
|
+
userSessionState: initialState,
|
|
73
|
+
saveUserSession: null
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
return context;
|
|
77
|
+
};
|
|
78
|
+
var SessionProvider = ({ children }) => {
|
|
79
|
+
const [userSessionState, sessionDispatch] = (0, import_react.useReducer)(characterizationReducer, initialState);
|
|
80
|
+
(0, import_react.useEffect)(() => {
|
|
81
|
+
getSession();
|
|
82
|
+
}, []);
|
|
83
|
+
const getSession = async () => {
|
|
84
|
+
const userCookie = await getCookies("alquimia-session") || "";
|
|
85
|
+
const db = await (0, import_idb.openDB)("alquimiaDB", 1, {
|
|
86
|
+
upgrade(db2) {
|
|
87
|
+
if (!db2.objectStoreNames.contains("session")) {
|
|
88
|
+
db2.createObjectStore("session", { keyPath: "key" });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
const sessionIdEntry = await db.get("session", "sessionId");
|
|
93
|
+
const characterizationDataEntry = await db.get("session", "characterizationData");
|
|
94
|
+
const sessionDataMatchesCookie = sessionIdEntry?.value === userCookie;
|
|
95
|
+
if (sessionIdEntry && characterizationDataEntry && sessionDataMatchesCookie) {
|
|
96
|
+
sessionDispatch({
|
|
97
|
+
type: "SET_SESSION",
|
|
98
|
+
payload: {
|
|
99
|
+
sessionId: sessionIdEntry.value,
|
|
100
|
+
characterizationData: characterizationDataEntry.value
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
const saveUserSession = async (id, data) => {
|
|
106
|
+
const db = await (0, import_idb.openDB)("alquimiaDB", 1);
|
|
107
|
+
await db.put("session", { key: "sessionId", value: id });
|
|
108
|
+
await db.put("session", { key: "characterizationData", value: data });
|
|
109
|
+
sessionDispatch({
|
|
110
|
+
type: "SET_SESSION",
|
|
111
|
+
payload: { sessionId: id, characterizationData: data }
|
|
112
|
+
});
|
|
113
|
+
};
|
|
114
|
+
const getSessionData = () => {
|
|
115
|
+
return userSessionState;
|
|
116
|
+
};
|
|
117
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AlquimiaContext.Provider, { value: { userSessionState, getSessionData, saveUserSession }, children });
|
|
118
|
+
};
|
|
119
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
120
|
+
0 && (module.exports = {
|
|
121
|
+
SessionProvider,
|
|
122
|
+
useSessionContext
|
|
123
|
+
});
|
|
124
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/context/index.ts","../../src/context/session-context.tsx","../../src/reducer/characterization-reducer.tsx","../../src/utils/utils.ts"],"sourcesContent":["export { SessionProvider, useSessionContext } from \"./session-context\";","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};","export interface CharacterizationState {\n sessionId: string | null;\n characterizationData: any;\n}\n\nexport type CharacterizationAction =\n | {\n type: \"SET_SESSION\";\n payload: { sessionId: string; characterizationData: any };\n }\n | { type: \"CLEAR_SESSION\" };\n\nexport const characterizationReducer = (\n state: CharacterizationState,\n action: CharacterizationAction\n): CharacterizationState => {\n switch (action.type) {\n case \"SET_SESSION\":\n return {\n ...state,\n sessionId: action.payload.sessionId,\n characterizationData: action.payload.characterizationData,\n };\n case \"CLEAR_SESSION\":\n return {\n ...state,\n sessionId: null,\n characterizationData: null,\n };\n default:\n return state;\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"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,mBAAmF;;;ACY5E,IAAM,0BAA0B,CACrC,OACA,WAC0B;AAC1B,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,WAAW,OAAO,QAAQ;AAAA,QAC1B,sBAAsB,OAAO,QAAQ;AAAA,MACvC;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,WAAW;AAAA,QACX,sBAAsB;AAAA,MACxB;AAAA,IACF;AACE,aAAO;AAAA,EACX;AACF;;;ACAO,SAAS,WAAW,MAAc;AACvC,MAAI,OAAO,aAAa,YAAa,QAAO;AAC5C,QAAM,QAAQ,KAAK,SAAS,MAAM;AAClC,QAAM,QAAQ,MAAM,MAAM,KAAK,IAAI,GAAG;AACtC,MAAI,MAAM,WAAW,EAAG,QAAO,MAAM,IAAI,GAAG,MAAM,GAAG,EAAE,MAAM;AAC/D;;;AFlCA,iBAAqC;AAgFjC;AApEJ,IAAM,eAAsC;AAAA,EAC1C,WAAW;AAAA,EACX,sBAAsB;AACxB;AAEA,IAAM,sBAAkB,4BAA0C,IAAI;AAE/D,IAAM,oBAAoB,MAAM;AACrC,QAAM,cAAU,yBAAW,eAAe;AAC1C,MAAI,CAAC,SAAS;AACZ,YAAQ,KAAK,oFAAoF;AACjG,WAAO;AAAA,MACL,kBAAkB;AAAA,MAClB,iBAAiB;AAAA,IACnB;AAAA,EACF;AACA,SAAO;AACT;AAEO,IAAM,kBAAkD,CAAC,EAAE,SAAS,MAAM;AAC7E,QAAM,CAAC,kBAAkB,eAAe,QAAI,yBAAW,yBAAyB,YAAY;AAE5F,8BAAU,MAAM;AACd,eAAW;AAAA,EACb,GAAG,CAAC,CAAC;AAEL,QAAM,aAAa,YAAY;AAC7B,UAAM,aAAa,MAAM,WAAW,kBAAkB,KAAK;AAE3D,UAAM,KAAK,UAAM,mBAAO,cAAc,GAAG;AAAA,MACvC,QAAQA,KAAkB;AACxB,YAAI,CAACA,IAAG,iBAAiB,SAAS,SAAS,GAAG;AAC5C,UAAAA,IAAG,kBAAkB,WAAW,EAAE,SAAS,MAAM,CAAC;AAAA,QACpD;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,iBAAiB,MAAM,GAAG,IAAI,WAAW,WAAW;AAC1D,UAAM,4BAA4B,MAAM,GAAG,IAAI,WAAW,sBAAsB;AAChF,UAAM,2BAA2B,gBAAgB,UAAU;AAE3D,QAAI,kBAAkB,6BAA6B,0BAA0B;AAC3E,sBAAgB;AAAA,QACd,MAAM;AAAA,QACN,SAAS;AAAA,UACP,WAAW,eAAe;AAAA,UAC1B,sBAAsB,0BAA0B;AAAA,QAClD;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEF,QAAM,kBAAkB,OAAO,IAAY,SAAc;AACvD,UAAM,KAAK,UAAM,mBAAO,cAAc,CAAC;AACvC,UAAM,GAAG,IAAI,WAAW,EAAE,KAAK,aAAa,OAAO,GAAG,CAAC;AACvD,UAAM,GAAG,IAAI,WAAW,EAAE,KAAK,wBAAwB,OAAO,KAAK,CAAC;AAEpE,oBAAgB;AAAA,MACd,MAAM;AAAA,MACN,SAAS,EAAE,WAAW,IAAI,sBAAsB,KAAK;AAAA,IACvD,CAAC;AAAA,EACH;AAEA,QAAM,iBAAiB,MAAM;AAC3B,WAAO;AAAA,EACT;AAEA,SACE,4CAAC,gBAAgB,UAAhB,EAAyB,OAAO,EAAE,kBAAkB,gBAAgB,gBAAgB,GAClF,UACH;AAEJ;","names":["db"]}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
// src/context/session-context.tsx
|
|
2
|
+
import { createContext, useContext, useEffect, useReducer } from "react";
|
|
3
|
+
|
|
4
|
+
// src/reducer/characterization-reducer.tsx
|
|
5
|
+
var characterizationReducer = (state, action) => {
|
|
6
|
+
switch (action.type) {
|
|
7
|
+
case "SET_SESSION":
|
|
8
|
+
return {
|
|
9
|
+
...state,
|
|
10
|
+
sessionId: action.payload.sessionId,
|
|
11
|
+
characterizationData: action.payload.characterizationData
|
|
12
|
+
};
|
|
13
|
+
case "CLEAR_SESSION":
|
|
14
|
+
return {
|
|
15
|
+
...state,
|
|
16
|
+
sessionId: null,
|
|
17
|
+
characterizationData: null
|
|
18
|
+
};
|
|
19
|
+
default:
|
|
20
|
+
return state;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
// src/utils/utils.ts
|
|
25
|
+
function getCookies(name) {
|
|
26
|
+
if (typeof document === "undefined") return void 0;
|
|
27
|
+
const value = `; ${document.cookie}`;
|
|
28
|
+
const parts = value.split(`; ${name}=`);
|
|
29
|
+
if (parts.length === 2) return parts.pop()?.split(";").shift();
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
// src/context/session-context.tsx
|
|
33
|
+
import { openDB } from "idb";
|
|
34
|
+
import { jsx } from "react/jsx-runtime";
|
|
35
|
+
var initialState = {
|
|
36
|
+
sessionId: null,
|
|
37
|
+
characterizationData: null
|
|
38
|
+
};
|
|
39
|
+
var AlquimiaContext = createContext(null);
|
|
40
|
+
var useSessionContext = () => {
|
|
41
|
+
const context = useContext(AlquimiaContext);
|
|
42
|
+
if (!context) {
|
|
43
|
+
console.warn("useSessionContext must be used within a session provider. Returning default value.");
|
|
44
|
+
return {
|
|
45
|
+
userSessionState: initialState,
|
|
46
|
+
saveUserSession: null
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return context;
|
|
50
|
+
};
|
|
51
|
+
var SessionProvider = ({ children }) => {
|
|
52
|
+
const [userSessionState, sessionDispatch] = useReducer(characterizationReducer, initialState);
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
getSession();
|
|
55
|
+
}, []);
|
|
56
|
+
const getSession = async () => {
|
|
57
|
+
const userCookie = await getCookies("alquimia-session") || "";
|
|
58
|
+
const db = await openDB("alquimiaDB", 1, {
|
|
59
|
+
upgrade(db2) {
|
|
60
|
+
if (!db2.objectStoreNames.contains("session")) {
|
|
61
|
+
db2.createObjectStore("session", { keyPath: "key" });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
const sessionIdEntry = await db.get("session", "sessionId");
|
|
66
|
+
const characterizationDataEntry = await db.get("session", "characterizationData");
|
|
67
|
+
const sessionDataMatchesCookie = sessionIdEntry?.value === userCookie;
|
|
68
|
+
if (sessionIdEntry && characterizationDataEntry && sessionDataMatchesCookie) {
|
|
69
|
+
sessionDispatch({
|
|
70
|
+
type: "SET_SESSION",
|
|
71
|
+
payload: {
|
|
72
|
+
sessionId: sessionIdEntry.value,
|
|
73
|
+
characterizationData: characterizationDataEntry.value
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const saveUserSession = async (id, data) => {
|
|
79
|
+
const db = await openDB("alquimiaDB", 1);
|
|
80
|
+
await db.put("session", { key: "sessionId", value: id });
|
|
81
|
+
await db.put("session", { key: "characterizationData", value: data });
|
|
82
|
+
sessionDispatch({
|
|
83
|
+
type: "SET_SESSION",
|
|
84
|
+
payload: { sessionId: id, characterizationData: data }
|
|
85
|
+
});
|
|
86
|
+
};
|
|
87
|
+
const getSessionData = () => {
|
|
88
|
+
return userSessionState;
|
|
89
|
+
};
|
|
90
|
+
return /* @__PURE__ */ jsx(AlquimiaContext.Provider, { value: { userSessionState, getSessionData, saveUserSession }, children });
|
|
91
|
+
};
|
|
92
|
+
export {
|
|
93
|
+
SessionProvider,
|
|
94
|
+
useSessionContext
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/context/session-context.tsx","../../src/reducer/characterization-reducer.tsx","../../src/utils/utils.ts"],"sourcesContent":["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};","export interface CharacterizationState {\n sessionId: string | null;\n characterizationData: any;\n}\n\nexport type CharacterizationAction =\n | {\n type: \"SET_SESSION\";\n payload: { sessionId: string; characterizationData: any };\n }\n | { type: \"CLEAR_SESSION\" };\n\nexport const characterizationReducer = (\n state: CharacterizationState,\n action: CharacterizationAction\n): CharacterizationState => {\n switch (action.type) {\n case \"SET_SESSION\":\n return {\n ...state,\n sessionId: action.payload.sessionId,\n characterizationData: action.payload.characterizationData,\n };\n case \"CLEAR_SESSION\":\n return {\n ...state,\n sessionId: null,\n characterizationData: null,\n };\n default:\n return state;\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"],"mappings":";AAAA,SAAgB,eAAe,YAAY,WAAW,kBAA6B;;;ACY5E,IAAM,0BAA0B,CACrC,OACA,WAC0B;AAC1B,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,WAAW,OAAO,QAAQ;AAAA,QAC1B,sBAAsB,OAAO,QAAQ;AAAA,MACvC;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,WAAW;AAAA,QACX,sBAAsB;AAAA,MACxB;AAAA,IACF;AACE,aAAO;AAAA,EACX;AACF;;;ACAO,SAAS,WAAW,MAAc;AACvC,MAAI,OAAO,aAAa,YAAa,QAAO;AAC5C,QAAM,QAAQ,KAAK,SAAS,MAAM;AAClC,QAAM,QAAQ,MAAM,MAAM,KAAK,IAAI,GAAG;AACtC,MAAI,MAAM,WAAW,EAAG,QAAO,MAAM,IAAI,GAAG,MAAM,GAAG,EAAE,MAAM;AAC/D;;;AFlCA,SAAS,cAA4B;AAgFjC;AApEJ,IAAM,eAAsC;AAAA,EAC1C,WAAW;AAAA,EACX,sBAAsB;AACxB;AAEA,IAAM,kBAAkB,cAA0C,IAAI;AAE/D,IAAM,oBAAoB,MAAM;AACrC,QAAM,UAAU,WAAW,eAAe;AAC1C,MAAI,CAAC,SAAS;AACZ,YAAQ,KAAK,oFAAoF;AACjG,WAAO;AAAA,MACL,kBAAkB;AAAA,MAClB,iBAAiB;AAAA,IACnB;AAAA,EACF;AACA,SAAO;AACT;AAEO,IAAM,kBAAkD,CAAC,EAAE,SAAS,MAAM;AAC7E,QAAM,CAAC,kBAAkB,eAAe,IAAI,WAAW,yBAAyB,YAAY;AAE5F,YAAU,MAAM;AACd,eAAW;AAAA,EACb,GAAG,CAAC,CAAC;AAEL,QAAM,aAAa,YAAY;AAC7B,UAAM,aAAa,MAAM,WAAW,kBAAkB,KAAK;AAE3D,UAAM,KAAK,MAAM,OAAO,cAAc,GAAG;AAAA,MACvC,QAAQA,KAAkB;AACxB,YAAI,CAACA,IAAG,iBAAiB,SAAS,SAAS,GAAG;AAC5C,UAAAA,IAAG,kBAAkB,WAAW,EAAE,SAAS,MAAM,CAAC;AAAA,QACpD;AAAA,MACF;AAAA,IACF,CAAC;AAED,UAAM,iBAAiB,MAAM,GAAG,IAAI,WAAW,WAAW;AAC1D,UAAM,4BAA4B,MAAM,GAAG,IAAI,WAAW,sBAAsB;AAChF,UAAM,2BAA2B,gBAAgB,UAAU;AAE3D,QAAI,kBAAkB,6BAA6B,0BAA0B;AAC3E,sBAAgB;AAAA,QACd,MAAM;AAAA,QACN,SAAS;AAAA,UACP,WAAW,eAAe;AAAA,UAC1B,sBAAsB,0BAA0B;AAAA,QAClD;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEF,QAAM,kBAAkB,OAAO,IAAY,SAAc;AACvD,UAAM,KAAK,MAAM,OAAO,cAAc,CAAC;AACvC,UAAM,GAAG,IAAI,WAAW,EAAE,KAAK,aAAa,OAAO,GAAG,CAAC;AACvD,UAAM,GAAG,IAAI,WAAW,EAAE,KAAK,wBAAwB,OAAO,KAAK,CAAC;AAEpE,oBAAgB;AAAA,MACd,MAAM;AAAA,MACN,SAAS,EAAE,WAAW,IAAI,sBAAsB,KAAK;AAAA,IACvD,CAAC;AAAA,EACH;AAEA,QAAM,iBAAiB,MAAM;AAC3B,WAAO;AAAA,EACT;AAEA,SACE,oBAAC,gBAAgB,UAAhB,EAAyB,OAAO,EAAE,kBAAkB,gBAAgB,gBAAgB,GAClF,UACH;AAEJ;","names":["db"]}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { Message } from 'ai';
|
|
3
|
+
import { A as AlquimiaSDK } from '../alquimia-sdk-DK0XLjol.mjs';
|
|
4
|
+
import { AIMessageChunk, RatingData } from '../types/index.mjs';
|
|
5
|
+
import { createMessageId } from '../utils/index.mjs';
|
|
6
|
+
import '@elastic/apm-rum';
|
|
7
|
+
|
|
8
|
+
declare function useAlquimia(sdk: AlquimiaSDK): {
|
|
9
|
+
activeTool: any;
|
|
10
|
+
cleanMessages: () => void;
|
|
11
|
+
createMessageId: typeof createMessageId;
|
|
12
|
+
handleInputChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
13
|
+
handleReplaceInput: (input: string) => void;
|
|
14
|
+
handleSubmit: (event: React.FormEvent<HTMLFormElement>, traceParentId?: string, sessionId?: string, additionalInfo?: string) => Promise<void>;
|
|
15
|
+
handleSaveCharacterization: (translation: Record<string, any>) => Promise<void>;
|
|
16
|
+
handleLoadingCancel: () => void;
|
|
17
|
+
input: string;
|
|
18
|
+
isLoading: boolean;
|
|
19
|
+
isMessageStreaming: boolean;
|
|
20
|
+
streamingMessageId: string | null;
|
|
21
|
+
isAudioRecording: boolean;
|
|
22
|
+
shouldShowCharacterizationButton: boolean;
|
|
23
|
+
lastRequest: string | null;
|
|
24
|
+
messageMetaData: any;
|
|
25
|
+
messages: (Message & {
|
|
26
|
+
error_code?: string;
|
|
27
|
+
error_detail?: string;
|
|
28
|
+
})[];
|
|
29
|
+
populateMessages: (messages: Message[]) => void;
|
|
30
|
+
processMessageChunk: (messageId: string, chunk: string, error_code?: string, error_detail?: string, additionalInfo?: string) => Promise<void>;
|
|
31
|
+
sendMessage: (message: string, callBack: (chunk: AIMessageChunk) => void, traceParentId?: string, sessionId?: string) => Promise<void>;
|
|
32
|
+
sessionId: string | null;
|
|
33
|
+
setActiveTool: react.Dispatch<any>;
|
|
34
|
+
setSessionId: react.Dispatch<react.SetStateAction<string | null>>;
|
|
35
|
+
setLastRequest: react.Dispatch<react.SetStateAction<string | null>>;
|
|
36
|
+
setIsAudioRecording: react.Dispatch<react.SetStateAction<boolean>>;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
interface UseRatingsParams {
|
|
40
|
+
assistantId: string;
|
|
41
|
+
topicId: string;
|
|
42
|
+
sendRating: (ratingData: RatingData) => Promise<any>;
|
|
43
|
+
onError?: (componentName: string, error: Error) => void;
|
|
44
|
+
}
|
|
45
|
+
declare function useRatings({ assistantId, sendRating, topicId }: UseRatingsParams): {
|
|
46
|
+
handleRate: (key: string, value: any | string, onHandleRateSuccess: (success: boolean, err?: string) => void) => Promise<void>;
|
|
47
|
+
ratingStars: number;
|
|
48
|
+
ratingThumbs: "" | "thumbsUp" | "thumbsDown";
|
|
49
|
+
ratingComment: string;
|
|
50
|
+
isLoading: boolean;
|
|
51
|
+
hasReviewed: boolean;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export { useAlquimia, useRatings };
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { Message } from 'ai';
|
|
3
|
+
import { A as AlquimiaSDK } from '../alquimia-sdk-DK0XLjol.js';
|
|
4
|
+
import { AIMessageChunk, RatingData } from '../types/index.js';
|
|
5
|
+
import { createMessageId } from '../utils/index.js';
|
|
6
|
+
import '@elastic/apm-rum';
|
|
7
|
+
|
|
8
|
+
declare function useAlquimia(sdk: AlquimiaSDK): {
|
|
9
|
+
activeTool: any;
|
|
10
|
+
cleanMessages: () => void;
|
|
11
|
+
createMessageId: typeof createMessageId;
|
|
12
|
+
handleInputChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
13
|
+
handleReplaceInput: (input: string) => void;
|
|
14
|
+
handleSubmit: (event: React.FormEvent<HTMLFormElement>, traceParentId?: string, sessionId?: string, additionalInfo?: string) => Promise<void>;
|
|
15
|
+
handleSaveCharacterization: (translation: Record<string, any>) => Promise<void>;
|
|
16
|
+
handleLoadingCancel: () => void;
|
|
17
|
+
input: string;
|
|
18
|
+
isLoading: boolean;
|
|
19
|
+
isMessageStreaming: boolean;
|
|
20
|
+
streamingMessageId: string | null;
|
|
21
|
+
isAudioRecording: boolean;
|
|
22
|
+
shouldShowCharacterizationButton: boolean;
|
|
23
|
+
lastRequest: string | null;
|
|
24
|
+
messageMetaData: any;
|
|
25
|
+
messages: (Message & {
|
|
26
|
+
error_code?: string;
|
|
27
|
+
error_detail?: string;
|
|
28
|
+
})[];
|
|
29
|
+
populateMessages: (messages: Message[]) => void;
|
|
30
|
+
processMessageChunk: (messageId: string, chunk: string, error_code?: string, error_detail?: string, additionalInfo?: string) => Promise<void>;
|
|
31
|
+
sendMessage: (message: string, callBack: (chunk: AIMessageChunk) => void, traceParentId?: string, sessionId?: string) => Promise<void>;
|
|
32
|
+
sessionId: string | null;
|
|
33
|
+
setActiveTool: react.Dispatch<any>;
|
|
34
|
+
setSessionId: react.Dispatch<react.SetStateAction<string | null>>;
|
|
35
|
+
setLastRequest: react.Dispatch<react.SetStateAction<string | null>>;
|
|
36
|
+
setIsAudioRecording: react.Dispatch<react.SetStateAction<boolean>>;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
interface UseRatingsParams {
|
|
40
|
+
assistantId: string;
|
|
41
|
+
topicId: string;
|
|
42
|
+
sendRating: (ratingData: RatingData) => Promise<any>;
|
|
43
|
+
onError?: (componentName: string, error: Error) => void;
|
|
44
|
+
}
|
|
45
|
+
declare function useRatings({ assistantId, sendRating, topicId }: UseRatingsParams): {
|
|
46
|
+
handleRate: (key: string, value: any | string, onHandleRateSuccess: (success: boolean, err?: string) => void) => Promise<void>;
|
|
47
|
+
ratingStars: number;
|
|
48
|
+
ratingThumbs: "" | "thumbsUp" | "thumbsDown";
|
|
49
|
+
ratingComment: string;
|
|
50
|
+
isLoading: boolean;
|
|
51
|
+
hasReviewed: boolean;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
export { useAlquimia, useRatings };
|