mirror of
https://github.com/LiteyukiStudio/nonebot-plugin-marshoai.git
synced 2025-07-31 08:59:51 +00:00
重构代码,准备将聊天请求逻辑移入MarshoHandler
This commit is contained in:
@ -24,6 +24,7 @@ from nonebot_plugin_alconna import MsgTarget, UniMessage, UniMsg, on_alconna
|
||||
|
||||
from .config import config
|
||||
from .constants import INTRODUCTION, SUPPORT_IMAGE_MODELS
|
||||
from .handler import MarshoHandler
|
||||
from .hooks import *
|
||||
from .instances import client, context, model_name, target_list, tools
|
||||
from .metadata import metadata
|
||||
@ -232,16 +233,10 @@ async def marsho(
|
||||
# 发送说明
|
||||
# await UniMessage(metadata.usage + "\n当前使用的模型:" + model_name).send()
|
||||
await marsho_cmd.finish(INTRODUCTION)
|
||||
handler = MarshoHandler(client, context)
|
||||
try:
|
||||
user_id = event.get_user_id()
|
||||
nicknames = await get_nicknames()
|
||||
user_nickname = nicknames.get(user_id, "")
|
||||
if user_nickname != "":
|
||||
nickname_prompt = (
|
||||
f"\n*此消息的说话者id为:{user_id},名字为:{user_nickname}*"
|
||||
)
|
||||
else:
|
||||
nickname_prompt = ""
|
||||
user_nickname = await get_nickname_by_user_id(event.get_user_id())
|
||||
if not user_nickname:
|
||||
# 用户名无法获取,暂时注释
|
||||
# user_nickname = event.sender.nickname # 未设置昵称时获取用户名
|
||||
# nickname_prompt = f"\n*此消息的说话者:{user_nickname}"
|
||||
@ -255,49 +250,15 @@ async def marsho(
|
||||
"※你未设置自己的昵称。推荐使用「nickname [昵称]」命令设置昵称来获得个性化(可能)回答。"
|
||||
).send()
|
||||
|
||||
is_support_image_model = (
|
||||
model_name.lower()
|
||||
in SUPPORT_IMAGE_MODELS + config.marshoai_additional_image_models
|
||||
)
|
||||
usermsg = [] if is_support_image_model else ""
|
||||
for i in text: # type: ignore
|
||||
if i.type == "text":
|
||||
if is_support_image_model:
|
||||
usermsg += [TextContentItem(text=i.data["text"] + nickname_prompt).as_dict()] # type: ignore
|
||||
else:
|
||||
usermsg += str(i.data["text"] + nickname_prompt) # type: ignore
|
||||
elif i.type == "image":
|
||||
if is_support_image_model:
|
||||
usermsg.append( # type: ignore
|
||||
ImageContentItem(
|
||||
image_url=ImageUrl( # type: ignore
|
||||
url=str(await get_image_b64(i.data["url"])) # type: ignore
|
||||
) # type: ignore
|
||||
).as_dict() # type: ignore
|
||||
) # type: ignore
|
||||
logger.info(f"输入图片 {i.data['url']}")
|
||||
elif config.marshoai_enable_support_image_tip:
|
||||
await UniMessage(
|
||||
"*此模型不支持图片处理或管理员未启用此模型的图片支持。图片将被忽略。"
|
||||
).send()
|
||||
backup_context = await get_backup_context(target.id, target.private)
|
||||
if backup_context:
|
||||
context.set_context(
|
||||
backup_context, target.id, target.private
|
||||
) # 加载历史记录
|
||||
logger.info(f"已恢复会话 {target.id} 的上下文备份~")
|
||||
context_msg = get_prompt(model_name) + context.build(target.id, target.private)
|
||||
usermsg = await handler.process_user_input(text, model_name)
|
||||
|
||||
tools_lists = tools.tools_list + list(
|
||||
map(lambda v: v.data(), get_function_calls().values())
|
||||
)
|
||||
logger.info(f"正在获取回答,模型:{model_name}")
|
||||
# logger.info(f"上下文:{context_msg}")
|
||||
response = await make_chat_openai(
|
||||
client=client,
|
||||
model_name=model_name,
|
||||
msg=context_msg + [UserMessage(content=usermsg).as_dict()], # type: ignore
|
||||
tools=tools_lists if tools_lists else None, # TODO 临时追加函数,后期优化
|
||||
response = await handler.handle_single_chat(
|
||||
usermsg, model_name, tools_lists, with_context=True
|
||||
)
|
||||
# await UniMessage(str(response)).send()
|
||||
choice = response.choices[0]
|
||||
@ -451,12 +412,10 @@ with contextlib.suppress(ImportError): # 优化先不做()
|
||||
@poke_notify.handle()
|
||||
async def poke(event: Event):
|
||||
|
||||
user_id = event.get_user_id()
|
||||
nicknames = await get_nicknames()
|
||||
user_nickname = nicknames.get(user_id, "")
|
||||
user_nickname = await get_nickname_by_user_id(event.get_user_id())
|
||||
try:
|
||||
if config.marshoai_poke_suffix != "":
|
||||
logger.info(f"收到戳一戳,用户昵称:{user_nickname},用户ID:{user_id}")
|
||||
logger.info(f"收到戳一戳,用户昵称:{user_nickname}")
|
||||
response = await make_chat_openai(
|
||||
client=client,
|
||||
model_name=model_name,
|
||||
|
Reference in New Issue
Block a user