// 🌍 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");