This repository collects scenario-driven ChatKit demos. Each example pairs a FastAPI backend with a Vite + React frontend, implementing a custom backend using ChatKit Python SDK and wiring it up with ChatKit.js client-side.
You can run the following examples:
- Cat Lounge - caretaker for a virtual cat that helps improve energy, happiness, and cleanliness stats.
- Customer Support – airline concierge with live itinerary data, timeline syncing, and domain-specific tools.
- Export
OPENAI_API_KEY. - Make sure
uvis installed. - Launch an example from the repo root, or with
npm run startfrom the project directory:
| Example | Command for repo root | Command for project directory | URL |
|---|---|---|---|
| Cat Lounge | npm run cat-lounge |
cd examples/cat-lounge && npm install && npm run start |
http://localhost:5170 |
| Customer Support | npm run customer-support |
cd examples/customer-support && npm install && npm start |
http://localhost:5171 |
- Cat Lounge:
- Function tool
get_cat_status(cat_agent.py) pulls the latest cat stats for the agent.
- Function tool
- Cat Lounge:
- Client tool
update_cat_statusis invoked by server toolsfeed_cat,play_with_cat,clean_cat, andspeak_as_catto sync UI state. - When invoked, it is handled client-side with the
handleClientToolCallcallback in ChatKitPanel.tsx.
- Client tool
- Cat Lounge:
- Server tool
show_cat_profilestreams a presentation widget defined in profile_card_widget.py.
- Server tool
- Cat Lounge:
- Server tool
suggest_cat_namesstreams a widget with action configs that specifycats.select_nameandcats.more_namesclient-handled actions. - When the user clicks the widget, these actions are handled with the
handleWidgetActioncallback in ChatKitPanel.tsx.
- Server tool
- Cat Lounge:
- The
cats.select_nameaction is also handled server-side to reflect updates to data and stream back an updated version of the name suggestions widget in server.py. - It is invoked using
chatkit.sendAction()fromhandleWidgetActioncallback in ChatKitPanel.tsx.
- The