ernani
adding different language outputs support
146e092
import gradio as gr
import os
from tools import generate_fitness_plan
class FitnessProfileGUI:
def __init__(self, share=False):
self.share = share
self.demo = self.create_interface()
def create_fitness_plan(self, age, weight, height, gender, primary_goal, target_timeframe,
workout_preferences, workout_duration, workout_days,
activity_level, output_language, custom_language, health_conditions, dietary_preferences):
# If output_language is "Other", use the custom language instead
final_language = custom_language if output_language == "Other" else output_language
# Generate the fitness plan using the tools module
result = generate_fitness_plan(
age=age,
weight=weight,
height=height,
gender=gender,
primary_goal=primary_goal,
target_timeframe=target_timeframe,
workout_preferences=workout_preferences,
workout_duration=workout_duration,
workout_days=workout_days,
activity_level=activity_level,
output_language=final_language,
health_conditions=health_conditions,
dietary_preferences=dietary_preferences
)
# Format the output
output = f"""
{result['profile_summary']}
FITNESS PLAN
===========
{result['fitness_plan']}
"""
return output
def show_custom_language_input(self, output_language):
return gr.update(visible=output_language == "Other")
def create_interface(self):
with gr.Blocks(theme=gr.themes.Default()) as demo:
gr.Markdown("# AI Fitness Coach")
with gr.Tabs():
with gr.Tab("Create Fitness Plan - Workout"):
with gr.Row():
age = gr.Number(label="Age", value=0)
weight = gr.Number(label="Weight (kg)", value=0)
height = gr.Number(label="Height (cm)", value=0)
gender = gr.Radio(choices=["Male", "Female"], label="Gender")
primary_goal = gr.Dropdown(
choices=[
"Weight Loss",
"Muscle Gain",
"Strength Building",
"General Fitness",
"Endurance Improvement",
"Flexibility Enhancement"
],
label="Primary Goal"
)
target_timeframe = gr.Dropdown(
choices=[
"1 month",
"3 months",
"6 months",
"1 year",
"Ongoing"
],
label="Target Timeframe"
)
workout_preferences = gr.CheckboxGroup(
choices=["Cardio", "Strength training", "Yoga", "Pilates", "Flexibility exercises", "HIIT"],
label="Workout Type Preferences"
)
workout_duration = gr.Slider(
minimum=15,
maximum=120,
step=15,
label="Preferred Workout Duration (minutes)",
value=15
)
workout_days = gr.CheckboxGroup(
choices=["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"],
label="Preferred Workout Days"
)
output_language = gr.Radio(
choices=["English", "Spanish", "French", "German", "Italian", "Portuguese", "Russian", "Arabic", "Chinese", "Japanese", "Korean", "Vietnamese", "Other"],
label="Output Language",
value="English"
)
custom_language = gr.Textbox(
label="Specify Language",
placeholder="Enter your preferred language...",
visible=False
)
activity_level = gr.Radio(
choices=["Sedentary", "Lightly active", "Moderately active", "Highly active"],
label="Current Activity Level"
)
health_conditions = gr.Textbox(
label="Health Conditions or Injuries",
placeholder="List any health conditions, injuries, or limitations...",
lines=3
)
dietary_preferences = gr.Textbox(
label="Dietary Preferences (Optional)",
placeholder="List any dietary preferences or restrictions...",
lines=3
)
submit_btn = gr.Button("Generate Fitness Plan", variant="primary")
output = gr.Textbox(label="Generated Fitness Plan", lines=10)
# Add event handler for language selection
output_language.change(
fn=self.show_custom_language_input,
inputs=[output_language],
outputs=[custom_language]
)
submit_btn.click(
fn=self.create_fitness_plan,
inputs=[
age, weight, height, gender,
primary_goal, target_timeframe,
workout_preferences, workout_duration,
workout_days, activity_level, output_language, custom_language,
health_conditions, dietary_preferences
],
outputs=output
)
with gr.Tab("Update Fitness Plan"):
gr.Markdown("Coming soon: Update your existing fitness plan")
return demo
def launch(self, share=None):
if port := os.getenv("PORT1"):
self.demo.launch(share=True, server_port=int(port), server_name="0.0.0.0")
else:
self.demo.launch(share=self.share)
if __name__ == "__main__":
fitness_profile = FitnessProfileGUI()
fitness_profile.launch()