import gradio as gr from huggingface_hub import InferenceClient # Initialize the Hugging Face Inference Client client = InferenceClient() # Function to stream content for Math, STEM, and Code Generation def generate_stream(selected_topic, input_text): """ Generates dynamic lessons, solutions, or code snippets based on the selected topic. 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 output content. """ # Create a topic-specific prompt prompt = ( f"Generate a {selected_topic.lower()} lesson, problem, or example based on the following input: {input_text}" if input_text.strip() else f"Generate a beginner-level {selected_topic.lower()} lesson with examples." ) 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") gr.Markdown( "Get dynamic lessons, problem-solving examples, or code snippets for Math, STEM, " "or Computer Science. Select a topic and get started!" ) 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.Textbox( lines=15, label="Output", interactive=False ) # 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()