Repository files navigation

ChatBotKitCBK.AIEmailDiscordFollow on Twitter

 .d8888b. 888888b. 888 d8P
d88P Y88b 888 "88b 888 d8P
888 888 888 .88P 888 d8P
888 8888888K. 888d88K
888 888 "Y88b 8888888b
888 888 888 888 888 Y88b
Y88b d88P 888 d88P 888 Y88b
"Y8888P" 8888888P" 888 Y88b .ai

ChatBotKit Node SDK

The official JavaScript and TypeScript SDK suite for ChatBotKit - a platform for building and deploying conversational AI applications. With ChatBotKit you can create bots and agents with custom data, skillsets, and integrations while keeping AI orchestration on the ChatBotKit platform.

This meta repository contains SDK packages and tools for popular platforms and frameworks such as Node.js, React, Next.js, NextAuth.js, widgets, and more.

Main Packages

The ChatBotKit Node SDK is comprised of the following packages:

PackageVersionDescription
@chatbotkit/cliNPMThe ChatBotKit CLI.
@chatbotkit/sdkNPMThe ChatBotKit API SDK.
@chatbotkit/agentNPMThe ChatBotKit Agent SDK.
@chatbotkit/reactNPMThe ChatBotKit React SDK.
@chatbotkit/nextNPMThe ChatBotKit Next.js SDK.
@chatbotkit/nextauthNPMThe ChatBotKit NextAuth.js SDK.
@chatbotkit/widgetNPMThe ChatBotKit Widget types and utilities.
@chatbotkit/fetchNPMThe ChatBotKit isometric fetch implementation.

Other Tools

This repository also contains the following tools:

PackageVersionDescription
create-cbk-appNPMA quick tool to create a new CBK application.

Why ChatBotKit?

Build lighter, future-proof AI agents. When you build with ChatBotKit, the heavy lifting happens on our servers, not in your application. This architectural advantage delivers:

  • 🪶 Lightweight Agents: Your agents stay lean because complex AI processing, model orchestration, and tool execution happen server-side. Less code in your app means faster load times and simpler maintenance.

  • 🛡️ Robust & Streamlined: Server-side processing provides a more reliable experience with built-in error handling, automatic retries, and consistent behavior across all platforms.

  • 🔄 Backward & Forward Compatible: As AI technology evolves with new models, new capabilities, and new paradigms, your agents automatically benefit. No code changes required on your end.

  • 🔮 Future-Proof: Agents you build today will remain capable tomorrow. When we add support for new AI models or capabilities, your existing agents gain those powers without any updates to your codebase.

This means you can focus on building great user experiences while ChatBotKit handles the complexity of the ever-changing AI landscape.

SDK Features

  • Easy Setup: Quick and straightforward installation process.
  • Serverless Compatibility: Works seamlessly with modern runtime environments like Serverless, Edge, Vercel, Netlify, Cloudflare Workers, Deno, AWS Lambda, and more.
  • Modern Framework Support: Built-in support for CommonJS, ECMAScript Modules, async/await, streams, etc.
  • Customizability: Tailor the chatbot’s behavior and responses to fit specific use cases.
  • Multi-Platform: Deploy chatbots on websites, mobile apps, and messaging platforms like Slack, Discord, and WhatsApp.
  • Multi-Model: Support for a wide range of language models, including GPT-3, GPT-4, Claude, and more.

ChatBotKit Capabilities

  • 🔄 Multi-modal Support: Support various language and image models from all vendors such as OpenAI, Anthropic, Mistral, AWS, Google and others.
  • 🌍 Multi-language Support: Allowing for easy customization and use in diverse linguistic contexts.
  • 💬 Conversation Management: Manage complex conversation flaws with ease.
  • 🗨 Chat History: Review and reference past conversations.
  • 💾 Custom Datasets: Organize data for bot responses.
  • 💡 Custom Skillset: Equip chatbots with unique abilities like image generation or web fetching.
  • 📄 Document File Importing: Import various document file types into chatbot datasets.
  • 🎵 Media File Importing: Import a range of media file formats into chatbot datasets.
  • 🌐 Widget Integration: Seamlessly embed chatbots on websites with customizable options.
  • 💬 Slack, Discord, WhatsApp Bot Integrations: Easy integration with popular messaging platforms.
  • 🗺 Sitemap Integration: Ingest website content into a searchable knowledge base.
  • 🎥 Streaming: Enable/disable streaming capabilities.
  • 🔒 Data Security: Robust measures to protect user data.
  • 🕵 Privacy Focus: Strong privacy controls to ensure responsible data handling.
  • 🚫 Content Moderation: Automatic scanning and flagging of abusive content.
  • 💵 Simple Pricing: Transparent and straightforward pricing.

Getting Started

Follow these steps to start with ChatBotKit:

  1. Installation:
    npm install @chatbotkit/sdk
  2. Usage: Implement the SDK in your chatbot project.

Streaming Example

This example demonstrates streaming capabilities in Edge and Serverless environments:

import{ConversationClient}from'@chatbotkit/sdk/conversation/index.js'constclient=newConversationClient(/* configuration */)forawait(const{ type, data }ofclient.complete(null,{model: 'gpt-4', messages }).stream()){if(type==='token'){process.stdout.write(data.token)}}

NextGen Example for Next.js

This example showcases how to build advanced conversational AI with streaming, function calls, server-side rendering and much more in a Next.js project:

// file: ./app/page.jsximportChatAreafrom'../components/ChatArea.jsx'exportdefaultfunctionPage(){return<ChatArea/>}// file: ./components/ChatArea.jsx'use client'import{useContext}from'react'import{complete}from'../actions/conversation.jsx'import{ChatInput,ConversationContext}from'@chatbotkit/react'importConversationManagerfrom'@chatbotkit/react/components/ConversationManager'exportfunctionChatMessages(){const{
thinking,
text,
setText,
messages,
submit,}=useContext(ConversationContext)return(<div><div>{messages.map(({ id, type, text, children })=>{switch(type){case'user':
return(<divkey={id}><div><strong>user:</strong>{text}</div></div>)case'bot':
return(<divkey={id}><div><strong>bot:</strong>{text}</div>{children ? <div>{children}</div> : null}</div>)}})}{thinking ? (<divkey="thinking"><strong>bot:</strong> thinking...
</div>) : null}</div><ChatInputvalue={text}onChange={(e)=>setText(e.target.value)}onSubmit={submit}placeholder="Type something..."style={{border: 0,outline: 'none',resize: 'none',width: '100%',marginTop: '10px',}}/></div>)}exportdefaultfunctionChatArea(){return(<ConversationManagerendpoint={complete}><ChatMessages/></ConversationManager>)}// file: ./actions/conversation.jsx'use server'importCalendarEventsfrom'../components/CalendarEvents.jsx'import{streamComplete}from'@chatbotkit/react/actions/complete'import{ChatBotKit}from'@chatbotkit/sdk'constcbk=newChatBotKit({secret: process.env.CHATBOTKIT_API_SECRET,})exportasyncfunctioncomplete({ messages }){returnstreamComplete({client: cbk.conversation,
messages,functions: [{name: 'getUserName',description: 'Get the authenticated user name',parameters: {},handler: async()=>{return'John Doe'},},{name: 'getCalendarEvents',description: 'Get a list of calendar events',parameters: {},handler: async()=>{constevents=[{id: 1,title: 'Meeting with Jane Doe'},{id: 2,title: 'Meeting with Jill Doe'},]return{children: <CalendarEventsevents={events}/>,result: {
events,},}},},{name: 'declineCalendarEvent',description: 'Decline a calendar event',parameters: {type: 'object',properties: {id: {type: 'number',description: 'The ID of the event to decline',},},required: ['id'],},handler: async({ id })=>{return`You have declined the event with ID ${id}`},},],})}

Basic Next.js Example

This quick example demonstrates how to use the SDK in a Next.js project:

// file: ./pages/index.jsimport{AutoTextarea,useConversationManager}from'@chatbotkit/react'exportdefaultfunctionIndex(){const{
thinking,
text,
setText,
messages,
submit,}=useConversationManager({endpoint: '/api/conversation/complete',})functionhandleOnKeyDown(event){if(event.keyCode===13){event.preventDefault()submit()}}return(<divstyle={{fontFamily: 'monospace',padding: '10px'}}>{messages.map(({ id, type, text })=>(<divkey={id}><strong>{type}:</strong>{text}</div>))}{thinking&&(<divkey="thinking"><strong>bot:</strong> thinking...
</div>)}<AutoTextareavalue={text}onChange={(e)=>setText(e.target.value)}onKeyDown={handleOnKeyDown}placeholder="Type something..."style={{border: 0,outline: 'none',resize: 'none',width: '100%',marginTop: '10px',}}/></div>)}// file: ./pages/api/conversation/complete.jsimport{ChatBotKit}from'@chatbotkit/sdk'import{stream}from'@chatbotkit/next/edge'constcbk=newChatBotKit({secret: process.env.CHATBOTKIT_API_SECRET,})exportdefaultasyncfunctionhandler(req){const{ messages }=awaitreq.json()returnstream(cbk.conversation.complete(null,{ messages }))}exportconstconfig={runtime: 'edge',}

Examples

Explore a wide range of examples here.

Some notable examples include:

PlatformExampleDescription
Next.jsAuthenticated Chat with ContactsDemonstrates ChatBotKit Contacts for managing end-users with authentication. Shows how to use fingerprints to track users, enable personalized experiences, and unlock authentication management for 3rd-party integrations like Google and Microsoft.
Next.jsStateless Chat (App Router + RSC + Functions + Function Request)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions as well AI functions with function requests. This is a powerful example to demonstrate the full capabilities of the ChatBotKit conversational AI platform.
Next.jsStateless Chat (App Router + RSC + Functions)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions as well AI functions.
Next.jsStateless Chat (App Router + RSC)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions.
Next.jsStateless Chat (App Router)A stateless chatbot example, where the conversation is managed by the client. This example uses the App Router.
Next.jsStateless ChatA stateless chatbot example, where the conversation is managed by the client.
Next.jsStateful ChatA basic chatbot example, where the conversation is managed by ChatBotKit.
Next.jsUser NextAuth ExampleShows how to provision isolated users through NextAuth.
NodeGPT4 Streaming AI chatbotA simple streaming AI chatbot example.
Cloudflare WorkersGPT4 AI chatbotA streaming AI chatbot example for Cloudflare Workers.

Stability

All SDK features are considered unstable unless explicitly marked as stable. Stability is indicated by the presence of a @stable tag in the documentation.

Documentation

  • Type Documentation: Detailed information on available types here.
  • LLMS.txt: Documentation suitable for coding assistants can be found here.
  • Platform Documentation: Comprehensive guide to ChatBotKit here.
  • Platform Tutorials: Step-by-step tutorials for ChatBotKit here.

Contributing

Encounter a bug or want to contribute? Open an issue or submit a pull request on our official GitHub repository.

Setup

The project is setup as a monorepo using pnpm and turbo build. Clone the reporitory and run the following commands to get started:

pnpm install

To perform type and lint checks, run:

pnpm check
pnpm lint

To build the project, run:

pnpm build

To build a specific package, run:

pnpm -F @chatbotkit/${PACKAGE_NAME} build

About

Create conversational AI solutions with custom data and abilities using ChatBotKit for JavaScript, TypeScript, React, and Next.js.

Topics

Resources

Stars

77 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

