| | import gradio as gr |
| | from huggingface_hub import InferenceClient |
| | import tempfile |
| |
|
| | |
| | client = InferenceClient() |
| |
|
| | |
| | def generate_content(selected_topic, subtopic, complexity, input_text, examples_count, output_type): |
| | """ |
| | Generate content dynamically based on user input with support for LaTeX and file downloads. |
| | |
| | Args: |
| | selected_topic (str): The selected topic (e.g., Math, STEM, Code Generation). |
| | subtopic (str): A specific subtopic for content generation. |
| | complexity (str): Expertise level (Beginner, Intermediate, Advanced). |
| | input_text (str): Additional context or problem to solve. |
| | examples_count (int): Number of examples or outputs to generate. |
| | output_type (str): Desired output format (Plain Text, LaTeX, Downloadable). |
| | |
| | Returns: |
| | tuple: Generated content and file path (if applicable). |
| | """ |
| | |
| | prompt = ( |
| | f"Generate {examples_count} {complexity.lower()}-level {selected_topic.lower()} examples, lessons, " |
| | f"or problems related to {subtopic}. Context: {input_text}" if input_text.strip() |
| | else f"Generate {examples_count} {complexity.lower()}-level {selected_topic.lower()} lessons " |
| | f"or problems focused on {subtopic}." |
| | ) |
| |
|
| | try: |
| | |
| | messages = [{"role": "user", "content": prompt}] |
| | response = client.chat.completions.create( |
| | model="Qwen/Qwen2.5-Coder-32B-Instruct", |
| | messages=messages, |
| | temperature=0.5, |
| | max_tokens=1024, |
| | top_p=0.7 |
| | ) |
| | |
| | content = response.choices[0].message.content if response.choices else "No content generated." |
| |
|
| | |
| | if output_type == "LaTeX": |
| | |
| | latex_content = f"$$\n{content.strip()}\n$$" |
| | return latex_content, None |
| | elif output_type == "Downloadable": |
| | |
| | temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".txt") |
| | with open(temp_file.name, "w") as file: |
| | file.write(content) |
| | return "File generated successfully. Use the download button.", temp_file.name |
| | else: |
| | |
| | return content, None |
| | except Exception as e: |
| | |
| | return f"Error during content generation: {e}", None |
| |
|
| |
|
| | |
| | with gr.Blocks() as app: |
| | |
| | gr.Markdown("## π Advanced STEM and Code Generator with LaTeX and File Downloads") |
| |
|
| | with gr.Row(): |
| | |
| | with gr.Column(): |
| | selected_topic = gr.Radio( |
| | choices=["Math", "STEM", "Code Generation"], |
| | label="Select a Topic", |
| | value="Math" |
| | ) |
| | subtopic = gr.Textbox( |
| | label="Subtopic", |
| | placeholder="E.g., Algebra, Physics, Sorting Algorithms" |
| | ) |
| | complexity = gr.Radio( |
| | choices=["Beginner", "Intermediate", "Advanced"], |
| | label="Expertise Level", |
| | value="Beginner" |
| | ) |
| | input_text = gr.Textbox( |
| | label="Additional Context", |
| | placeholder="E.g., 'Explain integration basics' or 'Generate Python code for searching.'", |
| | lines=3 |
| | ) |
| | examples_count = gr.Slider( |
| | minimum=1, |
| | maximum=5, |
| | step=1, |
| | label="Number of Examples", |
| | value=1 |
| | ) |
| | output_type = gr.Radio( |
| | choices=["Plain Text", "LaTeX", "Downloadable"], |
| | label="Output Format", |
| | value="Plain Text" |
| | ) |
| | generate_button = gr.Button("Generate Content") |
| |
|
| | |
| | with gr.Column(): |
| | gr.Markdown("### π Generated Output (Supports LaTeX)") |
| | output_text = gr.Markdown(label="Generated Content") |
| | download_button = gr.File(label="Download File (if applicable)") |
| |
|
| | |
| | def update_output(result, file_path): |
| | if file_path: |
| | return result, file_path |
| | return result, None |
| |
|
| | generate_button.click( |
| | fn=generate_content, |
| | inputs=[selected_topic, subtopic, complexity, input_text, examples_count, output_type], |
| | outputs=[output_text, download_button], |
| | preprocess=False, |
| | postprocess=update_output |
| | ) |
| |
|
| | |
| | feedback_label = gr.Label(value="Was this content helpful?") |
| | feedback_rating = gr.Radio( |
| | choices=["Yes", "No"], |
| | label="Feedback", |
| | value="Yes" |
| | ) |
| | feedback_button = gr.Button("Submit Feedback") |
| |
|
| | def collect_feedback(feedback): |
| | return f"Thank you for your feedback: {feedback}" |
| |
|
| | feedback_button.click( |
| | fn=collect_feedback, |
| | inputs=[feedback_rating], |
| | outputs=[feedback_label] |
| | ) |
| |
|
| | |
| | app.launch() |
| |
|