Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 33 additions & 0 deletions packages/frontend/src/lib/select/InferenceRuntimeSelect.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<script lang="ts">
import Select from '/@/lib/select/Select.svelte';
import { InferenceType } from '@shared/models/IInference';

interface Props {
disabled?: boolean;
value: InferenceType | undefined;
}

let { value = $bindable(), disabled }: Props = $props();

const options = Object.values(InferenceType).filter(type => type !== InferenceType.NONE) as Array<InferenceType>;

function handleOnChange(nValue: { value: string } | undefined): void {
if (nValue) {
value = nValue.value as InferenceType;
} else {
value = undefined;
}
}
</script>

<Select
label="Select Inference Runtime"
name="select-inference-runtime"
disabled={disabled}
value={value ? { label: value, value: value } : undefined}
onchange={handleOnChange}
placeholder="Select Inference Runtime to use"
items={options.map(type => ({
value: type,
label: type,
}))} />
30 changes: 26 additions & 4 deletions packages/frontend/src/pages/CreateService.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
import ContainerProviderConnectionSelect from '/@/lib/select/ContainerProviderConnectionSelect.svelte';
import ContainerConnectionWrapper from '/@/lib/notification/ContainerConnectionWrapper.svelte';
import TrackedTasks from '/@/lib/progress/TrackedTasks.svelte';
import InferenceRuntimeSelect from '/@/lib/select/InferenceRuntimeSelect.svelte';
import { InferenceType } from '@shared/models/IInference';