ChatBotKitCBK.AIEmailDiscordFollow on Twitter

 .d8888b. 888888b. 888 d8P
d88P Y88b 888 "88b 888 d8P
888 888 888 .88P 888 d8P
888 8888888K. 888d88K
888 888 "Y88b 8888888b
888 888 888 888 888 Y88b
Y88b d88P 888 d88P 888 Y88b
"Y8888P" 8888888P" 888 Y88b .ai

ChatBotKit Node SDK

The official JavaScript and TypeScript SDK suite for ChatBotKit - a platform for building and deploying conversational AI applications. With ChatBotKit you can create bots and agents with custom data, skillsets, and integrations while keeping AI orchestration on the ChatBotKit platform.

This meta repository contains SDK packages and tools for popular platforms and frameworks such as Node.js, React, Next.js, NextAuth.js, widgets, and more.

Main Packages

The ChatBotKit Node SDK is comprised of the following packages:

PackageVersionDescription
@chatbotkit/cliNPMThe ChatBotKit CLI.
@chatbotkit/sdkNPMThe ChatBotKit API SDK.
@chatbotkit/agentNPMThe ChatBotKit Agent SDK.
@chatbotkit/reactNPMThe ChatBotKit React SDK.
@chatbotkit/nextNPMThe ChatBotKit Next.js SDK.
@chatbotkit/nextauthNPMThe ChatBotKit NextAuth.js SDK.
@chatbotkit/widgetNPMThe ChatBotKit Widget types and utilities.
@chatbotkit/fetchNPMThe ChatBotKit isometric fetch implementation.

Other Tools

This repository also contains the following tools:

PackageVersionDescription
create-cbk-appNPMA quick tool to create a new CBK application.

Why ChatBotKit?

Build lighter, future-proof AI agents. When you build with ChatBotKit, the heavy lifting happens on our servers, not in your application. This architectural advantage delivers:

  • 🪶 Lightweight Agents: Your agents stay lean because complex AI processing, model orchestration, and tool execution happen server-side. Less code in your app means faster load times and simpler maintenance.

  • 🛡️ Robust & Streamlined: Server-side processing provides a more reliable experience with built-in error handling, automatic retries, and consistent behavior across all platforms.

  • 🔄 Backward & Forward Compatible: As AI technology evolves with new models, new capabilities, and new paradigms, your agents automatically benefit. No code changes required on your end.

  • 🔮 Future-Proof: Agents you build today will remain capable tomorrow. When we add support for new AI models or capabilities, your existing agents gain those powers without any updates to your codebase.

This means you can focus on building great user experiences while ChatBotKit handles the complexity of the ever-changing AI landscape.

SDK Features

  • Easy Setup: Quick and straightforward installation process.
  • Serverless Compatibility: Works seamlessly with modern runtime environments like Serverless, Edge, Vercel, Netlify, Cloudflare Workers, Deno, AWS Lambda, and more.
  • Modern Framework Support: Built-in support for CommonJS, ECMAScript Modules, async/await, streams, etc.
  • Customizability: Tailor the chatbot’s behavior and responses to fit specific use cases.
  • Multi-Platform: Deploy chatbots on websites, mobile apps, and messaging platforms like Slack, Discord, and WhatsApp.
  • Multi-Model: Support for a wide range of language models, including GPT-3, GPT-4, Claude, and more.

ChatBotKit Capabilities

  • 🔄 Multi-modal Support: Support various language and image models from all vendors such as OpenAI, Anthropic, Mistral, AWS, Google and others.
  • 🌍 Multi-language Support: Allowing for easy customization and use in diverse linguistic contexts.
  • 💬 Conversation Management: Manage complex conversation flaws with ease.
  • 🗨 Chat History: Review and reference past conversations.
  • 💾 Custom Datasets: Organize data for bot responses.
  • 💡 Custom Skillset: Equip chatbots with unique abilities like image generation or web fetching.
  • 📄 Document File Importing: Import various document file types into chatbot datasets.
  • 🎵 Media File Importing: Import a range of media file formats into chatbot datasets.
  • 🌐 Widget Integration: Seamlessly embed chatbots on websites with customizable options.
  • 💬 Slack, Discord, WhatsApp Bot Integrations: Easy integration with popular messaging platforms.
  • 🗺 Sitemap Integration: Ingest website content into a searchable knowledge base.
  • 🎥 Streaming: Enable/disable streaming capabilities.
  • 🔒 Data Security: Robust measures to protect user data.
  • 🕵 Privacy Focus: Strong privacy controls to ensure responsible data handling.
  • 🚫 Content Moderation: Automatic scanning and flagging of abusive content.
  • 💵 Simple Pricing: Transparent and straightforward pricing.

Getting Started

Follow these steps to start with ChatBotKit:

  1. Installation:
    npm install @chatbotkit/sdk
  2. Usage: Implement the SDK in your chatbot project.

Streaming Example

This example demonstrates streaming capabilities in Edge and Serverless environments:

import{ConversationClient}from'@chatbotkit/sdk/conversation/index.js'constclient=newConversationClient(/* configuration */)forawait(const{ type, data }ofclient.complete(null,{model: 'gpt-4', messages }).stream()){if(type==='token'){process.stdout.write(data.token)}}

NextGen Example for Next.js

This example showcases how to build advanced conversational AI with streaming, function calls, server-side rendering and much more in a Next.js project:

// file: ./app/page.jsximportChatAreafrom'../components/ChatArea.jsx'exportdefaultfunctionPage(){return<ChatArea/>}// file: ./components/ChatArea.jsx'use client'import{useContext}from'react'import{complete}from'../actions/conversation.jsx'import{ChatInput,ConversationContext}from'@chatbotkit/react'importConversationManagerfrom'@chatbotkit/react/components/ConversationManager'exportfunctionChatMessages(){const{
thinking,
text,
setText,
messages,
submit,}=useContext(ConversationContext)return(<div><div>{messages.map(({ id, type, text, children })=>{switch(type){case'user':
return(<divkey={id}><div><strong>user:</strong>{text}</div></div>)case'bot':
return(<divkey={id}><div><strong>bot:</strong>{text}</div>{children ? <div>{children}</div> : null}</div>)}})}{thinking ? (<divkey="thinking"><strong>bot:</strong> thinking...
</div>) : null}</div><ChatInputvalue={text}onChange={(e)=>setText(e.target.value)}onSubmit={submit}placeholder="Type something..."style={{border: 0,outline: 'none',resize: 'none',width: '100%',marginTop: '10px',}}/></div>)}exportdefaultfunctionChatArea(){return(<ConversationManagerendpoint={complete}><ChatMessages/></ConversationManager>)}// file: ./actions/conversation.jsx'use server'importCalendarEventsfrom'../components/CalendarEvents.jsx'import{streamComplete}from'@chatbotkit/react/actions/complete'import{ChatBotKit}from'@chatbotkit/sdk'constcbk=newChatBotKit({secret: process.env.CHATBOTKIT_API_SECRET,})exportasyncfunctioncomplete({ messages }){returnstreamComplete({client: cbk.conversation,
messages,functions: [{name: 'getUserName',description: 'Get the authenticated user name',parameters: {},handler: async()=>{return'John Doe'},},{name: 'getCalendarEvents',description: 'Get a list of calendar events',parameters: {},handler: async()=>{constevents=[{id: 1,title: 'Meeting with Jane Doe'},{id: 2,title: 'Meeting with Jill Doe'},]return{children: <CalendarEventsevents={events}/>,result: {
events,},}},},{name: 'declineCalendarEvent',description: 'Decline a calendar event',parameters: {type: 'object',properties: {id: {type: 'number',description: 'The ID of the event to decline',},},required: ['id'],},handler: async({ id })=>{return`You have declined the event with ID ${id}`},},],})}

Basic Next.js Example

This quick example demonstrates how to use the SDK in a Next.js project:

// file: ./pages/index.jsimport{AutoTextarea,useConversationManager}from'@chatbotkit/react'exportdefaultfunctionIndex(){const{
thinking,
text,
setText,
messages,
submit,}=useConversationManager({endpoint: '/api/conversation/complete',})functionhandleOnKeyDown(event){if(event.keyCode===13){event.preventDefault()submit()}}return(<divstyle={{fontFamily: 'monospace',padding: '10px'}}>{messages.map(({ id, type, text })=>(<divkey={id}><strong>{type}:</strong>{text}</div>))}{thinking&&(<divkey="thinking"><strong>bot:</strong> thinking...
</div>)}<AutoTextareavalue={text}onChange={(e)=>setText(e.target.value)}onKeyDown={handleOnKeyDown}placeholder="Type something..."style={{border: 0,outline: 'none',resize: 'none',width: '100%',marginTop: '10px',}}/></div>)}// file: ./pages/api/conversation/complete.jsimport{ChatBotKit}from'@chatbotkit/sdk'import{stream}from'@chatbotkit/next/edge'constcbk=newChatBotKit({secret: process.env.CHATBOTKIT_API_SECRET,})exportdefaultasyncfunctionhandler(req){const{ messages }=awaitreq.json()returnstream(cbk.conversation.complete(null,{ messages }))}exportconstconfig={runtime: 'edge',}

Examples

Explore a wide range of examples here.

Some notable examples include:

PlatformExampleDescription
Next.jsAuthenticated Chat with ContactsDemonstrates ChatBotKit Contacts for managing end-users with authentication. Shows how to use fingerprints to track users, enable personalized experiences, and unlock authentication management for 3rd-party integrations like Google and Microsoft.
Next.jsStateless Chat (App Router + RSC + Functions + Function Request)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions as well AI functions with function requests. This is a powerful example to demonstrate the full capabilities of the ChatBotKit conversational AI platform.
Next.jsStateless Chat (App Router + RSC + Functions)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions as well AI functions.
Next.jsStateless Chat (App Router + RSC)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions.
Next.jsStateless Chat (App Router)A stateless chatbot example, where the conversation is managed by the client. This example uses the App Router.
Next.jsStateless ChatA stateless chatbot example, where the conversation is managed by the client.
Next.jsStateful ChatA basic chatbot example, where the conversation is managed by ChatBotKit.
Next.jsUser NextAuth ExampleShows how to provision isolated users through NextAuth.
NodeGPT4 Streaming AI chatbotA simple streaming AI chatbot example.
Cloudflare WorkersGPT4 AI chatbotA streaming AI chatbot example for Cloudflare Workers.

Stability

All SDK features are considered unstable unless explicitly marked as stable. Stability is indicated by the presence of a @stable tag in the documentation.

Documentation

  • Type Documentation: Detailed information on available types here.
  • LLMS.txt: Documentation suitable for coding assistants can be found here.
  • Platform Documentation: Comprehensive guide to ChatBotKit here.
  • Platform Tutorials: Step-by-step tutorials for ChatBotKit here.

Contributing

Encounter a bug or want to contribute? Open an issue or submit a pull request on our official GitHub repository.

Setup

The project is setup as a monorepo using pnpm and turbo build. Clone the reporitory and run the following commands to get started:

pnpm install

To perform type and lint checks, run:

pnpm check
pnpm lint

To build the project, run:

pnpm build

To build a specific package, run:

pnpm -F @chatbotkit/${PACKAGE_NAME} build

About

Create conversational AI solutions with custom data and abilities using ChatBotKit for JavaScript, TypeScript, React, and Next.js.

Topics

Resources

Stars

