From 2e2efdec650bd0e660be91e528912e1bffffec96 Mon Sep 17 00:00:00 2001 From: Keith Stevens Date: Tue, 10 Jan 2023 12:51:56 +0900 Subject: [PATCH 01/16] Fixing a small remaining issues, reporting labels, rejecting tasks, and redirecting users on landing page --- website/src/components/FlaggableElement.tsx | 2 +- website/src/components/Messages.tsx | 8 +++++--- website/src/pages/api/reject_task.ts | 1 + website/src/pages/index.tsx | 11 +++++++++++ 4 files changed, 18 insertions(+), 4 deletions(-) diff --git a/website/src/components/FlaggableElement.tsx b/website/src/components/FlaggableElement.tsx index df7296cc..2f3f25b2 100644 --- a/website/src/components/FlaggableElement.tsx +++ b/website/src/components/FlaggableElement.tsx @@ -45,7 +45,7 @@ export const FlaggableElement = (props) => { }); const { trigger } = useSWRMutation("/api/set_label", poster, { onSuccess: () => { - setIsEditing.off; + setIsEditing.off(); }, }); diff --git a/website/src/components/Messages.tsx b/website/src/components/Messages.tsx index 71ff237b..b14b0aaa 100644 --- a/website/src/components/Messages.tsx +++ b/website/src/components/Messages.tsx @@ -1,6 +1,6 @@ import { Grid } from "@chakra-ui/react"; import { useColorMode } from "@chakra-ui/react"; -import { useMemo } from "react"; +import { forwardRef, useMemo } from "react"; import { FlaggableElement } from "./FlaggableElement"; @@ -43,7 +43,7 @@ export const Messages = ({ return {items}; }; -export const MessageView = ({ is_assistant, text, message_id }: Message) => { +export const MessageView = forwardRef(({ is_assistant, text, message_id }: Message, ref) => { const { colorMode } = useColorMode(); const bgColor = useMemo(() => { @@ -55,4 +55,6 @@ export const MessageView = ({ is_assistant, text, message_id }: Message) => { }, [colorMode, is_assistant]); return
{text}
; -}; +}); + +MessageView.displayName = "MessageView"; diff --git a/website/src/pages/api/reject_task.ts b/website/src/pages/api/reject_task.ts index d146c44b..fc807b67 100644 --- a/website/src/pages/api/reject_task.ts +++ b/website/src/pages/api/reject_task.ts @@ -1,6 +1,7 @@ import { Prisma } from "@prisma/client"; import { getToken } from "next-auth/jwt"; import { oasstApiClient } from "src/lib/oasst_api_client"; +import prisma from "src/lib/prismadb"; const handler = async (req, res) => { const token = await getToken({ req }); diff --git a/website/src/pages/index.tsx b/website/src/pages/index.tsx index 04f99829..64b1a0d5 100644 --- a/website/src/pages/index.tsx +++ b/website/src/pages/index.tsx @@ -1,10 +1,21 @@ import Head from "next/head"; +import { useRouter } from "next/router"; +import { useSession } from "next-auth/react"; +import { useEffect } from "react"; import { CallToAction } from "src/components/CallToAction"; import { Faq } from "src/components/Faq"; import { Hero } from "src/components/Hero"; import { getTransparentHeaderLayout } from "src/components/Layout"; const Home = () => { + const router = useRouter(); + const { status } = useSession(); + useEffect(() => { + if (status === "authenticated") { + router.push("/dashboard"); + } + }, [router, status]); + return ( <> From 34a1715923d4c8d908efdf44390620f583d87486 Mon Sep 17 00:00:00 2001 From: Keith Stevens Date: Tue, 10 Jan 2023 13:02:17 +0900 Subject: [PATCH 02/16] Cleaning up a suite of eslint warnings --- website/src/components/Buttons/Skip.tsx | 5 ----- website/src/components/CollapsableText.tsx | 2 +- website/src/components/FlaggableElement.tsx | 4 ++-- website/src/components/Messages.tsx | 8 ++++++-- website/src/components/Tasks/CreateTask.tsx | 3 +-- website/src/components/Tasks/EvaluateTask.tsx | 2 +- website/src/components/Tasks/Task.tsx | 8 ++++---- website/src/lib/oasst_api_client.ts | 4 ++-- website/src/pages/api/set_label.ts | 3 +-- website/src/pages/auth/verify.tsx | 1 - website/src/pages/create/summarize_story.tsx | 2 +- website/src/pages/evaluate/rate_summary.tsx | 2 +- 12 files changed, 20 insertions(+), 24 deletions(-) diff --git a/website/src/components/Buttons/Skip.tsx b/website/src/components/Buttons/Skip.tsx index 8440e348..bcd0eb79 100644 --- a/website/src/components/Buttons/Skip.tsx +++ b/website/src/components/Buttons/Skip.tsx @@ -1,10 +1,6 @@ import { Button, ButtonProps, - Menu, - MenuButton, - MenuItem, - MenuList, Modal, ModalBody, ModalCloseButton, @@ -16,7 +12,6 @@ import { useDisclosure, } from "@chakra-ui/react"; import { useState } from "react"; -import { FaChevronDown } from "react-icons/fa"; interface SkipButtonProps extends ButtonProps { onSkip: (reason: string) => void; diff --git a/website/src/components/CollapsableText.tsx b/website/src/components/CollapsableText.tsx index 1f34c508..5dcab595 100644 --- a/website/src/components/CollapsableText.tsx +++ b/website/src/components/CollapsableText.tsx @@ -12,7 +12,7 @@ import React from "react"; export const CollapsableText = ({ text, maxLength = 220 }) => { const { isOpen, onOpen, onClose } = useDisclosure(); - if (typeof text != "string" || text.length <= maxLength) { + if (typeof text !== "string" || text.length <= maxLength) { return text; } else { return ( diff --git a/website/src/components/FlaggableElement.tsx b/website/src/components/FlaggableElement.tsx index 2f3f25b2..9606f425 100644 --- a/website/src/components/FlaggableElement.tsx +++ b/website/src/components/FlaggableElement.tsx @@ -69,14 +69,14 @@ export const FlaggableElement = (props) => { const handleCheckboxState = (isChecked, idx) => { setCheckboxValues( checkboxValues.map((val, i) => { - return i == idx ? isChecked : val; + return i === idx ? isChecked : val; }) ); }; const handleSliderState = (newVal, idx) => { setSliderValues( sliderValues.map((val, i) => { - return i == idx ? newVal : val; + return i === idx ? newVal : val; }) ); }; diff --git a/website/src/components/Messages.tsx b/website/src/components/Messages.tsx index b14b0aaa..ef02d4e0 100644 --- a/website/src/components/Messages.tsx +++ b/website/src/components/Messages.tsx @@ -43,7 +43,7 @@ export const Messages = ({ return {items}; }; -export const MessageView = forwardRef(({ is_assistant, text, message_id }: Message, ref) => { +export const MessageView = forwardRef(({ is_assistant, text }: Message, ref) => { const { colorMode } = useColorMode(); const bgColor = useMemo(() => { @@ -54,7 +54,11 @@ export const MessageView = forwardRef(({ is_assistant, text, message_id }: Messa } }, [colorMode, is_assistant]); - return
{text}
; + return ( +
+ {text} +
+ ); }); MessageView.displayName = "MessageView"; diff --git a/website/src/components/Tasks/CreateTask.tsx b/website/src/components/Tasks/CreateTask.tsx index 7af262e1..e02dcdeb 100644 --- a/website/src/components/Tasks/CreateTask.tsx +++ b/website/src/components/Tasks/CreateTask.tsx @@ -1,10 +1,9 @@ import { useState } from "react"; - import { Messages } from "src/components/Messages"; import { TaskControls } from "src/components/Survey/TaskControls"; import { TrackedTextarea } from "src/components/Survey/TrackedTextarea"; import { TwoColumnsWithCards } from "src/components/Survey/TwoColumnsWithCards"; -import { TaskType } from "./TaskTypes"; +import { TaskType } from "src/components/Tasks/TaskTypes"; export interface CreateTaskProps { // we need a task type diff --git a/website/src/components/Tasks/EvaluateTask.tsx b/website/src/components/Tasks/EvaluateTask.tsx index 3871b2d9..d0a1f404 100644 --- a/website/src/components/Tasks/EvaluateTask.tsx +++ b/website/src/components/Tasks/EvaluateTask.tsx @@ -48,7 +48,7 @@ export const EvaluateTask = ({ tasks, trigger, onSkipTask, onNextTask, mainBgCla setRanking(tasks[0].task[sortables].map((_, idx) => idx))} onSubmitResponse={submitResponse} onSkipTask={(task, reason) => { diff --git a/website/src/components/Tasks/Task.tsx b/website/src/components/Tasks/Task.tsx index 153e0a93..777f5dd5 100644 --- a/website/src/components/Tasks/Task.tsx +++ b/website/src/components/Tasks/Task.tsx @@ -1,8 +1,8 @@ -import { CreateTask } from "./CreateTask"; -import { EvaluateTask } from "./EvaluateTask"; -import { TaskCategory, TaskTypes } from "./TaskTypes"; -import useSWRMutation from "swr/mutation"; +import { CreateTask } from "src/components/Tasks/CreateTask"; +import { EvaluateTask } from "src/components/Tasks/EvaluateTask"; +import { TaskCategory, TaskTypes } from "src/components/Tasks/TaskTypes"; import poster from "src/lib/poster"; +import useSWRMutation from "swr/mutation"; export const Task = ({ tasks, trigger, mutate, mainBgClasses }) => { const task = tasks[0].task; diff --git a/website/src/lib/oasst_api_client.ts b/website/src/lib/oasst_api_client.ts index 1bbb13a8..6a5ca58e 100644 --- a/website/src/lib/oasst_api_client.ts +++ b/website/src/lib/oasst_api_client.ts @@ -30,7 +30,7 @@ export class OasstApiClient { body: JSON.stringify(body), }); - if (resp.status == 204) { + if (resp.status === 204) { return null; } @@ -57,7 +57,7 @@ export class OasstApiClient { }, }); - if (resp.status == 204) { + if (resp.status === 204) { return null; } diff --git a/website/src/pages/api/set_label.ts b/website/src/pages/api/set_label.ts index 4db5ddaf..cfda114b 100644 --- a/website/src/pages/api/set_label.ts +++ b/website/src/pages/api/set_label.ts @@ -1,5 +1,4 @@ import { getToken } from "next-auth/jwt"; -import prisma from "src/lib/prismadb"; /** * Sets the Label in the Backend. @@ -15,7 +14,7 @@ const handler = async (req, res) => { } // Parse out the local message_id, task ID and the interaction contents. - const { message_id, post_id, label_map, text } = await JSON.parse(req.body); + const { message_id, label_map, text } = await JSON.parse(req.body); const interactionRes = await fetch(`${process.env.FASTAPI_URL}/api/v1/text_labels`, { method: "POST", diff --git a/website/src/pages/auth/verify.tsx b/website/src/pages/auth/verify.tsx index b4d7d739..876aa677 100644 --- a/website/src/pages/auth/verify.tsx +++ b/website/src/pages/auth/verify.tsx @@ -1,7 +1,6 @@ import { useColorMode } from "@chakra-ui/react"; import Head from "next/head"; import { getCsrfToken, getProviders } from "next-auth/react"; -import { AuthLayout } from "src/components/AuthLayout"; export default function Verify() { const { colorMode } = useColorMode(); diff --git a/website/src/pages/create/summarize_story.tsx b/website/src/pages/create/summarize_story.tsx index 8620a8f5..61415962 100644 --- a/website/src/pages/create/summarize_story.tsx +++ b/website/src/pages/create/summarize_story.tsx @@ -63,7 +63,7 @@ const SummarizeStory = () => { return ; } - if (tasks.length == 0) { + if (tasks.length === 0) { return
No tasks found...
; } diff --git a/website/src/pages/evaluate/rate_summary.tsx b/website/src/pages/evaluate/rate_summary.tsx index 0d2352a2..e9da4a63 100644 --- a/website/src/pages/evaluate/rate_summary.tsx +++ b/website/src/pages/evaluate/rate_summary.tsx @@ -60,7 +60,7 @@ const RateSummary = () => { return ; } - if (tasks.length == 0) { + if (tasks.length === 0) { return (
From f028c07dfbd1ae46f9924bbef3f375ac37b64ae2 Mon Sep 17 00:00:00 2001 From: Keith Stevens Date: Tue, 10 Jan 2023 13:10:31 +0900 Subject: [PATCH 03/16] Fixing the typing for the MessageView forwardRef --- website/src/components/Messages.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/src/components/Messages.tsx b/website/src/components/Messages.tsx index ef02d4e0..bb97ab5a 100644 --- a/website/src/components/Messages.tsx +++ b/website/src/components/Messages.tsx @@ -1,6 +1,6 @@ import { Grid } from "@chakra-ui/react"; -import { useColorMode } from "@chakra-ui/react"; -import { forwardRef, useMemo } from "react"; +import { forwardRef, useColorMode } from "@chakra-ui/react"; +import { useMemo } from "react"; import { FlaggableElement } from "./FlaggableElement"; @@ -43,7 +43,7 @@ export const Messages = ({ return {items}; }; -export const MessageView = forwardRef(({ is_assistant, text }: Message, ref) => { +export const MessageView = forwardRef(({ is_assistant, text }: Message, ref) => { const { colorMode } = useColorMode(); const bgColor = useMemo(() => { From f2c235476e1cbe522354c17e0ea9533d1a86c3da Mon Sep 17 00:00:00 2001 From: Keith Stevens Date: Tue, 10 Jan 2023 13:24:56 +0900 Subject: [PATCH 04/16] Deleting the auto-ack on task fetching in favor of auto-acking on answer submission. Fixes broken e2e tests --- website/src/pages/api/new_task/[task_type].ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/website/src/pages/api/new_task/[task_type].ts b/website/src/pages/api/new_task/[task_type].ts index a685d589..80334f76 100644 --- a/website/src/pages/api/new_task/[task_type].ts +++ b/website/src/pages/api/new_task/[task_type].ts @@ -39,8 +39,6 @@ const handler = async (req, res) => { // Add the valid labels that can be used to flag messages in this Task registeredTask["valid_labels"] = valid_labels; - // Update the backend with our Task ID - await oasstApiClient.ackTask(task.id, registeredTask.id); // Send the results to the client. res.status(200).json(registeredTask); From 54cc88bb1f8f7d1bc401e69f30cfc27737a4226d Mon Sep 17 00:00:00 2001 From: Keith Stevens Date: Tue, 10 Jan 2023 14:08:43 +0900 Subject: [PATCH 05/16] Ensure FlaggableElement always has the set of labels --- website/cypress/e2e/evaluate/rank_assistant_replies.cy.ts | 2 +- website/cypress/e2e/evaluate/rank_user_replies.cy.ts | 2 +- website/src/components/Messages/MessageTable.tsx | 5 +++-- website/src/components/Messages/MessageTableEntry.tsx | 6 ++++-- website/src/components/Tasks/EvaluateTask.tsx | 3 ++- website/src/pages/label/label_assistant_reply.tsx | 3 ++- website/src/pages/label/label_prompter_reply.tsx | 3 ++- 7 files changed, 15 insertions(+), 9 deletions(-) diff --git a/website/cypress/e2e/evaluate/rank_assistant_replies.cy.ts b/website/cypress/e2e/evaluate/rank_assistant_replies.cy.ts index c7b85695..3093bd56 100644 --- a/website/cypress/e2e/evaluate/rank_assistant_replies.cy.ts +++ b/website/cypress/e2e/evaluate/rank_assistant_replies.cy.ts @@ -1,7 +1,7 @@ describe("ranking prompter replies", () => { it("completes the current task on submit and on request shows a new task", () => { cy.signInWithEmail("cypress@example.com"); - cy.visit("/evaluate/rank_user_replies"); + cy.visit("/evaluate/rank_assistant_replies"); cy.get('[data-cy="task-id"').then((taskIdElement) => { const taskId = taskIdElement.text(); diff --git a/website/cypress/e2e/evaluate/rank_user_replies.cy.ts b/website/cypress/e2e/evaluate/rank_user_replies.cy.ts index c448a4c7..55487f1d 100644 --- a/website/cypress/e2e/evaluate/rank_user_replies.cy.ts +++ b/website/cypress/e2e/evaluate/rank_user_replies.cy.ts @@ -1,7 +1,7 @@ describe("ranking assistant replies", () => { it("completes the current task on submit and on request shows a new task", () => { cy.signInWithEmail("cypress@example.com"); - cy.visit("/evaluate/rank_assistant_replies"); + cy.visit("/evaluate/rank_user_replies"); cy.get('[data-cy="task-id"').then((taskIdElement) => { const taskId = taskIdElement.text(); diff --git a/website/src/components/Messages/MessageTable.tsx b/website/src/components/Messages/MessageTable.tsx index 95ccc540..33ffc4a4 100644 --- a/website/src/components/Messages/MessageTable.tsx +++ b/website/src/components/Messages/MessageTable.tsx @@ -1,11 +1,12 @@ import { Stack, StackDivider } from "@chakra-ui/react"; import { MessageTableEntry } from "src/components/Messages/MessageTableEntry"; -export function MessageTable({ messages }) { +export function MessageTable({ messages, valid_labels }) { + console.log(messages); return ( } spacing="4"> {messages.map((item, idx) => ( - + ))} ); diff --git a/website/src/components/Messages/MessageTableEntry.tsx b/website/src/components/Messages/MessageTableEntry.tsx index 9fad7262..0f58efad 100644 --- a/website/src/components/Messages/MessageTableEntry.tsx +++ b/website/src/components/Messages/MessageTableEntry.tsx @@ -2,6 +2,7 @@ import { Avatar, HStack, LinkBox, useColorModeValue } from "@chakra-ui/react"; import { boolean } from "boolean"; import NextLink from "next/link"; import { FlaggableElement } from "src/components/FlaggableElement"; +import type { ValidLabel } from "src/components/Messages"; interface Message { text: string; @@ -11,13 +12,14 @@ interface Message { interface MessageTableEntryProps { item: Message; idx: number; + valid_labels: ValidLabel[]; } export function MessageTableEntry(props: MessageTableEntryProps) { - const { item, idx } = props; + const { item, idx, valid_labels } = props; const bgColor = useColorModeValue(idx % 2 === 0 ? "bg-slate-800" : "bg-black", "bg-sky-900"); return ( - + ({ ...message, id: index })); } + const valid_labels = tasks[0].valid_labels; const sortables = tasks[0].task.replies ? "replies" : "prompts"; return ( @@ -42,7 +43,7 @@ export const EvaluateTask = ({ tasks, trigger, onSkipTask, onNextTask, mainBgCla

Given the following {sortables}, sort them from best to worst, best being first, worst being last.

- {messages ? : null} + {messages ? : null} diff --git a/website/src/pages/label/label_assistant_reply.tsx b/website/src/pages/label/label_assistant_reply.tsx index a0f961f7..89b612ca 100644 --- a/website/src/pages/label/label_assistant_reply.tsx +++ b/website/src/pages/label/label_assistant_reply.tsx @@ -19,6 +19,7 @@ const LabelAssistantReply = () => { } const task = tasks[0].task; + const valid_labels = tasks[0].valid_labels; const messages: Message[] = [ ...task.conversation.messages, { text: task.reply, is_assistant: true, message_id: task.message_id }, @@ -28,7 +29,7 @@ const LabelAssistantReply = () => { } + messages={} inputs={} controls={ { } const task = tasks[0].task; + const valid_labels = tasks[0].valid_labels; const messages: Message[] = [ ...task.conversation.messages, { text: task.reply, is_assistant: false, message_id: task.message_id }, @@ -28,7 +29,7 @@ const LabelPrompterReply = () => { } + messages={} inputs={} controls={ Date: Tue, 10 Jan 2023 14:16:19 +0900 Subject: [PATCH 06/16] Ensure FlaggableElement has an empty list of labels in the messages views --- .../src/components/Messages/MessageWithChildren.tsx | 4 ++-- website/src/hooks/tasks/useGenericTaskAPI.tsx | 2 ++ website/src/pages/messages/[id]/index.tsx | 2 +- website/src/pages/messages/index.tsx | 12 ++++++++++-- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/website/src/components/Messages/MessageWithChildren.tsx b/website/src/components/Messages/MessageWithChildren.tsx index c412f996..7e604dfa 100644 --- a/website/src/components/Messages/MessageWithChildren.tsx +++ b/website/src/components/Messages/MessageWithChildren.tsx @@ -64,7 +64,7 @@ export function MessageWithChildren(props: MessageWithChildrenProps) { - + @@ -90,7 +90,7 @@ export function MessageWithChildren(props: MessageWithChildrenProps) { {children.map((item, idx) => ( - + ))} diff --git a/website/src/hooks/tasks/useGenericTaskAPI.tsx b/website/src/hooks/tasks/useGenericTaskAPI.tsx index a57c9da4..e300e220 100644 --- a/website/src/hooks/tasks/useGenericTaskAPI.tsx +++ b/website/src/hooks/tasks/useGenericTaskAPI.tsx @@ -1,4 +1,5 @@ import { useState } from "react"; +import type { ValidLabel } from "src/components/Messages"; import fetcher from "src/lib/fetcher"; import poster from "src/lib/poster"; import useSWRImmutable from "swr/immutable"; @@ -10,6 +11,7 @@ export interface TaskResponse { id: string; userId: string; task: TaskType; + valid_labels: ValidLabel[]; } export const useGenericTaskAPI = (taskApiEndpoint: string) => { diff --git a/website/src/pages/messages/[id]/index.tsx b/website/src/pages/messages/[id]/index.tsx index eacd5a72..933c7508 100644 --- a/website/src/pages/messages/[id]/index.tsx +++ b/website/src/pages/messages/[id]/index.tsx @@ -41,7 +41,7 @@ const MessageDetail = ({ id }) => { Parent - + )} diff --git a/website/src/pages/messages/index.tsx b/website/src/pages/messages/index.tsx index 2809ba5c..28ec9c54 100644 --- a/website/src/pages/messages/index.tsx +++ b/website/src/pages/messages/index.tsx @@ -52,7 +52,11 @@ const MessagesDashboard = () => { borderRadius="xl" className="p-6 shadow-sm" > - {receivedMessages ? : } + {receivedMessages ? ( + + ) : ( + + )} @@ -66,7 +70,11 @@ const MessagesDashboard = () => { borderRadius="xl" className="p-6 shadow-sm" > - {receivedUserMessages ? : } + {receivedUserMessages ? ( + + ) : ( + + )} From aa22ed0d1ca25f8cae3fdddae07e4cd012ce6ba1 Mon Sep 17 00:00:00 2001 From: Keith Stevens Date: Tue, 10 Jan 2023 14:52:55 +0900 Subject: [PATCH 07/16] Remove debug log --- website/src/components/Messages/MessageTable.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/website/src/components/Messages/MessageTable.tsx b/website/src/components/Messages/MessageTable.tsx index 33ffc4a4..bacd27f9 100644 --- a/website/src/components/Messages/MessageTable.tsx +++ b/website/src/components/Messages/MessageTable.tsx @@ -2,7 +2,6 @@ import { Stack, StackDivider } from "@chakra-ui/react"; import { MessageTableEntry } from "src/components/Messages/MessageTableEntry"; export function MessageTable({ messages, valid_labels }) { - console.log(messages); return ( } spacing="4"> {messages.map((item, idx) => ( From 97c1f12e11a9d004fc19cc885d8b408d79a69a70 Mon Sep 17 00:00:00 2001 From: AbdBarho Date: Mon, 9 Jan 2023 20:08:26 +0100 Subject: [PATCH 08/16] Centralize task types --- website/src/components/Messages.tsx | 7 +-- website/src/components/Tasks/CreateTask.tsx | 5 +- website/src/components/Tasks/TaskTypes.tsx | 4 +- .../tasks/create/useCreateInitialPrompt.ts | 9 --- .../src/hooks/tasks/create/useCreateReply.ts | 24 -------- .../tasks/evaluate/useRankInitialPrompts.ts | 9 --- .../hooks/tasks/evaluate/useRankReplies.ts | 25 -------- .../tasks/labeling/useLabelAssistantReply.ts | 22 ------- .../tasks/labeling/useLabelInitialPrompt.tsx | 15 ----- .../tasks/labeling/useLabelPrompterReply.ts | 22 ------- .../hooks/tasks/labeling/useLabelingTask.ts | 20 ------- website/src/hooks/tasks/useCreateReply.ts | 8 +++ website/src/hooks/tasks/useGenericTaskAPI.tsx | 12 +--- website/src/hooks/tasks/useLabelingTask.ts | 32 +++++++++++ website/src/hooks/tasks/useRankReplies.ts | 12 ++++ website/src/pages/create/assistant_reply.tsx | 2 +- website/src/pages/create/initial_prompt.tsx | 2 +- website/src/pages/create/user_reply.tsx | 2 +- .../pages/evaluate/rank_assistant_replies.tsx | 2 +- .../pages/evaluate/rank_initial_prompts.tsx | 2 +- .../src/pages/evaluate/rank_user_replies.tsx | 2 +- .../src/pages/label/label_assistant_reply.tsx | 7 +-- .../src/pages/label/label_initial_prompt.tsx | 5 +- .../src/pages/label/label_prompter_reply.tsx | 7 +-- website/src/pages/messages/index.tsx | 4 +- website/src/types/Conversation.ts | 9 +++ website/src/types/Task.ts | 24 ++++++++ website/src/types/Tasks.ts | 57 +++++++++++++++++++ 28 files changed, 163 insertions(+), 188 deletions(-) delete mode 100644 website/src/hooks/tasks/create/useCreateInitialPrompt.ts delete mode 100644 website/src/hooks/tasks/create/useCreateReply.ts delete mode 100644 website/src/hooks/tasks/evaluate/useRankInitialPrompts.ts delete mode 100644 website/src/hooks/tasks/evaluate/useRankReplies.ts delete mode 100644 website/src/hooks/tasks/labeling/useLabelAssistantReply.ts delete mode 100644 website/src/hooks/tasks/labeling/useLabelInitialPrompt.tsx delete mode 100644 website/src/hooks/tasks/labeling/useLabelPrompterReply.ts delete mode 100644 website/src/hooks/tasks/labeling/useLabelingTask.ts create mode 100644 website/src/hooks/tasks/useCreateReply.ts create mode 100644 website/src/hooks/tasks/useLabelingTask.ts create mode 100644 website/src/hooks/tasks/useRankReplies.ts create mode 100644 website/src/types/Conversation.ts create mode 100644 website/src/types/Task.ts create mode 100644 website/src/types/Tasks.ts diff --git a/website/src/components/Messages.tsx b/website/src/components/Messages.tsx index bb97ab5a..c814a6d6 100644 --- a/website/src/components/Messages.tsx +++ b/website/src/components/Messages.tsx @@ -1,15 +1,10 @@ import { Grid } from "@chakra-ui/react"; import { forwardRef, useColorMode } from "@chakra-ui/react"; import { useMemo } from "react"; +import { Message } from "src/types/Conversation"; import { FlaggableElement } from "./FlaggableElement"; -export interface Message { - text: string; - is_assistant: boolean; - message_id: string; -} - export interface ValidLabel { name: string; display_text: string; diff --git a/website/src/components/Tasks/CreateTask.tsx b/website/src/components/Tasks/CreateTask.tsx index e02dcdeb..a56432b7 100644 --- a/website/src/components/Tasks/CreateTask.tsx +++ b/website/src/components/Tasks/CreateTask.tsx @@ -3,13 +3,14 @@ import { Messages } from "src/components/Messages"; import { TaskControls } from "src/components/Survey/TaskControls"; import { TrackedTextarea } from "src/components/Survey/TrackedTextarea"; import { TwoColumnsWithCards } from "src/components/Survey/TwoColumnsWithCards"; -import { TaskType } from "src/components/Tasks/TaskTypes"; +import {} from "src/components/Tasks/TaskTypes"; +import { TaskType } from "./TaskTypes"; export interface CreateTaskProps { // we need a task type // eslint-disable-next-line @typescript-eslint/no-explicit-any tasks: any[]; - taskType: TaskType; + taskType: TaskInfo; trigger: (update: { id: string; update_type: string; content: { text: string } }) => void; onSkipTask: (task: { id: string }, reason: string) => void; onNextTask: () => void; diff --git a/website/src/components/Tasks/TaskTypes.tsx b/website/src/components/Tasks/TaskTypes.tsx index 409e7038..d255756a 100644 --- a/website/src/components/Tasks/TaskTypes.tsx +++ b/website/src/components/Tasks/TaskTypes.tsx @@ -4,7 +4,7 @@ export enum TaskCategory { Label = "Label", } -export interface TaskType { +export interface TaskInfo { label: string; desc: string; category: TaskCategory; @@ -14,7 +14,7 @@ export interface TaskType { instruction?: string; } -export const TaskTypes: TaskType[] = [ +export const TaskTypes: TaskInfo[] = [ // create { label: "Create Initial Prompts", diff --git a/website/src/hooks/tasks/create/useCreateInitialPrompt.ts b/website/src/hooks/tasks/create/useCreateInitialPrompt.ts deleted file mode 100644 index cf0193e8..00000000 --- a/website/src/hooks/tasks/create/useCreateInitialPrompt.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { useGenericTaskAPI } from "../useGenericTaskAPI"; - -interface CreateInitialPromptTask { - id: string; - type: "initial_prompt"; - hint: string; -} - -export const useCreateInitialPrompt = () => useGenericTaskAPI("initial_prompt"); diff --git a/website/src/hooks/tasks/create/useCreateReply.ts b/website/src/hooks/tasks/create/useCreateReply.ts deleted file mode 100644 index 0bc78319..00000000 --- a/website/src/hooks/tasks/create/useCreateReply.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { useGenericTaskAPI } from "../useGenericTaskAPI"; - -interface BaseCreateReplyTask { - id: string; - conversation: { - messages: Array<{ - text: string; - is_assistant: boolean; - message_id: string; - }>; - }; -} - -export interface CreateAssistantReplyTask extends BaseCreateReplyTask { - type: "assistant_reply"; -} - -export interface CreatePrompterReplyTask extends BaseCreateReplyTask { - type: "prompter_reply"; -} - -export const useCreateAssistantReply = () => useGenericTaskAPI("assistant_reply"); - -export const useCreatePrompterReply = () => useGenericTaskAPI("prompter_reply"); diff --git a/website/src/hooks/tasks/evaluate/useRankInitialPrompts.ts b/website/src/hooks/tasks/evaluate/useRankInitialPrompts.ts deleted file mode 100644 index da772c80..00000000 --- a/website/src/hooks/tasks/evaluate/useRankInitialPrompts.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { useGenericTaskAPI } from "../useGenericTaskAPI"; - -interface RankInitialPromptsTask { - id: string; - type: "rank_initial_prompts"; - prompts: string[]; -} - -export const useRankInitialPromptsTask = () => useGenericTaskAPI("rank_initial_prompts"); diff --git a/website/src/hooks/tasks/evaluate/useRankReplies.ts b/website/src/hooks/tasks/evaluate/useRankReplies.ts deleted file mode 100644 index 2d8d513f..00000000 --- a/website/src/hooks/tasks/evaluate/useRankReplies.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { useGenericTaskAPI } from "../useGenericTaskAPI"; - -interface BaseRankRepliesTask { - id: string; - replies: string[]; - conversation: { - messages: Array<{ - text: string; - is_assistant: boolean; - message_id: string; - }>; - }; -} - -interface RankAssistantRepliesTask extends BaseRankRepliesTask { - type: "rank_assistant_replies"; -} - -interface RankPrompterRepliesTask extends BaseRankRepliesTask { - type: "rank_prompter_replies"; -} - -export const useRankAssistantRepliesTask = () => useGenericTaskAPI("rank_assistant_replies"); - -export const useRankPrompterRepliesTask = () => useGenericTaskAPI("rank_prompter_replies"); diff --git a/website/src/hooks/tasks/labeling/useLabelAssistantReply.ts b/website/src/hooks/tasks/labeling/useLabelAssistantReply.ts deleted file mode 100644 index 3c44046e..00000000 --- a/website/src/hooks/tasks/labeling/useLabelAssistantReply.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { TaskResponse } from "../useGenericTaskAPI"; -import { LabelingTaskType, useLabelingTask } from "./useLabelingTask"; - -export interface LabelAssistantReplyTask { - id: string; - type: LabelingTaskType.label_assistant_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 deleted file mode 100644 index f7ba8ab5..00000000 --- a/website/src/hooks/tasks/labeling/useLabelInitialPrompt.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { TaskResponse } from "../useGenericTaskAPI"; -import { LabelingTaskType, useLabelingTask } from "./useLabelingTask"; - -export interface LabelInitialPromptTask { - id: string; - type: LabelingTaskType.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 deleted file mode 100644 index 9de2057f..00000000 --- a/website/src/hooks/tasks/labeling/useLabelPrompterReply.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { TaskResponse } from "../useGenericTaskAPI"; -import { LabelingTaskType, useLabelingTask } from "./useLabelingTask"; - -export interface LabelPrompterReplyTask { - id: string; - type: LabelingTaskType.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/labeling/useLabelingTask.ts b/website/src/hooks/tasks/labeling/useLabelingTask.ts deleted file mode 100644 index 27555284..00000000 --- a/website/src/hooks/tasks/labeling/useLabelingTask.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { useGenericTaskAPI } from "../useGenericTaskAPI"; - -export const enum LabelingTaskType { - label_initial_prompt = "label_initial_prompt", - label_prompter_reply = "label_prompter_reply", - label_assistant_reply = "label_assistant_reply", -} - -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); - 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/hooks/tasks/useCreateReply.ts b/website/src/hooks/tasks/useCreateReply.ts new file mode 100644 index 00000000..23bc041d --- /dev/null +++ b/website/src/hooks/tasks/useCreateReply.ts @@ -0,0 +1,8 @@ +import { TaskType } from "src/types/Task"; +import { CreateAssistantReplyTask, CreateInitialPromptTask, CreatePrompterReplyTask } from "src/types/Tasks"; + +import { useGenericTaskAPI } from "./useGenericTaskAPI"; + +export const useCreateAssistantReply = () => useGenericTaskAPI(TaskType.assistant_reply); +export const useCreatePrompterReply = () => useGenericTaskAPI(TaskType.prompter_reply); +export const useCreateInitialPrompt = () => useGenericTaskAPI(TaskType.initial_prompt); diff --git a/website/src/hooks/tasks/useGenericTaskAPI.tsx b/website/src/hooks/tasks/useGenericTaskAPI.tsx index e300e220..4b9b3bae 100644 --- a/website/src/hooks/tasks/useGenericTaskAPI.tsx +++ b/website/src/hooks/tasks/useGenericTaskAPI.tsx @@ -2,19 +2,11 @@ import { useState } from "react"; import type { ValidLabel } from "src/components/Messages"; import fetcher from "src/lib/fetcher"; import poster from "src/lib/poster"; +import { BaseTask, TaskResponse } from "src/types/Task"; import useSWRImmutable from "swr/immutable"; import useSWRMutation from "swr/mutation"; -// TODO: type & centralize types for all tasks - -export interface TaskResponse { - id: string; - userId: string; - task: TaskType; - valid_labels: ValidLabel[]; -} - -export const useGenericTaskAPI = (taskApiEndpoint: string) => { +export const useGenericTaskAPI = (taskApiEndpoint: string) => { type ConcreteTaskResponse = TaskResponse; const [tasks, setTasks] = useState([]); diff --git a/website/src/hooks/tasks/useLabelingTask.ts b/website/src/hooks/tasks/useLabelingTask.ts new file mode 100644 index 00000000..5e5050ab --- /dev/null +++ b/website/src/hooks/tasks/useLabelingTask.ts @@ -0,0 +1,32 @@ +import { BaseTask, TaskResponse, TaskType } from "src/types/Task"; +import { LabelAssistantReplyTask, LabelInitialPromptTask, LabelPrompterReplyTask } from "src/types/Tasks"; + +import { useGenericTaskAPI } from "./useGenericTaskAPI"; + +const useLabelingTask = ( + endpoint: TaskType.label_assistant_reply | TaskType.label_prompter_reply | TaskType.label_initial_prompt +) => { + 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); + 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 }; +}; + +export type LabelAssistantReplyTaskResponse = TaskResponse; + +export const useLabelAssistantReplyTask = () => + useLabelingTask(TaskType.label_assistant_reply); + +export type LabelInitialPromptTaskResponse = TaskResponse; + +export const useLabelInitialPromptTask = () => useLabelingTask(TaskType.label_initial_prompt); + +export type LabelPrompterReplyTaskResponse = TaskResponse; + +export const useLabelPrompterReplyTask = () => useLabelingTask(TaskType.label_prompter_reply); diff --git a/website/src/hooks/tasks/useRankReplies.ts b/website/src/hooks/tasks/useRankReplies.ts new file mode 100644 index 00000000..d4accda0 --- /dev/null +++ b/website/src/hooks/tasks/useRankReplies.ts @@ -0,0 +1,12 @@ +import { TaskType } from "src/types/Task"; +import { RankAssistantRepliesTask, RankInitialPromptsTask, RankPrompterRepliesTask } from "src/types/Tasks"; + +import { useGenericTaskAPI } from "./useGenericTaskAPI"; + +export const useRankAssistantRepliesTask = () => + useGenericTaskAPI(TaskType.rank_assistant_replies); + +export const useRankPrompterRepliesTask = () => + useGenericTaskAPI(TaskType.rank_prompter_replies); + +export const useRankInitialPromptsTask = () => useGenericTaskAPI(TaskType.rank_initial_prompts); diff --git a/website/src/pages/create/assistant_reply.tsx b/website/src/pages/create/assistant_reply.tsx index e9aee226..17facd5d 100644 --- a/website/src/pages/create/assistant_reply.tsx +++ b/website/src/pages/create/assistant_reply.tsx @@ -3,7 +3,7 @@ import { useColorMode } from "@chakra-ui/react"; import Head from "next/head"; import { LoadingScreen } from "src/components/Loading/LoadingScreen"; import { Task } from "src/components/Tasks/Task"; -import { useCreateAssistantReply } from "src/hooks/tasks/create/useCreateReply"; +import { useCreateAssistantReply } from "src/hooks/tasks/useCreateReply"; const AssistantReply = () => { const { tasks, isLoading, reset, trigger } = useCreateAssistantReply(); diff --git a/website/src/pages/create/initial_prompt.tsx b/website/src/pages/create/initial_prompt.tsx index efea6474..57f0dabd 100644 --- a/website/src/pages/create/initial_prompt.tsx +++ b/website/src/pages/create/initial_prompt.tsx @@ -3,7 +3,7 @@ import { useColorMode } from "@chakra-ui/react"; import Head from "next/head"; import { LoadingScreen } from "src/components/Loading/LoadingScreen"; import { Task } from "src/components/Tasks/Task"; -import { useCreateInitialPrompt } from "src/hooks/tasks/create/useCreateInitialPrompt"; +import { useCreateInitialPrompt } from "src/hooks/tasks/useCreateReply"; const InitialPrompt = () => { const { tasks, isLoading, reset, trigger } = useCreateInitialPrompt(); diff --git a/website/src/pages/create/user_reply.tsx b/website/src/pages/create/user_reply.tsx index 2394bd63..a0af0e95 100644 --- a/website/src/pages/create/user_reply.tsx +++ b/website/src/pages/create/user_reply.tsx @@ -3,7 +3,7 @@ import Head from "next/head"; import { Container } from "src/components/Container"; import { LoadingScreen } from "src/components/Loading/LoadingScreen"; import { Task } from "src/components/Tasks/Task"; -import { useCreatePrompterReply } from "src/hooks/tasks/create/useCreateReply"; +import { useCreatePrompterReply } from "src/hooks/tasks/useCreateReply"; const UserReply = () => { const { tasks, isLoading, reset, trigger } = useCreatePrompterReply(); diff --git a/website/src/pages/evaluate/rank_assistant_replies.tsx b/website/src/pages/evaluate/rank_assistant_replies.tsx index 931c9194..8546e7a6 100644 --- a/website/src/pages/evaluate/rank_assistant_replies.tsx +++ b/website/src/pages/evaluate/rank_assistant_replies.tsx @@ -3,7 +3,7 @@ import Head from "next/head"; import { Container } from "src/components/Container"; import { LoadingScreen } from "src/components/Loading/LoadingScreen"; import { Task } from "src/components/Tasks/Task"; -import { useRankAssistantRepliesTask } from "src/hooks/tasks/evaluate/useRankReplies"; +import { useRankAssistantRepliesTask } from "src/hooks/tasks/useRankReplies"; const RankAssistantReplies = () => { const { tasks, isLoading, reset, trigger } = useRankAssistantRepliesTask(); diff --git a/website/src/pages/evaluate/rank_initial_prompts.tsx b/website/src/pages/evaluate/rank_initial_prompts.tsx index 4b717143..1898a93a 100644 --- a/website/src/pages/evaluate/rank_initial_prompts.tsx +++ b/website/src/pages/evaluate/rank_initial_prompts.tsx @@ -3,7 +3,7 @@ import Head from "next/head"; import { Container } from "src/components/Container"; import { LoadingScreen } from "src/components/Loading/LoadingScreen"; import { Task } from "src/components/Tasks/Task"; -import { useRankInitialPromptsTask } from "src/hooks/tasks/evaluate/useRankInitialPrompts"; +import { useRankInitialPromptsTask } from "src/hooks/tasks/useRankReplies"; const RankInitialPrompts = () => { const { tasks, isLoading, reset, trigger } = useRankInitialPromptsTask(); diff --git a/website/src/pages/evaluate/rank_user_replies.tsx b/website/src/pages/evaluate/rank_user_replies.tsx index 659874a2..e2a39977 100644 --- a/website/src/pages/evaluate/rank_user_replies.tsx +++ b/website/src/pages/evaluate/rank_user_replies.tsx @@ -3,7 +3,7 @@ import Head from "next/head"; import { Container } from "src/components/Container"; import { LoadingScreen } from "src/components/Loading/LoadingScreen"; import { Task } from "src/components/Tasks/Task"; -import { useRankPrompterRepliesTask } from "src/hooks/tasks/evaluate/useRankReplies"; +import { useRankPrompterRepliesTask } from "src/hooks/tasks/useRankReplies"; const RankUserReplies = () => { const { tasks, isLoading, reset, trigger } = useRankPrompterRepliesTask(); diff --git a/website/src/pages/label/label_assistant_reply.tsx b/website/src/pages/label/label_assistant_reply.tsx index 89b612ca..99c10f56 100644 --- a/website/src/pages/label/label_assistant_reply.tsx +++ b/website/src/pages/label/label_assistant_reply.tsx @@ -1,13 +1,10 @@ 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"; +import { LabelAssistantReplyTaskResponse, useLabelAssistantReplyTask } from "src/hooks/tasks/useLabelingTask"; +import { Message } from "src/types/Conversation"; const LabelAssistantReply = () => { const [sliderValues, setSliderValues] = useState([]); diff --git a/website/src/pages/label/label_initial_prompt.tsx b/website/src/pages/label/label_initial_prompt.tsx index 3c791f23..4cd4343b 100644 --- a/website/src/pages/label/label_initial_prompt.tsx +++ b/website/src/pages/label/label_initial_prompt.tsx @@ -3,10 +3,7 @@ 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/labeling/useLabelInitialPrompt"; +import { LabelInitialPromptTaskResponse, useLabelInitialPromptTask } from "src/hooks/tasks/useLabelingTask"; 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 812a3fcc..35654a47 100644 --- a/website/src/pages/label/label_prompter_reply.tsx +++ b/website/src/pages/label/label_prompter_reply.tsx @@ -1,13 +1,10 @@ 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 { - LabelPrompterReplyTaskResponse, - useLabelPrompterReplyTask, -} from "src/hooks/tasks/labeling/useLabelPrompterReply"; +import { LabelPrompterReplyTaskResponse, useLabelPrompterReplyTask } from "src/hooks/tasks/useLabelingTask"; +import { Message } from "src/types/Conversation"; const LabelPrompterReply = () => { const [sliderValues, setSliderValues] = useState([]); diff --git a/website/src/pages/messages/index.tsx b/website/src/pages/messages/index.tsx index 28ec9c54..ed48d47b 100644 --- a/website/src/pages/messages/index.tsx +++ b/website/src/pages/messages/index.tsx @@ -2,9 +2,9 @@ import { Box, CircularProgress, SimpleGrid, Text, useColorModeValue } from "@cha import Head from "next/head"; import { useEffect, useState } from "react"; import { getDashboardLayout } from "src/components/Layout"; -import { Message } from "src/components/Messages"; import { MessageTable } from "src/components/Messages/MessageTable"; import fetcher from "src/lib/fetcher"; +import { Message } from "src/types/Conversation"; import useSWRImmutable from "swr/immutable"; const MessagesDashboard = () => { @@ -82,6 +82,6 @@ const MessagesDashboard = () => { ); }; -MessagesDashboard.getLayout = (page) => getDashboardLayout(page); +MessagesDashboard.getLayout = getDashboardLayout; export default MessagesDashboard; diff --git a/website/src/types/Conversation.ts b/website/src/types/Conversation.ts new file mode 100644 index 00000000..f12b2781 --- /dev/null +++ b/website/src/types/Conversation.ts @@ -0,0 +1,9 @@ +export interface Message { + text: string; + is_assistant: boolean; + message_id: string; +} + +export interface Conversation { + messages: Message[]; +} diff --git a/website/src/types/Task.ts b/website/src/types/Task.ts new file mode 100644 index 00000000..0dca6a5b --- /dev/null +++ b/website/src/types/Task.ts @@ -0,0 +1,24 @@ +export const enum TaskType { + initial_prompt = "initial_prompt", + assistant_reply = "assistant_reply", + prompter_reply = "prompter_reply", + + rank_initial_prompts = "rank_initial_prompts", + rank_assistant_replies = "rank_assistant_replies", + rank_prompter_replies = "rank_prompter_replies", + + label_initial_prompt = "label_initial_prompt", + label_prompter_reply = "label_prompter_reply", + label_assistant_reply = "label_assistant_reply", +} + +export interface BaseTask { + id: string; + type: TaskType; +} + +export interface TaskResponse { + id: string; + userId: string; + task: Task; +} diff --git a/website/src/types/Tasks.ts b/website/src/types/Tasks.ts new file mode 100644 index 00000000..50c251bb --- /dev/null +++ b/website/src/types/Tasks.ts @@ -0,0 +1,57 @@ +import { Conversation } from "./Conversation"; +import { BaseTask, TaskType } from "./Task"; + +export interface CreateInitialPromptTask extends BaseTask { + type: TaskType.initial_prompt; + hint: string; +} + +export interface CreateAssistantReplyTask extends BaseTask { + type: TaskType.assistant_reply; + conversation: Conversation; +} + +export interface CreatePrompterReplyTask extends BaseTask { + type: TaskType.prompter_reply; + conversation: Conversation; +} + +export interface RankInitialPromptsTask extends BaseTask { + type: TaskType.rank_initial_prompts; + prompts: string[]; +} + +export interface RankAssistantRepliesTask extends BaseTask { + type: TaskType.rank_assistant_replies; + conversation: Conversation; + replies: string[]; +} + +export interface RankPrompterRepliesTask extends BaseTask { + type: TaskType.rank_prompter_replies; + conversation: Conversation; + replies: string[]; +} + +export interface LabelAssistantReplyTask extends BaseTask { + type: TaskType.label_assistant_reply; + message_id: string; + conversation: Conversation; + reply: string; + valid_labels: string[]; +} + +export interface LabelInitialPromptTask extends BaseTask { + type: TaskType.label_initial_prompt; + message_id: string; + valid_labels: string[]; + prompt: string; +} + +export interface LabelPrompterReplyTask extends BaseTask { + type: TaskType.label_prompter_reply; + message_id: string; + conversation: Conversation; + reply: string; + valid_labels: string[]; +} From 5b275ed804e813afe964511efbe0840d701b57bc Mon Sep 17 00:00:00 2001 From: Yannic Kilcher Date: Tue, 10 Jan 2023 07:46:53 +0100 Subject: [PATCH 09/16] changed pre-commit event type --- .github/workflows/pre-commit.yaml | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pre-commit.yaml b/.github/workflows/pre-commit.yaml index 0f82185f..47f21feb 100644 --- a/.github/workflows/pre-commit.yaml +++ b/.github/workflows/pre-commit.yaml @@ -4,20 +4,28 @@ on: push: branches: - main - pull_request: - workflow_call: + pull_request_target: jobs: pre-commit: runs-on: ubuntu-latest steps: + # in case of PR, check out the PR's head branch - uses: actions/checkout@v3 + if: github.event_name == 'pull_request_target' + with: + ref: ${{ github.event.pull_request.head.sha }} + + # in case of push, check out the main branch + - uses: actions/checkout@v3 + if: github.event_name == 'push' + - uses: actions/setup-python@v4 with: python-version: "3.10" - uses: pre-commit/action@v3.0.0 - name: Post PR comment on failure - if: failure() && github.event_name == 'pull_request' + if: failure() && github.event_name == 'pull_request_target' uses: peter-evans/create-or-update-comment@v2 with: issue-number: ${{ github.event.pull_request.number }} From 2c0463f6f89fd24ebd356a60d6525e0aeac8749f Mon Sep 17 00:00:00 2001 From: Keith Stevens Date: Tue, 10 Jan 2023 16:16:14 +0900 Subject: [PATCH 10/16] rebasing with main --- website/src/components/Messages.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/website/src/components/Messages.tsx b/website/src/components/Messages.tsx index c814a6d6..24f491f1 100644 --- a/website/src/components/Messages.tsx +++ b/website/src/components/Messages.tsx @@ -1,5 +1,4 @@ -import { Grid } from "@chakra-ui/react"; -import { forwardRef, useColorMode } from "@chakra-ui/react"; +import { Grid, forwardRef, useColorMode } from "@chakra-ui/react"; import { useMemo } from "react"; import { Message } from "src/types/Conversation"; From c4d5ed990bc5e65d262c4d2330d97a128d17a0de Mon Sep 17 00:00:00 2001 From: Keith Stevens Date: Tue, 10 Jan 2023 16:17:25 +0900 Subject: [PATCH 11/16] rebasing --- website/src/components/Tasks/CreateTask.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/website/src/components/Tasks/CreateTask.tsx b/website/src/components/Tasks/CreateTask.tsx index a56432b7..a424315a 100644 --- a/website/src/components/Tasks/CreateTask.tsx +++ b/website/src/components/Tasks/CreateTask.tsx @@ -3,8 +3,7 @@ import { Messages } from "src/components/Messages"; import { TaskControls } from "src/components/Survey/TaskControls"; import { TrackedTextarea } from "src/components/Survey/TrackedTextarea"; import { TwoColumnsWithCards } from "src/components/Survey/TwoColumnsWithCards"; -import {} from "src/components/Tasks/TaskTypes"; -import { TaskType } from "./TaskTypes"; +import { TaskInfo } from "src/components/Tasks/TaskTypes"; export interface CreateTaskProps { // we need a task type From fe4e949f2fb4f92404a5068993c7988ccef99730 Mon Sep 17 00:00:00 2001 From: Keith Stevens Date: Tue, 10 Jan 2023 16:23:56 +0900 Subject: [PATCH 12/16] Revert "rebasing" This reverts commit c4d5ed990bc5e65d262c4d2330d97a128d17a0de. --- website/src/components/Tasks/CreateTask.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/website/src/components/Tasks/CreateTask.tsx b/website/src/components/Tasks/CreateTask.tsx index a424315a..a56432b7 100644 --- a/website/src/components/Tasks/CreateTask.tsx +++ b/website/src/components/Tasks/CreateTask.tsx @@ -3,7 +3,8 @@ import { Messages } from "src/components/Messages"; import { TaskControls } from "src/components/Survey/TaskControls"; import { TrackedTextarea } from "src/components/Survey/TrackedTextarea"; import { TwoColumnsWithCards } from "src/components/Survey/TwoColumnsWithCards"; -import { TaskInfo } from "src/components/Tasks/TaskTypes"; +import {} from "src/components/Tasks/TaskTypes"; +import { TaskType } from "./TaskTypes"; export interface CreateTaskProps { // we need a task type From 81cb88615bf01e0a4ea8d9ee451a13bdf85f1498 Mon Sep 17 00:00:00 2001 From: Keith Stevens Date: Tue, 10 Jan 2023 16:24:15 +0900 Subject: [PATCH 13/16] Revert "rebasing with main" This reverts commit 2c0463f6f89fd24ebd356a60d6525e0aeac8749f. --- website/src/components/Messages.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/website/src/components/Messages.tsx b/website/src/components/Messages.tsx index 24f491f1..c814a6d6 100644 --- a/website/src/components/Messages.tsx +++ b/website/src/components/Messages.tsx @@ -1,4 +1,5 @@ -import { Grid, forwardRef, useColorMode } from "@chakra-ui/react"; +import { Grid } from "@chakra-ui/react"; +import { forwardRef, useColorMode } from "@chakra-ui/react"; import { useMemo } from "react"; import { Message } from "src/types/Conversation"; From 555113a6f222da5c17c4cd70d6b1966380528375 Mon Sep 17 00:00:00 2001 From: Keith Stevens Date: Tue, 10 Jan 2023 16:24:25 +0900 Subject: [PATCH 14/16] Revert "changed pre-commit event type" This reverts commit 5b275ed804e813afe964511efbe0840d701b57bc. --- .github/workflows/pre-commit.yaml | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/.github/workflows/pre-commit.yaml b/.github/workflows/pre-commit.yaml index 47f21feb..0f82185f 100644 --- a/.github/workflows/pre-commit.yaml +++ b/.github/workflows/pre-commit.yaml @@ -4,28 +4,20 @@ on: push: branches: - main - pull_request_target: + pull_request: + workflow_call: jobs: pre-commit: runs-on: ubuntu-latest steps: - # in case of PR, check out the PR's head branch - uses: actions/checkout@v3 - if: github.event_name == 'pull_request_target' - with: - ref: ${{ github.event.pull_request.head.sha }} - - # in case of push, check out the main branch - - uses: actions/checkout@v3 - if: github.event_name == 'push' - - uses: actions/setup-python@v4 with: python-version: "3.10" - uses: pre-commit/action@v3.0.0 - name: Post PR comment on failure - if: failure() && github.event_name == 'pull_request_target' + if: failure() && github.event_name == 'pull_request' uses: peter-evans/create-or-update-comment@v2 with: issue-number: ${{ github.event.pull_request.number }} From 062bfdba3afb36cb6fdf2f21d0f621adbb2b84e3 Mon Sep 17 00:00:00 2001 From: Keith Stevens Date: Tue, 10 Jan 2023 16:24:35 +0900 Subject: [PATCH 15/16] Revert "Centralize task types" This reverts commit 97c1f12e11a9d004fc19cc885d8b408d79a69a70. --- website/src/components/Messages.tsx | 7 ++- website/src/components/Tasks/CreateTask.tsx | 5 +- website/src/components/Tasks/TaskTypes.tsx | 4 +- .../tasks/create/useCreateInitialPrompt.ts | 9 +++ .../src/hooks/tasks/create/useCreateReply.ts | 24 ++++++++ .../tasks/evaluate/useRankInitialPrompts.ts | 9 +++ .../hooks/tasks/evaluate/useRankReplies.ts | 25 ++++++++ .../tasks/labeling/useLabelAssistantReply.ts | 22 +++++++ .../tasks/labeling/useLabelInitialPrompt.tsx | 15 +++++ .../tasks/labeling/useLabelPrompterReply.ts | 22 +++++++ .../hooks/tasks/labeling/useLabelingTask.ts | 20 +++++++ website/src/hooks/tasks/useCreateReply.ts | 8 --- website/src/hooks/tasks/useGenericTaskAPI.tsx | 12 +++- website/src/hooks/tasks/useLabelingTask.ts | 32 ----------- website/src/hooks/tasks/useRankReplies.ts | 12 ---- website/src/pages/create/assistant_reply.tsx | 2 +- website/src/pages/create/initial_prompt.tsx | 2 +- website/src/pages/create/user_reply.tsx | 2 +- .../pages/evaluate/rank_assistant_replies.tsx | 2 +- .../pages/evaluate/rank_initial_prompts.tsx | 2 +- .../src/pages/evaluate/rank_user_replies.tsx | 2 +- .../src/pages/label/label_assistant_reply.tsx | 7 ++- .../src/pages/label/label_initial_prompt.tsx | 5 +- .../src/pages/label/label_prompter_reply.tsx | 7 ++- website/src/pages/messages/index.tsx | 4 +- website/src/types/Conversation.ts | 9 --- website/src/types/Task.ts | 24 -------- website/src/types/Tasks.ts | 57 ------------------- 28 files changed, 188 insertions(+), 163 deletions(-) create mode 100644 website/src/hooks/tasks/create/useCreateInitialPrompt.ts create mode 100644 website/src/hooks/tasks/create/useCreateReply.ts create mode 100644 website/src/hooks/tasks/evaluate/useRankInitialPrompts.ts create mode 100644 website/src/hooks/tasks/evaluate/useRankReplies.ts 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 create mode 100644 website/src/hooks/tasks/labeling/useLabelingTask.ts delete mode 100644 website/src/hooks/tasks/useCreateReply.ts delete mode 100644 website/src/hooks/tasks/useLabelingTask.ts delete mode 100644 website/src/hooks/tasks/useRankReplies.ts delete mode 100644 website/src/types/Conversation.ts delete mode 100644 website/src/types/Task.ts delete mode 100644 website/src/types/Tasks.ts diff --git a/website/src/components/Messages.tsx b/website/src/components/Messages.tsx index c814a6d6..bb97ab5a 100644 --- a/website/src/components/Messages.tsx +++ b/website/src/components/Messages.tsx @@ -1,10 +1,15 @@ import { Grid } from "@chakra-ui/react"; import { forwardRef, useColorMode } from "@chakra-ui/react"; import { useMemo } from "react"; -import { Message } from "src/types/Conversation"; import { FlaggableElement } from "./FlaggableElement"; +export interface Message { + text: string; + is_assistant: boolean; + message_id: string; +} + export interface ValidLabel { name: string; display_text: string; diff --git a/website/src/components/Tasks/CreateTask.tsx b/website/src/components/Tasks/CreateTask.tsx index a56432b7..e02dcdeb 100644 --- a/website/src/components/Tasks/CreateTask.tsx +++ b/website/src/components/Tasks/CreateTask.tsx @@ -3,14 +3,13 @@ import { Messages } from "src/components/Messages"; import { TaskControls } from "src/components/Survey/TaskControls"; import { TrackedTextarea } from "src/components/Survey/TrackedTextarea"; import { TwoColumnsWithCards } from "src/components/Survey/TwoColumnsWithCards"; -import {} from "src/components/Tasks/TaskTypes"; -import { TaskType } from "./TaskTypes"; +import { TaskType } from "src/components/Tasks/TaskTypes"; export interface CreateTaskProps { // we need a task type // eslint-disable-next-line @typescript-eslint/no-explicit-any tasks: any[]; - taskType: TaskInfo; + taskType: TaskType; trigger: (update: { id: string; update_type: string; content: { text: string } }) => void; onSkipTask: (task: { id: string }, reason: string) => void; onNextTask: () => void; diff --git a/website/src/components/Tasks/TaskTypes.tsx b/website/src/components/Tasks/TaskTypes.tsx index d255756a..409e7038 100644 --- a/website/src/components/Tasks/TaskTypes.tsx +++ b/website/src/components/Tasks/TaskTypes.tsx @@ -4,7 +4,7 @@ export enum TaskCategory { Label = "Label", } -export interface TaskInfo { +export interface TaskType { label: string; desc: string; category: TaskCategory; @@ -14,7 +14,7 @@ export interface TaskInfo { instruction?: string; } -export const TaskTypes: TaskInfo[] = [ +export const TaskTypes: TaskType[] = [ // create { label: "Create Initial Prompts", diff --git a/website/src/hooks/tasks/create/useCreateInitialPrompt.ts b/website/src/hooks/tasks/create/useCreateInitialPrompt.ts new file mode 100644 index 00000000..cf0193e8 --- /dev/null +++ b/website/src/hooks/tasks/create/useCreateInitialPrompt.ts @@ -0,0 +1,9 @@ +import { useGenericTaskAPI } from "../useGenericTaskAPI"; + +interface CreateInitialPromptTask { + id: string; + type: "initial_prompt"; + hint: string; +} + +export const useCreateInitialPrompt = () => useGenericTaskAPI("initial_prompt"); diff --git a/website/src/hooks/tasks/create/useCreateReply.ts b/website/src/hooks/tasks/create/useCreateReply.ts new file mode 100644 index 00000000..0bc78319 --- /dev/null +++ b/website/src/hooks/tasks/create/useCreateReply.ts @@ -0,0 +1,24 @@ +import { useGenericTaskAPI } from "../useGenericTaskAPI"; + +interface BaseCreateReplyTask { + id: string; + conversation: { + messages: Array<{ + text: string; + is_assistant: boolean; + message_id: string; + }>; + }; +} + +export interface CreateAssistantReplyTask extends BaseCreateReplyTask { + type: "assistant_reply"; +} + +export interface CreatePrompterReplyTask extends BaseCreateReplyTask { + type: "prompter_reply"; +} + +export const useCreateAssistantReply = () => useGenericTaskAPI("assistant_reply"); + +export const useCreatePrompterReply = () => useGenericTaskAPI("prompter_reply"); diff --git a/website/src/hooks/tasks/evaluate/useRankInitialPrompts.ts b/website/src/hooks/tasks/evaluate/useRankInitialPrompts.ts new file mode 100644 index 00000000..da772c80 --- /dev/null +++ b/website/src/hooks/tasks/evaluate/useRankInitialPrompts.ts @@ -0,0 +1,9 @@ +import { useGenericTaskAPI } from "../useGenericTaskAPI"; + +interface RankInitialPromptsTask { + id: string; + type: "rank_initial_prompts"; + prompts: string[]; +} + +export const useRankInitialPromptsTask = () => useGenericTaskAPI("rank_initial_prompts"); diff --git a/website/src/hooks/tasks/evaluate/useRankReplies.ts b/website/src/hooks/tasks/evaluate/useRankReplies.ts new file mode 100644 index 00000000..2d8d513f --- /dev/null +++ b/website/src/hooks/tasks/evaluate/useRankReplies.ts @@ -0,0 +1,25 @@ +import { useGenericTaskAPI } from "../useGenericTaskAPI"; + +interface BaseRankRepliesTask { + id: string; + replies: string[]; + conversation: { + messages: Array<{ + text: string; + is_assistant: boolean; + message_id: string; + }>; + }; +} + +interface RankAssistantRepliesTask extends BaseRankRepliesTask { + type: "rank_assistant_replies"; +} + +interface RankPrompterRepliesTask extends BaseRankRepliesTask { + type: "rank_prompter_replies"; +} + +export const useRankAssistantRepliesTask = () => useGenericTaskAPI("rank_assistant_replies"); + +export const useRankPrompterRepliesTask = () => useGenericTaskAPI("rank_prompter_replies"); diff --git a/website/src/hooks/tasks/labeling/useLabelAssistantReply.ts b/website/src/hooks/tasks/labeling/useLabelAssistantReply.ts new file mode 100644 index 00000000..3c44046e --- /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: LabelingTaskType.label_assistant_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..f7ba8ab5 --- /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: LabelingTaskType.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..9de2057f --- /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: LabelingTaskType.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/labeling/useLabelingTask.ts b/website/src/hooks/tasks/labeling/useLabelingTask.ts new file mode 100644 index 00000000..27555284 --- /dev/null +++ b/website/src/hooks/tasks/labeling/useLabelingTask.ts @@ -0,0 +1,20 @@ +import { useGenericTaskAPI } from "../useGenericTaskAPI"; + +export const enum LabelingTaskType { + label_initial_prompt = "label_initial_prompt", + label_prompter_reply = "label_prompter_reply", + label_assistant_reply = "label_assistant_reply", +} + +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); + 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/hooks/tasks/useCreateReply.ts b/website/src/hooks/tasks/useCreateReply.ts deleted file mode 100644 index 23bc041d..00000000 --- a/website/src/hooks/tasks/useCreateReply.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { TaskType } from "src/types/Task"; -import { CreateAssistantReplyTask, CreateInitialPromptTask, CreatePrompterReplyTask } from "src/types/Tasks"; - -import { useGenericTaskAPI } from "./useGenericTaskAPI"; - -export const useCreateAssistantReply = () => useGenericTaskAPI(TaskType.assistant_reply); -export const useCreatePrompterReply = () => useGenericTaskAPI(TaskType.prompter_reply); -export const useCreateInitialPrompt = () => useGenericTaskAPI(TaskType.initial_prompt); diff --git a/website/src/hooks/tasks/useGenericTaskAPI.tsx b/website/src/hooks/tasks/useGenericTaskAPI.tsx index 4b9b3bae..e300e220 100644 --- a/website/src/hooks/tasks/useGenericTaskAPI.tsx +++ b/website/src/hooks/tasks/useGenericTaskAPI.tsx @@ -2,11 +2,19 @@ import { useState } from "react"; import type { ValidLabel } from "src/components/Messages"; import fetcher from "src/lib/fetcher"; import poster from "src/lib/poster"; -import { BaseTask, TaskResponse } from "src/types/Task"; import useSWRImmutable from "swr/immutable"; import useSWRMutation from "swr/mutation"; -export const useGenericTaskAPI = (taskApiEndpoint: string) => { +// TODO: type & centralize types for all tasks + +export interface TaskResponse { + id: string; + userId: string; + task: TaskType; + valid_labels: ValidLabel[]; +} + +export const useGenericTaskAPI = (taskApiEndpoint: string) => { type ConcreteTaskResponse = TaskResponse; const [tasks, setTasks] = useState([]); diff --git a/website/src/hooks/tasks/useLabelingTask.ts b/website/src/hooks/tasks/useLabelingTask.ts deleted file mode 100644 index 5e5050ab..00000000 --- a/website/src/hooks/tasks/useLabelingTask.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { BaseTask, TaskResponse, TaskType } from "src/types/Task"; -import { LabelAssistantReplyTask, LabelInitialPromptTask, LabelPrompterReplyTask } from "src/types/Tasks"; - -import { useGenericTaskAPI } from "./useGenericTaskAPI"; - -const useLabelingTask = ( - endpoint: TaskType.label_assistant_reply | TaskType.label_prompter_reply | TaskType.label_initial_prompt -) => { - 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); - 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 }; -}; - -export type LabelAssistantReplyTaskResponse = TaskResponse; - -export const useLabelAssistantReplyTask = () => - useLabelingTask(TaskType.label_assistant_reply); - -export type LabelInitialPromptTaskResponse = TaskResponse; - -export const useLabelInitialPromptTask = () => useLabelingTask(TaskType.label_initial_prompt); - -export type LabelPrompterReplyTaskResponse = TaskResponse; - -export const useLabelPrompterReplyTask = () => useLabelingTask(TaskType.label_prompter_reply); diff --git a/website/src/hooks/tasks/useRankReplies.ts b/website/src/hooks/tasks/useRankReplies.ts deleted file mode 100644 index d4accda0..00000000 --- a/website/src/hooks/tasks/useRankReplies.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { TaskType } from "src/types/Task"; -import { RankAssistantRepliesTask, RankInitialPromptsTask, RankPrompterRepliesTask } from "src/types/Tasks"; - -import { useGenericTaskAPI } from "./useGenericTaskAPI"; - -export const useRankAssistantRepliesTask = () => - useGenericTaskAPI(TaskType.rank_assistant_replies); - -export const useRankPrompterRepliesTask = () => - useGenericTaskAPI(TaskType.rank_prompter_replies); - -export const useRankInitialPromptsTask = () => useGenericTaskAPI(TaskType.rank_initial_prompts); diff --git a/website/src/pages/create/assistant_reply.tsx b/website/src/pages/create/assistant_reply.tsx index 17facd5d..e9aee226 100644 --- a/website/src/pages/create/assistant_reply.tsx +++ b/website/src/pages/create/assistant_reply.tsx @@ -3,7 +3,7 @@ import { useColorMode } from "@chakra-ui/react"; import Head from "next/head"; import { LoadingScreen } from "src/components/Loading/LoadingScreen"; import { Task } from "src/components/Tasks/Task"; -import { useCreateAssistantReply } from "src/hooks/tasks/useCreateReply"; +import { useCreateAssistantReply } from "src/hooks/tasks/create/useCreateReply"; const AssistantReply = () => { const { tasks, isLoading, reset, trigger } = useCreateAssistantReply(); diff --git a/website/src/pages/create/initial_prompt.tsx b/website/src/pages/create/initial_prompt.tsx index 57f0dabd..efea6474 100644 --- a/website/src/pages/create/initial_prompt.tsx +++ b/website/src/pages/create/initial_prompt.tsx @@ -3,7 +3,7 @@ import { useColorMode } from "@chakra-ui/react"; import Head from "next/head"; import { LoadingScreen } from "src/components/Loading/LoadingScreen"; import { Task } from "src/components/Tasks/Task"; -import { useCreateInitialPrompt } from "src/hooks/tasks/useCreateReply"; +import { useCreateInitialPrompt } from "src/hooks/tasks/create/useCreateInitialPrompt"; const InitialPrompt = () => { const { tasks, isLoading, reset, trigger } = useCreateInitialPrompt(); diff --git a/website/src/pages/create/user_reply.tsx b/website/src/pages/create/user_reply.tsx index a0af0e95..2394bd63 100644 --- a/website/src/pages/create/user_reply.tsx +++ b/website/src/pages/create/user_reply.tsx @@ -3,7 +3,7 @@ import Head from "next/head"; import { Container } from "src/components/Container"; import { LoadingScreen } from "src/components/Loading/LoadingScreen"; import { Task } from "src/components/Tasks/Task"; -import { useCreatePrompterReply } from "src/hooks/tasks/useCreateReply"; +import { useCreatePrompterReply } from "src/hooks/tasks/create/useCreateReply"; const UserReply = () => { const { tasks, isLoading, reset, trigger } = useCreatePrompterReply(); diff --git a/website/src/pages/evaluate/rank_assistant_replies.tsx b/website/src/pages/evaluate/rank_assistant_replies.tsx index 8546e7a6..931c9194 100644 --- a/website/src/pages/evaluate/rank_assistant_replies.tsx +++ b/website/src/pages/evaluate/rank_assistant_replies.tsx @@ -3,7 +3,7 @@ import Head from "next/head"; import { Container } from "src/components/Container"; import { LoadingScreen } from "src/components/Loading/LoadingScreen"; import { Task } from "src/components/Tasks/Task"; -import { useRankAssistantRepliesTask } from "src/hooks/tasks/useRankReplies"; +import { useRankAssistantRepliesTask } from "src/hooks/tasks/evaluate/useRankReplies"; const RankAssistantReplies = () => { const { tasks, isLoading, reset, trigger } = useRankAssistantRepliesTask(); diff --git a/website/src/pages/evaluate/rank_initial_prompts.tsx b/website/src/pages/evaluate/rank_initial_prompts.tsx index 1898a93a..4b717143 100644 --- a/website/src/pages/evaluate/rank_initial_prompts.tsx +++ b/website/src/pages/evaluate/rank_initial_prompts.tsx @@ -3,7 +3,7 @@ import Head from "next/head"; import { Container } from "src/components/Container"; import { LoadingScreen } from "src/components/Loading/LoadingScreen"; import { Task } from "src/components/Tasks/Task"; -import { useRankInitialPromptsTask } from "src/hooks/tasks/useRankReplies"; +import { useRankInitialPromptsTask } from "src/hooks/tasks/evaluate/useRankInitialPrompts"; const RankInitialPrompts = () => { const { tasks, isLoading, reset, trigger } = useRankInitialPromptsTask(); diff --git a/website/src/pages/evaluate/rank_user_replies.tsx b/website/src/pages/evaluate/rank_user_replies.tsx index e2a39977..659874a2 100644 --- a/website/src/pages/evaluate/rank_user_replies.tsx +++ b/website/src/pages/evaluate/rank_user_replies.tsx @@ -3,7 +3,7 @@ import Head from "next/head"; import { Container } from "src/components/Container"; import { LoadingScreen } from "src/components/Loading/LoadingScreen"; import { Task } from "src/components/Tasks/Task"; -import { useRankPrompterRepliesTask } from "src/hooks/tasks/useRankReplies"; +import { useRankPrompterRepliesTask } from "src/hooks/tasks/evaluate/useRankReplies"; const RankUserReplies = () => { const { tasks, isLoading, reset, trigger } = useRankPrompterRepliesTask(); diff --git a/website/src/pages/label/label_assistant_reply.tsx b/website/src/pages/label/label_assistant_reply.tsx index 99c10f56..89b612ca 100644 --- a/website/src/pages/label/label_assistant_reply.tsx +++ b/website/src/pages/label/label_assistant_reply.tsx @@ -1,10 +1,13 @@ 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/useLabelingTask"; -import { Message } from "src/types/Conversation"; +import { + LabelAssistantReplyTaskResponse, + useLabelAssistantReplyTask, +} from "src/hooks/tasks/labeling/useLabelAssistantReply"; const LabelAssistantReply = () => { const [sliderValues, setSliderValues] = useState([]); diff --git a/website/src/pages/label/label_initial_prompt.tsx b/website/src/pages/label/label_initial_prompt.tsx index 4cd4343b..3c791f23 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/useLabelingTask"; +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 35654a47..812a3fcc 100644 --- a/website/src/pages/label/label_prompter_reply.tsx +++ b/website/src/pages/label/label_prompter_reply.tsx @@ -1,10 +1,13 @@ 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 { LabelPrompterReplyTaskResponse, useLabelPrompterReplyTask } from "src/hooks/tasks/useLabelingTask"; -import { Message } from "src/types/Conversation"; +import { + LabelPrompterReplyTaskResponse, + useLabelPrompterReplyTask, +} from "src/hooks/tasks/labeling/useLabelPrompterReply"; const LabelPrompterReply = () => { const [sliderValues, setSliderValues] = useState([]); diff --git a/website/src/pages/messages/index.tsx b/website/src/pages/messages/index.tsx index ed48d47b..28ec9c54 100644 --- a/website/src/pages/messages/index.tsx +++ b/website/src/pages/messages/index.tsx @@ -2,9 +2,9 @@ import { Box, CircularProgress, SimpleGrid, Text, useColorModeValue } from "@cha import Head from "next/head"; import { useEffect, useState } from "react"; import { getDashboardLayout } from "src/components/Layout"; +import { Message } from "src/components/Messages"; import { MessageTable } from "src/components/Messages/MessageTable"; import fetcher from "src/lib/fetcher"; -import { Message } from "src/types/Conversation"; import useSWRImmutable from "swr/immutable"; const MessagesDashboard = () => { @@ -82,6 +82,6 @@ const MessagesDashboard = () => { ); }; -MessagesDashboard.getLayout = getDashboardLayout; +MessagesDashboard.getLayout = (page) => getDashboardLayout(page); export default MessagesDashboard; diff --git a/website/src/types/Conversation.ts b/website/src/types/Conversation.ts deleted file mode 100644 index f12b2781..00000000 --- a/website/src/types/Conversation.ts +++ /dev/null @@ -1,9 +0,0 @@ -export interface Message { - text: string; - is_assistant: boolean; - message_id: string; -} - -export interface Conversation { - messages: Message[]; -} diff --git a/website/src/types/Task.ts b/website/src/types/Task.ts deleted file mode 100644 index 0dca6a5b..00000000 --- a/website/src/types/Task.ts +++ /dev/null @@ -1,24 +0,0 @@ -export const enum TaskType { - initial_prompt = "initial_prompt", - assistant_reply = "assistant_reply", - prompter_reply = "prompter_reply", - - rank_initial_prompts = "rank_initial_prompts", - rank_assistant_replies = "rank_assistant_replies", - rank_prompter_replies = "rank_prompter_replies", - - label_initial_prompt = "label_initial_prompt", - label_prompter_reply = "label_prompter_reply", - label_assistant_reply = "label_assistant_reply", -} - -export interface BaseTask { - id: string; - type: TaskType; -} - -export interface TaskResponse { - id: string; - userId: string; - task: Task; -} diff --git a/website/src/types/Tasks.ts b/website/src/types/Tasks.ts deleted file mode 100644 index 50c251bb..00000000 --- a/website/src/types/Tasks.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { Conversation } from "./Conversation"; -import { BaseTask, TaskType } from "./Task"; - -export interface CreateInitialPromptTask extends BaseTask { - type: TaskType.initial_prompt; - hint: string; -} - -export interface CreateAssistantReplyTask extends BaseTask { - type: TaskType.assistant_reply; - conversation: Conversation; -} - -export interface CreatePrompterReplyTask extends BaseTask { - type: TaskType.prompter_reply; - conversation: Conversation; -} - -export interface RankInitialPromptsTask extends BaseTask { - type: TaskType.rank_initial_prompts; - prompts: string[]; -} - -export interface RankAssistantRepliesTask extends BaseTask { - type: TaskType.rank_assistant_replies; - conversation: Conversation; - replies: string[]; -} - -export interface RankPrompterRepliesTask extends BaseTask { - type: TaskType.rank_prompter_replies; - conversation: Conversation; - replies: string[]; -} - -export interface LabelAssistantReplyTask extends BaseTask { - type: TaskType.label_assistant_reply; - message_id: string; - conversation: Conversation; - reply: string; - valid_labels: string[]; -} - -export interface LabelInitialPromptTask extends BaseTask { - type: TaskType.label_initial_prompt; - message_id: string; - valid_labels: string[]; - prompt: string; -} - -export interface LabelPrompterReplyTask extends BaseTask { - type: TaskType.label_prompter_reply; - message_id: string; - conversation: Conversation; - reply: string; - valid_labels: string[]; -} From 9e14de25706f3718eef6d8aaf48400b7358b40f0 Mon Sep 17 00:00:00 2001 From: Keith Stevens Date: Tue, 10 Jan 2023 16:30:44 +0900 Subject: [PATCH 16/16] Moving the ValidLabel type --- website/src/components/Messages.tsx | 7 +------ website/src/components/Messages/MessageTableEntry.tsx | 2 +- website/src/hooks/tasks/useGenericTaskAPI.tsx | 1 - website/src/types/Task.ts | 7 +++++++ 4 files changed, 9 insertions(+), 8 deletions(-) diff --git a/website/src/components/Messages.tsx b/website/src/components/Messages.tsx index c814a6d6..b49662ed 100644 --- a/website/src/components/Messages.tsx +++ b/website/src/components/Messages.tsx @@ -2,15 +2,10 @@ import { Grid } from "@chakra-ui/react"; import { forwardRef, useColorMode } from "@chakra-ui/react"; import { useMemo } from "react"; import { Message } from "src/types/Conversation"; +import { ValidLabel } from "src/types/Task"; import { FlaggableElement } from "./FlaggableElement"; -export interface ValidLabel { - name: string; - display_text: string; - help_text: string; -} - export const Messages = ({ messages, post_id, diff --git a/website/src/components/Messages/MessageTableEntry.tsx b/website/src/components/Messages/MessageTableEntry.tsx index 0f58efad..e9e8775a 100644 --- a/website/src/components/Messages/MessageTableEntry.tsx +++ b/website/src/components/Messages/MessageTableEntry.tsx @@ -2,7 +2,7 @@ import { Avatar, HStack, LinkBox, useColorModeValue } from "@chakra-ui/react"; import { boolean } from "boolean"; import NextLink from "next/link"; import { FlaggableElement } from "src/components/FlaggableElement"; -import type { ValidLabel } from "src/components/Messages"; +import type { ValidLabel } from "src/types/Task"; interface Message { text: string; diff --git a/website/src/hooks/tasks/useGenericTaskAPI.tsx b/website/src/hooks/tasks/useGenericTaskAPI.tsx index 4b9b3bae..a456cbf1 100644 --- a/website/src/hooks/tasks/useGenericTaskAPI.tsx +++ b/website/src/hooks/tasks/useGenericTaskAPI.tsx @@ -1,5 +1,4 @@ import { useState } from "react"; -import type { ValidLabel } from "src/components/Messages"; import fetcher from "src/lib/fetcher"; import poster from "src/lib/poster"; import { BaseTask, TaskResponse } from "src/types/Task"; diff --git a/website/src/types/Task.ts b/website/src/types/Task.ts index 0dca6a5b..6975fa14 100644 --- a/website/src/types/Task.ts +++ b/website/src/types/Task.ts @@ -12,6 +12,12 @@ export const enum TaskType { label_assistant_reply = "label_assistant_reply", } +export interface ValidLabel { + name: string; + display_text: string; + help_text: string; +} + export interface BaseTask { id: string; type: TaskType; @@ -21,4 +27,5 @@ export interface TaskResponse { id: string; userId: string; task: Task; + valid_labels: ValidLabel[]; }