examples/v1/state-machine/README.md
Transform complex conversational flows into manageable state machines. This AI-powered car sales application demonstrates how to build sophisticated multi-stage interactions with contextual awareness and state transitions.
Click here for a running example
<div align="center"> <a href="https://copilotkit.ai" target="_blank"> </a> <a href="https://nextjs.org" target="_blank"> </a> <a href="https://reactflow.dev/" target="_blank"> </a> </div>This application simulates a car dealership experience where an AI assistant guides users through a multi-stage process:
The example showcases how to implement complex conversational flows using a state machine pattern with CopilotKit.
Clone the repository:
git clone https://github.com/CopilotKit/CopilotKit.git
cd CopilotKit/examples/copilot-state-machine
Install dependencies:
pnpm install
# Using yarn
yarn install
# Using npm
npm install
Create a .env file in the project root and add your Copilot Cloud Public API Key:
NEXT_PUBLIC_CPK_PUBLIC_API_KEY=your_api_key_here
Start the development server:
pnpm dev
# Using yarn
yarn dev
# Using npm
npm run dev
Open http://localhost:3000 in your browser to see the application.
This demo uses several key CopilotKit features to implement a state machine pattern:
The application is structured around 6 distinct stages, each with its own hook in the stages directory:
Each stage hook encapsulates stage-specific CopilotKit configuration and prompts.
The use-global-state.tsx hook manages the application's global state, while the car-sales-chat.tsx component ties all stages together.
A React Flow powered visualizer (state-visualizer.tsx) displays the current state and possible transitions, updating in real-time as the conversation progresses.
Each stage uses CopilotKit's hooks to provide context-aware AI assistance:
// Example from use-stage-build-car.tsx
useCopilotAction({
name: "updateCarConfiguration",
description: "Update the car configuration based on user preferences",
parameters: [
{
name: "model",
type: "string",
required: true,
description: "The car model selected by the user",
},
// Other parameters...
],
handler: async (action) => {
// Update state with the new configuration
},
});
Ready to build your own AI-powered state machine? Check out these resources:
Contributions are welcome! Please feel free to submit a Pull Request.