Spaces:
Paused
Paused
| <script lang="ts"> | |
| import { getContext, onMount } from 'svelte'; | |
| import { formatFileSize, getLineCount } from '$lib/utils'; | |
| import { WEBUI_API_BASE_URL } from '$lib/constants'; | |
| const i18n = getContext('i18n'); | |
| import Modal from './Modal.svelte'; | |
| import XMark from '../icons/XMark.svelte'; | |
| import Info from '../icons/Info.svelte'; | |
| import Switch from './Switch.svelte'; | |
| import Tooltip from './Tooltip.svelte'; | |
| export let item; | |
| export let show = false; | |
| export let edit = false; | |
| let enableFullContent = false; | |
| $: isPDF = | |
| item?.meta?.content_type === 'application/pdf' || | |
| (item?.name && item?.name.toLowerCase().endsWith('.pdf')); | |
| onMount(() => { | |
| console.log(item); | |
| if (item?.context === 'full') { | |
| enableFullContent = true; | |
| } | |
| }); | |
| </script> | |
| <Modal bind:show size="lg"> | |
| <div class="font-primary px-6 py-5 w-full flex flex-col justify-center dark:text-gray-400"> | |
| <div class=" pb-2"> | |
| <div class="flex items-start justify-between"> | |
| <div> | |
| <div class=" font-medium text-lg dark:text-gray-100"> | |
| <a | |
| href="#" | |
| class="hover:underline line-clamp-1" | |
| on:click|preventDefault={() => { | |
| if (!isPDF && item.url) { | |
| window.open( | |
| item.type === 'file' ? `${item.url}/content` : `${item.url}`, | |
| '_blank' | |
| ); | |
| } | |
| }} | |
| > | |
| {item?.name ?? 'File'} | |
| </a> | |
| </div> | |
| </div> | |
| <div> | |
| <button | |
| on:click={() => { | |
| show = false; | |
| }} | |
| > | |
| <XMark /> | |
| </button> | |
| </div> | |
| </div> | |
| <div> | |
| <div class="flex flex-col items-center md:flex-row gap-1 justify-between w-full"> | |
| <div class=" flex flex-wrap text-sm gap-1 text-gray-500"> | |
| {#if item.size} | |
| <div class="capitalize shrink-0">{formatFileSize(item.size)}</div> | |
| • | |
| {/if} | |
| {#if item?.file?.data?.content} | |
| <div class="capitalize shrink-0"> | |
| {getLineCount(item?.file?.data?.content ?? '')} extracted lines | |
| </div> | |
| <div class="flex items-center gap-1 shrink-0"> | |
| <Info /> | |
| Formatting may be inconsistent from source. | |
| </div> | |
| {/if} | |
| </div> | |
| {#if edit} | |
| <div> | |
| <Tooltip | |
| content={enableFullContent | |
| ? $i18n.t( | |
| 'Inject the entire content as context for comprehensive processing, this is recommended for complex queries.' | |
| ) | |
| : $i18n.t( | |
| 'Default to segmented retrieval for focused and relevant content extraction, this is recommended for most cases.' | |
| )} | |
| > | |
| <div class="flex items-center gap-1.5 text-xs"> | |
| {#if enableFullContent} | |
| Using Entire Document | |
| {:else} | |
| Using Focused Retrieval | |
| {/if} | |
| <Switch | |
| bind:state={enableFullContent} | |
| on:change={(e) => { | |
| item.context = e.detail ? 'full' : undefined; | |
| }} | |
| /> | |
| </div> | |
| </Tooltip> | |
| </div> | |
| {/if} | |
| </div> | |
| </div> | |
| </div> | |
| <div class="max-h-[75vh] overflow-auto"> | |
| {#if isPDF} | |
| <iframe | |
| title={item?.name} | |
| src={`${WEBUI_API_BASE_URL}/files/${item.id}/content`} | |
| class="w-full h-[70vh] border-0 rounded-lg mt-4" | |
| /> | |
| {:else} | |
| <div class="max-h-96 overflow-scroll scrollbar-hidden text-xs whitespace-pre-wrap"> | |
| {item?.file?.data?.content ?? 'No content'} | |
| </div> | |
| {/if} | |
| </div> | |
| </div> | |
| </Modal> | |