interface Props {
// The tracking id is a unique identifier provided by the
Expand All @@ -25,9 +27,15 @@

let { trackingId }: Props = $props();

// The runtime to use
let runtime: InferenceType = $state(InferenceType.LLAMA_CPP);

// List of the models available locally
let localModels: ModelInfo[] = $derived($modelsInfo.filter(model => model.file));

// List of the models filtered by runtime
let filteredModels: Array<ModelInfo> = $derived(localModels.filter(model => model.backend === runtime));

// The container provider connection to use
let containerProviderConnection: ContainerProviderConnectionInfo | undefined = $state(undefined);

Expand All @@ -51,9 +59,14 @@
let loading = $derived(trackingId !== undefined && !errorMsg);

$effect(() => {
// remove any incompatible model
if (model?.backend !== runtime) {
model = undefined;
}

// Select default model
if (!model && localModels.length > 0) {
model = localModels[0];
if (!model && filteredModels.length > 0) {
model = filteredModels[0];
}

// Select default connection
Expand All @@ -75,7 +88,7 @@
// Submit method when the form is valid
const submit = async (): Promise<void> => {
errorMsg = undefined;
if (model === undefined) throw new Error('model id not valid.');

Check failure on line 91 in packages/frontend/src/pages/CreateService.svelte

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / macos-14

Unhandled error

Error: model id not valid. ❯ HTMLButtonElement.submit src/pages/CreateService.svelte:91:26 ❯ HTMLButtonElement.bubble_event ../../node_modules/svelte/src/internal/client/dom/legacy/misc.js:39:6 ❯ HTMLButtonElement.<anonymous> ../../node_modules/@podman-desktop/ui-svelte/dist/button/Button.svelte:224:38 ❯ ../../node_modules/svelte/src/internal/client/dom/elements/events.js:61:21 ❯ without_reactive_context ../../node_modules/svelte/src/internal/client/dom/elements/bindings/shared.js:44:10 ❯ HTMLButtonElement.target_handler ../../node_modules/svelte/src/internal/client/dom/elements/events.js:60:35 ❯ HTMLButtonElement.callTheUserObjectsOperation ../../node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30 ❯ innerInvokeEventListeners ../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25 ❯ invokeEventListeners ../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3 ❯ HTMLButtonElementImpl._dispatch ../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9 This error originated in "src/pages/CreateService.spec.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running. The latest test that might've caused the error is "form should be disabled when loading". It might mean one of the following: - The error was thrown, while Vitest was running this test. - If the error occurred after the test had been completed, this was the last documented test before it was thrown.

Check failure on line 91 in packages/frontend/src/pages/CreateService.svelte

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / macos-14

Unhandled error

Error: model id not valid. ❯ HTMLButtonElement.submit src/pages/CreateService.svelte:91:26 ❯ HTMLButtonElement.bubble_event ../../node_modules/svelte/src/internal/client/dom/legacy/misc.js:39:6 ❯ HTMLButtonElement.<anonymous> ../../node_modules/@podman-desktop/ui-svelte/dist/button/Button.svelte:224:38 ❯ ../../node_modules/svelte/src/internal/client/dom/elements/events.js:61:21 ❯ without_reactive_context ../../node_modules/svelte/src/internal/client/dom/elements/bindings/shared.js:44:10 ❯ HTMLButtonElement.target_handler ../../node_modules/svelte/src/internal/client/dom/elements/events.js:60:35 ❯ HTMLButtonElement.callTheUserObjectsOperation ../../node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30 ❯ innerInvokeEventListeners ../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25 ❯ invokeEventListeners ../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3 ❯ HTMLButtonElementImpl._dispatch ../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9 This error originated in "src/pages/CreateService.spec.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running. The latest test that might've caused the error is "tasks should be displayed after requestCreateInferenceServer". It might mean one of the following: - The error was thrown, while Vitest was running this test. - If the error occurred after the test had been completed, this was the last documented test before it was thrown.

Check failure on line 91 in packages/frontend/src/pages/CreateService.svelte

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / ubuntu-22.04

Unhandled error

Error: model id not valid. ❯ HTMLButtonElement.submit src/pages/CreateService.svelte:91:26 ❯ HTMLButtonElement.bubble_event ../../node_modules/svelte/src/internal/client/dom/legacy/misc.js:39:6 ❯ HTMLButtonElement.<anonymous> ../../node_modules/@podman-desktop/ui-svelte/dist/button/Button.svelte:224:38 ❯ ../../node_modules/svelte/src/internal/client/dom/elements/events.js:61:21 ❯ without_reactive_context ../../node_modules/svelte/src/internal/client/dom/elements/bindings/shared.js:44:10 ❯ HTMLButtonElement.target_handler ../../node_modules/svelte/src/internal/client/dom/elements/events.js:60:35 ❯ HTMLButtonElement.callTheUserObjectsOperation ../../node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30 ❯ innerInvokeEventListeners ../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25 ❯ invokeEventListeners ../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3 ❯ HTMLButtonElementImpl._dispatch ../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9 This error originated in "src/pages/CreateService.spec.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running. The latest test that might've caused the error is "form should be disabled when loading". It might mean one of the following: - The error was thrown, while Vitest was running this test. - If the error occurred after the test had been completed, this was the last documented test before it was thrown.

Check failure on line 91 in packages/frontend/src/pages/CreateService.svelte

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / ubuntu-22.04

Unhandled error

Error: model id not valid. ❯ HTMLButtonElement.submit src/pages/CreateService.svelte:91:26 ❯ HTMLButtonElement.bubble_event ../../node_modules/svelte/src/internal/client/dom/legacy/misc.js:39:6 ❯ HTMLButtonElement.<anonymous> ../../node_modules/@podman-desktop/ui-svelte/dist/button/Button.svelte:224:38 ❯ ../../node_modules/svelte/src/internal/client/dom/elements/events.js:61:21 ❯ without_reactive_context ../../node_modules/svelte/src/internal/client/dom/elements/bindings/shared.js:44:10 ❯ HTMLButtonElement.target_handler ../../node_modules/svelte/src/internal/client/dom/elements/events.js:60:35 ❯ HTMLButtonElement.callTheUserObjectsOperation ../../node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30 ❯ innerInvokeEventListeners ../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25 ❯ invokeEventListeners ../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3 ❯ HTMLButtonElementImpl._dispatch ../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9 This error originated in "src/pages/CreateService.spec.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running. The latest test that might've caused the error is "tasks should be displayed after requestCreateInferenceServer". It might mean one of the following: - The error was thrown, while Vitest was running this test. - If the error occurred after the test had been completed, this was the last documented test before it was thrown.

Check failure on line 91 in packages/frontend/src/pages/CreateService.svelte

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / windows-2022

Unhandled error

Error: model id not valid. ❯ HTMLButtonElement.submit src/pages/CreateService.svelte:91:26 ❯ HTMLButtonElement.bubble_event ../../node_modules/svelte/src/internal/client/dom/legacy/misc.js:39:6 ❯ HTMLButtonElement.<anonymous> ../../node_modules/@podman-desktop/ui-svelte/dist/button/Button.svelte:224:38 ❯ ../../node_modules/svelte/src/internal/client/dom/elements/events.js:61:21 ❯ without_reactive_context ../../node_modules/svelte/src/internal/client/dom/elements/bindings/shared.js:44:10 ❯ HTMLButtonElement.target_handler ../../node_modules/svelte/src/internal/client/dom/elements/events.js:60:35 ❯ HTMLButtonElement.callTheUserObjectsOperation ../../node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30 ❯ innerInvokeEventListeners ../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25 ❯ invokeEventListeners ../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3 ❯ HTMLButtonElementImpl._dispatch ../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9 This error originated in "src/pages/CreateService.spec.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running. The latest test that might've caused the error is "form should be disabled when loading". It might mean one of the following: - The error was thrown, while Vitest was running this test. - If the error occurred after the test had been completed, this was the last documented test before it was thrown.

Check failure on line 91 in packages/frontend/src/pages/CreateService.svelte

View workflow job for this annotation

GitHub Actions / linter, formatters and unit tests / windows-2022

Unhandled error

Error: model id not valid. ❯ HTMLButtonElement.submit src/pages/CreateService.svelte:91:26 ❯ HTMLButtonElement.bubble_event ../../node_modules/svelte/src/internal/client/dom/legacy/misc.js:39:6 ❯ HTMLButtonElement.<anonymous> ../../node_modules/@podman-desktop/ui-svelte/dist/button/Button.svelte:224:38 ❯ ../../node_modules/svelte/src/internal/client/dom/elements/events.js:61:21 ❯ without_reactive_context ../../node_modules/svelte/src/internal/client/dom/elements/bindings/shared.js:44:10 ❯ HTMLButtonElement.target_handler ../../node_modules/svelte/src/internal/client/dom/elements/events.js:60:35 ❯ HTMLButtonElement.callTheUserObjectsOperation ../../node_modules/jsdom/lib/jsdom/living/generated/EventListener.js:26:30 ❯ innerInvokeEventListeners ../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:350:25 ❯ invokeEventListeners ../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:286:3 ❯ HTMLButtonElementImpl._dispatch ../../node_modules/jsdom/lib/jsdom/living/events/EventTarget-impl.js:233:9 This error originated in "src/pages/CreateService.spec.ts" test file. It doesn't mean the error was thrown inside the file itself, but while it was running. The latest test that might've caused the error is "tasks should be displayed after requestCreateInferenceServer". It might mean one of the following: - The error was thrown, while Vitest was running this test. - If the error occurred after the test had been completed, this was the last documented test before it was thrown.
if (containerPort === undefined) throw new Error('invalid container port');

try {
Expand Down Expand Up @@ -129,6 +142,7 @@
if (!mModel) return;

model = mModel;
runtime = mModel.backend as InferenceType;
}

onMount(() => {
Expand All @@ -145,6 +159,9 @@
const queryModelId = router.location.query.get('model-id');
if (queryModelId !== undefined && typeof queryModelId === 'string') {
model = localModels.find(mModel => mModel.id === queryModelId);
if (model) {
runtime = model.backend as InferenceType;
}
}
});

Expand Down Expand Up @@ -182,6 +199,11 @@
<!-- form -->
<div class="bg-[var(--pd-content-card-bg)] m-5 space-y-6 px-8 sm:pb-6 xl:pb-8 rounded-lg h-fit">
<div class="w-full">
<!-- inference runtime -->
<label for="inference-runtime" class="pt-4 block mb-2 font-bold text-[var(--pd-content-card-header-text)]"
>Inference Runtime</label>
<InferenceRuntimeSelect bind:value={runtime} />

<!-- container provider connection input -->
{#if startedContainerProviderConnectionInfo.length > 1}
<label for="model" class="pt-4 block mb-2 font-bold text-[var(--pd-content-card-header-text)]"
Expand All @@ -193,8 +215,8 @@

<!-- model input -->
<label for="model" class="pt-4 block mb-2 font-bold text-[var(--pd-content-card-header-text)]">Model</label>
<ModelSelect models={localModels} disabled={loading} bind:value={model} />
{#if localModels.length === 0}
<ModelSelect models={filteredModels} disabled={loading} bind:value={model} />
{#if filteredModels.length === 0}
<div class="text-red-500 p-1 flex flex-row items-center">
<Fa size="1.1x" class="cursor-pointer text-red-500" icon={faExclamationCircle} />
<div role="alert" aria-label="Error Message Content" class="ml-2">
Expand Down
Loading