SameerArz commited on
Commit
8fe789c
·
verified ·
1 Parent(s): b95597f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +94 -52
app.py CHANGED
@@ -1,9 +1,19 @@
1
  import gradio as gr
 
 
 
2
 
3
- # Load the models correctly
 
 
 
4
  model1 = gr.load("models/prithivMLmods/SD3.5-Turbo-Realism-2.0-LoRA")
5
  model2 = gr.load("models/Purz/face-projection")
6
 
 
 
 
 
7
  def generate_tutor_output(subject, difficulty, student_input):
8
  prompt = f"""
9
  You are an expert tutor in {subject} at the {difficulty} level.
@@ -17,33 +27,50 @@ def generate_tutor_output(subject, difficulty, student_input):
17
  Format your response as a JSON object with keys: "lesson", "question", "feedback"
18
  """
19
 
20
- # Assume this function is already integrated with Groq or another model for text generation.
21
- # We can replace this with a mock lesson response or keep it as it is.
22
- # The lesson is passed as a return from your other model for lesson generation.
23
- return {
24
- "lesson": "This is your lesson content based on the input topic.",
25
- "question": "What is your understanding of this concept?",
26
- "feedback": "Your explanation needs more clarity on the topic."
27
- }
 
 
 
 
 
 
 
 
 
28
 
29
- # Function to generate visual output using model1 or model2
30
- def generate_visual(topic, use_face_projection=False):
31
- if use_face_projection:
32
- # Use model2 for face projection
33
- image = model2.generate({"prompt": topic})
34
  else:
35
- # Use model1 for SD3.5-Turbo-Realism-2.0-LoRA for general visual generation
36
- image = model1.generate({"prompt": topic})
37
-
38
- return image
 
 
 
 
 
 
 
 
39
 
40
  # Set up the Gradio interface
41
  with gr.Blocks() as demo:
42
- gr.Markdown("# 🎓 Your AI Tutor")
43
-
 
44
  with gr.Row():
45
  with gr.Column(scale=2):
46
- # Input fields for subject, difficulty, and student input
47
  subject = gr.Dropdown(
48
  ["Math", "Science", "History", "Literature", "Code", "AI"],
49
  label="Subject",
@@ -59,7 +86,7 @@ with gr.Blocks() as demo:
59
  label="Your Input",
60
  info="Enter the topic you want to learn"
61
  )
62
- generate_lesson_button = gr.Button("Generate Lesson", variant="primary")
63
 
64
  with gr.Column(scale=3):
65
  # Output fields for lesson, question, and feedback
@@ -67,42 +94,57 @@ with gr.Blocks() as demo:
67
  question_output = gr.Markdown(label="Comprehension Question")
68
  feedback_output = gr.Markdown(label="Feedback")
69
 
70
- # Separate section for visual generation
71
  with gr.Row():
72
- topic_for_visual = gr.Textbox(label="Topic for Visual", placeholder="Generated Topic")
73
- use_face_projection = gr.Checkbox(label="Use Face Projection?", value=False)
74
- generate_visual_button = gr.Button("Generate Visual Output")
75
- visual_output = gr.Image(label="Generated Visual")
76
-
77
- # Markdown instructions
 
 
 
 
 
 
 
 
 
78
  gr.Markdown("""
79
  ### How to Use
80
- 1. Select a subject from the dropdown.
81
- 2. Choose your difficulty level.
82
- 3. Enter the topic or question you'd like to explore.
83
- 4. Click 'Generate Lesson' to receive a personalized lesson, question, and feedback.
84
- 5. After generating the lesson, you can click 'Generate Visual Output' to create a related visual representation.
85
- 6. Review the AI-generated content to enhance your learning.
86
  """)
87
-
88
- # Function to process lesson and pass the topic for visual generation
89
- def process_lesson_output(subject, difficulty, student_input):
90
- parsed = generate_tutor_output(subject, difficulty, student_input) # Get the lesson output
91
- # Store the lesson topic (you can use the lesson or question as a topic for visual generation)
92
- return parsed["lesson"], parsed["question"], parsed["feedback"], student_input
93
-
94
- # Generate Lesson Button
95
- generate_lesson_button.click(
96
- fn=process_lesson_output,
 
 
 
 
 
 
 
 
 
97
  inputs=[subject, difficulty, student_input],
98
- outputs=[lesson_output, question_output, feedback_output, topic_for_visual]
99
  )
100
-
101
- # Generate Visual Button
102
- generate_visual_button.click(
103
- fn=generate_visual,
104
- inputs=[topic_for_visual, use_face_projection],
105
- outputs=visual_output
106
  )
107
 
108
  if __name__ == "__main__":
 
1
  import gradio as gr
2
+ from groq import Groq
3
+ import os
4
+ import threading # Import threading module
5
 
6
+ # Initialize Groq client with your API key
7
+ client = Groq(api_key=os.environ["GROQ_API_KEY"])
8
+
9
+ # Load Text-to-Image Models
10
  model1 = gr.load("models/prithivMLmods/SD3.5-Turbo-Realism-2.0-LoRA")
11
  model2 = gr.load("models/Purz/face-projection")