77 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ChatBotKitCBK.AIEmailDiscordFollow on Twitter

 .d8888b. 888888b. 888 d8P
d88P Y88b 888 "88b 888 d8P
888 888 888 .88P 888 d8P
888 8888888K. 888d88K
888 888 "Y88b 8888888b
888 888 888 888 888 Y88b
Y88b d88P 888 d88P 888 Y88b
"Y8888P" 8888888P" 888 Y88b .ai

ChatBotKit Node SDK

The official JavaScript and TypeScript SDK suite for ChatBotKit - a platform for building and deploying conversational AI applications. With ChatBotKit you can create bots and agents with custom data, skillsets, and integrations while keeping AI orchestration on the ChatBotKit platform.

This meta repository contains SDK packages and tools for popular platforms and frameworks such as Node.js, React, Next.js, NextAuth.js, widgets, and more.

Main Packages

The ChatBotKit Node SDK is comprised of the following packages:

PackageVersionDescription
@chatbotkit/cliNPMThe ChatBotKit CLI.
@chatbotkit/sdkNPMThe ChatBotKit API SDK.
@chatbotkit/agentNPMThe ChatBotKit Agent SDK.
@chatbotkit/reactNPMThe ChatBotKit React SDK.
@chatbotkit/nextNPMThe ChatBotKit Next.js SDK.
@chatbotkit/nextauthNPMThe ChatBotKit NextAuth.js SDK.
@chatbotkit/widgetNPMThe ChatBotKit Widget types and utilities.
@chatbotkit/fetchNPMThe ChatBotKit isometric fetch implementation.

Other Tools

This repository also contains the following tools:

PackageVersionDescription
create-cbk-appNPMA quick tool to create a new CBK application.

Why ChatBotKit?

Build lighter, future-proof AI agents. When you build with ChatBotKit, the heavy lifting happens on our servers, not in your application. This architectural advantage delivers:

  • 🪶 Lightweight Agents: Your agents stay lean because complex AI processing, model orchestration, and tool execution happen server-side. Less code in your app means faster load times and simpler maintenance.

  • 🛡️ Robust & Streamlined: Server-side processing provides a more reliable experience with built-in error handling, automatic retries, and consistent behavior across all platforms.

  • 🔄 Backward & Forward Compatible: As AI technology evolves with new models, new capabilities, and new paradigms, your agents automatically benefit. No code changes required on your end.

  • 🔮 Future-Proof: Agents you build today will remain capable tomorrow. When we add support for new AI models or capabilities, your existing agents gain those powers without any updates to your codebase.

This means you can focus on building great user experiences while ChatBotKit handles the complexity of the ever-changing AI landscape.

SDK Features

  • Easy Setup: Quick and straightforward installation process.
  • Serverless Compatibility: Works seamlessly with modern runtime environments like Serverless, Edge, Vercel, Netlify, Cloudflare Workers, Deno, AWS Lambda, and more.
  • Modern Framework Support: Built-in support for CommonJS, ECMAScript Modules, async/await, streams, etc.
  • Customizability: Tailor the chatbot’s behavior and responses to fit specific use cases.
  • Multi-Platform: Deploy chatbots on websites, mobile apps, and messaging platforms like Slack, Discord, and WhatsApp.
  • Multi-Model: Support for a wide range of language models, including GPT-3, GPT-4, Claude, and more.

ChatBotKit Capabilities

  • 🔄 Multi-modal Support: Support various language and image models from all vendors such as OpenAI, Anthropic, Mistral, AWS, Google and others.
  • 🌍 Multi-language Support: Allowing for easy customization and use in diverse linguistic contexts.
  • 💬 Conversation Management: Manage complex conversation flaws with ease.
  • 🗨 Chat History: Review and reference past conversations.
  • 💾 Custom Datasets: Organize data for bot responses.
  • 💡 Custom Skillset: Equip chatbots with unique abilities like image generation or web fetching.
  • 📄 Document File Importing: Import various document file types into chatbot datasets.
  • 🎵 Media File Importing: Import a range of media file formats into chatbot datasets.
  • 🌐 Widget Integration: Seamlessly embed chatbots on websites with customizable options.
  • 💬 Slack, Discord, WhatsApp Bot Integrations: Easy integration with popular messaging platforms.
  • 🗺 Sitemap Integration: Ingest website content into a searchable knowledge base.
  • 🎥 Streaming: Enable/disable streaming capabilities.
  • 🔒 Data Security: Robust measures to protect user data.
  • 🕵 Privacy Focus: Strong privacy controls to ensure responsible data handling.
  • 🚫 Content Moderation: Automatic scanning and flagging of abusive content.
  • 💵 Simple Pricing: Transparent and straightforward pricing.

Getting Started

Follow these steps to start with ChatBotKit:

  1. Installation:
    npm install @chatbotkit/sdk
  2. Usage: Implement the SDK in your chatbot project.

Streaming Example

This example demonstrates streaming capabilities in Edge and Serverless environments:

import{ConversationClient}from'@chatbotkit/sdk/conversation/index.js'constclient=newConversationClient(/* configuration */)forawait(const{ type, data }ofclient.complete(null,{model: 'gpt-4', messages }).stream()){if(type==='token'){process.stdout.write(data.token)}}

NextGen Example for Next.js

This example showcases how to build advanced conversational AI with streaming, function calls, server-side rendering and much more in a Next.js project:

// file: ./app/page.jsximportChatAreafrom'../components/ChatArea.jsx'exportdefaultfunctionPage(){return<ChatArea/>}// file: ./components/ChatArea.jsx'use client'import{useContext}from'react'import{complete}from'../actions/conversation.jsx'import{ChatInput,ConversationContext}from'@chatbotkit/react'importConversationManagerfrom'@chatbotkit/react/components/ConversationManager'exportfunctionChatMessages(){const{
thinking,
text,
setText,
messages,
submit,}=useContext(ConversationContext)return(<div><div>{messages.map(({ id, type, text, children })=>{switch(type){case'user':
return(<divkey={id}><div><strong>user:</strong>{text}</div></div>)case'bot':
return(<divkey={id}><div><strong>bot:</strong>{text}</div>{children ? <div>{children}</div> : null}</div>)}})}{thinking ? (<divkey="thinking"><strong>bot:</strong> thinking...
</div>) : null}</div><ChatInputvalue={text}onChange={(e)=>setText(e.target.value)}onSubmit={submit}placeholder="Type something..."style={{border: 0,outline: 'none',resize: 'none',width: '100%',marginTop: '10px',}}/></div>)}exportdefaultfunctionChatArea(){return(<ConversationManagerendpoint={complete}><ChatMessages/></ConversationManager>)}// file: ./actions/conversation.jsx'use server'importCalendarEventsfrom'../components/CalendarEvents.jsx'import{streamComplete}from'@chatbotkit/react/actions/complete'import{ChatBotKit}from'@chatbotkit/sdk'constcbk=newChatBotKit({secret: process.env.CHATBOTKIT_API_SECRET,})exportasyncfunctioncomplete({ messages }){returnstreamComplete({client: cbk.conversation,
messages,functions: [{name: 'getUserName',description: 'Get the authenticated user name',parameters: {},handler: async()=>{return'John Doe'},},{name: 'getCalendarEvents',description: 'Get a list of calendar events',parameters: {},handler: async()=>{constevents=[{id: 1,title: 'Meeting with Jane Doe'},{id: 2,title: 'Meeting with Jill Doe'},]return{children: <CalendarEventsevents={events}/>,result: {
events,},}},},{name: 'declineCalendarEvent',description: 'Decline a calendar event',parameters: {type: 'object',properties: {id: {type: 'number',description: 'The ID of the event to decline',},},required: ['id'],},handler: async({ id })=>{return`You have declined the event with ID ${id}`},},],})}

Basic Next.js Example

This quick example demonstrates how to use the SDK in a Next.js project:

// file: ./pages/index.jsimport{AutoTextarea,useConversationManager}from'@chatbotkit/react'exportdefaultfunctionIndex(){const{
thinking,
text,
setText,
messages,
submit,}=useConversationManager({endpoint: '/api/conversation/complete',})functionhandleOnKeyDown(event){if(event.keyCode===13){event.preventDefault()submit()}}return(<divstyle={{fontFamily: 'monospace',padding: '10px'}}>{messages.map(({ id, type, text })=>(<divkey={id}><strong>{type}:</strong>{text}</div>))}{thinking&&(<divkey="thinking"><strong>bot:</strong> thinking...
</div>)}<AutoTextareavalue={text}onChange={(e)=>setText(e.target.value)}onKeyDown={handleOnKeyDown}placeholder="Type something..."style={{border: 0,outline: 'none',resize: 'none',width: '100%',marginTop: '10px',}}/></div>)}// file: ./pages/api/conversation/complete.jsimport{ChatBotKit}from'@chatbotkit/sdk'import{stream}from'@chatbotkit/next/edge'constcbk=newChatBotKit({secret: process.env.CHATBOTKIT_API_SECRET,})exportdefaultasyncfunctionhandler(req){const{ messages }=awaitreq.json()returnstream(cbk.conversation.complete(null,{ messages }))}exportconstconfig={runtime: 'edge',}

Examples

Explore a wide range of examples here.

Some notable examples include:

PlatformExampleDescription
Next.jsAuthenticated Chat with ContactsDemonstrates ChatBotKit Contacts for managing end-users with authentication. Shows how to use fingerprints to track users, enable personalized experiences, and unlock authentication management for 3rd-party integrations like Google and Microsoft.
Next.jsStateless Chat (App Router + RSC + Functions + Function Request)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions as well AI functions with function requests. This is a powerful example to demonstrate the full capabilities of the ChatBotKit conversational AI platform.
Next.jsStateless Chat (App Router + RSC + Functions)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions as well AI functions.
Next.jsStateless Chat (App Router + RSC)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions.
Next.jsStateless Chat (App Router)A stateless chatbot example, where the conversation is managed by the client. This example uses the App Router.
Next.jsStateless ChatA stateless chatbot example, where the conversation is managed by the client.
Next.jsStateful ChatA basic chatbot example, where the conversation is managed by ChatBotKit.
Next.jsUser NextAuth ExampleShows how to provision isolated users through NextAuth.
NodeGPT4 Streaming AI chatbotA simple streaming AI chatbot example.
Cloudflare WorkersGPT4 AI chatbotA streaming AI chatbot example for Cloudflare Workers.

Stability

All SDK features are considered unstable unless explicitly marked as stable. Stability is indicated by the presence of a @stable tag in the documentation.

Documentation

  • Type Documentation: Detailed information on available types here.
  • LLMS.txt: Documentation suitable for coding assistants can be found here.
  • Platform Documentation: Comprehensive guide to ChatBotKit here.
  • Platform Tutorials: Step-by-step tutorials for ChatBotKit here.

Contributing

Encounter a bug or want to contribute? Open an issue or submit a pull request on our official GitHub repository.

Setup

The project is setup as a monorepo using pnpm and turbo build. Clone the reporitory and run the following commands to get started:

pnpm install

To perform type and lint checks, run:

pnpm check
pnpm lint

To build the project, run:

pnpm build

To build a specific package, run:

pnpm -F @chatbotkit/${PACKAGE_NAME} build

About

Create conversational AI solutions with custom data and abilities using ChatBotKit for JavaScript, TypeScript, React, and Next.js.

Topics

Resources

Stars

