From d4edccd2b1ca49600b50b01733c1c454bd62f55c Mon Sep 17 00:00:00 2001 From: mildshield14 <80240232+mildshield14@users.noreply.github.com> Date: Mon, 14 Jul 2025 17:40:31 -0400 Subject: [PATCH 1/4] =?UTF-8?q?Add=20marker=E2=80=91based=20variant=20spaw?= =?UTF-8?q?ning=20with=20context=20&=20count=20inputs=20feature?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 8 + .idea/ChainForge.iml | 9 + .idea/discord.xml | 14 + .idea/google-java-format.xml | 6 + .idea/inspectionProfiles/Project_Default.xml | 6 + .idea/misc.xml | 6 + .idea/modules.xml | 8 + .idea/prettier.xml | 6 + .idea/vcs.xml | 6 + .../react-server/src/DraggablePopover.tsx | 152 ++++ .../src/EvalGen/PickCriteriaStep.tsx | 2 +- .../react-server/src/EvalGen/WelcomeStep.tsx | 2 +- chainforge/react-server/src/PromptNode.tsx | 641 +++++++++------ .../react-server/src/TextFieldsNode.tsx | 443 +++++++++-- .../src/backend/evalgen/executor.ts | 2 +- .../react-server/src/backend/evalgen/utils.ts | 4 +- .../react-server/src/backend/markerUtils.ts | 65 ++ .../src/backend/suggestUniqueName.ts | 38 + .../src/backend/useSelectionText.ts | 739 ++++++++++++++++++ chainforge/react-server/src/store.tsx | 67 +- 20 files changed, 1910 insertions(+), 314 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/ChainForge.iml create mode 100644 .idea/discord.xml create mode 100644 .idea/google-java-format.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/prettier.xml create mode 100644 .idea/vcs.xml create mode 100644 chainforge/react-server/src/DraggablePopover.tsx create mode 100644 chainforge/react-server/src/backend/markerUtils.ts create mode 100644 chainforge/react-server/src/backend/suggestUniqueName.ts create mode 100644 chainforge/react-server/src/backend/useSelectionText.ts diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 000000000..13566b81b --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/ChainForge.iml b/.idea/ChainForge.iml new file mode 100644 index 000000000..d6ebd4805 --- /dev/null +++ b/.idea/ChainForge.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/discord.xml b/.idea/discord.xml new file mode 100644 index 000000000..5faa6e2d6 --- /dev/null +++ b/.idea/discord.xml @@ -0,0 +1,14 @@ + + + + + \ No newline at end of file diff --git a/.idea/google-java-format.xml b/.idea/google-java-format.xml new file mode 100644 index 000000000..2aa056da3 --- /dev/null +++ b/.idea/google-java-format.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 000000000..03d9549ea --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 000000000..862d09bd6 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 000000000..ae8d9cebe --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/prettier.xml b/.idea/prettier.xml new file mode 100644 index 000000000..b0c1c68fb --- /dev/null +++ b/.idea/prettier.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 000000000..35eb1ddfb --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/chainforge/react-server/src/DraggablePopover.tsx b/chainforge/react-server/src/DraggablePopover.tsx new file mode 100644 index 000000000..3f60f1d87 --- /dev/null +++ b/chainforge/react-server/src/DraggablePopover.tsx @@ -0,0 +1,152 @@ +import { + Popover, + Badge, + Text, + Textarea, + NumberInput, + Button, + Stack, +} from "@mantine/core"; +import { IconBulb } from "@tabler/icons-react"; +import { useState, CSSProperties } from "react"; + +interface MarkerPopoverProps { + anchor: { x: number; y: number }; + preview: string; + context: string; + setContext: (s: string) => void; + variants: string; + setVariants: (v: string) => void; + onGenerate: () => void; + loading?: boolean; + nodeType?: "textfields" | "prompt" | "chat"; +} + +export default function MarkerPopover({ + anchor, + preview, + context, + setContext, + variants, + setVariants, + onGenerate, + loading = false, + nodeType = "textfields", +}: MarkerPopoverProps) { + const [open, setOpen] = useState(false); + + const bulbStyle: CSSProperties = { + position: "fixed", + top: anchor.y, + left: anchor.x, + zIndex: 10_000, + }; + + const getLabels = () => { + switch (nodeType) { + case "prompt": + return { + title: "PROMPT CONFIGURATION", + contextLabel: "Prompt context", + variantsLabel: "Prompt variants to generate", + }; + case "chat": + return { + title: "CHAT CONFIGURATION", + contextLabel: "Chat context", + variantsLabel: "Response variants to generate", + }; + default: + return { + title: "FIELD CONFIGURATION", + contextLabel: "Extra configuration", + variantsLabel: "Variants to generate", + }; + } + }; + + const labels = getLabels(); + + return ( + + + + + + + } + > + {labels.title} + + + {preview && ( + + "{preview}" + + )} + + +
+ + {labels.contextLabel} + +