12
 
13
+ # Stop event for threading (image generation)
14
+ stop_event = threading.Event()
15
+
16
+ # Function to generate tutor output (lesson, question, feedback)
17
  def generate_tutor_output(subject, difficulty, student_input):
18
  prompt = f"""
19
  You are an expert tutor in {subject} at the {difficulty} level.
 
27
  Format your response as a JSON object with keys: "lesson", "question", "feedback"
28
  """
29
 
30
+ completion = client.chat.completions.create(
31
+ messages=[{
32
+ "role": "system",
33
+ "content": f"You are the world's best AI tutor, renowned for your ability to explain complex concepts in an engaging, clear, and memorable way and giving math examples. Your expertise in {subject} is unparalleled, and you're adept at tailoring your teaching to {difficulty} level students."
34
+ }, {
35
+ "role": "user",
36
+ "content": prompt,
37
+ }],
38
+ model="mixtral-8x7b-32768", # Model for text generation
39
+ max_tokens=1000,
40
+ )
41
+
42
+ return completion.choices[0].message.content
43
+
44
+ # Function to generate images based on model selection
45
+ def generate_images(text, selected_model):
46
+ stop_event.clear()
47
 
48
+ if selected_model == "Model 1 (Turbo Realism)":
49
+ model = model1
50
+ elif selected_model == "Model 2 (Face Projection)":
51
+ model = model2
 
52
  else:
53
+ return ["Invalid model selection."] * 3
54
+
55
+ results = []
56
+ for i in range(3):
57
+ if stop_event.is_set():
58
+ return ["Image generation stopped by user."] * 3
59
+
60
+ modified_text = f"{text} variation {i+1}"
61
+ result = model(modified_text)
62
+ results.append(result)
63
+
64
+ return results
65
 
66
  # Set up the Gradio interface
67
  with gr.Blocks() as demo:
68
+ gr.Markdown("# 🎓 Your AI Tutor with Visuals & Images")
69
+
70
+ # Section for generating Text-based output (lesson, question, feedback)
71
  with gr.Row():
72
  with gr.Column(scale=2):
73
+ # Input fields for subject, difficulty, and student input for textual output
74
  subject = gr.Dropdown(
75
  ["Math", "Science", "History", "Literature", "Code", "AI"],
76
  label="Subject",
 
86
  label="Your Input",
87
  info="Enter the topic you want to learn"
88
  )
89
+ submit_button_text = gr.Button("Generate Lesson & Question", variant="primary")
90
 
91
  with gr.Column(scale=3):
92
  # Output fields for lesson, question, and feedback
 
94
  question_output = gr.Markdown(label="Comprehension Question")
95
  feedback_output = gr.Markdown(label="Feedback")
96
 
97
+ # Section for generating Visual output
98
  with gr.Row():
99
+ with gr.Column(scale=2):
100
+ # Input fields for text and model selection for image generation
101
+ model_selector = gr.Radio(
102
+ ["Model 1 (Turbo Realism)", "Model 2 (Face Projection)"],
103
+ label="Select Image Generation Model",
104
+ value="Model 1 (Turbo Realism)"
105
+ )
106
+ submit_button_visual = gr.Button("Generate Visuals", variant="primary")
107
+
108
+ with gr.Column(scale=3):
109
+ # Output fields for generated images
110
+ output1 = gr.Image(label="Generated Image 1")
111
+ output2 = gr.Image(label="Generated Image 2")
112
+ output3 = gr.Image(label="Generated Image 3")
113
+
114
  gr.Markdown("""
115
  ### How to Use
116
+ 1. **Text Section**: Select a subject and difficulty, type your query, and click 'Generate Lesson & Question' to get your personalized lesson, comprehension question, and feedback.
117
+ 2. **Visual Section**: Select the model for image generation, then click 'Generate Visuals' to receive 3 variations of an image based on your topic.
118
+ 3. Review the AI-generated content to enhance your learning experience!
 
 
 
119
  """)
120
+
121
+ def process_output_text(subject, difficulty, student_input):
122
+ try:
123
+ tutor_output = generate_tutor_output(subject, difficulty, student_input)
124
+ parsed = eval(tutor_output) # Convert string to dictionary
125
+ return parsed["lesson"], parsed["question"], parsed["feedback"]
126
+ except:
127
+ return "Error parsing output", "No question available", "No feedback available"
128
+
129
+ def process_output_visual(text, selected_model):
130
+ try:
131
+ images = generate_images(text, selected_model) # Generate images
132
+ return images[0], images[1], images[2]
133
+ except:
134
+ return None, None, None
135
+
136
+ # Generate Text-based Output
137
+ submit_button_text.click(
138
+ fn=process_output_text,
139
  inputs=[subject, difficulty, student_input],
140
+ outputs=[lesson_output, question_output, feedback_output]
141
  )
142
+
143
+ # Generate Visual Output
144
+ submit_button_visual.click(
145
+ fn=process_output_visual,
146
+ inputs=[student_input, model_selector],
147
+ outputs=[output1, output2, output3]
148
  )
149
 
150
  if __name__ == "__main__":