@alquimia-ai/tools 1.8.2 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/index.mjs.map +1 -1
- package/dist/hooks/index.d.mts +2 -2
- package/dist/hooks/index.d.ts +2 -2
- package/dist/hooks/index.js +47 -26
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/index.mjs +47 -26
- package/dist/hooks/index.mjs.map +1 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/index.mjs.map +1 -1
- package/dist/types/index.d.mts +16 -5
- package/dist/types/index.d.ts +16 -5
- package/dist/types/index.js.map +1 -1
- package/dist/types/index.mjs.map +1 -1
- package/dist/utils/index.d.mts +4 -2
- package/dist/utils/index.d.ts +4 -2
- package/dist/utils/index.js +37 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +37 -0
- package/dist/utils/index.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/actions/index.ts","../../src/actions/alquimia.action.ts","../../src/utils/utils.ts","../../src/actions/baseApi.action.ts","../../src/actions/chat.action.ts","../../src/actions/apm.action.ts"],"sourcesContent":["export * from './alquimia.action'\nexport * from './baseApi.action'\nexport * from './chat.action'\nexport * from './apm.action'","'use server'\nimport { randomUUID } from \"crypto\";\nimport { cookies } from \"next/headers\";\nimport { ConversationsMap } from \"../types/type\";\n\nexport async function initConversation(reset?: boolean, topicId?: string) {\n const cookieStore = await cookies();\n\n if (!topicId) {\n let conversationId = randomUUID().toString();\n const alquimia_session = cookieStore.get(\"alquimia-session\");\n\n if (!alquimia_session || reset) {\n cookieStore.set(\"alquimia-session\", conversationId);\n } else {\n conversationId = alquimia_session.value;\n }\n\n return conversationId;\n }\n\n let conversationsMap: ConversationsMap = {};\n const existingConversations = cookieStore.get(\"alquimia-sessions\");\n \n if (existingConversations) {\n try {\n const decodedValue = decodeURIComponent(existingConversations.value);\n conversationsMap = JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error('Error parsing conversations cookie:', e);\n conversationsMap = {};\n }\n }\n\n if (!conversationsMap[topicId] || reset) {\n conversationsMap[topicId] = randomUUID().toString();\n }\n\n cookieStore.set(\"alquimia-sessions\", JSON.stringify(conversationsMap));\n \n return conversationsMap[topicId];\n}","import {\n BaseAPIConfig,\n ApiError,\n ConversationsMap,\n ThinkingsInferenceResponse,\n} 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(\n cookieValue: string\n): 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\nexport function hasToolSummary(data: any) {\n return data.tool_summary && Object.keys(data.tool_summary).length > 0;\n}\n\nexport function mergeThinkingsByControlId(\n existingThinkings: ThinkingsInferenceResponse[] = [],\n newThinkings: ThinkingsInferenceResponse[] = []\n): ThinkingsInferenceResponse[] {\n const thinkingsMap = new Map(existingThinkings.map((t) => [t.control_id, t]));\n for (const t of newThinkings) {\n if (t && t.control_id) {\n thinkingsMap.set(t.control_id, t);\n }\n }\n return Array.from(thinkingsMap.values());\n}\n\nexport function extractAnswerContent(content: string): string {\n if (typeof content !== \"string\") return \"\";\n const trimmed = content.trim();\n if (trimmed.startsWith(\"{\")) {\n try {\n const repaired = trimmed.replace(/(?<!\\\\)\\n/g, \"\\\\n\");\n const parsed = JSON.parse(repaired);\n if (parsed && typeof parsed === \"object\" && \"answer\" in parsed) {\n return parsed.answer;\n }\n } catch (e) {\n return content;\n }\n }\n return content;\n}\n","\"use server\";\nimport { BaseAPIConfig } from \"../types/type\";\nimport { generateHeaders, isTextContent } from \"../utils\";\n\ninterface ActionResponse<T = void> {\n success: boolean;\n data?: T;\n contentType?: string;\n error?: {\n message: string;\n code?: string;\n details?: any;\n };\n}\n\nexport async function createResource<TResponse, TPayload>(\n config: BaseAPIConfig,\n payload: TPayload\n): Promise<ActionResponse<TResponse>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n \n return {\n success: true,\n data: await response.json(),\n };\n } catch (error) {\n throw new Error(\"Failed to create resource\");\n }\n}\n\nexport async function readResource<T>(\n config: BaseAPIConfig,\n id?: string\n): Promise<ActionResponse<T>> {\n try {\n const headers = generateHeaders(config);\n const url = id\n ? `${config.baseUrl}${config.route}/${id}`\n : `${config.baseUrl}${config.route}`;\n\n const response = await fetch(url, {\n method: \"GET\",\n headers,\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n const contentType = response.headers.get(\"content-type\");\n if (contentType?.includes(\"application/json\")) {\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || undefined,\n };\n }\n\n const arrayBuffer = await response.arrayBuffer();\n\n if (contentType?.includes(\"octet-stream\") && isTextContent(arrayBuffer)) {\n return {\n success: true,\n data: arrayBuffer as T,\n contentType: \"text/plain\",\n };\n }\n\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || undefined,\n };\n } catch (error) {\n throw new Error(\"Failed to read resource\");\n }\n}\n\nexport async function updateResource<T>(\n config: BaseAPIConfig,\n id: string,\n data: T\n): Promise<ActionResponse<T>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"PUT\",\n headers,\n body: JSON.stringify(data),\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n return {\n success: true,\n data: await response.json(),\n };\n } catch (error) {\n throw new Error(\"Failed to update resource\");\n }\n}\n\nexport async function deleteResource(\n config: BaseAPIConfig,\n id: string\n): Promise<ActionResponse<void>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"DELETE\",\n headers,\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n return {\n success: true,\n };\n } catch (error) {\n throw new Error(\"Failed to delete resource\");\n }\n}\n","\"use server\";\nimport { NextResponse } from \"next/server\";\nimport { headers } from \"next/headers\";\n\nexport type ChatRouteContext = {\n params: {\n path: string[];\n };\n};\n\nexport type ChatRequestConfig = {\n assistantBaseUrl: string;\n assistantRoute?: string;\n apiKey: string;\n};\n\nexport type ChatResponse = Response | any;\n\nexport async function handleChatRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<ChatResponse> {\n try {\n const headersList = await headers();\n const body = await request.json();\n const routeParams = await context.params;\n const routePath = routeParams.path.join(\"/\");\n const assistantRoute = config.assistantRoute || \"infer\";\n\n const assistantUrl = `${config.assistantBaseUrl}/${assistantRoute}/${routePath}`;\n\n const response = await fetch(assistantUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...headersList,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Chat inference server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return NextResponse.json(\n {\n status: response.status,\n statusText: response.statusText ||\n \"Failed to forward Chat data\",\n ...errorJson,\n },\n { status: response.status }\n );\n }\n\n return new NextResponse(response.body, {\n status: 200,\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Content-Encoding\",\n },\n });\n } catch (error) {\n return NextResponse.json(\n { error: \"Failed to forward Chat data\" },\n { status: 500 }\n );\n }\n}\n\nexport async function handleStreamRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<Response> {\n try {\n const headersList = await headers();\n const routeParams = context.params;\n const path = routeParams.path.join(\"/\");\n const assistantRoute = config.assistantRoute || \"stream\";\n\n const streamUrl = `${config.assistantBaseUrl}/${assistantRoute}/${path}`;\n\n const response = await fetch(streamUrl, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...Object.fromEntries(headersList.entries()),\n },\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Stream server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return new Response(\n JSON.stringify({\n error:\n errorJson.message ||\n response.statusText ||\n \"Failed to forward Stream data\",\n ...errorJson,\n }),\n { status: response.status }\n );\n }\n\n return new Response(response.body, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Stream error:\", error);\n return new Response(\n JSON.stringify({ error: \"Failed to forward stream data\" }),\n { status: 500 }\n );\n }\n}\n\n","\"use server\";\nimport { headers } from \"next/headers\";\n\nexport type ApmRequestConfig = {\n apmServerUrl: string;\n};\n\nexport async function handleApmRequest(\n request: Request,\n config: ApmRequestConfig\n): Promise<Response> {\n try {\n const headersList = await headers();\n const body = await request.arrayBuffer();\n\n const apmUrl = `${config.apmServerUrl}/intake/v2/rum/events`;\n\n const response = await fetch(apmUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-ndjson\",\n Accept: \"*/*\",\n \"Content-Encoding\": \"gzip\",\n \"User-Agent\": \"elastic-apm-rum/5.15.0\",\n ...(headersList.get(\"Authorization\") && {\n Authorization: `Bearer ${headersList.get(\"Authorization\")}`,\n }),\n },\n body: body,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n console.error(\"APM server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorText,\n });\n throw new Error(\n `APM server responded with ${response.status}: ${errorText}`\n );\n }\n\n return new Response(null, {\n status: 200,\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Content-Encoding\",\n },\n });\n } catch (error) {\n console.error(\"APM proxy error:\", error);\n return new Response(\n JSON.stringify({ error: \"Failed to forward APM data\" }),\n { status: 500 }\n );\n }\n}\n"],"mappings":"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","names":["headers","headers","import_headers","import_headers"]}
|
|
1
|
+
{"version":3,"sources":["../../src/actions/index.ts","../../src/actions/alquimia.action.ts","../../src/utils/utils.ts","../../src/actions/baseApi.action.ts","../../src/actions/chat.action.ts","../../src/actions/apm.action.ts"],"sourcesContent":["export * from './alquimia.action'\nexport * from './baseApi.action'\nexport * from './chat.action'\nexport * from './apm.action'","'use server'\nimport { randomUUID } from \"crypto\";\nimport { cookies } from \"next/headers\";\nimport { ConversationsMap } from \"../types/type\";\n\nexport async function initConversation(reset?: boolean, topicId?: string) {\n const cookieStore = await cookies();\n\n if (!topicId) {\n let conversationId = randomUUID().toString();\n const alquimia_session = cookieStore.get(\"alquimia-session\");\n\n if (!alquimia_session || reset) {\n cookieStore.set(\"alquimia-session\", conversationId);\n } else {\n conversationId = alquimia_session.value;\n }\n\n return conversationId;\n }\n\n let conversationsMap: ConversationsMap = {};\n const existingConversations = cookieStore.get(\"alquimia-sessions\");\n \n if (existingConversations) {\n try {\n const decodedValue = decodeURIComponent(existingConversations.value);\n conversationsMap = JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error('Error parsing conversations cookie:', e);\n conversationsMap = {};\n }\n }\n\n if (!conversationsMap[topicId] || reset) {\n conversationsMap[topicId] = randomUUID().toString();\n }\n\n cookieStore.set(\"alquimia-sessions\", JSON.stringify(conversationsMap));\n \n return conversationsMap[topicId];\n}","import {\n BaseAPIConfig,\n ApiError,\n ConversationsMap,\n ThinkingsInferenceResponse,\n Tooler,\n ToolEvent,\n} 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(\n cookieValue: string\n): 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\nexport function hasToolSummary(data: any) {\n return data.tool_summary && Object.keys(data.tool_summary).length > 0;\n}\n\nexport function mergeThinkingsByControlId(\n existingThinkings: ThinkingsInferenceResponse[] = [],\n newThinkings: ThinkingsInferenceResponse[] = []\n): ThinkingsInferenceResponse[] {\n const thinkingsMap = new Map(existingThinkings.map((t) => [t.control_id, t]));\n for (const t of newThinkings) {\n if (t && t.control_id) {\n thinkingsMap.set(t.control_id, t);\n }\n }\n return Array.from(thinkingsMap.values());\n}\n\nexport function extractAnswerContent(content: string): string {\n if (typeof content !== \"string\") return \"\";\n const trimmed = content.trim();\n if (trimmed.startsWith(\"{\")) {\n try {\n const repaired = trimmed.replace(/(?<!\\\\)\\n/g, \"\\\\n\");\n const parsed = JSON.parse(repaired);\n if (parsed && typeof parsed === \"object\" && \"answer\" in parsed) {\n return parsed.answer;\n }\n } catch (e) {\n return content;\n }\n }\n return content;\n}\n\nexport function mergeToolerByControlId(currentTooler: Tooler[], toolEvent: ToolEvent): Tooler[] {\n const { event_class, control_id, data, status } = toolEvent;\n const existingTool = currentTooler.find(t => t.control_id === control_id);\n const base: Tooler = existingTool || { control_id };\n\n let updated: Tooler;\n switch (event_class) {\n case \"ServerToolExecutionCommand\":\n updated = {\n ...base,\n tool_summary: {\n name: data.name,\n parameters: data,\n },\n };\n break;\n case \"ToolExecutionResponse\":\n updated = {\n ...base,\n tool_output: {\n result: data,\n status,\n },\n };\n break;\n default:\n return currentTooler;\n }\n\n return currentTooler.some(tool => tool.control_id === control_id)\n ? currentTooler.map(tool => (tool.control_id === control_id ? updated : tool))\n : [...currentTooler, updated];\n}\n\nexport function mergeToolEvents(initial: Tooler[], toolEvents?: ToolEvent[]): Tooler[] {\n return (toolEvents ?? []).reduce(\n (acc, toolEvent) => mergeToolerByControlId(acc, toolEvent),\n initial\n );\n}\n","\"use server\";\nimport { BaseAPIConfig } from \"../types/type\";\nimport { generateHeaders, isTextContent } from \"../utils\";\n\ninterface ActionResponse<T = void> {\n success: boolean;\n data?: T;\n contentType?: string;\n error?: {\n message: string;\n code?: string;\n details?: any;\n };\n}\n\nexport async function createResource<TResponse, TPayload>(\n config: BaseAPIConfig,\n payload: TPayload\n): Promise<ActionResponse<TResponse>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n \n return {\n success: true,\n data: await response.json(),\n };\n } catch (error) {\n throw new Error(\"Failed to create resource\");\n }\n}\n\nexport async function readResource<T>(\n config: BaseAPIConfig,\n id?: string\n): Promise<ActionResponse<T>> {\n try {\n const headers = generateHeaders(config);\n const url = id\n ? `${config.baseUrl}${config.route}/${id}`\n : `${config.baseUrl}${config.route}`;\n\n const response = await fetch(url, {\n method: \"GET\",\n headers,\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n const contentType = response.headers.get(\"content-type\");\n if (contentType?.includes(\"application/json\")) {\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || undefined,\n };\n }\n\n const arrayBuffer = await response.arrayBuffer();\n\n if (contentType?.includes(\"octet-stream\") && isTextContent(arrayBuffer)) {\n return {\n success: true,\n data: arrayBuffer as T,\n contentType: \"text/plain\",\n };\n }\n\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || undefined,\n };\n } catch (error) {\n throw new Error(\"Failed to read resource\");\n }\n}\n\nexport async function updateResource<T>(\n config: BaseAPIConfig,\n id: string,\n data: T\n): Promise<ActionResponse<T>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"PUT\",\n headers,\n body: JSON.stringify(data),\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n return {\n success: true,\n data: await response.json(),\n };\n } catch (error) {\n throw new Error(\"Failed to update resource\");\n }\n}\n\nexport async function deleteResource(\n config: BaseAPIConfig,\n id: string\n): Promise<ActionResponse<void>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"DELETE\",\n headers,\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n return {\n success: true,\n };\n } catch (error) {\n throw new Error(\"Failed to delete resource\");\n }\n}\n","\"use server\";\nimport { NextResponse } from \"next/server\";\nimport { headers } from \"next/headers\";\n\nexport type ChatRouteContext = {\n params: {\n path: string[];\n };\n};\n\nexport type ChatRequestConfig = {\n assistantBaseUrl: string;\n assistantRoute?: string;\n apiKey: string;\n};\n\nexport type ChatResponse = Response | any;\n\nexport async function handleChatRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<ChatResponse> {\n try {\n const headersList = await headers();\n const body = await request.json();\n const routeParams = await context.params;\n const routePath = routeParams.path.join(\"/\");\n const assistantRoute = config.assistantRoute || \"infer\";\n\n const assistantUrl = `${config.assistantBaseUrl}/${assistantRoute}/${routePath}`;\n\n const response = await fetch(assistantUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...headersList,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Chat inference server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return NextResponse.json(\n {\n status: response.status,\n statusText: response.statusText ||\n \"Failed to forward Chat data\",\n ...errorJson,\n },\n { status: response.status }\n );\n }\n\n return new NextResponse(response.body, {\n status: 200,\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Content-Encoding\",\n },\n });\n } catch (error) {\n return NextResponse.json(\n { error: \"Failed to forward Chat data\" },\n { status: 500 }\n );\n }\n}\n\nexport async function handleStreamRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<Response> {\n try {\n const headersList = await headers();\n const routeParams = context.params;\n const path = routeParams.path.join(\"/\");\n const assistantRoute = config.assistantRoute || \"stream\";\n\n const streamUrl = `${config.assistantBaseUrl}/${assistantRoute}/${path}`;\n\n const response = await fetch(streamUrl, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...Object.fromEntries(headersList.entries()),\n },\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Stream server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return new Response(\n JSON.stringify({\n error:\n errorJson.message ||\n response.statusText ||\n \"Failed to forward Stream data\",\n ...errorJson,\n }),\n { status: response.status }\n );\n }\n\n return new Response(response.body, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Stream error:\", error);\n return new Response(\n JSON.stringify({ error: \"Failed to forward stream data\" }),\n { status: 500 }\n );\n }\n}\n\n","\"use server\";\nimport { headers } from \"next/headers\";\n\nexport type ApmRequestConfig = {\n apmServerUrl: string;\n};\n\nexport async function handleApmRequest(\n request: Request,\n config: ApmRequestConfig\n): Promise<Response> {\n try {\n const headersList = await headers();\n const body = await request.arrayBuffer();\n\n const apmUrl = `${config.apmServerUrl}/intake/v2/rum/events`;\n\n const response = await fetch(apmUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-ndjson\",\n Accept: \"*/*\",\n \"Content-Encoding\": \"gzip\",\n \"User-Agent\": \"elastic-apm-rum/5.15.0\",\n ...(headersList.get(\"Authorization\") && {\n Authorization: `Bearer ${headersList.get(\"Authorization\")}`,\n }),\n },\n body: body,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n console.error(\"APM server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorText,\n });\n throw new Error(\n `APM server responded with ${response.status}: ${errorText}`\n );\n }\n\n return new Response(null, {\n status: 200,\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Content-Encoding\",\n },\n });\n } catch (error) {\n console.error(\"APM proxy error:\", error);\n return new Response(\n JSON.stringify({ error: \"Failed to forward APM data\" }),\n { status: 500 }\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,oBAA2B;AAC3B,qBAAwB;AAGxB,eAAsB,iBAAiB,OAAiB,SAAkB;AACxE,QAAM,cAAc,UAAM,wBAAQ;AAElC,MAAI,CAAC,SAAS;AACZ,QAAI,qBAAiB,0BAAW,EAAE,SAAS;AAC3C,UAAM,mBAAmB,YAAY,IAAI,kBAAkB;AAE3D,QAAI,CAAC,oBAAoB,OAAO;AAC9B,kBAAY,IAAI,oBAAoB,cAAc;AAAA,IACpD,OAAO;AACL,uBAAiB,iBAAiB;AAAA,IACpC;AAEA,WAAO;AAAA,EACT;AAEA,MAAI,mBAAqC,CAAC;AAC1C,QAAM,wBAAwB,YAAY,IAAI,mBAAmB;AAEjE,MAAI,uBAAuB;AACzB,QAAI;AACF,YAAM,eAAe,mBAAmB,sBAAsB,KAAK;AACnE,yBAAmB,KAAK,MAAM,YAAY;AAAA,IAC5C,SAAS,GAAG;AACV,cAAQ,MAAM,uCAAuC,CAAC;AACtD,yBAAmB,CAAC;AAAA,IACtB;AAAA,EACF;AAEA,MAAI,CAAC,iBAAiB,OAAO,KAAK,OAAO;AACvC,qBAAiB,OAAO,QAAI,0BAAW,EAAE,SAAS;AAAA,EACpD;AAEA,cAAY,IAAI,qBAAqB,KAAK,UAAU,gBAAgB,CAAC;AAErE,SAAO,iBAAiB,OAAO;AACjC;;;ACKO,SAAS,gBAAgB,QAAoC;AAClE,QAAMA,WAAuB;AAAA,IAC3B,gBAAgB;AAAA,EAClB;AAEA,MAAI,OAAO,OAAO;AAChB,IAAAA,SAAQ,eAAe,IAAI,UAAU,OAAO,KAAK;AAAA,EACnD;AAEA,MAAI,OAAO,SAAS;AAClB,WAAO,QAAQ,OAAO,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACvD,MAAAA,SAAQ,GAAG,IAAI;AAAA,IACjB,CAAC;AAAA,EACH;AAEA,SAAOA;AACT;AAEO,SAAS,cAAc,QAA8B;AAC1D,MAAI;AACF,UAAM,OAAO,IAAI,YAAY,EAAE,OAAO,MAAM;AAC5C,WAAO,0BAA0B,KAAK,KAAK,KAAK,CAAC;AAAA,EACnD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;ACxDA,eAAsB,eACpB,QACA,SACoC;AACpC,MAAI;AACF,UAAMC,WAAU,gBAAgB,MAAM;AAEtC,UAAM,WAAW,MAAM,MAAM,GAAG,OAAO,OAAO,GAAG,OAAO,KAAK,IAAI;AAAA,MAC/D,QAAQ;AAAA,MACR,SAAAA;AAAA,MACA,MAAM,KAAK,UAAU,OAAO;AAAA,MAC5B,OAAO;AAAA,IACT,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,QAAQ,MAAM,SAAS,KAAK;AAClC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL,SAAS,MAAM,WAAW,mBAAmB,SAAS,MAAM;AAAA,UAC5D,MAAM,SAAS,OAAO,SAAS;AAAA,UAC/B,SAAS;AAAA,YACP,QAAQ,SAAS;AAAA,YACjB,YAAY,SAAS;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,MAAM,SAAS,KAAK;AAAA,IAC5B;AAAA,EACF,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AACF;AAEA,eAAsB,aACpB,QACA,IAC4B;AAC5B,MAAI;AACF,UAAMA,WAAU,gBAAgB,MAAM;AACtC,UAAM,MAAM,KACR,GAAG,OAAO,OAAO,GAAG,OAAO,KAAK,IAAI,EAAE,KACtC,GAAG,OAAO,OAAO,GAAG,OAAO,KAAK;AAEpC,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,QAAQ;AAAA,MACR,SAAAA;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,QAAQ,MAAM,SAAS,KAAK;AAClC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL,SAAS,MAAM,WAAW,mBAAmB,SAAS,MAAM;AAAA,UAC5D,MAAM,SAAS,OAAO,SAAS;AAAA,UAC/B,SAAS;AAAA,YACP,QAAQ,SAAS;AAAA,YACjB,YAAY,SAAS;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,cAAc,SAAS,QAAQ,IAAI,cAAc;AACvD,QAAI,aAAa,SAAS,kBAAkB,GAAG;AAC7C,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM,MAAM,SAAS,KAAK;AAAA,QAC1B,aAAa,eAAe;AAAA,MAC9B;AAAA,IACF;AAEA,UAAM,cAAc,MAAM,SAAS,YAAY;AAE/C,QAAI,aAAa,SAAS,cAAc,KAAK,cAAc,WAAW,GAAG;AACvE,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,MAAM,SAAS,KAAK;AAAA,MAC1B,aAAa,eAAe;AAAA,IAC9B;AAAA,EACF,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AACF;AAEA,eAAsB,eACpB,QACA,IACA,MAC4B;AAC5B,MAAI;AACF,UAAMA,WAAU,gBAAgB,MAAM;AAEtC,UAAM,WAAW,MAAM,MAAM,GAAG,OAAO,OAAO,GAAG,OAAO,KAAK,IAAI,EAAE,IAAI;AAAA,MACrE,QAAQ;AAAA,MACR,SAAAA;AAAA,MACA,MAAM,KAAK,UAAU,IAAI;AAAA,MACzB,OAAO;AAAA,IACT,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,QAAQ,MAAM,SAAS,KAAK;AAClC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL,SAAS,MAAM,WAAW,mBAAmB,SAAS,MAAM;AAAA,UAC5D,MAAM,SAAS,OAAO,SAAS;AAAA,UAC/B,SAAS;AAAA,YACP,QAAQ,SAAS;AAAA,YACjB,YAAY,SAAS;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,MAAM,SAAS,KAAK;AAAA,IAC5B;AAAA,EACF,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AACF;AAEA,eAAsB,eACpB,QACA,IAC+B;AAC/B,MAAI;AACF,UAAMA,WAAU,gBAAgB,MAAM;AAEtC,UAAM,WAAW,MAAM,MAAM,GAAG,OAAO,OAAO,GAAG,OAAO,KAAK,IAAI,EAAE,IAAI;AAAA,MACrE,QAAQ;AAAA,MACR,SAAAA;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,QAAQ,MAAM,SAAS,KAAK;AAClC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL,SAAS,MAAM,WAAW,mBAAmB,SAAS,MAAM;AAAA,UAC5D,MAAM,SAAS,OAAO,SAAS;AAAA,UAC/B,SAAS;AAAA,YACP,QAAQ,SAAS;AAAA,YACjB,YAAY,SAAS;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,IACX;AAAA,EACF,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AACF;;;ACzLA,oBAA6B;AAC7B,IAAAC,kBAAwB;AAgBxB,eAAsB,kBACpB,SACA,SACA,QACuB;AACvB,MAAI;AACF,UAAM,cAAc,UAAM,yBAAQ;AAClC,UAAM,OAAO,MAAM,QAAQ,KAAK;AAChC,UAAM,cAAc,MAAM,QAAQ;AAClC,UAAM,YAAY,YAAY,KAAK,KAAK,GAAG;AAC3C,UAAM,iBAAiB,OAAO,kBAAkB;AAEhD,UAAM,eAAe,GAAG,OAAO,gBAAgB,IAAI,cAAc,IAAI,SAAS;AAE9E,UAAM,WAAW,MAAM,MAAM,cAAc;AAAA,MACzC,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,eAAe,UAAU,OAAO,MAAM;AAAA,QACtC,GAAG;AAAA,MACL;AAAA,MACA,MAAM,KAAK,UAAU,IAAI;AAAA,IAC3B,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAY,MAAM,SAAS,KAAK;AACtC,cAAQ,MAAM,gCAAgC;AAAA,QAC5C,QAAQ,SAAS;AAAA,QACjB,YAAY,SAAS;AAAA,QACrB,MAAM;AAAA,MACR,CAAC;AAED,aAAO,2BAAa;AAAA,QAClB;AAAA,UACE,QAAQ,SAAS;AAAA,UACjB,YAAY,SAAS,cACrB;AAAA,UACA,GAAG;AAAA,QACL;AAAA,QACA,EAAE,QAAQ,SAAS,OAAO;AAAA,MAC5B;AAAA,IACF;AAEA,WAAO,IAAI,2BAAa,SAAS,MAAM;AAAA,MACrC,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,+BAA+B;AAAA,QAC/B,gCAAgC;AAAA,QAChC,gCAAgC;AAAA,MAClC;AAAA,IACF,CAAC;AAAA,EACH,SAAS,OAAO;AACd,WAAO,2BAAa;AAAA,MAClB,EAAE,OAAO,8BAA8B;AAAA,MACvC,EAAE,QAAQ,IAAI;AAAA,IAChB;AAAA,EACF;AACF;AAEA,eAAsB,oBACpB,SACA,SACA,QACmB;AACnB,MAAI;AACF,UAAM,cAAc,UAAM,yBAAQ;AAClC,UAAM,cAAc,QAAQ;AAC5B,UAAM,OAAO,YAAY,KAAK,KAAK,GAAG;AACtC,UAAM,iBAAiB,OAAO,kBAAkB;AAEhD,UAAM,YAAY,GAAG,OAAO,gBAAgB,IAAI,cAAc,IAAI,IAAI;AAEtE,UAAM,WAAW,MAAM,MAAM,WAAW;AAAA,MACtC,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,eAAe,UAAU,OAAO,MAAM;AAAA,QACtC,GAAG,OAAO,YAAY,YAAY,QAAQ,CAAC;AAAA,MAC7C;AAAA,IACF,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAY,MAAM,SAAS,KAAK;AACtC,cAAQ,MAAM,wBAAwB;AAAA,QACpC,QAAQ,SAAS;AAAA,QACjB,YAAY,SAAS;AAAA,QACrB,MAAM;AAAA,MACR,CAAC;AAED,aAAO,IAAI;AAAA,QACT,KAAK,UAAU;AAAA,UACb,OACE,UAAU,WACV,SAAS,cACT;AAAA,UACA,GAAG;AAAA,QACP,CAAC;AAAA,QACD,EAAE,QAAQ,SAAS,OAAO;AAAA,MAC5B;AAAA,IACF;AAEA,WAAO,IAAI,SAAS,SAAS,MAAM;AAAA,MACjC,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,YAAY;AAAA,MACd;AAAA,IACF,CAAC;AAAA,EACH,SAAS,OAAO;AACd,YAAQ,MAAM,iBAAiB,KAAK;AACpC,WAAO,IAAI;AAAA,MACT,KAAK,UAAU,EAAE,OAAO,gCAAgC,CAAC;AAAA,MACzD,EAAE,QAAQ,IAAI;AAAA,IAChB;AAAA,EACF;AACF;;;ACpIA,IAAAC,kBAAwB;AAMxB,eAAsB,iBACpB,SACA,QACmB;AACnB,MAAI;AACF,UAAM,cAAc,UAAM,yBAAQ;AAClC,UAAM,OAAO,MAAM,QAAQ,YAAY;AAEvC,UAAM,SAAS,GAAG,OAAO,YAAY;AAErC,UAAM,WAAW,MAAM,MAAM,QAAQ;AAAA,MACnC,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,oBAAoB;AAAA,QACpB,cAAc;AAAA,QACd,GAAI,YAAY,IAAI,eAAe,KAAK;AAAA,UACtC,eAAe,UAAU,YAAY,IAAI,eAAe,CAAC;AAAA,QAC3D;AAAA,MACF;AAAA,MACA;AAAA,IACF,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAY,MAAM,SAAS,KAAK;AACtC,cAAQ,MAAM,qBAAqB;AAAA,QACjC,QAAQ,SAAS;AAAA,QACjB,YAAY,SAAS;AAAA,QACrB,MAAM;AAAA,MACR,CAAC;AACD,YAAM,IAAI;AAAA,QACR,6BAA6B,SAAS,MAAM,KAAK,SAAS;AAAA,MAC5D;AAAA,IACF;AAEA,WAAO,IAAI,SAAS,MAAM;AAAA,MACxB,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,+BAA+B;AAAA,QAC/B,gCAAgC;AAAA,QAChC,gCAAgC;AAAA,MAClC;AAAA,IACF,CAAC;AAAA,EACH,SAAS,OAAO;AACd,YAAQ,MAAM,oBAAoB,KAAK;AACvC,WAAO,IAAI;AAAA,MACT,KAAK,UAAU,EAAE,OAAO,6BAA6B,CAAC;AAAA,MACtD,EAAE,QAAQ,IAAI;AAAA,IAChB;AAAA,EACF;AACF;","names":["headers","headers","import_headers","import_headers"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/actions/alquimia.action.ts","../../src/utils/utils.ts","../../src/actions/baseApi.action.ts","../../src/actions/chat.action.ts","../../src/actions/apm.action.ts"],"sourcesContent":["'use server'\nimport { randomUUID } from \"crypto\";\nimport { cookies } from \"next/headers\";\nimport { ConversationsMap } from \"../types/type\";\n\nexport async function initConversation(reset?: boolean, topicId?: string) {\n const cookieStore = await cookies();\n\n if (!topicId) {\n let conversationId = randomUUID().toString();\n const alquimia_session = cookieStore.get(\"alquimia-session\");\n\n if (!alquimia_session || reset) {\n cookieStore.set(\"alquimia-session\", conversationId);\n } else {\n conversationId = alquimia_session.value;\n }\n\n return conversationId;\n }\n\n let conversationsMap: ConversationsMap = {};\n const existingConversations = cookieStore.get(\"alquimia-sessions\");\n \n if (existingConversations) {\n try {\n const decodedValue = decodeURIComponent(existingConversations.value);\n conversationsMap = JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error('Error parsing conversations cookie:', e);\n conversationsMap = {};\n }\n }\n\n if (!conversationsMap[topicId] || reset) {\n conversationsMap[topicId] = randomUUID().toString();\n }\n\n cookieStore.set(\"alquimia-sessions\", JSON.stringify(conversationsMap));\n \n return conversationsMap[topicId];\n}","import {\n BaseAPIConfig,\n ApiError,\n ConversationsMap,\n ThinkingsInferenceResponse,\n} 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(\n cookieValue: string\n): 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\nexport function hasToolSummary(data: any) {\n return data.tool_summary && Object.keys(data.tool_summary).length > 0;\n}\n\nexport function mergeThinkingsByControlId(\n existingThinkings: ThinkingsInferenceResponse[] = [],\n newThinkings: ThinkingsInferenceResponse[] = []\n): ThinkingsInferenceResponse[] {\n const thinkingsMap = new Map(existingThinkings.map((t) => [t.control_id, t]));\n for (const t of newThinkings) {\n if (t && t.control_id) {\n thinkingsMap.set(t.control_id, t);\n }\n }\n return Array.from(thinkingsMap.values());\n}\n\nexport function extractAnswerContent(content: string): string {\n if (typeof content !== \"string\") return \"\";\n const trimmed = content.trim();\n if (trimmed.startsWith(\"{\")) {\n try {\n const repaired = trimmed.replace(/(?<!\\\\)\\n/g, \"\\\\n\");\n const parsed = JSON.parse(repaired);\n if (parsed && typeof parsed === \"object\" && \"answer\" in parsed) {\n return parsed.answer;\n }\n } catch (e) {\n return content;\n }\n }\n return content;\n}\n","\"use server\";\nimport { BaseAPIConfig } from \"../types/type\";\nimport { generateHeaders, isTextContent } from \"../utils\";\n\ninterface ActionResponse<T = void> {\n success: boolean;\n data?: T;\n contentType?: string;\n error?: {\n message: string;\n code?: string;\n details?: any;\n };\n}\n\nexport async function createResource<TResponse, TPayload>(\n config: BaseAPIConfig,\n payload: TPayload\n): Promise<ActionResponse<TResponse>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n \n return {\n success: true,\n data: await response.json(),\n };\n } catch (error) {\n throw new Error(\"Failed to create resource\");\n }\n}\n\nexport async function readResource<T>(\n config: BaseAPIConfig,\n id?: string\n): Promise<ActionResponse<T>> {\n try {\n const headers = generateHeaders(config);\n const url = id\n ? `${config.baseUrl}${config.route}/${id}`\n : `${config.baseUrl}${config.route}`;\n\n const response = await fetch(url, {\n method: \"GET\",\n headers,\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n const contentType = response.headers.get(\"content-type\");\n if (contentType?.includes(\"application/json\")) {\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || undefined,\n };\n }\n\n const arrayBuffer = await response.arrayBuffer();\n\n if (contentType?.includes(\"octet-stream\") && isTextContent(arrayBuffer)) {\n return {\n success: true,\n data: arrayBuffer as T,\n contentType: \"text/plain\",\n };\n }\n\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || undefined,\n };\n } catch (error) {\n throw new Error(\"Failed to read resource\");\n }\n}\n\nexport async function updateResource<T>(\n config: BaseAPIConfig,\n id: string,\n data: T\n): Promise<ActionResponse<T>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"PUT\",\n headers,\n body: JSON.stringify(data),\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n return {\n success: true,\n data: await response.json(),\n };\n } catch (error) {\n throw new Error(\"Failed to update resource\");\n }\n}\n\nexport async function deleteResource(\n config: BaseAPIConfig,\n id: string\n): Promise<ActionResponse<void>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"DELETE\",\n headers,\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n return {\n success: true,\n };\n } catch (error) {\n throw new Error(\"Failed to delete resource\");\n }\n}\n","\"use server\";\nimport { NextResponse } from \"next/server\";\nimport { headers } from \"next/headers\";\n\nexport type ChatRouteContext = {\n params: {\n path: string[];\n };\n};\n\nexport type ChatRequestConfig = {\n assistantBaseUrl: string;\n assistantRoute?: string;\n apiKey: string;\n};\n\nexport type ChatResponse = Response | any;\n\nexport async function handleChatRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<ChatResponse> {\n try {\n const headersList = await headers();\n const body = await request.json();\n const routeParams = await context.params;\n const routePath = routeParams.path.join(\"/\");\n const assistantRoute = config.assistantRoute || \"infer\";\n\n const assistantUrl = `${config.assistantBaseUrl}/${assistantRoute}/${routePath}`;\n\n const response = await fetch(assistantUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...headersList,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Chat inference server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return NextResponse.json(\n {\n status: response.status,\n statusText: response.statusText ||\n \"Failed to forward Chat data\",\n ...errorJson,\n },\n { status: response.status }\n );\n }\n\n return new NextResponse(response.body, {\n status: 200,\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Content-Encoding\",\n },\n });\n } catch (error) {\n return NextResponse.json(\n { error: \"Failed to forward Chat data\" },\n { status: 500 }\n );\n }\n}\n\nexport async function handleStreamRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<Response> {\n try {\n const headersList = await headers();\n const routeParams = context.params;\n const path = routeParams.path.join(\"/\");\n const assistantRoute = config.assistantRoute || \"stream\";\n\n const streamUrl = `${config.assistantBaseUrl}/${assistantRoute}/${path}`;\n\n const response = await fetch(streamUrl, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...Object.fromEntries(headersList.entries()),\n },\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Stream server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return new Response(\n JSON.stringify({\n error:\n errorJson.message ||\n response.statusText ||\n \"Failed to forward Stream data\",\n ...errorJson,\n }),\n { status: response.status }\n );\n }\n\n return new Response(response.body, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Stream error:\", error);\n return new Response(\n JSON.stringify({ error: \"Failed to forward stream data\" }),\n { status: 500 }\n );\n }\n}\n\n","\"use server\";\nimport { headers } from \"next/headers\";\n\nexport type ApmRequestConfig = {\n apmServerUrl: string;\n};\n\nexport async function handleApmRequest(\n request: Request,\n config: ApmRequestConfig\n): Promise<Response> {\n try {\n const headersList = await headers();\n const body = await request.arrayBuffer();\n\n const apmUrl = `${config.apmServerUrl}/intake/v2/rum/events`;\n\n const response = await fetch(apmUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-ndjson\",\n Accept: \"*/*\",\n \"Content-Encoding\": \"gzip\",\n \"User-Agent\": \"elastic-apm-rum/5.15.0\",\n ...(headersList.get(\"Authorization\") && {\n Authorization: `Bearer ${headersList.get(\"Authorization\")}`,\n }),\n },\n body: body,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n console.error(\"APM server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorText,\n });\n throw new Error(\n `APM server responded with ${response.status}: ${errorText}`\n );\n }\n\n return new Response(null, {\n status: 200,\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Content-Encoding\",\n },\n });\n } catch (error) {\n console.error(\"APM proxy error:\", error);\n return new Response(\n JSON.stringify({ error: \"Failed to forward APM data\" }),\n { status: 500 }\n );\n }\n}\n"],"mappings":"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","names":["headers","headers","headers"]}
|
|
1
|
+
{"version":3,"sources":["../../src/actions/alquimia.action.ts","../../src/utils/utils.ts","../../src/actions/baseApi.action.ts","../../src/actions/chat.action.ts","../../src/actions/apm.action.ts"],"sourcesContent":["'use server'\nimport { randomUUID } from \"crypto\";\nimport { cookies } from \"next/headers\";\nimport { ConversationsMap } from \"../types/type\";\n\nexport async function initConversation(reset?: boolean, topicId?: string) {\n const cookieStore = await cookies();\n\n if (!topicId) {\n let conversationId = randomUUID().toString();\n const alquimia_session = cookieStore.get(\"alquimia-session\");\n\n if (!alquimia_session || reset) {\n cookieStore.set(\"alquimia-session\", conversationId);\n } else {\n conversationId = alquimia_session.value;\n }\n\n return conversationId;\n }\n\n let conversationsMap: ConversationsMap = {};\n const existingConversations = cookieStore.get(\"alquimia-sessions\");\n \n if (existingConversations) {\n try {\n const decodedValue = decodeURIComponent(existingConversations.value);\n conversationsMap = JSON.parse(decodedValue) as ConversationsMap;\n } catch (e) {\n console.error('Error parsing conversations cookie:', e);\n conversationsMap = {};\n }\n }\n\n if (!conversationsMap[topicId] || reset) {\n conversationsMap[topicId] = randomUUID().toString();\n }\n\n cookieStore.set(\"alquimia-sessions\", JSON.stringify(conversationsMap));\n \n return conversationsMap[topicId];\n}","import {\n BaseAPIConfig,\n ApiError,\n ConversationsMap,\n ThinkingsInferenceResponse,\n Tooler,\n ToolEvent,\n} 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(\n cookieValue: string\n): 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\nexport function hasToolSummary(data: any) {\n return data.tool_summary && Object.keys(data.tool_summary).length > 0;\n}\n\nexport function mergeThinkingsByControlId(\n existingThinkings: ThinkingsInferenceResponse[] = [],\n newThinkings: ThinkingsInferenceResponse[] = []\n): ThinkingsInferenceResponse[] {\n const thinkingsMap = new Map(existingThinkings.map((t) => [t.control_id, t]));\n for (const t of newThinkings) {\n if (t && t.control_id) {\n thinkingsMap.set(t.control_id, t);\n }\n }\n return Array.from(thinkingsMap.values());\n}\n\nexport function extractAnswerContent(content: string): string {\n if (typeof content !== \"string\") return \"\";\n const trimmed = content.trim();\n if (trimmed.startsWith(\"{\")) {\n try {\n const repaired = trimmed.replace(/(?<!\\\\)\\n/g, \"\\\\n\");\n const parsed = JSON.parse(repaired);\n if (parsed && typeof parsed === \"object\" && \"answer\" in parsed) {\n return parsed.answer;\n }\n } catch (e) {\n return content;\n }\n }\n return content;\n}\n\nexport function mergeToolerByControlId(currentTooler: Tooler[], toolEvent: ToolEvent): Tooler[] {\n const { event_class, control_id, data, status } = toolEvent;\n const existingTool = currentTooler.find(t => t.control_id === control_id);\n const base: Tooler = existingTool || { control_id };\n\n let updated: Tooler;\n switch (event_class) {\n case \"ServerToolExecutionCommand\":\n updated = {\n ...base,\n tool_summary: {\n name: data.name,\n parameters: data,\n },\n };\n break;\n case \"ToolExecutionResponse\":\n updated = {\n ...base,\n tool_output: {\n result: data,\n status,\n },\n };\n break;\n default:\n return currentTooler;\n }\n\n return currentTooler.some(tool => tool.control_id === control_id)\n ? currentTooler.map(tool => (tool.control_id === control_id ? updated : tool))\n : [...currentTooler, updated];\n}\n\nexport function mergeToolEvents(initial: Tooler[], toolEvents?: ToolEvent[]): Tooler[] {\n return (toolEvents ?? []).reduce(\n (acc, toolEvent) => mergeToolerByControlId(acc, toolEvent),\n initial\n );\n}\n","\"use server\";\nimport { BaseAPIConfig } from \"../types/type\";\nimport { generateHeaders, isTextContent } from \"../utils\";\n\ninterface ActionResponse<T = void> {\n success: boolean;\n data?: T;\n contentType?: string;\n error?: {\n message: string;\n code?: string;\n details?: any;\n };\n}\n\nexport async function createResource<TResponse, TPayload>(\n config: BaseAPIConfig,\n payload: TPayload\n): Promise<ActionResponse<TResponse>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}`, {\n method: \"POST\",\n headers,\n body: JSON.stringify(payload),\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n \n return {\n success: true,\n data: await response.json(),\n };\n } catch (error) {\n throw new Error(\"Failed to create resource\");\n }\n}\n\nexport async function readResource<T>(\n config: BaseAPIConfig,\n id?: string\n): Promise<ActionResponse<T>> {\n try {\n const headers = generateHeaders(config);\n const url = id\n ? `${config.baseUrl}${config.route}/${id}`\n : `${config.baseUrl}${config.route}`;\n\n const response = await fetch(url, {\n method: \"GET\",\n headers,\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n const contentType = response.headers.get(\"content-type\");\n if (contentType?.includes(\"application/json\")) {\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || undefined,\n };\n }\n\n const arrayBuffer = await response.arrayBuffer();\n\n if (contentType?.includes(\"octet-stream\") && isTextContent(arrayBuffer)) {\n return {\n success: true,\n data: arrayBuffer as T,\n contentType: \"text/plain\",\n };\n }\n\n return {\n success: true,\n data: await response.json(),\n contentType: contentType || undefined,\n };\n } catch (error) {\n throw new Error(\"Failed to read resource\");\n }\n}\n\nexport async function updateResource<T>(\n config: BaseAPIConfig,\n id: string,\n data: T\n): Promise<ActionResponse<T>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"PUT\",\n headers,\n body: JSON.stringify(data),\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n return {\n success: true,\n data: await response.json(),\n };\n } catch (error) {\n throw new Error(\"Failed to update resource\");\n }\n}\n\nexport async function deleteResource(\n config: BaseAPIConfig,\n id: string\n): Promise<ActionResponse<void>> {\n try {\n const headers = generateHeaders(config);\n\n const response = await fetch(`${config.baseUrl}${config.route}/${id}`, {\n method: \"DELETE\",\n headers,\n cache: \"default\",\n });\n\n if (!response.ok) {\n const error = await response.json();\n return {\n success: false,\n error: {\n message: error.message || `Server returned ${response.status}`,\n code: response.status.toString(),\n details: {\n status: response.status,\n statusText: response.statusText,\n },\n },\n };\n }\n\n return {\n success: true,\n };\n } catch (error) {\n throw new Error(\"Failed to delete resource\");\n }\n}\n","\"use server\";\nimport { NextResponse } from \"next/server\";\nimport { headers } from \"next/headers\";\n\nexport type ChatRouteContext = {\n params: {\n path: string[];\n };\n};\n\nexport type ChatRequestConfig = {\n assistantBaseUrl: string;\n assistantRoute?: string;\n apiKey: string;\n};\n\nexport type ChatResponse = Response | any;\n\nexport async function handleChatRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<ChatResponse> {\n try {\n const headersList = await headers();\n const body = await request.json();\n const routeParams = await context.params;\n const routePath = routeParams.path.join(\"/\");\n const assistantRoute = config.assistantRoute || \"infer\";\n\n const assistantUrl = `${config.assistantBaseUrl}/${assistantRoute}/${routePath}`;\n\n const response = await fetch(assistantUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...headersList,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Chat inference server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return NextResponse.json(\n {\n status: response.status,\n statusText: response.statusText ||\n \"Failed to forward Chat data\",\n ...errorJson,\n },\n { status: response.status }\n );\n }\n\n return new NextResponse(response.body, {\n status: 200,\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Content-Encoding\",\n },\n });\n } catch (error) {\n return NextResponse.json(\n { error: \"Failed to forward Chat data\" },\n { status: 500 }\n );\n }\n}\n\nexport async function handleStreamRequest(\n request: Request,\n context: ChatRouteContext,\n config: ChatRequestConfig\n): Promise<Response> {\n try {\n const headersList = await headers();\n const routeParams = context.params;\n const path = routeParams.path.join(\"/\");\n const assistantRoute = config.assistantRoute || \"stream\";\n\n const streamUrl = `${config.assistantBaseUrl}/${assistantRoute}/${path}`;\n\n const response = await fetch(streamUrl, {\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: `Bearer ${config.apiKey}`,\n ...Object.fromEntries(headersList.entries()),\n },\n });\n\n if (!response.ok) {\n const errorJson = await response.json();\n console.error(\"Stream server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorJson,\n });\n\n return new Response(\n JSON.stringify({\n error:\n errorJson.message ||\n response.statusText ||\n \"Failed to forward Stream data\",\n ...errorJson,\n }),\n { status: response.status }\n );\n }\n\n return new Response(response.body, {\n status: 200,\n headers: {\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n },\n });\n } catch (error) {\n console.error(\"Stream error:\", error);\n return new Response(\n JSON.stringify({ error: \"Failed to forward stream data\" }),\n { status: 500 }\n );\n }\n}\n\n","\"use server\";\nimport { headers } from \"next/headers\";\n\nexport type ApmRequestConfig = {\n apmServerUrl: string;\n};\n\nexport async function handleApmRequest(\n request: Request,\n config: ApmRequestConfig\n): Promise<Response> {\n try {\n const headersList = await headers();\n const body = await request.arrayBuffer();\n\n const apmUrl = `${config.apmServerUrl}/intake/v2/rum/events`;\n\n const response = await fetch(apmUrl, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/x-ndjson\",\n Accept: \"*/*\",\n \"Content-Encoding\": \"gzip\",\n \"User-Agent\": \"elastic-apm-rum/5.15.0\",\n ...(headersList.get(\"Authorization\") && {\n Authorization: `Bearer ${headersList.get(\"Authorization\")}`,\n }),\n },\n body: body,\n });\n\n if (!response.ok) {\n const errorText = await response.text();\n console.error(\"APM server error:\", {\n status: response.status,\n statusText: response.statusText,\n body: errorText,\n });\n throw new Error(\n `APM server responded with ${response.status}: ${errorText}`\n );\n }\n\n return new Response(null, {\n status: 200,\n headers: {\n \"Access-Control-Allow-Origin\": \"*\",\n \"Access-Control-Allow-Methods\": \"POST, OPTIONS\",\n \"Access-Control-Allow-Headers\": \"Content-Type, Content-Encoding\",\n },\n });\n } catch (error) {\n console.error(\"APM proxy error:\", error);\n return new Response(\n JSON.stringify({ error: \"Failed to forward APM data\" }),\n { status: 500 }\n );\n }\n}\n"],"mappings":";AACA,SAAS,kBAAkB;AAC3B,SAAS,eAAe;AAGxB,eAAsB,iBAAiB,OAAiB,SAAkB;AACxE,QAAM,cAAc,MAAM,QAAQ;AAElC,MAAI,CAAC,SAAS;AACZ,QAAI,iBAAiB,WAAW,EAAE,SAAS;AAC3C,UAAM,mBAAmB,YAAY,IAAI,kBAAkB;AAE3D,QAAI,CAAC,oBAAoB,OAAO;AAC9B,kBAAY,IAAI,oBAAoB,cAAc;AAAA,IACpD,OAAO;AACL,uBAAiB,iBAAiB;AAAA,IACpC;AAEA,WAAO;AAAA,EACT;AAEA,MAAI,mBAAqC,CAAC;AAC1C,QAAM,wBAAwB,YAAY,IAAI,mBAAmB;AAEjE,MAAI,uBAAuB;AACzB,QAAI;AACF,YAAM,eAAe,mBAAmB,sBAAsB,KAAK;AACnE,yBAAmB,KAAK,MAAM,YAAY;AAAA,IAC5C,SAAS,GAAG;AACV,cAAQ,MAAM,uCAAuC,CAAC;AACtD,yBAAmB,CAAC;AAAA,IACtB;AAAA,EACF;AAEA,MAAI,CAAC,iBAAiB,OAAO,KAAK,OAAO;AACvC,qBAAiB,OAAO,IAAI,WAAW,EAAE,SAAS;AAAA,EACpD;AAEA,cAAY,IAAI,qBAAqB,KAAK,UAAU,gBAAgB,CAAC;AAErE,SAAO,iBAAiB,OAAO;AACjC;;;ACKO,SAAS,gBAAgB,QAAoC;AAClE,QAAMA,WAAuB;AAAA,IAC3B,gBAAgB;AAAA,EAClB;AAEA,MAAI,OAAO,OAAO;AAChB,IAAAA,SAAQ,eAAe,IAAI,UAAU,OAAO,KAAK;AAAA,EACnD;AAEA,MAAI,OAAO,SAAS;AAClB,WAAO,QAAQ,OAAO,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACvD,MAAAA,SAAQ,GAAG,IAAI;AAAA,IACjB,CAAC;AAAA,EACH;AAEA,SAAOA;AACT;AAEO,SAAS,cAAc,QAA8B;AAC1D,MAAI;AACF,UAAM,OAAO,IAAI,YAAY,EAAE,OAAO,MAAM;AAC5C,WAAO,0BAA0B,KAAK,KAAK,KAAK,CAAC;AAAA,EACnD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;ACxDA,eAAsB,eACpB,QACA,SACoC;AACpC,MAAI;AACF,UAAMC,WAAU,gBAAgB,MAAM;AAEtC,UAAM,WAAW,MAAM,MAAM,GAAG,OAAO,OAAO,GAAG,OAAO,KAAK,IAAI;AAAA,MAC/D,QAAQ;AAAA,MACR,SAAAA;AAAA,MACA,MAAM,KAAK,UAAU,OAAO;AAAA,MAC5B,OAAO;AAAA,IACT,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,QAAQ,MAAM,SAAS,KAAK;AAClC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL,SAAS,MAAM,WAAW,mBAAmB,SAAS,MAAM;AAAA,UAC5D,MAAM,SAAS,OAAO,SAAS;AAAA,UAC/B,SAAS;AAAA,YACP,QAAQ,SAAS;AAAA,YACjB,YAAY,SAAS;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,MAAM,SAAS,KAAK;AAAA,IAC5B;AAAA,EACF,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AACF;AAEA,eAAsB,aACpB,QACA,IAC4B;AAC5B,MAAI;AACF,UAAMA,WAAU,gBAAgB,MAAM;AACtC,UAAM,MAAM,KACR,GAAG,OAAO,OAAO,GAAG,OAAO,KAAK,IAAI,EAAE,KACtC,GAAG,OAAO,OAAO,GAAG,OAAO,KAAK;AAEpC,UAAM,WAAW,MAAM,MAAM,KAAK;AAAA,MAChC,QAAQ;AAAA,MACR,SAAAA;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,QAAQ,MAAM,SAAS,KAAK;AAClC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL,SAAS,MAAM,WAAW,mBAAmB,SAAS,MAAM;AAAA,UAC5D,MAAM,SAAS,OAAO,SAAS;AAAA,UAC/B,SAAS;AAAA,YACP,QAAQ,SAAS;AAAA,YACjB,YAAY,SAAS;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,cAAc,SAAS,QAAQ,IAAI,cAAc;AACvD,QAAI,aAAa,SAAS,kBAAkB,GAAG;AAC7C,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM,MAAM,SAAS,KAAK;AAAA,QAC1B,aAAa,eAAe;AAAA,MAC9B;AAAA,IACF;AAEA,UAAM,cAAc,MAAM,SAAS,YAAY;AAE/C,QAAI,aAAa,SAAS,cAAc,KAAK,cAAc,WAAW,GAAG;AACvE,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM;AAAA,QACN,aAAa;AAAA,MACf;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,MAAM,SAAS,KAAK;AAAA,MAC1B,aAAa,eAAe;AAAA,IAC9B;AAAA,EACF,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AACF;AAEA,eAAsB,eACpB,QACA,IACA,MAC4B;AAC5B,MAAI;AACF,UAAMA,WAAU,gBAAgB,MAAM;AAEtC,UAAM,WAAW,MAAM,MAAM,GAAG,OAAO,OAAO,GAAG,OAAO,KAAK,IAAI,EAAE,IAAI;AAAA,MACrE,QAAQ;AAAA,MACR,SAAAA;AAAA,MACA,MAAM,KAAK,UAAU,IAAI;AAAA,MACzB,OAAO;AAAA,IACT,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,QAAQ,MAAM,SAAS,KAAK;AAClC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL,SAAS,MAAM,WAAW,mBAAmB,SAAS,MAAM;AAAA,UAC5D,MAAM,SAAS,OAAO,SAAS;AAAA,UAC/B,SAAS;AAAA,YACP,QAAQ,SAAS;AAAA,YACjB,YAAY,SAAS;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,MACT,MAAM,MAAM,SAAS,KAAK;AAAA,IAC5B;AAAA,EACF,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AACF;AAEA,eAAsB,eACpB,QACA,IAC+B;AAC/B,MAAI;AACF,UAAMA,WAAU,gBAAgB,MAAM;AAEtC,UAAM,WAAW,MAAM,MAAM,GAAG,OAAO,OAAO,GAAG,OAAO,KAAK,IAAI,EAAE,IAAI;AAAA,MACrE,QAAQ;AAAA,MACR,SAAAA;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,QAAQ,MAAM,SAAS,KAAK;AAClC,aAAO;AAAA,QACL,SAAS;AAAA,QACT,OAAO;AAAA,UACL,SAAS,MAAM,WAAW,mBAAmB,SAAS,MAAM;AAAA,UAC5D,MAAM,SAAS,OAAO,SAAS;AAAA,UAC/B,SAAS;AAAA,YACP,QAAQ,SAAS;AAAA,YACjB,YAAY,SAAS;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS;AAAA,IACX;AAAA,EACF,SAAS,OAAO;AACd,UAAM,IAAI,MAAM,2BAA2B;AAAA,EAC7C;AACF;;;ACzLA,SAAS,oBAAoB;AAC7B,SAAS,eAAe;AAgBxB,eAAsB,kBACpB,SACA,SACA,QACuB;AACvB,MAAI;AACF,UAAM,cAAc,MAAM,QAAQ;AAClC,UAAM,OAAO,MAAM,QAAQ,KAAK;AAChC,UAAM,cAAc,MAAM,QAAQ;AAClC,UAAM,YAAY,YAAY,KAAK,KAAK,GAAG;AAC3C,UAAM,iBAAiB,OAAO,kBAAkB;AAEhD,UAAM,eAAe,GAAG,OAAO,gBAAgB,IAAI,cAAc,IAAI,SAAS;AAE9E,UAAM,WAAW,MAAM,MAAM,cAAc;AAAA,MACzC,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,eAAe,UAAU,OAAO,MAAM;AAAA,QACtC,GAAG;AAAA,MACL;AAAA,MACA,MAAM,KAAK,UAAU,IAAI;AAAA,IAC3B,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAY,MAAM,SAAS,KAAK;AACtC,cAAQ,MAAM,gCAAgC;AAAA,QAC5C,QAAQ,SAAS;AAAA,QACjB,YAAY,SAAS;AAAA,QACrB,MAAM;AAAA,MACR,CAAC;AAED,aAAO,aAAa;AAAA,QAClB;AAAA,UACE,QAAQ,SAAS;AAAA,UACjB,YAAY,SAAS,cACrB;AAAA,UACA,GAAG;AAAA,QACL;AAAA,QACA,EAAE,QAAQ,SAAS,OAAO;AAAA,MAC5B;AAAA,IACF;AAEA,WAAO,IAAI,aAAa,SAAS,MAAM;AAAA,MACrC,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,+BAA+B;AAAA,QAC/B,gCAAgC;AAAA,QAChC,gCAAgC;AAAA,MAClC;AAAA,IACF,CAAC;AAAA,EACH,SAAS,OAAO;AACd,WAAO,aAAa;AAAA,MAClB,EAAE,OAAO,8BAA8B;AAAA,MACvC,EAAE,QAAQ,IAAI;AAAA,IAChB;AAAA,EACF;AACF;AAEA,eAAsB,oBACpB,SACA,SACA,QACmB;AACnB,MAAI;AACF,UAAM,cAAc,MAAM,QAAQ;AAClC,UAAM,cAAc,QAAQ;AAC5B,UAAM,OAAO,YAAY,KAAK,KAAK,GAAG;AACtC,UAAM,iBAAiB,OAAO,kBAAkB;AAEhD,UAAM,YAAY,GAAG,OAAO,gBAAgB,IAAI,cAAc,IAAI,IAAI;AAEtE,UAAM,WAAW,MAAM,MAAM,WAAW;AAAA,MACtC,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,eAAe,UAAU,OAAO,MAAM;AAAA,QACtC,GAAG,OAAO,YAAY,YAAY,QAAQ,CAAC;AAAA,MAC7C;AAAA,IACF,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAY,MAAM,SAAS,KAAK;AACtC,cAAQ,MAAM,wBAAwB;AAAA,QACpC,QAAQ,SAAS;AAAA,QACjB,YAAY,SAAS;AAAA,QACrB,MAAM;AAAA,MACR,CAAC;AAED,aAAO,IAAI;AAAA,QACT,KAAK,UAAU;AAAA,UACb,OACE,UAAU,WACV,SAAS,cACT;AAAA,UACA,GAAG;AAAA,QACP,CAAC;AAAA,QACD,EAAE,QAAQ,SAAS,OAAO;AAAA,MAC5B;AAAA,IACF;AAEA,WAAO,IAAI,SAAS,SAAS,MAAM;AAAA,MACjC,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,iBAAiB;AAAA,QACjB,YAAY;AAAA,MACd;AAAA,IACF,CAAC;AAAA,EACH,SAAS,OAAO;AACd,YAAQ,MAAM,iBAAiB,KAAK;AACpC,WAAO,IAAI;AAAA,MACT,KAAK,UAAU,EAAE,OAAO,gCAAgC,CAAC;AAAA,MACzD,EAAE,QAAQ,IAAI;AAAA,IAChB;AAAA,EACF;AACF;;;ACpIA,SAAS,WAAAC,gBAAe;AAMxB,eAAsB,iBACpB,SACA,QACmB;AACnB,MAAI;AACF,UAAM,cAAc,MAAMA,SAAQ;AAClC,UAAM,OAAO,MAAM,QAAQ,YAAY;AAEvC,UAAM,SAAS,GAAG,OAAO,YAAY;AAErC,UAAM,WAAW,MAAM,MAAM,QAAQ;AAAA,MACnC,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,oBAAoB;AAAA,QACpB,cAAc;AAAA,QACd,GAAI,YAAY,IAAI,eAAe,KAAK;AAAA,UACtC,eAAe,UAAU,YAAY,IAAI,eAAe,CAAC;AAAA,QAC3D;AAAA,MACF;AAAA,MACA;AAAA,IACF,CAAC;AAED,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAY,MAAM,SAAS,KAAK;AACtC,cAAQ,MAAM,qBAAqB;AAAA,QACjC,QAAQ,SAAS;AAAA,QACjB,YAAY,SAAS;AAAA,QACrB,MAAM;AAAA,MACR,CAAC;AACD,YAAM,IAAI;AAAA,QACR,6BAA6B,SAAS,MAAM,KAAK,SAAS;AAAA,MAC5D;AAAA,IACF;AAEA,WAAO,IAAI,SAAS,MAAM;AAAA,MACxB,QAAQ;AAAA,MACR,SAAS;AAAA,QACP,+BAA+B;AAAA,QAC/B,gCAAgC;AAAA,QAChC,gCAAgC;AAAA,MAClC;AAAA,IACF,CAAC;AAAA,EACH,SAAS,OAAO;AACd,YAAQ,MAAM,oBAAoB,KAAK;AACvC,WAAO,IAAI;AAAA,MACT,KAAK,UAAU,EAAE,OAAO,6BAA6B,CAAC;AAAA,MACtD,EAAE,QAAQ,IAAI;AAAA,IAChB;AAAA,EACF;AACF;","names":["headers","headers","headers"]}
|
package/dist/hooks/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { AlquimiaSDK } from '../sdk/index.mjs';
|
|
3
|
-
import { AlquimiaMessage,
|
|
3
|
+
import { AlquimiaMessage, ToolEvent, AIMessageChunk, RatingData } from '../types/index.mjs';
|
|
4
4
|
import { createMessageId } from '../utils/index.mjs';
|
|
5
5
|
import '../providers-0Gi78uNQ.mjs';
|
|
6
6
|
import '@elastic/apm-rum';
|
|
@@ -29,7 +29,7 @@ declare function useAlquimia(sdk: AlquimiaSDK): {
|
|
|
29
29
|
messageMetaData: any;
|
|
30
30
|
messages: AlquimiaMessage[];
|
|
31
31
|
populateMessages: (messages: AlquimiaMessage[]) => void;
|
|
32
|
-
processMessageChunk: (messageId: string, chunk: string, error_code?: string, error_detail?: string, additionalInfo?: string, loading?: boolean, tooler?:
|
|
32
|
+
processMessageChunk: (messageId: string, chunk: string, error_code?: string, error_detail?: string, additionalInfo?: string, loading?: boolean, tooler?: ToolEvent[], thinkings?: any[]) => Promise<void>;
|
|
33
33
|
sendMessage: (message: string, callBack: (chunk: AIMessageChunk) => void, traceParentId?: string, sessionId?: string) => Promise<void>;
|
|
34
34
|
sessionId: string | null;
|
|
35
35
|
setActiveTool: react.Dispatch<any>;
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { AlquimiaSDK } from '../sdk/index.js';
|
|
3
|
-
import { AlquimiaMessage,
|
|
3
|
+
import { AlquimiaMessage, ToolEvent, AIMessageChunk, RatingData } from '../types/index.js';
|
|
4
4
|
import { createMessageId } from '../utils/index.js';
|
|
5
5
|
import '../providers-BJTXCtI3.js';
|
|
6
6
|
import '@elastic/apm-rum';
|
|
@@ -29,7 +29,7 @@ declare function useAlquimia(sdk: AlquimiaSDK): {
|
|
|
29
29
|
messageMetaData: any;
|
|
30
30
|
messages: AlquimiaMessage[];
|
|
31
31
|
populateMessages: (messages: AlquimiaMessage[]) => void;
|
|
32
|
-
processMessageChunk: (messageId: string, chunk: string, error_code?: string, error_detail?: string, additionalInfo?: string, loading?: boolean, tooler?:
|
|
32
|
+
processMessageChunk: (messageId: string, chunk: string, error_code?: string, error_detail?: string, additionalInfo?: string, loading?: boolean, tooler?: ToolEvent[], thinkings?: any[]) => Promise<void>;
|
|
33
33
|
sendMessage: (message: string, callBack: (chunk: AIMessageChunk) => void, traceParentId?: string, sessionId?: string) => Promise<void>;
|
|
34
34
|
sessionId: string | null;
|
|
35
35
|
setActiveTool: react.Dispatch<any>;
|
package/dist/hooks/index.js
CHANGED
|
@@ -81,6 +81,41 @@ function extractAnswerContent(content) {
|
|
|
81
81
|
}
|
|
82
82
|
return content;
|
|
83
83
|
}
|
|
84
|
+
function mergeToolerByControlId(currentTooler, toolEvent) {
|
|
85
|
+
const { event_class, control_id, data, status } = toolEvent;
|
|
86
|
+
const existingTool = currentTooler.find((t) => t.control_id === control_id);
|
|
87
|
+
const base = existingTool || { control_id };
|
|
88
|
+
let updated;
|
|
89
|
+
switch (event_class) {
|
|
90
|
+
case "ServerToolExecutionCommand":
|
|
91
|
+
updated = {
|
|
92
|
+
...base,
|
|
93
|
+
tool_summary: {
|
|
94
|
+
name: data.name,
|
|
95
|
+
parameters: data
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
break;
|
|
99
|
+
case "ToolExecutionResponse":
|
|
100
|
+
updated = {
|
|
101
|
+
...base,
|
|
102
|
+
tool_output: {
|
|
103
|
+
result: data,
|
|
104
|
+
status
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
break;
|
|
108
|
+
default:
|
|
109
|
+
return currentTooler;
|
|
110
|
+
}
|
|
111
|
+
return currentTooler.some((tool) => tool.control_id === control_id) ? currentTooler.map((tool) => tool.control_id === control_id ? updated : tool) : [...currentTooler, updated];
|
|
112
|
+
}
|
|
113
|
+
function mergeToolEvents(initial, toolEvents) {
|
|
114
|
+
return (toolEvents ?? []).reduce(
|
|
115
|
+
(acc, toolEvent) => mergeToolerByControlId(acc, toolEvent),
|
|
116
|
+
initial
|
|
117
|
+
);
|
|
118
|
+
}
|
|
84
119
|
|
|
85
120
|
// src/hooks/alquimia.hook.tsx
|
|
86
121
|
function useAlquimia(sdk) {
|
|
@@ -123,10 +158,10 @@ function useAlquimia(sdk) {
|
|
|
123
158
|
additionalInfo,
|
|
124
159
|
created_at: (/* @__PURE__ */ new Date()).getTime().toString(),
|
|
125
160
|
loading,
|
|
126
|
-
tooler:
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
161
|
+
tooler: mergeToolEvents(
|
|
162
|
+
updatedMessages[messageIndex]?.tooler || [],
|
|
163
|
+
tooler
|
|
164
|
+
),
|
|
130
165
|
thinkings: mergeThinkingsByControlId(
|
|
131
166
|
updatedMessages[messageIndex]?.thinkings || [],
|
|
132
167
|
thinkings || []
|
|
@@ -145,6 +180,7 @@ function useAlquimia(sdk) {
|
|
|
145
180
|
error_detail,
|
|
146
181
|
created_at: (/* @__PURE__ */ new Date()).getTime().toString(),
|
|
147
182
|
loading,
|
|
183
|
+
tooler: mergeToolEvents([], tooler),
|
|
148
184
|
thinkings
|
|
149
185
|
}
|
|
150
186
|
];
|
|
@@ -261,36 +297,21 @@ function useAlquimia(sdk) {
|
|
|
261
297
|
callBack({
|
|
262
298
|
type: "error",
|
|
263
299
|
error_code: "STREAM_ERROR",
|
|
264
|
-
error_detail: "Failed to establish stream connection."
|
|
300
|
+
error_detail: "Failed to establish stream connection. Stream event source error."
|
|
265
301
|
});
|
|
266
302
|
};
|
|
267
303
|
} catch (error) {
|
|
268
304
|
console.error("Error sending message:", error);
|
|
305
|
+
const errMessage = error.response.data.detail || error.message || "Error initiating the stream.";
|
|
269
306
|
setIsMessageStreaming(false);
|
|
270
307
|
setStreamingMessageId(null);
|
|
271
308
|
callBack({
|
|
272
309
|
type: "error",
|
|
273
310
|
error_code: error.status?.toString() || "REQUEST_ERROR",
|
|
274
|
-
error_detail:
|
|
311
|
+
error_detail: errMessage
|
|
275
312
|
});
|
|
276
313
|
}
|
|
277
314
|
}
|
|
278
|
-
function parseToolOutput(tool) {
|
|
279
|
-
if (tool.event_class === "ServerToolExecutionCommand") {
|
|
280
|
-
return {
|
|
281
|
-
tooler: {
|
|
282
|
-
tool_summary: { name: tool.data, parameters: { ...tool } }
|
|
283
|
-
}
|
|
284
|
-
};
|
|
285
|
-
} else if (tool.event_class === "ToolExecutionResponse") {
|
|
286
|
-
return {
|
|
287
|
-
tooler: {
|
|
288
|
-
tool_output: { result: tool.data }
|
|
289
|
-
}
|
|
290
|
-
};
|
|
291
|
-
}
|
|
292
|
-
return {};
|
|
293
|
-
}
|
|
294
315
|
function handleMessageEvent(event, callBack, eventSource) {
|
|
295
316
|
const data = JSON.parse(event.data);
|
|
296
317
|
if (data.errors?.length) {
|
|
@@ -305,17 +326,17 @@ function useAlquimia(sdk) {
|
|
|
305
326
|
cleanup(false, eventSource);
|
|
306
327
|
return;
|
|
307
328
|
}
|
|
308
|
-
|
|
329
|
+
if (data.tools_output?.length) {
|
|
309
330
|
callBack({
|
|
310
331
|
type: "answer",
|
|
311
332
|
answer: "",
|
|
312
|
-
tooler:
|
|
333
|
+
tooler: data.tools_output
|
|
313
334
|
});
|
|
314
335
|
}
|
|
315
|
-
|
|
336
|
+
if (data.thinkings?.length) {
|
|
316
337
|
callBack({
|
|
317
338
|
type: "answer",
|
|
318
|
-
thinkings:
|
|
339
|
+
thinkings: data.thinkings
|
|
319
340
|
});
|
|
320
341
|
}
|
|
321
342
|
const response = data.response;
|
package/dist/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/index.ts","../../src/hooks/alquimia.hook.tsx","../../src/utils/utils.ts","../../src/hooks/useRatings.ts"],"sourcesContent":["export { useAlquimia } from \"./alquimia.hook\";\nexport { useRatings } from \"./useRatings\";","import { Message } from \"ai\";\n\nimport { useEffect, useState } from \"react\";\nimport { AlquimiaSDK } from \"../sdk\";\nimport {\n AIMessageChunk,\n AlquimiaMessage,\n Tooler,\n AlquimiaEventData,\n} from \"../types/type\";\nimport { createMessageId, extractAnswerContent, mergeThinkingsByControlId } 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 [isMessageLoading, setIsMessageLoading] = useState<boolean>(false);\n const [isStreamingLoading, setIsStreamingLoading] = 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<AlquimiaMessage[]>([]);\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 [evaluationStrategy, setEvaluationStrategy] = useState<string>(\"\");\n\n const isLoading = isMessageLoading || isStreamingLoading;\n\n useEffect(() => {\n if (chunkReceived)\n processMessageChunk(currentMessageIdChuncked, chunkReceived);\n }, [chunkReceived]);\n\n\n function cleanMessages() {\n setMessages([]);\n }\n async function processMessageChunk(\n messageId: string,\n chunk: string,\n error_code?: string,\n error_detail?: string,\n additionalInfo?: string,\n loading?: boolean,\n tooler?: Tooler,\n thinkings?: any[]\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: AlquimiaMessage = {\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 loading,\n tooler: {\n ...(updatedMessages[messageIndex]?.tooler || {}),\n ...(tooler || {}),\n },\n thinkings: mergeThinkingsByControlId(\n updatedMessages[messageIndex]?.thinkings || [],\n thinkings || []\n ),\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 loading,\n thinkings,\n },\n ];\n }\n });\n }\n\n async function processAndSendMessage(\n message: string,\n options?: {\n messageType?: string;\n traceParentId?: string;\n sessionId?: string;\n additionalInfo?: string;\n }\n ) {\n addUserMessage(message, options?.messageType);\n \n const messageId = createMessageId();\n setCurrentMessageIdChuncked(messageId);\n setStreamingMessageId(messageId);\n \n await sendMessage(\n message,\n (chunk: AIMessageChunk) => {\n processMessageChunk(\n messageId,\n chunk?.answer || \"\",\n chunk?.error_code,\n chunk?.error_detail,\n options?.additionalInfo,\n chunk?.loading,\n chunk?.tooler,\n chunk?.thinkings\n );\n },\n options?.traceParentId,\n options?.sessionId\n );\n \n setInput(\"\");\n }\n\n async function handleSubmit(\n event: React.FormEvent<HTMLFormElement>,\n traceParentId?: string,\n sessionId?: string,\n additionalInfo?: string\n ) {\n setIsMessageLoading(true);\n event.preventDefault();\n \n if (input) {\n await processAndSendMessage(input, {\n traceParentId,\n sessionId,\n additionalInfo,\n });\n }\n \n setIsMessageLoading(false);\n }\n \n async function handleSystemMessage(\n message: string,\n options?: {\n traceParentId?: string;\n sessionId?: string;\n additionalInfo?: string;\n messageType?: string;\n }\n ) {\n setIsMessageLoading(true);\n \n await processAndSendMessage(message, {\n messageType: options?.messageType || \"system\",\n traceParentId: options?.traceParentId,\n sessionId: options?.sessionId,\n additionalInfo: options?.additionalInfo,\n });\n \n setIsMessageLoading(false);\n }\n\n function handleInputChange(event: React.ChangeEvent<HTMLTextAreaElement>) {\n setInput(event.target.value);\n }\n\n function handleReplaceInput(input: string) {\n setInput(input);\n }\n\n function populateMessages(messages: AlquimiaMessage[]) {\n setMessages(messages);\n }\n\n function handleLoadingCancel() {\n setIsMessageLoading(false);\n setIsMessageStreaming(false);\n setInput(\"\");\n }\n\n function addUserMessage(message: string, type?: string) {\n setMessages((prevMessages: AlquimiaMessage[]) => [\n ...prevMessages,\n {\n content: message,\n role: \"user\",\n type: type,\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 function cleanup(isStreaming: boolean, event: EventSource) {\n setIsMessageStreaming(isStreaming);\n setStreamingMessageId(null);\n setIsStreamingLoading(false);\n event.close();\n }\n\n async function sendMessage(\n message: string,\n callBack: (chunk: AIMessageChunk) => void,\n traceParentId?: string,\n sessionId?: string\n ) { \n setIsStreamingLoading(true);\n callBack({\n type: \"loading\",\n loading: true,\n });\n const conversationId = sessionId || getCookie(\"alquimia-session\");\n setIsMessageStreaming(true);\n setActiveTool(null);\n setLastRequest(message);\n\n try {\n const response = await sdk\n .widthConversationId(conversationId || \"\")\n .sendMessage(message, traceParentId);\n const eventSource = new EventSource(response.getUrlStream());\n const evaluationStrategy = response.getEvaluationStrategy()!;\n setEvaluationStrategy(evaluationStrategy);\n\n eventSource.onmessage = (event) =>\n handleMessageEvent(event, callBack, eventSource);\n\n eventSource.onerror = (event) => {\n console.error(\"Stream connection error\", event);\n cleanup(false, eventSource);\n callBack({\n type: \"error\",\n error_code: \"STREAM_ERROR\",\n error_detail: \"Failed to establish stream connection.\",\n });\n };\n } catch (error: any) {\n console.error(\"Error sending message:\", error);\n setIsMessageStreaming(false);\n setStreamingMessageId(null);\n callBack({\n type: \"error\",\n error_code: error.status?.toString() || \"REQUEST_ERROR\",\n error_detail: error.message || \"Error initiating the stream.\",\n });\n }\n }\n\n function parseToolOutput(tool: any) {\n if (tool.event_class === \"ServerToolExecutionCommand\") {\n return {\n tooler: {\n tool_summary: { name: tool.data, parameters: {...tool} },\n },\n };\n } else if (tool.event_class === \"ToolExecutionResponse\") {\n return {\n tooler: {\n tool_output: { result: tool.data },\n },\n };\n }\n return {};\n }\n\n function handleMessageEvent(\n event: MessageEvent,\n callBack: (chunk: AIMessageChunk) => void,\n eventSource: EventSource\n ) {\n const data: AlquimiaEventData = JSON.parse(event.data);\n \n if (data.errors?.length) {\n for (const error of data.errors) {\n console.error(\"Stream error:\", error);\n callBack({\n type: \"error\",\n error_code: error.event_class || error.status || \"UNKNOWN_ERROR\",\n error_detail: error.data || error.error_detail || \"Unknown error\",\n });\n }\n cleanup(false, eventSource);\n return;\n }\n \n for (const tool of data.tools_output ?? []) {\n callBack({\n type: \"answer\",\n answer: \"\",\n tooler: parseToolOutput(tool).tooler,\n });\n }\n \n for (const thinking of data.thinkings ?? []) {\n callBack({\n type: \"answer\",\n thinkings: [thinking],\n });\n }\n \n const response = data.response;\n const content = response?.event_class === \"AssistantInferenceResponse\"\n ? extractAnswerContent(response?.data?.content)\n : null;\n \n if (content) {\n setIsStreamingLoading(false);\n callBack({\n type: \"answer\",\n answer: content,\n });\n cleanup(false, eventSource);\n }\n }\n\n return {\n activeTool,\n cleanMessages,\n createMessageId,\n handleInputChange,\n handleReplaceInput,\n handleSubmit,\n handleSystemMessage,\n handleLoadingCancel,\n input,\n isLoading,\n isMessageStreaming,\n streamingMessageId,\n isAudioRecording,\n lastRequest,\n messageMetaData,\n messages,\n populateMessages,\n processMessageChunk,\n sendMessage,\n sessionId,\n setActiveTool,\n setSessionId,\n setLastRequest,\n setIsAudioRecording,\n evaluationStrategy,\n };\n}\n","import {\n BaseAPIConfig,\n ApiError,\n ConversationsMap,\n ThinkingsInferenceResponse,\n} 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(\n cookieValue: string\n): 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\nexport function hasToolSummary(data: any) {\n return data.tool_summary && Object.keys(data.tool_summary).length > 0;\n}\n\nexport function mergeThinkingsByControlId(\n existingThinkings: ThinkingsInferenceResponse[] = [],\n newThinkings: ThinkingsInferenceResponse[] = []\n): ThinkingsInferenceResponse[] {\n const thinkingsMap = new Map(existingThinkings.map((t) => [t.control_id, t]));\n for (const t of newThinkings) {\n if (t && t.control_id) {\n thinkingsMap.set(t.control_id, t);\n }\n }\n return Array.from(thinkingsMap.values());\n}\n\nexport function extractAnswerContent(content: string): string {\n if (typeof content !== \"string\") return \"\";\n const trimmed = content.trim();\n if (trimmed.startsWith(\"{\")) {\n try {\n const repaired = trimmed.replace(/(?<!\\\\)\\n/g, \"\\\\n\");\n const parsed = JSON.parse(repaired);\n if (parsed && typeof parsed === \"object\" && \"answer\" in parsed) {\n return parsed.answer;\n }\n } catch (e) {\n return content;\n }\n }\n return content;\n}\n","\nimport { useState, useReducer } from \"react\";\nimport { RatingData } from \"../types/type\";\nimport { getTopicSessionId } from \"../utils/utils\";\n\ninterface RatingState {\n ratingStars: number;\n ratingThumbs: \"thumbsUp\" | \"thumbsDown\" | \"\";\n ratingComment: string;\n}\n\ntype RatingAction =\n | { type: \"SET_RATING_STARS\"; payload: number }\n | { type: \"SET_RATING_THUMBS\"; payload: \"thumbsUp\" | \"thumbsDown\" | \"\" }\n | { type: \"SET_RATING_COMMENT\"; payload: string };\n\nconst initialState: RatingState = {\n ratingStars: 0,\n ratingThumbs: \"\",\n ratingComment: \"\",\n};\n\nfunction ratingReducer(state: RatingState, action: RatingAction): RatingState {\n switch (action.type) {\n case \"SET_RATING_STARS\":\n return { ...state, ratingStars: action.payload };\n case \"SET_RATING_THUMBS\":\n return { ...state, ratingThumbs: action.payload };\n case \"SET_RATING_COMMENT\":\n return { ...state, ratingComment: action.payload };\n default:\n return state;\n }\n}\n\ninterface UseRatingsParams {\n assistantId: string;\n topicId: string;\n sendRating: (ratingData: RatingData) => Promise<any>;\n onError?: (componentName: string, error: Error) => void;\n}\n\n\nexport function useRatings({ assistantId, sendRating, topicId }: UseRatingsParams) {\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [hasReviewed, setHasReviewed] = useState<boolean>(false);\n const [state, dispatch] = useReducer(ratingReducer, initialState);\n\n const setRatingStars = (rating: number) => {\n dispatch({ type: \"SET_RATING_STARS\", payload: rating });\n };\n\n const setRatingThumbs = (rating: \"thumbsUp\" | \"thumbsDown\" | \"\") => {\n dispatch({ type: \"SET_RATING_THUMBS\", payload: rating });\n };\n\n const setRatingComment = (comment: string) => {\n dispatch({ type: \"SET_RATING_COMMENT\", payload: comment });\n };\n\n const thumbsScore = (value: string) => {\n return value === \"thumbsUp\" ? 5 : value === \"thumbsDown\" ? 0 : 0;\n }\n\n const handleRate = async (key: string, value: any | string, onHandleRateSuccess: (success: boolean, err?: string) => void) => {\n setIsLoading(true);\n const sessionId = getTopicSessionId(topicId);\n\n const ratingObj: RatingData = {\n topicId: parseInt(topicId),\n sessionId: sessionId || \"\",\n assistantId: assistantId,\n score: key === \"score\" ? value : thumbsScore(value),\n description: key === \"description\" ? value : state.ratingComment,\n };\n\n try {\n const response = await sendRating(ratingObj);\n if (!response.success) {\n setIsLoading(false);\n onHandleRateSuccess(false, response.error.message);\n return;\n }\n \n if (key === \"score\") {\n setRatingStars(value);\n } else if (key === \"description\") {\n setRatingComment(value);\n }\n setHasReviewed(true);\n setIsLoading(false);\n onHandleRateSuccess(true);\n } catch (err) {\n setIsLoading(false);\n onHandleRateSuccess(false, String(err));\n }\n };\n\n return {\n handleRate,\n ratingStars: state.ratingStars,\n ratingThumbs: state.ratingThumbs,\n ratingComment: state.ratingComment,\n isLoading,\n hasReviewed\n };\n}\n"],"mappings":"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","names":["sessionId","input","messages","evaluationStrategy","import_react"]}
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/index.ts","../../src/hooks/alquimia.hook.tsx","../../src/utils/utils.ts","../../src/hooks/useRatings.ts"],"sourcesContent":["export { useAlquimia } from \"./alquimia.hook\";\nexport { useRatings } from \"./useRatings\";","import { Message } from \"ai\";\n\nimport { useEffect, useState } from \"react\";\nimport { AlquimiaSDK } from \"../sdk\";\nimport {\n AIMessageChunk,\n AlquimiaMessage,\n Tooler,\n AlquimiaEventData,\n ToolEvent\n} from \"../types/type\";\nimport { createMessageId, extractAnswerContent, mergeThinkingsByControlId, mergeToolEvents } 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 [isMessageLoading, setIsMessageLoading] = useState<boolean>(false);\n const [isStreamingLoading, setIsStreamingLoading] = 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<AlquimiaMessage[]>([]);\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 [evaluationStrategy, setEvaluationStrategy] = useState<string>(\"\");\n\n const isLoading = isMessageLoading || isStreamingLoading;\n\n useEffect(() => {\n if (chunkReceived)\n processMessageChunk(currentMessageIdChuncked, chunkReceived);\n }, [chunkReceived]);\n\n\n function cleanMessages() {\n setMessages([]);\n }\n async function processMessageChunk(\n messageId: string,\n chunk: string,\n error_code?: string,\n error_detail?: string,\n additionalInfo?: string,\n loading?: boolean,\n tooler?: ToolEvent[],\n thinkings?: any[]\n ) {\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: AlquimiaMessage = {\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 loading,\n tooler: mergeToolEvents(\n updatedMessages[messageIndex]?.tooler || [],\n tooler\n ),\n thinkings: mergeThinkingsByControlId(\n updatedMessages[messageIndex]?.thinkings || [],\n thinkings || []\n ),\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 loading,\n tooler: mergeToolEvents([], tooler),\n thinkings,\n },\n ];\n }\n });\n }\n\n async function processAndSendMessage(\n message: string,\n options?: {\n messageType?: string;\n traceParentId?: string;\n sessionId?: string;\n additionalInfo?: string;\n }\n ) {\n addUserMessage(message, options?.messageType);\n \n const messageId = createMessageId();\n setCurrentMessageIdChuncked(messageId);\n setStreamingMessageId(messageId);\n \n await sendMessage(\n message,\n (chunk: AIMessageChunk) => {\n processMessageChunk(\n messageId,\n chunk?.answer || \"\",\n chunk?.error_code,\n chunk?.error_detail,\n options?.additionalInfo,\n chunk?.loading,\n chunk?.tooler,\n chunk?.thinkings\n );\n },\n options?.traceParentId,\n options?.sessionId\n );\n \n setInput(\"\");\n }\n\n async function handleSubmit(\n event: React.FormEvent<HTMLFormElement>,\n traceParentId?: string,\n sessionId?: string,\n additionalInfo?: string\n ) {\n setIsMessageLoading(true);\n event.preventDefault();\n \n if (input) {\n await processAndSendMessage(input, {\n traceParentId,\n sessionId,\n additionalInfo,\n });\n }\n \n setIsMessageLoading(false);\n }\n \n async function handleSystemMessage(\n message: string,\n options?: {\n traceParentId?: string;\n sessionId?: string;\n additionalInfo?: string;\n messageType?: string;\n }\n ) {\n setIsMessageLoading(true);\n \n await processAndSendMessage(message, {\n messageType: options?.messageType || \"system\",\n traceParentId: options?.traceParentId,\n sessionId: options?.sessionId,\n additionalInfo: options?.additionalInfo,\n });\n \n setIsMessageLoading(false);\n }\n\n function handleInputChange(event: React.ChangeEvent<HTMLTextAreaElement>) {\n setInput(event.target.value);\n }\n\n function handleReplaceInput(input: string) {\n setInput(input);\n }\n\n function populateMessages(messages: AlquimiaMessage[]) {\n setMessages(messages);\n }\n\n function handleLoadingCancel() {\n setIsMessageLoading(false);\n setIsMessageStreaming(false);\n setInput(\"\");\n }\n\n function addUserMessage(message: string, type?: string) {\n setMessages((prevMessages: AlquimiaMessage[]) => [\n ...prevMessages,\n {\n content: message,\n role: \"user\",\n type: type,\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 function cleanup(isStreaming: boolean, event: EventSource) {\n setIsMessageStreaming(isStreaming);\n setStreamingMessageId(null);\n setIsStreamingLoading(false);\n event.close();\n }\n\n async function sendMessage(\n message: string,\n callBack: (chunk: AIMessageChunk) => void,\n traceParentId?: string,\n sessionId?: string\n ) { \n setIsStreamingLoading(true);\n callBack({\n type: \"loading\",\n loading: true,\n });\n const conversationId = sessionId || getCookie(\"alquimia-session\");\n setIsMessageStreaming(true);\n setActiveTool(null);\n setLastRequest(message);\n\n try {\n const response = await sdk\n .widthConversationId(conversationId || \"\")\n .sendMessage(message, traceParentId);\n const eventSource = new EventSource(response.getUrlStream());\n const evaluationStrategy = response.getEvaluationStrategy()!;\n setEvaluationStrategy(evaluationStrategy);\n\n eventSource.onmessage = (event) =>\n handleMessageEvent(event, callBack, eventSource);\n\n eventSource.onerror = (event) => {\n console.error(\"Stream connection error\", event);\n cleanup(false, eventSource);\n callBack({\n type: \"error\",\n error_code: \"STREAM_ERROR\",\n error_detail: \"Failed to establish stream connection. Stream event source error.\",\n });\n };\n } catch (error: any) {\n console.error(\"Error sending message:\", error);\n const errMessage = error.response.data.detail || error.message || \"Error initiating the stream.\";\n setIsMessageStreaming(false);\n setStreamingMessageId(null);\n callBack({\n type: \"error\",\n error_code: error.status?.toString() || \"REQUEST_ERROR\",\n error_detail: errMessage,\n });\n }\n }\n\n function handleMessageEvent(\n event: MessageEvent,\n callBack: (chunk: AIMessageChunk) => void,\n eventSource: EventSource\n ) {\n const data: AlquimiaEventData = JSON.parse(event.data);\n \n if (data.errors?.length) {\n for (const error of data.errors) {\n console.error(\"Stream error:\", error);\n callBack({\n type: \"error\",\n error_code: error.event_class || error.status || \"UNKNOWN_ERROR\",\n error_detail: error.data || error.error_detail || \"Unknown error\",\n });\n }\n cleanup(false, eventSource);\n return;\n }\n \n if (data.tools_output?.length) {\n callBack({\n type: \"answer\",\n answer: \"\",\n tooler: data.tools_output,\n });\n }\n \n if (data.thinkings?.length) {\n callBack({\n type: \"answer\",\n thinkings: data.thinkings,\n });\n }\n \n const response = data.response;\n const content = response?.event_class === \"AssistantInferenceResponse\"\n ? extractAnswerContent(response?.data?.content)\n : null;\n \n if (content) {\n setIsStreamingLoading(false);\n callBack({\n type: \"answer\",\n answer: content,\n });\n cleanup(false, eventSource);\n }\n }\n\n return {\n activeTool,\n cleanMessages,\n createMessageId,\n handleInputChange,\n handleReplaceInput,\n handleSubmit,\n handleSystemMessage,\n handleLoadingCancel,\n input,\n isLoading,\n isMessageStreaming,\n streamingMessageId,\n isAudioRecording,\n lastRequest,\n messageMetaData,\n messages,\n populateMessages,\n processMessageChunk,\n sendMessage,\n sessionId,\n setActiveTool,\n setSessionId,\n setLastRequest,\n setIsAudioRecording,\n evaluationStrategy,\n };\n}\n","import {\n BaseAPIConfig,\n ApiError,\n ConversationsMap,\n ThinkingsInferenceResponse,\n Tooler,\n ToolEvent,\n} 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(\n cookieValue: string\n): 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\nexport function hasToolSummary(data: any) {\n return data.tool_summary && Object.keys(data.tool_summary).length > 0;\n}\n\nexport function mergeThinkingsByControlId(\n existingThinkings: ThinkingsInferenceResponse[] = [],\n newThinkings: ThinkingsInferenceResponse[] = []\n): ThinkingsInferenceResponse[] {\n const thinkingsMap = new Map(existingThinkings.map((t) => [t.control_id, t]));\n for (const t of newThinkings) {\n if (t && t.control_id) {\n thinkingsMap.set(t.control_id, t);\n }\n }\n return Array.from(thinkingsMap.values());\n}\n\nexport function extractAnswerContent(content: string): string {\n if (typeof content !== \"string\") return \"\";\n const trimmed = content.trim();\n if (trimmed.startsWith(\"{\")) {\n try {\n const repaired = trimmed.replace(/(?<!\\\\)\\n/g, \"\\\\n\");\n const parsed = JSON.parse(repaired);\n if (parsed && typeof parsed === \"object\" && \"answer\" in parsed) {\n return parsed.answer;\n }\n } catch (e) {\n return content;\n }\n }\n return content;\n}\n\nexport function mergeToolerByControlId(currentTooler: Tooler[], toolEvent: ToolEvent): Tooler[] {\n const { event_class, control_id, data, status } = toolEvent;\n const existingTool = currentTooler.find(t => t.control_id === control_id);\n const base: Tooler = existingTool || { control_id };\n\n let updated: Tooler;\n switch (event_class) {\n case \"ServerToolExecutionCommand\":\n updated = {\n ...base,\n tool_summary: {\n name: data.name,\n parameters: data,\n },\n };\n break;\n case \"ToolExecutionResponse\":\n updated = {\n ...base,\n tool_output: {\n result: data,\n status,\n },\n };\n break;\n default:\n return currentTooler;\n }\n\n return currentTooler.some(tool => tool.control_id === control_id)\n ? currentTooler.map(tool => (tool.control_id === control_id ? updated : tool))\n : [...currentTooler, updated];\n}\n\nexport function mergeToolEvents(initial: Tooler[], toolEvents?: ToolEvent[]): Tooler[] {\n return (toolEvents ?? []).reduce(\n (acc, toolEvent) => mergeToolerByControlId(acc, toolEvent),\n initial\n );\n}\n","\nimport { useState, useReducer } from \"react\";\nimport { RatingData } from \"../types/type\";\nimport { getTopicSessionId } from \"../utils/utils\";\n\ninterface RatingState {\n ratingStars: number;\n ratingThumbs: \"thumbsUp\" | \"thumbsDown\" | \"\";\n ratingComment: string;\n}\n\ntype RatingAction =\n | { type: \"SET_RATING_STARS\"; payload: number }\n | { type: \"SET_RATING_THUMBS\"; payload: \"thumbsUp\" | \"thumbsDown\" | \"\" }\n | { type: \"SET_RATING_COMMENT\"; payload: string };\n\nconst initialState: RatingState = {\n ratingStars: 0,\n ratingThumbs: \"\",\n ratingComment: \"\",\n};\n\nfunction ratingReducer(state: RatingState, action: RatingAction): RatingState {\n switch (action.type) {\n case \"SET_RATING_STARS\":\n return { ...state, ratingStars: action.payload };\n case \"SET_RATING_THUMBS\":\n return { ...state, ratingThumbs: action.payload };\n case \"SET_RATING_COMMENT\":\n return { ...state, ratingComment: action.payload };\n default:\n return state;\n }\n}\n\ninterface UseRatingsParams {\n assistantId: string;\n topicId: string;\n sendRating: (ratingData: RatingData) => Promise<any>;\n onError?: (componentName: string, error: Error) => void;\n}\n\n\nexport function useRatings({ assistantId, sendRating, topicId }: UseRatingsParams) {\n const [isLoading, setIsLoading] = useState<boolean>(false);\n const [hasReviewed, setHasReviewed] = useState<boolean>(false);\n const [state, dispatch] = useReducer(ratingReducer, initialState);\n\n const setRatingStars = (rating: number) => {\n dispatch({ type: \"SET_RATING_STARS\", payload: rating });\n };\n\n const setRatingThumbs = (rating: \"thumbsUp\" | \"thumbsDown\" | \"\") => {\n dispatch({ type: \"SET_RATING_THUMBS\", payload: rating });\n };\n\n const setRatingComment = (comment: string) => {\n dispatch({ type: \"SET_RATING_COMMENT\", payload: comment });\n };\n\n const thumbsScore = (value: string) => {\n return value === \"thumbsUp\" ? 5 : value === \"thumbsDown\" ? 0 : 0;\n }\n\n const handleRate = async (key: string, value: any | string, onHandleRateSuccess: (success: boolean, err?: string) => void) => {\n setIsLoading(true);\n const sessionId = getTopicSessionId(topicId);\n\n const ratingObj: RatingData = {\n topicId: parseInt(topicId),\n sessionId: sessionId || \"\",\n assistantId: assistantId,\n score: key === \"score\" ? value : thumbsScore(value),\n description: key === \"description\" ? value : state.ratingComment,\n };\n\n try {\n const response = await sendRating(ratingObj);\n if (!response.success) {\n setIsLoading(false);\n onHandleRateSuccess(false, response.error.message);\n return;\n }\n \n if (key === \"score\") {\n setRatingStars(value);\n } else if (key === \"description\") {\n setRatingComment(value);\n }\n setHasReviewed(true);\n setIsLoading(false);\n onHandleRateSuccess(true);\n } catch (err) {\n setIsLoading(false);\n onHandleRateSuccess(false, String(err));\n }\n };\n\n return {\n handleRate,\n ratingStars: state.ratingStars,\n ratingThumbs: state.ratingThumbs,\n ratingComment: state.ratingComment,\n isLoading,\n hasReviewed\n };\n}\n"],"mappings":"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","names":["sessionId","input","messages","evaluationStrategy","import_react"]}
|