File size: 1,846 Bytes
0ef482f
 
ec3d9e7
6c10eb2
0ef482f
6c10eb2
c071669
23f2922
444e2a5
0ef482f
 
c071669
d117752
23f2922
0ef482f
71865dd
 
 
 
 
 
 
 
 
d117752
 
 
 
71865dd
 
 
 
ec3d9e7
0ef482f
 
d117752
 
 
 
71865dd
0ef482f
 
 
 
 
 
71865dd
d117752
 
71865dd
d117752
0ef482f
 
 
 
d117752
eb6d527
ec3d9e7
0ef482f
 
d081bf3
0ef482f
 
d117752
 
0ef482f
 
444e2a5
0ef482f
 
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
65
66
67
68
69
70
71
import gradio as gr
import json
import base64
import requests
import os

HF_TOKEN = os.environ.get("HF_CV_ROBOT_TOKEN")
MODEL = "Qwen/Qwen2.5-VL-7B-Instruct"

def process(payload: dict):
    try:
        if not HF_TOKEN:
            return {"error": "Missing token"}

        robot_id = payload.get("robot_id", "unknown")
        image_b64 = payload["image_b64"]

        data = {
            "model": MODEL,
            "messages": [
                {
                    "role": "user",
                    "content": [
                        {"type": "text", "text": "Describe this image in detail."},
                        {
                            "type": "image_data",
                            "image_data": {"b64": image_b64}
                        }
                    ]
                }
            ]
        }

        resp = requests.post(
            "https://router.huggingface.co/v1/chat/completions",
            headers={
                "Authorization": f"Bearer {HF_TOKEN}",
                "Content-Type": "application/json"
            },
            data=json.dumps(data),
            timeout=60
        )

        if resp.status_code != 200:
            return {"error": f"VLM API error: {resp.status_code}, {resp.text}"}

        try:
            content = resp.json()["choices"][0]["message"]["content"]
            first = content[0]["text"]
        except:
            return {"error": f"Bad response: {resp.text}"}

        return {
            "received": True,
            "robot_id": robot_id,
            "vllm_analysis": first
        }

    except Exception as e:
        return {"error": str(e)}

demo = gr.Interface(
    fn=process,
    inputs=gr.JSON(label="Input Payload"),
    outputs=gr.JSON(label="Reply"),
    api_name="predict"
)

if __name__ == "__main__":
    demo.launch(mcp_server=True)