Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import requests | |
| import json | |
| MCP_URL = "https://huggingface.co/mcp" | |
| HEADERS = { | |
| "Content-Type": "application/json", | |
| "Accept": "application/json, text/event-stream" | |
| } | |
| def call_mcp_tool(method, params): | |
| payload = { | |
| "jsonrpc": "2.0", | |
| "method": method, | |
| "params": params, | |
| "id": 1 | |
| } | |
| response = requests.post(MCP_URL, headers=HEADERS, data=json.dumps(payload)) | |
| try: | |
| return response.json() | |
| except Exception as e: | |
| return {"error": str(e), "raw_response": response.text} | |
| def space_search(query, limit=10, mcp=False): | |
| params = { | |
| "query": query, | |
| "limit": limit, | |
| "mcp": mcp | |
| } | |
| result = call_mcp_tool("tools/call", {"tool": "space_search", "input": params}) | |
| return result | |
| def model_detail(model_id): | |
| params = { | |
| "model_id": model_id | |
| } | |
| result = call_mcp_tool("tools/call", {"tool": "model_detail", "input": params}) | |
| return result | |
| def paper_search(query, results_limit=12, concise_only=False): | |
| params = { | |
| "query": query, | |
| "results_limit": results_limit, | |
| "concise_only": concise_only | |
| } | |
| result = call_mcp_tool("tools/call", {"tool": "paper_search", "input": params}) | |
| return result | |
| def dataset_search(query="", author="", tags=None, limit=20, sort="downloads"): | |
| if tags is None: | |
| tags = [] | |
| params = { | |
| "query": query, | |
| "author": author, | |
| "tags": tags, | |
| "limit": limit, | |
| "sort": sort | |
| } | |
| result = call_mcp_tool("tools/call", {"tool": "dataset_search", "input": params}) | |
| return result | |
| def dataset_detail(dataset_id): | |
| params = { | |
| "dataset_id": dataset_id | |
| } | |
| result = call_mcp_tool("tools/call", {"tool": "dataset_detail", "input": params}) | |
| return result | |
| def duplicate_space(sourceSpaceId, newSpaceId="", hardware="freecpu", private=True): | |
| params = { | |
| "sourceSpaceId": sourceSpaceId, | |
| "newSpaceId": newSpaceId, | |
| "hardware": hardware, | |
| "private": private | |
| } | |
| result = call_mcp_tool("tools/call", {"tool": "duplicate_space", "input": params}) | |
| return result | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# MCP Gradio Client") | |
| with gr.Tab("Space Search"): | |
| query = gr.Textbox(label="Query") | |
| limit = gr.Slider(1, 50, value=10, label="Limit") | |
| mcp = gr.Checkbox(label="MCP Only") | |
| output = gr.JSON() | |
| btn = gr.Button("Search") | |
| btn.click(space_search, inputs=[query, limit, mcp], outputs=output) | |
| with gr.Tab("Model Detail"): | |
| model_id = gr.Textbox(label="Model ID") | |
| output = gr.JSON() | |
| btn = gr.Button("Get Details") | |
| btn.click(model_detail, inputs=model_id, outputs=output) | |
| with gr.Tab("Paper Search"): | |
| query = gr.Textbox(label="Query") | |
| results_limit = gr.Slider(1, 50, value=12, label="Results Limit") | |
| concise_only = gr.Checkbox(label="Concise Only") | |
| output = gr.JSON() | |
| btn = gr.Button("Search") | |
| btn.click(paper_search, inputs=[query, results_limit, concise_only], outputs=output) | |
| with gr.Tab("Dataset Search"): | |
| query = gr.Textbox(label="Query") | |
| author = gr.Textbox(label="Author") | |
| tags = gr.Textbox(label="Tags (comma-separated)") | |
| limit = gr.Slider(1, 100, value=20, label="Limit") | |
| sort = gr.Dropdown(choices=["downloads", "likes", "lastModified"], value="downloads", label="Sort By") | |
| output = gr.JSON() | |
| btn = gr.Button("Search") | |
| def parse_tags(tags_str): | |
| return [tag.strip() for tag in tags_str.split(",") if tag.strip()] | |
| btn.click(lambda q, a, t, l, s: dataset_search(q, a, parse_tags(t), l, s), | |
| inputs=[query, author, tags, limit, sort], outputs=output) | |
| with gr.Tab("Dataset Detail"): | |
| dataset_id = gr.Textbox(label="Dataset ID") | |
| output = gr.JSON() | |
| btn = gr.Button("Get Details") | |
| btn.click(dataset_detail, inputs=dataset_id, outputs=output) | |
| with gr.Tab("Duplicate Space"): | |
| sourceSpaceId = gr.Textbox(label="Source Space ID") | |
| newSpaceId = gr.Textbox(label="New Space ID") | |
| hardware = gr.Dropdown(choices=["freecpu", "zerogpu"], value="freecpu", label="Hardware") | |
| private = gr.Checkbox(label="Private", value=True) | |
| output = gr.JSON() | |
| btn = gr.Button("Duplicate") | |
| btn.click(duplicate_space, inputs=[sourceSpaceId, newSpaceId, hardware, private], outputs=output) | |
| demo.launch(mcp_server=True,share=True,debug=True) |