From 8cc6bda5f69f6ff0fc44ae8682faf534c275b67a Mon Sep 17 00:00:00 2001 From: Fernando Hernandez Date: Tue, 27 Aug 2024 12:46:33 +0200 Subject: [PATCH] added model ingestion through ui --- ui/src/components/Create.svelte | 78 --------- ui/src/lib/models/createModel.js | 10 ++ ui/src/lib/models/ingestFile.js | 12 ++ ui/src/lib/models/setModelVersion.js | 9 ++ ui/src/routes/datasets/IngestForm.svelte | 2 +- ui/src/routes/models/+page.svelte | 7 +- ui/src/routes/models/Ingest.svelte | 72 +++++++++ ui/src/routes/models/IngestForm.svelte | 198 +++++++++++++++++++++++ ui/src/routes/models/TextEditor.svelte | 56 +++++++ ui/src/stores/models.js | 28 +++- 10 files changed, 387 insertions(+), 85 deletions(-) delete mode 100644 ui/src/components/Create.svelte create mode 100644 ui/src/lib/models/createModel.js create mode 100644 ui/src/lib/models/ingestFile.js create mode 100644 ui/src/lib/models/setModelVersion.js create mode 100644 ui/src/routes/models/Ingest.svelte create mode 100644 ui/src/routes/models/IngestForm.svelte create mode 100644 ui/src/routes/models/TextEditor.svelte diff --git a/ui/src/components/Create.svelte b/ui/src/components/Create.svelte deleted file mode 100644 index 199f6bf8..00000000 --- a/ui/src/components/Create.svelte +++ /dev/null @@ -1,78 +0,0 @@ - - -{#if $user} - -

Edit

- -
-{/if} \ No newline at end of file diff --git a/ui/src/lib/models/createModel.js b/ui/src/lib/models/createModel.js new file mode 100644 index 00000000..7bbc1681 --- /dev/null +++ b/ui/src/lib/models/createModel.js @@ -0,0 +1,10 @@ +import { PUBLIC_EOTDL_API } from '$env/static/public'; +import fetchEOTDL from '$lib/shared/fetchEOTDL'; + +export default async (name, authors, source, license, token) => { + const url = `${PUBLIC_EOTDL_API}/models`; + const body = {name, authors, license, source}; + const { data, error } = await fetchEOTDL(url, token, 'POST', body); + if (error) throw new Error(error); + return data; +}; diff --git a/ui/src/lib/models/ingestFile.js b/ui/src/lib/models/ingestFile.js new file mode 100644 index 00000000..a15f1f95 --- /dev/null +++ b/ui/src/lib/models/ingestFile.js @@ -0,0 +1,12 @@ +import { PUBLIC_EOTDL_API } from '$env/static/public'; +import EOTDLFileUpload from '$lib/shared/EOTDLFileUpload'; +import fileChecksum from '../datasets/fileChecksum'; +export default async (model_id, file, token, version) => { + const url = `${PUBLIC_EOTDL_API}/models/${model_id}?version=${version.version}`; + const formData = new FormData(); + formData.append("file", file); + formData.append("checksum", fileChecksum(await file.arrayBuffer())); + const { data, error } = await EOTDLFileUpload(url, token, formData); + if (error) throw new Error(error); + return data; +}; diff --git a/ui/src/lib/models/setModelVersion.js b/ui/src/lib/models/setModelVersion.js new file mode 100644 index 00000000..ac808631 --- /dev/null +++ b/ui/src/lib/models/setModelVersion.js @@ -0,0 +1,9 @@ +import { PUBLIC_EOTDL_API } from '$env/static/public'; +import fetchEOTDL from '$lib/shared/fetchEOTDL'; + +export default async (model_id, token) => { + const url = `${PUBLIC_EOTDL_API}/models/version/${model_id}`; + const { data, error } = await fetchEOTDL(url, token, 'POST'); + if (error) throw new Error(error); + return data; +}; \ No newline at end of file diff --git a/ui/src/routes/datasets/IngestForm.svelte b/ui/src/routes/datasets/IngestForm.svelte index 7ffd08d7..a2692a24 100755 --- a/ui/src/routes/datasets/IngestForm.svelte +++ b/ui/src/routes/datasets/IngestForm.svelte @@ -188,7 +188,7 @@ > Ingest {#if error} diff --git a/ui/src/routes/models/+page.svelte b/ui/src/routes/models/+page.svelte index 061d1e96..e8fe1412 100755 --- a/ui/src/routes/models/+page.svelte +++ b/ui/src/routes/models/+page.svelte @@ -9,7 +9,7 @@ import Skeleton from "$components/Skeleton.svelte"; import ModelsLeaderboard from "../ModelsLeaderboard.svelte"; import QualitySelector from "$components/QualitySelector.svelte"; - + import Ingest from "./Ingest.svelte"; export let data; let loading = true; @@ -103,14 +103,11 @@ > - - Ingest model + {#if loading}
diff --git a/ui/src/routes/models/Ingest.svelte b/ui/src/routes/models/Ingest.svelte new file mode 100644 index 00000000..b66d5a54 --- /dev/null +++ b/ui/src/routes/models/Ingest.svelte @@ -0,0 +1,72 @@ + + +{#if $user} + +

Ingest model

+
+{/if} diff --git a/ui/src/routes/models/IngestForm.svelte b/ui/src/routes/models/IngestForm.svelte new file mode 100644 index 00000000..922cefcb --- /dev/null +++ b/ui/src/routes/models/IngestForm.svelte @@ -0,0 +1,198 @@ + + + + + diff --git a/ui/src/routes/models/TextEditor.svelte b/ui/src/routes/models/TextEditor.svelte new file mode 100644 index 00000000..b081ea55 --- /dev/null +++ b/ui/src/routes/models/TextEditor.svelte @@ -0,0 +1,56 @@ + + +
+
+ +
+
+ + diff --git a/ui/src/stores/models.js b/ui/src/stores/models.js index 7d960169..01c0710c 100755 --- a/ui/src/stores/models.js +++ b/ui/src/stores/models.js @@ -1,8 +1,11 @@ import { writable } from "svelte/store"; import retrieveModels from "$lib/models/retrieveModels"; +import retrieveModel from "$lib/models/retrieveModel"; import likeModel from "$lib/models/likeModel"; import updateModel from "$lib/models/updateModel"; - +import createModel from "$lib/models/createModel"; +import setModelVersion from "$lib/models/setModelVersion"; +import ingestFile from "$lib/models/ingestFile"; const createModels = () => { const { subscribe, set, update } = writable({ @@ -21,6 +24,26 @@ const createModels = () => { set({ loading: false, error: e.message }); } }, + create: async (name, authors, source, license, token) => { + const { model_id } = await createModel(name, authors, source, license, token); + return model_id + }, + ingest: async (model_id, file, token, version, name) => { + await ingestFile(model_id, file, token, version); + const data = await retrieveModel(name); + update((current) => { + const modelExists = current.data.find((model) => model.id === data.id) + if (modelExists) { + return { + data: current.data.map((model) => model.id === data.id ? data : model) + } + } + return { + data: [data, ...current.data], + } + }); + return data + }, update: async (model_id, name, content, authors, source, license, tags, token) => { const data = await updateModel(model_id, name, content, authors, source, license, tags, token); update((current) => ({ @@ -33,6 +56,9 @@ const createModels = () => { like: async (id, token) => { likeModel(id, token); }, + setVersion: async (id, token) => { + return await setModelVersion(id, token); + }, }; };