@sqlrooms/ai-core 0.28.0-rc.0 → 0.28.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.
@@ -1 +1 @@
1
- {"version":3,"file":"chatTransport.js","sourceRoot":"","sources":["../src/chatTransport.ts"],"names":[],"mappings":"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","sourcesContent":["import {createOpenAICompatible} from '@ai-sdk/openai-compatible';\nimport {convertToVercelAiToolV5, OpenAssistantTool} from '@openassistant/utils';\nimport type {AnalysisSessionSchema} from '@sqlrooms/ai-config';\nimport type {StoreApi} from '@sqlrooms/room-store';\nimport {getErrorMessageForDisplay} from '@sqlrooms/utils';\nimport type {DataUIPart, LanguageModel, ToolSet, UIDataTypes} from 'ai';\nimport {\n convertToModelMessages,\n DefaultChatTransport,\n lastAssistantMessageIsCompleteWithToolCalls,\n streamText,\n UIMessage,\n} from 'ai';\nimport {produce} from 'immer';\nimport {\n AI_DEFAULT_TEMPERATURE,\n ANALYSIS_PENDING_ID,\n TOOL_CALL_CANCELLED,\n} from './constants';\nimport type {AiSliceStateForTransport} from './types';\nimport {AddToolResult} from './types';\nimport {\n fixIncompleteToolCalls,\n mergeAbortSignals,\n ToolAbortError,\n} from './utils';\n\nexport type ToolCall = {\n input: string;\n toolCallId: string;\n toolName: string;\n type: 'tool-input-available';\n};\n\nexport type ChatTransportConfig = {\n sessionId: string;\n store: StoreApi<AiSliceStateForTransport>;\n defaultProvider: string;\n defaultModel: string;\n headers?: Record<string, string>;\n getInstructions: () => string;\n /**\n * Optional: supply a pre-configured custom model.\n * e.g. import {xai} from \"@ai-sdk/xai\";\n * getCustomModel: () => xai('grok-4')\n * If provided, this model will be used instead of the default OpenAI-compatible client.\n */\n getCustomModel?: () => LanguageModel | undefined;\n};\n\n/**\n * Creates a handler for tool completion that updates the tool additional data in the store\n */\nexport function createOnToolCompletedHandler(\n store: StoreApi<AiSliceStateForTransport>,\n sessionId?: string,\n) {\n return (toolCallId: string, additionalData: unknown) => {\n // Prefer explicit sessionId if provided, otherwise attempt to resolve from toolCallId.\n const toolCallSessionId = store\n .getState()\n .ai.getToolCallSession(toolCallId);\n const resolvedSessionId =\n sessionId ||\n toolCallSessionId ||\n store.getState().ai.config.currentSessionId;\n if (!resolvedSessionId) return;\n\n store\n .getState()\n .ai.setSessionToolAdditionalData(\n resolvedSessionId,\n toolCallId,\n additionalData,\n );\n };\n}\n\nfunction getSessionById(\n store: StoreApi<AiSliceStateForTransport>,\n sessionId: string | undefined,\n): AnalysisSessionSchema | undefined {\n if (!sessionId) return undefined;\n\n const sessions = store.getState().ai.config.sessions;\n const session = sessions.find(\n (s: AnalysisSessionSchema) => s.id === sessionId,\n );\n\n if (!session) {\n return undefined;\n }\n\n if (session.id !== sessionId) {\n return undefined;\n }\n\n return session;\n}\n\n/**\n * Converts OpenAssistant tools to Vercel AI SDK tools with onToolCompleted handler\n */\nexport function convertToAiSDKTools(\n tools: Record<string, OpenAssistantTool>,\n onToolCompleted?: OpenAssistantTool['onToolCompleted'],\n): ToolSet {\n return Object.entries(tools || {}).reduce(\n (acc: ToolSet, [name, tool]: [string, OpenAssistantTool]) => {\n acc[name] = convertToVercelAiToolV5({\n ...tool,\n onToolCompleted: (toolCallId: string, additionalData: unknown) => {\n if (tool.onToolCompleted) {\n // Call the onToolCompleted handler provided by the tool if it exists\n tool.onToolCompleted(toolCallId, additionalData);\n }\n // Call the onToolCompleted handler provided by the caller if it exists\n onToolCompleted?.(toolCallId, additionalData);\n },\n });\n return acc;\n },\n {},\n );\n}\n\nexport function createLocalChatTransportFactory({\n sessionId,\n store,\n defaultProvider,\n defaultModel,\n headers,\n getInstructions,\n getCustomModel,\n}: ChatTransportConfig) {\n return () => {\n const fetchImpl = async (_input: RequestInfo | URL, init?: RequestInit) => {\n // Parse caller-supplied body defensively to avoid breaking the stream\n const body = init?.body as string;\n let parsed: unknown = {};\n try {\n parsed = body ? JSON.parse(body) : {};\n } catch {\n parsed = {};\n }\n const parsedObj = (parsed as {messages?: unknown}) || {};\n\n // Resolve provider/model/apiKey/baseUrl at call time to pick up latest settings.\n const state = store.getState();\n const sessionFromBody = getSessionById(store, sessionId);\n const provider = sessionFromBody?.modelProvider || defaultProvider;\n const modelId = sessionFromBody?.model || defaultModel;\n\n // Fetch API key and base URL dynamically to pick up settings changes\n const apiKey = state.ai.getApiKeyFromSettings();\n const baseUrl = state.ai.getBaseUrlFromSettings();\n\n // Prefer a user-supplied model if available\n let model: LanguageModel | undefined = getCustomModel?.();\n\n // Fallback to OpenAI-compatible if no custom model provided\n if (!model) {\n const openai = createOpenAICompatible({\n apiKey,\n name: provider,\n baseURL: baseUrl ?? 'https://api.openai.com/v1',\n headers,\n });\n model = openai.chatModel(modelId);\n }\n\n const messagesCopy = Array.isArray(parsedObj.messages)\n ? (parsedObj.messages as UIMessage[])\n : [];\n\n const onToolCompleted = createOnToolCompletedHandler(store, sessionId);\n const tools = convertToAiSDKTools(state.ai.tools || {}, onToolCompleted);\n // Remove execute from tools for the model call so tool invocations are\n // handled exclusively by onChatToolCall. convertToAiSDKTools is expected\n // to return fresh tool objects; if that ever changes, clone before mutate.\n Object.values(tools).forEach((tool) => {\n tool.execute = undefined;\n });\n\n // get system instructions dynamically at request time to ensure fresh table schema\n const systemInstructions = getInstructions();\n\n const providerOptions = state.ai.getProviderOptions?.({\n provider,\n modelId,\n });\n\n // Get abort controller for the owning session (from body) if available\n const sessionAbortSignal = state.ai.getAbortController(sessionId)?.signal;\n // Also respect the request-level abort signal from useChat().stop()\n const abortSignal = mergeAbortSignals([\n init?.signal ?? undefined,\n sessionAbortSignal,\n ]);\n\n const result = streamText({\n model,\n messages: convertToModelMessages(messagesCopy),\n tools,\n system: systemInstructions,\n abortSignal,\n temperature: AI_DEFAULT_TEMPERATURE,\n ...(providerOptions ? {providerOptions} : {}),\n });\n\n return result.toUIMessageStreamResponse();\n };\n\n return new DefaultChatTransport({fetch: fetchImpl});\n };\n}\n\nexport function createRemoteChatTransportFactory(params: {\n store: StoreApi<AiSliceStateForTransport>;\n defaultProvider: string;\n defaultModel: string;\n sessionId: string;\n}) {\n return (endpoint: string, headers?: Record<string, string>) => {\n const fetchImpl = async (input: RequestInfo | URL, init?: RequestInit) => {\n const {store, defaultProvider, defaultModel, sessionId} = params;\n // Get current session's model and provider at request time\n const state = store.getState();\n\n // Parse the existing body and add model information (defensive parsing)\n const body = init?.body as string;\n let parsed: unknown = {};\n try {\n parsed = body ? JSON.parse(body) : {};\n } catch {\n parsed = {};\n }\n\n const sessionFromBody = getSessionById(store, sessionId);\n const modelProvider = sessionFromBody?.modelProvider || defaultProvider;\n const model = sessionFromBody?.model || defaultModel;\n\n const parsedObj =\n typeof parsed === 'object' && parsed !== null\n ? (parsed as Record<string, unknown>)\n : {};\n const enhancedBody = {\n ...parsedObj,\n modelProvider,\n model,\n };\n\n // Merge request abort (useChat.stop) with per-session abort (cancelAnalysis)\n const sessionAbortSignal = state.ai.getAbortController(sessionId)?.signal;\n const abortSignal = mergeAbortSignals([\n init?.signal ?? undefined,\n sessionAbortSignal,\n ]);\n\n // Make the request with enhanced body\n return fetch(input, {\n ...init,\n signal: abortSignal,\n body: JSON.stringify(enhancedBody),\n });\n };\n\n return new DefaultChatTransport({\n api: endpoint,\n credentials: 'include',\n headers,\n fetch: fetchImpl,\n });\n };\n}\n\nexport function createChatHandlers({\n store,\n}: {\n store: StoreApi<AiSliceStateForTransport>;\n}) {\n return {\n onChatToolCall: async ({\n sessionId,\n toolCall,\n addToolResult,\n }: {\n sessionId: string;\n toolCall: ToolCall;\n addToolResult?: AddToolResult;\n }) => {\n const {input, toolCallId, toolName} = toolCall;\n try {\n const state = store.getState();\n const session = getSessionById(store, sessionId);\n state.ai.setToolCallSession(toolCallId, sessionId);\n\n const abortController = sessionId\n ? state.ai.getAbortController(sessionId)\n : undefined;\n if (abortController?.signal.aborted) {\n addToolResult?.({\n tool: toolName,\n toolCallId,\n state: 'output-error',\n errorText: TOOL_CALL_CANCELLED,\n });\n return;\n }\n\n const onToolCompleted = createOnToolCompletedHandler(store, sessionId);\n const tools = convertToAiSDKTools(\n state.ai.tools || {},\n onToolCompleted,\n );\n\n const tool = tools[toolName];\n if (tool && state.ai.tools[toolName]?.execute && tool.execute) {\n const sessionMessages = (session?.uiMessages ?? []) as UIMessage[];\n const llmResult = await tool.execute(input, {\n toolCallId,\n messages: convertToModelMessages(sessionMessages),\n abortSignal: abortController?.signal,\n });\n\n addToolResult?.({\n tool: toolName,\n toolCallId,\n output: llmResult,\n });\n state.ai.setToolCallSession(toolCallId, undefined);\n } else {\n // Tool has no execute function - wait for UI component to call addToolResult\n const hasToolComponent = !!state.ai.findToolComponent(toolName);\n if (hasToolComponent && state.ai.waitForToolResult) {\n try {\n await state.ai.waitForToolResult(\n sessionId,\n toolCallId,\n abortController?.signal,\n );\n state.ai.setToolCallSession(toolCallId, undefined);\n } catch (error) {\n if (addToolResult && error instanceof Error) {\n addToolResult({\n tool: toolName,\n toolCallId,\n state: 'output-error',\n errorText: error.message,\n });\n }\n throw error;\n }\n }\n }\n // If no ToolComponent, we still return (no-op) - the UI won't render anything\n // and the tool call will remain incomplete, which is fine for error handling\n } catch (error) {\n const isAbortError = error instanceof ToolAbortError;\n addToolResult?.({\n tool: toolName,\n toolCallId,\n state: 'output-error',\n errorText: isAbortError\n ? TOOL_CALL_CANCELLED\n : getErrorMessageForDisplay(error),\n });\n // ensure mapping cleared on error too\n store.getState().ai.setToolCallSession(toolCallId, undefined);\n }\n },\n onChatData: (sessionId: string, dataPart: DataUIPart<UIDataTypes>) => {\n if (\n dataPart.type === 'data-tool-additional-output' &&\n dataPart.data &&\n (dataPart.data as {toolCallId?: unknown}).toolCallId != null\n ) {\n const {toolCallId, output} = dataPart.data as {\n toolCallId: string;\n output: unknown;\n };\n if (sessionId) {\n store\n .getState()\n .ai.setSessionToolAdditionalData(sessionId, toolCallId, output);\n }\n }\n },\n onChatFinish: ({\n sessionId,\n messages,\n }: {\n sessionId: string;\n messages: UIMessage[];\n }) => {\n if (!sessionId) return;\n try {\n const state = store.getState();\n const abortController = state.ai.getAbortController(sessionId);\n\n // check if the analysis has been aborted, force-complete and clean up immediately\n const aborted = !!abortController?.signal.aborted;\n if (aborted) {\n const sessionMessages =\n (getSessionById(store, sessionId)?.uiMessages as UIMessage[]) || [];\n const sourceMessages =\n messages && messages.length > 0 ? messages : sessionMessages;\n const completedMessages = fixIncompleteToolCalls(sourceMessages);\n state.ai.setSessionUiMessages(sessionId, completedMessages);\n\n state.ai.setIsRunning(sessionId, false);\n state.ai.setAbortController(sessionId, undefined);\n\n // Ensure an analysis result exists and is marked as cancelled\n store.setState((stateToUpdate: AiSliceStateForTransport) =>\n produce(stateToUpdate, (draft: AiSliceStateForTransport) => {\n const targetSession = draft.ai.config.sessions.find(\n (s: AnalysisSessionSchema) => s.id === sessionId,\n );\n if (!targetSession) return;\n\n const lastUserMessage = completedMessages\n .filter((msg) => msg.role === 'user')\n .slice(-1)[0];\n if (!lastUserMessage) return;\n\n const promptText = lastUserMessage.parts\n .filter((part) => part.type === 'text')\n .map((part) => (part as {text: string}).text)\n .join('');\n\n const pendingIndex = targetSession.analysisResults.findIndex(\n (result) => result.id === ANALYSIS_PENDING_ID,\n );\n\n if (pendingIndex !== -1) {\n targetSession.analysisResults[pendingIndex] = {\n id: lastUserMessage.id,\n prompt: promptText,\n errorMessage: {error: TOOL_CALL_CANCELLED},\n isCompleted: true,\n };\n } else {\n const existing = targetSession.analysisResults.find(\n (r) => r.id === lastUserMessage.id,\n );\n if (!existing) {\n targetSession.analysisResults.push({\n id: lastUserMessage.id,\n prompt: promptText,\n errorMessage: {error: TOOL_CALL_CANCELLED},\n isCompleted: true,\n });\n }\n }\n }),\n );\n return;\n }\n\n // fix any incomplete tool-calls before saving (can happen with AbortController)\n const completedMessages = fixIncompleteToolCalls(messages);\n state.ai.setSessionUiMessages(sessionId, completedMessages);\n\n store.setState((stateToUpdate: AiSliceStateForTransport) =>\n produce(stateToUpdate, (draft: AiSliceStateForTransport) => {\n const targetSession = draft.ai.config.sessions.find(\n (s: AnalysisSessionSchema) => s.id === sessionId,\n );\n if (!targetSession) return;\n\n const lastUserMessage = completedMessages\n .filter((msg) => msg.role === 'user')\n .slice(-1)[0];\n\n if (lastUserMessage) {\n const promptText = lastUserMessage.parts\n .filter((part) => part.type === 'text')\n .map((part) => (part as {text: string}).text)\n .join('');\n\n const pendingIndex = targetSession.analysisResults.findIndex(\n (result) => result.id === ANALYSIS_PENDING_ID,\n );\n\n if (pendingIndex !== -1) {\n targetSession.analysisResults[pendingIndex] = {\n id: lastUserMessage.id,\n prompt: promptText,\n isCompleted: true,\n };\n } else {\n const existingResult = targetSession.analysisResults.find(\n (result) => result.id === lastUserMessage.id,\n );\n if (!existingResult) {\n targetSession.analysisResults.push({\n id: lastUserMessage.id,\n prompt: promptText,\n isCompleted: true,\n });\n }\n }\n }\n }),\n );\n\n const shouldAutoSendNext = lastAssistantMessageIsCompleteWithToolCalls({\n messages: completedMessages,\n });\n\n const lastMessage = completedMessages[completedMessages.length - 1];\n const isLastMessageAssistant = lastMessage?.role === 'assistant';\n let tailHasTool = false;\n if (isLastMessageAssistant) {\n const parts = lastMessage?.parts ?? [];\n let lastStepStartIndex = -1;\n for (let i = parts.length - 1; i >= 0; i--) {\n if (parts[i]?.type === 'step-start') {\n lastStepStartIndex = i;\n break;\n }\n }\n const tailParts = parts.slice(lastStepStartIndex + 1);\n tailHasTool = tailParts.some(\n (part) =>\n typeof part?.type === 'string' &&\n (part.type.startsWith('tool-') || part.type === 'dynamic-tool'),\n );\n }\n\n const shouldEndAnalysis =\n (isLastMessageAssistant && !shouldAutoSendNext && !tailHasTool) ||\n (!shouldAutoSendNext && !isLastMessageAssistant);\n\n if (shouldEndAnalysis) {\n state.ai.setIsRunning(sessionId, false);\n state.ai.setAbortController(sessionId, undefined);\n }\n } catch (err) {\n console.error('onChatFinish error:', err);\n throw err;\n }\n },\n onChatError: (sessionId: string, error: unknown) => {\n try {\n let errMsg = getErrorMessageForDisplay(error);\n if (!errMsg || errMsg.trim().length === 0) {\n errMsg = 'Unknown error';\n }\n\n // Detect API key errors (401/403 or common error messages)\n const isApiKeyError = isAuthenticationError(error, errMsg);\n if (isApiKeyError) {\n const session = getSessionById(store, sessionId);\n const provider = session?.modelProvider || 'openai';\n store.getState().ai.setApiKeyError(provider, true);\n }\n\n store.setState((state: AiSliceStateForTransport) =>\n produce(state, (draft: AiSliceStateForTransport) => {\n if (!sessionId) return;\n const targetSession = draft.ai.config.sessions.find(\n (s: AnalysisSessionSchema) => s.id === sessionId,\n );\n if (targetSession) {\n // fix any incomplete tool-calls before saving (can happen with AbortController)\n const existingMessages = (targetSession.uiMessages ||\n []) as UIMessage[];\n targetSession.uiMessages = fixIncompleteToolCalls(\n existingMessages,\n ) as AnalysisSessionSchema['uiMessages'];\n\n const uiMessages = targetSession.uiMessages as UIMessage[];\n const lastUserMessage = uiMessages\n .filter((msg) => msg.role === 'user')\n .slice(-1)[0];\n\n if (lastUserMessage) {\n const promptText = lastUserMessage.parts\n .filter((part) => part.type === 'text')\n .map((part) => (part as {text: string}).text)\n .join('');\n\n const pendingIndex = targetSession.analysisResults.findIndex(\n (result) => result.id === ANALYSIS_PENDING_ID,\n );\n\n if (pendingIndex !== -1) {\n targetSession.analysisResults[pendingIndex] = {\n id: lastUserMessage.id,\n prompt: promptText,\n errorMessage: {error: errMsg},\n isCompleted: true,\n };\n } else {\n const existingResult = targetSession.analysisResults.find(\n (result) => result.id === lastUserMessage.id,\n );\n\n if (!existingResult) {\n targetSession.analysisResults.push({\n id: lastUserMessage.id,\n prompt: promptText,\n errorMessage: {error: errMsg},\n isCompleted: true,\n });\n } else {\n existingResult.errorMessage = {error: errMsg};\n }\n }\n }\n }\n }),\n );\n\n store.getState().ai.setIsRunning(sessionId, false);\n store.getState().ai.setAbortController(sessionId, undefined);\n } catch (err) {\n console.error('Failed to store chat error:', err);\n throw err;\n }\n },\n };\n}\n\n/**\n * Detects if an error is related to API key authentication issues.\n * Checks for HTTP 401/403 status codes and common error message patterns.\n */\nfunction isAuthenticationError(error: unknown, errorMessage: string): boolean {\n // Check for HTTP status codes in the error object\n if (error && typeof error === 'object') {\n const err = error as Record<string, unknown>;\n const status =\n err.status ??\n err.statusCode ??\n (err.response as Record<string, unknown>)?.status;\n if (status === 401 || status === 403) {\n return true;\n }\n }\n\n // Check for common authentication error patterns in the message\n const lowerMsg = errorMessage.toLowerCase();\n const authPatterns = [\n 'invalid api key',\n 'incorrect api key',\n 'invalid_api_key',\n 'unauthorized',\n 'authentication failed',\n 'api key is invalid',\n 'api key not found',\n 'invalid authorization',\n 'invalid credentials',\n 'access denied',\n '401',\n '403',\n ];\n\n return authPatterns.some((pattern) => lowerMsg.includes(pattern));\n}\n"]}
1
+ {"version":3,"file":"chatTransport.js","sourceRoot":"","sources":["../src/chatTransport.ts"],"names":[],"mappings":"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","sourcesContent":["import {createOpenAICompatible} from '@ai-sdk/openai-compatible';\nimport {convertToVercelAiToolV5, OpenAssistantTool} from '@openassistant/utils';\nimport type {AnalysisSessionSchema} from '@sqlrooms/ai-config';\nimport type {StoreApi} from '@sqlrooms/room-store';\nimport {getErrorMessageForDisplay} from '@sqlrooms/utils';\nimport type {DataUIPart, LanguageModel, ToolSet, UIDataTypes} from 'ai';\nimport {\n convertToModelMessages,\n DefaultChatTransport,\n lastAssistantMessageIsCompleteWithToolCalls,\n streamText,\n UIMessage,\n} from 'ai';\nimport {produce} from 'immer';\nimport {\n AI_DEFAULT_TEMPERATURE,\n ANALYSIS_PENDING_ID,\n TOOL_CALL_CANCELLED,\n} from './constants';\nimport type {AiSliceStateForTransport} from './types';\nimport {AddToolResult} from './types';\nimport {\n fixIncompleteToolCalls,\n mergeAbortSignals,\n ToolAbortError,\n} from './utils';\n\nexport type ToolCall = {\n input: string;\n toolCallId: string;\n toolName: string;\n type: 'tool-input-available';\n};\n\nexport type ChatTransportConfig = {\n sessionId: string;\n store: StoreApi<AiSliceStateForTransport>;\n defaultProvider: string;\n defaultModel: string;\n headers?: Record<string, string>;\n getInstructions: () => string;\n /**\n * Optional: supply a pre-configured custom model.\n * e.g. import {anthropic} from \"@ai-sdk/anthropic\";\n * getCustomModel: () => anthropic('claude-sonnet-4-5')\n * If provided, this model will be used instead of the default OpenAI-compatible client.\n */\n getCustomModel?: () => LanguageModel | undefined;\n};\n\n/**\n * Creates a handler for tool completion that updates the tool additional data in the store\n */\nexport function createOnToolCompletedHandler(\n store: StoreApi<AiSliceStateForTransport>,\n sessionId?: string,\n) {\n return (toolCallId: string, additionalData: unknown) => {\n // Prefer explicit sessionId if provided, otherwise attempt to resolve from toolCallId.\n const toolCallSessionId = store\n .getState()\n .ai.getToolCallSession(toolCallId);\n const resolvedSessionId =\n sessionId ||\n toolCallSessionId ||\n store.getState().ai.config.currentSessionId;\n if (!resolvedSessionId) return;\n\n store\n .getState()\n .ai.setSessionToolAdditionalData(\n resolvedSessionId,\n toolCallId,\n additionalData,\n );\n };\n}\n\nfunction getSessionById(\n store: StoreApi<AiSliceStateForTransport>,\n sessionId: string | undefined,\n): AnalysisSessionSchema | undefined {\n if (!sessionId) return undefined;\n\n const sessions = store.getState().ai.config.sessions;\n const session = sessions.find(\n (s: AnalysisSessionSchema) => s.id === sessionId,\n );\n\n if (!session) {\n return undefined;\n }\n\n if (session.id !== sessionId) {\n return undefined;\n }\n\n return session;\n}\n\n/**\n * Converts OpenAssistant tools to Vercel AI SDK tools with onToolCompleted handler\n */\nexport function convertToAiSDKTools(\n tools: Record<string, OpenAssistantTool>,\n onToolCompleted?: OpenAssistantTool['onToolCompleted'],\n): ToolSet {\n return Object.entries(tools || {}).reduce(\n (acc: ToolSet, [name, tool]: [string, OpenAssistantTool]) => {\n acc[name] = convertToVercelAiToolV5({\n ...tool,\n onToolCompleted: (toolCallId: string, additionalData: unknown) => {\n if (tool.onToolCompleted) {\n // Call the onToolCompleted handler provided by the tool if it exists\n tool.onToolCompleted(toolCallId, additionalData);\n }\n // Call the onToolCompleted handler provided by the caller if it exists\n onToolCompleted?.(toolCallId, additionalData);\n },\n });\n return acc;\n },\n {},\n );\n}\n\nexport function createLocalChatTransportFactory({\n sessionId,\n store,\n defaultProvider,\n defaultModel,\n headers,\n getInstructions,\n getCustomModel,\n}: ChatTransportConfig) {\n return () => {\n const fetchImpl = async (_input: RequestInfo | URL, init?: RequestInit) => {\n // Parse caller-supplied body defensively to avoid breaking the stream\n const body = init?.body as string;\n let parsed: unknown = {};\n try {\n parsed = body ? JSON.parse(body) : {};\n } catch {\n parsed = {};\n }\n const parsedObj = (parsed as {messages?: unknown}) || {};\n\n // Resolve provider/model/apiKey/baseUrl at call time to pick up latest settings.\n const state = store.getState();\n const sessionFromBody = getSessionById(store, sessionId);\n const provider = sessionFromBody?.modelProvider || defaultProvider;\n const modelId = sessionFromBody?.model || defaultModel;\n\n // Fetch API key and base URL dynamically to pick up settings changes\n const apiKey = state.ai.getApiKeyFromSettings();\n const baseUrl = state.ai.getBaseUrlFromSettings();\n\n // Prefer a user-supplied model if available\n let model: LanguageModel | undefined = getCustomModel?.();\n\n // Fallback to OpenAI-compatible if no custom model provided\n if (!model) {\n const openai = createOpenAICompatible({\n apiKey,\n name: provider,\n baseURL: baseUrl ?? 'https://api.openai.com/v1',\n headers,\n });\n model = openai.chatModel(modelId);\n }\n\n const messagesCopy = Array.isArray(parsedObj.messages)\n ? (parsedObj.messages as UIMessage[])\n : [];\n\n const onToolCompleted = createOnToolCompletedHandler(store, sessionId);\n const tools = convertToAiSDKTools(state.ai.tools || {}, onToolCompleted);\n // Remove execute from tools for the model call so tool invocations are\n // handled exclusively by onChatToolCall. convertToAiSDKTools is expected\n // to return fresh tool objects; if that ever changes, clone before mutate.\n Object.values(tools).forEach((tool) => {\n tool.execute = undefined;\n });\n\n // get system instructions dynamically at request time to ensure fresh table schema\n const systemInstructions = getInstructions();\n\n const providerOptions = state.ai.getProviderOptions?.({\n provider,\n modelId,\n });\n\n // Get abort controller for the owning session (from body) if available\n const sessionAbortSignal = state.ai.getAbortController(sessionId)?.signal;\n // Also respect the request-level abort signal from useChat().stop()\n const abortSignal = mergeAbortSignals([\n init?.signal ?? undefined,\n sessionAbortSignal,\n ]);\n\n const result = streamText({\n model,\n messages: convertToModelMessages(messagesCopy),\n tools,\n system: systemInstructions,\n abortSignal,\n temperature: AI_DEFAULT_TEMPERATURE,\n ...(providerOptions ? {providerOptions} : {}),\n });\n\n return result.toUIMessageStreamResponse();\n };\n\n return new DefaultChatTransport({fetch: fetchImpl});\n };\n}\n\nexport function createRemoteChatTransportFactory(params: {\n store: StoreApi<AiSliceStateForTransport>;\n defaultProvider: string;\n defaultModel: string;\n sessionId: string;\n}) {\n return (endpoint: string, headers?: Record<string, string>) => {\n const fetchImpl = async (input: RequestInfo | URL, init?: RequestInit) => {\n const {store, defaultProvider, defaultModel, sessionId} = params;\n // Get current session's model and provider at request time\n const state = store.getState();\n\n // Parse the existing body and add model information (defensive parsing)\n const body = init?.body as string;\n let parsed: unknown = {};\n try {\n parsed = body ? JSON.parse(body) : {};\n } catch {\n parsed = {};\n }\n\n const sessionFromBody = getSessionById(store, sessionId);\n const modelProvider = sessionFromBody?.modelProvider || defaultProvider;\n const model = sessionFromBody?.model || defaultModel;\n\n const parsedObj =\n typeof parsed === 'object' && parsed !== null\n ? (parsed as Record<string, unknown>)\n : {};\n const enhancedBody = {\n ...parsedObj,\n modelProvider,\n model,\n };\n\n // Merge request abort (useChat.stop) with per-session abort (cancelAnalysis)\n const sessionAbortSignal = state.ai.getAbortController(sessionId)?.signal;\n const abortSignal = mergeAbortSignals([\n init?.signal ?? undefined,\n sessionAbortSignal,\n ]);\n\n // Make the request with enhanced body\n return fetch(input, {\n ...init,\n signal: abortSignal,\n body: JSON.stringify(enhancedBody),\n });\n };\n\n return new DefaultChatTransport({\n api: endpoint,\n credentials: 'include',\n headers,\n fetch: fetchImpl,\n });\n };\n}\n\nexport function createChatHandlers({\n store,\n}: {\n store: StoreApi<AiSliceStateForTransport>;\n}) {\n return {\n onChatToolCall: async ({\n sessionId,\n toolCall,\n addToolResult,\n }: {\n sessionId: string;\n toolCall: ToolCall;\n addToolResult?: AddToolResult;\n }) => {\n const {input, toolCallId, toolName} = toolCall;\n try {\n const state = store.getState();\n const session = getSessionById(store, sessionId);\n state.ai.setToolCallSession(toolCallId, sessionId);\n\n const abortController = sessionId\n ? state.ai.getAbortController(sessionId)\n : undefined;\n if (abortController?.signal.aborted) {\n addToolResult?.({\n tool: toolName,\n toolCallId,\n state: 'output-error',\n errorText: TOOL_CALL_CANCELLED,\n });\n return;\n }\n\n const onToolCompleted = createOnToolCompletedHandler(store, sessionId);\n const tools = convertToAiSDKTools(\n state.ai.tools || {},\n onToolCompleted,\n );\n\n const tool = tools[toolName];\n if (tool && state.ai.tools[toolName]?.execute && tool.execute) {\n const sessionMessages = (session?.uiMessages ?? []) as UIMessage[];\n const llmResult = await tool.execute(input, {\n toolCallId,\n messages: convertToModelMessages(sessionMessages),\n abortSignal: abortController?.signal,\n });\n\n addToolResult?.({\n tool: toolName,\n toolCallId,\n output: llmResult,\n });\n state.ai.setToolCallSession(toolCallId, undefined);\n } else {\n // Tool has no execute function - wait for UI component to call addToolResult\n const hasToolComponent = !!state.ai.findToolComponent(toolName);\n if (hasToolComponent && state.ai.waitForToolResult) {\n try {\n await state.ai.waitForToolResult(\n sessionId,\n toolCallId,\n abortController?.signal,\n );\n state.ai.setToolCallSession(toolCallId, undefined);\n } catch (error) {\n if (addToolResult && error instanceof Error) {\n addToolResult({\n tool: toolName,\n toolCallId,\n state: 'output-error',\n errorText: error.message,\n });\n }\n throw error;\n }\n }\n }\n // If no ToolComponent, we still return (no-op) - the UI won't render anything\n // and the tool call will remain incomplete, which is fine for error handling\n } catch (error) {\n const isAbortError = error instanceof ToolAbortError;\n addToolResult?.({\n tool: toolName,\n toolCallId,\n state: 'output-error',\n errorText: isAbortError\n ? TOOL_CALL_CANCELLED\n : getErrorMessageForDisplay(error),\n });\n // ensure mapping cleared on error too\n store.getState().ai.setToolCallSession(toolCallId, undefined);\n }\n },\n onChatData: (sessionId: string, dataPart: DataUIPart<UIDataTypes>) => {\n if (\n dataPart.type === 'data-tool-additional-output' &&\n dataPart.data &&\n (dataPart.data as {toolCallId?: unknown}).toolCallId != null\n ) {\n const {toolCallId, output} = dataPart.data as {\n toolCallId: string;\n output: unknown;\n };\n if (sessionId) {\n store\n .getState()\n .ai.setSessionToolAdditionalData(sessionId, toolCallId, output);\n }\n }\n },\n onChatFinish: ({\n sessionId,\n messages,\n }: {\n sessionId: string;\n messages: UIMessage[];\n }) => {\n if (!sessionId) return;\n try {\n const state = store.getState();\n const abortController = state.ai.getAbortController(sessionId);\n\n // check if the analysis has been aborted, force-complete and clean up immediately\n const aborted = !!abortController?.signal.aborted;\n if (aborted) {\n const sessionMessages =\n (getSessionById(store, sessionId)?.uiMessages as UIMessage[]) || [];\n const sourceMessages =\n messages && messages.length > 0 ? messages : sessionMessages;\n const completedMessages = fixIncompleteToolCalls(sourceMessages);\n state.ai.setSessionUiMessages(sessionId, completedMessages);\n\n state.ai.setIsRunning(sessionId, false);\n state.ai.setAbortController(sessionId, undefined);\n\n // Ensure an analysis result exists and is marked as cancelled\n store.setState((stateToUpdate: AiSliceStateForTransport) =>\n produce(stateToUpdate, (draft: AiSliceStateForTransport) => {\n const targetSession = draft.ai.config.sessions.find(\n (s: AnalysisSessionSchema) => s.id === sessionId,\n );\n if (!targetSession) return;\n\n const lastUserMessage = completedMessages\n .filter((msg) => msg.role === 'user')\n .slice(-1)[0];\n if (!lastUserMessage) return;\n\n const promptText = lastUserMessage.parts\n .filter((part) => part.type === 'text')\n .map((part) => (part as {text: string}).text)\n .join('');\n\n const pendingIndex = targetSession.analysisResults.findIndex(\n (result) => result.id === ANALYSIS_PENDING_ID,\n );\n\n if (pendingIndex !== -1) {\n targetSession.analysisResults[pendingIndex] = {\n id: lastUserMessage.id,\n prompt: promptText,\n errorMessage: {error: TOOL_CALL_CANCELLED},\n isCompleted: true,\n };\n } else {\n const existing = targetSession.analysisResults.find(\n (r) => r.id === lastUserMessage.id,\n );\n if (!existing) {\n targetSession.analysisResults.push({\n id: lastUserMessage.id,\n prompt: promptText,\n errorMessage: {error: TOOL_CALL_CANCELLED},\n isCompleted: true,\n });\n }\n }\n }),\n );\n return;\n }\n\n // fix any incomplete tool-calls before saving (can happen with AbortController)\n const completedMessages = fixIncompleteToolCalls(messages);\n state.ai.setSessionUiMessages(sessionId, completedMessages);\n\n store.setState((stateToUpdate: AiSliceStateForTransport) =>\n produce(stateToUpdate, (draft: AiSliceStateForTransport) => {\n const targetSession = draft.ai.config.sessions.find(\n (s: AnalysisSessionSchema) => s.id === sessionId,\n );\n if (!targetSession) return;\n\n const lastUserMessage = completedMessages\n .filter((msg) => msg.role === 'user')\n .slice(-1)[0];\n\n if (lastUserMessage) {\n const promptText = lastUserMessage.parts\n .filter((part) => part.type === 'text')\n .map((part) => (part as {text: string}).text)\n .join('');\n\n const pendingIndex = targetSession.analysisResults.findIndex(\n (result) => result.id === ANALYSIS_PENDING_ID,\n );\n\n if (pendingIndex !== -1) {\n targetSession.analysisResults[pendingIndex] = {\n id: lastUserMessage.id,\n prompt: promptText,\n isCompleted: true,\n };\n } else {\n const existingResult = targetSession.analysisResults.find(\n (result) => result.id === lastUserMessage.id,\n );\n if (!existingResult) {\n targetSession.analysisResults.push({\n id: lastUserMessage.id,\n prompt: promptText,\n isCompleted: true,\n });\n }\n }\n }\n }),\n );\n\n const shouldAutoSendNext = lastAssistantMessageIsCompleteWithToolCalls({\n messages: completedMessages,\n });\n\n const lastMessage = completedMessages[completedMessages.length - 1];\n const isLastMessageAssistant = lastMessage?.role === 'assistant';\n let tailHasTool = false;\n if (isLastMessageAssistant) {\n const parts = lastMessage?.parts ?? [];\n let lastStepStartIndex = -1;\n for (let i = parts.length - 1; i >= 0; i--) {\n if (parts[i]?.type === 'step-start') {\n lastStepStartIndex = i;\n break;\n }\n }\n const tailParts = parts.slice(lastStepStartIndex + 1);\n tailHasTool = tailParts.some(\n (part) =>\n typeof part?.type === 'string' &&\n (part.type.startsWith('tool-') || part.type === 'dynamic-tool'),\n );\n }\n\n const shouldEndAnalysis =\n (isLastMessageAssistant && !shouldAutoSendNext && !tailHasTool) ||\n (!shouldAutoSendNext && !isLastMessageAssistant);\n\n if (shouldEndAnalysis) {\n state.ai.setIsRunning(sessionId, false);\n state.ai.setAbortController(sessionId, undefined);\n }\n } catch (err) {\n console.error('onChatFinish error:', err);\n throw err;\n }\n },\n onChatError: (sessionId: string, error: unknown) => {\n try {\n let errMsg = getErrorMessageForDisplay(error);\n if (!errMsg || errMsg.trim().length === 0) {\n errMsg = 'Unknown error';\n }\n\n // Detect API key errors (401/403 or common error messages)\n const isApiKeyError = isAuthenticationError(error, errMsg);\n if (isApiKeyError) {\n const session = getSessionById(store, sessionId);\n const provider = session?.modelProvider || 'openai';\n store.getState().ai.setApiKeyError(provider, true);\n }\n\n store.setState((state: AiSliceStateForTransport) =>\n produce(state, (draft: AiSliceStateForTransport) => {\n if (!sessionId) return;\n const targetSession = draft.ai.config.sessions.find(\n (s: AnalysisSessionSchema) => s.id === sessionId,\n );\n if (targetSession) {\n // fix any incomplete tool-calls before saving (can happen with AbortController)\n const existingMessages = (targetSession.uiMessages ||\n []) as UIMessage[];\n targetSession.uiMessages = fixIncompleteToolCalls(\n existingMessages,\n ) as AnalysisSessionSchema['uiMessages'];\n\n const uiMessages = targetSession.uiMessages as UIMessage[];\n const lastUserMessage = uiMessages\n .filter((msg) => msg.role === 'user')\n .slice(-1)[0];\n\n if (lastUserMessage) {\n const promptText = lastUserMessage.parts\n .filter((part) => part.type === 'text')\n .map((part) => (part as {text: string}).text)\n .join('');\n\n const pendingIndex = targetSession.analysisResults.findIndex(\n (result) => result.id === ANALYSIS_PENDING_ID,\n );\n\n if (pendingIndex !== -1) {\n targetSession.analysisResults[pendingIndex] = {\n id: lastUserMessage.id,\n prompt: promptText,\n errorMessage: {error: errMsg},\n isCompleted: true,\n };\n } else {\n const existingResult = targetSession.analysisResults.find(\n (result) => result.id === lastUserMessage.id,\n );\n\n if (!existingResult) {\n targetSession.analysisResults.push({\n id: lastUserMessage.id,\n prompt: promptText,\n errorMessage: {error: errMsg},\n isCompleted: true,\n });\n } else {\n existingResult.errorMessage = {error: errMsg};\n }\n }\n }\n }\n }),\n );\n\n store.getState().ai.setIsRunning(sessionId, false);\n store.getState().ai.setAbortController(sessionId, undefined);\n } catch (err) {\n console.error('Failed to store chat error:', err);\n throw err;\n }\n },\n };\n}\n\n/**\n * Detects if an error is related to API key authentication issues.\n * Checks for HTTP 401/403 status codes and common error message patterns.\n */\nfunction isAuthenticationError(error: unknown, errorMessage: string): boolean {\n // Check for HTTP status codes in the error object\n if (error && typeof error === 'object') {\n const err = error as Record<string, unknown>;\n const status =\n err.status ??\n err.statusCode ??\n (err.response as Record<string, unknown>)?.status;\n if (status === 401 || status === 403) {\n return true;\n }\n }\n\n // Check for common authentication error patterns in the message\n const lowerMsg = errorMessage.toLowerCase();\n const authPatterns = [\n 'invalid api key',\n 'incorrect api key',\n 'invalid_api_key',\n 'unauthorized',\n 'authentication failed',\n 'api key is invalid',\n 'api key not found',\n 'invalid authorization',\n 'invalid credentials',\n 'access denied',\n '401',\n '403',\n ];\n\n return authPatterns.some((pattern) => lowerMsg.includes(pattern));\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ToolErrorMessage.d.ts","sourceRoot":"","sources":["../../../src/components/tools/ToolErrorMessage.tsx"],"names":[],"mappings":"AA6EA,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,OAAO,EACP,KAAyB,EACzB,YAAsC,EACtC,KAAe,EACf,cAAoB,GACrB,EAAE,qBAAqB,2CAiCvB"}
1
+ {"version":3,"file":"ToolErrorMessage.d.ts","sourceRoot":"","sources":["../../../src/components/tools/ToolErrorMessage.tsx"],"names":[],"mappings":"AAmFA,MAAM,WAAW,qBAAqB;IACpC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,OAAO,EACP,KAAyB,EACzB,YAAsC,EACtC,KAAe,EACf,cAAoB,GACrB,EAAE,qBAAqB,2CAiCvB"}
@@ -3,15 +3,16 @@ import { JsonMonacoEditor } from '@sqlrooms/monaco-editor';
3
3
  import { Button, Popover, PopoverContent, PopoverTrigger, Tabs, TabsContent, TabsList, TabsTrigger, useDisclosure, } from '@sqlrooms/ui';
4
4
  import { TriangleAlertIcon } from 'lucide-react';
5
5
  import { memo, useMemo } from 'react';
6
- const ToolErrorMessageContent = memo(({ title, errorText, details, editorHeightPx }) => {
6
+ const ToolErrorMessageContent = memo(({ title, errorText, details, editorHeightPx, }) => {
7
7
  const hasErrorText = errorText.length > 0;
8
8
  const hasDetails = details != null;
9
9
  const defaultTab = hasErrorText ? 'error' : 'details';
10
- return (_jsxs(Tabs, { defaultValue: defaultTab, children: [_jsxs(TabsList, { className: "mb-2 h-8 gap-1", children: [hasErrorText && (_jsx(TabsTrigger, { value: "error", className: "h-6 px-2 text-xs", children: title })), hasDetails && (_jsx(TabsTrigger, { value: "details", className: "h-6 px-2 text-xs", children: "Details" }))] }), _jsx(TabsContent, { value: "error", className: "mt-0", children: _jsx("div", { className: "max-h-[300px] overflow-auto whitespace-pre-wrap font-mono text-xs", children: errorText }) }), _jsx(TabsContent, { value: "details", className: "mt-0", children: _jsx("div", { className: "w-full overflow-hidden rounded-md border", style: { height: editorHeightPx }, children: _jsx(JsonMonacoEditor, { className: "h-full", value: details, readOnly: true, options: {
10
+ return (_jsxs(Tabs, { defaultValue: defaultTab, children: [_jsxs(TabsList, { className: "mb-2 h-8 gap-1", children: [hasErrorText && (_jsx(TabsTrigger, { value: "error", className: "h-6 px-2 text-xs", children: title })), hasDetails && (_jsx(TabsTrigger, { value: "details", className: "h-6 px-2 text-xs", children: "Details" }))] }), _jsx(TabsContent, { value: "error", className: "mt-0", children: _jsx("div", { className: "max-h-[300px] overflow-auto font-mono text-xs whitespace-pre-wrap", children: errorText }) }), _jsx(TabsContent, { value: "details", className: "mt-0", children: _jsx("div", { className: "w-full overflow-hidden rounded-md border", style: { height: editorHeightPx }, children: _jsx(JsonMonacoEditor, { className: "h-full", value: details, readOnly: true, options: {
11
11
  lineNumbers: 'off',
12
12
  minimap: { enabled: false },
13
13
  scrollBeyondLastLine: false,
14
14
  wordWrap: 'on',
15
+ fixedOverflowWidgets: false,
15
16
  } }) }) })] }));
16
17
  });
17
18
  ToolErrorMessageContent.displayName = 'ToolErrorMessageContent';
@@ -1 +1 @@
1
- {"version":3,"file":"ToolErrorMessage.js","sourceRoot":"","sources":["../../../src/components/tools/ToolErrorMessage.tsx"],"names":[],"mappings":"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","sourcesContent":["import { JsonMonacoEditor } from '@sqlrooms/monaco-editor';\nimport {\n Button,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n useDisclosure,\n} from '@sqlrooms/ui';\nimport { TriangleAlertIcon } from 'lucide-react';\nimport React, { memo, useMemo } from 'react';\n\ntype TabKey = 'error' | 'details';\n\ninterface ToolErrorMessageContentProps {\n title: string;\n errorText: string;\n details?: string | object;\n editorHeightPx: number;\n}\n\nconst ToolErrorMessageContent = memo(\n ({ title, errorText, details, editorHeightPx }: ToolErrorMessageContentProps) => {\n const hasErrorText = errorText.length > 0;\n const hasDetails = details != null;\n\n const defaultTab: TabKey = hasErrorText ? 'error' : 'details';\n\n return (\n <Tabs defaultValue={defaultTab}>\n <TabsList className=\"mb-2 h-8 gap-1\">\n {hasErrorText && (\n <TabsTrigger value=\"error\" className=\"h-6 px-2 text-xs\">\n {title}\n </TabsTrigger>\n )}\n {hasDetails && (\n <TabsTrigger value=\"details\" className=\"h-6 px-2 text-xs\">\n Details\n </TabsTrigger>\n )}\n </TabsList>\n\n <TabsContent value=\"error\" className=\"mt-0\">\n <div className=\"max-h-[300px] overflow-auto whitespace-pre-wrap font-mono text-xs\">\n {errorText}\n </div>\n </TabsContent>\n\n <TabsContent value=\"details\" className=\"mt-0\">\n <div\n className=\"w-full overflow-hidden rounded-md border\"\n style={{ height: editorHeightPx }}\n >\n <JsonMonacoEditor\n className=\"h-full\"\n value={details}\n readOnly\n options={{\n lineNumbers: 'off',\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n wordWrap: 'on',\n }}\n />\n </div>\n </TabsContent>\n </Tabs>\n );\n }\n);\n\nToolErrorMessageContent.displayName = 'ToolErrorMessageContent';\n\nexport interface ToolErrorMessageProps {\n error?: unknown;\n details?: string | object;\n title?: string;\n triggerLabel?: string;\n align?: 'start' | 'center' | 'end';\n editorHeightPx?: number;\n}\n\nexport function ToolErrorMessage({\n error,\n details,\n title = 'Tool call error',\n triggerLabel = 'Tool rendering failed',\n align = 'start',\n editorHeightPx = 300,\n}: ToolErrorMessageProps) {\n const popover = useDisclosure();\n\n const errorText = useMemo(\n () => (error != null ? String(error) : ''),\n [error]\n );\n\n return (\n <Popover open={popover.isOpen} onOpenChange={popover.onToggle}>\n <PopoverTrigger asChild>\n <Button\n className=\"w-fit\"\n variant=\"ghost\"\n size=\"xs\"\n aria-label={triggerLabel}\n >\n <TriangleAlertIcon />\n </Button>\n </PopoverTrigger>\n\n {popover.isOpen && (\n <PopoverContent align={align} className=\"w-[600px] max-w-[80vw]\">\n <ToolErrorMessageContent\n title={title}\n errorText={errorText}\n details={details}\n editorHeightPx={editorHeightPx}\n />\n </PopoverContent>\n )}\n </Popover>\n );\n}\n"]}
1
+ {"version":3,"file":"ToolErrorMessage.js","sourceRoot":"","sources":["../../../src/components/tools/ToolErrorMessage.tsx"],"names":[],"mappings":"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","sourcesContent":["import {JsonMonacoEditor} from '@sqlrooms/monaco-editor';\nimport {\n Button,\n Popover,\n PopoverContent,\n PopoverTrigger,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n useDisclosure,\n} from '@sqlrooms/ui';\nimport {TriangleAlertIcon} from 'lucide-react';\nimport {memo, useMemo} from 'react';\n\ntype TabKey = 'error' | 'details';\n\ninterface ToolErrorMessageContentProps {\n title: string;\n errorText: string;\n details?: string | object;\n editorHeightPx: number;\n}\n\nconst ToolErrorMessageContent = memo(\n ({\n title,\n errorText,\n details,\n editorHeightPx,\n }: ToolErrorMessageContentProps) => {\n const hasErrorText = errorText.length > 0;\n const hasDetails = details != null;\n\n const defaultTab: TabKey = hasErrorText ? 'error' : 'details';\n\n return (\n <Tabs defaultValue={defaultTab}>\n <TabsList className=\"mb-2 h-8 gap-1\">\n {hasErrorText && (\n <TabsTrigger value=\"error\" className=\"h-6 px-2 text-xs\">\n {title}\n </TabsTrigger>\n )}\n {hasDetails && (\n <TabsTrigger value=\"details\" className=\"h-6 px-2 text-xs\">\n Details\n </TabsTrigger>\n )}\n </TabsList>\n\n <TabsContent value=\"error\" className=\"mt-0\">\n <div className=\"max-h-[300px] overflow-auto font-mono text-xs whitespace-pre-wrap\">\n {errorText}\n </div>\n </TabsContent>\n\n <TabsContent value=\"details\" className=\"mt-0\">\n <div\n className=\"w-full overflow-hidden rounded-md border\"\n style={{height: editorHeightPx}}\n >\n <JsonMonacoEditor\n className=\"h-full\"\n value={details}\n readOnly\n options={{\n lineNumbers: 'off',\n minimap: {enabled: false},\n scrollBeyondLastLine: false,\n wordWrap: 'on',\n fixedOverflowWidgets: false,\n }}\n />\n </div>\n </TabsContent>\n </Tabs>\n );\n },\n);\n\nToolErrorMessageContent.displayName = 'ToolErrorMessageContent';\n\nexport interface ToolErrorMessageProps {\n error?: unknown;\n details?: string | object;\n title?: string;\n triggerLabel?: string;\n align?: 'start' | 'center' | 'end';\n editorHeightPx?: number;\n}\n\nexport function ToolErrorMessage({\n error,\n details,\n title = 'Tool call error',\n triggerLabel = 'Tool rendering failed',\n align = 'start',\n editorHeightPx = 300,\n}: ToolErrorMessageProps) {\n const popover = useDisclosure();\n\n const errorText = useMemo(\n () => (error != null ? String(error) : ''),\n [error],\n );\n\n return (\n <Popover open={popover.isOpen} onOpenChange={popover.onToggle}>\n <PopoverTrigger asChild>\n <Button\n className=\"w-fit\"\n variant=\"ghost\"\n size=\"xs\"\n aria-label={triggerLabel}\n >\n <TriangleAlertIcon />\n </Button>\n </PopoverTrigger>\n\n {popover.isOpen && (\n <PopoverContent align={align} className=\"w-[600px] max-w-[80vw]\">\n <ToolErrorMessageContent\n title={title}\n errorText={errorText}\n details={details}\n editorHeightPx={editorHeightPx}\n />\n </PopoverContent>\n )}\n </Popover>\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sqlrooms/ai-core",
3
- "version": "0.28.0-rc.0",
3
+ "version": "0.28.0",
4
4
  "main": "dist/index.js",
5
5
  "types": "dist/index.d.ts",
6
6
  "module": "dist/index.js",
@@ -23,11 +23,11 @@
23
23
  "@ai-sdk/react": "^2.0.44",
24
24
  "@openassistant/utils": "1.0.0-alpha.0",
25
25
  "@paralleldrive/cuid2": "^3.0.0",
26
- "@sqlrooms/ai-config": "0.28.0-rc.0",
27
- "@sqlrooms/monaco-editor": "0.28.0-rc.0",
28
- "@sqlrooms/room-store": "0.28.0-rc.0",
29
- "@sqlrooms/ui": "0.28.0-rc.0",
30
- "@sqlrooms/utils": "0.28.0-rc.0",
26
+ "@sqlrooms/ai-config": "0.28.0",
27
+ "@sqlrooms/monaco-editor": "0.28.0",
28
+ "@sqlrooms/room-store": "0.28.0",
29
+ "@sqlrooms/ui": "0.28.0",
30
+ "@sqlrooms/utils": "0.28.0",
31
31
  "ai": "^5.0.44",
32
32
  "immer": "^11.0.1",
33
33
  "lucide-react": "^0.556.0",
@@ -47,5 +47,5 @@
47
47
  "typecheck": "tsc --noEmit",
48
48
  "typedoc": "typedoc"
49
49
  },
50
- "gitHead": "87a478edbff690e04c38cc717db8e11e844565c8"
50
+ "gitHead": "dcac54f8adf77240e293c93d224a0ce9fd8142a9"
51
51
  }