diff --git a/docs/canvas-lab-architecture.md b/docs/canvas-lab-architecture.md index f5acbd1ab5..343ecf6608 100644 --- a/docs/canvas-lab-architecture.md +++ b/docs/canvas-lab-architecture.md @@ -228,6 +228,7 @@ Current safe flow: - dialog passes options -> registry -> block dialogs (`LlmDialog`, `ModelConfigDialog`, `TimedeltaDialog`) No dialog component should import store directly. +Exception: read-only derived data (e.g. `available-variables.tsx` reads `configs` for variable list). ## 9) Add New Block (exact flow) diff --git a/studio/frontend/src/features/canvas-lab/components/canvas-aux-node.tsx b/studio/frontend/src/features/canvas-lab/components/canvas-aux-node.tsx index 2c531a432c..1da19b939f 100644 --- a/studio/frontend/src/features/canvas-lab/components/canvas-aux-node.tsx +++ b/studio/frontend/src/features/canvas-lab/components/canvas-aux-node.tsx @@ -1,3 +1,4 @@ +import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Textarea } from "@/components/ui/textarea"; @@ -13,6 +14,7 @@ import { MAX_NODE_WIDTH, MIN_NODE_WIDTH } from "../constants"; import { useCanvasLabStore } from "../stores/canvas-lab"; import type { LayoutDirection, LlmConfig, Score, ScoreOption } from "../types"; import { HANDLE_IDS } from "../utils/handles"; +import { getAvailableVariables } from "../utils/variables"; import { BaseNode, BaseNodeContent, BaseNodeHeader, BaseNodeHeaderTitle } from "./rf-ui/base-node"; type PromptField = "prompt" | "system_prompt"; @@ -56,6 +58,28 @@ function updateOptionAt( ); } +function AuxVariableBadges({ llmId }: { llmId: string }): ReactElement | null { + const configs = useCanvasLabStore((state) => state.configs); + const vars = getAvailableVariables(configs, llmId); + if (vars.length === 0) return null; + return ( +
Available references
+