File size: 2,091 Bytes
9a70daf
f9f0fec
 
 
9a70daf
 
f9f0fec
9a70daf
 
f9f0fec
 
 
9a70daf
f9f0fec
 
 
 
9a70daf
 
 
 
f9f0fec
 
9a70daf
 
 
 
 
 
f9f0fec
 
 
9a70daf
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f3c1998
f9f0fec
9a70daf
42d0842
9a70daf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// 🌍 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");