therayz1 commited on
Commit
04cb977
1 Parent(s): 0c849f0

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +198 -0
  2. requirements.txt +3 -0
app.py ADDED
@@ -0,0 +1,198 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import openai
3
+ import pandas as pd
4
+ from datetime import datetime
5
+
6
+ # API yapılandırması
7
+ openai.api_base = "https://integrate.api.nvidia.com/v1"
8
+ openai.api_key = "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"
9
+
10
+ # Egzersiz veritabanı
11
+ exercise_db = {
12
+ "Kardiyovasküler": ["Koşu", "Yürüyüş", "Bisiklet", "Yüzme", "İp atlama"],
13
+ "Güç Antrenmanı": ["Şınav", "Mekik", "Squat", "Deadlift", "Bench Press"],
14
+ "Esneklik": ["Yoga", "Pilates", "Germe Egzersizleri"],
15
+ "HIIT": ["Burpees", "Mountain Climbers", "Jump Squats", "High Knees"]
16
+ }
17
+
18
+ class FitnessPlan:
19
+ def __init__(self):
20
+ self.current_plan = None
21
+ self.chat_history = []
22
+
23
+ def store_plan(self, plan):
24
+ self.current_plan = plan
25
+
26
+ fitness_plan = FitnessPlan()
27
+
28
+ def get_ai_recommendation(user_info):
29
+ """AI'dan kişiselleştirilmiş fitness tavsiyesi al"""
30
+ prompt = f"""
31
+ Aşağıdaki bilgilere sahip kullanıcı için detaylı bir fitness planı oluştur:
32
+
33
+ Yaş: {user_info['age']}
34
+ Kilo: {user_info['weight']} kg
35
+ Boy: {user_info['height']} cm
36
+ Hedef: {user_info['goal']}
37
+ Fitness Seviyesi: {user_info['fitness_level']}
38
+ Sağlık Durumu: {user_info['health_conditions']}
39
+
40
+ Lütfen şunları içeren bir plan oluştur:
41
+ 1. Haftalık egzersiz programı
42
+ 2. Beslenme önerileri
43
+ 3. Hedeflerine ulaşması için özel tavsiyeler
44
+ 4. İlerleme takibi için öneriler
45
+ """
46
+
47
+ try:
48
+ response = openai.ChatCompletion.create(
49
+ model="nvidia/llama-3.1-nemotron-70b-instruct",
50
+ messages=[{"role": "user", "content": prompt}],
51
+ temperature=0.7,
52
+ max_tokens=1024
53
+ )
54
+ return response.choices[0].message['content']
55
+ except Exception as e:
56
+ return f"AI tavsiyesi alınırken bir hata oluştu: {str(e)}"
57
+
58
+ def calculate_bmi(weight, height):
59
+ """BMI hesaplama"""
60
+ height_m = height / 100
61
+ bmi = weight / (height_m ** 2)
62
+
63
+ if bmi < 18.5:
64
+ category = "Zayıf"
65
+ elif 18.5 <= bmi < 25:
66
+ category = "Normal"
67
+ elif 25 <= bmi < 30:
68
+ category = "Fazla Kilolu"
69
+ else:
70
+ category = "Obez"
71
+
72
+ return f"BMI: {bmi:.1f} - Kategori: {category}"
73
+
74
+ def create_workout_plan(name, age, weight, height, goal, fitness_level, health_conditions):
75
+ """Ana fonksiyon - fitness planı oluştur"""
76
+ user_info = {
77
+ "name": name,
78
+ "age": age,
79
+ "weight": weight,
80
+ "height": height,
81
+ "goal": goal,
82
+ "fitness_level": fitness_level,
83
+ "health_conditions": health_conditions
84
+ }
85
+
86
+ bmi_result = calculate_bmi(weight, height)
87
+ ai_recommendation = get_ai_recommendation(user_info)
88
+
89
+ response = f"""
90
+ ### Kişisel Fitness Planı - {name}
91
+
92
+ **Fiziksel Değerlendirme**
93
+ {bmi_result}
94
+
95
+ **AI Tarafından Oluşturulan Kişisel Program**
96
+ {ai_recommendation}
97
+
98
+ **Önerilen Egzersiz Kategorileri**
99
+ """
100
+
101
+ for category, exercises in exercise_db.items():
102
+ response += f"\n{category}:\n"
103
+ response += "\n".join([f"- {exercise}" for exercise in exercises])
104
+ response += "\n"
105
+
106
+ # Planı sakla
107
+ fitness_plan.store_plan({"user_info": user_info, "plan": response})
108
+
109
+ return response
110
+
111
+ def chat_with_ai(message, history):
112
+ """AI ile sohbet et"""
113
+ if fitness_plan.current_plan is None:
114
+ return history + [[message, "Lütfen önce bir fitness planı oluşturun."]]
115
+
116
+ current_plan = fitness_plan.current_plan["plan"]
117
+
118
+ prompt = f"""
119
+ Mevcut fitness planı:
120
+ {current_plan}
121
+
122
+ Kullanıcı sorusu: {message}
123
+
124
+ Lütfen kullanıcının sorusunu yukarıdaki fitness planı bağlamında yanıtla.
125
+ """
126
+
127
+ try:
128
+ response = openai.ChatCompletion.create(
129
+ model="nvidia/llama-3.1-nemotron-70b-instruct",
130
+ messages=[{"role": "user", "content": prompt}],
131
+ temperature=0.7,
132
+ max_tokens=1024
133
+ )
134
+ ai_response = response.choices[0].message['content']
135
+ except Exception as e:
136
+ ai_response = f"Yanıt alınırken bir hata oluştu: {str(e)}"
137
+
138
+ return history + [[message, ai_response]]
139
+
140
+ # Gradio arayüzü
141
+ with gr.Blocks(title="AI Fitness Asistanı", theme=gr.themes.Soft()) as demo:
142
+ gr.Markdown("""
143
+ # 🏋️‍♂️ AI Destekli Fitness Asistanı---Deployed by Eray Coşkun
144
+ Kişiselleştirilmiş fitness planınızı oluşturun ve AI ile planınız hakkında sohbet edin!
145
+ """)
146
+
147
+ with gr.Tab("Plan Oluştur"):
148
+ with gr.Row():
149
+ with gr.Column():
150
+ name_input = gr.Textbox(label="Adınız")
151
+ age_input = gr.Number(label="Yaşınız", minimum=15, maximum=100)
152
+ weight_input = gr.Number(label="Kilonuz (kg)", minimum=30, maximum=200)
153
+ height_input = gr.Number(label="Boyunuz (cm)", minimum=120, maximum=220)
154
+
155
+ with gr.Column():
156
+ goal_input = gr.Dropdown(
157
+ label="Fitness Hedefiniz",
158
+ choices=["Kilo Vermek", "Kas Kazanmak", "Genel Sağlık", "Güç Artırmak"]
159
+ )
160
+ fitness_level_input = gr.Radio(
161
+ label="Fitness Seviyeniz",
162
+ choices=["Başlangıç", "Orta", "İleri"]
163
+ )
164
+ health_input = gr.Textbox(
165
+ label="Sağlık Durumunuz (varsa)",
166
+ placeholder="Örn: Diyabet, Tansiyon, vs. yoksa 'yok' yazın"
167
+ )
168
+
169
+ submit_btn = gr.Button("Plan Oluştur", variant="primary")
170
+ output = gr.Markdown()
171
+
172
+ with gr.Tab("AI ile Sohbet"):
173
+ gr.Markdown("""
174
+ ### 💬 Planınız Hakkında Sohbet Edin
175
+ Oluşturulan plan hakkında sorularınızı sorun ve AI'dan kişiselleştirilmiş yanıtlar alın.
176
+ """)
177
+ chatbot = gr.Chatbot(height=400)
178
+ msg = gr.Textbox(label="Planınız hakkında soru sorun",
179
+ placeholder="Örn: Bu plan ile hedefime ne kadar sürede ulaşabilirim?")
180
+ with gr.Row():
181
+ clear = gr.Button("Sohbeti Temizle")
182
+ submit_msg = gr.Button("Gönder", variant="primary")
183
+
184
+ # Event handlers
185
+ submit_btn.click(
186
+ create_workout_plan,
187
+ inputs=[name_input, age_input, weight_input, height_input,
188
+ goal_input, fitness_level_input, health_input],
189
+ outputs=output
190
+ )
191
+
192
+ msg.submit(chat_with_ai, [msg, chatbot], chatbot)
193
+ submit_msg.click(chat_with_ai, [msg, chatbot], chatbot)
194
+ clear.click(lambda: None, None, chatbot, queue=False)
195
+
196
+ # Uygulamayı başlat
197
+ if __name__ == "__main__":
198
+ demo.launch()
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ gradio==3.41.2
2
+ openai==0.27.8
3
+ pandas==1.5.3