77 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ChatBotKitCBK.AIEmailDiscordFollow on Twitter

 .d8888b. 888888b. 888 d8P
d88P Y88b 888 "88b 888 d8P
888 888 888 .88P 888 d8P
888 8888888K. 888d88K
888 888 "Y88b 8888888b
888 888 888 888 888 Y88b
Y88b d88P 888 d88P 888 Y88b
"Y8888P" 8888888P" 888 Y88b .ai

ChatBotKit Node SDK

The official JavaScript and TypeScript SDK suite for ChatBotKit - a platform for building and deploying conversational AI applications. With ChatBotKit you can create bots and agents with custom data, skillsets, and integrations while keeping AI orchestration on the ChatBotKit platform.

This meta repository contains SDK packages and tools for popular platforms and frameworks such as Node.js, React, Next.js, NextAuth.js, widgets, and more.

Main Packages

The ChatBotKit Node SDK is comprised of the following packages:

PackageVersionDescription
@chatbotkit/cliNPMThe ChatBotKit CLI.
@chatbotkit/sdkNPMThe ChatBotKit API SDK.
@chatbotkit/agentNPMThe ChatBotKit Agent SDK.
@chatbotkit/reactNPMThe ChatBotKit React SDK.
@chatbotkit/nextNPMThe ChatBotKit Next.js SDK.
@chatbotkit/nextauthNPMThe ChatBotKit NextAuth.js SDK.
@chatbotkit/widgetNPMThe ChatBotKit Widget types and utilities.
@chatbotkit/fetchNPMThe ChatBotKit isometric fetch implementation.

Other Tools

This repository also contains the following tools:

PackageVersionDescription
create-cbk-appNPMA quick tool to create a new CBK application.

Why ChatBotKit?

Build lighter, future-proof AI agents. When you build with ChatBotKit, the heavy lifting happens on our servers, not in your application. This architectural advantage delivers:

  • 🪶 Lightweight Agents: Your agents stay lean because complex AI processing, model orchestration, and tool execution happen server-side. Less code in your app means faster load times and simpler maintenance.

  • 🛡️ Robust & Streamlined: Server-side processing provides a more reliable experience with built-in error handling, automatic retries, and consistent behavior across all platforms.

  • 🔄 Backward & Forward Compatible: As AI technology evolves with new models, new capabilities, and new paradigms, your agents automatically benefit. No code changes required on your end.

  • 🔮 Future-Proof: Agents you build today will remain capable tomorrow. When we add support for new AI models or capabilities, your existing agents gain those powers without any updates to your codebase.

This means you can focus on building great user experiences while ChatBotKit handles the complexity of the ever-changing AI landscape.

SDK Features

  • Easy Setup: Quick and straightforward installation process.
  • Serverless Compatibility: Works seamlessly with modern runtime environments like Serverless, Edge, Vercel, Netlify, Cloudflare Workers, Deno, AWS Lambda, and more.
  • Modern Framework Support: Built-in support for CommonJS, ECMAScript Modules, async/await, streams, etc.
  • Customizability: Tailor the chatbot’s behavior and responses to fit specific use cases.
  • Multi-Platform: Deploy chatbots on websites, mobile apps, and messaging platforms like Slack, Discord, and WhatsApp.
  • Multi-Model: Support for a wide range of language models, including GPT-3, GPT-4, Claude, and more.

ChatBotKit Capabilities

  • 🔄 Multi-modal Support: Support various language and image models from all vendors such as OpenAI, Anthropic, Mistral, AWS, Google and others.
  • 🌍 Multi-language Support: Allowing for easy customization and use in diverse linguistic contexts.
  • 💬 Conversation Management: Manage complex conversation flaws with ease.
  • 🗨 Chat History: Review and reference past conversations.
  • 💾 Custom Datasets: Organize data for bot responses.
  • 💡 Custom Skillset: Equip chatbots with unique abilities like image generation or web fetching.
  • 📄 Document File Importing: Import various document file types into chatbot datasets.
  • 🎵 Media File Importing: Import a range of media file formats into chatbot datasets.
  • 🌐 Widget Integration: Seamlessly embed chatbots on websites with customizable options.
  • 💬 Slack, Discord, WhatsApp Bot Integrations: Easy integration with popular messaging platforms.
  • 🗺 Sitemap Integration: Ingest website content into a searchable knowledge base.
  • 🎥 Streaming: Enable/disable streaming capabilities.
  • 🔒 Data Security: Robust measures to protect user data.
  • 🕵 Privacy Focus: Strong privacy controls to ensure responsible data handling.
  • 🚫 Content Moderation: Automatic scanning and flagging of abusive content.
  • 💵 Simple Pricing: Transparent and straightforward pricing.

Getting Started

Follow these steps to start with ChatBotKit:

  1. Installation:
    npm install @chatbotkit/sdk
  2. Usage: Implement the SDK in your chatbot project.

Streaming Example

This example demonstrates streaming capabilities in Edge and Serverless environments:

import{ConversationClient}from'@chatbotkit/sdk/conversation/index.js'constclient=newConversationClient(/* configuration */)forawait(const{ type, data }ofclient.complete(null,{model: 'gpt-4', messages }).stream()){if(type==='token'){process.stdout.write(data.token)}}

NextGen Example for Next.js

This example showcases how to build advanced conversational AI with streaming, function calls, server-side rendering and much more in a Next.js project:

// file: ./app/page.jsximportChatAreafrom'../components/ChatArea.jsx'exportdefaultfunctionPage(){return<ChatArea/>}// file: ./components/ChatArea.jsx'use client'import{useContext}from'react'import{complete}from'../actions/conversation.jsx'import{ChatInput,ConversationContext}from'@chatbotkit/react'importConversationManagerfrom'@chatbotkit/react/components/ConversationManager'exportfunctionChatMessages(){const{
thinking,
text,
setText,
messages,
submit,}=useContext(ConversationContext)return(<div><div>{messages.map(({ id, type, text, children })=>{switch(type){case'user':
return(<divkey={id}><div><strong>user:</strong>{text}</div></div>)case'bot':
return(<divkey={id}><div><strong>bot:</strong>{text}</div>{children ? <div>{children}</div> : null}</div>)}})}{thinking ? (<divkey="thinking"><strong>bot:</strong> thinking...
</div>) : null}</div><ChatInputvalue={text}onChange={(e)=>setText(e.target.value)}onSubmit={submit}placeholder="Type something..."style={{border: 0,outline: 'none',resize: 'none',width: '100%',marginTop: '10px',}}/></div>)}exportdefaultfunctionChatArea(){return(<ConversationManagerendpoint={complete}><ChatMessages/></ConversationManager>)}// file: ./actions/conversation.jsx'use server'importCalendarEventsfrom'../components/CalendarEvents.jsx'import{streamComplete}from'@chatbotkit/react/actions/complete'import{ChatBotKit}from'@chatbotkit/sdk'constcbk=newChatBotKit({secret: process.env.CHATBOTKIT_API_SECRET,})exportasyncfunctioncomplete({ messages }){returnstreamComplete({client: cbk.conversation,
messages,functions: [{name: 'getUserName',description: 'Get the authenticated user name',parameters: {},handler: async()=>{return'John Doe'},},{name: 'getCalendarEvents',description: 'Get a list of calendar events',parameters: {},handler: async()=>{constevents=[{id: 1,title: 'Meeting with Jane Doe'},{id: 2,title: 'Meeting with Jill Doe'},]return{children: <CalendarEventsevents={events}/>,result: {
events,},}},},{name: 'declineCalendarEvent',description: 'Decline a calendar event',parameters: {type: 'object',properties: {id: {type: 'number',description: 'The ID of the event to decline',},},required: ['id'],},handler: async({ id })=>{return`You have declined the event with ID ${id}`},},],})}

Basic Next.js Example

This quick example demonstrates how to use the SDK in a Next.js project:

// file: ./pages/index.jsimport{AutoTextarea,useConversationManager}from'@chatbotkit/react'exportdefaultfunctionIndex(){const{
thinking,
text,
setText,
messages,
submit,}=useConversationManager({endpoint: '/api/conversation/complete',})functionhandleOnKeyDown(event){if(event.keyCode===13){event.preventDefault()submit()}}return(<divstyle={{fontFamily: 'monospace',padding: '10px'}}>{messages.map(({ id, type, text })=>(<divkey={id}><strong>{type}:</strong>{text}</div>))}{thinking&&(<divkey="thinking"><strong>bot:</strong> thinking...
</div>)}<AutoTextareavalue={text}onChange={(e)=>setText(e.target.value)}onKeyDown={handleOnKeyDown}placeholder="Type something..."style={{border: 0,outline: 'none',resize: 'none',width: '100%',marginTop: '10px',}}/></div>)}// file: ./pages/api/conversation/complete.jsimport{ChatBotKit}from'@chatbotkit/sdk'import{stream}from'@chatbotkit/next/edge'constcbk=newChatBotKit({secret: process.env.CHATBOTKIT_API_SECRET,})exportdefaultasyncfunctionhandler(req){const{ messages }=awaitreq.json()returnstream(cbk.conversation.complete(null,{ messages }))}exportconstconfig={runtime: 'edge',}

Examples

Explore a wide range of examples here.

Some notable examples include:

PlatformExampleDescription
Next.jsAuthenticated Chat with ContactsDemonstrates ChatBotKit Contacts for managing end-users with authentication. Shows how to use fingerprints to track users, enable personalized experiences, and unlock authentication management for 3rd-party integrations like Google and Microsoft.
Next.jsStateless Chat (App Router + RSC + Functions + Function Request)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions as well AI functions with function requests. This is a powerful example to demonstrate the full capabilities of the ChatBotKit conversational AI platform.
Next.jsStateless Chat (App Router + RSC + Functions)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions as well AI functions.
Next.jsStateless Chat (App Router + RSC)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions.
Next.jsStateless Chat (App Router)A stateless chatbot example, where the conversation is managed by the client. This example uses the App Router.
Next.jsStateless ChatA stateless chatbot example, where the conversation is managed by the client.
Next.jsStateful ChatA basic chatbot example, where the conversation is managed by ChatBotKit.
Next.jsUser NextAuth ExampleShows how to provision isolated users through NextAuth.
NodeGPT4 Streaming AI chatbotA simple streaming AI chatbot example.
Cloudflare WorkersGPT4 AI chatbotA streaming AI chatbot example for Cloudflare Workers.

Stability

All SDK features are considered unstable unless explicitly marked as stable. Stability is indicated by the presence of a @stable tag in the documentation.

Documentation

  • Type Documentation: Detailed information on available types here.
  • LLMS.txt: Documentation suitable for coding assistants can be found here.
  • Platform Documentation: Comprehensive guide to ChatBotKit here.
  • Platform Tutorials: Step-by-step tutorials for ChatBotKit here.

Contributing

Encounter a bug or want to contribute? Open an issue or submit a pull request on our official GitHub repository.

Setup

The project is setup as a monorepo using pnpm and turbo build. Clone the reporitory and run the following commands to get started:

pnpm install

To perform type and lint checks, run:

pnpm check
pnpm lint

To build the project, run:

pnpm build

To build a specific package, run:

pnpm -F @chatbotkit/${PACKAGE_NAME} build

About

Create conversational AI solutions with custom data and abilities using ChatBotKit for JavaScript, TypeScript, React, and Next.js.

Topics

Resources

Stars

77 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

ChatBotKitCBK.AIEmailDiscordFollow on Twitter

 .d8888b. 888888b. 888 d8P
