damelia commited on
Commit
4e433ad
·
verified ·
1 Parent(s): c3d57a3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +34 -34
app.py CHANGED
@@ -9,20 +9,20 @@ client = Client()
9
 
10
  # https://repository.unsri.ac.id/6666/1/RAMA_57201_09031281419056_0013096707_01_front_ref.pdf
11
  # https://p2ptm.kemkes.go.id/infographicp2ptm/obesitas/tabel-batas-ambang-indeks-massa-tubuh-imt
12
- # Fungsi untuk menghitung IMT
13
- def calculate_imt(weight, height):
14
- # Menghitung IMT
15
- imt = weight / ((height / 100) ** 2) # tinggi di ubah dari cm ke m
16
-
17
- # Menentukan kategori IMT
18
- if imt < 18.5: # < 17 - 18.4
19
- kategori_imt = "Kurus"
20
- elif 18.5 <= imt <= 25.0: # 18.5 - 25.0
21
- kategori_imt = "Normal"
22
  else: # 25.1 - > 27
23
- kategori_imt = "Gemuk"
24
 
25
- return imt, kategori_imt
26
 
27
 
28
 
@@ -59,18 +59,18 @@ def generate_response(nama, usia, tujuan_utama, motivasi_utama, gender, berat, t
59
  return "-", "-", "Mohon isi semua kolom dulu yaa"
60
 
61
 
62
- # Hitung IMT
63
- imt, kategori = calculate_imt(berat, tinggi)
64
- hasil_imt = f"{imt:.2f}"
65
- # hasil_imt = f"IMT: {imt:.2f}, Kategori: {kategori}"
66
 
67
- # Berfungsi untuk menampilkan gambar sesuai kategori IMT
68
  if kategori == "Kurus":
69
- image_imt = "skinny.png"
70
  elif kategori == "Normal":
71
- image_imt = "normal.png"
72
  else:
73
- image_imt = "fat.png"
74
 
75
 
76
  # Hitung BMR
@@ -89,12 +89,12 @@ def generate_response(nama, usia, tujuan_utama, motivasi_utama, gender, berat, t
89
  Berikan saran Anda dengan semangat yang tinggi, ceria, penuh energi, hangat, bahasa gaul, dan profesional.
90
 
91
  Rekomendasikan jendela makan yang ideal bagi klien, sertakan 3 judul menu sarapan dan makan malam sederhana beserta kandungan kalorinya. (Tidak perlu menuliskan bahan-bahan).
92
- Sesuaikan menu makanan dengan Indeks Massa Tubuh (IMT), Basal Metabolic Rate (BMR), dan total kebutuhan kalori harian klien.
93
- Cari dan sertakan tautan video YouTube resep yang mudah diikuti dan relevan untuk setiap menu yang Anda rekomendasikan.
94
  Format tautan video seperti ini: https://www.youtube.com/results?search_query={isi+dengan+judul+video+yang+akan+dicari}&sp=CAM%253D
95
 
96
  Jelaskan program latihan harian dan jadwal yang komprehensif.
97
- Cari dan sertakan tautan video YouTube atau panduan latihan yang sesuai dan relevan untuk membantu klien melakukan latihan dengan benar.
98
  Format tautan video seperti ini: https://www.youtube.com/results?search_query={isi+dengan+judul+video+yang+akan+dicari}&sp=CAM%253D
99
 
100
  Berikan tips atau pantangan yang relevan untuk membantu klien mencapai hasil yang mereka impikan.
@@ -110,7 +110,7 @@ def generate_response(nama, usia, tujuan_utama, motivasi_utama, gender, berat, t
110
  f"- Berat Badan Saat Ini (kg): {berat}\n"
111
  f"- Tinggi Badan Saat Ini (cm): {tinggi}\n"
112
  f"- Kondisi Kesehatan atau Cedera yang Perlu Diperhatikan: {kondisi_kesehatan}\n"
113
- f"- Indeks Massa Tubuh (IMT): {imt:.2f}, Kategori: {kategori}\n"
114
  f"- BMR: {bmr:.2f} kkal, Kebutuhan Kalori Harian: {kalori_harian:.2f} kkal\n"
115
  f"- Pola Makan Saat Ini: {pola_makan}\n"
116
  f"- Alergi Makanan: {alergi}\n"
@@ -123,15 +123,15 @@ def generate_response(nama, usia, tujuan_utama, motivasi_utama, gender, berat, t
123
  f"- Tingkat Stres Saat Ini: {tingkat_stres}\n"
124
  f"- Kualitas Tidur Sehari-hari: {kualitas_tidur}\n\n"
125
  )
126
-
127
 
128
  # Menghasilkan rekomendasi dengan GPT4 berdasarkan prompt
129
  response = client.chat.completions.create(model="gpt-4o-mini", messages=[{"role": "user", "content": prompt}])
130
  rekomendasi = response.choices[0].message.content
131
 
132
 
133
- # Cetak: hasil IMT, gambar, BMR, dan rekomendasi
134
- return hasil_imt, image_imt, hasil_bmr, rekomendasi
135
 
136
 
137
 
@@ -167,28 +167,28 @@ with gr.Blocks(theme=gr.themes.Ocean()) as interface:
167
  # Daftar input yang diisi
168
  inputs = [nama, usia, tujuan_utama, motivasi_utama, gender, berat, tinggi, kondisi_kesehatan, pola_makan, alergi, tidak_disukai, tipe_makanan, frekuensi_olahraga, jenis_latihan, batas_waktu, waktu_latihan_mingguan, tingkat_stres, kualitas_tidur]
169
 
170
- # Hasil IMT, BMR, dan rekomendasi
171
  with gr.Row():
172
  with gr.Row():
173
- output_imt = gr.Label(label="Indeks Massa Tubuh (IMT)")
174
- output_imt2 = gr.Image(label="Kategori", height = 150)
175
  output_bmr = gr.Label(label="Basal Metabolic Rate (BMR)")
176
 
177
- with gr.Row():
178
- with gr.Column():
179
  gr.Markdown("### Rekomendasi")
180
  output_rekomendasi = gr.Markdown(container = True, show_copy_button = True, min_height = 100, max_height = 450)
181
 
182
 
183
  # Tombol submit dan reset
184
  with gr.Row():
185
- reset = gr.ClearButton(components=[*inputs, output_imt, output_imt2, output_bmr, output_rekomendasi], value="Clear")
186
  submit_btn = gr.Button("Submit", variant="primary")
187
  # Tombol submit untuk menghasilkan rekomendasi
188
  submit_btn.click(
189
  fn=generate_response,
190
  inputs=inputs,
191
- outputs=[output_imt, output_imt2, output_bmr, output_rekomendasi]
192
  )
193
 
194
 
 
9
 
10
  # https://repository.unsri.ac.id/6666/1/RAMA_57201_09031281419056_0013096707_01_front_ref.pdf
11
  # https://p2ptm.kemkes.go.id/infographicp2ptm/obesitas/tabel-batas-ambang-indeks-massa-tubuh-imt
12
+ # Fungsi untuk menghitung BMI
13
+ def calculate_bmi(weight, height):
14
+ # Menghitung BMI
15
+ bmi = weight / ((height / 100) ** 2) # tinggi di ubah dari cm ke m
16
+
17
+ # Menentukan kategori BMI
18
+ if bmi < 18.5: # < 17 - 18.4
19
+ kategori_bmi = "Kurus"
20
+ elif 18.5 <= bmi <= 25.0: # 18.5 - 25.0
21
+ kategori_bmi = "Normal"
22
  else: # 25.1 - > 27
23
+ kategori_bmi = "Gemuk"
24
 
25
+ return bmi, kategori_bmi
26
 
27
 
28
 
 
59
  return "-", "-", "Mohon isi semua kolom dulu yaa"
60
 
61
 
62
+ # Hitung BMI
63
+ bmi, kategori = calculate_bmi(berat, tinggi)
64
+ hasil_bmi = f"{bmi:.2f}"
65
+ # hasil_bmi = f"BMI: {bmi:.2f}, Kategori: {kategori}"
66
 
67
+ # Berfungsi untuk menampilkan gambar sesuai kategori BMI
68
  if kategori == "Kurus":
69
+ image_bmi = "skinny.png"
70
  elif kategori == "Normal":
71
+ image_bmi = "normal.png"
72
  else:
73
+ image_bmi = "fat.png"
74
 
75
 
76
  # Hitung BMR
 
89
  Berikan saran Anda dengan semangat yang tinggi, ceria, penuh energi, hangat, bahasa gaul, dan profesional.
90
 
91
  Rekomendasikan jendela makan yang ideal bagi klien, sertakan 3 judul menu sarapan dan makan malam sederhana beserta kandungan kalorinya. (Tidak perlu menuliskan bahan-bahan).
92
+ Sesuaikan menu makanan dengan Body Mass Index (BMI), Basal Metabolic Rate (BMR), dan total kebutuhan kalori harian klien.
93
+ Cari dan sertakan tautan video YouTube resep yang mudah diikuti dan relevan untuk setiap menu yang Anda rekomendasikan.
94
  Format tautan video seperti ini: https://www.youtube.com/results?search_query={isi+dengan+judul+video+yang+akan+dicari}&sp=CAM%253D
95
 
96
  Jelaskan program latihan harian dan jadwal yang komprehensif.
97
+ Cari dan sertakan tautan video YouTube atau panduan latihan yang sesuai dan relevan untuk membantu klien melakukan latihan dengan benar.
98
  Format tautan video seperti ini: https://www.youtube.com/results?search_query={isi+dengan+judul+video+yang+akan+dicari}&sp=CAM%253D
99
 
100
  Berikan tips atau pantangan yang relevan untuk membantu klien mencapai hasil yang mereka impikan.
 
110
  f"- Berat Badan Saat Ini (kg): {berat}\n"
111
  f"- Tinggi Badan Saat Ini (cm): {tinggi}\n"
112
  f"- Kondisi Kesehatan atau Cedera yang Perlu Diperhatikan: {kondisi_kesehatan}\n"
113
+ f"- Body Mass Index (BMI): {bmi:.2f}, Kategori: {kategori}\n"
114
  f"- BMR: {bmr:.2f} kkal, Kebutuhan Kalori Harian: {kalori_harian:.2f} kkal\n"
115
  f"- Pola Makan Saat Ini: {pola_makan}\n"
116
  f"- Alergi Makanan: {alergi}\n"
 
123
  f"- Tingkat Stres Saat Ini: {tingkat_stres}\n"
124
  f"- Kualitas Tidur Sehari-hari: {kualitas_tidur}\n\n"
125
  )
126
+
127
 
128
  # Menghasilkan rekomendasi dengan GPT4 berdasarkan prompt
129
  response = client.chat.completions.create(model="gpt-4o-mini", messages=[{"role": "user", "content": prompt}])
130
  rekomendasi = response.choices[0].message.content
131
 
132
 
133
+ # Cetak: hasil BMI, gambar, BMR, dan rekomendasi
134
+ return hasil_bmi, image_bmi, hasil_bmr, rekomendasi
135
 
136
 
137
 
 
167
  # Daftar input yang diisi
168
  inputs = [nama, usia, tujuan_utama, motivasi_utama, gender, berat, tinggi, kondisi_kesehatan, pola_makan, alergi, tidak_disukai, tipe_makanan, frekuensi_olahraga, jenis_latihan, batas_waktu, waktu_latihan_mingguan, tingkat_stres, kualitas_tidur]
169
 
170
+ # Hasil BMI, BMR, dan rekomendasi
171
  with gr.Row():
172
  with gr.Row():
173
+ output_bmi = gr.Label(label="Body Mass Index (BMI)")
174
+ output_bmi2 = gr.Image(label="Kategori", height = 150)
175
  output_bmr = gr.Label(label="Basal Metabolic Rate (BMR)")
176
 
177
+ with gr.Row():
178
+ with gr.Column():
179
  gr.Markdown("### Rekomendasi")
180
  output_rekomendasi = gr.Markdown(container = True, show_copy_button = True, min_height = 100, max_height = 450)
181
 
182
 
183
  # Tombol submit dan reset
184
  with gr.Row():
185
+ reset = gr.ClearButton(components=[*inputs, output_bmi, output_bmi2, output_bmr, output_rekomendasi], value="Clear")
186
  submit_btn = gr.Button("Submit", variant="primary")
187
  # Tombol submit untuk menghasilkan rekomendasi
188
  submit_btn.click(
189
  fn=generate_response,
190
  inputs=inputs,
191
+ outputs=[output_bmi, output_bmi2, output_bmr, output_rekomendasi]
192
  )
193
 
194