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()