d88P Y88b 888 "88b 888 d8P
888 888 888 .88P 888 d8P
888 8888888K. 888d88K
888 888 "Y88b 8888888b
888 888 888 888 888 Y88b
Y88b d88P 888 d88P 888 Y88b
"Y8888P" 8888888P" 888 Y88b .ai

ChatBotKit Node SDK

The official JavaScript and TypeScript SDK suite for ChatBotKit - a platform for building and deploying conversational AI applications. With ChatBotKit you can create bots and agents with custom data, skillsets, and integrations while keeping AI orchestration on the ChatBotKit platform.

This meta repository contains SDK packages and tools for popular platforms and frameworks such as Node.js, React, Next.js, NextAuth.js, widgets, and more.

Main Packages

The ChatBotKit Node SDK is comprised of the following packages:

PackageVersionDescription
@chatbotkit/cliNPMThe ChatBotKit CLI.
@chatbotkit/sdkNPMThe ChatBotKit API SDK.
@chatbotkit/agentNPMThe ChatBotKit Agent SDK.
@chatbotkit/reactNPMThe ChatBotKit React SDK.
@chatbotkit/nextNPMThe ChatBotKit Next.js SDK.
@chatbotkit/nextauthNPMThe ChatBotKit NextAuth.js SDK.
@chatbotkit/widgetNPMThe ChatBotKit Widget types and utilities.
@chatbotkit/fetchNPMThe ChatBotKit isometric fetch implementation.

Other Tools

This repository also contains the following tools:

PackageVersionDescription
create-cbk-appNPMA quick tool to create a new CBK application.

Why ChatBotKit?

Build lighter, future-proof AI agents. When you build with ChatBotKit, the heavy lifting happens on our servers, not in your application. This architectural advantage delivers:

  • 🪶 Lightweight Agents: Your agents stay lean because complex AI processing, model orchestration, and tool execution happen server-side. Less code in your app means faster load times and simpler maintenance.

  • 🛡️ Robust & Streamlined: Server-side processing provides a more reliable experience with built-in error handling, automatic retries, and consistent behavior across all platforms.

  • 🔄 Backward & Forward Compatible: As AI technology evolves with new models, new capabilities, and new paradigms, your agents automatically benefit. No code changes required on your end.

  • 🔮 Future-Proof: Agents you build today will remain capable tomorrow. When we add support for new AI models or capabilities, your existing agents gain those powers without any updates to your codebase.

This means you can focus on building great user experiences while ChatBotKit handles the complexity of the ever-changing AI landscape.

SDK Features

  • Easy Setup: Quick and straightforward installation process.
  • Serverless Compatibility: Works seamlessly with modern runtime environments like Serverless, Edge, Vercel, Netlify, Cloudflare Workers, Deno, AWS Lambda, and more.
  • Modern Framework Support: Built-in support for CommonJS, ECMAScript Modules, async/await, streams, etc.
  • Customizability: Tailor the chatbot’s behavior and responses to fit specific use cases.
  • Multi-Platform: Deploy chatbots on websites, mobile apps, and messaging platforms like Slack, Discord, and WhatsApp.
  • Multi-Model: Support for a wide range of language models, including GPT-3, GPT-4, Claude, and more.

ChatBotKit Capabilities

  • 🔄 Multi-modal Support: Support various language and image models from all vendors such as OpenAI, Anthropic, Mistral, AWS, Google and others.
  • 🌍 Multi-language Support: Allowing for easy customization and use in diverse linguistic contexts.
  • 💬 Conversation Management: Manage complex conversation flaws with ease.
  • 🗨 Chat History: Review and reference past conversations.
  • 💾 Custom Datasets: Organize data for bot responses.
  • 💡 Custom Skillset: Equip chatbots with unique abilities like image generation or web fetching.
  • 📄 Document File Importing: Import various document file types into chatbot datasets.
  • 🎵 Media File Importing: Import a range of media file formats into chatbot datasets.
  • 🌐 Widget Integration: Seamlessly embed chatbots on websites with customizable options.
  • 💬 Slack, Discord, WhatsApp Bot Integrations: Easy integration with popular messaging platforms.
  • 🗺 Sitemap Integration: Ingest website content into a searchable knowledge base.
  • 🎥 Streaming: Enable/disable streaming capabilities.
  • 🔒 Data Security: Robust measures to protect user data.
  • 🕵 Privacy Focus: Strong privacy controls to ensure responsible data handling.
  • 🚫 Content Moderation: Automatic scanning and flagging of abusive content.
  • 💵 Simple Pricing: Transparent and straightforward pricing.

Getting Started

Follow these steps to start with ChatBotKit:

  1. Installation:
    npm install @chatbotkit/sdk
  2. Usage: Implement the SDK in your chatbot project.

Streaming Example

This example demonstrates streaming capabilities in Edge and Serverless environments:

import{ConversationClient}from'@chatbotkit/sdk/conversation/index.js'constclient=newConversationClient(/* configuration */)forawait(const{ type, data }ofclient.complete(null,{model: 'gpt-4', messages }).stream()){if(type==='token'){process.stdout.write(data.token)}}

NextGen Example for Next.js

This example showcases how to build advanced conversational AI with streaming, function calls, server-side rendering and much more in a Next.js project:

// file: ./app/page.jsximportChatAreafrom'../components/ChatArea.jsx'exportdefaultfunctionPage(){return<ChatArea/>}// file: ./components/ChatArea.jsx'use client'import{useContext}from'react'import{complete}from'../actions/conversation.jsx'import{ChatInput,ConversationContext}from'@chatbotkit/react'importConversationManagerfrom'@chatbotkit/react/components/ConversationManager'exportfunctionChatMessages(){const{
thinking,
text,
setText,
messages,
submit,}=useContext(ConversationContext)return(<div><div>{messages.map(({ id, type, text, children })=>{switch(type){case'user':
return(<divkey={id}><div><strong>user:</strong>{text}</div></div>)case'bot':
return(<divkey={id}><div><strong>bot:</strong>{text}</div>{children ? <div>{children}</div> : null}</div>)}})}{thinking ? (<divkey="thinking"><strong>bot:</strong> thinking...
</div>) : null}</div><ChatInputvalue={text}onChange={(e)=>setText(e.target.value)}onSubmit={submit}placeholder="Type something..."style={{border: 0,outline: 'none',resize: 'none',width: '100%',marginTop: '10px',}}/></div>)}exportdefaultfunctionChatArea(){return(<ConversationManagerendpoint={complete}><ChatMessages/></ConversationManager>)}// file: ./actions/conversation.jsx'use server'importCalendarEventsfrom'../components/CalendarEvents.jsx'import{streamComplete}from'@chatbotkit/react/actions/complete'import{ChatBotKit}from'@chatbotkit/sdk'constcbk=newChatBotKit({secret: process.env.CHATBOTKIT_API_SECRET,})exportasyncfunctioncomplete({ messages }){returnstreamComplete({client: cbk.conversation,
messages,functions: [{name: 'getUserName',description: 'Get the authenticated user name',parameters: {},handler: async()=>{return'John Doe'},},{name: 'getCalendarEvents',description: 'Get a list of calendar events',parameters: {},handler: async()=>{constevents=[{id: 1,title: 'Meeting with Jane Doe'},{id: 2,title: 'Meeting with Jill Doe'},]return{children: <CalendarEventsevents={events}/>,result: {
events,},}},},{name: 'declineCalendarEvent',description: 'Decline a calendar event',parameters: {type: 'object',properties: {id: {type: 'number',description: 'The ID of the event to decline',},},required: ['id'],},handler: async({ id })=>{return`You have declined the event with ID ${id}`},},],})}

Basic Next.js Example

This quick example demonstrates how to use the SDK in a Next.js project:

// file: ./pages/index.jsimport{AutoTextarea,useConversationManager}from'@chatbotkit/react'exportdefaultfunctionIndex(){const{
thinking,
text,
setText,
messages,
submit,}=useConversationManager({endpoint: '/api/conversation/complete',})functionhandleOnKeyDown(event){if(event.keyCode===13){event.preventDefault()submit()}}return(<divstyle={{fontFamily: 'monospace',padding: '10px'}}>{messages.map(({ id, type, text })=>(<divkey={id}><strong>{type}:</strong>{text}</div>))}{thinking&&(<divkey="thinking"><strong>bot:</strong> thinking...
</div>)}<AutoTextareavalue={text}onChange={(e)=>setText(e.target.value)}onKeyDown={handleOnKeyDown}placeholder="Type something..."style={{border: 0,outline: 'none',resize: 'none',width: '100%',marginTop: '10px',}}/></div>)}// file: ./pages/api/conversation/complete.jsimport{ChatBotKit}from'@chatbotkit/sdk'import{stream}from'@chatbotkit/next/edge'constcbk=newChatBotKit({secret: process.env.CHATBOTKIT_API_SECRET,})exportdefaultasyncfunctionhandler(req){const{ messages }=awaitreq.json()returnstream(cbk.conversation.complete(null,{ messages }))}exportconstconfig={runtime: 'edge',}

Examples

Explore a wide range of examples here.

Some notable examples include:

PlatformExampleDescription
Next.jsAuthenticated Chat with ContactsDemonstrates ChatBotKit Contacts for managing end-users with authentication. Shows how to use fingerprints to track users, enable personalized experiences, and unlock authentication management for 3rd-party integrations like Google and Microsoft.
Next.jsStateless Chat (App Router + RSC + Functions + Function Request)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions as well AI functions with function requests. This is a powerful example to demonstrate the full capabilities of the ChatBotKit conversational AI platform.
Next.jsStateless Chat (App Router + RSC + Functions)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions as well AI functions.
Next.jsStateless Chat (App Router + RSC)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions.
Next.jsStateless Chat (App Router)A stateless chatbot example, where the conversation is managed by the client. This example uses the App Router.
Next.jsStateless ChatA stateless chatbot example, where the conversation is managed by the client.
Next.jsStateful ChatA basic chatbot example, where the conversation is managed by ChatBotKit.
Next.jsUser NextAuth ExampleShows how to provision isolated users through NextAuth.
NodeGPT4 Streaming AI chatbotA simple streaming AI chatbot example.
Cloudflare WorkersGPT4 AI chatbotA streaming AI chatbot example for Cloudflare Workers.

Stability

All SDK features are considered unstable unless explicitly marked as stable. Stability is indicated by the presence of a @stable tag in the documentation.

Documentation

  • Type Documentation: Detailed information on available types here.
  • LLMS.txt: Documentation suitable for coding assistants can be found here.
  • Platform Documentation: Comprehensive guide to ChatBotKit here.
  • Platform Tutorials: Step-by-step tutorials for ChatBotKit here.

Contributing

Encounter a bug or want to contribute? Open an issue or submit a pull request on our official GitHub repository.

Setup

The project is setup as a monorepo using pnpm and turbo build. Clone the reporitory and run the following commands to get started:

pnpm install

To perform type and lint checks, run:

pnpm check
pnpm lint

To build the project, run:

pnpm build

To build a specific package, run:

pnpm -F @chatbotkit/${PACKAGE_NAME} build

About

Create conversational AI solutions with custom data and abilities using ChatBotKit for JavaScript, TypeScript, React, and Next.js.

Topics

Resources

Stars

77 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ChatBotKitCBK.AIEmailDiscordFollow on Twitter

 .d8888b. 888888b. 888 d8P
