gijl/lv-storage / llama.cpp /tools /ui /src /lib /components /app /models /ModelCapabilities.svelte
gijl's picture
download
raw
1.89 kB
<script lang="ts">
import ModelCapabilityIcons from './ModelCapabilityIcons.svelte';
import { MODEL_ID } from '$lib/constants';
import { ModelCapability } from '$lib/enums';
import { HuggingFaceService } from '$lib/services';
import type { ModelOption } from '$lib/types/models';
import { detectThinkingSupport, detectToolUseSupport, nearViewport, repoOf } from '$lib/utils';
interface Props {
class?: string;
/** Hide the modality icons, keeping the capability ones. */
hideModalities?: boolean;
option: ModelOption;
}
let { class: className = '', hideModalities = false, option }: Props = $props();
// a listing that declares its capabilities (Ollama-compatible backends) needs no lookup
let declared = $derived(option.capabilities);
let isNearViewport = $state(false);
let template = $state('');
$effect(() => {
template = '';
if (!isNearViewport) return;
// only the chat template says whether tools and reasoning work, and the Hub
// carries it for a local GGUF whether the model is loaded or not
const repo = repoOf(option.model);
if (!repo.includes(MODEL_ID.ORG_SEPARATOR)) return;
let cancelled = false;
void HuggingFaceService.getDetails(repo)
.then((details) => {
if (!cancelled) template = details?.gguf?.chat_template ?? '';
})
// best-effort: offline or a repo we cannot read leaves the icons off
.catch(() => {});
return () => {
cancelled = true;
};
});
let supportsThinking = $derived(
declared.includes(ModelCapability.REASONING) || detectThinkingSupport(template)
);
let supportsToolUse = $derived(
declared.includes(ModelCapability.TOOL_USE) || detectToolUseSupport(template)
);
</script>
<span use:nearViewport={() => (isNearViewport = true)} class={className}>
<ModelCapabilityIcons
{hideModalities}
modalities={option.modalities}
{supportsThinking}
{supportsToolUse}
/>
</span>

Xet Storage Details

Size:
1.89 kB
·
Xet hash:
4f7761673b96b7012ff27a9f37feb3f07ef5fe04a198725eccb893880cd54b65

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.