Spaces:
Sleeping
Sleeping
File size: 6,583 Bytes
04cb977 |
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 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 |
import gradio as gr
import openai
import pandas as pd
from datetime import datetime
# API yapılandırması
openai.api_base = "https://integrate.api.nvidia.com/v1"
openai.api_key = "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"
# Egzersiz veritabanı
exercise_db = {
"Kardiyovasküler": ["Koşu", "Yürüyüş", "Bisiklet", "Yüzme", "İp atlama"],
"Güç Antrenmanı": ["Şınav", "Mekik", "Squat", "Deadlift", "Bench Press"],
"Esneklik": ["Yoga", "Pilates", "Germe Egzersizleri"],
"HIIT": ["Burpees", "Mountain Climbers", "Jump Squats", "High Knees"]
}
class FitnessPlan:
def __init__(self):
self.current_plan = None
self.chat_history = []
def store_plan(self, plan):
self.current_plan = plan
fitness_plan = FitnessPlan()
def get_ai_recommendation(user_info):
"""AI'dan kişiselleştirilmiş fitness tavsiyesi al"""
prompt = f"""
Aşağıdaki bilgilere sahip kullanıcı için detaylı bir fitness planı oluştur:
Yaş: {user_info['age']}
Kilo: {user_info['weight']} kg
Boy: {user_info['height']} cm
Hedef: {user_info['goal']}
Fitness Seviyesi: {user_info['fitness_level']}
Sağlık Durumu: {user_info['health_conditions']}
Lütfen şunları içeren bir plan oluştur:
1. Haftalık egzersiz programı
2. Beslenme önerileri
3. Hedeflerine ulaşması için özel tavsiyeler
4. İlerleme takibi için öneriler
"""
try:
response = openai.ChatCompletion.create(
model="nvidia/llama-3.1-nemotron-70b-instruct",
messages=[{"role": "user", "content": prompt}],
temperature=0.7,
max_tokens=1024
)
return response.choices[0].message['content']
except Exception as e:
return f"AI tavsiyesi alınırken bir hata oluştu: {str(e)}"
def calculate_bmi(weight, height):
"""BMI hesaplama"""
height_m = height / 100
bmi = weight / (height_m ** 2)
if bmi < 18.5:
category = "Zayıf"
elif 18.5 <= bmi < 25:
category = "Normal"
elif 25 <= bmi < 30:
category = "Fazla Kilolu"
else:
category = "Obez"
return f"BMI: {bmi:.1f} - Kategori: {category}"
def create_workout_plan(name, age, weight, height, goal, fitness_level, health_conditions):
"""Ana fonksiyon - fitness planı oluştur"""
user_info = {
"name": name,
"age": age,
"weight": weight,
"height": height,
"goal": goal,
"fitness_level": fitness_level,
"health_conditions": health_conditions
}
bmi_result = calculate_bmi(weight, height)
ai_recommendation = get_ai_recommendation(user_info)
response = f"""
### Kişisel Fitness Planı - {name}
**Fiziksel Değerlendirme**
{bmi_result}
**AI Tarafından Oluşturulan Kişisel Program**
{ai_recommendation}
**Önerilen Egzersiz Kategorileri**
"""
for category, exercises in exercise_db.items():
response += f"\n{category}:\n"
response += "\n".join([f"- {exercise}" for exercise in exercises])
response += "\n"
# Planı sakla
fitness_plan.store_plan({"user_info": user_info, "plan": response})
return response
def chat_with_ai(message, history):
"""AI ile sohbet et"""
if fitness_plan.current_plan is None:
return history + [[message, "Lütfen önce bir fitness planı oluşturun."]]
current_plan = fitness_plan.current_plan["plan"]
prompt = f"""
Mevcut fitness planı:
{current_plan}
Kullanıcı sorusu: {message}
Lütfen kullanıcının sorusunu yukarıdaki fitness planı bağlamında yanıtla.
"""
try:
response = openai.ChatCompletion.create(
model="nvidia/llama-3.1-nemotron-70b-instruct",
messages=[{"role": "user", "content": prompt}],
temperature=0.7,
max_tokens=1024
)
ai_response = response.choices[0].message['content']
except Exception as e:
ai_response = f"Yanıt alınırken bir hata oluştu: {str(e)}"
return history + [[message, ai_response]]
# Gradio arayüzü
with gr.Blocks(title="AI Fitness Asistanı", theme=gr.themes.Soft()) as demo:
gr.Markdown("""
# 🏋️♂️ AI Destekli Fitness Asistanı---Deployed by Eray Coşkun
Kişiselleştirilmiş fitness planınızı oluşturun ve AI ile planınız hakkında sohbet edin!
""")
with gr.Tab("Plan Oluştur"):
with gr.Row():
with gr.Column():
name_input = gr.Textbox(label="Adınız")
age_input = gr.Number(label="Yaşınız", minimum=15, maximum=100)
weight_input = gr.Number(label="Kilonuz (kg)", minimum=30, maximum=200)
height_input = gr.Number(label="Boyunuz (cm)", minimum=120, maximum=220)
with gr.Column():
goal_input = gr.Dropdown(
label="Fitness Hedefiniz",
choices=["Kilo Vermek", "Kas Kazanmak", "Genel Sağlık", "Güç Artırmak"]
)
fitness_level_input = gr.Radio(
label="Fitness Seviyeniz",
choices=["Başlangıç", "Orta", "İleri"]
)
health_input = gr.Textbox(
label="Sağlık Durumunuz (varsa)",
placeholder="Örn: Diyabet, Tansiyon, vs. yoksa 'yok' yazın"
)
submit_btn = gr.Button("Plan Oluştur", variant="primary")
output = gr.Markdown()
with gr.Tab("AI ile Sohbet"):
gr.Markdown("""
### 💬 Planınız Hakkında Sohbet Edin
Oluşturulan plan hakkında sorularınızı sorun ve AI'dan kişiselleştirilmiş yanıtlar alın.
""")
chatbot = gr.Chatbot(height=400)
msg = gr.Textbox(label="Planınız hakkında soru sorun",
placeholder="Örn: Bu plan ile hedefime ne kadar sürede ulaşabilirim?")
with gr.Row():
clear = gr.Button("Sohbeti Temizle")
submit_msg = gr.Button("Gönder", variant="primary")
# Event handlers
submit_btn.click(
create_workout_plan,
inputs=[name_input, age_input, weight_input, height_input,
goal_input, fitness_level_input, health_input],
outputs=output
)
msg.submit(chat_with_ai, [msg, chatbot], chatbot)
submit_msg.click(chat_with_ai, [msg, chatbot], chatbot)
clear.click(lambda: None, None, chatbot, queue=False)
# Uygulamayı başlat
if __name__ == "__main__":
demo.launch()
|