2024-08-23 12:31:39 +00:00
|
|
|
<script>
|
|
|
|
import { createEventDispatcher } from 'svelte';
|
|
|
|
import { toast } from 'svelte-sonner';
|
|
|
|
|
|
|
|
const dispatch = createEventDispatcher();
|
|
|
|
|
|
|
|
import Prompts from './Commands/Prompts.svelte';
|
2024-10-02 05:45:04 +00:00
|
|
|
import Knowledge from './Commands/Knowledge.svelte';
|
2024-08-23 12:31:39 +00:00
|
|
|
import Models from './Commands/Models.svelte';
|
|
|
|
|
|
|
|
import { removeLastWordFromString } from '$lib/utils';
|
2024-09-28 00:23:09 +00:00
|
|
|
import { processWeb, processYoutubeVideo } from '$lib/apis/retrieval';
|
2024-08-23 12:31:39 +00:00
|
|
|
|
|
|
|
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) ?? '';
|
|
|
|
|
|
|
|
const uploadWeb = async (url) => {
|
|
|
|
console.log(url);
|
|
|
|
|
2024-09-29 16:55:26 +00:00
|
|
|
const fileItem = {
|
2024-08-23 12:31:39 +00:00
|
|
|
type: 'doc',
|
|
|
|
name: url,
|
|
|
|
collection_name: '',
|
2024-10-07 02:44:02 +00:00
|
|
|
status: 'uploading',
|
2024-08-23 12:31:39 +00:00
|
|
|
url: url,
|
|
|
|
error: ''
|
|
|
|
};
|
|
|
|
|
|
|
|
try {
|
2024-09-29 16:55:26 +00:00
|
|
|
files = [...files, fileItem];
|
2024-09-28 00:23:09 +00:00
|
|
|
const res = await processWeb(localStorage.token, '', url);
|
2024-08-23 12:31:39 +00:00
|
|
|
|
|
|
|
if (res) {
|
2024-10-07 02:44:02 +00:00
|
|
|
fileItem.status = 'uploaded';
|
2024-09-29 16:55:26 +00:00
|
|
|
fileItem.collection_name = res.collection_name;
|
2024-09-29 21:08:55 +00:00
|
|
|
fileItem.file = {
|
2024-10-07 02:44:02 +00:00
|
|
|
...res.file,
|
2024-09-29 21:08:55 +00:00
|
|
|
...fileItem.file
|
|
|
|
};
|
2024-09-29 16:55:26 +00:00
|
|
|
|
2024-08-23 12:31:39 +00:00
|
|
|
files = files;
|
|
|
|
}
|
|
|
|
} catch (e) {
|
|
|
|
// Remove the failed doc from the files array
|
|
|
|
files = files.filter((f) => f.name !== url);
|
2024-09-29 21:08:55 +00:00
|
|
|
toast.error(JSON.stringify(e));
|
2024-08-23 12:31:39 +00:00
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
const uploadYoutubeTranscription = async (url) => {
|
|
|
|
console.log(url);
|
|
|
|
|
2024-09-29 16:55:26 +00:00
|
|
|
const fileItem = {
|
2024-08-23 12:31:39 +00:00
|
|
|
type: 'doc',
|
|
|
|
name: url,
|
|
|
|
collection_name: '',
|
2024-10-07 02:44:02 +00:00
|
|
|
status: 'uploading',
|
2024-08-23 12:31:39 +00:00
|
|
|
url: url,
|
|
|
|
error: ''
|
|
|
|
};
|
|
|
|
|
|
|
|
try {
|
2024-09-29 16:55:26 +00:00
|
|
|
files = [...files, fileItem];
|
2024-09-28 00:23:09 +00:00
|
|
|
const res = await processYoutubeVideo(localStorage.token, url);
|
2024-08-23 12:31:39 +00:00
|
|
|
|
|
|
|
if (res) {
|
2024-10-07 02:44:02 +00:00
|
|
|
fileItem.status = 'uploaded';
|
2024-09-29 16:55:26 +00:00
|
|
|
fileItem.collection_name = res.collection_name;
|
2024-09-29 21:08:55 +00:00
|
|
|
fileItem.file = {
|
2024-10-07 02:44:02 +00:00
|
|
|
...res.file,
|
2024-09-29 21:08:55 +00:00
|
|
|
...fileItem.file
|
|
|
|
};
|
2024-08-23 12:31:39 +00:00
|
|
|
files = files;
|
|
|
|
}
|
|
|
|
} catch (e) {
|
|
|
|
// Remove the failed doc from the files array
|
|
|
|
files = files.filter((f) => f.name !== url);
|
|
|
|
toast.error(e);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
</script>
|
|
|
|
|
|
|
|
{#if ['/', '#', '@'].includes(command?.charAt(0))}
|
|
|
|
{#if command?.charAt(0) === '/'}
|
|
|
|
<Prompts bind:this={commandElement} bind:prompt bind:files {command} />
|
|
|
|
{:else if command?.charAt(0) === '#'}
|
2024-10-02 05:45:04 +00:00
|
|
|
<Knowledge
|
2024-08-23 12:31:39 +00:00
|
|
|
bind:this={commandElement}
|
|
|
|
bind:prompt
|
|
|
|
{command}
|
|
|
|
on:youtube={(e) => {
|
|
|
|
console.log(e);
|
|
|
|
uploadYoutubeTranscription(e.detail);
|
|
|
|
}}
|
|
|
|
on:url={(e) => {
|
|
|
|
console.log(e);
|
|
|
|
uploadWeb(e.detail);
|
|
|
|
}}
|
|
|
|
on:select={(e) => {
|
|
|
|
console.log(e);
|
|
|
|
files = [
|
|
|
|
...files,
|
|
|
|
{
|
2024-10-02 05:45:04 +00:00
|
|
|
type: e?.detail?.meta?.document ? 'file' : 'collection',
|
2024-08-23 12:31:39 +00:00
|
|
|
...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}
|