-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathreact-core.ts
More file actions
67 lines (56 loc) · 2.49 KB
/
Copy pathreact-core.ts
File metadata and controls
67 lines (56 loc) · 2.49 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
import { ReactActivityMessageRenderer, ReactToolCallRenderer } from "@/types";
import { ReactCustomMessageRenderer } from "@/types/react-custom-message-renderer";
import { CopilotKitCore, CopilotKitCoreConfig, CopilotKitCoreSubscriber, CopilotKitCoreSubscription } from "@copilotkitnext/core";
export interface CopilotKitCoreReactConfig extends CopilotKitCoreConfig {
// Add any additional configuration properties specific to the React implementation
renderToolCalls?: ReactToolCallRenderer<any>[];
renderActivityMessages?: ReactActivityMessageRenderer<any>[];
// Add custom message renderers
renderCustomMessages?: ReactCustomMessageRenderer[];
}
export interface CopilotKitCoreReactSubscriber extends CopilotKitCoreSubscriber {
onRenderToolCallsChanged?: (event: {
copilotkit: CopilotKitCore;
renderToolCalls: ReactToolCallRenderer<any>[];
}) => void | Promise<void>;
}
export class CopilotKitCoreReact extends CopilotKitCore {
private _renderToolCalls: ReactToolCallRenderer<any>[] = [];
private _renderCustomMessages: ReactCustomMessageRenderer[] = [];
private _renderActivityMessages: ReactActivityMessageRenderer<any>[] = [];
constructor(config: CopilotKitCoreReactConfig) {
super(config);
this._renderToolCalls = config.renderToolCalls ?? [];
this._renderCustomMessages = config.renderCustomMessages ?? [];
this._renderActivityMessages = config.renderActivityMessages ?? [];
}
get renderCustomMessages(): Readonly<ReactCustomMessageRenderer[]> {
return this._renderCustomMessages;
}
get renderActivityMessages(): Readonly<ReactActivityMessageRenderer<any>>[] {
return this._renderActivityMessages;
}
get renderToolCalls(): Readonly<ReactToolCallRenderer<any>>[] {
return this._renderToolCalls;
}
setRenderToolCalls(renderToolCalls: ReactToolCallRenderer<any>[]): void {
this._renderToolCalls = renderToolCalls;
// Notify React-specific subscribers
void this.notifySubscribers(
(subscriber) => {
const reactSubscriber = subscriber as CopilotKitCoreReactSubscriber;
if (reactSubscriber.onRenderToolCallsChanged) {
reactSubscriber.onRenderToolCallsChanged({
copilotkit: this,
renderToolCalls: this.renderToolCalls,
});
}
},
"Subscriber onRenderToolCallsChanged error:"
);
}
// Override to accept React-specific subscriber type
subscribe(subscriber: CopilotKitCoreReactSubscriber): CopilotKitCoreSubscription {
return super.subscribe(subscriber);
}
}