File size: 6,315 Bytes
b4251f4
 
 
 
 
80f4b08
 
 
0121f83
 
 
 
 
 
 
 
 
 
80f4b08
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b4251f4
 
 
0121f83
 
 
 
 
 
 
 
 
 
 
b4251f4
 
0121f83
b4251f4
 
 
 
 
 
 
0121f83
 
 
 
 
b4251f4
 
 
 
 
 
 
 
 
 
 
 
0121f83
80f4b08
 
 
 
 
 
 
b4251f4
80f4b08
 
 
b4251f4
 
 
 
8697be1
 
 
77eed2b
b4251f4
8697be1
 
 
77eed2b
8697be1
 
 
 
77eed2b
 
80f4b08
77eed2b
80f4b08
77eed2b
 
 
 
 
 
b4251f4
0121f83
b4251f4
6887924
 
 
b4251f4
 
 
 
 
 
 
 
6887924
b4251f4
 
 
0121f83
b4251f4
 
 
0121f83
b4251f4
 
 
0121f83
b4251f4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80f4b08
 
b4251f4
 
 
8697be1
 
 
80f4b08
77eed2b
b4251f4
 
0121f83
b4251f4
0121f83
 
80f4b08
0121f83
b4251f4
 
 
 
 
 
0121f83
b4251f4
0121f83
b4251f4
 
 
 
 
 
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
200
201
202
203
204
205
## chatGPT with Gradio 起手式
## 在你的資料夾新增 .env 檔案,並在裡面寫入 API_KEY=你的API金鑰
import os
import openai
import gradio as gr
from zhdate import ZhDate
from datetime import datetime


from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv()) # read local .env file
openai.api_key = os.environ['OPENAI_API_KEY']
print(openai.api_key)
if openai.api_key:
   DESKTOP_KEY = openai.api_key 
print(DESKTOP_KEY)


# 定義地支對應的時間區間
z_mapping = {
        "1": "子",
        "2": "丑",
        "3": "寅",
        "4": "卯",
        "5": "辰",
        "6": "巳",
        "7": "午",
        "8": "未",
        "9": "申",
        "10": "酉",
        "11": "戌",
        "12": "亥",
        "0": "夜子"
    } 

## AI 建議
def get_advice(bmi,temp, API_KEY, model="gpt-3.5-turbo"):
    if API_KEY:
        openai.api_key = API_KEY
    else:
        openai.api_key = DESKTOP_KEY
    print(openai.api_key)
    bmi = '' #未來再說
    gw_main_star = '像一個獨裁霸道的君王,無法聽進別人的意見'
    gw_main_star = '像一個足智多謀的軍師,ㄧ有時候會考慮太多而失去前進的勇氣'

    messages = [{"role": "system", "content": "你是一個心理權威,你會根據用戶的個性,提供至少3個,不超過5個建議。"},
                {"role": "user", "content": f'我的個性是 {gw_main_star}. 針對這樣的個性,妳可否給我一些待人處事的建議?'},]
    response = openai.chat.completions.create(
        model=model,
        max_tokens=1000,
        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"):
    if API_KEY:
        openai.api_key = API_KEY
    else:
        openai.api_key = DESKTOP_KEY
    print(openai.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 GWAI(year, month, day, btime) -> datetime:
    dt_date1 = datetime(int(year), int(month), int(day))
    date_lunar = ZhDate.from_datetime(dt_date1)
    bstr = str(date_lunar)
    
    hour = int(btime.split(":")[0])
    if hour >= 23:
        z = 0
    else:
        z = int(hour / 2) + 1
    result=z_mapping[str(z)]
    return bstr.replace('农历','農曆') + " " + result + "時"



# 建立 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...",)

btime = gr.Textbox(
    label="生時",
    info="輸入你的出生時間 HH:MM (幾點及約略幾分即可,請用24小時制)",
    placeholder="Input your birth time here...",)

sex = gr.Textbox(
    label="性別",
    info="輸入你是男生或女生",
    placeholder="Input you are male or female here...",)

output_gwai = gr.Textbox(
    value="",
    label="你的農曆生日及出生時辰",
    info="這是從西元換算出的農曆生日及出生時辰",
    placeholder="Date & Time")

advice = gr.Textbox(
    label="AI Advice",
    info="請選擇以下按鈕讓AI 根據你的BMI值給予的建議",
    placeholder="Ouput Text here...",
    lines=5,)

btn = gr.Button(
    value="計算農曆生日及八字時辰",
    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="輸入你的 API 金鑰",
    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("""
    # AI 紫微
    起手式 - 轉換西元生日到農曆出生時辰
    """)
    with gr.Column():
        with gr.Row():
            year.render()  # 顯示年
            month.render() # 顯示月
            day.render() # 顯示日
            btime.render() # 顯示時
            sex.render() # 顯示性別
        
        with gr.Row():
            output_gwai.render() # 顯示農曆生日欄

        btn.render() # 顯示農曆生日值結果
        btn.click(fn=GWAI, 
                     inputs=[year, month, day, btime], 
                     outputs=[output_gwai])

        advice.render() # 顯示AI建議結果的文字框
        
        with gr.Row(): 
            key_box.render() # 顯示API金鑰輸入框
            btn_advice.render() # 顯示AI建議按鈕
            btn_advice.click(fn=get_advice, inputs=[output_gwai,temperature,key_box], outputs=advice)
            btn_gym.render() # 顯示AI健身計畫按鈕
            btn_gym.click(fn=get_gym, inputs=[output_gwai,slider,temperature, key_box], outputs=advice)
    
        with gr.Accordion("settings", open=True):
            slider.render()
            temperature.render()

demo.launch()