Spaces:
Sleeping
Sleeping
<script> | |
import { toast } from 'svelte-sonner'; | |
import { onMount, getContext } from 'svelte'; | |
import { goto } from '$app/navigation'; | |
import { functions, models } from '$lib/stores'; | |
import { createNewFunction, getFunctions } from '$lib/apis/functions'; | |
import FunctionEditor from '$lib/components/admin/Functions/FunctionEditor.svelte'; | |
import { getModels } from '$lib/apis'; | |
import { compareVersion, extractFrontmatter } from '$lib/utils'; | |
import { WEBUI_VERSION } from '$lib/constants'; | |
const i18n = getContext('i18n'); | |
let mounted = false; | |
let clone = false; | |
let func = null; | |
const saveHandler = async (data) => { | |
console.log(data); | |
const manifest = extractFrontmatter(data.content); | |
if (compareVersion(manifest?.required_open_webui_version ?? '0.0.0', WEBUI_VERSION)) { | |
console.log('Version is lower than required'); | |
toast.error( | |
$i18n.t( | |
'Open WebUI version (v{{OPEN_WEBUI_VERSION}}) is lower than required version (v{{REQUIRED_VERSION}})', | |
{ | |
OPEN_WEBUI_VERSION: WEBUI_VERSION, | |
REQUIRED_VERSION: manifest?.required_open_webui_version ?? '0.0.0' | |
} | |
) | |
); | |
return; | |
} | |
const res = await createNewFunction(localStorage.token, { | |
id: data.id, | |
name: data.name, | |
meta: data.meta, | |
content: data.content | |
}).catch((error) => { | |
toast.error(error); | |
return null; | |
}); | |
if (res) { | |
toast.success($i18n.t('Function created successfully')); | |
functions.set(await getFunctions(localStorage.token)); | |
models.set(await getModels(localStorage.token)); | |
await goto('/admin/functions'); | |
} | |
}; | |
onMount(() => { | |
window.addEventListener('message', async (event) => { | |
if ( | |
!['https://openwebui.com', 'https://www.openwebui.com', 'http://localhost:9999'].includes( | |
event.origin | |
) | |
) | |
return; | |
func = JSON.parse(event.data); | |
console.log(func); | |
}); | |
if (window.opener ?? false) { | |
window.opener.postMessage('loaded', '*'); | |
} | |
if (sessionStorage.function) { | |
func = JSON.parse(sessionStorage.function); | |
sessionStorage.removeItem('function'); | |
console.log(func); | |
clone = true; | |
} | |
mounted = true; | |
}); | |
</script> | |
{#if mounted} | |
{#key func?.content} | |
<FunctionEditor | |
id={func?.id ?? ''} | |
name={func?.name ?? ''} | |
meta={func?.meta ?? { description: '' }} | |
content={func?.content ?? ''} | |
{clone} | |
on:save={(e) => { | |
saveHandler(e.detail); | |
}} | |
/> | |
{/key} | |
{/if} | |