Spaces:
Sleeping
Sleeping
// π Importing Necessary Modules and Libraries π | |
import express from "express"; | |
import 'dotenv/config.js' | |
import { createServer } from "http"; | |
import { Server as SocketIOServer } from "socket.io"; | |
import { client as GradioClient } from "@gradio/client"; | |
import { createRequire } from 'node:module' | |
// π Global Configurations π | |
const require = createRequire(import.meta.url); | |
global.EventSource = require('eventsource'); | |
// π± Express App Setup π± | |
const app = express(); | |
const httpServer = createServer(app); | |
app.use(express.static('public')); | |
// π Socket.io Setup π | |
const io = new SocketIOServer(httpServer, { /* options */ }); | |
// π°οΈ Socket.io Connection Handler π°οΈ | |
io.on("connection", (socket) => { | |
console.log("π New Socket Connection Established"); | |
socket.on("ask_api", (clientData) => { | |
console.log(clientData) | |
console.log("π Trying to Reach API"); | |
callGradioAPIAsync(clientData, socket) | |
}); | |
}); | |
// π€ Gradio API Testing Function (Uncomment to test) π€ | |
// async function testGradioServers(){ | |
// try { | |
// const gradioTestClient = await GradioClient("https://gradio-hello-world.hf.space"); | |
// const apiTestResult = await gradioTestClient.predict("/predict", ["John"]); | |
// console.log(apiTestResult); | |
// } catch (error) { | |
// console.log(error); | |
// } | |
// } | |
// testGradioServers(); | |
// π Async Function to Call Gradio API π | |
async function callGradioAPIAsync(clientData, socket) { | |
const gradioClient = await GradioClient("fffiloni/mndrm-call"); | |
try { | |
const apiResult = await gradioClient.predict("/infer", [ | |
clientData[0], // blob in 'image' Image component | |
clientData[1], // string in 'Question' Textbox component | |
]); | |
console.log(apiResult) | |
socket.emit("api_response", (apiResult.data)) | |
} catch (error) { | |
console.log(error) | |
socket.emit("api_error", ("ERROR ON API SIDE, SORRY...")) | |
} | |
} | |
// π Server Startup π | |
httpServer.listen(7860); | |
console.log("π App Running on http://localhost:7860"); | |