@bikdotai/bik-component-library 0.0.720-beta.5 → 0.0.720-beta.7

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
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../_virtual/_tslib.js"),s=require("../../../node_modules/react/jsx-runtime.js"),t=require("react"),o=require("../services/callToChatbot.js"),r=require("../services/useAIChat.js"),n=require("../types/ai.js");const i=t.createContext(null);exports.AIProvider=a=>{let{children:u,systemPrompt:l,systemId:d,functions:c,tools:m,functionHandler:p,onMessageReceived:v,displayInUI:f,maxToolCalls:x,maxTokens:A,requestExecutor:E,baseUrl:g,endpointPath:I,responseFormat:y,conversationId:h="default-session",customModel:C,onSystemReady:L}=a;const[q,j]=t.useState(null),[P,_]=t.useState(!0),[b,M]=t.useState(null),w=t.useRef(null);t.useEffect((()=>l?E&&g?void M(null):(M("Chatbot authentication not configured: RequestExecutor and baseUrl are required"),void _(!1)):(M("systemPrompt is required for generic mode"),void _(!1))),[l,E,g]);const D=t.useCallback((()=>e.__awaiter(void 0,void 0,void 0,(function*(){try{_(!0),M(null);const e=C||n.DEFAULT_MODEL;if(!n.ALLOWED_MODELS.includes(e))throw new Error(`Unsupported model: ${C||"default"}. Allowed models are: ${n.ALLOWED_MODELS.join(", ")}`);j({id:d||"generic",name:d?`${d} `:"Generic AI Assistant",model:e,systemPrompt:l,functions:c,tools:m})}catch(e){const s=(null==e?void 0:e.message)||"Failed to create AI system";M(s)}finally{_(!1)}}))),[C,l,d,c]);t.useEffect((()=>{l&&D()}),[D]),t.useEffect((()=>{q&&L&&q.id!==w.current&&(w.current=q.id,L(q)),q||(w.current=null)}),[q]);const{messages:O,conversation:R,sendMessage:T,isApiCallInProgress:U}=r.useAIChat({system:q||{id:"loading",name:"Loading...",model:n.DEFAULT_MODEL,systemPrompt:"Loading...",functions:[]},conversationId:h,skipInitialization:!q,customFunctions:c,functionHandler:p,responseFormat:y,onMessageReceived:v,displayInUI:f,maxToolCalls:x,maxTokens:A,apiAdapter:E&&g?o.createExecutorApiAdapter(E,g,I||void 0):()=>{throw new Error("Chatbot authentication not configured: RequestExecutor is required")}}),F={isReady:!!q&&!P,isLoading:P,isApiCallInProgress:U,system:q,messages:O,conversation:R,sendMessage:T,error:b};return s.jsxRuntimeExports.jsx(i.Provider,Object.assign({value:F},{children:u}))},exports.useAIContext=()=>{const e=t.useContext(i);if(!e)throw new Error("useAIContext must be used within an AIProvider");return e};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../../_virtual/_tslib.js"),s=require("../../../node_modules/react/jsx-runtime.js"),t=require("react"),o=require("../services/callToChatbot.js"),n=require("../services/useAIChat.js"),r=require("../types/ai.js");const i=t.createContext(null);exports.AIProvider=a=>{let{children:u,systemPrompt:l,systemId:d,functions:c,tools:m,functionHandler:p,onMessageReceived:v,displayInUI:I,maxToolCalls:f,maxTokens:g,requestExecutor:y,baseUrl:A,endpointPath:x,responseFormat:E,conversationId:h="default-session",customModel:C,onSystemReady:L}=a;const[q,P]=t.useState(null),[j,M]=t.useState(!0),[_,b]=t.useState(null),w=t.useRef(null);t.useEffect((()=>l?y&&A?void b(null):(b("Chatbot authentication not configured: RequestExecutor and baseUrl are required"),void M(!1)):(b("systemPrompt is required for generic mode"),void M(!1))),[l,y,A]);const D=t.useCallback((()=>e.__awaiter(void 0,void 0,void 0,(function*(){try{M(!0),b(null);const e=C||r.DEFAULT_MODEL;if(!r.ALLOWED_MODELS.includes(e))throw new Error(`Unsupported model: ${C||"default"}. Allowed models are: ${r.ALLOWED_MODELS.join(", ")}`);P({id:d||"generic",name:d?`${d} `:"Generic AI Assistant",model:e,systemPrompt:l,functions:c,tools:m})}catch(e){const s=(null==e?void 0:e.message)||"Failed to create AI system";b(s)}finally{M(!1)}}))),[C,l,d,c]);t.useEffect((()=>{l&&D()}),[D]),t.useEffect((()=>{q&&L&&q.id!==w.current&&(w.current=q.id,L(q)),q||(w.current=null)}),[q]),console.log("🏗️ [AIProvider] Rendering:",{conversationId:h,displayInUI:I,hasSystem:!!q,systemId:(null==q?void 0:q.id)||"loading",skipInitialization:!q,timestamp:(new Date).toISOString()});const O=t.useMemo((()=>({id:"loading",name:"Loading...",model:r.DEFAULT_MODEL,systemPrompt:"Loading...",functions:[]})),[]),{messages:R,conversation:S,sendMessage:U,isApiCallInProgress:T}=n.useAIChat({system:q||O,conversationId:h,skipInitialization:!q,customFunctions:c,functionHandler:p,responseFormat:E,onMessageReceived:v,displayInUI:I,maxToolCalls:f,maxTokens:g,apiAdapter:y&&A?o.createExecutorApiAdapter(y,A,x||void 0):()=>{throw new Error("Chatbot authentication not configured: RequestExecutor is required")}}),F={isReady:!!q&&!j,isLoading:j,isApiCallInProgress:T,system:q,messages:R,conversation:S,sendMessage:U,error:_};return s.jsxRuntimeExports.jsx(i.Provider,Object.assign({value:F},{children:u}))},exports.useAIContext=()=>{const e=t.useContext(i);if(!e)throw new Error("useAIContext must be used within an AIProvider");return e};
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var s=require("../../../_virtual/_tslib.js"),e=require("react"),t=require("../types/chat.js"),a=require("./aiService.js"),n=require("./db.js");exports.useAIChat=function(o){var i=this;let{system:l,conversationId:g,skipInitialization:d=!1,customFunctions:r,functionHandler:c,responseFormat:u,onMessageReceived:I,displayInUI:m,maxToolCalls:p,maxTokens:h,apiAdapter:v}=o;const[b,j]=e.useState((()=>t.createSessionRecord(g))),[A,O]=e.useState([]),[C,f]=e.useState(),[y,S]=e.useState(!1);e.useEffect((()=>{console.log(`🔄 [useAIChat] Loading session for conversationId: ${g}, displayInUI: ${m}`),n.loadSession(g).then((s=>{var e,t;if(s){if(console.log("📁 [useAIChat] Session loaded:",{sessionId:s.sessionId,totalMessages:s.messages.length,messageRoles:s.messages.map((s=>s.role)),lastResponseId:null===(e=s.metadata)||void 0===e?void 0:e.lastResponseId}),j(s),m)console.log(`👁️ [useAIChat] displayInUI=true - Loading ALL ${s.messages.length} messages to UI`),O(s.messages);else{const e=s.messages.filter((s=>"user"===s.role));console.log(`🔇 [useAIChat] displayInUI=false - Loading only ${e.length} user messages to UI (${s.messages.length} total in session)`),O(e)}f(null===(t=s.metadata)||void 0===t?void 0:t.lastResponseId)}else console.log(`📁 [useAIChat] No existing session found for conversationId: ${g}`)}))}),[g,m]);const w=e.useMemo((()=>d?null:new a.AIService({system:Object.assign(Object.assign({},l),{handleCallback:(s,e)=>{var t;null===(t=l.handleCallback)||void 0===t||t.call(l,s,e)}}),dispatchMessage:s=>{console.log("💬 [useAIChat] dispatchMessage called:",{messageId:s.id,role:s.role,content:s.content.substring(0,100)+(s.content.length>100?"...":""),displayInUI:m}),j((e=>{const t=Object.assign(Object.assign({},e),{updatedAt:Date.now(),messages:[...e.messages,s]});return console.log(`💾 [useAIChat] Saving message to session - Total messages now: ${t.messages.length}`),n.saveSession(t.sessionId,Object.assign(Object.assign({},t),{metadata:Object.assign(Object.assign({},t.metadata||{}),{lastResponseId:C})})),t})),m?(console.log("👁️ [useAIChat] displayInUI=true - Adding message to UI state"),O((e=>[...e,s]))):console.log("🔇 [useAIChat] displayInUI=false - Message saved to session but NOT added to UI state")},customFunctions:r,functionHandler:c,responseFormat:u,onMessageReceived:I,displayInUI:m,maxToolCalls:p,maxTokens:h,apiAdapter:v})),[l.id,d,h]);return{messages:A,conversation:b,sendMessage:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"default";return s.__awaiter(i,void 0,void 0,(function*(){if(!w)return void console.warn("⚠️ [useAIChat] sendMessage called but service is null");const s={id:`u-${Date.now()}`,role:"user",content:e,timestamp:Date.now()};console.log("📤 [useAIChat] Sending user message:",{messageId:s.id,content:e.substring(0,100)+(e.length>100?"...":""),conversationId:g,displayInUI:m,currentMessagesCount:A.length,currentLastResponseId:C}),O((e=>(console.log(`📝 [useAIChat] Adding user message to UI - Previous count: ${e.length}, New count: ${e.length+1}`),[...e,s]))),j((e=>{var t;console.log("🔄 [useAIChat] Current conversation state before update:",{sessionId:e.sessionId,currentMessageCount:e.messages.length,lastMessage:(null===(t=e.messages[e.messages.length-1])||void 0===t?void 0:t.role)||"none"});const a=Object.assign(Object.assign({},e),{updatedAt:Date.now(),messages:[...e.messages,s]});return console.log(`💾 [useAIChat] Saving user message to session - Previous: ${e.messages.length}, New total: ${a.messages.length}`),console.log("🔍 [useAIChat] Session update details:",{sessionId:a.sessionId,messageCount:a.messages.length,lastResponseId:C,hasMetadata:!!a.metadata}),n.saveSession(a.sessionId,Object.assign(Object.assign({},a),{metadata:Object.assign(Object.assign({},a.metadata||{}),{lastResponseId:C})})),a})),S(!0);try{const e=yield w.generate([...A,s].map((s=>({role:s.role,content:s.content}))),g,t,C);(null==e?void 0:e.responseId)&&(f(e.responseId),j((s=>{const t=Object.assign(Object.assign({},s),{metadata:Object.assign(Object.assign({},s.metadata||{}),{lastResponseId:e.responseId})});return n.saveSession(t.sessionId,t),t})))}catch(s){const e=(null==s?void 0:s.message)||"Something went wrong. Please try again.",t={id:`err-${Date.now()}`,role:"system",content:e,timestamp:Date.now()};O((s=>[...s,t])),j((s=>{const e=Object.assign(Object.assign({},s),{updatedAt:Date.now(),messages:[...s.messages,t]});return n.saveSession(e.sessionId,Object.assign(Object.assign({},e),{metadata:Object.assign(Object.assign({},e.metadata||{}),{lastResponseId:C})})),e}))}finally{S(!1)}}))},isApiCallInProgress:y}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var s=require("../../../_virtual/_tslib.js"),e=require("react"),t=require("../types/chat.js"),a=require("./aiService.js"),n=require("./db.js");exports.useAIChat=function(o){var l=this;let{system:i,conversationId:g,skipInitialization:d=!1,customFunctions:r,functionHandler:c,responseFormat:u,onMessageReceived:I,displayInUI:m,maxToolCalls:h,maxTokens:p,apiAdapter:v}=o;const[C,b]=e.useState((()=>t.createSessionRecord(g))),[A,f]=e.useState([]),[j,O]=e.useState(),[y,S]=e.useState(!1);console.log("🔄 [useAIChat] Hook render:",{conversationId:g,displayInUI:m,messagesCount:A.length,conversationMessagesCount:C.messages.length,lastResponseId:j,timestamp:(new Date).toISOString()}),e.useEffect((()=>{console.log("🚀 [useAIChat] useEffect TRIGGERED for session loading:",{conversationId:g,displayInUI:m,currentMessages:A.length,currentConversationMessages:C.messages.length,currentLastResponseId:j});(()=>{s.__awaiter(this,void 0,void 0,(function*(){var s,e,a;try{console.log(`🔍 [useAIChat] About to load session: ${g}`);const o=yield n.loadSession(g);if(o){if(console.log("📁 [useAIChat] Session loaded from DB:",{sessionId:o.sessionId,totalMessages:o.messages.length,messageRoles:o.messages.map((s=>s.role)),lastResponseId:null===(s=o.metadata)||void 0===s?void 0:s.lastResponseId}),console.log("🔄 [useAIChat] Updating conversation state..."),b(o),O(null===(e=o.metadata)||void 0===e?void 0:e.lastResponseId),m)console.log(`👁️ [useAIChat] displayInUI=true - Loading ALL ${o.messages.length} messages to UI`),f(o.messages);else{const s=o.messages.filter((s=>"user"===s.role));console.log(`🔇 [useAIChat] displayInUI=false - Loading only ${s.length} user messages to UI (${o.messages.length} total in session)`),f(s)}console.log("✅ [useAIChat] Session state updated successfully:",{conversationMessages:o.messages.length,uiMessages:m?o.messages.length:o.messages.filter((s=>"user"===s.role)).length,lastResponseId:null===(a=o.metadata)||void 0===a?void 0:a.lastResponseId})}else{console.log(`📁 [useAIChat] No existing session found for conversationId: ${g}`);const s=t.createSessionRecord(g);console.log("🆕 [useAIChat] Creating fresh session:",s),b(s),f([]),O(void 0),console.log("✅ [useAIChat] Fresh session created successfully")}}catch(s){console.error("❌ [useAIChat] Failed to load session:",s);const e=t.createSessionRecord(g);b(e),f([]),O(void 0),console.log("🆘 [useAIChat] Fallback to fresh session due to error")}}))})()}),[g,m]);const R=e.useMemo((()=>d?null:new a.AIService({system:Object.assign(Object.assign({},i),{handleCallback:(s,e)=>{var t;null===(t=i.handleCallback)||void 0===t||t.call(i,s,e)}}),dispatchMessage:s=>{console.log("💬 [useAIChat] dispatchMessage called:",{messageId:s.id,role:s.role,content:s.content.substring(0,100)+(s.content.length>100?"...":""),displayInUI:m}),b((e=>{const t=Object.assign(Object.assign({},e),{updatedAt:Date.now(),messages:[...e.messages,s]});return console.log(`💾 [useAIChat] Saving message to session - Total messages now: ${t.messages.length}`),n.saveSession(t.sessionId,Object.assign(Object.assign({},t),{metadata:Object.assign(Object.assign({},t.metadata||{}),{lastResponseId:j})})),t})),m?(console.log("👁️ [useAIChat] displayInUI=true - Adding message to UI state"),f((e=>[...e,s]))):console.log("🔇 [useAIChat] displayInUI=false - Message saved to session but NOT added to UI state")},customFunctions:r,functionHandler:c,responseFormat:u,onMessageReceived:I,displayInUI:m,maxToolCalls:h,maxTokens:p,apiAdapter:v})),[i.id,d,u,h,p,g]);return{messages:A,conversation:C,sendMessage:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"default";return s.__awaiter(l,void 0,void 0,(function*(){if(!R)return void console.warn("⚠️ [useAIChat] sendMessage called but service is null");const s={id:`u-${Date.now()}`,role:"user",content:e,timestamp:Date.now()};console.log("📤 [useAIChat] Sending user message:",{messageId:s.id,content:e.substring(0,100)+(e.length>100?"...":""),conversationId:g,displayInUI:m,currentMessagesCount:A.length,currentLastResponseId:j}),f((e=>(console.log(`📝 [useAIChat] Adding user message to UI - Previous count: ${e.length}, New count: ${e.length+1}`),[...e,s]))),b((e=>{var t;console.log("🔄 [useAIChat] Current conversation state before update:",{sessionId:e.sessionId,currentMessageCount:e.messages.length,lastMessage:(null===(t=e.messages[e.messages.length-1])||void 0===t?void 0:t.role)||"none"});const a=Object.assign(Object.assign({},e),{updatedAt:Date.now(),messages:[...e.messages,s]});return console.log(`💾 [useAIChat] Saving user message to session - Previous: ${e.messages.length}, New total: ${a.messages.length}`),console.log("🔍 [useAIChat] Session update details:",{sessionId:a.sessionId,messageCount:a.messages.length,lastResponseId:j,hasMetadata:!!a.metadata}),n.saveSession(a.sessionId,Object.assign(Object.assign({},a),{metadata:Object.assign(Object.assign({},a.metadata||{}),{lastResponseId:j})})),a})),S(!0);try{const e=yield R.generate([...A,s].map((s=>({role:s.role,content:s.content}))),g,t,j);(null==e?void 0:e.responseId)&&(O(e.responseId),b((s=>{const t=Object.assign(Object.assign({},s),{metadata:Object.assign(Object.assign({},s.metadata||{}),{lastResponseId:e.responseId})});return n.saveSession(t.sessionId,t),t})))}catch(s){const e=(null==s?void 0:s.message)||"Something went wrong. Please try again.",t={id:`err-${Date.now()}`,role:"system",content:e,timestamp:Date.now()};f((s=>[...s,t])),b((s=>{const e=Object.assign(Object.assign({},s),{updatedAt:Date.now(),messages:[...s.messages,t]});return n.saveSession(e.sessionId,Object.assign(Object.assign({},e),{metadata:Object.assign(Object.assign({},e.metadata||{}),{lastResponseId:j})})),e}))}finally{S(!1)}}))},isApiCallInProgress:y}};
@@ -1 +1 @@
1
- import{__awaiter as e}from"../../../_virtual/_tslib.js";import{j as o}from"../../../node_modules/react/jsx-runtime.js";import{useState as s,useRef as t,useEffect as n,useCallback as r,useContext as i,createContext as a}from"react";import{createExecutorApiAdapter as l}from"../services/callToChatbot.js";import{useAIChat as d}from"../services/useAIChat.js";import{DEFAULT_MODEL as c,ALLOWED_MODELS as u}from"../types/ai.js";const m=a(null),p=i=>{let{children:a,systemPrompt:p,systemId:f,functions:v,tools:g,functionHandler:y,onMessageReceived:I,displayInUI:h,maxToolCalls:x,maxTokens:j,requestExecutor:A,baseUrl:C,endpointPath:P,responseFormat:b,conversationId:w="default-session",customModel:q,onSystemReady:E}=i;const[R,M]=s(null),[T,U]=s(!0),[F,k]=s(null),L=t(null);n((()=>p?A&&C?void k(null):(k("Chatbot authentication not configured: RequestExecutor and baseUrl are required"),void U(!1)):(k("systemPrompt is required for generic mode"),void U(!1))),[p,A,C]);const $=r((()=>e(void 0,void 0,void 0,(function*(){try{U(!0),k(null);const e=q||c;if(!u.includes(e))throw new Error(`Unsupported model: ${q||"default"}. Allowed models are: ${u.join(", ")}`);M({id:f||"generic",name:f?`${f} `:"Generic AI Assistant",model:e,systemPrompt:p,functions:v,tools:g})}catch(e){const o=(null==e?void 0:e.message)||"Failed to create AI system";k(o)}finally{U(!1)}}))),[q,p,f,v]);n((()=>{p&&$()}),[$]),n((()=>{R&&E&&R.id!==L.current&&(L.current=R.id,E(R)),R||(L.current=null)}),[R]);const{messages:_,conversation:H,sendMessage:z,isApiCallInProgress:G}=d({system:R||{id:"loading",name:"Loading...",model:c,systemPrompt:"Loading...",functions:[]},conversationId:w,skipInitialization:!R,customFunctions:v,functionHandler:y,responseFormat:b,onMessageReceived:I,displayInUI:h,maxToolCalls:x,maxTokens:j,apiAdapter:A&&C?l(A,C,P||void 0):()=>{throw new Error("Chatbot authentication not configured: RequestExecutor is required")}}),O={isReady:!!R&&!T,isLoading:T,isApiCallInProgress:G,system:R,messages:_,conversation:H,sendMessage:z,error:F};return o.jsx(m.Provider,Object.assign({value:O},{children:a}))},f=()=>{const e=i(m);if(!e)throw new Error("useAIContext must be used within an AIProvider");return e};export{p as AIProvider,f as useAIContext};
1
+ import{__awaiter as e}from"../../../_virtual/_tslib.js";import{j as o}from"../../../node_modules/react/jsx-runtime.js";import{useState as s,useRef as t,useEffect as n,useCallback as i,useMemo as r,useContext as a,createContext as l}from"react";import{createExecutorApiAdapter as d}from"../services/callToChatbot.js";import{useAIChat as m}from"../services/useAIChat.js";import{DEFAULT_MODEL as c,ALLOWED_MODELS as u}from"../types/ai.js";const p=l(null),v=a=>{let{children:l,systemPrompt:v,systemId:g,functions:I,tools:f,functionHandler:y,onMessageReceived:h,displayInUI:x,maxToolCalls:A,maxTokens:j,requestExecutor:P,baseUrl:w,endpointPath:C,responseFormat:b,conversationId:R="default-session",customModel:q,onSystemReady:E}=a;const[U,M]=s(null),[T,k]=s(!0),[F,S]=s(null),L=t(null);n((()=>v?P&&w?void S(null):(S("Chatbot authentication not configured: RequestExecutor and baseUrl are required"),void k(!1)):(S("systemPrompt is required for generic mode"),void k(!1))),[v,P,w]);const $=i((()=>e(void 0,void 0,void 0,(function*(){try{k(!0),S(null);const e=q||c;if(!u.includes(e))throw new Error(`Unsupported model: ${q||"default"}. Allowed models are: ${u.join(", ")}`);M({id:g||"generic",name:g?`${g} `:"Generic AI Assistant",model:e,systemPrompt:v,functions:I,tools:f})}catch(e){const o=(null==e?void 0:e.message)||"Failed to create AI system";S(o)}finally{k(!1)}}))),[q,v,g,I]);n((()=>{v&&$()}),[$]),n((()=>{U&&E&&U.id!==L.current&&(L.current=U.id,E(U)),U||(L.current=null)}),[U]),console.log("🏗️ [AIProvider] Rendering:",{conversationId:R,displayInUI:x,hasSystem:!!U,systemId:(null==U?void 0:U.id)||"loading",skipInitialization:!U,timestamp:(new Date).toISOString()});const _=r((()=>({id:"loading",name:"Loading...",model:c,systemPrompt:"Loading...",functions:[]})),[]),{messages:z,conversation:H,sendMessage:O,isApiCallInProgress:D}=m({system:U||_,conversationId:R,skipInitialization:!U,customFunctions:I,functionHandler:y,responseFormat:b,onMessageReceived:h,displayInUI:x,maxToolCalls:A,maxTokens:j,apiAdapter:P&&w?d(P,w,C||void 0):()=>{throw new Error("Chatbot authentication not configured: RequestExecutor is required")}}),G={isReady:!!U&&!T,isLoading:T,isApiCallInProgress:D,system:U,messages:z,conversation:H,sendMessage:O,error:F};return o.jsx(p.Provider,Object.assign({value:G},{children:l}))},g=()=>{const e=a(p);if(!e)throw new Error("useAIContext must be used within an AIProvider");return e};export{v as AIProvider,g as useAIContext};
@@ -1 +1 @@
1
- import{__awaiter as s}from"../../../_virtual/_tslib.js";import{useState as e,useEffect as t,useMemo as a}from"react";import{createSessionRecord as n}from"../types/chat.js";import{AIService as o}from"./aiService.js";import{loadSession as i,saveSession as l}from"./db.js";function g(g){var d=this;let{system:c,conversationId:r,skipInitialization:m=!1,customFunctions:u,functionHandler:I,responseFormat:p,onMessageReceived:h,displayInUI:b,maxToolCalls:v,maxTokens:j,apiAdapter:O}=g;const[A,C]=e((()=>n(r))),[f,y]=e([]),[w,U]=e(),[$,M]=e(!1);t((()=>{console.log(`🔄 [useAIChat] Loading session for conversationId: ${r}, displayInUI: ${b}`),i(r).then((s=>{var e,t;if(s){if(console.log("📁 [useAIChat] Session loaded:",{sessionId:s.sessionId,totalMessages:s.messages.length,messageRoles:s.messages.map((s=>s.role)),lastResponseId:null===(e=s.metadata)||void 0===e?void 0:e.lastResponseId}),C(s),b)console.log(`👁️ [useAIChat] displayInUI=true - Loading ALL ${s.messages.length} messages to UI`),y(s.messages);else{const e=s.messages.filter((s=>"user"===s.role));console.log(`🔇 [useAIChat] displayInUI=false - Loading only ${e.length} user messages to UI (${s.messages.length} total in session)`),y(e)}U(null===(t=s.metadata)||void 0===t?void 0:t.lastResponseId)}else console.log(`📁 [useAIChat] No existing session found for conversationId: ${r}`)}))}),[r,b]);const R=a((()=>m?null:new o({system:Object.assign(Object.assign({},c),{handleCallback:(s,e)=>{var t;null===(t=c.handleCallback)||void 0===t||t.call(c,s,e)}}),dispatchMessage:s=>{console.log("💬 [useAIChat] dispatchMessage called:",{messageId:s.id,role:s.role,content:s.content.substring(0,100)+(s.content.length>100?"...":""),displayInUI:b}),C((e=>{const t=Object.assign(Object.assign({},e),{updatedAt:Date.now(),messages:[...e.messages,s]});return console.log(`💾 [useAIChat] Saving message to session - Total messages now: ${t.messages.length}`),l(t.sessionId,Object.assign(Object.assign({},t),{metadata:Object.assign(Object.assign({},t.metadata||{}),{lastResponseId:w})})),t})),b?(console.log("👁️ [useAIChat] displayInUI=true - Adding message to UI state"),y((e=>[...e,s]))):console.log("🔇 [useAIChat] displayInUI=false - Message saved to session but NOT added to UI state")},customFunctions:u,functionHandler:I,responseFormat:p,onMessageReceived:h,displayInUI:b,maxToolCalls:v,maxTokens:j,apiAdapter:O})),[c.id,m,j]);return{messages:f,conversation:A,sendMessage:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"default";return s(d,void 0,void 0,(function*(){if(!R)return void console.warn("⚠️ [useAIChat] sendMessage called but service is null");const s={id:`u-${Date.now()}`,role:"user",content:e,timestamp:Date.now()};console.log("📤 [useAIChat] Sending user message:",{messageId:s.id,content:e.substring(0,100)+(e.length>100?"...":""),conversationId:r,displayInUI:b,currentMessagesCount:f.length,currentLastResponseId:w}),y((e=>(console.log(`📝 [useAIChat] Adding user message to UI - Previous count: ${e.length}, New count: ${e.length+1}`),[...e,s]))),C((e=>{var t;console.log("🔄 [useAIChat] Current conversation state before update:",{sessionId:e.sessionId,currentMessageCount:e.messages.length,lastMessage:(null===(t=e.messages[e.messages.length-1])||void 0===t?void 0:t.role)||"none"});const a=Object.assign(Object.assign({},e),{updatedAt:Date.now(),messages:[...e.messages,s]});return console.log(`💾 [useAIChat] Saving user message to session - Previous: ${e.messages.length}, New total: ${a.messages.length}`),console.log("🔍 [useAIChat] Session update details:",{sessionId:a.sessionId,messageCount:a.messages.length,lastResponseId:w,hasMetadata:!!a.metadata}),l(a.sessionId,Object.assign(Object.assign({},a),{metadata:Object.assign(Object.assign({},a.metadata||{}),{lastResponseId:w})})),a})),M(!0);try{const e=yield R.generate([...f,s].map((s=>({role:s.role,content:s.content}))),r,t,w);(null==e?void 0:e.responseId)&&(U(e.responseId),C((s=>{const t=Object.assign(Object.assign({},s),{metadata:Object.assign(Object.assign({},s.metadata||{}),{lastResponseId:e.responseId})});return l(t.sessionId,t),t})))}catch(s){const e=(null==s?void 0:s.message)||"Something went wrong. Please try again.",t={id:`err-${Date.now()}`,role:"system",content:e,timestamp:Date.now()};y((s=>[...s,t])),C((s=>{const e=Object.assign(Object.assign({},s),{updatedAt:Date.now(),messages:[...s.messages,t]});return l(e.sessionId,Object.assign(Object.assign({},e),{metadata:Object.assign(Object.assign({},e.metadata||{}),{lastResponseId:w})})),e}))}finally{M(!1)}}))},isApiCallInProgress:$}}export{g as useAIChat};
1
+ import{__awaiter as s}from"../../../_virtual/_tslib.js";import{useState as e,useEffect as t,useMemo as n}from"react";import{createSessionRecord as o}from"../types/chat.js";import{AIService as a}from"./aiService.js";import{saveSession as l,loadSession as i}from"./db.js";function g(g){var d=this;let{system:r,conversationId:c,skipInitialization:u=!1,customFunctions:I,functionHandler:m,responseFormat:h,onMessageReceived:p,displayInUI:v,maxToolCalls:C,maxTokens:b,apiAdapter:A}=g;const[f,j]=e((()=>o(c))),[O,y]=e([]),[R,M]=e(),[U,w]=e(!1);console.log("🔄 [useAIChat] Hook render:",{conversationId:c,displayInUI:v,messagesCount:O.length,conversationMessagesCount:f.messages.length,lastResponseId:R,timestamp:(new Date).toISOString()}),t((()=>{console.log("🚀 [useAIChat] useEffect TRIGGERED for session loading:",{conversationId:c,displayInUI:v,currentMessages:O.length,currentConversationMessages:f.messages.length,currentLastResponseId:R});(()=>{s(this,void 0,void 0,(function*(){var s,e,t;try{console.log(`🔍 [useAIChat] About to load session: ${c}`);const n=yield i(c);if(n){if(console.log("📁 [useAIChat] Session loaded from DB:",{sessionId:n.sessionId,totalMessages:n.messages.length,messageRoles:n.messages.map((s=>s.role)),lastResponseId:null===(s=n.metadata)||void 0===s?void 0:s.lastResponseId}),console.log("🔄 [useAIChat] Updating conversation state..."),j(n),M(null===(e=n.metadata)||void 0===e?void 0:e.lastResponseId),v)console.log(`👁️ [useAIChat] displayInUI=true - Loading ALL ${n.messages.length} messages to UI`),y(n.messages);else{const s=n.messages.filter((s=>"user"===s.role));console.log(`🔇 [useAIChat] displayInUI=false - Loading only ${s.length} user messages to UI (${n.messages.length} total in session)`),y(s)}console.log("✅ [useAIChat] Session state updated successfully:",{conversationMessages:n.messages.length,uiMessages:v?n.messages.length:n.messages.filter((s=>"user"===s.role)).length,lastResponseId:null===(t=n.metadata)||void 0===t?void 0:t.lastResponseId})}else{console.log(`📁 [useAIChat] No existing session found for conversationId: ${c}`);const s=o(c);console.log("🆕 [useAIChat] Creating fresh session:",s),j(s),y([]),M(void 0),console.log("✅ [useAIChat] Fresh session created successfully")}}catch(s){console.error("❌ [useAIChat] Failed to load session:",s);const e=o(c);j(e),y([]),M(void 0),console.log("🆘 [useAIChat] Fallback to fresh session due to error")}}))})()}),[c,v]);const $=n((()=>u?null:new a({system:Object.assign(Object.assign({},r),{handleCallback:(s,e)=>{var t;null===(t=r.handleCallback)||void 0===t||t.call(r,s,e)}}),dispatchMessage:s=>{console.log("💬 [useAIChat] dispatchMessage called:",{messageId:s.id,role:s.role,content:s.content.substring(0,100)+(s.content.length>100?"...":""),displayInUI:v}),j((e=>{const t=Object.assign(Object.assign({},e),{updatedAt:Date.now(),messages:[...e.messages,s]});return console.log(`💾 [useAIChat] Saving message to session - Total messages now: ${t.messages.length}`),l(t.sessionId,Object.assign(Object.assign({},t),{metadata:Object.assign(Object.assign({},t.metadata||{}),{lastResponseId:R})})),t})),v?(console.log("👁️ [useAIChat] displayInUI=true - Adding message to UI state"),y((e=>[...e,s]))):console.log("🔇 [useAIChat] displayInUI=false - Message saved to session but NOT added to UI state")},customFunctions:I,functionHandler:m,responseFormat:h,onMessageReceived:p,displayInUI:v,maxToolCalls:C,maxTokens:b,apiAdapter:A})),[r.id,u,h,C,b,c]);return{messages:O,conversation:f,sendMessage:function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"default";return s(d,void 0,void 0,(function*(){if(!$)return void console.warn("⚠️ [useAIChat] sendMessage called but service is null");const s={id:`u-${Date.now()}`,role:"user",content:e,timestamp:Date.now()};console.log("📤 [useAIChat] Sending user message:",{messageId:s.id,content:e.substring(0,100)+(e.length>100?"...":""),conversationId:c,displayInUI:v,currentMessagesCount:O.length,currentLastResponseId:R}),y((e=>(console.log(`📝 [useAIChat] Adding user message to UI - Previous count: ${e.length}, New count: ${e.length+1}`),[...e,s]))),j((e=>{var t;console.log("🔄 [useAIChat] Current conversation state before update:",{sessionId:e.sessionId,currentMessageCount:e.messages.length,lastMessage:(null===(t=e.messages[e.messages.length-1])||void 0===t?void 0:t.role)||"none"});const n=Object.assign(Object.assign({},e),{updatedAt:Date.now(),messages:[...e.messages,s]});return console.log(`💾 [useAIChat] Saving user message to session - Previous: ${e.messages.length}, New total: ${n.messages.length}`),console.log("🔍 [useAIChat] Session update details:",{sessionId:n.sessionId,messageCount:n.messages.length,lastResponseId:R,hasMetadata:!!n.metadata}),l(n.sessionId,Object.assign(Object.assign({},n),{metadata:Object.assign(Object.assign({},n.metadata||{}),{lastResponseId:R})})),n})),w(!0);try{const e=yield $.generate([...O,s].map((s=>({role:s.role,content:s.content}))),c,t,R);(null==e?void 0:e.responseId)&&(M(e.responseId),j((s=>{const t=Object.assign(Object.assign({},s),{metadata:Object.assign(Object.assign({},s.metadata||{}),{lastResponseId:e.responseId})});return l(t.sessionId,t),t})))}catch(s){const e=(null==s?void 0:s.message)||"Something went wrong. Please try again.",t={id:`err-${Date.now()}`,role:"system",content:e,timestamp:Date.now()};y((s=>[...s,t])),j((s=>{const e=Object.assign(Object.assign({},s),{updatedAt:Date.now(),messages:[...s.messages,t]});return l(e.sessionId,Object.assign(Object.assign({},e),{metadata:Object.assign(Object.assign({},e.metadata||{}),{lastResponseId:R})})),e}))}finally{w(!1)}}))},isApiCallInProgress:U}}export{g as useAIChat};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bikdotai/bik-component-library",
3
- "version": "0.0.720-beta.5",
3
+ "version": "0.0.720-beta.7",
4
4
  "description": "Bik Component Library",
5
5
  "repository": {
6
6
  "type": "git",