Spaces:
Running
Running
| import { loadPyodide } from "https://cdn.jsdelivr.net/pyodide/v314.0.5/full/pyodide.mjs"; | |
| const MODULES = [ | |
| "__init__.py", | |
| "api.py", | |
| "diagnostics.py", | |
| "disaggregated.py", | |
| "kv_cache.py", | |
| "latency.py", | |
| "metrics.py", | |
| "models.py", | |
| "optimizer.py", | |
| "profiles.py", | |
| "simulator.py", | |
| "workloads.py", | |
| ]; | |
| let pyodide; | |
| async function init() { | |
| pyodide = await loadPyodide(); | |
| pyodide.FS.mkdirTree("/home/pyodide/inferscale"); | |
| for (const file of MODULES) { | |
| const url = new URL(`./py/inferscale/${file}`, self.location.href); | |
| const response = await fetch(url); | |
| if (!response.ok) throw new Error(`Failed to fetch ${file}: HTTP ${response.status}`); | |
| pyodide.FS.writeFile(`/home/pyodide/inferscale/${file}`, await response.text(), { encoding: "utf8" }); | |
| } | |
| await pyodide.runPythonAsync(` | |
| import sys | |
| if "/home/pyodide" not in sys.path: | |
| sys.path.insert(0, "/home/pyodide") | |
| from inferscale.api import execute | |
| `); | |
| self.postMessage({ type: "ready" }); | |
| } | |
| const readyPromise = init().catch((error) => { | |
| self.postMessage({ type: "fatal", error: error.message || String(error) }); | |
| throw error; | |
| }); | |
| self.onmessage = async (event) => { | |
| const { id, action, payload } = event.data; | |
| try { | |
| await readyPromise; | |
| pyodide.globals.set("_action", action); | |
| pyodide.globals.set("_payload_json", JSON.stringify(payload ?? {})); | |
| const output = await pyodide.runPythonAsync(` | |
| import json | |
| _result = execute(_action, json.loads(_payload_json)) | |
| json.dumps(_result, separators=(",", ":")) | |
| `); | |
| self.postMessage({ id, result: JSON.parse(output) }); | |
| } catch (error) { | |
| self.postMessage({ id, error: error.message || String(error) }); | |
| } | |
| }; | |