forked from CopilotKit/CopilotKit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathuseCopilotExamples.tsx
More file actions
75 lines (69 loc) · 2.1 KB
/
Copy pathuseCopilotExamples.tsx
File metadata and controls
75 lines (69 loc) · 2.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import { z } from "zod";
import {
useComponent,
useFrontendTool,
useHumanInTheLoop,
useDefaultRenderTool,
} from "@copilotkit/react-core/v2";
import {
PieChart,
PieChartPropsSchema,
} from "@/components/generative-ui/PieChart";
import {
BarChart,
BarChartPropsSchema,
} from "@/components/generative-ui/BarChart";
import { ToolReasoning } from "@/components/generative-ui/ToolReasoning";
import { MeetingTimePicker } from "@/components/generative-ui/MeetingTimePicker";
import { useTheme } from "@/hooks/useTheme";
export const useCopilotExamples = () => {
const { theme, setTheme } = useTheme();
// Frontend tool: toggle light/dark mode
useFrontendTool(
{
name: "toggleTheme",
description: "Frontend tool for toggling the theme of the app.",
parameters: z.object({}),
handler: async () => {
setTheme(theme === "dark" ? "light" : "dark");
},
},
[theme, setTheme],
);
// Controlled Generative UI: pie chart
useComponent({
name: "pieChart",
description: "Controlled Generative UI that displays data as a pie chart.",
parameters: PieChartPropsSchema,
render: PieChart,
});
// Controlled Generative UI: bar chart
useComponent({
name: "barChart",
description: "Controlled Generative UI that displays data as a bar chart.",
parameters: BarChartPropsSchema,
render: BarChart,
});
// Default renderer for all backend tool calls
useDefaultRenderTool({
render: ({ name, status, parameters }) => (
<ToolReasoning name={name} status={status} args={parameters} />
),
});
// Human-in-the-loop: meeting scheduler
useHumanInTheLoop({
name: "scheduleTime",
description: "Use human-in-the-loop to schedule a meeting with the user.",
parameters: z.object({
reasonForScheduling: z
.string()
.describe("Reason for scheduling, very brief - 5 words."),
meetingDuration: z
.number()
.describe("Duration of the meeting in minutes"),
}),
render: ({ respond, status, args }) => (
<MeetingTimePicker status={status} respond={respond} {...args} />
),
});
};