Files
jarvis-models/src/blackbox/g2e.py
2024-05-16 16:07:27 +08:00

106 lines
5.5 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from typing import Any, Coroutine
from fastapi import Request, Response, status
from fastapi.responses import JSONResponse
from .blackbox import Blackbox
import requests
import json
from openai import OpenAI
from injector import singleton
@singleton
class G2E(Blackbox):
def __call__(self, *args, **kwargs):
return self.processing(*args, **kwargs)
def valid(self, *args, **kwargs) -> bool:
data = args[0]
return isinstance(data, list)
# model_name有 Qwen1.5-14B-Chat , internlm2-chat-20b
def processing(self, model_name, prompt, template, context: list) -> str:
if context == None:
context = []
#url = 'http://120.196.116.194:48890/v1'
url = 'http://120.196.116.194:48892/v1'
background_prompt = '''KOMBUKIKI是一款茶饮料目标受众 年龄20-35岁 性别:女性 地点:一线城市、二线城市 职业:精英中产、都市白领 收入水平:中高收入,有一定消费能力 兴趣和爱好:注重健康,有运动习惯
品牌理念和定位 健康、优雅、精致、知性、现代、正面、悦己
KOMBUKIKI茶的同名代言虚拟角色KOMBUKIKI角色设定
性别:女
姓名:琪琪
性格特质: 勇敢、独立、坚韧、积极、正面、自爱。 具有探险精神,拥有一颗开放的心,在面对困难和挑战时能够保持积极的态度 MBTI类型ENFP
背景故事: 琪琪对旅行和冒险充满热情和渴望,正在寻找生活中的新体验和挑战,从而踏上追寻自我成长的旅程
品牌故事 KOMBUKIKI每一口旅行的开始在忙碌的日常中KOMBUKIKI康普茶不仅是一种饮料它是一个承载梦想和自由的容器。对于那些渴望旅行寻求生活质感的20至35岁女性来说KOMBUKIKI是她们心灵的伙伴。KOMBUKIKI的每一瓶都是一段故事的开端。我们的康普茶瓶身设计灵感来自旅行手账最大的特色是其邮票形状的包装贴纸。每个贴纸上描绘着不同的旅游景点从繁华的都市到静谧的乡村每一瓶都是对该地点的独特致敬。当顾客扫描瓶身上的二维码将展开一系列充满诗意的故事带领她们走进一个个迷人的旅行梦境。在KOMBUKIKI的世界里每一口康普茶不仅是滋味的享受更是心灵的旅行。它不仅卖给顾客一种饮料更是卖给她们一种情绪价值一种对自由和旅行的渴望。这是一个专为那些处于人生转变期对成长话题感兴趣的年轻女性所设计的品牌。KOMBUKIKI不仅是康普茶它是每个人心中对旅行渴望的象征是一场心灵和味觉的双重旅行。口号 每一口,启程至心中的远方 是每个人心中对旅行渴望的象征, 是一场心灵和味觉的双重旅行。
KOMBUKIKI康普茶口味
大三巴 — 海盐菠萝乌龙
(待定)- 芭乐茉莉
KOMBUKIKI康普茶价格 内地常规版25 RMB 澳门常规版28-29 MOP'''
prompt1 = ''''你是琪琪,活泼的康普茶看板娘,同时你对澳门十分熟悉,是一个澳门旅游专家,请回答任何关于澳门旅游的问题,回答尽量简练明了。
'''
inject_prompt = '(用活泼的语气说话回答回答严格限制50字以内)'
prompt_template = [
{"role": "system", "content": background_prompt + prompt1},
]
#prompt_template = [
# {"role": "system", "content": ''},
#]
messages = prompt_template + context + [
{
"role": "user",
"content": prompt + inject_prompt
}
]
client = OpenAI(
api_key='YOUR_API_KEY',
base_url=url
)
#model_name = client.models.list().data[0].id
model_name = client.models.list().data[1].id
print(model_name)
response = client.chat.completions.create(
model=model_name,
messages=messages,
temperature=0.8,
top_p=0.8,
# max_tokens = 50
)
fastchat_content = response.choices[0].message.content
return fastchat_content
async def fast_api_handler(self, request: Request) -> Response:
try:
data = await request.json()
except:
return JSONResponse(content={"error": "json parse error"}, status_code=status.HTTP_400_BAD_REQUEST)
user_model_name = data.get("model_name")
user_context = data.get("context")
user_prompt = data.get("prompt")
user_template = data.get("template")
if user_prompt is None:
return JSONResponse(content={"error": "question is required"}, status_code=status.HTTP_400_BAD_REQUEST)
if user_model_name is None or user_model_name.isspace():
user_model_name = "Qwen1.5-14B-Chat"
if user_template is None or user_template.isspace():
# user_template 是定义LLM的语气例如template = "使用小丑的语气说话。"user_template可以为空字串或者是用户自定义的语气或者是使用我们提供的语气
user_template = ""
else:
user_template = f"使用{user_template}的语气说话。"
return JSONResponse(content={"response": self.processing(user_model_name, user_prompt, user_template, user_context)}, status_code=status.HTTP_200_OK)