import gradio as gr from huggingface_hub import InferenceClient import os # For environment variables # Initialize the Hugging Face Inference Client client = InferenceClient() # Generic function to generate AI response with streaming def generate_response(prompt_template, **kwargs): # Format the prompt with provided arguments prompt = os.getenv(prompt_template).format(**kwargs) # Stream the response from the model stream = client.chat.completions.create( model="Qwen/QwQ-32B-Preview", messages=[{"role": "user", "content": prompt}], temperature=0.7, max_tokens=1024, top_p=0.8, stream=True ) # Stream chunks as they are generated response = "" for chunk in stream: response += chunk.choices[0].delta.content yield response # 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.") # Function to create a reusable tab with inputs and outputs def create_tab(tab_name, prompt_template, inputs): with gr.Tab(tab_name): input_fields = [] # Create input components dynamically 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() # Link button to the response generator button.click( fn=lambda *args: generate_response(prompt_template, **dict(zip([inp["key"] for inp in inputs], args))), inputs=input_fields, outputs=output, stream=True # Enable streaming for Gradio ) # Tabs for various 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)