Explorar o código

feat: ollamahub modelfile import

Timothy J. Baek hai 1 ano
pai
achega
cbcce68c61

+ 1 - 1
src/routes/(app)/modelfiles/+page.svelte

@@ -103,7 +103,7 @@
 						<a
 							class=" w-fit text-sm px-3 py-2 border dark:border-gray-600 rounded-xl"
 							type="button"
-							href={`/modelfiles/edit/${modelfile.tagName}`}
+							href={`/modelfiles/edit?tag=${modelfile.tagName}`}
 						>
 							Edit</a
 						>

+ 34 - 0
src/routes/(app)/modelfiles/create/+page.svelte

@@ -7,6 +7,7 @@
 
 	import Advanced from '$lib/components/chat/Settings/Advanced.svelte';
 	import { splitStream } from '$lib/utils';
+	import { onMount, tick } from 'svelte';
 
 	let loading = false;
 
@@ -209,6 +210,39 @@ SYSTEM """${system}"""`.replace(/^\s*\n/gm, '');
 		loading = false;
 		success = false;
 	};
+
+	onMount(() => {
+		window.addEventListener('message', async (event) => {
+			if (
+				!['https://ollamahub.com', 'https://www.ollamahub.com', 'http://localhost:5173'].includes(
+					event.origin
+				)
+			)
+				return;
+			const modelfile = JSON.parse(event.data);
+			console.log(modelfile);
+
+			imageUrl = modelfile.imageUrl;
+			title = modelfile.title;
+			await tick();
+			tagName = `${modelfile.user.username}/${modelfile.tagName}`;
+			desc = modelfile.desc;
+			content = modelfile.content;
+			suggestions =
+				modelfile.suggestionPrompts.length != 0
+					? modelfile.suggestionPrompts
+					: [
+							{
+								content: ''
+							}
+					  ];
+
+			for (const category of modelfile.categories) {
+				categories[category.toLowerCase()] = true;
+			}
+		});
+		window.opener.postMessage('loaded', '*');
+	});
 </script>
 
 <div class="min-h-screen w-full flex justify-center dark:text-white">

+ 24 - 20
src/routes/(app)/modelfiles/edit/[tag]/+page.svelte → src/routes/(app)/modelfiles/edit/+page.svelte

@@ -50,27 +50,31 @@
 	};
 
 	onMount(() => {
-		tagName = $page.params.tag;
-
-		modelfile = $modelfiles.filter((modelfile) => modelfile.tagName === tagName)[0];
-
-		console.log(modelfile);
-
-		imageUrl = modelfile.imageUrl;
-		title = modelfile.title;
-		desc = modelfile.desc;
-		content = modelfile.content;
-		suggestions =
-			modelfile.suggestionPrompts.length != 0
-				? modelfile.suggestionPrompts
-				: [
-						{
-							content: ''
-						}
-				  ];
+		tagName = $page.url.searchParams.get('tag');
+
+		if (tagName) {
+			modelfile = $modelfiles.filter((modelfile) => modelfile.tagName === tagName)[0];
+
+			console.log(modelfile);
+
+			imageUrl = modelfile.imageUrl;
+			title = modelfile.title;
+			desc = modelfile.desc;
+			content = modelfile.content;
+			suggestions =
+				modelfile.suggestionPrompts.length != 0
+					? modelfile.suggestionPrompts
+					: [
+							{
+								content: ''
+							}
+					  ];
 
-		for (const category of modelfile.categories) {
-			categories[category.toLowerCase()] = true;
+			for (const category of modelfile.categories) {
+				categories[category.toLowerCase()] = true;
+			}
+		} else {
+			goto('/modelfiles');
 		}
 	});