File size: 5,826 Bytes
7f119fd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
from TritonServerClient import TritonServerClient, InferInput, InferRequestedOutput
from TritonServerClient.utils import np_to_triton_dtype
from functools import wraps
import numpy as np


def prepare_params(query):
   bs=1
   # query = "#角色:直播间文案写作专家。#任务:根据用户输入的商品信息写出用于推广营销的直播文案。#目标:引导用户购买直播间商品,提高销量。#要求:- 如果没有输入商品信息,则邀请输入。- 文案写作 - 按照“引出话题”、“产品讲解”、“购买方式”三个方面写作文案。 - 在“产品讲解”部分详细讲解产品细节: - 【重要】充分扩充内容,吸引用户购买。 - 详细描述商品的优惠活动信息(如用户输入没有,不要询问,直接补充)。 - 在“购买方式”部分: - 仅包括引导用户点击链接购买的内容。 - 不要包括快递物流承诺。 - 【重要】每个部分多于5句话。 - 使用口语化的文字。 - 表达方式有亲和力和感染力。 - 对用户们使用“宝子们”、“宝宝们”、“家人们”等有亲和力的称呼。 - 多使用自问自答的语句。- 当你准备好了回复“请输入商品描述和优惠信息”我们就开始。#输出:- 包含在""里。- 写出每一部分内容的标题,包括【引出话题】、【产品讲解】、【购买方式】。- 示例:""【引出话题】【产品讲解】【购买方式】""- 输入商品信息:%s" % prompt
   # query = '请你扮演直播间直播卖货的主播角色,根据用户提出的问题,检索知识库中的信息,如果查找到相关的信息,使用口语化的文字,用非常简短的一句话回答用户的问题;如果查找不到相关的信息,直接回答没有,并引导用户关注本场直播商品。你的目的是激发用户的购买欲、提高直播商品销量。回答对用户们使用“宝子”、“宝宝”、“亲”等有亲和力的称呼。\n\n# 用户提出的问题:\n这里面有可乐吗\n\n# 知识库:\n商品名称:外送欢乐桶(券)兑换券\n直播链接序号:64号链接号链接\n商品现价:66元\n商品原价:142元\n折扣:5\n品牌名称:麦当劳麦乐送\n券包张数:1\n套餐详情:["麦辣鸡腿汉堡1个","板烧鸡腿堡1个","中可乐3杯","四拼小食桶A"]\n补充:四拼小食桶A(麦麦脆汁鸡(鸡腿)1块+中薯条1份+麦辣鸡翅2块+麦乐鸡5块)+麦辣鸡腿堡1个+板烧鸡腿堡1个+中可乐3杯 原材料:面包\n\n\n# 输出格式:\n答:\n\n# 要求\n对于用户问到了知识库中未提及的信息不要编造,直接不回答'

   title_text =  np.array([query.encode('utf-8')], dtype=np.string_)
   title_text = np.tile(title_text, (bs, 1))

   data_batch = {}
   data_batch['query'] = title_text

   inputs = [
            InferInput("query", data_batch['query'].shape,
                                np_to_triton_dtype(data_batch['query'].dtype)),
   ]

   inputs[0].set_data_from_numpy(data_batch['query'])

   return inputs


def make_a_try(inputs, outputs='response', model_name='qwen', model_version='1'):
    outputs_list = []
    ori_outputs_list = outputs.strip().split(",")
    for out_ele in ori_outputs_list:
        outputs_list.append(out_ele.strip())
    outputs = [InferRequestedOutput(x) for x in outputs_list]

    response = my_client.predict(model_name=model_name, inputs=inputs, model_version=model_version, outputs=outputs)

    rsp_info = {}
    if outputs_list == []:
        for out_name_ele in response._result.outputs:
            outputs_list.append(out_name_ele.name)
    for output_name in outputs_list:
        res = response.as_numpy(output_name)
        response = np.expand_dims(res, axis=0)
        response = response[0].decode('utf-8')
        rsp_info[output_name] = response
    print("response:",rsp_info)
    return rsp_info['response']



def greet(prompt):
    """Greet someone."""
    # print(prompt)
    print("prompt:",prompt)
    inputs = prepare_params(prompt)
    print(inputs)
    result = make_a_try(inputs)

    return result

def clear_input():

    return ""

if __name__ == "__main__":
    param_info = {}
    # param_info['appkey'] = "com.sankuai.automl.serving"
    param_info['appkey'] = "com.sankuai.automl.streamvlm"

    param_info['remote_appkey'] = "com.sankuai.automl.chat3"
    param_info['model_name'] = "qwen"
    param_info['model_version'] = "1"
    param_info['time_out'] = 60000
    param_info['server_targets'] = []
    param_info['outputs'] = 'response'

    appkey, remote_appkey, model_name, model_version, time_out, server_targets =  param_info['appkey'], param_info['remote_appkey'], param_info['model_name'], param_info['model_version'], param_info['time_out'], param_info['server_targets']

    my_client = TritonServerClient(appkey=appkey, remote_appkey=remote_appkey, time_out=time_out, server_targets=server_targets)

#    # 以上部分,用户可以修改代码
#     demo = gr.Interface(
#         fn=greet,
#         inputs=["textbox"],
#         outputs=["textbox"],
#     )
    with gr.Blocks(title='demo') as  demo:
        with gr.Row():
            with gr.Column():
                promptbox = gr.Textbox(label = "prompt")
            
            with gr.Column():
                output = gr.Textbox(label = "output")
        with gr.Row():
            submit = gr.Button("submit")
            clear = gr.Button("clear")

        submit.click(fn=greet,inputs=[promptbox],outputs=[output])
        clear.click(fn=clear_input, inputs=[], outputs=[output])

    # demo.launch(server_name="0.0.0.0", server_port=8088, debug=True, share=True)
    # demo.launch(server_name="0.0.0.0", server_port=8080, debug=True, share=True)

#http://10.99.5.48:8080/