File size: 3,125 Bytes
a14fe7d 473cdbb a14fe7d 4febf46 473cdbb a14fe7d 720c014 4febf46 a14fe7d 720c014 4febf46 720c014 473cdbb 4febf46 720c014 473cdbb 4febf46 a14fe7d 4febf46 720c014 4febf46 720c014 4febf46 720c014 4febf46 a14fe7d 4febf46 720c014 4febf46 720c014 a14fe7d 4febf46 a14fe7d 4febf46 720c014 4febf46 720c014 4febf46 a14fe7d 4febf46 7fc3220 a14fe7d 4febf46 720c014 4febf46 a14fe7d 4febf46 a14fe7d |
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 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
import gradio as gr
from huggingface_hub import InferenceClient
# Initialize the Hugging Face Inference Client
client = InferenceClient()
# Function to stream content with Math, STEM, or Code Generation, including LaTeX
def generate_stream(selected_topic, input_text):
"""
Generates dynamic lessons, solutions, or code snippets with LaTeX-style formatting.
Args:
selected_topic (str): The selected subject (e.g., Math, STEM, or Code Generation).
input_text (str): Additional input for contextual content generation.
Yields:
str: Incremental content, including Markdown/LaTeX math formatting.
"""
# Create a topic-specific prompt
prompt = (
f"Generate a {selected_topic.lower()} lesson, problem, or example with step-by-step explanations and LaTeX math formatting based on the following input: {input_text}"
if input_text.strip()
else f"Generate a beginner-level {selected_topic.lower()} lesson with examples and LaTeX math formatting."
)
messages = [{"role": "user", "content": prompt}]
try:
# Create a stream for generating content
stream = client.chat.completions.create(
model="Qwen/Qwen2.5-Coder-32B-Instruct", # Streaming model
messages=messages,
temperature=0.5,
max_tokens=1024,
top_p=0.7,
stream=True,
)
# Stream the generated content incrementally
generated_content = ""
for chunk in stream:
generated_content += chunk.choices[0].delta.content
yield generated_content # Yield content incrementally
except Exception as e:
yield f"Error: {e}" # Display error if any issues occur
# Create the Gradio interface
with gr.Blocks() as app:
# App Title and Instructions
gr.Markdown("## π STEM Learning and Code Generator with LaTeX")
gr.Markdown(
"Get dynamic lessons, problem-solving examples, or code snippets for Math, STEM, "
"or Computer Science. Includes LaTeX support for equations and step-by-step breakdowns!"
)
with gr.Row():
# Input Section
with gr.Column():
selected_topic = gr.Radio(
choices=["Math", "STEM", "Computer Science (Code Generation)"],
label="Select a Topic",
value="Math", # Default selection
)
input_text = gr.Textbox(
lines=2,
label="Optional Input",
placeholder="Provide additional context (e.g., 'Explain calculus basics' or 'Generate Python code for sorting').",
)
generate_button = gr.Button("Generate Content")
# Output Section
with gr.Column():
gr.Markdown("### Generated Content")
output_stream = gr.Markdown() # Removed placeholder argument
# Link the generate button to the streaming function
generate_button.click(
fn=generate_stream,
inputs=[selected_topic, input_text],
outputs=output_stream,
)
# Launch the Gradio app
app.launch()
|