{"version":3,"file":"10.Xq5Krvc8.js","sources":["../../../../../../src/lib/components/playground/ChatCompletion.svelte","../../../../../../src/lib/components/playground/Playground.svelte"],"sourcesContent":["<script lang=\"ts\">\n\timport { onMount, getContext } from 'svelte';\n\n\tconst i18n = getContext('i18n');\n\n\texport let messages = [];\n\tlet textAreaElement: HTMLTextAreaElement;\n\tonMount(() => {\n\t\tmessages.forEach((message, idx) => {\n\t\t\ttextAreaElement.style.height = '';\n\t\t\ttextAreaElement.style.height = textAreaElement.scrollHeight + 'px';\n\t\t});\n\t});\n</script>\n\n<div class=\"py-3 space-y-3\">\n\t{#each messages as message, idx}\n\t\t<div class=\"flex gap-2 group\">\n\t\t\t<div class=\"flex items-start pt-1\">\n\t\t\t\t<button\n\t\t\t\t\tclass=\"px-2 py-1 text-sm font-semibold uppercase min-w-[6rem] text-left dark:group-hover:bg-gray-800 rounded-lg transition\"\n\t\t\t\t\ton:click={() => {\n\t\t\t\t\t\tmessage.role = message.role === 'user' ? 'assistant' : 'user';\n\t\t\t\t\t}}>{$i18n.t(message.role)}</button\n\t\t\t\t>\n\t\t\t</div>\n\n\t\t\t<div class=\"flex-1\">\n\t\t\t\t<!-- $i18n.t('a user') -->\n\t\t\t\t<!-- $i18n.t('an assistant') -->\n\t\t\t\t<textarea\n\t\t\t\t\tid=\"{message.role}-{idx}-textarea\"\n\t\t\t\t\tbind:this={textAreaElement}\n\t\t\t\t\tclass=\"w-full bg-transparent outline-none rounded-lg p-2 text-sm resize-none overflow-hidden\"\n\t\t\t\t\tplaceholder={$i18n.t(`Enter {{role}} message here`, {\n\t\t\t\t\t\trole: message.role === 'user' ? $i18n.t('a user') : $i18n.t('an assistant')\n\t\t\t\t\t})}\n\t\t\t\t\trows=\"1\"\n\t\t\t\t\ton:input={(e) => {\n\t\t\t\t\t\ttextAreaElement.style.height = '';\n\t\t\t\t\t\ttextAreaElement.style.height = textAreaElement.scrollHeight + 'px';\n\t\t\t\t\t}}\n\t\t\t\t\ton:focus={(e) => {\n\t\t\t\t\t\ttextAreaElement.style.height = '';\n\t\t\t\t\t\ttextAreaElement.style.height = textAreaElement.scrollHeight + 'px';\n\n\t\t\t\t\t\t// e.target.style.height = Math.min(e.target.scrollHeight, 200) + 'px';\n\t\t\t\t\t}}\n\t\t\t\t\tbind:value={message.content}\n\t\t\t\t/>\n\t\t\t</div>\n\n\t\t\t<div class=\" pt-1\">\n\t\t\t\t<button\n\t\t\t\t\tclass=\" group-hover:text-gray-500 dark:text-gray-900 dark:hover:text-gray-300 transition\"\n\t\t\t\t\ton:click={() => {\n\t\t\t\t\t\tmessages = messages.filter((message, messageIdx) => messageIdx !== idx);\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<svg\n\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tclass=\"w-5 h-5\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\td=\"M15 12H9m12 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<hr class=\" dark:border-gray-800\" />\n\t{/each}\n\n\t<button\n\t\tclass=\"flex items-center gap-2 px-2 py-1\"\n\t\ton:click={() => {\n\t\t\tconsole.log(messages.at(-1));\n\t\t\tmessages.push({\n\t\t\t\trole: (messages.at(-1)?.role ?? 'assistant') === 'user' ? 'assistant' : 'user',\n\t\t\t\tcontent: ''\n\t\t\t});\n\t\t\tmessages = messages;\n\t\t}}\n\t>\n\t\t<div>\n\t\t\t<svg\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\tstroke-width=\"1.5\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tclass=\"w-5 h-5\"\n\t\t\t>\n\t\t\t\t<path\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\td=\"M12 9v6m3-3H9m12 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z\"\n\t\t\t\t/>\n\t\t\t</svg>\n\t\t</div>\n\n\t\t<div class=\" text-sm font-medium\">{$i18n.t('Add message')}</div>\n\t</button>\n</div>\n","<script lang=\"ts\">\n\timport { goto } from '$app/navigation';\n\n\timport { onMount, tick, getContext } from 'svelte';\n\n\timport { toast } from 'svelte-sonner';\n\n\timport { OLLAMA_API_BASE_URL, OPENAI_API_BASE_URL, WEBUI_API_BASE_URL } from '$lib/constants';\n\timport { WEBUI_NAME, config, user, models, settings } from '$lib/stores';\n\n\timport { generateChatCompletion } from '$lib/apis/ollama';\n\timport { generateOpenAIChatCompletion } from '$lib/apis/openai';\n\n\timport { splitStream } from '$lib/utils';\n\timport ChatCompletion from '$lib/components/playground/ChatCompletion.svelte';\n\timport Selector from '$lib/components/chat/ModelSelector/Selector.svelte';\n\n\tconst i18n = getContext('i18n');\n\n\tlet mode = 'chat';\n\tlet loaded = false;\n\tlet text = '';\n\n\tlet selectedModelId = '';\n\n\tlet loading = false;\n\tlet stopResponseFlag = false;\n\n\tlet messagesContainerElement: HTMLDivElement;\n\tlet textCompletionAreaElement: HTMLTextAreaElement;\n\n\tlet system = '';\n\tlet messages = [\n\t\t{\n\t\t\trole: 'user',\n\t\t\tcontent: ''\n\t\t}\n\t];\n\n\tconst scrollToBottom = () => {\n\t\tconst element = mode === 'chat' ? messagesContainerElement : textCompletionAreaElement;\n\n\t\tif (element) {\n\t\t\telement.scrollTop = element?.scrollHeight;\n\t\t}\n\t};\n\n\tconst stopResponse = () => {\n\t\tstopResponseFlag = true;\n\t\tconsole.log('stopResponse');\n\t};\n\n\tconst textCompletionHandler = async () => {\n\t\tconst model = $models.find((model) => model.id === selectedModelId);\n\n\t\tconst [res, controller] = await generateOpenAIChatCompletion(\n\t\t\tlocalStorage.token,\n\t\t\t{\n\t\t\t\tmodel: model.id,\n\t\t\t\tstream: true,\n\t\t\t\tmessages: [\n\t\t\t\t\t{\n\t\t\t\t\t\trole: 'assistant',\n\t\t\t\t\t\tcontent: text\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t},\n\t\t\tmodel?.owned_by === 'openai' ? `${OPENAI_API_BASE_URL}` : `${OLLAMA_API_BASE_URL}/v1`\n\t\t);\n\n\t\tif (res && res.ok) {\n\t\t\tconst reader = res.body\n\t\t\t\t.pipeThrough(new TextDecoderStream())\n\t\t\t\t.pipeThrough(splitStream('\\n'))\n\t\t\t\t.getReader();\n\n\t\t\twhile (true) {\n\t\t\t\tconst { value, done } = await reader.read();\n\t\t\t\tif (done || stopResponseFlag) {\n\t\t\t\t\tif (stopResponseFlag) {\n\t\t\t\t\t\tcontroller.abort('User: Stop Response');\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tlet lines = value.split('\\n');\n\n\t\t\t\t\tfor (const line of lines) {\n\t\t\t\t\t\tif (line !== '') {\n\t\t\t\t\t\t\tif (line === 'data: [DONE]') {\n\t\t\t\t\t\t\t\t// responseMessage.done = true;\n\t\t\t\t\t\t\t\tconsole.log('done');\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tlet data = JSON.parse(line.replace(/^data: /, ''));\n\t\t\t\t\t\t\t\tconsole.log(data);\n\n\t\t\t\t\t\t\t\ttext += data.choices[0].delta.content ?? '';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.log(error);\n\t\t\t\t}\n\n\t\t\t\tscrollToBottom();\n\t\t\t}\n\t\t}\n\t};\n\n\tconst chatCompletionHandler = async () => {\n\t\tconst model = $models.find((model) => model.id === selectedModelId);\n\n\t\tconst [res, controller] = await generateOpenAIChatCompletion(\n\t\t\tlocalStorage.token,\n\t\t\t{\n\t\t\t\tmodel: model.id,\n\t\t\t\tstream: true,\n\t\t\t\tmessages: [\n\t\t\t\t\tsystem\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\trole: 'system',\n\t\t\t\t\t\t\t\tcontent: system\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined,\n\t\t\t\t\t...messages\n\t\t\t\t].filter((message) => message)\n\t\t\t},\n\t\t\tmodel?.owned_by === 'openai' ? `${OPENAI_API_BASE_URL}` : `${OLLAMA_API_BASE_URL}/v1`\n\t\t);\n\n\t\tlet responseMessage;\n\t\tif (messages.at(-1)?.role === 'assistant') {\n\t\t\tresponseMessage = messages.at(-1);\n\t\t} else {\n\t\t\tresponseMessage = {\n\t\t\t\trole: 'assistant',\n\t\t\t\tcontent: ''\n\t\t\t};\n\t\t\tmessages.push(responseMessage);\n\t\t\tmessages = messages;\n\t\t}\n\n\t\tawait tick();\n\t\tconst textareaElement = document.getElementById(`assistant-${messages.length - 1}-textarea`);\n\n\t\tif (res && res.ok) {\n\t\t\tconst reader = res.body\n\t\t\t\t.pipeThrough(new TextDecoderStream())\n\t\t\t\t.pipeThrough(splitStream('\\n'))\n\t\t\t\t.getReader();\n\n\t\t\twhile (true) {\n\t\t\t\tconst { value, done } = await reader.read();\n\t\t\t\tif (done || stopResponseFlag) {\n\t\t\t\t\tif (stopResponseFlag) {\n\t\t\t\t\t\tcontroller.abort('User: Stop Response');\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tlet lines = value.split('\\n');\n\n\t\t\t\t\tfor (const line of lines) {\n\t\t\t\t\t\tif (line !== '') {\n\t\t\t\t\t\t\tconsole.log(line);\n\t\t\t\t\t\t\tif (line === 'data: [DONE]') {\n\t\t\t\t\t\t\t\t// responseMessage.done = true;\n\t\t\t\t\t\t\t\tmessages = messages;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tlet data = JSON.parse(line.replace(/^data: /, ''));\n\t\t\t\t\t\t\t\tconsole.log(data);\n\n\t\t\t\t\t\t\t\tif (responseMessage.content == '' && data.choices[0].delta.content == '\\n') {\n\t\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ttextareaElement.style.height = textareaElement.scrollHeight + 'px';\n\n\t\t\t\t\t\t\t\t\tresponseMessage.content += data.choices[0].delta.content ?? '';\n\t\t\t\t\t\t\t\t\tmessages = messages;\n\n\t\t\t\t\t\t\t\t\ttextareaElement.style.height = textareaElement.scrollHeight + 'px';\n\n\t\t\t\t\t\t\t\t\tawait tick();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconsole.log(error);\n\t\t\t\t}\n\n\t\t\t\tscrollToBottom();\n\t\t\t}\n\t\t}\n\t};\n\n\tconst submitHandler = async () => {\n\t\tif (selectedModelId) {\n\t\t\tloading = true;\n\n\t\t\tif (mode === 'complete') {\n\t\t\t\tawait textCompletionHandler();\n\t\t\t} else if (mode === 'chat') {\n\t\t\t\tawait chatCompletionHandler();\n\t\t\t}\n\n\t\t\tloading = false;\n\t\t\tstopResponseFlag = false;\n\t\t}\n\t};\n\n\tonMount(async () => {\n\t\tif ($user?.role !== 'admin') {\n\t\t\tawait goto('/');\n\t\t}\n\n\t\tif ($settings?.models) {\n\t\t\tselectedModelId = $settings?.models[0];\n\t\t} else if ($config?.default_models) {\n\t\t\tselectedModelId = $config?.default_models.split(',')[0];\n\t\t} else {\n\t\t\tselectedModelId = '';\n\t\t}\n\t\tloaded = true;\n\t});\n</script>\n\n<svelte:head>\n\t<title>\n\t\t{$i18n.t('Playground')} | {$WEBUI_NAME}\n\t</title>\n</svelte:head>\n\n<div class=\" flex flex-col justify-between w-full overflow-y-auto h-full\">\n\t<div class=\"mx-auto w-full md:px-0 h-full\">\n\t\t<div class=\" flex flex-col h-full\">\n\t\t\t<div class=\"flex flex-col justify-between mb-2.5 gap-1\">\n\t\t\t\t<div class=\"flex justify-between items-center gap-2\">\n\t\t\t\t\t<div class=\" text-lg font-semibold self-center flex\">\n\t\t\t\t\t\t{$i18n.t('Playground')}\n\t\t\t\t\t\t<span class=\" text-xs text-gray-500 self-center ml-1\">{$i18n.t('(Beta)')}</span>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tclass=\" flex items-center gap-0.5 text-xs px-2.5 py-0.5 rounded-lg {mode === 'chat' &&\n\t\t\t\t\t\t\t\t'text-sky-600 dark:text-sky-200 bg-sky-200/30'} {mode === 'complete' &&\n\t\t\t\t\t\t\t\t'text-green-600 dark:text-green-200 bg-green-200/30'} \"\n\t\t\t\t\t\t\ton:click={() => {\n\t\t\t\t\t\t\t\tif (mode === 'complete') {\n\t\t\t\t\t\t\t\t\tmode = 'chat';\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tmode = 'complete';\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{#if mode === 'complete'}\n\t\t\t\t\t\t\t\t{$i18n.t('Text Completion')}\n\t\t\t\t\t\t\t{:else if mode === 'chat'}\n\t\t\t\t\t\t\t\t{$i18n.t('Chat')}\n\t\t\t\t\t\t\t{/if}\n\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 16 16\"\n\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\tclass=\"w-3 h-3\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\tfill-rule=\"evenodd\"\n\t\t\t\t\t\t\t\t\t\td=\"M5.22 10.22a.75.75 0 0 1 1.06 0L8 11.94l1.72-1.72a.75.75 0 1 1 1.06 1.06l-2.25 2.25a.75.75 0 0 1-1.06 0l-2.25-2.25a.75.75 0 0 1 0-1.06ZM10.78 5.78a.75.75 0 0 1-1.06 0L8 4.06 6.28 5.78a.75.75 0 0 1-1.06-1.06l2.25-2.25a.75.75 0 0 1 1.06 0l2.25 2.25a.75.75 0 0 1 0 1.06Z\"\n\t\t\t\t\t\t\t\t\t\tclip-rule=\"evenodd\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</button>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<div class=\"flex flex-col gap-1 w-full\">\n\t\t\t\t\t<div class=\"flex w-full\">\n\t\t\t\t\t\t<div class=\"overflow-hidden w-full\">\n\t\t\t\t\t\t\t<div class=\"max-w-full\">\n\t\t\t\t\t\t\t\t<Selector\n\t\t\t\t\t\t\t\t\tplaceholder={$i18n.t('Select a model')}\n\t\t\t\t\t\t\t\t\titems={$models.map((model) => ({\n\t\t\t\t\t\t\t\t\t\tvalue: model.id,\n\t\t\t\t\t\t\t\t\t\tlabel: model.name,\n\t\t\t\t\t\t\t\t\t\tmodel: model\n\t\t\t\t\t\t\t\t\t}))}\n\t\t\t\t\t\t\t\t\tbind:value={selectedModelId}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<!-- <button\n\t\t\t\t\t\t\tclass=\" self-center dark:hover:text-gray-300\"\n\t\t\t\t\t\t\tid=\"open-settings-button\"\n\t\t\t\t\t\t\ton:click={async () => {}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\tstroke-width=\"1.5\"\n\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\tclass=\"w-4 h-4\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\td=\"M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 011.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 01-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.397.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 01-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.505-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.107-1.204l-.527-.738a1.125 1.125 0 01.12-1.45l.773-.773a1.125 1.125 0 011.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894z\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\td=\"M15 12a3 3 0 11-6 0 3 3 0 016 0z\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t</button> -->\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{#if mode === 'chat'}\n\t\t\t\t<div class=\"p-1\">\n\t\t\t\t\t<div class=\"p-3 outline outline-1 outline-gray-200 dark:outline-gray-800 rounded-lg\">\n\t\t\t\t\t\t<div class=\" text-sm font-medium\">{$i18n.t('System')}</div>\n\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\tid=\"system-textarea\"\n\t\t\t\t\t\t\tclass=\"w-full h-full bg-transparent resize-none outline-none text-sm\"\n\t\t\t\t\t\t\tbind:value={system}\n\t\t\t\t\t\t\tplaceholder={$i18n.t(\"You're a helpful assistant.\")}\n\t\t\t\t\t\t\trows=\"4\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t{/if}\n\n\t\t\t<div\n\t\t\t\tclass=\" pb-2.5 flex flex-col justify-between w-full flex-auto overflow-auto h-0\"\n\t\t\t\tid=\"messages-container\"\n\t\t\t\tbind:this={messagesContainerElement}\n\t\t\t>\n\t\t\t\t<div class=\" h-full w-full flex flex-col\">\n\t\t\t\t\t<div class=\"flex-1 p-1\">\n\t\t\t\t\t\t{#if mode === 'complete'}\n\t\t\t\t\t\t\t<textarea\n\t\t\t\t\t\t\t\tid=\"text-completion-textarea\"\n\t\t\t\t\t\t\t\tbind:this={textCompletionAreaElement}\n\t\t\t\t\t\t\t\tclass=\"w-full h-full p-3 bg-transparent outline outline-1 outline-gray-200 dark:outline-gray-800 resize-none rounded-lg text-sm\"\n\t\t\t\t\t\t\t\tbind:value={text}\n\t\t\t\t\t\t\t\tplaceholder={$i18n.t(\"You're a helpful assistant.\")}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t{:else if mode === 'chat'}\n\t\t\t\t\t\t\t<ChatCompletion bind:messages />\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<div class=\"pb-3\">\n\t\t\t\t{#if !loading}\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"px-3 py-1.5 text-sm font-medium bg-emerald-600 hover:bg-emerald-700 text-gray-50 transition rounded-lg\"\n\t\t\t\t\t\ton:click={() => {\n\t\t\t\t\t\t\tsubmitHandler();\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{$i18n.t('Submit')}\n\t\t\t\t\t</button>\n\t\t\t\t{:else}\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"px-3 py-1.5 text-sm font-medium bg-gray-100 hover:bg-gray-200 text-gray-900 transition rounded-lg\"\n\t\t\t\t\t\ton:click={() => {\n\t\t\t\t\t\t\tstopResponse();\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{$i18n.t('Cancel')}\n\t\t\t\t\t</button>\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</div>\n\n<style>\n\t.scrollbar-hidden::-webkit-scrollbar {\n\t\tdisplay: none; /* for Chrome, Safari and Opera */\n\t}\n\n\t.scrollbar-hidden {\n\t\t-ms-overflow-style: none; /* IE and Edge */\n\t\tscrollbar-width: none; /* Firefox */\n\t}\n</style>\n"],"names":["t0_value","ctx","attr","textarea","textarea_placeholder_value","insert_hydration","target","div3","anchor","append_hydration","div0","button0","div1","set_input_value","div2","button1","hr","dirty","set_data","t0","button","i","t2","t2_value","i18n","getContext","messages","$$props","textAreaElement","onMount","message","idx","$$invalidate","$$value","e","messageIdx","_a","t","t_value","document_1","title_value","create_if_block_4","create_if_block_5","func","if_block1","create_if_block_3","create_if_block","div15","div14","div13","div8","span","div7","div6","div5","div4","div11","div10","div9","div12","current","t1","t1_value","t3","t3_value","selector_changes","model","mode","text","selectedModelId","loading","stopResponseFlag","messagesContainerElement","textCompletionAreaElement","system","scrollToBottom","element","stopResponse","textCompletionHandler","$models","res","controller","generateOpenAIChatCompletion","OPENAI_API_BASE_URL","OLLAMA_API_BASE_URL","reader","splitStream","value","done","lines","line","data","error","chatCompletionHandler","responseMessage","tick","textareaElement","submitHandler","$user","goto","$settings","$config"],"mappings":"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"} |