d88P Y88b 888 "88b 888 d8P
888 888 888 .88P 888 d8P
888 8888888K. 888d88K
888 888 "Y88b 8888888b
888 888 888 888 888 Y88b
Y88b d88P 888 d88P 888 Y88b
"Y8888P" 8888888P" 888 Y88b .ai

ChatBotKit Node SDK

The official JavaScript and TypeScript SDK suite for ChatBotKit - a platform for building and deploying conversational AI applications. With ChatBotKit you can create bots and agents with custom data, skillsets, and integrations while keeping AI orchestration on the ChatBotKit platform.

This meta repository contains SDK packages and tools for popular platforms and frameworks such as Node.js, React, Next.js, NextAuth.js, widgets, and more.

Main Packages

The ChatBotKit Node SDK is comprised of the following packages:

PackageVersionDescription
@chatbotkit/cliNPMThe ChatBotKit CLI.
@chatbotkit/sdkNPMThe ChatBotKit API SDK.
@chatbotkit/agentNPMThe ChatBotKit Agent SDK.
@chatbotkit/reactNPMThe ChatBotKit React SDK.
@chatbotkit/nextNPMThe ChatBotKit Next.js SDK.
@chatbotkit/nextauthNPMThe ChatBotKit NextAuth.js SDK.
@chatbotkit/widgetNPMThe ChatBotKit Widget types and utilities.
@chatbotkit/fetchNPMThe ChatBotKit isometric fetch implementation.

Other Tools

This repository also contains the following tools:

PackageVersionDescription
create-cbk-appNPMA quick tool to create a new CBK application.

Why ChatBotKit?

Build lighter, future-proof AI agents. When you build with ChatBotKit, the heavy lifting happens on our servers, not in your application. This architectural advantage delivers:

  • 🪶 Lightweight Agents: Your agents stay lean because complex AI processing, model orchestration, and tool execution happen server-side. Less code in your app means faster load times and simpler maintenance.

  • 🛡️ Robust & Streamlined: Server-side processing provides a more reliable experience with built-in error handling, automatic retries, and consistent behavior across all platforms.

  • 🔄 Backward & Forward Compatible: As AI technology evolves with new models, new capabilities, and new paradigms, your agents automatically benefit. No code changes required on your end.

  • 🔮 Future-Proof: Agents you build today will remain capable tomorrow. When we add support for new AI models or capabilities, your existing agents gain those powers without any updates to your codebase.

This means you can focus on building great user experiences while ChatBotKit handles the complexity of the ever-changing AI landscape.

SDK Features

  • Easy Setup: Quick and straightforward installation process.
  • Serverless Compatibility: Works seamlessly with modern runtime environments like Serverless, Edge, Vercel, Netlify, Cloudflare Workers, Deno, AWS Lambda, and more.
  • Modern Framework Support: Built-in support for CommonJS, ECMAScript Modules, async/await, streams, etc.
  • Customizability: Tailor the chatbot’s behavior and responses to fit specific use cases.
  • Multi-Platform: Deploy chatbots on websites, mobile apps, and messaging platforms like Slack, Discord, and WhatsApp.
  • Multi-Model: Support for a wide range of language models, including GPT-3, GPT-4, Claude, and more.

ChatBotKit Capabilities

  • 🔄 Multi-modal Support: Support various language and image models from all vendors such as OpenAI, Anthropic, Mistral, AWS, Google and others.
  • 🌍 Multi-language Support: Allowing for easy customization and use in diverse linguistic contexts.
  • 💬 Conversation Management: Manage complex conversation flaws with ease.
  • 🗨 Chat History: Review and reference past conversations.
  • 💾 Custom Datasets: Organize data for bot responses.
  • 💡 Custom Skillset: Equip chatbots with unique abilities like image generation or web fetching.
  • 📄 Document File Importing: Import various document file types into chatbot datasets.
  • 🎵 Media File Importing: Import a range of media file formats into chatbot datasets.
  • 🌐 Widget Integration: Seamlessly embed chatbots on websites with customizable options.
  • 💬 Slack, Discord, WhatsApp Bot Integrations: Easy integration with popular messaging platforms.
  • 🗺 Sitemap Integration: Ingest website content into a searchable knowledge base.
  • 🎥 Streaming: Enable/disable streaming capabilities.
  • 🔒 Data Security: Robust measures to protect user data.
  • 🕵 Privacy Focus: Strong privacy controls to ensure responsible data handling.
  • 🚫 Content Moderation: Automatic scanning and flagging of abusive content.
  • 💵 Simple Pricing: Transparent and straightforward pricing.

Getting Started

Follow these steps to start with ChatBotKit:

  1. Installation:
    npm install @chatbotkit/sdk
  2. Usage: Implement the SDK in your chatbot project.

Streaming Example

This example demonstrates streaming capabilities in Edge and Serverless environments:

import{ConversationClient}from'@chatbotkit/sdk/conversation/index.js'constclient=newConversationClient(/* configuration */)forawait(const{ type, data }ofclient.complete(null,{model: 'gpt-4', messages }).stream()){if(type==='token'){process.stdout.write(data.token)}}

NextGen Example for Next.js

This example showcases how to build advanced conversational AI with streaming, function calls, server-side rendering and much more in a Next.js project:

// file: ./app/page.jsximportChatAreafrom'../components/ChatArea.jsx'exportdefaultfunctionPage(){return<ChatArea/>}// file: ./components/ChatArea.jsx'use client'import{useContext}from'react'import{complete}from'../actions/conversation.jsx'import{ChatInput,ConversationContext}from'@chatbotkit/react'importConversationManagerfrom'@chatbotkit/react/components/ConversationManager'exportfunctionChatMessages(){const{
thinking,
text,
setText,
messages,
submit,}=useContext(ConversationContext)return(<div><div>{messages.map(({ id, type, text, children })=>{switch(type){case'user':
return(<divkey={id}><div><strong>user:</strong>{text}</div></div>)case'bot':
return(<divkey={id}><div><strong>bot:</strong>{text}</div>{children ? <div>{children}</div> : null}</div>)}})}{thinking ? (<divkey="thinking"><strong>bot:</strong> thinking...
</div>) : null}</div><ChatInputvalue={text}onChange={(e)=>setText(e.target.value)}onSubmit={submit}placeholder="Type something..."style={{border: 0,outline: 'none',resize: 'none',width: '100%',marginTop: '10px',}}/></div>)}exportdefaultfunctionChatArea(){return(<ConversationManagerendpoint={complete}><ChatMessages/></ConversationManager>)}// file: ./actions/conversation.jsx'use server'importCalendarEventsfrom'../components/CalendarEvents.jsx'import{streamComplete}from'@chatbotkit/react/actions/complete'import{ChatBotKit}from'@chatbotkit/sdk'constcbk=newChatBotKit({secret: process.env.CHATBOTKIT_API_SECRET,})exportasyncfunctioncomplete({ messages }){returnstreamComplete({client: cbk.conversation,
messages,functions: [{name: 'getUserName',description: 'Get the authenticated user name',parameters: {},handler: async()=>{return'John Doe'},},{name: 'getCalendarEvents',description: 'Get a list of calendar events',parameters: {},handler: async()=>{constevents=[{id: 1,title: 'Meeting with Jane Doe'},{id: 2,title: 'Meeting with Jill Doe'},]return{children: <CalendarEventsevents={events}/>,result: {
events,},}},},{name: 'declineCalendarEvent',description: 'Decline a calendar event',parameters: {type: 'object',properties: {id: {type: 'number',description: 'The ID of the event to decline',},},required: ['id'],},handler: async({ id })=>{return`You have declined the event with ID ${id}`},},],})}

Basic Next.js Example

This quick example demonstrates how to use the SDK in a Next.js project:

// file: ./pages/index.jsimport{AutoTextarea,useConversationManager}from'@chatbotkit/react'exportdefaultfunctionIndex(){const{
thinking,
text,
setText,
messages,
submit,}=useConversationManager({endpoint: '/api/conversation/complete',})functionhandleOnKeyDown(event){if(event.keyCode===13){event.preventDefault()submit()}}return(<divstyle={{fontFamily: 'monospace',padding: '10px'}}>{messages.map(({ id, type, text })=>(<divkey={id}><strong>{type}:</strong>{text}</div>))}{thinking&&(<divkey="thinking"><strong>bot:</strong> thinking...
</div>)}<AutoTextareavalue={text}onChange={(e)=>setText(e.target.value)}onKeyDown={handleOnKeyDown}placeholder="Type something..."style={{border: 0,outline: 'none',resize: 'none',width: '100%',marginTop: '10px',}}/></div>)}// file: ./pages/api/conversation/complete.jsimport{ChatBotKit}from'@chatbotkit/sdk'import{stream}from'@chatbotkit/next/edge'constcbk=newChatBotKit({secret: process.env.CHATBOTKIT_API_SECRET,})exportdefaultasyncfunctionhandler(req){const{ messages }=awaitreq.json()returnstream(cbk.conversation.complete(null,{ messages }))}exportconstconfig={runtime: 'edge',}

Examples

Explore a wide range of examples here.

Some notable examples include:

PlatformExampleDescription
Next.jsAuthenticated Chat with ContactsDemonstrates ChatBotKit Contacts for managing end-users with authentication. Shows how to use fingerprints to track users, enable personalized experiences, and unlock authentication management for 3rd-party integrations like Google and Microsoft.
Next.jsStateless Chat (App Router + RSC + Functions + Function Request)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions as well AI functions with function requests. This is a powerful example to demonstrate the full capabilities of the ChatBotKit conversational AI platform.
Next.jsStateless Chat (App Router + RSC + Functions)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions as well AI functions.
Next.jsStateless Chat (App Router + RSC)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions.
Next.jsStateless Chat (App Router)A stateless chatbot example, where the conversation is managed by the client. This example uses the App Router.
Next.jsStateless ChatA stateless chatbot example, where the conversation is managed by the client.
Next.jsStateful ChatA basic chatbot example, where the conversation is managed by ChatBotKit.
Next.jsUser NextAuth ExampleShows how to provision isolated users through NextAuth.
NodeGPT4 Streaming AI chatbotA simple streaming AI chatbot example.
Cloudflare WorkersGPT4 AI chatbotA streaming AI chatbot example for Cloudflare Workers.

Stability

All SDK features are considered unstable unless explicitly marked as stable. Stability is indicated by the presence of a @stable tag in the documentation.

Documentation

  • Type Documentation: Detailed information on available types here.
  • LLMS.txt: Documentation suitable for coding assistants can be found here.
  • Platform Documentation: Comprehensive guide to ChatBotKit here.
  • Platform Tutorials: Step-by-step tutorials for ChatBotKit here.

Contributing

Encounter a bug or want to contribute? Open an issue or submit a pull request on our official GitHub repository.

Setup

The project is setup as a monorepo using pnpm and turbo build. Clone the reporitory and run the following commands to get started:

pnpm install

To perform type and lint checks, run:

pnpm check
pnpm lint

To build the project, run:

pnpm build

To build a specific package, run:

pnpm -F @chatbotkit/${PACKAGE_NAME} build

About

Create conversational AI solutions with custom data and abilities using ChatBotKit for JavaScript, TypeScript, React, and Next.js.

Topics

Resources

Stars

77 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

ChatBotKitCBK.AIEmailDiscordFollow on Twitter

 .d8888b. 888888b. 888 d8P
