import streamDeck from "@elgato/streamdeck"; import { fetchMetrics, fetchModels } from "./llamaswap"; import { gpuInfos, parseGpuMetrics } from "./metrics-parser"; import { cfgFromSettings, type CfgSettings } from "./util"; type DataSourceItem = { label: string; value: string }; export function registerDataSources(): void { streamDeck.ui.onSendToPlugin(async (ev) => { const request = ev.payload as { event?: string } | undefined; const event = request?.event; if (!event) return; const settings = await ev.action.getSettings(); if (event === "models") { let items: DataSourceItem[] = []; try { const models = await fetchModels(cfgFromSettings(settings)); items = models.map((m) => ({ label: `${m.id} (${m.status})`, value: m.id })); } catch { items = []; } await streamDeck.ui.sendToPropertyInspector({ event, items }); return; } if (event === "gpus") { let items: DataSourceItem[] = []; try { const text = await fetchMetrics(cfgFromSettings(settings)); const gpus = gpuInfos(parseGpuMetrics(text)); items = [ { label: "All GPUs", value: "all" }, ...gpus.map((g) => ({ label: `GPU ${g.id} ยท ${g.name}`, value: g.id })), ]; } catch { items = [{ label: "All GPUs", value: "all" }]; } await streamDeck.ui.sendToPropertyInspector({ event, items }); } }); }