updateField("expr", value)}
+ onChange={(event) => updateField("expr", event.target.value)}
/>
Use Jinja2. Reference columns like {"{{ column_name }}"}.
diff --git a/studio/frontend/src/features/recipe-studio/dialogs/llm/general-tab.tsx b/studio/frontend/src/features/recipe-studio/dialogs/llm/general-tab.tsx
index c7740a213e..796123ec89 100644
--- a/studio/frontend/src/features/recipe-studio/dialogs/llm/general-tab.tsx
+++ b/studio/frontend/src/features/recipe-studio/dialogs/llm/general-tab.tsx
@@ -16,9 +16,6 @@ import {
import { Textarea } from "@/components/ui/textarea";
import { type ReactElement, type RefObject } from "react";
import type { LlmConfig } from "../../types";
-import { useRecipeStudioStore } from "../../stores/recipe-studio";
-import { getAvailableRefItems } from "../../utils/variables";
-import { JinjaRefTextarea } from "../../components/jinja/jinja-ref-autocomplete";
import { AvailableVariables } from "../shared/available-variables";
import { NameField } from "../shared/name-field";
@@ -54,8 +51,6 @@ export function LlmGeneralTab({
modelAliasAnchorRef,
onUpdate,
}: LlmGeneralTabProps): ReactElement {
- const configs = useRecipeStudioStore((state) => state.configs);
- const items = getAvailableRefItems(configs, config.id);
const modelAliasId = `${config.id}-model-alias`;
const codeLangId = `${config.id}-code-lang`;
const promptId = `${config.id}-prompt`;
@@ -139,12 +134,11 @@ export function LlmGeneralTab({
>
Prompt
- onUpdate({ prompt: value })}
+ onChange={(event) => onUpdate({ prompt: event.target.value })}
/>
{config.llm_type === "structured" && (
@@ -172,12 +166,11 @@ export function LlmGeneralTab({
>
System prompt (optional)
- onUpdate({ system_prompt: value })}
+ onChange={(event) => onUpdate({ system_prompt: event.target.value })}
/>
diff --git a/studio/frontend/src/features/recipe-studio/recipe-studio-page.tsx b/studio/frontend/src/features/recipe-studio/recipe-studio-page.tsx
index 8abc9b56fa..ed530819bd 100644
--- a/studio/frontend/src/features/recipe-studio/recipe-studio-page.tsx
+++ b/studio/frontend/src/features/recipe-studio/recipe-studio-page.tsx
@@ -115,7 +115,6 @@ export function RecipeStudioPage({
setAuxNodeSize,
syncAuxNodePositions,
syncAuxNodeSizes,
- setFlowMoving,
} = useRecipeStudioStore(
useShallow((state) => ({
nodes: state.nodes,
@@ -151,7 +150,6 @@ export function RecipeStudioPage({
setAuxNodeSize: state.setAuxNodeSize,
syncAuxNodePositions: state.syncAuxNodePositions,
syncAuxNodeSizes: state.syncAuxNodeSizes,
- setFlowMoving: state.setFlowMoving,
})),
);
const [sheetContainer, setSheetContainer] = useState(
@@ -333,10 +331,6 @@ export function RecipeStudioPage({
onConnect={onConnect}
onNodeClick={handleNodeClick}
isValidConnection={isValidConnection}
- onMoveStart={() => setFlowMoving(true)}
- onMoveEnd={() => setFlowMoving(false)}
- onNodeDragStart={() => setFlowMoving(true)}
- onNodeDragStop={() => setFlowMoving(false)}
nodesDraggable={interactive}
nodesConnectable={interactive}
elementsSelectable={interactive}
diff --git a/studio/frontend/src/features/recipe-studio/stores/recipe-studio.ts b/studio/frontend/src/features/recipe-studio/stores/recipe-studio.ts
index 2b8ad0dac1..4894905e0d 100644
--- a/studio/frontend/src/features/recipe-studio/stores/recipe-studio.ts
+++ b/studio/frontend/src/features/recipe-studio/stores/recipe-studio.ts
@@ -45,14 +45,12 @@ type RecipeStudioState = {
auxNodeSizes: Record;
configs: Record;
processors: RecipeProcessorConfig[];
- flowMoving: boolean;
sheetView: SheetView;
activeConfigId: string | null;
dialogOpen: boolean;
layoutDirection: LayoutDirection;
nextId: number;
nextY: number;
- setFlowMoving: (moving: boolean) => void;
setSheetView: (view: SheetView) => void;
setProcessors: (processors: RecipeProcessorConfig[]) => void;
setDialogOpen: (open: boolean) => void;
@@ -92,7 +90,6 @@ const INITIAL_STATE = {
auxNodeSizes: {},
configs: {},
processors: [],
- flowMoving: false,
sheetView: "root",
activeConfigId: null,
dialogOpen: false,
@@ -107,7 +104,6 @@ const INITIAL_STATE = {
| "auxNodeSizes"
| "configs"
| "processors"
- | "flowMoving"
| "sheetView"
| "activeConfigId"
| "dialogOpen"
@@ -133,7 +129,6 @@ function buildAddedNodeState(
export const useRecipeStudioStore = create((set, get) => ({
...INITIAL_STATE,
- setFlowMoving: (moving) => set({ flowMoving: moving }),
setSheetView: (view) => set({ sheetView: view }),
setProcessors: (processors) => set({ processors }),
setDialogOpen: (open) => set({ dialogOpen: open }),
@@ -209,7 +204,6 @@ export const useRecipeStudioStore = create((set, get) => ({
auxNodeSizes: {},
activeConfigId: null,
dialogOpen: false,
- flowMoving: false,
sheetView: "root",
})),
setAuxNodePosition: (id, position) =>
diff --git a/studio/frontend/src/features/recipe-studio/utils/variables.ts b/studio/frontend/src/features/recipe-studio/utils/variables.ts
index f3caa7554b..f428e8c5ca 100644
--- a/studio/frontend/src/features/recipe-studio/utils/variables.ts
+++ b/studio/frontend/src/features/recipe-studio/utils/variables.ts
@@ -1,39 +1,22 @@
import type { NodeConfig } from "../types";
-export type AvailableRefItem = {
- ref: string;
- kind: Exclude;
- subtype: string;
- valueType?: string;
-};
-
-function getStructuredRefs(
- llmName: string,
- outputFormat: string,
-): Array<{ ref: string; valueType?: string }> {
+function getStructuredRefs(llmName: string, outputFormat: string): string[] {
try {
const schema = JSON.parse(outputFormat);
if (!(schema?.properties && typeof schema.properties === "object")) {
return [];
}
- return Object.keys(schema.properties).map((key) => {
- const prop = schema.properties[key];
- const valueType =
- prop && typeof prop === "object" && typeof prop.type === "string"
- ? prop.type
- : undefined;
- return { ref: `${llmName}.${key}`, valueType };
- });
+ return Object.keys(schema.properties).map((key) => `${llmName}.${key}`);
} catch {
return [];
}
}
-export function getAvailableRefItems(
+export function getAvailableVariables(
configs: Record,
currentId: string,
-): AvailableRefItem[] {
- const items: AvailableRefItem[] = [];
+): string[] {
+ const vars: string[] = [];
for (const config of Object.values(configs)) {
if (config.id === currentId) {
@@ -44,20 +27,12 @@ export function getAvailableRefItems(
}
if (config.kind === "sampler") {
- items.push({
- ref: config.name,
- kind: "sampler",
- subtype: config.sampler_type,
- });
+ vars.push(config.name);
continue;
}
if (config.kind === "expression") {
- items.push({
- ref: config.name,
- kind: "expression",
- subtype: config.dtype,
- });
+ vars.push(config.name);
continue;
}
@@ -65,7 +40,7 @@ export function getAvailableRefItems(
for (const col of config.seed_columns ?? []) {
const name = col.trim();
if (!name) continue;
- items.push({ ref: name, kind: "seed", subtype: "seed" });
+ vars.push(name);
}
continue;
}
@@ -74,26 +49,12 @@ export function getAvailableRefItems(
continue;
}
- items.push({ ref: config.name, kind: "llm", subtype: config.llm_type });
+ vars.push(config.name);
if (config.llm_type !== "structured" || !config.output_format) {
continue;
}
- for (const ref of getStructuredRefs(config.name, config.output_format)) {
- items.push({
- ref: ref.ref,
- kind: "llm",
- subtype: config.llm_type,
- valueType: ref.valueType,
- });
- }
+ vars.push(...getStructuredRefs(config.name, config.output_format));
}
- return items;
-}
-
-export function getAvailableVariables(
- configs: Record,
- currentId: string,
-): string[] {
- return getAvailableRefItems(configs, currentId).map((item) => item.ref);
+ return vars;
}