File size: 4,617 Bytes
a14fe7d 473cdbb 43dcd71 a14fe7d 4febf46 473cdbb a14fe7d 43dcd71 a14fe7d 43dcd71 65151e2 43dcd71 3212e03 43dcd71 65151e2 43dcd71 473cdbb 43dcd71 4febf46 43dcd71 473cdbb 4febf46 a14fe7d 4febf46 43dcd71 4febf46 43dcd71 4febf46 43dcd71 4febf46 43dcd71 4febf46 43dcd71 4febf46 65151e2 a14fe7d 43dcd71 4febf46 a14fe7d 43dcd71 4febf46 43dcd71 4febf46 43dcd71 4febf46 3212e03 43dcd71 3212e03 4febf46 43dcd71 4febf46 3212e03 43dcd71 3212e03 65151e2 a14fe7d 43dcd71 4febf46 43dcd71 65151e2 43dcd71 a14fe7d 43dcd71 4febf46 43dcd71 4febf46 43dcd71 a14fe7d 43dcd71 3212e03 43dcd71 3212e03 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 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
import gradio as gr
from huggingface_hub import InferenceClient
import tempfile
# Initialize the Hugging Face Inference Client
client = InferenceClient()
# Function to generate dynamic lessons, examples, or code
def generate_content(selected_topic, subtopic, complexity, input_text, examples_count, output_type):
"""
Generate content dynamically based on user input.
Args:
selected_topic (str): Topic selected by the user.
subtopic (str): Specific subtopic for generation.
complexity (str): User expertise level.
input_text (str): Additional input context.
examples_count (int): Number of examples to generate.
output_type (str): Desired output format.
Returns:
str or dict: Generated content in the selected format.
"""
# Build the prompt dynamically
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}."
)
messages = [{"role": "user", "content": prompt}]
try:
# Generate the content using the model
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
# Adjust the output based on the selected type
if output_type == "LaTeX":
return {"content": content, "latex": True}
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": temp_file.name}
else:
return content
except Exception as e:
return f"Error: {e}"
# Create the Gradio interface
with gr.Blocks() as app:
# App Title
gr.Markdown("## π Advanced STEM and Code Generator with Interactive Features")
with gr.Row():
# Input Panel
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")
# Output Panel
with gr.Column():
gr.Markdown("### π Output")
output = gr.Textbox(
label="Generated Output",
lines=15,
interactive=False
)
download_button = gr.File(label="Download File (if applicable)")
# Link the generation function to the button
generate_button.click(
fn=generate_content,
inputs=[selected_topic, subtopic, complexity, input_text, examples_count, output_type],
outputs=[output, download_button]
)
# Feedback Mechanism
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]
)
# Launch the Gradio app
app.launch()
|