File size: 9,032 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
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
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 prepare_params(query,img):
    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对于用户问到了知识库中未提及的信息不要编造,直接不回答'
    inputs = []
    ######
    img_info = np.array([img.encode('utf-8')], dtype=np.string_)
    img_info = np.tile(img_info, (bs,1))


    inputs.append(InferInput("img", img_info.shape,
                                np_to_triton_dtype(img_info.dtype)),)
            
    
    inputs[0].set_data_from_numpy(img_info)
    #####
    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.append( InferInput("query", data_batch['query'].shape,
                                np_to_triton_dtype(data_batch['query'].dtype))
    )
           

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

    return inputs

def make_a_try(inputs, outputs='response', model_name='ensemble_mllm', model_version=''): # qwen 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 greet(prompt,img):
    """Greet someone."""
    # print(prompt)
    print("prompt:",prompt)
    inputs = prepare_params(prompt,img)
    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['remote_appkey'] = "com.sankuai.automl.streamvlm"

    param_info['model_name'] = "ensemble_mllm"
    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)
    # triton_client.async_stream_infer(
    #     model_name=model_name,
    #     inputs=inputs,
    #     outputs=outputs,
    #     request_id="{}".format(sequence_id),
    #     sequence_id=sequence_id,
    #     sequence_start=True,
    #     sequence_end=True,
    # )

    img_url = f"https://s3plus.sankuai.com/automl-pkgs/0000.jpeg"

    greet("nihao",img_url)
    # greet("nihao")
    print("描述这张图片")