File size: 3,689 Bytes
1413b56
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77c8d5c
20dc247
c81e1a9
20dc247
 
1413b56
c81e1a9
 
1413b56
 
c81e1a9
1413b56
 
 
 
 
 
 
 
 
 
 
c81e1a9
 
1413b56
 
 
 
c81e1a9
3dc387b
 
1413b56
c81e1a9
1413b56
 
 
 
 
 
 
 
c81e1a9
1413b56
 
 
 
 
 
 
 
 
 
c81e1a9
1413b56
 
 
 
 
 
 
 
 
 
 
 
 
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
import os
import base64
import gradio as gr
from gradio_client import Client

MODEL_NAME = "QWEN"
client_chat = os.environ.get("CHAT_URL")
client_vl = os.environ.get("VL_URL")

def read(filename):
    with open(filename) as f:
        data = f.read()
    return data
    
SYS_PROMPT = read('system_prompt.txt')


DESCRIPTION = '''
<div>
<h1 style="text-align: center;">家庭医生demo</h1>
<p>🩺一个帮助您分析症状和检验报告的家庭医生(AI诊疗助手)。</p>
<p>🔎 选择您需要咨询的科室医生,在输入框中输入症状描述或者体检信息等;您也可以在图片框中上传检测报告图。</p>
<p>🦕 请注意生成信息可能不准确,且不具备任何实际参考价值,如有需要请联系专业医生。</p>
</div>
'''


css = """
h1 {
    text-align: center;
    display: block;
}
footer {
    display:none !important
}
"""


LICENSE = '采用 ' + MODEL_NAME + ' 模型'




def process_text(text_input, unit):
    client = Client(client_chat)
    client.predict(
		system=f"You are a experienced {unit} doctor AI assistant." + SYS_PROMPT,
		api_name="/modify_system_session"
    )
    response = client.predict(
        query=str(text_input),
        history=None,
        api_name="/model_chat"
    )
    print(response)
 

def encode_image_to_base64(image_input):
    buffered = io.BytesIO()
    image_input.save(buffered, format="JPEG")
    img_str = base64.b64encode(buffered.getvalue()).decode("utf-8")
    return img_str

def process_image(image_input, unit):
    if image_input is not None:
        print(image_input)
        #with open(image_input, "rb") as f:
        #   base64_image = base64.b64encode(f.read()).decode("utf-8")
        client = Client(client_vl)
        # base64_image = encode_image_to_base64(image_input)
        prompt = f" You are a experienced {unit} doctor AI assistant." + SYS_PROMPT + "Help me understand what is in this picture and analysis."
        response = client.predict(
            image_input, 
            prompt,
            fn_index=0
        )
        print(response)


def main(text_input="", image_input=None, unit=""):
    if text_input and image_input is None:
        return process_text(text_input,unit)
    elif image_input is not None:
        return process_image(image_input,unit)

with gr.Blocks(theme='soft', css=css, title="家庭医生AI助手") as iface:
    with gr.Accordion(""):
        gr.Markdown(DESCRIPTION)
        unit = gr.Dropdown(label="🩺科室", value='中医科', elem_id="units",
                            choices=["中医科", "内科", "外科", "妇产科",  "儿科", \
                                     "五官科", "男科", "皮肤性病科", "传染科", "精神心理科", \
                                        "整形美容科", "营养科", "生殖中心", "麻醉医学科", "医学影像科", \
                                            "骨科", "肿瘤科", "急诊科", "检验科"])
    with gr.Row():
        output_box = gr.Markdown(label="分析")  # Create an output textbox
    with gr.Row():
        image_input = gr.Image(type="str", label="上传图片")  # Create an image upload button
        text_input = gr.Textbox(label="输入")  # Create a text input box
    with gr.Row():
        submit_btn = gr.Button("🚀 确认")  # Create a submit button
        clear_btn = gr.ClearButton([output_box,image_input,text_input], value="🗑️ 清空") # Create a clear button

    # Set up the event listeners
    submit_btn.click(main, inputs=[text_input, image_input, unit], outputs=output_box)

    gr.Markdown(LICENSE)
    
#gr.close_all()

iface.queue().launch(show_api=False)  # Launch the Gradio interface