import os
import gradio as gr
import clueai
import torch
from transformers import T5Tokenizer, T5ForConditionalGeneration
base_info = ""
def clear_session():
return '', None
def ChatYuan(api_key, text_prompt, top_p):
cl = clueai.Client(api_key, check_api_key=True)
# generate a prediction for a prompt
# 需要返回得分的话,指定return_likelihoods="GENERATION"
prediction = cl.generate(model_name='ChatYuan-7B', prompt=text_prompt)
# print the predicted text
#print('prediction: {}'.format(prediction.generations[0].text))
response = prediction.generations[0].text
if response == '':
response = "很抱歉,我无法回答这个问题"
return response
def chatyuan_bot_api(api_key, input, history, top_p, num):
if not api_key:
return "请填写api key再尝试输入", [], []
history = history or []
if len(history) > num:
history = history[-num:]
#print(f"history{history}")
history_context = [f"用户:{input_text}\n小元:{answer_text}" for input_text, answer_text in history]
context = "\n".join(history_context)
#print(f"context:{context}")
while len(context) > 768:
history_context = history_context[1:]
context = "\n".join(history_context)
input_text = context + "\n用户:" + input + "\n小元:"
input_text = input_text.strip()
output_text = ChatYuan(api_key, input_text, top_p)
print("api".center(20, "="))
print(f"api_key:{api_key}\n{input_text}\n{output_text}")
history.append((input, output_text))
return '', history, history
block = gr.Blocks()
with block as demo_1:
gr.Markdown("""
元语智能——ChatYuan
回答来自ChatYuan, 以上是模型生成的结果, 请谨慎辨别和参考, 不代表任何人观点 | Answer generated by ChatYuan model
注意:gradio对markdown代码格式展示有限
在使用此功能前,你需要有个API key. API key 可以通过这个平台获取
""")
with gr.Row():
with gr.Column(scale=3):
chatbot = gr.Chatbot(label='ChatYuan').style(height=400)
with gr.Column(scale=1):
api_key = gr.inputs.Textbox(label="请输入你的api-key(必填)",
default="",
type='password')
num = gr.Slider(minimum=4,
maximum=10,
label="最大的对话轮数",
value=5,
step=1)
top_p = gr.Slider(minimum=0,
maximum=1,
label="top_p",
value=0.7,
step=0.1)
clear_history = gr.Button("👋 清除历史对话 | Clear History")
send = gr.Button("🚀 发送 | Send")
message = gr.Textbox()
state = gr.State()
message.submit(chatyuan_bot_api,
inputs=[api_key, message, state, top_p, num],
outputs=[message, chatbot, state])
send.click(chatyuan_bot_api,
inputs=[api_key, message, state, top_p, num],
outputs=[message, chatbot, state])
clear_history.click(fn=clear_session,
inputs=[],
outputs=[chatbot, state],
queue=False)
block = gr.Blocks()
with block as introduction:
gr.Markdown("""元语智能——ChatYuan
😉ChatYuan: 元语功能型对话大模型 | General Model for Dialogue with ChatYuan
👏ChatYuan-7B是一个支持中英双语的功能型对话语言大模型。
ChatYuan-7B is an open-source large language model for dialogue, supports both Chinese and English languages, and in ChatGPT style.
ChatYuan-7B是ChatYuan系列中以轻量化实现高质量效果的模型之一。
< br>
""")
gui = gr.TabbedInterface(
interface_list=[introduction, demo_1],
tab_names=["相关介绍 | Introduction", "API调用"])
gui.launch(quiet=True, show_api=False, share=False)