Amiel's picture
Upload folder using huggingface_hub
676fc08 verified
import { create } from "zustand";
import { persist } from "zustand/middleware";
import { pick } from "radash";
export interface TaskStore {
id: string;
question: string;
resources: Resource[];
query: string;
questions: string;
feedback: string;
reportPlan: string;
suggestion: string;
tasks: SearchTask[];
requirement: string;
title: string;
finalReport: string;
sources: Source[];
images: ImageSource[];
knowledgeGraph: string;
}
interface TaskFunction {
update: (tasks: SearchTask[]) => void;
setId: (id: string) => void;
setTitle: (title: string) => void;
setSuggestion: (suggestion: string) => void;
setRequirement: (requirement: string) => void;
setQuery: (query: string) => void;
updateTask: (query: string, task: Partial<SearchTask>) => void;
removeTask: (query: string) => boolean;
setQuestion: (question: string) => void;
addResource: (resource: Resource) => void;
updateResource: (id: string, resource: Partial<Resource>) => void;
removeResource: (id: string) => boolean;
updateQuestions: (questions: string) => void;
updateReportPlan: (plan: string) => void;
updateFinalReport: (report: string) => void;
setSources: (sources: Source[]) => void;
setImages: (images: Source[]) => void;
setFeedback: (feedback: string) => void;
updateKnowledgeGraph: (knowledgeGraph: string) => void;
clear: () => void;
reset: () => void;
backup: () => TaskStore;
restore: (taskStore: TaskStore) => void;
}
const defaultValues: TaskStore = {
id: "",
question: "",
resources: [],
query: "",
questions: "",
feedback: "",
reportPlan: "",
suggestion: "",
tasks: [],
requirement: "",
title: "",
finalReport: "",
sources: [],
images: [],
knowledgeGraph: "",
};
export const useTaskStore = create(
persist<TaskStore & TaskFunction>(
(set, get) => ({
...defaultValues,
update: (tasks) => set(() => ({ tasks: [...tasks] })),
setId: (id) => set(() => ({ id })),
setTitle: (title) => set(() => ({ title })),
setSuggestion: (suggestion) => set(() => ({ suggestion })),
setRequirement: (requirement) => set(() => ({ requirement })),
setQuery: (query) => set(() => ({ query })),
updateTask: (query, task) => {
const newTasks = get().tasks.map((item) => {
return item.query === query ? { ...item, ...task } : item;
});
set(() => ({ tasks: [...newTasks] }));
},
removeTask: (query) => {
set((state) => ({
tasks: state.tasks.filter((task) => task.query !== query),
}));
return true;
},
setQuestion: (question) => set(() => ({ question })),
addResource: (resource) =>
set((state) => ({ resources: [resource, ...state.resources] })),
updateResource: (id, resource) => {
const newResources = get().resources.map((item) => {
return item.id === id ? { ...item, ...resource } : item;
});
set(() => ({ resources: [...newResources] }));
},
removeResource: (id) => {
set((state) => ({
resources: state.resources.filter((resource) => resource.id !== id),
}));
return true;
},
updateQuestions: (questions) => set(() => ({ questions })),
updateReportPlan: (plan) => set(() => ({ reportPlan: plan })),
updateFinalReport: (report) => set(() => ({ finalReport: report })),
setSources: (sources) => set(() => ({ sources })),
setImages: (images) => set(() => ({ images })),
setFeedback: (feedback) => set(() => ({ feedback })),
updateKnowledgeGraph: (knowledgeGraph) => set(() => ({ knowledgeGraph })),
clear: () => set(() => ({ tasks: [] })),
reset: () => set(() => ({ ...defaultValues })),
backup: () => {
return {
...pick(get(), Object.keys(defaultValues) as (keyof TaskStore)[]),
} as TaskStore;
},
restore: (taskStore) => set(() => ({ ...taskStore })),
}),
{ name: "research" }
)
);