| import React from "react"; |
| import { |
| Action, |
| Observation, |
| ActionEvent, |
| ObservationEvent, |
| } from "#/types/agent-server/core"; |
|
|
| type ActionKind = Action["kind"]; |
| type ObservationKind = Observation["kind"]; |
| type ActionByKind<K extends ActionKind> = Extract<Action, { kind: K }>; |
| type ObservationByKind<K extends ObservationKind> = Extract< |
| Observation, |
| { kind: K } |
| >; |
|
|
| |
| |
| |
| |
| |
| |
| export interface VisualizerProps<A extends Action, O extends Observation> { |
| action?: ActionEvent<A>; |
| observation?: ObservationEvent<O>; |
| } |
|
|
| |
| |
| |
| |
| |
| export interface ToolVisualizer< |
| AK extends ActionKind, |
| OK extends ObservationKind, |
| > { |
| actionKinds: AK[]; |
| observationKinds?: OK[]; |
| Body: React.FC<VisualizerProps<ActionByKind<AK>, ObservationByKind<OK>>>; |
| } |
|
|
| |
| |
| |
| |
| export interface RegisteredVisualizer { |
| actionKinds: string[]; |
| observationKinds?: string[]; |
| Body: React.FC<VisualizerProps<Action, Observation>>; |
| } |
|
|
| |
| |
| |
| |
| |
| export const defineVisualizer = < |
| AK extends ActionKind, |
| OK extends ObservationKind = never, |
| >( |
| visualizer: ToolVisualizer<AK, OK>, |
| ): RegisteredVisualizer => visualizer as unknown as RegisteredVisualizer; |
|
|