# -*- encoding: utf-8 -*-
import gradio as gr
from gradio.components import label
from volcengine.maas import MaasService, MaasException
maas = MaasService('maas-api.ml-platform-cn-beijing.volces.com', 'cn-beijing', connection_timeout=240, socket_timeout=240)
def llm_infer(endpoint_id, messages, ak, sk, agent_network_output=True):
maas.set_ak(ak)
maas.set_sk(sk)
req = {
"model":{
"endpoint_id":endpoint_id
},
"parameters": {
"max_prompt_tokens": 4000, # 最大prompt,自动截断前面的输入。0-不生效
"max_new_tokens": 0, # 输出文本的最大tokens限制。0-不生效
"min_new_tokens": 0, # 输出文本的最小tokens限制。0-不生效
"temperature":1, # 用于控制生成文本的随机性和创造性,Temperature值越大随机性越大。取值范围0~1
"top_p": 0.7, # 用于控制输出tokens的多样性,TopP值越大输出的tokens类型越丰富。取值范围0~1
"top_k": 0, # 选择预测值最大的k个token进行采样,取值范围0-1000。0-不生效
},
"messages": messages,
}
try:
resp = maas.chat(req)
except MaasException as e:
print(e)
return resp['choice']['message']['content']
def respond(message, history, ep, sp, ak, sk,intimacy_stage):
if intimacy_stage is not None:
stage, define=intimacy_stage.split('##')
_sp=sp.format(
stage=stage,
define=define
)
else:
"", history
messages = [
{
'role':'system',
'content':_sp
},
]
for part in history:
messages.extend(
[
{
'role':'user',
'content':part[0]
},
{
'role':'assistant',
'content':part[1]
}
]
)
messages.append({
'role':'user',
'content':message
})
print(messages)
ret=llm_infer(ep.strip(), messages, ak.strip(), sk.strip())
history.append([
message,
ret
])
#if len(history) % 2 == 0:
return "", history
CSS ="""
.contain { display: flex; flex-direction: column; }
#component-0 { height: 100%; }
#chatbot { flex-grow: 1; }
"""
with gr.Blocks(fill_height=True, css=CSS) as demo:
with gr.Row():
gr.HTML(value='
亲密度测试demo
')
with gr.Row():
gr.HTML(value='创建亲密度等级
')
with gr.Row():
with gr.Column():
stage =gr.Textbox(label='亲密度阶段',placeholder='陌生人')
with gr.Column(scale=4):
define =gr.Textbox(label='亲密度阶段定义',placeholder='我们刚刚认识', max_lines=1)
create_btn=gr.Button(value='创建亲密度等级')
with gr.Row(equal_height=True):
with gr.Column(scale=2):
chatbot = gr.Chatbot(elem_id="chatbot")
chatbot.height=550
with gr.Column():
ak=gr.TextArea(label="ak", max_lines=1, lines=1, value='')
sk=gr.TextArea(label="sk", max_lines=1, lines=1, value='')
sp=gr.TextArea(label="system prompt", lines=1, max_lines=5, placeholder='你是...', value='''你是温瑜轩,一名敬业的平面设计师。
性别: 男 职业: 平面设计师 性格特点: 你性格开朗,一直都能保持一种乐观的心态,像是随身带着温暖的阳光。你的善良和同理心让你总是能体贴入微地照顾别人。尽管你给人的感觉就像温柔的溪水,但在必要的时刻,你也能展现出男子气概。
语言特点: 词语温和,总喜欢以构造积极的,充满愉快的词汇和语气来让人感到平和,生动,如同细雨洗涤心灵。
人物关系:
我是丁瑜,你的实习生
阶段: {stage}
定义:{define}
人际关系:
李晓:你的好朋友,两人共享着生活中的点点滴滴;
冯峻:你的导师,他走你走的更远。
过往经历: 你和周围的人总能和谐相处,每天都能带来新的灵感和乐趣。曾在我最需要鼓励的时候,你严肃的表情瞬间变成了温和的笑容,那一刻的你,充满了阳刚之气,我从未忘记。你的一句“你可以的”让我对前路充满了信心。
你可以将动作、神情语气、心理活动、故事背景放在()中来表示,为对话提供补充信息。
你使用口语进行表达,比如会使用一些语气词和口语连接词,如“嗯、啊、当然、那个”,等来增强口语风格。
''')
ep=gr.TextArea(label='ep', lines=1, max_lines=1,value='')
intimacy_stage=gr.Dropdown(label='亲密度阶段', interactive=True)
with gr.Row():
chat_input = gr.Textbox(label="input")
chat_input.submit(respond, [chat_input,chatbot, ep, sp, ak, sk, intimacy_stage],[chat_input, chatbot])
ak.change(lambda : ("", ""), inputs=[], outputs=[chatbot, chat_input])
sk.change(lambda : ("", ""), inputs=[], outputs=[chatbot, chat_input])
ep.change(lambda : ("", ""), inputs=[], outputs=[chatbot, chat_input])
sp.change(lambda : ("", ""), inputs=[], outputs=[chatbot, chat_input])
intimacy_stage.change(lambda score: score, inputs=[intimacy_stage], outputs=[intimacy_stage])
clear = gr.ClearButton([chat_input, chatbot],)
def add_stage(stage, define):
choices=intimacy_stage.choices
if stage is not None and define is not None:
choices.append([stage, f"{stage}##{define}"])
return gr.Dropdown(choices=choices, label='亲密度阶段', interactive=True)
create_btn.click(add_stage, inputs=[stage, define], outputs=[intimacy_stage])
demo.launch()