web/workers: use opfs instead of blobs for better memory management

spent almost an entire day figuring this out but it's so worth it
This commit is contained in:
wukko
2025-02-01 23:26:57 +06:00
parent 0a8323be54
commit 5464574a3e
12 changed files with 124 additions and 79 deletions

View File

@@ -1,8 +1,10 @@
import { readable, type Updater } from "svelte/store";
import { checkTasks } from "$lib/queen-bee/scheduler";
import type { CobaltQueue, CobaltQueueItem } from "$lib/types/queue";
import { clearCurrentTasks, removeWorkerFromQueue } from "$lib/state/queen-bee/current-tasks";
import type { CobaltFileReference } from "$lib/types/storage";
import type { CobaltQueue, CobaltQueueItem } from "$lib/types/queue";
let update: (_: Updater<CobaltQueue>) => void;
const queue = readable<CobaltQueue>(
@@ -39,7 +41,7 @@ export function itemError(id: string, workerId: string, error: string) {
checkTasks();
}
export function itemDone(id: string, file: File) {
export function itemDone(id: string, file: CobaltFileReference) {
update(queueData => {
if (queueData[id]) {
if (queueData[id].state === "running" && queueData[id].pipelineResults) {
@@ -58,7 +60,7 @@ export function itemDone(id: string, file: File) {
checkTasks();
}
export function pipelineTaskDone(id: string, workerId: string, file: File) {
export function pipelineTaskDone(id: string, workerId: string, file: CobaltFileReference) {
update(queueData => {
if (queueData[id] && queueData[id].state === "running") {
queueData[id].pipelineResults = [...queueData[id].pipelineResults || [], file];