private-voice-agent / src /services /capabilities.ts
aut4rk's picture
Deploy static voice agent
009fd18 verified
Raw History Blame
1.52 kB
import type {
AppCapability,
CapabilitiesService,
CapabilitySnapshot,
} from "../app/types";
export const evaluateCapabilitySnapshot = (
snapshot: CapabilitySnapshot,
): AppCapability => {
if (!snapshot.hasMediaDevices) {
return {
...snapshot,
canRunDemo: false,
failureReason: "This browser does not expose microphone capture APIs.",
};
}
if (!snapshot.hasWebGPU) {
return {
...snapshot,
canRunDemo: false,
failureReason: "WebGPU is unavailable, so local model execution cannot start.",
};
}
if (!snapshot.hasAudioWorklet) {
return {
...snapshot,
canRunDemo: false,
failureReason: "AudioWorklet support is unavailable, so live capture is unreliable.",
};
}
return {
...snapshot,
canRunDemo: true,
failureReason: null,
};
};
export class BrowserCapabilitiesService implements CapabilitiesService {
async detect(): Promise<AppCapability> {
const snapshot: CapabilitySnapshot = {
hasWebGPU: typeof navigator !== "undefined" && "gpu" in navigator,
hasMediaDevices:
typeof navigator !== "undefined" &&
typeof navigator.mediaDevices?.getUserMedia === "function",
hasAudioWorklet:
typeof window !== "undefined" &&
typeof window.AudioWorkletNode !== "undefined",
hasCrossOriginIsolation:
typeof globalThis !== "undefined" &&
globalThis.crossOriginIsolated === true,
};
return evaluateCapabilitySnapshot(snapshot);
}
}