diff --git a/website/src/components/Tasks/CreateTask.tsx b/website/src/components/Tasks/CreateTask.tsx index 8d406fd7..448ad287 100644 --- a/website/src/components/Tasks/CreateTask.tsx +++ b/website/src/components/Tasks/CreateTask.tsx @@ -8,6 +8,7 @@ import { TaskSurveyProps } from "src/components/Tasks/Task"; import { TaskHeader } from "src/components/Tasks/TaskHeader"; import { getTypeSafei18nKey } from "src/lib/i18n"; import { TaskType } from "src/types/Task"; +import { CreateTaskReply } from "src/types/TaskResponses"; import { CreateTaskType } from "src/types/Tasks"; export const CreateTask = ({ @@ -17,7 +18,7 @@ export const CreateTask = ({ isDisabled, onReplyChanged, onValidityChanged, -}: TaskSurveyProps) => { +}: TaskSurveyProps) => { const { t, i18n } = useTranslation(["tasks", "common"]); const cardColor = useColorModeValue("gray.50", "gray.800"); const titleColor = useColorModeValue("gray.800", "gray.300"); diff --git a/website/src/components/Tasks/EvaluateTask.tsx b/website/src/components/Tasks/EvaluateTask.tsx index e2f07749..2f24e6f1 100644 --- a/website/src/components/Tasks/EvaluateTask.tsx +++ b/website/src/components/Tasks/EvaluateTask.tsx @@ -6,6 +6,7 @@ import { SurveyCard } from "src/components/Survey/SurveyCard"; import { TaskSurveyProps } from "src/components/Tasks/Task"; import { TaskHeader } from "src/components/Tasks/TaskHeader"; import { TaskType } from "src/types/Task"; +import { EvaluateTaskReply } from "src/types/TaskResponses"; import { RankTaskType } from "src/types/Tasks"; export const EvaluateTask = ({ @@ -15,7 +16,7 @@ export const EvaluateTask = ({ isDisabled, onReplyChanged, onValidityChanged, -}: TaskSurveyProps) => { +}: TaskSurveyProps) => { const cardColor = useColorModeValue("gray.50", "gray.800"); const [ranking, setRanking] = useState(null); diff --git a/website/src/components/Tasks/LabelTask/LabelTask.tsx b/website/src/components/Tasks/LabelTask/LabelTask.tsx index 33369757..9c211d62 100644 --- a/website/src/components/Tasks/LabelTask/LabelTask.tsx +++ b/website/src/components/Tasks/LabelTask/LabelTask.tsx @@ -6,6 +6,7 @@ import { MessageTable } from "src/components/Messages/MessageTable"; import { TwoColumnsWithCards } from "src/components/Survey/TwoColumnsWithCards"; import { TaskSurveyProps } from "src/components/Tasks/Task"; import { TaskHeader } from "src/components/Tasks/TaskHeader"; +import { LabelTaskReply } from "src/types/TaskResponses"; import { LabelTaskType } from "src/types/Tasks"; const isRequired = (labelName: string, requiredLabels?: string[]) => { @@ -18,7 +19,7 @@ export const LabelTask = ({ isEditable, onReplyChanged, onValidityChanged, -}: TaskSurveyProps; message_id: string }>) => { +}: TaskSurveyProps) => { const { t } = useTranslation("labelling"); const [values, setValues] = useState(new Array(task.labels.length).fill(null)); const [userInputMade, setUserInputMade] = useBoolean(false); diff --git a/website/src/components/Tasks/Task/Task.tsx b/website/src/components/Tasks/Task/Task.tsx index c10ab597..54160636 100644 --- a/website/src/components/Tasks/Task/Task.tsx +++ b/website/src/components/Tasks/Task/Task.tsx @@ -53,12 +53,12 @@ interface UpdateValidity { replyValidity: TaskReplyValidity; } -export interface TaskSurveyProps { +export interface TaskSurveyProps { task: TaskType; taskType: TaskInfo; isEditable: boolean; isDisabled?: boolean; - onReplyChanged: (content: T) => void; + onReplyChanged: (content: ReplyContent) => void; onValidityChanged: (validity: TaskReplyValidity) => void; } diff --git a/website/src/hooks/tasks/useCreateReply.ts b/website/src/hooks/tasks/useCreateReply.ts index 23bc041d..9bb0c487 100644 --- a/website/src/hooks/tasks/useCreateReply.ts +++ b/website/src/hooks/tasks/useCreateReply.ts @@ -1,8 +1,11 @@ +import { useGenericTaskAPI } from "src/hooks/tasks/useGenericTaskAPI"; import { TaskType } from "src/types/Task"; +import { CreateTaskReply } from "src/types/TaskResponses"; 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); +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/useEvaluateReplies.ts b/website/src/hooks/tasks/useEvaluateReplies.ts new file mode 100644 index 00000000..a2e19a1c --- /dev/null +++ b/website/src/hooks/tasks/useEvaluateReplies.ts @@ -0,0 +1,13 @@ +import { useGenericTaskAPI } from "src/hooks/tasks/useGenericTaskAPI"; +import { TaskType } from "src/types/Task"; +import { EvaluateTaskReply } from "src/types/TaskResponses"; +import { RankAssistantRepliesTask, RankInitialPromptsTask, RankPrompterRepliesTask } from "src/types/Tasks"; + +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/hooks/tasks/useGenericTaskAPI.tsx b/website/src/hooks/tasks/useGenericTaskAPI.tsx index 7a7d651b..e7630bdc 100644 --- a/website/src/hooks/tasks/useGenericTaskAPI.tsx +++ b/website/src/hooks/tasks/useGenericTaskAPI.tsx @@ -3,11 +3,11 @@ import { TaskInfos } from "src/components/Tasks/TaskTypes"; import { get, post } from "src/lib/api"; import { TaskApiHook } from "src/types/Hooks"; import { BaseTask, ServerTaskResponse, TaskResponse, TaskType as TaskTypeEnum } from "src/types/Task"; +import { AllTaskReplies } from "src/types/TaskResponses"; import useSWRImmutable from "swr/immutable"; import useSWRMutation from "swr/mutation"; -// TODO: provide type for the content reply, this will be much harder since the replies vary vastly -export const useGenericTaskAPI = ( +export const useGenericTaskAPI = ( taskType: TaskTypeEnum ): TaskApiHook => { const [response, setResponse] = useState>({ taskAvailability: "AWAITING_INITIAL" }); @@ -71,5 +71,5 @@ export const useGenericTaskAPI = - useGenericTaskAPI(TaskType.label_assistant_reply); -export const useLabelInitialPromptTask = () => useGenericTaskAPI(TaskType.label_initial_prompt); -export const useLabelPrompterReplyTask = () => useGenericTaskAPI(TaskType.label_prompter_reply); + useGenericTaskAPI(TaskType.label_assistant_reply); +export const useLabelInitialPromptTask = () => + useGenericTaskAPI(TaskType.label_initial_prompt); +export const useLabelPrompterReplyTask = () => + useGenericTaskAPI(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/lib/constants.ts b/website/src/lib/constants.ts index a260fa28..9efe3d03 100644 --- a/website/src/lib/constants.ts +++ b/website/src/lib/constants.ts @@ -3,17 +3,17 @@ import { useCreateInitialPrompt, useCreatePrompterReply, } from "src/hooks/tasks/useCreateReply"; +import { + useRankAssistantRepliesTask, + useRankInitialPromptsTask, + useRankPrompterRepliesTask, +} from "src/hooks/tasks/useEvaluateReplies"; import { useGenericTaskAPI } from "src/hooks/tasks/useGenericTaskAPI"; import { useLabelAssistantReplyTask, useLabelInitialPromptTask, useLabelPrompterReplyTask, } from "src/hooks/tasks/useLabelingTask"; -import { - useRankAssistantRepliesTask, - useRankInitialPromptsTask, - useRankPrompterRepliesTask, -} from "src/hooks/tasks/useRankReplies"; import { TaskApiHooks } from "src/types/Hooks"; import { TaskType } from "src/types/Task"; diff --git a/website/src/types/Hooks.ts b/website/src/types/Hooks.ts index acdd0b58..5225c009 100644 --- a/website/src/types/Hooks.ts +++ b/website/src/types/Hooks.ts @@ -4,7 +4,6 @@ export type TaskApiHook = { response: TaskResponse; isLoading: boolean; completeTask: (interaction: ResponseContent) => Promise; - skipTask: () => Promise; rejectTask: (reason: string) => Promise; }; diff --git a/website/src/types/TaskResponses.ts b/website/src/types/TaskResponses.ts new file mode 100644 index 00000000..a6a49e89 --- /dev/null +++ b/website/src/types/TaskResponses.ts @@ -0,0 +1,15 @@ +export interface CreateTaskReply { + text: string; +} + +export interface EvaluateTaskReply { + ranking: number[]; +} + +export interface LabelTaskReply { + text: string; + labels: Record; + message_id: string; +} + +export type AllTaskReplies = CreateTaskReply | EvaluateTaskReply | LabelTaskReply;