@alquimia-ai/tools 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -0
- package/dist/index.d.mts +322 -0
- package/dist/index.d.ts +322 -0
- package/dist/index.js +2582 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2336 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/sdk-frontend/sdk-frontend/packages/tools/dist/index.mjs","../src/button.tsx","../src/card.tsx","../src/code.tsx","../src/sdk/alquimia-sdk.ts","../src/sdk/providers/providers.ts","../src/sdk/providers/alquimia.ts","../src/utils/utils.ts","../src/sdk/providers/openai.ts","../src/sdk/providers/stability.ts","../src/sdk/providers/eleven-labs.ts","../src/sdk/providers/elastic-search.ts","../src/hooks/alquimia.hook.tsx","../src/context/session-context.tsx","../src/reducer/characterization-reducer.tsx","../src/hooks/useRatings.ts","../src/actions/alquimia.action.ts","../src/actions/baseApi.action.ts"],"names":["Button","children","className","appName","React","createElement","onClick","alert","Card","title","href","rel","target","Code","axios","AlquimiaSDK","config","enforceCharacterization","conversationId","sessionId","streamId","tools","extraData","forceProfile","axiosInstance","create","interceptors","response","use","error","status","loggerProvider","logError","url","method","data","responseData","Promise","reject","textToSpeech","bind","speechToText","widthConversationId","withWhisperProvider","provider","whisperProvider","withStableDiffusionProvider","stableDiffusionProvider","withAnalyzeCharacterizationProvider","analyzeCharacterizationProvider","withRatingsProvider","ratingsProvider","withLoggerProvider","getEnforceCharacterization","withTools","withExtraData","withForceProfile","text","Error","audio","sendMessage","query","traceParent","initMessage","result","session_id","extra_data","force_profile","post","chatUrl","headers","stream_id","generateImage","analyzeCharacterization","rate","logInfo","message","getUrlStream","streamUrl","configure","apiKey","inferUrl","assistantId","alquimia_sdk_default","GenerativeProvider","WhisperProvider","StableDiffusionProvider","CharacterizationProvider","RatingsProvider","LoggerProvider","AlquimiaWhisperProvider","axiosClient","baseURL","ttsRoute","responseType","console","sttRoute","AlquimiaRatingsProvider","path","baseUrl","route","Authorization","token","success","isAxiosError","details","generateTranslatePrompt","prompt","getCookies","name","parts","document","value","cookie","split","length","pop","shift","generateHeaders","Object","entries","forEach","key","isTextContent","buffer","TextDecoder","decode","test","trim","getQueryParam","param","window","urlParams","URLSearchParams","location","search","get","defineAssistantId","defaultId","pathname","queryAssistantId","localStorage","setItem","storedAssistantId","getItem","formatTimeWithUnit","timeMs","toFixed","Math","round","serializeAxiosError","customError","stack","code","String","parseConversationsMapCookie","cookieValue","decodedValue","decodeURIComponent","JSON","parse","e","getTopicSessionId","topicId","conversationsStr","sessionCookie","conversationsMap","createMessageId","floor","random","toString","OpenAI","OpenAIWhisperProvider","Blob","OpenAIAnalyzeCharProvider","client","arrangedText","arrangedObject","chat","completions","model","messages","role","content","max_tokens","temperature","choices","OpenAIStableDiffusionProvider","images","generate","n","size","Buffer","StabilityProvider","payload","base64Image","output_format","postForm","toFormData","FormData","validateStatus","Accept","from","ElevenLabsClient","ElevenLabs","requestSpecs","optimize_streaming_latency","OptimizeStreamingLatency","Zero","OutputFormat","Mp344100128","model_id","language","voice_settings","stability","similarity_boost","style","ElevenLabsWhisperProvider","voiceId","pino","ElasticLoggerProvider","_ElasticLoggerProvider","logger","initialize","pinoElastic","streamToElastic","all","default","index","node","endpoint","esVersion","flushBytes","auth","username","password","tls","rejectUnauthorized","op_type","on","err","log","level","timestamp","Date","toISOString","info","errorDetails","useEffect","useState","createContext","useContext","useReducer","characterizationReducer","state","action","type","characterizationData","openDB","initialState","AlquimiaContext","useSessionContext","context","warn","userSessionState","saveUserSession","SessionProvider","sessionDispatch","getSession","userCookie","db","sessionIdEntry","characterizationDataEntry","sessionDataMatchesCookie","upgrade","objectStoreNames","contains","createObjectStore","keyPath","id","put","getSessionData","Provider","useAlquimia","sdk","chunkReceived","setChunkReceived","currentMessageIdChuncked","setCurrentMessageIdChuncked","input","setInput","isLoading","setIsLoading","isMessageStreaming","setIsMessageStreaming","streamingMessageId","setStreamingMessageId","isAudioRecording","setIsAudioRecording","messageMetaData","setMessageMetaData","setMessages","setSessionId","activeTool","setActiveTool","lastRequest","setLastRequest","shouldShowCharacterizationButton","processMessageChunk","cleanMessages","messageId","chunk","error_code","error_detail","additionalInfo","currentMessages","messageIndex","findIndex","updatedMessages","updatedMessage","created_at","getTime","handleSubmit","event","traceParentId","preventDefault","addUserMessage","handleInputChange","handleReplaceInput","populateMessages","handleLoadingCancel","prevMessages","getCookie","cookies","cookieName","callBack","es","EventSource","onmessage","parsedData","tooler","is_complete","close","answer","handleSaveCharacterization","translation","ratingStars","ratingThumbs","ratingComment","ratingReducer","useRatings","sendRating","hasReviewed","setHasReviewed","dispatch","setRatingStars","rating","setRatingThumbs","setRatingComment","comment","thumbsScore","handleRate","onHandleRateSuccess","ratingObj","parseInt","score","description","randomUUID","initConversation","reset","cookieStore","alquimia_session","existingConversations","set","stringify","createResource","fetch","body","cache","ok","json","statusText","readResource","contentType","arrayBuffer","includes","updateResource","deleteResource"],"mappings":"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","sourcesContent":["// src/button.tsx\nvar Button = ({ children, className, appName }) => {\n return /* @__PURE__ */ React.createElement(\n \"button\",\n {\n className,\n onClick: () => alert(`Hello from your ${appName} app!`)\n },\n children\n );\n};\n\n// src/card.tsx\nfunction Card({\n className,\n title,\n children,\n href\n}) {\n return /* @__PURE__ */ React.createElement(\n \"a\",\n {\n className,\n href: `${href}?utm_source=create-turbo&utm_medium=basic&utm_campaign=create-turbo\"`,\n rel: \"noopener noreferrer\",\n target: \"_blank\"\n },\n /* @__PURE__ */ React.createElement(\"h2\", null, title, \" \", /* @__PURE__ */ React.createElement(\"span\", null, \"->\")),\n /* @__PURE__ */ React.createElement(\"p\", null, children)\n );\n}\n\n// src/code.tsx\nfunction Code({\n children,\n className\n}) {\n return /* @__PURE__ */ React.createElement(\"code\", { className }, children);\n}\n\n// src/sdk/alquimia-sdk.ts\nimport axios from \"axios\";\nvar AlquimiaSDK = class {\n constructor(config, enforceCharacterization = true) {\n this.conversationId = null;\n this.sessionId = null;\n this.streamId = null;\n this.tools = [];\n this.extraData = {};\n this.forceProfile = {};\n this.config = config;\n this.enforceCharacterization = enforceCharacterization;\n this.axiosInstance = axios.create();\n this.axiosInstance.interceptors.response.use(\n (response) => response,\n async (error) => {\n if (error.response?.status) {\n if (this.loggerProvider) {\n await this.loggerProvider.logError(\n \"Server Error\",\n error,\n {\n url: error.config.url,\n method: error.config.method,\n data: error.config.data,\n status: error.response.status,\n responseData: error.response.data\n }\n );\n }\n }\n return Promise.reject(error);\n }\n );\n this.textToSpeech = this.textToSpeech.bind(this);\n this.speechToText = this.speechToText.bind(this);\n }\n static configure(apiKey, inferUrl, streamUrl, assistantId) {\n return {\n apiKey,\n chatUrl: `${inferUrl}/chat/${assistantId}`,\n streamUrl: `${streamUrl}/${assistantId}`,\n assistantId\n };\n }\n widthConversationId(conversationId) {\n this.conversationId = conversationId;\n return this;\n }\n withWhisperProvider(provider) {\n this.whisperProvider = provider;\n return this;\n }\n withStableDiffusionProvider(provider) {\n this.stableDiffusionProvider = provider;\n return this;\n }\n withAnalyzeCharacterizationProvider(provider) {\n this.analyzeCharacterizationProvider = provider;\n return this;\n }\n withRatingsProvider(provider) {\n this.ratingsProvider = provider;\n return this;\n }\n withLoggerProvider(provider) {\n this.loggerProvider = provider;\n return this;\n }\n getEnforceCharacterization() {\n return this.enforceCharacterization ?? true;\n }\n withTools(tools) {\n this.tools = tools;\n return this;\n }\n withExtraData(extraData) {\n this.extraData = extraData;\n return this;\n }\n withForceProfile(forceProfile) {\n this.forceProfile = forceProfile;\n return this;\n }\n textToSpeech(text) {\n if (!this.whisperProvider) {\n throw new Error(\"Whisper provider not initialized\");\n }\n return this.whisperProvider.textToSpeech(text);\n }\n speechToText(audio) {\n if (!this.whisperProvider) {\n throw new Error(\"Whisper provider not initialized\");\n }\n return this.whisperProvider.speechToText(audio);\n }\n async sendMessage(query, traceParent) {\n if (!this.conversationId) {\n throw new Error(\"Conversation not initialized\");\n }\n const initMessage = {\n query,\n session_id: this.conversationId,\n tools: this.tools,\n extra_data: this.extraData,\n force_profile: this.forceProfile\n };\n const result = (await this.axiosInstance.post(this.config.chatUrl, initMessage, {\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-trace-parent\": traceParent || \"\"\n }\n })).data;\n this.streamId = result.data.stream_id;\n return this;\n }\n async generateImage(query) {\n if (!this.stableDiffusionProvider) {\n throw new Error(\"Stable Diffusion provider not initialized\");\n }\n return this.stableDiffusionProvider.generateImage(query);\n }\n async analyzeCharacterization(text) {\n if (!this.analyzeCharacterizationProvider) {\n throw new Error(\"analyze characterization provider not initialized\");\n }\n return this.analyzeCharacterizationProvider.analyzeCharacterization(text);\n }\n async rate(data) {\n if (!this.ratingsProvider) {\n throw new Error(\"ratings provider not initialized\");\n }\n return this.ratingsProvider.rate(data);\n }\n async logInfo(message, data) {\n if (!this.loggerProvider) {\n throw new Error(\"logger provider not initialized\");\n }\n return this.loggerProvider.logInfo(message, data);\n }\n async logError(message, error, data) {\n if (!this.loggerProvider) {\n throw new Error(\"logger provider not initialized\");\n }\n return this.loggerProvider.logError(message, error, data);\n }\n getUrlStream() {\n return `${this.config.streamUrl}/${this.streamId}`;\n }\n};\nvar alquimia_sdk_default = AlquimiaSDK;\n\n// src/sdk/providers/providers.ts\nvar GenerativeProvider = class {\n constructor(config) {\n this.config = config;\n }\n};\nvar WhisperProvider = class {\n constructor(config) {\n this.config = config;\n }\n};\nvar StableDiffusionProvider = class {\n constructor(config) {\n this.config = config;\n }\n};\nvar CharacterizationProvider = class {\n constructor(config) {\n this.config = config;\n }\n};\nvar RatingsProvider = class {\n constructor(config) {\n this.config = config;\n }\n};\nvar LoggerProvider = class {\n constructor(config) {\n this.config = config;\n }\n};\n\n// src/sdk/providers/alquimia.ts\nimport axios2 from \"axios\";\nvar AlquimiaWhisperProvider = class extends WhisperProvider {\n constructor(config) {\n super(config);\n }\n async textToSpeech(text) {\n const axiosClient = axios2.create({\n baseURL: this.config.baseURL\n });\n try {\n const response = await axiosClient.post(\n this.config.ttsRoute,\n {\n text\n },\n { responseType: \"blob\" }\n );\n return response.data;\n } catch (error) {\n console.error(\"Error converting text to speech:\", error);\n throw error;\n }\n }\n async speechToText(audio) {\n const axiosClient = axios2.create({\n baseURL: this.config.baseURL\n });\n try {\n const response = await axiosClient.post(this.config.sttRoute, {\n audio\n });\n return response.data;\n } catch (error) {\n console.error(\"Error converting speech to text:\", error);\n throw error;\n }\n }\n};\nvar AlquimiaRatingsProvider = class extends RatingsProvider {\n constructor(config) {\n super(config);\n }\n async rate(data) {\n const path = `${this.config.baseUrl}${this.config.route}`;\n try {\n let response;\n const headers = {\n Authorization: `Bearer ${this.config.token}`,\n \"Content-Type\": \"application/json\",\n ...this.config.headers || {}\n };\n response = await axios2.post(`${path}`, data, { headers });\n return {\n success: true,\n data: response.data\n };\n } catch (error) {\n if (axios2.isAxiosError(error)) {\n return {\n success: false,\n error: {\n message: error.message,\n response: {\n status: error.response?.status,\n data: error.response?.data\n },\n details: error.response?.data\n }\n };\n }\n return {\n success: false,\n error: {\n message: error instanceof Error ? error.message : \"Unknown error occurred\",\n response: {\n status: 500\n }\n }\n };\n }\n }\n};\n\n// src/utils/utils.ts\nfunction generateTranslatePrompt(text) {\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 return prompt;\n}\nfunction getCookies(name) {\n if (typeof document === \"undefined\") return void 0;\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) return parts.pop()?.split(\";\").shift();\n}\nfunction generateHeaders(config) {\n const headers = {\n \"Content-Type\": \"application/json\"\n };\n if (config.token) {\n headers[\"Authorization\"] = `Bearer ${config.token}`;\n }\n if (config.headers) {\n Object.entries(config.headers).forEach(([key, value]) => {\n headers[key] = value;\n });\n }\n return headers;\n}\nfunction isTextContent(buffer) {\n try {\n const text = new TextDecoder().decode(buffer);\n return /^[\\w\\#\\-\\*]/.test(text.trim());\n } catch {\n return false;\n }\n}\nfunction getQueryParam(param) {\n if (typeof window !== \"undefined\") {\n const urlParams = new URLSearchParams(window.location.search);\n return urlParams.get(param);\n }\n return null;\n}\nfunction defineAssistantId(defaultId) {\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}\nfunction formatTimeWithUnit(timeMs) {\n if (timeMs >= 1e3) {\n return `${(timeMs / 1e3).toFixed(1)}s`;\n }\n return `${Math.round(timeMs)}ms`;\n}\nfunction serializeAxiosError(error) {\n if (error instanceof Error) {\n const customError = error;\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}\nfunction parseConversationsMapCookie(cookieValue) {\n try {\n const decodedValue = decodeURIComponent(cookieValue);\n return JSON.parse(decodedValue);\n } catch (e) {\n console.error(\"Error parsing conversations cookie:\", e);\n return {};\n }\n}\nfunction getTopicSessionId(topicId) {\n const conversationsStr = getCookies(\"alquimia-sessions\") || \"{}\";\n if (!conversationsStr) {\n const sessionCookie = getCookies(\"alquimia-session\");\n return sessionCookie || \"\";\n }\n const conversationsMap = parseConversationsMapCookie(conversationsStr);\n return conversationsMap[topicId] || \"\";\n}\nfunction createMessageId() {\n return Math.floor(Math.random() * 1e6).toString();\n}\n\n// src/sdk/providers/openai.ts\nimport OpenAI from \"openai\";\nvar OpenAIWhisperProvider = class extends WhisperProvider {\n async textToSpeech(text) {\n return new Blob();\n }\n async speechToText(audio) {\n return \"\";\n }\n};\nvar OpenAIAnalyzeCharProvider = class extends CharacterizationProvider {\n constructor(config) {\n super(config);\n this.client = new OpenAI({\n apiKey: config.apiKey\n });\n }\n async analyzeCharacterization(text) {\n const prompt = generateTranslatePrompt(text);\n const response = await this.client.chat.completions.create({\n model: \"gpt-4o-mini\",\n messages: [\n { role: \"system\", content: \"You are a helpful assistant.\" },\n { role: \"user\", content: prompt }\n ],\n max_tokens: 150,\n temperature: 0.7\n });\n const arrangedText = response.choices[0].message.content.trim();\n try {\n const arrangedObject = JSON.parse(arrangedText);\n return arrangedObject;\n } catch (error) {\n throw new Error(\"Failed to parse the response from OpenAI\");\n }\n }\n};\nvar OpenAIStableDiffusionProvider = class extends StableDiffusionProvider {\n constructor(config) {\n super(config);\n this.client = new OpenAI({\n apiKey: config.apiKey\n });\n }\n async generateImage(query) {\n const response = await this.client.images.generate({\n model: \"dall-e-3\",\n prompt: query,\n n: 1,\n size: \"1024x1024\"\n });\n return response.data[0].url;\n }\n};\n\n// src/sdk/providers/stability.ts\nimport { Buffer } from \"buffer\";\nimport axios3 from \"axios\";\nvar StabilityProvider = class extends StableDiffusionProvider {\n constructor(config) {\n super(config);\n }\n async generateImage(query) {\n const payload = {\n prompt: \"query\",\n output_format: \"webp\"\n };\n const response = await axios3.postForm(\n `https://api.stability.ai/v2beta/stable-image/generate/ultra`,\n axios3.toFormData(payload, new FormData()),\n {\n validateStatus: void 0,\n responseType: \"arraybuffer\",\n headers: {\n Authorization: `Bearer ${this.config.apiKey}`,\n Accept: \"image/*\"\n }\n }\n );\n if (response.status === 200) {\n const base64Image = Buffer.from(response.data).toString(\"base64\");\n return `data:image/webp;base64,${base64Image}`;\n } else {\n throw new Error(`${response.status}: ${response.data.toString()}`);\n }\n }\n};\n\n// src/sdk/providers/eleven-labs.ts\nimport { ElevenLabsClient, ElevenLabs } from \"elevenlabs\";\nimport axios4 from \"axios\";\nvar requestSpecs = {\n optimize_streaming_latency: ElevenLabs.OptimizeStreamingLatency.Zero,\n output_format: ElevenLabs.OutputFormat.Mp344100128,\n model_id: \"eleven_multilingual_v1\",\n language: \"es\",\n voice_settings: {\n stability: 0.1,\n similarity_boost: 0.15,\n style: 0.2\n }\n};\nvar ElevenLabsWhisperProvider = class extends WhisperProvider {\n constructor(config) {\n super(config);\n this.client = new ElevenLabsClient(config);\n }\n async speechToText(audio) {\n return \"\";\n }\n async textToSpeech(text) {\n const axiosClient = axios4.create({\n baseURL: this.config.baseURL,\n headers: {\n Accept: \"audio/mpeg\",\n \"Content-Type\": \"application/json\",\n \"Xi-Api-Key\": this.config.apiKey\n }\n });\n try {\n const response = await axiosClient.post(\n `/v1/text-to-speech/${this.config.voiceId}`,\n {\n text,\n ...requestSpecs\n },\n { responseType: \"blob\" }\n );\n return response.data;\n } catch (error) {\n console.error(\"Error converting text to speech:\", error);\n throw error;\n }\n }\n};\n\n// src/sdk/providers/elastic-search.ts\nimport pino from \"pino\";\nvar ElasticLoggerProvider = class _ElasticLoggerProvider extends LoggerProvider {\n constructor(config) {\n super(config);\n this.logger = console;\n }\n static async create(config) {\n const provider = new _ElasticLoggerProvider(config);\n await provider.initialize(config);\n return provider;\n }\n async initialize(config) {\n if (typeof window === \"undefined\") {\n const [pinoElastic] = await Promise.all([\n import(\"pino-elasticsearch\")\n ]);\n const streamToElastic = pinoElastic.default({\n index: config.index || \"logs-index\",\n node: config.endpoint,\n esVersion: config.esVersion || 7,\n flushBytes: config.flushBytes || 1e3,\n auth: {\n username: config.username || \"\",\n password: config.password || \"\"\n },\n tls: {\n rejectUnauthorized: false\n },\n op_type: \"create\"\n });\n streamToElastic.on(\"error\", (err) => {\n console.error(\"Elasticsearch stream error:\", err);\n });\n streamToElastic.on(\"insertError\", (err) => {\n console.error(\"Elasticsearch insert error:\", err);\n });\n streamToElastic.on(\"insert\", () => {\n console.log(\"Successfully sent log to Elasticsearch\");\n });\n this.logger = pino({\n level: \"info\",\n timestamp: () => `,\"time\":\"${(/* @__PURE__ */ new Date()).toISOString()}\"`\n }, streamToElastic);\n }\n }\n logInfo(message, data) {\n this.logger.info({ ...data }, message);\n }\n logError(message, error, data) {\n const errorDetails = {\n message: error.message,\n name: error.name,\n stack: error.stack\n };\n this.logger.error({ error, ...data, ...errorDetails }, message);\n }\n};\n\n// src/hooks/alquimia.hook.tsx\nimport { useEffect as useEffect2, useState } from \"react\";\n\n// src/context/session-context.tsx\nimport React2, { createContext, useContext, useEffect, useReducer } from \"react\";\n\n// src/reducer/characterization-reducer.tsx\nvar characterizationReducer = (state, action) => {\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\n// src/context/session-context.tsx\nimport { openDB } from \"idb\";\nvar initialState = {\n sessionId: null,\n characterizationData: null\n};\nvar AlquimiaContext = createContext(null);\nvar 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};\nvar SessionProvider = ({ children }) => {\n const [userSessionState, sessionDispatch] = useReducer(characterizationReducer, initialState);\n useEffect(() => {\n getSession();\n }, []);\n const getSession = async () => {\n const userCookie = await getCookies(\"alquimia-session\") || \"\";\n const db = await openDB(\"alquimiaDB\", 1, {\n upgrade(db2) {\n if (!db2.objectStoreNames.contains(\"session\")) {\n db2.createObjectStore(\"session\", { keyPath: \"key\" });\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 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 const saveUserSession = async (id, data) => {\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 sessionDispatch({\n type: \"SET_SESSION\",\n payload: { sessionId: id, characterizationData: data }\n });\n };\n const getSessionData = () => {\n return userSessionState;\n };\n return /* @__PURE__ */ React2.createElement(AlquimiaContext.Provider, { value: { userSessionState, getSessionData, saveUserSession } }, children);\n};\n\n// src/hooks/alquimia.hook.tsx\nfunction useAlquimia(sdk) {\n const [chunkReceived, setChunkReceived] = useState(\"\");\n const [currentMessageIdChuncked, setCurrentMessageIdChuncked] = useState(\"\");\n const [input, setInput] = useState(\"\");\n const [isLoading, setIsLoading] = useState(false);\n const [isMessageStreaming, setIsMessageStreaming] = useState(false);\n const [streamingMessageId, setStreamingMessageId] = useState(null);\n const [isAudioRecording, setIsAudioRecording] = useState(false);\n const [messageMetaData, setMessageMetaData] = useState(null);\n const [messages, setMessages] = useState([]);\n const [sessionId, setSessionId] = useState(null);\n const [activeTool, setActiveTool] = useState(null);\n const [lastRequest, setLastRequest] = useState(null);\n const { userSessionState, saveUserSession } = useSessionContext();\n const shouldShowCharacterizationButton = sdk.getEnforceCharacterization() && !userSessionState?.characterizationData;\n useEffect2(() => {\n if (chunkReceived)\n processMessageChunk(currentMessageIdChuncked, chunkReceived);\n }, [chunkReceived]);\n useEffect2(() => {\n if (userSessionState?.characterizationData && sdk.getEnforceCharacterization()) {\n sdk.withExtraData(userSessionState?.characterizationData);\n }\n }, [userSessionState]);\n function cleanMessages() {\n setMessages([]);\n }\n async function processMessageChunk(messageId, chunk, error_code, error_detail, additionalInfo) {\n setMessages((currentMessages) => {\n const messageIndex = currentMessages.findIndex(\n (message) => message.id === messageId\n );\n if (messageIndex !== -1) {\n const updatedMessages = [...currentMessages];\n const updatedMessage = {\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: (/* @__PURE__ */ 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: (/* @__PURE__ */ new Date()).getTime().toString()\n }\n ];\n }\n });\n }\n async function handleSubmit(event, traceParentId, sessionId2, additionalInfo) {\n setIsLoading(true);\n event.preventDefault();\n if (input) {\n addUserMessage(input);\n const messageId = createMessageId();\n setCurrentMessageIdChuncked(messageId);\n setStreamingMessageId(messageId);\n await sendMessage(input, (chunk) => {\n processMessageChunk(\n messageId,\n chunk?.data?.content || \"\",\n chunk?.error_code,\n chunk?.error_detail,\n additionalInfo\n );\n }, traceParentId, sessionId2);\n setInput(\"\");\n }\n setIsLoading(false);\n }\n function handleInputChange(event) {\n setInput(event.target.value);\n }\n function handleReplaceInput(input2) {\n setInput(input2);\n }\n function populateMessages(messages2) {\n setMessages(messages2);\n }\n function handleLoadingCancel() {\n setIsLoading(false);\n setIsMessageStreaming(false);\n setInput(\"\");\n }\n function addUserMessage(message) {\n setMessages((prevMessages) => [\n ...prevMessages,\n {\n content: message,\n role: \"user\",\n id: createMessageId(),\n created_at: (/* @__PURE__ */ new Date()).getTime().toString()\n }\n ]);\n }\n function getCookie(name) {\n const cookies2 = document.cookie.split(\";\");\n for (let cookie of cookies2) {\n const [cookieName, cookieValue] = cookie.trim().split(\"=\");\n if (cookieName === name) {\n return decodeURIComponent(cookieValue);\n }\n }\n return null;\n }\n async function sendMessage(message, callBack, traceParentId, sessionId2) {\n const conversationId = sessionId2 || getCookie(\"alquimia-session\");\n setIsMessageStreaming(true);\n setActiveTool(null);\n setLastRequest(message);\n const response = await sdk.widthConversationId(conversationId || \"\").sendMessage(message, traceParentId);\n const es = new EventSource(response.getUrlStream());\n es.onmessage = (event) => {\n const parsedData = JSON.parse(event.data);\n if (parsedData.tooler && parsedData.tooler.length > 0 && !activeTool) {\n setActiveTool({\n tooler: parsedData.tooler\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 if (parsedData.is_complete) {\n setIsMessageStreaming(false);\n setStreamingMessageId(null);\n es.close();\n } else {\n callBack(parsedData.answer);\n }\n };\n }\n async function handleSaveCharacterization(translation) {\n const conversationId = getCookie(\"alquimia-session\");\n if (!conversationId || !saveUserSession) return;\n saveUserSession(conversationId, translation);\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\n// src/hooks/useRatings.ts\nimport { useState as useState2, useReducer as useReducer2 } from \"react\";\nvar initialState2 = {\n ratingStars: 0,\n ratingThumbs: \"\",\n ratingComment: \"\"\n};\nfunction ratingReducer(state, action) {\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}\nfunction useRatings({ assistantId, sendRating, topicId }) {\n const [isLoading, setIsLoading] = useState2(false);\n const [hasReviewed, setHasReviewed] = useState2(false);\n const [state, dispatch] = useReducer2(ratingReducer, initialState2);\n const setRatingStars = (rating) => {\n dispatch({ type: \"SET_RATING_STARS\", payload: rating });\n };\n const setRatingThumbs = (rating) => {\n dispatch({ type: \"SET_RATING_THUMBS\", payload: rating });\n };\n const setRatingComment = (comment) => {\n dispatch({ type: \"SET_RATING_COMMENT\", payload: comment });\n };\n const thumbsScore = (value) => {\n return value === \"thumbsUp\" ? 5 : value === \"thumbsDown\" ? 0 : 0;\n };\n const handleRate = async (key, value, onHandleRateSuccess) => {\n setIsLoading(true);\n const sessionId = getTopicSessionId(topicId);\n const ratingObj = {\n topicId: parseInt(topicId),\n sessionId: sessionId || \"\",\n assistantId,\n score: key === \"score\" ? value : thumbsScore(value),\n description: key === \"description\" ? value : state.ratingComment\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 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 return {\n handleRate,\n ratingStars: state.ratingStars,\n ratingThumbs: state.ratingThumbs,\n ratingComment: state.ratingComment,\n isLoading,\n hasReviewed\n };\n}\n\n// src/actions/alquimia.action.ts\nimport { randomUUID } from \"crypto\";\nimport { cookies } from \"next/headers\";\nasync function initConversation(reset, topicId) {\n const cookieStore = await cookies();\n if (!topicId) {\n let conversationId = randomUUID().toString();\n const alquimia_session = cookieStore.get(\"alquimia-session\");\n if (!alquimia_session || reset) {\n cookieStore.set(\"alquimia-session\", conversationId);\n } else {\n conversationId = alquimia_session.value;\n }\n return conversationId;\n }\n let conversationsMap = {};\n const existingConversations = cookieStore.get(\"alquimia-sessions\");\n if (existingConversations) {\n try {\n const decodedValue = decodeURIComponent(existingConversations.value);\n conversationsMap = JSON.parse(decodedValue);\n } catch (e) {\n console.error(\"Error parsing conversations cookie:\", e);\n conversationsMap = {};\n }\n }\n if (!conversationsMap[topicId] || reset) {\n conversationsMap[topicId] = randomUUID().toString();\n }\n cookieStore.set(\"alquimia-sessions\", JSON.stringify(conversationsMap));\n return conversationsMap[topicId];\n}\n\n// src/actions/baseApi.action.ts\nasync function createResource(config, payload) {\n try {\n const headers = generateHeaders(config);\n const response = await fetch(`${config.baseUrl}${config.route}`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n cache: \"default\"\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 return {\n success: true,\n data: await response.json()\n };\n } catch (error) {\n throw new Error(\"Failed to create resource\");\n }\n}\nasync function readResource(config, id) {\n try {\n const headers = generateHeaders(config);\n const url = id ? `${config.baseUrl}${config.route}/${id}` : `${config.baseUrl}${config.route}`;\n const response = await fetch(url, {\n method: \"GET\",\n headers,\n cache: \"default\"\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 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 || void 0\n };\n }\n const arrayBuffer = await response.arrayBuffer();\n if (contentType?.includes(\"octet-stream\") && isTextContent(arrayBuffer)) {\n return {\n success: true,\n data: arrayBuffer,\n contentType: \"text/plain\"\n };\n }\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || void 0\n };\n } catch (error) {\n throw new Error(\"Failed to read resource\");\n }\n}\nasync function updateResource(config, id, data) {\n try {\n const headers = generateHeaders(config);\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 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 return {\n success: true,\n data: await response.json()\n };\n } catch (error) {\n throw new Error(\"Failed to update resource\");\n }\n}\nasync function deleteResource(config, id) {\n try {\n const headers = generateHeaders(config);\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"DELETE\",\n headers,\n cache: \"default\"\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 return {\n success: true\n };\n } catch (error) {\n throw new Error(\"Failed to delete resource\");\n }\n}\nexport {\n AlquimiaRatingsProvider,\n alquimia_sdk_default as AlquimiaSDK,\n AlquimiaWhisperProvider,\n Button,\n Card,\n CharacterizationProvider,\n Code,\n ElasticLoggerProvider,\n ElevenLabsWhisperProvider,\n GenerativeProvider,\n LoggerProvider,\n OpenAIAnalyzeCharProvider,\n OpenAIStableDiffusionProvider,\n OpenAIWhisperProvider,\n RatingsProvider,\n SessionProvider,\n StabilityProvider,\n StableDiffusionProvider,\n WhisperProvider,\n createMessageId,\n createResource,\n defineAssistantId,\n deleteResource,\n formatTimeWithUnit,\n generateHeaders,\n generateTranslatePrompt,\n getCookies,\n getQueryParam,\n getTopicSessionId,\n initConversation,\n isTextContent,\n parseConversationsMapCookie,\n readResource,\n serializeAxiosError,\n updateResource,\n useAlquimia,\n useRatings,\n useSessionContext\n};\n","\"use client\";\n\nimport { ReactNode } from \"react\";\n\ninterface ButtonProps {\n children: ReactNode;\n className?: string;\n appName: string;\n}\n\nexport const Button = ({ children, className, appName }: ButtonProps) => {\n return (\n <button\n className={className}\n onClick={() => alert(`Hello from your ${appName} app!`)}\n >\n {children}\n </button>\n );\n};\n","export function Card({\n className,\n title,\n children,\n href,\n}: {\n className?: string;\n title: string;\n children: React.ReactNode;\n href: string;\n}): JSX.Element {\n return (\n <a\n className={className}\n href={`${href}?utm_source=create-turbo&utm_medium=basic&utm_campaign=create-turbo\"`}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n <h2>\n {title} <span>-></span>\n </h2>\n <p>{children}</p>\n </a>\n );\n}\n","export function Code({\n children,\n className,\n}: {\n children: React.ReactNode;\n className?: string;\n}): JSX.Element {\n return <code className={className}>{children}</code>;\n}\n","import axios, { AxiosInstance } from \"axios\";\nimport {\n StableDiffusionProvider,\n WhisperProvider,\n CharacterizationProvider,\n RatingsProvider,\n LoggerProvider,\n} from \"./providers/providers\";\ninterface AlquimiaSDKConfig {\n apiKey: string;\n chatUrl: string;\n streamUrl: string;\n assistantId: string;\n}\n\n\nclass AlquimiaSDK {\n private config: AlquimiaSDKConfig;\n private axiosInstance: AxiosInstance;\n private conversationId: string | null = null;\n private sessionId: string | null = null;\n private streamId: string | null = null;\n private tools: any[] = [];\n private extraData: any = {};\n private forceProfile: any = {};\n private whisperProvider?: WhisperProvider\n private stableDiffusionProvider?: StableDiffusionProvider\n private analyzeCharacterizationProvider?: CharacterizationProvider\n private ratingsProvider?: RatingsProvider\n private loggerProvider?: LoggerProvider\n private enforceCharacterization?: boolean\n \n constructor(config: AlquimiaSDKConfig, enforceCharacterization: boolean = true) {\n this.config = config;\n this.enforceCharacterization = enforceCharacterization;\n\n this.axiosInstance = axios.create();\n this.axiosInstance.interceptors.response.use(\n (response) => response,\n async (error) => {\n if (error.response?.status) {\n if (this.loggerProvider) {\n await this.loggerProvider.logError(\n 'Server Error',\n error,\n {\n url: error.config.url,\n method: error.config.method,\n data: error.config.data,\n status: error.response.status,\n responseData: error.response.data\n }\n );\n }\n }\n return Promise.reject(error);\n }\n );\n \n this.textToSpeech = this.textToSpeech.bind(this);\n this.speechToText = this.speechToText.bind(this);\n }\n\n static configure(\n apiKey: string,\n inferUrl: string,\n streamUrl: string,\n assistantId: string\n ): AlquimiaSDKConfig {\n return {\n apiKey,\n chatUrl: `${inferUrl}/chat/${assistantId}`,\n streamUrl: `${streamUrl}/${assistantId}`,\n assistantId: assistantId\n };\n }\n\n widthConversationId(conversationId: string ): AlquimiaSDK {\n this.conversationId = conversationId \n return this;\n }\n\n withWhisperProvider(provider: WhisperProvider): AlquimiaSDK {\n this.whisperProvider = provider;\n return this;\n }\n\n withStableDiffusionProvider(provider: StableDiffusionProvider): AlquimiaSDK {\n this.stableDiffusionProvider = provider\n return this\n }\n\n withAnalyzeCharacterizationProvider(provider: CharacterizationProvider): AlquimiaSDK {\n this.analyzeCharacterizationProvider = provider\n return this\n }\n\n withRatingsProvider(provider: RatingsProvider): AlquimiaSDK {\n this.ratingsProvider = provider\n return this\n }\n\n withLoggerProvider(provider: LoggerProvider): AlquimiaSDK {\n this.loggerProvider = provider\n return this\n }\n\n getEnforceCharacterization(): boolean {\n return this.enforceCharacterization ?? true;\n }\n\n withTools(tools: any[]): AlquimiaSDK {\n this.tools = tools;\n return this;\n }\n\n withExtraData(extraData: any): AlquimiaSDK {\n this.extraData = extraData;\n return this;\n }\n\n withForceProfile(forceProfile: any): AlquimiaSDK {\n this.forceProfile = forceProfile;\n return this;\n }\n\n textToSpeech(text: string): Promise<Blob> {\n if (!this.whisperProvider) {\n throw new Error(\"Whisper provider not initialized\");\n }\n return this.whisperProvider.textToSpeech(text)\n }\n\n speechToText(audio: string): Promise<string> {\n if (!this.whisperProvider) {\n throw new Error(\"Whisper provider not initialized\");\n }\n return this.whisperProvider.speechToText(audio)\n }\n\n async sendMessage(query: string, traceParent?: string) {\n if (!this.conversationId) {\n throw new Error(\"Conversation not initialized\");\n }\n\n const initMessage = {\n query,\n session_id: this.conversationId,\n tools: this.tools,\n extra_data: this.extraData,\n force_profile: this.forceProfile\n };\n \n const result = (await this.axiosInstance.post(this.config.chatUrl, initMessage, {\n headers: {\n \"Content-Type\": \"application/json\",\n \"x-trace-parent\": traceParent || \"\",\n },\n })).data\n \n this.streamId = result.data.stream_id;\n return this\n }\n\n async generateImage(query: string) {\n if (!this.stableDiffusionProvider) {\n throw new Error(\"Stable Diffusion provider not initialized\");\n }\n return this.stableDiffusionProvider.generateImage(query)\n }\n\n async analyzeCharacterization(text: string) {\n if (!this.analyzeCharacterizationProvider) {\n throw new Error(\"analyze characterization provider not initialized\");\n }\n return this.analyzeCharacterizationProvider.analyzeCharacterization(text)\n }\n\n async rate(data: any) {\n if (!this.ratingsProvider) {\n throw new Error(\"ratings provider not initialized\");\n }\n return this.ratingsProvider.rate(data)\n }\n\n async logInfo(message: string, data: any) {\n if (!this.loggerProvider) {\n throw new Error(\"logger provider not initialized\");\n }\n return this.loggerProvider.logInfo(message, data)\n }\n\n async logError(message: string, error: Error, data: any) {\n if (!this.loggerProvider) {\n throw new Error(\"logger provider not initialized\");\n }\n return this.loggerProvider.logError(message, error, data)\n }\n\n getUrlStream() {\n return `${this.config.streamUrl}/${this.streamId}`;\n }\n}\n\nexport default AlquimiaSDK;\n","\nexport abstract class GenerativeProvider {\n private config: Record<string, any>;\n\n constructor(config: Record<string, any>) {\n this.config = config;\n }\n}\n\nexport abstract class WhisperProvider {\n protected config: Record<string, any>;\n\n constructor(config: Record<string, any>) {\n this.config = config;\n }\n\n abstract textToSpeech(text: string): Promise<Blob>\n\n abstract speechToText(audio: string): Promise<string>\n} \n\nexport abstract class StableDiffusionProvider {\n protected config: Record<string, any>;\n\n constructor(config: Record<string, any>) {\n this.config = config;\n }\n\n abstract generateImage(query: string): Promise<string>\n}\n\nexport abstract class CharacterizationProvider {\n protected config: Record<string, any>;\n\n constructor(config: Record<string, any>) {\n this.config = config;\n }\n\n abstract analyzeCharacterization(text: string): Promise<Record<string, any>>\n}\n\nexport abstract class RatingsProvider {\n protected config: Record<string, any>;\n\n constructor(config: Record<string, any>) {\n this.config = config;\n }\n\n abstract rate(data: Record<string, any>): Promise<Record<string, any>>;\n}\n\nexport abstract class LoggerProvider {\n protected config: Record<string, any>;\n\n constructor(config: Record<string, any>) {\n this.config = config;\n }\n\n abstract logInfo(message: string, data?: Record<string, any>): void;\n abstract logError(message: string, error: Error, data?: Record<string, any>): void;\n}\n","import { WhisperProvider, RatingsProvider } from \"./providers\";\nimport { RatingData } from \"../../types/type\";\nimport axios from \"axios\";\n\nclass AlquimiaWhisperProvider extends WhisperProvider {\n constructor(config: { baseURL: string; ttsRoute: string; sttRoute: string }) {\n super(config);\n }\n\n async textToSpeech(text: string): Promise<any> {\n const axiosClient = axios.create({\n baseURL: this.config.baseURL,\n });\n\n try {\n const response = await axiosClient.post(\n this.config.ttsRoute,\n {\n text: text,\n },\n { responseType: \"blob\" }\n );\n\n return response.data;\n } catch (error) {\n console.error(\"Error converting text to speech:\", error);\n throw error;\n }\n }\n\n async speechToText(audio: string): Promise<string> {\n const axiosClient = axios.create({\n baseURL: this.config.baseURL,\n });\n\n try {\n const response = await axiosClient.post(this.config.sttRoute, {\n audio: audio,\n });\n\n return response.data;\n } catch (error) {\n console.error(\"Error converting speech to text:\", error);\n throw error;\n }\n }\n}\n\nclass AlquimiaRatingsProvider extends RatingsProvider {\n constructor(config: { baseUrl: string; route: string; token: string; headers?: Record<string, string> }) {\n super(config);\n }\n\n async rate(data: RatingData): Promise<Record<string, any>> {\n const path = `${this.config.baseUrl}${this.config.route}`;\n try {\n let response;\n const headers = {\n Authorization: `Bearer ${this.config.token}`,\n \"Content-Type\": \"application/json\",\n ...this.config.headers || {}\n };\n\n response = await axios.post(`${path}`, data, { headers });\n return {\n success: true,\n data: response.data\n }\n } catch (error) {\n if (axios.isAxiosError(error)) {\n return {\n success: false,\n error: {\n message: error.message,\n response: {\n status: error.response?.status,\n data: error.response?.data\n },\n details: error.response?.data\n }\n };\n }\n\n return {\n success: false,\n error: {\n message: error instanceof Error ? error.message : 'Unknown error occurred',\n response: {\n status: 500\n }\n }\n };\n }\n }\n}\n\nexport { AlquimiaWhisperProvider, AlquimiaRatingsProvider };\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","import { generateTranslatePrompt } from \"../../utils/utils\";\nimport { StableDiffusionProvider, WhisperProvider, CharacterizationProvider } from \"./providers\";\nimport OpenAI from \"openai\";\n\nclass OpenAIWhisperProvider extends WhisperProvider {\n async textToSpeech(text: string): Promise<Blob> {\n return new Blob();\n }\n\n async speechToText(audio: string): Promise<string> {\n return '';\n }\n}\nclass OpenAIAnalyzeCharProvider extends CharacterizationProvider {\n private client : any \n \n constructor(config:Record<string,any>){\n super(config)\n this.client = new OpenAI({\n apiKey: config.apiKey\n })\n }\n\n async analyzeCharacterization(text: string): Promise<Record<string, any>> {\n const prompt = generateTranslatePrompt(text);\n\n const response = await this.client.chat.completions.create({\n model: 'gpt-4o-mini',\n messages: [\n { role: 'system', content: 'You are a helpful assistant.' },\n { role: 'user', content: prompt },\n ],\n max_tokens: 150,\n temperature: 0.7,\n });\n\n const arrangedText = response.choices[0].message.content.trim();\n\n try {\n const arrangedObject = JSON.parse(arrangedText);\n return arrangedObject;\n } catch (error) {\n throw new Error('Failed to parse the response from OpenAI');\n }\n }\n}\n\nclass OpenAIStableDiffusionProvider extends StableDiffusionProvider {\n private client : any \n \n constructor(config:Record<string,any>){\n super(config)\n this.client = new OpenAI({\n apiKey: config.apiKey\n })\n }\n\n async generateImage(query: string): Promise<string> {\n const response = await this.client.images.generate({\n model: \"dall-e-3\",\n prompt: query,\n n: 1,\n size: \"1024x1024\",\n });\n return response.data[0].url;\n }\n}\n\nexport { OpenAIWhisperProvider, OpenAIStableDiffusionProvider, OpenAIAnalyzeCharProvider };\n","import { StableDiffusionProvider } from \"./providers\";\nimport { Buffer } from \"buffer\";\nimport axios from \"axios\";\n\nclass StabilityProvider extends StableDiffusionProvider {\n constructor(config: Record<string, any>) {\n super(config);\n }\n\n async generateImage(query: string): Promise<string> {\n const payload = {\n prompt: \"query\",\n output_format: \"webp\",\n };\n\n const response = await axios.postForm(\n `https://api.stability.ai/v2beta/stable-image/generate/ultra`,\n axios.toFormData(payload, new FormData()),\n {\n validateStatus: undefined,\n responseType: \"arraybuffer\",\n headers: {\n Authorization: `Bearer ${this.config.apiKey}`,\n Accept: \"image/*\",\n },\n }\n );\n\n if (response.status === 200) {\n const base64Image = Buffer.from(response.data).toString(\"base64\");\n return `data:image/webp;base64,${base64Image}`;\n } else {\n throw new Error(`${response.status}: ${response.data.toString()}`);\n }\n }\n}\n\nexport { StabilityProvider };\n","import { WhisperProvider } from \"./providers\";\nimport { ElevenLabsClient, ElevenLabs } from \"elevenlabs\";\nimport axios from \"axios\";\n\nconst requestSpecs = {\n optimize_streaming_latency: ElevenLabs.OptimizeStreamingLatency.Zero,\n output_format: ElevenLabs.OutputFormat.Mp344100128,\n model_id: \"eleven_multilingual_v1\",\n language: \"es\",\n voice_settings: {\n stability: 0.1,\n similarity_boost: 0.15,\n style: 0.2,\n },\n}; \n\nclass ElevenLabsWhisperProvider extends WhisperProvider {\n private client: ElevenLabsClient;\n\n constructor(config: { apiKey: string, voiceId: string, baseURL: string }) {\n super(config);\n this.client = new ElevenLabsClient(config);\n }\n\n async speechToText(audio: string): Promise<string> {\n return '';\n }\n\n async textToSpeech(text: string): Promise<any> {\n\n const axiosClient = axios.create({\n baseURL: this.config.baseURL,\n headers: {\n Accept: \"audio/mpeg\",\n \"Content-Type\": \"application/json\",\n \"Xi-Api-Key\": this.config.apiKey,\n },\n });\n\n try {\n const response = await axiosClient.post(\n `/v1/text-to-speech/${this.config.voiceId}`,\n {\n text: text,\n ...requestSpecs,\n },\n { responseType: 'blob' }\n );\n\n return response.data;\n } catch (error) {\n console.error('Error converting text to speech:', error);\n throw error;\n }\n }\n}\n\nexport { ElevenLabsWhisperProvider };","import { LoggerProvider } from \"./providers\";\nimport pino from \"pino\";\n\ninterface ElasticLoggerConfig {\n endpoint: string;\n username: string;\n password: string;\n index?: string;\n esVersion?: number;\n flushBytes?: number;\n}\n\nclass ElasticLoggerProvider extends LoggerProvider {\n private logger: pino.Logger;\n\n private constructor(config: ElasticLoggerConfig) {\n super(config);\n this.logger = console as any;\n }\n\n public static async create(config: ElasticLoggerConfig): Promise<ElasticLoggerProvider> {\n const provider = new ElasticLoggerProvider(config);\n await provider.initialize(config);\n return provider;\n }\n\n private async initialize(config: ElasticLoggerConfig) {\n if (typeof window === 'undefined') {\n const [pinoElastic] = await Promise.all([\n import('pino-elasticsearch')\n ]);\n\n const streamToElastic = pinoElastic.default({\n index: config.index || \"logs-index\",\n node: config.endpoint,\n esVersion: config.esVersion || 7,\n flushBytes: config.flushBytes || 1000,\n auth: {\n username: config.username || \"\",\n password: config.password || \"\",\n },\n tls: {\n rejectUnauthorized: false,\n },\n op_type: 'create',\n });\n\n streamToElastic.on('error', (err) => {\n console.error('Elasticsearch stream error:', err);\n });\n\n streamToElastic.on('insertError', (err) => {\n console.error('Elasticsearch insert error:', err);\n });\n\n streamToElastic.on('insert', () => {\n console.log('Successfully sent log to Elasticsearch');\n });\n\n\n this.logger = pino({\n level: 'info',\n timestamp: () => `,\"time\":\"${new Date().toISOString()}\"`,\n }, streamToElastic);\n }\n }\n\n logInfo(message: string, data?: Record<string, any>): void {\n this.logger.info({ ...data }, message);\n }\n\n logError(message: string, error: Error, data?: Record<string, any>): void {\n const errorDetails = {\n message: error.message,\n name: error.name,\n stack: error.stack,\n };\n this.logger.error({ error, ...data, ...errorDetails }, message);\n }\n}\n\nexport { ElasticLoggerProvider };","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};","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","\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","'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}","\"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"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@alquimia-ai/tools",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"author": "Alquimia AI",
|
|
5
|
+
"description": "tools for Alquimia SDK",
|
|
6
|
+
"private": false,
|
|
7
|
+
"main": "dist/index.js",
|
|
8
|
+
"module": "dist/index.mjs",
|
|
9
|
+
"types": "dist/index.d.ts",
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"import": "./dist/index.mjs",
|
|
14
|
+
"require": "./dist/index.js"
|
|
15
|
+
},
|
|
16
|
+
"./button": "./src/button.tsx",
|
|
17
|
+
"./card": "./src/card.tsx",
|
|
18
|
+
"./code": "./src/code.tsx",
|
|
19
|
+
"./sdk": "./src/sdk/index.ts",
|
|
20
|
+
"./hooks": "./src/hooks/index.ts",
|
|
21
|
+
"./actions": "./src/actions/index.ts",
|
|
22
|
+
"./providers": "./src/sdk/providers/index.ts",
|
|
23
|
+
"./utils": "./src/utils/index.ts",
|
|
24
|
+
"./types": "./src/types/type.ts",
|
|
25
|
+
"./context": "./src/context/index.ts",
|
|
26
|
+
"./services": "./src/services/index.ts",
|
|
27
|
+
"./package.json": "./package.json"
|
|
28
|
+
},
|
|
29
|
+
"scripts": {
|
|
30
|
+
"lint": "eslint . --max-warnings 0",
|
|
31
|
+
"generate:component": "turbo gen react-component",
|
|
32
|
+
"build": "tsup src/index.ts --format esm,cjs --dts",
|
|
33
|
+
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist",
|
|
34
|
+
"dev": "tsup src/index.ts --format esm,cjs --watch --dts"
|
|
35
|
+
},
|
|
36
|
+
"files": [
|
|
37
|
+
"dist/**",
|
|
38
|
+
"README.md",
|
|
39
|
+
"package.json"
|
|
40
|
+
],
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@alquimia-ai/eslint-config": "*",
|
|
43
|
+
"@alquimia-ai/typescript-config": "*",
|
|
44
|
+
"@swc/core": "^1.7.36",
|
|
45
|
+
"@turbo/gen": "^1.12.4",
|
|
46
|
+
"@types/eslint": "^8.56.5",
|
|
47
|
+
"@types/node": "^20.11.24",
|
|
48
|
+
"@types/react": "^18.2.61",
|
|
49
|
+
"@types/react-dom": "^18.2.19",
|
|
50
|
+
"eslint": "^8.57.0",
|
|
51
|
+
"tsup": "^8.3.0",
|
|
52
|
+
"typescript": "^5.3.3"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@elastic/apm-rum": "^5.16.0",
|
|
56
|
+
"ai": "^3.3.20",
|
|
57
|
+
"axios": "^1.7.5",
|
|
58
|
+
"crypto": "^1.0.1",
|
|
59
|
+
"elevenlabs": "^0.15.0",
|
|
60
|
+
"idb": "^8.0.0",
|
|
61
|
+
"next": "^14.2.15",
|
|
62
|
+
"openai": "^4.57.0",
|
|
63
|
+
"pino": "^9.5.0",
|
|
64
|
+
"pino-elasticsearch": "^8.1.0",
|
|
65
|
+
"react": "^18.2.0"
|
|
66
|
+
},
|
|
67
|
+
"peerDependencies": {
|
|
68
|
+
"react": ">=18.0.0",
|
|
69
|
+
"react-dom": ">=18.0.0"
|
|
70
|
+
}
|
|
71
|
+
}
|