d88P Y88b 888 "88b 888 d8P
888 888 888 .88P 888 d8P
888 8888888K. 888d88K
888 888 "Y88b 8888888b
888 888 888 888 888 Y88b
Y88b d88P 888 d88P 888 Y88b
"Y8888P" 8888888P" 888 Y88b .ai

ChatBotKit Node SDK

The official JavaScript and TypeScript SDK suite for ChatBotKit - a platform for building and deploying conversational AI applications. With ChatBotKit you can create bots and agents with custom data, skillsets, and integrations while keeping AI orchestration on the ChatBotKit platform.

This meta repository contains SDK packages and tools for popular platforms and frameworks such as Node.js, React, Next.js, NextAuth.js, widgets, and more.

Main Packages

The ChatBotKit Node SDK is comprised of the following packages:

PackageVersionDescription
@chatbotkit/cliNPMThe ChatBotKit CLI.
@chatbotkit/sdkNPMThe ChatBotKit API SDK.
@chatbotkit/agentNPMThe ChatBotKit Agent SDK.
@chatbotkit/reactNPMThe ChatBotKit React SDK.
@chatbotkit/nextNPMThe ChatBotKit Next.js SDK.
@chatbotkit/nextauthNPMThe ChatBotKit NextAuth.js SDK.
@chatbotkit/widgetNPMThe ChatBotKit Widget types and utilities.
@chatbotkit/fetchNPMThe ChatBotKit isometric fetch implementation.

Other Tools

This repository also contains the following tools:

PackageVersionDescription
create-cbk-appNPMA quick tool to create a new CBK application.

Why ChatBotKit?

Build lighter, future-proof AI agents. When you build with ChatBotKit, the heavy lifting happens on our servers, not in your application. This architectural advantage delivers:

  • 🪶 Lightweight Agents: Your agents stay lean because complex AI processing, model orchestration, and tool execution happen server-side. Less code in your app means faster load times and simpler maintenance.

  • 🛡️ Robust & Streamlined: Server-side processing provides a more reliable experience with built-in error handling, automatic retries, and consistent behavior across all platforms.

  • 🔄 Backward & Forward Compatible: As AI technology evolves with new models, new capabilities, and new paradigms, your agents automatically benefit. No code changes required on your end.

  • 🔮 Future-Proof: Agents you build today will remain capable tomorrow. When we add support for new AI models or capabilities, your existing agents gain those powers without any updates to your codebase.

This means you can focus on building great user experiences while ChatBotKit handles the complexity of the ever-changing AI landscape.

SDK Features

  • Easy Setup: Quick and straightforward installation process.
  • Serverless Compatibility: Works seamlessly with modern runtime environments like Serverless, Edge, Vercel, Netlify, Cloudflare Workers, Deno, AWS Lambda, and more.
  • Modern Framework Support: Built-in support for CommonJS, ECMAScript Modules, async/await, streams, etc.
  • Customizability: Tailor the chatbot’s behavior and responses to fit specific use cases.
  • Multi-Platform: Deploy chatbots on websites, mobile apps, and messaging platforms like Slack, Discord, and WhatsApp.
  • Multi-Model: Support for a wide range of language models, including GPT-3, GPT-4, Claude, and more.

ChatBotKit Capabilities

  • 🔄 Multi-modal Support: Support various language and image models from all vendors such as OpenAI, Anthropic, Mistral, AWS, Google and others.
  • 🌍 Multi-language Support: Allowing for easy customization and use in diverse linguistic contexts.
  • 💬 Conversation Management: Manage complex conversation flaws with ease.
  • 🗨 Chat History: Review and reference past conversations.
  • 💾 Custom Datasets: Organize data for bot responses.
  • 💡 Custom Skillset: Equip chatbots with unique abilities like image generation or web fetching.
  • 📄 Document File Importing: Import various document file types into chatbot datasets.
  • 🎵 Media File Importing: Import a range of media file formats into chatbot datasets.
  • 🌐 Widget Integration: Seamlessly embed chatbots on websites with customizable options.
  • 💬 Slack, Discord, WhatsApp Bot Integrations: Easy integration with popular messaging platforms.
  • 🗺 Sitemap Integration: Ingest website content into a searchable knowledge base.
  • 🎥 Streaming: Enable/disable streaming capabilities.
  • 🔒 Data Security: Robust measures to protect user data.
  • 🕵 Privacy Focus: Strong privacy controls to ensure responsible data handling.
  • 🚫 Content Moderation: Automatic scanning and flagging of abusive content.
  • 💵 Simple Pricing: Transparent and straightforward pricing.

Getting Started

Follow these steps to start with ChatBotKit:

  1. Installation:
    npm install @chatbotkit/sdk
  2. Usage: Implement the SDK in your chatbot project.

Streaming Example

This example demonstrates streaming capabilities in Edge and Serverless environments:

import{ConversationClient}from'@chatbotkit/sdk/conversation/index.js'constclient=newConversationClient(/* configuration */)forawait(const{ type, data }ofclient.complete(null,{model: 'gpt-4', messages }).stream()){if(type==='token'){process.stdout.write(data.token)}}

NextGen Example for Next.js

This example showcases how to build advanced conversational AI with streaming, function calls, server-side rendering and much more in a Next.js project:

// file: ./app/page.jsximportChatAreafrom'../components/ChatArea.jsx'exportdefaultfunctionPage(){return<ChatArea/>}// file: ./components/ChatArea.jsx'use client'import{useContext}from'react'import{complete}from'../actions/conversation.jsx'import{ChatInput,ConversationContext}from'@chatbotkit/react'importConversationManagerfrom'@chatbotkit/react/components/ConversationManager'exportfunctionChatMessages(){const{
thinking,
text,
setText,
messages,
submit,}=useContext(ConversationContext)return(<div><div>{messages.map(({ id, type, text, children })=>{switch(type){case'user':
return(<divkey={id}><div><strong>user:</strong>{text}</div></div>)case'bot':
return(<divkey={id}><div><strong>bot:</strong>{text}</div>{children ? <div>{children}</div> : null}</div>)}})}{thinking ? (<divkey="thinking"><strong>bot:</strong> thinking...
</div>) : null}</div><ChatInputvalue={text}onChange={(e)=>setText(e.target.value)}onSubmit={submit}placeholder="Type something..."style={{border: 0,outline: 'none',resize: 'none',width: '100%',marginTop: '10px',}}/></div>)}exportdefaultfunctionChatArea(){return(<ConversationManagerendpoint={complete}><ChatMessages/></ConversationManager>)}// file: ./actions/conversation.jsx'use server'importCalendarEventsfrom'../components/CalendarEvents.jsx'import{streamComplete}from'@chatbotkit/react/actions/complete'import{ChatBotKit}from'@chatbotkit/sdk'constcbk=newChatBotKit({secret: process.env.CHATBOTKIT_API_SECRET,})exportasyncfunctioncomplete({ messages }){returnstreamComplete({client: cbk.conversation,
messages,functions: [{name: 'getUserName',description: 'Get the authenticated user name',parameters: {},handler: async()=>{return'John Doe'},},{name: 'getCalendarEvents',description: 'Get a list of calendar events',parameters: {},handler: async()=>{constevents=[{id: 1,title: 'Meeting with Jane Doe'},{id: 2,title: 'Meeting with Jill Doe'},]return{children: <CalendarEventsevents={events}/>,result: {
events,},}},},{name: 'declineCalendarEvent',description: 'Decline a calendar event',parameters: {type: 'object',properties: {id: {type: 'number',description: 'The ID of the event to decline',},},required: ['id'],},handler: async({ id })=>{return`You have declined the event with ID ${id}`},},],})}

Basic Next.js Example

This quick example demonstrates how to use the SDK in a Next.js project:

// file: ./pages/index.jsimport{AutoTextarea,useConversationManager}from'@chatbotkit/react'exportdefaultfunctionIndex(){const{
thinking,
text,
setText,
messages,
submit,}=useConversationManager({endpoint: '/api/conversation/complete',})functionhandleOnKeyDown(event){if(event.keyCode===13){event.preventDefault()submit()}}return(<divstyle={{fontFamily: 'monospace',padding: '10px'}}>{messages.map(({ id, type, text })=>(<divkey={id}><strong>{type}:</strong>{text}</div>))}{thinking&&(<divkey="thinking"><strong>bot:</strong> thinking...
</div>)}<AutoTextareavalue={text}onChange={(e)=>setText(e.target.value)}onKeyDown={handleOnKeyDown}placeholder="Type something..."style={{border: 0,outline: 'none',resize: 'none',width: '100%',marginTop: '10px',}}/></div>)}// file: ./pages/api/conversation/complete.jsimport{ChatBotKit}from'@chatbotkit/sdk'import{stream}from'@chatbotkit/next/edge'constcbk=newChatBotKit({secret: process.env.CHATBOTKIT_API_SECRET,})exportdefaultasyncfunctionhandler(req){const{ messages }=awaitreq.json()returnstream(cbk.conversation.complete(null,{ messages }))}exportconstconfig={runtime: 'edge',}

Examples

Explore a wide range of examples here.

Some notable examples include:

PlatformExampleDescription
Next.jsAuthenticated Chat with ContactsDemonstrates ChatBotKit Contacts for managing end-users with authentication. Shows how to use fingerprints to track users, enable personalized experiences, and unlock authentication management for 3rd-party integrations like Google and Microsoft.
Next.jsStateless Chat (App Router + RSC + Functions + Function Request)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions as well AI functions with function requests. This is a powerful example to demonstrate the full capabilities of the ChatBotKit conversational AI platform.
Next.jsStateless Chat (App Router + RSC + Functions)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions as well AI functions.
Next.jsStateless Chat (App Router + RSC)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions.
Next.jsStateless Chat (App Router)A stateless chatbot example, where the conversation is managed by the client. This example uses the App Router.
Next.jsStateless ChatA stateless chatbot example, where the conversation is managed by the client.
Next.jsStateful ChatA basic chatbot example, where the conversation is managed by ChatBotKit.
Next.jsUser NextAuth ExampleShows how to provision isolated users through NextAuth.
NodeGPT4 Streaming AI chatbotA simple streaming AI chatbot example.
Cloudflare WorkersGPT4 AI chatbotA streaming AI chatbot example for Cloudflare Workers.

Stability

All SDK features are considered unstable unless explicitly marked as stable. Stability is indicated by the presence of a @stable tag in the documentation.

Documentation

  • Type Documentation: Detailed information on available types here.
  • LLMS.txt: Documentation suitable for coding assistants can be found here.
  • Platform Documentation: Comprehensive guide to ChatBotKit here.
  • Platform Tutorials: Step-by-step tutorials for ChatBotKit here.

Contributing

Encounter a bug or want to contribute? Open an issue or submit a pull request on our official GitHub repository.

Setup

The project is setup as a monorepo using pnpm and turbo build. Clone the reporitory and run the following commands to get started:

pnpm install

To perform type and lint checks, run:

pnpm check
pnpm lint

To build the project, run:

pnpm build

To build a specific package, run:

pnpm -F @chatbotkit/${PACKAGE_NAME} build

About

Create conversational AI solutions with custom data and abilities using ChatBotKit for JavaScript, TypeScript, React, and Next.js.

Topics

Resources

Stars

77 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

ChatBotKitCBK.AIEmailDiscordFollow on Twitter

 .d8888b. 888888b. 888 d8P
