File size: 2,602 Bytes
9fbf50e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
from langchain_groq import ChatGroq
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import JsonOutputParser
from typing import Dict, Any
import json

def convert_code(input_code: str, model_name: str = "llama-3.3-70b-versatile") -> Dict[str, str]:
    """

    Converts input Python/IPYNB code into a Gradio app structure.

    Returns a dictionary containing app.py, requirements.txt, and README.md content.

    """
    
    # Check for API Key
    if not os.environ.get("GROQ_API_KEY"):
         raise ValueError("GROQ_API_KEY environment variable is not set.")

    chat = ChatGroq(temperature=0, model_name=model_name)

    system_prompt = """You are an expert Python developer specializing in Gradio and Hugging Face Spaces. 

    Your task is to convert the provided Python code (which might be a script or a notebook content) into a deployable Gradio web application.

    

    You must output a JSON object with exactly three keys:

    1. "app_py": The complete code for app.py. It must use Gradio to create a UI for the functionality in the source code. Ensure all imports are correct.

    2. "requirements_txt": A list of dependencies required to run the app. Include 'gradio'.

    3. "readme_md": A README.md file customized for a Hugging Face Space.

    

    Rules for app.py:

    - Encapsulate logic in functions.

    - Create a professional Gradio interface `demo = gr.Interface(...)` or `with gr.Blocks() as demo: ...`.

    - Ensure `demo.launch()` is called at the end if it's main, but standard HF spaces just look for `demo` object or run the script.

    - Handle potential errors gracefully.

    

    Do not include markdown triple backticks in the JSON values. The values should be raw string content.

    """

    human_template = "Convert this code into a Gradio app:\n\n{code}"
    
    prompt = ChatPromptTemplate.from_messages([
        ("system", system_prompt),
        ("human", human_template)
    ])

    chain = prompt | chat | JsonOutputParser()

    try:
        result = chain.invoke({"code": input_code})
        return result
    except Exception as e:
        # Fallback or error handling
        raise RuntimeError(f"Failed to generate code: {str(e)}")

def parse_notebook(notebook_content: dict) -> str:
    """Extracts code cells from a notebook dictionary."""
    code = []
    for cell in notebook_content.get('cells', []):
        if cell.get('cell_type') == 'code':
            code.append("".join(cell.get('source', [])))
    return "\n\n".join(code)