TechExplainer / app.py
Henry Hickman
May need a gpu
5a3467a
Raw
History Blame Contribute Delete
1.43 kB
import gradio as gr
from transformers import pipeline
# Use a model tuned for reasoning and instruction following
pipe = pipeline(
"text-generation",
model="microsoft/Phi-3-mini-4k-instruct",
device=-1, # <-- forces CPU
max_new_tokens=300
)
def explain_code(code, level):
prompt = f"Explain clearly what the following {level.lower()} code does:\n\n{code}\n\nExplanation:"
result = pipe(prompt)[0]["generated_text"]
explanation = result[len(prompt):].strip()
return explanation
def update_language(level):
lang_map = {
"Python": "python",
"C": "c",
"JavaScript": "javascript",
"Other": "text"
}
return gr.update(language=lang_map.get(level, "text"))
custom_css = """
div.svelte-1ipelgc, div.ace_content, .ace_editor {
cursor: text !important;
}
.ace_editor {
pointer-events: auto !important;
}
"""
with gr.Blocks(css=custom_css, title="💡 Code Explainer") as demo:
gr.Markdown("### Enter code and get a natural language explanation.")
lang = gr.Radio(["Python", "C", "JavaScript", "Other"], value="Python", label="Language")
code = gr.Code(language="python", label="Code", lines=12)
output = gr.Textbox(label="Explanation", lines=8)
lang.change(fn=update_language, inputs=lang, outputs=code)
btn = gr.Button("Explain Code")
btn.click(fn=explain_code, inputs=[code, lang], outputs=output)
demo.launch()