d88P Y88b 888 "88b 888 d8P
888 888 888 .88P 888 d8P
888 8888888K. 888d88K
888 888 "Y88b 8888888b
888 888 888 888 888 Y88b
Y88b d88P 888 d88P 888 Y88b
"Y8888P" 8888888P" 888 Y88b .ai

ChatBotKit Node SDK

The official JavaScript and TypeScript SDK suite for ChatBotKit - a platform for building and deploying conversational AI applications. With ChatBotKit you can create bots and agents with custom data, skillsets, and integrations while keeping AI orchestration on the ChatBotKit platform.

This meta repository contains SDK packages and tools for popular platforms and frameworks such as Node.js, React, Next.js, NextAuth.js, widgets, and more.

Main Packages

The ChatBotKit Node SDK is comprised of the following packages:

PackageVersionDescription
@chatbotkit/cliNPMThe ChatBotKit CLI.
@chatbotkit/sdkNPMThe ChatBotKit API SDK.
@chatbotkit/agentNPMThe ChatBotKit Agent SDK.
@chatbotkit/reactNPMThe ChatBotKit React SDK.
@chatbotkit/nextNPMThe ChatBotKit Next.js SDK.
@chatbotkit/nextauthNPMThe ChatBotKit NextAuth.js SDK.
@chatbotkit/widgetNPMThe ChatBotKit Widget types and utilities.
@chatbotkit/fetchNPMThe ChatBotKit isometric fetch implementation.

Other Tools

This repository also contains the following tools:

PackageVersionDescription
create-cbk-appNPMA quick tool to create a new CBK application.

Why ChatBotKit?

Build lighter, future-proof AI agents. When you build with ChatBotKit, the heavy lifting happens on our servers, not in your application. This architectural advantage delivers:

  • 🪶 Lightweight Agents: Your agents stay lean because complex AI processing, model orchestration, and tool execution happen server-side. Less code in your app means faster load times and simpler maintenance.

  • 🛡️ Robust & Streamlined: Server-side processing provides a more reliable experience with built-in error handling, automatic retries, and consistent behavior across all platforms.

  • 🔄 Backward & Forward Compatible: As AI technology evolves with new models, new capabilities, and new paradigms, your agents automatically benefit. No code changes required on your end.

  • 🔮 Future-Proof: Agents you build today will remain capable tomorrow. When we add support for new AI models or capabilities, your existing agents gain those powers without any updates to your codebase.

This means you can focus on building great user experiences while ChatBotKit handles the complexity of the ever-changing AI landscape.

SDK Features

  • Easy Setup: Quick and straightforward installation process.
  • Serverless Compatibility: Works seamlessly with modern runtime environments like Serverless, Edge, Vercel, Netlify, Cloudflare Workers, Deno, AWS Lambda, and more.
  • Modern Framework Support: Built-in support for CommonJS, ECMAScript Modules, async/await, streams, etc.
  • Customizability: Tailor the chatbot’s behavior and responses to fit specific use cases.
  • Multi-Platform: Deploy chatbots on websites, mobile apps, and messaging platforms like Slack, Discord, and WhatsApp.
  • Multi-Model: Support for a wide range of language models, including GPT-3, GPT-4, Claude, and more.

ChatBotKit Capabilities

  • 🔄 Multi-modal Support: Support various language and image models from all vendors such as OpenAI, Anthropic, Mistral, AWS, Google and others.
  • 🌍 Multi-language Support: Allowing for easy customization and use in diverse linguistic contexts.
  • 💬 Conversation Management: Manage complex conversation flaws with ease.
  • 🗨 Chat History: Review and reference past conversations.
  • 💾 Custom Datasets: Organize data for bot responses.
  • 💡 Custom Skillset: Equip chatbots with unique abilities like image generation or web fetching.
  • 📄 Document File Importing: Import various document file types into chatbot datasets.
  • 🎵 Media File Importing: Import a range of media file formats into chatbot datasets.
  • 🌐 Widget Integration: Seamlessly embed chatbots on websites with customizable options.
  • 💬 Slack, Discord, WhatsApp Bot Integrations: Easy integration with popular messaging platforms.
  • 🗺 Sitemap Integration: Ingest website content into a searchable knowledge base.
  • 🎥 Streaming: Enable/disable streaming capabilities.
  • 🔒 Data Security: Robust measures to protect user data.
  • 🕵 Privacy Focus: Strong privacy controls to ensure responsible data handling.
  • 🚫 Content Moderation: Automatic scanning and flagging of abusive content.
  • 💵 Simple Pricing: Transparent and straightforward pricing.

Getting Started

Follow these steps to start with ChatBotKit:

  1. Installation:
    npm install @chatbotkit/sdk
  2. Usage: Implement the SDK in your chatbot project.

Streaming Example

This example demonstrates streaming capabilities in Edge and Serverless environments:

import{ConversationClient}from'@chatbotkit/sdk/conversation/index.js'constclient=newConversationClient(/* configuration */)forawait(const{ type, data }ofclient.complete(null,{model: 'gpt-4', messages }).stream()){if(type==='token'){process.stdout.write(data.token)}}

NextGen Example for Next.js

This example showcases how to build advanced conversational AI with streaming, function calls, server-side rendering and much more in a Next.js project:

// file: ./app/page.jsximportChatAreafrom'../components/ChatArea.jsx'exportdefaultfunctionPage(){return<ChatArea/>}// file: ./components/ChatArea.jsx'use client'import{useContext}from'react'import{complete}from'../actions/conversation.jsx'import{ChatInput,ConversationContext}from'@chatbotkit/react'importConversationManagerfrom'@chatbotkit/react/components/ConversationManager'exportfunctionChatMessages(){const{
thinking,
text,
setText,
messages,
submit,}=useContext(ConversationContext)return(<div><div>{messages.map(({ id, type, text, children })=>{switch(type){case'user':
return(<divkey={id}><div><strong>user:</strong>{text}</div></div>)case'bot':
return(<divkey={id}><div><strong>bot:</strong>{text}</div>{children ? <div>{children}</div> : null}</div>)}})}{thinking ? (<divkey="thinking"><strong>bot:</strong> thinking...
</div>) : null}</div><ChatInputvalue={text}onChange={(e)=>setText(e.target.value)}onSubmit={submit}placeholder="Type something..."style={{border: 0,outline: 'none',resize: 'none',width: '100%',marginTop: '10px',}}/></div>)}exportdefaultfunctionChatArea(){return(<ConversationManagerendpoint={complete}><ChatMessages/></ConversationManager>)}// file: ./actions/conversation.jsx'use server'importCalendarEventsfrom'../components/CalendarEvents.jsx'import{streamComplete}from'@chatbotkit/react/actions/complete'import{ChatBotKit}from'@chatbotkit/sdk'constcbk=newChatBotKit({secret: process.env.CHATBOTKIT_API_SECRET,})exportasyncfunctioncomplete({ messages }){returnstreamComplete({client: cbk.conversation,
messages,functions: [{name: 'getUserName',description: 'Get the authenticated user name',parameters: {},handler: async()=>{return'John Doe'},},{name: 'getCalendarEvents',description: 'Get a list of calendar events',parameters: {},handler: async()=>{constevents=[{id: 1,title: 'Meeting with Jane Doe'},{id: 2,title: 'Meeting with Jill Doe'},]return{children: <CalendarEventsevents={events}/>,result: {
events,},}},},{name: 'declineCalendarEvent',description: 'Decline a calendar event',parameters: {type: 'object',properties: {id: {type: 'number',description: 'The ID of the event to decline',},},required: ['id'],},handler: async({ id })=>{return`You have declined the event with ID ${id}`},},],})}

Basic Next.js Example

This quick example demonstrates how to use the SDK in a Next.js project:

// file: ./pages/index.jsimport{AutoTextarea,useConversationManager}from'@chatbotkit/react'exportdefaultfunctionIndex(){const{
thinking,
text,
setText,
messages,
submit,}=useConversationManager({endpoint: '/api/conversation/complete',})functionhandleOnKeyDown(event){if(event.keyCode===13){event.preventDefault()submit()}}return(<divstyle={{fontFamily: 'monospace',padding: '10px'}}>{messages.map(({ id, type, text })=>(<divkey={id}><strong>{type}:</strong>{text}</div>))}{thinking&&(<divkey="thinking"><strong>bot:</strong> thinking...
</div>)}<AutoTextareavalue={text}onChange={(e)=>setText(e.target.value)}onKeyDown={handleOnKeyDown}placeholder="Type something..."style={{border: 0,outline: 'none',resize: 'none',width: '100%',marginTop: '10px',}}/></div>)}// file: ./pages/api/conversation/complete.jsimport{ChatBotKit}from'@chatbotkit/sdk'import{stream}from'@chatbotkit/next/edge'constcbk=newChatBotKit({secret: process.env.CHATBOTKIT_API_SECRET,})exportdefaultasyncfunctionhandler(req){const{ messages }=awaitreq.json()returnstream(cbk.conversation.complete(null,{ messages }))}exportconstconfig={runtime: 'edge',}

Examples

Explore a wide range of examples here.

Some notable examples include:

PlatformExampleDescription
Next.jsAuthenticated Chat with ContactsDemonstrates ChatBotKit Contacts for managing end-users with authentication. Shows how to use fingerprints to track users, enable personalized experiences, and unlock authentication management for 3rd-party integrations like Google and Microsoft.
Next.jsStateless Chat (App Router + RSC + Functions + Function Request)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions as well AI functions with function requests. This is a powerful example to demonstrate the full capabilities of the ChatBotKit conversational AI platform.
Next.jsStateless Chat (App Router + RSC + Functions)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions as well AI functions.
Next.jsStateless Chat (App Router + RSC)A stateless chatbot example, where the conversation is managed by the client and the server. This example uses the App Router and Server Actions.
Next.jsStateless Chat (App Router)A stateless chatbot example, where the conversation is managed by the client. This example uses the App Router.
Next.jsStateless ChatA stateless chatbot example, where the conversation is managed by the client.
Next.jsStateful ChatA basic chatbot example, where the conversation is managed by ChatBotKit.
Next.jsUser NextAuth ExampleShows how to provision isolated users through NextAuth.
NodeGPT4 Streaming AI chatbotA simple streaming AI chatbot example.
Cloudflare WorkersGPT4 AI chatbotA streaming AI chatbot example for Cloudflare Workers.

Stability

All SDK features are considered unstable unless explicitly marked as stable. Stability is indicated by the presence of a @stable tag in the documentation.

Documentation

  • Type Documentation: Detailed information on available types here.
  • LLMS.txt: Documentation suitable for coding assistants can be found here.
  • Platform Documentation: Comprehensive guide to ChatBotKit here.
  • Platform Tutorials: Step-by-step tutorials for ChatBotKit here.

Contributing

Encounter a bug or want to contribute? Open an issue or submit a pull request on our official GitHub repository.

Setup

The project is setup as a monorepo using pnpm and turbo build. Clone the reporitory and run the following commands to get started:

pnpm install

To perform type and lint checks, run:

pnpm check
pnpm lint

To build the project, run:

pnpm build

To build a specific package, run:

pnpm -F @chatbotkit/${PACKAGE_NAME} build

About

Create conversational AI solutions with custom data and abilities using ChatBotKit for JavaScript, TypeScript, React, and Next.js.

Topics

Resources

Stars

77 stars

Watchers

3 watching

Forks

Releases

Packages

Used by

Contributors

Languages