Spaces:
Sleeping
Sleeping
import gradio as gr | |
import requests | |
import re | |
import yaml | |
def fetch_module(url: str) -> str: | |
""" | |
Fetch the raw content of a file from a GitHub URL. | |
Args: | |
url (str): The URL of the GitHub file. Can be a standard GitHub URL or a raw URL. | |
Returns: | |
str: The raw text content of the file. | |
Raises: | |
requests.HTTPError: If the HTTP request fails. | |
""" | |
if "github.com" in url and "raw.githubusercontent.com" not in url: | |
url = url.replace("github.com", "raw.githubusercontent.com").replace("/blob/", "/") | |
response = requests.get(url) | |
response.raise_for_status() | |
return response.text | |
def extract_nfcore_meta_io(url: str) -> dict: | |
""" | |
Extract input and output metadata from a nf-core module YAML file. | |
Args: | |
url (str): The URL to the nf-core module's meta.yml file. | |
Returns: | |
dict: A dictionary with 'inputs' and 'outputs' keys, each containing lists of files or terms. | |
Example: | |
{ | |
"inputs": [...], | |
"outputs": [...] | |
} | |
""" | |
content = fetch_module(url) | |
meta = yaml.safe_load(content) | |
inputs = meta.get("input", []) | |
outputs = meta.get("output", []) | |
return {"inputs": inputs, "outputs": outputs} | |
with gr.Blocks() as demo: | |
gr.Markdown("# Multi-Tool App") | |
with gr.Tab("nf-core Module Meta i/o Extractor"): | |
gr.Interface( | |
fn=extract_nfcore_meta_io, | |
inputs=gr.Textbox( | |
placeholder="Paste nf-core module URL...", | |
label="nf-core module meta.yml URL", | |
info="Paste the URL to the meta.yml file of a nf-core module. Example: https://github.com/nf-core/modules/blob/master/modules/nf-core/fastqc/meta.yml" | |
), | |
outputs=gr.JSON(label="Meta inputs and outputs"), | |
title="nf-core Module Meta i/o Extractor", | |
description="Extracts input/output files from a nf-core module's meta.yml file. Provide the URL to the meta.yml file in a nf-core module repository." | |
) | |
# Launch the interface and MCP server | |
if __name__ == "__main__": | |
demo.launch(mcp_server=True) |