From c9a3813b8f7622b88c663ec20c8eb9de67aa7308 Mon Sep 17 00:00:00 2001 From: AbdBarho Date: Sun, 8 Jan 2023 12:07:26 +0100 Subject: [PATCH 1/2] Add Label Assistant Reply Task --- website/src/components/Tasks/TaskTypes.tsx | 6 +++ .../tasks/labeling/useLabelAssistantReply.ts | 22 +++++++++ .../tasks/labeling/useLabelInitialPrompt.tsx | 15 ++++++ .../tasks/labeling/useLabelPrompterReply.ts | 22 +++++++++ .../useLabelingTask.ts} | 18 +++----- .../src/hooks/tasks/useLabelPrompterReply.ts | 31 ------------- .../src/pages/label/label_assistant_reply.tsx | 46 +++++++++++++++++++ .../src/pages/label/label_initial_prompt.tsx | 5 +- .../src/pages/label/label_prompter_reply.tsx | 5 +- 9 files changed, 126 insertions(+), 44 deletions(-) create mode 100644 website/src/hooks/tasks/labeling/useLabelAssistantReply.ts create mode 100644 website/src/hooks/tasks/labeling/useLabelInitialPrompt.tsx create mode 100644 website/src/hooks/tasks/labeling/useLabelPrompterReply.ts rename website/src/hooks/tasks/{useLabelInitialPrompt.tsx => labeling/useLabelingTask.ts} (54%) delete mode 100644 website/src/hooks/tasks/useLabelPrompterReply.ts create mode 100644 website/src/pages/label/label_assistant_reply.tsx diff --git a/website/src/components/Tasks/TaskTypes.tsx b/website/src/components/Tasks/TaskTypes.tsx index 09e106b6..9cbad58a 100644 --- a/website/src/components/Tasks/TaskTypes.tsx +++ b/website/src/components/Tasks/TaskTypes.tsx @@ -69,5 +69,11 @@ export const TaskTypes = [ category: TaskCategory.Label, pathname: "/label/label_prompter_reply", type: "label_prompter_reply", + },{ + label: "Label Assistant Reply", + desc: "Provide labels for a prompt.", + category: TaskCategory.Label, + pathname: "/label/label_assistant_reply", + type: "label_assistant_reply", }, ]; diff --git a/website/src/hooks/tasks/labeling/useLabelAssistantReply.ts b/website/src/hooks/tasks/labeling/useLabelAssistantReply.ts new file mode 100644 index 00000000..93f87188 --- /dev/null +++ b/website/src/hooks/tasks/labeling/useLabelAssistantReply.ts @@ -0,0 +1,22 @@ +import { TaskResponse } from "../useGenericTaskAPI"; +import { LabelingTaskType, useLabelingTask } from "./useLabelingTask"; + +export interface LabelAssistantReplyTask { + id: string; + type: "label_prompter_reply"; + message_id: string; + valid_labels: string[]; + reply: string; + conversation: { + messages: Array<{ + text: string; + is_assistant: boolean; + message_id: string; + }>; + }; +} + +export type LabelAssistantReplyTaskResponse = TaskResponse; + +export const useLabelAssistantReplyTask = () => + useLabelingTask(LabelingTaskType.label_assistant_reply); diff --git a/website/src/hooks/tasks/labeling/useLabelInitialPrompt.tsx b/website/src/hooks/tasks/labeling/useLabelInitialPrompt.tsx new file mode 100644 index 00000000..47138825 --- /dev/null +++ b/website/src/hooks/tasks/labeling/useLabelInitialPrompt.tsx @@ -0,0 +1,15 @@ +import { TaskResponse } from "../useGenericTaskAPI"; +import { LabelingTaskType, useLabelingTask } from "./useLabelingTask"; + +export interface LabelInitialPromptTask { + id: string; + type: "label_initial_prompt"; + message_id: string; + valid_labels: string[]; + prompt: string; +} + +export type LabelInitialPromptTaskResponse = TaskResponse; + +export const useLabelInitialPromptTask = () => + useLabelingTask(LabelingTaskType.label_initial_prompt); diff --git a/website/src/hooks/tasks/labeling/useLabelPrompterReply.ts b/website/src/hooks/tasks/labeling/useLabelPrompterReply.ts new file mode 100644 index 00000000..634305cb --- /dev/null +++ b/website/src/hooks/tasks/labeling/useLabelPrompterReply.ts @@ -0,0 +1,22 @@ +import { TaskResponse } from "../useGenericTaskAPI"; +import { LabelingTaskType, useLabelingTask } from "./useLabelingTask"; + +export interface LabelPrompterReplyTask { + id: string; + type: "label_prompter_reply"; + message_id: string; + valid_labels: string[]; + reply: string; + conversation: { + messages: Array<{ + text: string; + is_assistant: boolean; + message_id: string; + }>; + }; +} + +export type LabelPrompterReplyTaskResponse = TaskResponse; + +export const useLabelPrompterReplyTask = () => + useLabelingTask(LabelingTaskType.label_prompter_reply); diff --git a/website/src/hooks/tasks/useLabelInitialPrompt.tsx b/website/src/hooks/tasks/labeling/useLabelingTask.ts similarity index 54% rename from website/src/hooks/tasks/useLabelInitialPrompt.tsx rename to website/src/hooks/tasks/labeling/useLabelingTask.ts index 69ab4bcc..27555284 100644 --- a/website/src/hooks/tasks/useLabelInitialPrompt.tsx +++ b/website/src/hooks/tasks/labeling/useLabelingTask.ts @@ -1,17 +1,13 @@ -import { TaskResponse, useGenericTaskAPI } from "./useGenericTaskAPI"; +import { useGenericTaskAPI } from "../useGenericTaskAPI"; -export interface LabelInitialPromptTask { - id: string; - type: "label_initial_prompt"; - message_id: string; - valid_labels: string[]; - prompt: string; +export const enum LabelingTaskType { + label_initial_prompt = "label_initial_prompt", + label_prompter_reply = "label_prompter_reply", + label_assistant_reply = "label_assistant_reply", } -export type LabelInitialPromptTaskResponse = TaskResponse; - -export const useLabelInitialPromptTask = () => { - const { tasks, isLoading, trigger, reset, error } = useGenericTaskAPI("label_initial_prompt"); +export const useLabelingTask = (endpoint: LabelingTaskType) => { + const { tasks, isLoading, trigger, reset, error } = useGenericTaskAPI(endpoint); const submit = (id: string, message_id: string, text: string, validLabels: string[], labelWeights: number[]) => { console.assert(validLabels.length === labelWeights.length); diff --git a/website/src/hooks/tasks/useLabelPrompterReply.ts b/website/src/hooks/tasks/useLabelPrompterReply.ts deleted file mode 100644 index f048c2b3..00000000 --- a/website/src/hooks/tasks/useLabelPrompterReply.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { TaskResponse, useGenericTaskAPI } from "./useGenericTaskAPI"; - -export interface LabelPrompterReplyTask { - id: string; - type: "label_prompter_reply"; - message_id: string; - valid_labels: string[]; - reply: string; - conversation: { - messages: Array<{ - text: string; - is_assistant: boolean; - message_id: string; - }>; - }; -} - -export type LabelPrompterReplyTaskResponse = TaskResponse; - -export const useLabelPrompterReplyTask = () => { - const { tasks, isLoading, trigger, reset, error } = useGenericTaskAPI("label_prompter_reply"); - - const submit = (id: string, message_id: string, text: string, validLabels: string[], labelWeights: number[]) => { - console.assert(validLabels.length === labelWeights.length); - const labels = Object.fromEntries(validLabels.map((label, i) => [label, labelWeights[i]])); - - return trigger({ id, update_type: "text_labels", content: { labels, text, message_id } }); - }; - - return { tasks, isLoading, submit, reset, error }; -}; diff --git a/website/src/pages/label/label_assistant_reply.tsx b/website/src/pages/label/label_assistant_reply.tsx new file mode 100644 index 00000000..d314a907 --- /dev/null +++ b/website/src/pages/label/label_assistant_reply.tsx @@ -0,0 +1,46 @@ +import { useState } from "react"; +import { LoadingScreen } from "src/components/Loading/LoadingScreen"; +import { Message } from "src/components/Messages"; +import { MessageTable } from "src/components/Messages/MessageTable"; +import { TaskControls } from "src/components/Survey/TaskControls"; +import { LabelSliderGroup, LabelTask } from "src/components/Tasks/LabelTask"; +import { + LabelAssistantReplyTaskResponse, + useLabelAssistantReplyTask, +} from "src/hooks/tasks/labeling/useLabelAssistantReply"; + +const LabelAssistantReply = () => { + const [sliderValues, setSliderValues] = useState([]); + + const { tasks, isLoading, submit, reset } = useLabelAssistantReplyTask(); + + if (isLoading || tasks.length === 0) { + return ; + } + + const task = tasks[0].task; + const messages: Message[] = [ + ...task.conversation.messages, + { text: task.reply, is_assistant: true, message_id: task.message_id }, + ]; + + return ( + } + inputs={} + controls={ + + submit(id, task.message_id, task.reply, task.valid_labels, sliderValues) + } + /> + } + /> + ); +}; + +export default LabelAssistantReply; diff --git a/website/src/pages/label/label_initial_prompt.tsx b/website/src/pages/label/label_initial_prompt.tsx index 346362dc..7d1c606b 100644 --- a/website/src/pages/label/label_initial_prompt.tsx +++ b/website/src/pages/label/label_initial_prompt.tsx @@ -3,7 +3,10 @@ import { LoadingScreen } from "src/components/Loading/LoadingScreen"; import { MessageView } from "src/components/Messages"; import { TaskControls } from "src/components/Survey/TaskControls"; import { LabelSliderGroup, LabelTask } from "src/components/Tasks/LabelTask"; -import { LabelInitialPromptTaskResponse, useLabelInitialPromptTask } from "src/hooks/tasks/useLabelInitialPrompt"; +import { + LabelInitialPromptTaskResponse, + useLabelInitialPromptTask, +} from "src/hooks/tasks/labeling/useLabelInitialPrompt"; const LabelInitialPrompt = () => { const [sliderValues, setSliderValues] = useState([]); diff --git a/website/src/pages/label/label_prompter_reply.tsx b/website/src/pages/label/label_prompter_reply.tsx index 44606f47..b5742b23 100644 --- a/website/src/pages/label/label_prompter_reply.tsx +++ b/website/src/pages/label/label_prompter_reply.tsx @@ -4,7 +4,10 @@ import { Message } from "src/components/Messages"; import { MessageTable } from "src/components/Messages/MessageTable"; import { TaskControls } from "src/components/Survey/TaskControls"; import { LabelSliderGroup, LabelTask } from "src/components/Tasks/LabelTask"; -import { LabelPrompterReplyTaskResponse, useLabelPrompterReplyTask } from "src/hooks/tasks/useLabelPrompterReply"; +import { + LabelPrompterReplyTaskResponse, + useLabelPrompterReplyTask, +} from "src/hooks/tasks/labeling/useLabelPrompterReply"; const LabelPrompterReply = () => { const [sliderValues, setSliderValues] = useState([]); From d99c0e2d2f2cb40e6f15314ddb1059a1f8963bd0 Mon Sep 17 00:00:00 2001 From: AbdBarho Date: Sun, 8 Jan 2023 12:11:47 +0100 Subject: [PATCH 2/2] Use enum for type definition --- website/src/components/Tasks/TaskTypes.tsx | 3 ++- website/src/hooks/tasks/labeling/useLabelAssistantReply.ts | 2 +- website/src/hooks/tasks/labeling/useLabelInitialPrompt.tsx | 2 +- website/src/hooks/tasks/labeling/useLabelPrompterReply.ts | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/website/src/components/Tasks/TaskTypes.tsx b/website/src/components/Tasks/TaskTypes.tsx index 9cbad58a..82ba1917 100644 --- a/website/src/components/Tasks/TaskTypes.tsx +++ b/website/src/components/Tasks/TaskTypes.tsx @@ -69,7 +69,8 @@ export const TaskTypes = [ category: TaskCategory.Label, pathname: "/label/label_prompter_reply", type: "label_prompter_reply", - },{ + }, + { label: "Label Assistant Reply", desc: "Provide labels for a prompt.", category: TaskCategory.Label, diff --git a/website/src/hooks/tasks/labeling/useLabelAssistantReply.ts b/website/src/hooks/tasks/labeling/useLabelAssistantReply.ts index 93f87188..3c44046e 100644 --- a/website/src/hooks/tasks/labeling/useLabelAssistantReply.ts +++ b/website/src/hooks/tasks/labeling/useLabelAssistantReply.ts @@ -3,7 +3,7 @@ import { LabelingTaskType, useLabelingTask } from "./useLabelingTask"; export interface LabelAssistantReplyTask { id: string; - type: "label_prompter_reply"; + type: LabelingTaskType.label_assistant_reply; message_id: string; valid_labels: string[]; reply: string; diff --git a/website/src/hooks/tasks/labeling/useLabelInitialPrompt.tsx b/website/src/hooks/tasks/labeling/useLabelInitialPrompt.tsx index 47138825..f7ba8ab5 100644 --- a/website/src/hooks/tasks/labeling/useLabelInitialPrompt.tsx +++ b/website/src/hooks/tasks/labeling/useLabelInitialPrompt.tsx @@ -3,7 +3,7 @@ import { LabelingTaskType, useLabelingTask } from "./useLabelingTask"; export interface LabelInitialPromptTask { id: string; - type: "label_initial_prompt"; + type: LabelingTaskType.label_initial_prompt; message_id: string; valid_labels: string[]; prompt: string; diff --git a/website/src/hooks/tasks/labeling/useLabelPrompterReply.ts b/website/src/hooks/tasks/labeling/useLabelPrompterReply.ts index 634305cb..9de2057f 100644 --- a/website/src/hooks/tasks/labeling/useLabelPrompterReply.ts +++ b/website/src/hooks/tasks/labeling/useLabelPrompterReply.ts @@ -3,7 +3,7 @@ import { LabelingTaskType, useLabelingTask } from "./useLabelingTask"; export interface LabelPrompterReplyTask { id: string; - type: "label_prompter_reply"; + type: LabelingTaskType.label_prompter_reply; message_id: string; valid_labels: string[]; reply: string;