Files
Mastermind/scripts/mock-nemotron-sidecar.js
T

67 lines
1.5 KiB
JavaScript

#!/usr/bin/env node
const WebSocket = require("ws");
const port = Number(process.env.MOCK_NEMOTRON_PORT || 8765);
const transcript =
process.env.MOCK_NEMOTRON_TRANSCRIPT ||
"hello from the mock nemotron sidecar";
const server = new WebSocket.Server({ host: "127.0.0.1", port });
server.on("connection", (socket) => {
let binaryChunks = 0;
let finalSent = false;
socket.on("message", (data, isBinary) => {
if (!isBinary) {
let message = null;
try {
message = JSON.parse(data.toString("utf8"));
} catch (_) {
socket.send(JSON.stringify({ type: "error", error: "Invalid JSON" }));
return;
}
if (message.type === "start") {
socket.send(JSON.stringify({ type: "ready" }));
}
return;
}
binaryChunks += 1;
if (binaryChunks === 1) {
socket.send(
JSON.stringify({
type: "partial",
text: transcript.split(" ").slice(0, 3).join(" "),
}),
);
}
if (!finalSent && binaryChunks >= 5) {
finalSent = true;
socket.send(JSON.stringify({ type: "final", text: transcript }));
}
});
});
server.on("listening", () => {
console.log(
`Mock Nemotron sidecar listening on ws://127.0.0.1:${port}/v1/asr/stream`,
);
});
server.on("error", (error) => {
console.error("Mock Nemotron sidecar error:", error);
process.exitCode = 1;
});
function shutdown() {
server.close(() => process.exit(0));
}
process.on("SIGINT", shutdown);
process.on("SIGTERM", shutdown);