import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query" import { Skeleton, Table, Tag, Tooltip, notification, Modal, Input } from "antd" import { bytePerSecondFormatter } from "~/libs/byte-formater" import { deleteModel, getAllModels } from "~/services/ollama" import dayjs from "dayjs" import relativeTime from "dayjs/plugin/relativeTime" import { useForm } from "@mantine/form" import { RotateCcw, Trash2 } from "lucide-react" import { useTranslation } from "react-i18next" import { useStorage } from "@plasmohq/storage/hook" dayjs.extend(relativeTime) export const OllamaModelsTable = () => { const queryClient = useQueryClient() const { t } = useTranslation(["settings", "common"]) const [selectedModel, setSelectedModel] = useStorage("selectedModel") const form = useForm({ initialValues: { model: "" } }) const { data, status } = useQuery({ queryKey: ["fetchAllModels"], queryFn: () => getAllModels({ returnEmpty: true }) }) const { mutate: deleteOllamaModel } = useMutation({ mutationFn: deleteModel, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["fetchAllModels"] }) notification.success({ message: t("manageModels.notification.success"), description: t("manageModels.notification.successDeleteDescription") }) }, onError: (error) => { notification.error({ message: "Error", description: error?.message || t("manageModels.notification.someError") }) } }) const pullModel = async (modelName: string) => { notification.info({ message: t("manageModels.notification.pullModel"), description: t("manageModels.notification.pullModelDescription", { modelName }) }) form.reset() browser.runtime.sendMessage({ type: "pull_model", modelName }) return true } const { mutate: pullOllamaModel } = useMutation({ mutationFn: pullModel }) return (