native first
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
#!/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);
|
||||
Reference in New Issue
Block a user