import gradio as gr from huggingface_hub import InferenceClient import os # For environment variables # Initialize the Hugging Face Inference Client client = InferenceClient() # Generator function for streaming AI response def generate_response(prompt_template, **kwargs): prompt = os.getenv(prompt_template).format(**kwargs) stream = client.chat.completions.create( model="Qwen/Qwen2.5-Math-1.5B-Instruct", messages=[{"role": "user", "content": prompt}], temperature=0.7, max_tokens=1024, top_p=0.8, stream=True ) response = "" for chunk in stream: response += chunk.choices[0].delta.content yield response # Yield incrementally # Wrapper function for Gradio compatibility def stream_response(prompt_template, **kwargs): return generate_response(prompt_template, **kwargs) # Gradio app interface with gr.Blocks() as app: gr.Markdown("## Mathematical Insight Tutor") gr.Markdown("An advanced AI-powered tutor to help you master math concepts.") def create_tab(tab_name, prompt_template, inputs): with gr.Tab(tab_name): input_fields = [] for inp in inputs: if inp["type"] == "textbox": input_fields.append( gr.Textbox(lines=inp.get("lines", 1), label=inp["label"], placeholder=inp["placeholder"]) ) elif inp["type"] == "dropdown": input_fields.append( gr.Dropdown(choices=inp["choices"], label=inp["label"]) ) elif inp["type"] == "value": input_fields.append( gr.Textbox(label=inp["label"], placeholder=inp["placeholder"]) ) # Button and output button = gr.Button(f"{tab_name} Execute") output = gr.Markdown(label="Output", placeholder="Generated response will appear here.") # Link button to the response wrapper button.click( fn=lambda *args: stream_response(prompt_template, **dict(zip([inp["key"] for inp in inputs], args))), inputs=input_fields, outputs=output, api_name=f"/{tab_name.lower().replace(' ', '_')}_execute" ) # Tabs for functionalities create_tab( "Solve a Problem", "PROMPT_SOLVE", [ {"key": "problem", "type": "textbox", "label": "Enter Math Problem", "placeholder": "e.g., Solve for x: 2x + 5 = 15"}, {"key": "difficulty", "type": "dropdown", "label": "Difficulty Level", "choices": ["Beginner", "Intermediate", "Advanced"]} ] ) create_tab( "Generate a Hint", "PROMPT_HINT", [ {"key": "problem", "type": "textbox", "label": "Enter Math Problem for Hint", "placeholder": "e.g., Solve for x: 2x + 5 = 15"}, {"key": "difficulty", "type": "dropdown", "label": "Difficulty Level", "choices": ["Beginner", "Intermediate", "Advanced"]} ] ) create_tab( "Verify Solution", "PROMPT_VERIFY", [ {"key": "problem", "type": "textbox", "label": "Enter Math Problem", "placeholder": "e.g., Solve for x: 2x + 5 = 15"}, {"key": "solution", "type": "value", "label": "Enter Your Solution", "placeholder": "e.g., x = 5"} ] ) create_tab( "Generate Practice Question", "PROMPT_GENERATE", [ {"key": "topic", "type": "textbox", "label": "Enter Math Topic", "placeholder": "e.g., Algebra, Calculus"}, {"key": "difficulty", "type": "dropdown", "label": "Difficulty Level", "choices": ["Beginner", "Intermediate", "Advanced"]} ] ) create_tab( "Explain Concept", "PROMPT_EXPLAIN", [ {"key": "problem", "type": "textbox", "label": "Enter Math Problem", "placeholder": "e.g., Solve for x: 2x + 5 = 15"}, {"key": "difficulty", "type": "dropdown", "label": "Difficulty Level", "choices": ["Beginner", "Intermediate", "Advanced"]} ] ) # Launch the app app.launch(debug=True)