| <script> |
| import { createEventDispatcher } from 'svelte'; |
| import { toast } from 'svelte-sonner'; |
|
|
| const dispatch = createEventDispatcher(); |
|
|
| import Prompts from './Commands/Prompts.svelte'; |
| import Knowledge from './Commands/Knowledge.svelte'; |
| import Models from './Commands/Models.svelte'; |
|
|
| import { removeLastWordFromString } from '$lib/utils'; |
| import { processWeb, processYoutubeVideo } from '$lib/apis/retrieval'; |
|
|
| export let prompt = ''; |
| export let files = []; |
|
|
| let commandElement = null; |
|
|
| export const selectUp = () => { |
| commandElement?.selectUp(); |
| }; |
|
|
| export const selectDown = () => { |
| commandElement?.selectDown(); |
| }; |
|
|
| let command = ''; |
| $: command = (prompt?.trim() ?? '').split(' ')?.at(-1) ?? ''; |
| </script> |
|
|
| {#if ['/', '#', '@'].includes(command?.charAt(0))} |
| {#if command?.charAt(0) === '/'} |
| <Prompts bind:this={commandElement} bind:prompt bind:files {command} /> |
| {:else if command?.charAt(0) === '#'} |
| <Knowledge |
| bind:this={commandElement} |
| bind:prompt |
| {command} |
| on:youtube={(e) => { |
| console.log(e); |
| dispatch('upload', { |
| type: 'youtube', |
| data: e.detail |
| }); |
| }} |
| on:url={(e) => { |
| console.log(e); |
| dispatch('upload', { |
| type: 'web', |
| data: e.detail |
| }); |
| }} |
| on:select={(e) => { |
| console.log(e); |
| files = [ |
| ...files, |
| { |
| type: e?.detail?.meta?.document ? 'file' : 'collection', |
| ...e.detail, |
| status: 'processed' |
| } |
| ]; |
|
|
| dispatch('select'); |
| }} |
| /> |
| {:else if command?.charAt(0) === '@'} |
| <Models |
| bind:this={commandElement} |
| {command} |
| on:select={(e) => { |
| prompt = removeLastWordFromString(prompt, command); |
|
|
| dispatch('select', { |
| type: 'model', |
| data: e.detail |
| }); |
| }} |
| /> |
| {/if} |
| {/if} |
|
|