GWAI / app.py
Bargerya's picture
v3
77eed2b
raw
history blame
5.3 kB
## chatGPT with Gradio 起手式
## 在你的資料夾新增 .env 檔案,並在裡面寫入 API_KEY=你的API金鑰
import os
import openai
import gradio as gr
## AI 建議
def get_advice(bmi,temp, API_KEY, model="gpt-3.5-turbo"):
openai.api_key = API_KEY
messages = [{"role": "system", "content": "You can provide some dietary advice based on \
the user's BMI value. You can only give up to 3 suggestions"},
{"role": "user", "content": f'My BMI is {bmi}. What can I do to be healthier?'},]
response = openai.chat.completions.create(
model=model,
max_tokens=200,
messages=messages,
temperature=temp, # this is the degree of randomness of the model's output
)
return response.choices[0].message.content
## 健身計畫
def get_gym(bmi,slide, temp, API_KEY, model="gpt-3.5-turbo"):
openai.api_key = API_KEY
messages = [{"role": "system", "content": "You are a great fitness coach and \
you will give users great fitness plans."},
{"role": "user", "content": f'My BMI is {bmi}. I want a {slide}-point weight\
loss plan, from 1 to 10. The higher the number, the faster the weight loss.'},]
response = openai.chat.completions.create(
model=model,
max_tokens=200,
messages=messages,
temperature=temp, # this is the degree of randomness of the model's output
)
return response.choices[0].message.content
def BMI(year, month) -> int:
year = int(year) / 100
bmi = int(month) / (year * year)
if bmi < 18.5:
return str(bmi)[:5], "過輕"
elif bmi < 24:
return str(bmi)[:5], "正常"
elif bmi < 27:
return str(bmi)[:5], "過重"
elif bmi < 30:
return str(bmi)[:5], "輕度肥胖"
elif bmi < 35:
return str(bmi)[:5], "中度肥胖"
else:
return str(bmi)[:5], "重度肥胖"
# 建立 components
year = gr.Textbox(
label="生年",
info="輸入你的西元出生年份",
placeholder="Input your birth year here...")
month = gr.Textbox(
label="生月",
info="輸入你的出生月份",
placeholder="Input your birthday month here...",)
day = gr.Textbox(
label="生日",
info="輸入你的出生日子",
placeholder="Input your birthday day here...",)
time = gr.Textbox(
label="生時",
info="輸入你的出生時間",
placeholder="Input your birth time here...",)
sex = gr.Textbox(
label="性別",
info="輸入你是男生或女生",
placeholder="Input you are male or female here...",)
output_bmi = gr.Textbox(
value="",
label="BMI 值",
info="顯示BMI 數字",
placeholder="BMI")
output_state = gr.Textbox(
value="",
label="BMI 結果",
info="診斷",
placeholder="顯示診斷結果")
advice = gr.Textbox(
label="AI Advice",
info="請選擇以下按鈕讓AI 根據你的BMI值給予的建議",
placeholder="Ouput Text here...",
lines=5,)
btn = gr.Button(
value="計算BMI值",
variant="primary", scale=1)
btn_advice = gr.Button(
value="AI 建議",
variant="primary", scale=2)
btn_gym = gr.Button(
value="AI 健身計畫",
variant="primary", scale=1)
key_box = gr.Textbox(
label="Enter your API key",
info="You have to provide your own OPENAI_API_KEY for this app to function properly",
placeholder="Type OpenAI API KEY here...",
type="password")
slider = gr.Slider(
minimum=1,
maximum=10,
step=1,
label="減重速度",
value=5,
info="請選擇你的減重速度,數字越大,減重越快",
)
temperature = gr.Slider(
minimum=0,
maximum=1.0,
value=0.3,
step=0.05,
label="Temperature",
info=(
"Temperature controls the degree of randomness in token selection. Lower "
"temperatures are good for prompts that expect a true or correct response, "
"while higher temperatures can lead to more diverse or unexpected results. "
),
)
with gr.Blocks() as demo:
gr.Markdown("""
# BMI 計算器
簡易測量你的BMI值
""")
with gr.Column():
with gr.Row():
year.render() # 顯示年
month.render() # 顯示月
day.render() # 顯示日
time.render() # 顯示時
sex.render() # 顯示性別
with gr.Row():
output_bmi.render() # 顯示BMI值結果
output_state.render() # 顯示BMI診斷結果
btn.render() # 顯示計算BMI值按鈕
btn.click(fn=BMI,
inputs=[year, month],
outputs=[output_bmi,output_state])
advice.render() # 顯示AI建議結果的文字框
with gr.Row():
key_box.render() # 顯示API金鑰輸入框
btn_advice.render() # 顯示AI建議按鈕
btn_advice.click(fn=get_advice, inputs=[output_bmi,temperature,key_box], outputs=advice)
btn_gym.render() # 顯示AI健身計畫按鈕
btn_gym.click(fn=get_gym, inputs=[output_bmi,slider,temperature, key_box], outputs=advice)
with gr.Accordion("settings", open=True):
slider.render()
temperature.render()
demo.launch()