mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-02-19 00:37:23 +08:00
74 lines
2.2 KiB
Python
74 lines
2.2 KiB
Python
"""
|
||
Message sending channel abstract class
|
||
"""
|
||
|
||
from bridge.bridge import Bridge
|
||
from bridge.context import Context
|
||
from bridge.reply import *
|
||
from common.log import logger
|
||
from config import conf
|
||
|
||
|
||
class Channel(object):
|
||
channel_type = ""
|
||
NOT_SUPPORT_REPLYTYPE = [ReplyType.VOICE, ReplyType.IMAGE]
|
||
|
||
def startup(self):
|
||
"""
|
||
init channel
|
||
"""
|
||
raise NotImplementedError
|
||
|
||
def handle_text(self, msg):
|
||
"""
|
||
process received msg
|
||
:param msg: message object
|
||
"""
|
||
raise NotImplementedError
|
||
|
||
# 统一的发送函数,每个Channel自行实现,根据reply的type字段发送不同类型的消息
|
||
def send(self, reply: Reply, context: Context):
|
||
"""
|
||
send message to user
|
||
:param msg: message content
|
||
:param receiver: receiver channel account
|
||
:return:
|
||
"""
|
||
raise NotImplementedError
|
||
|
||
def build_reply_content(self, query, context: Context = None) -> Reply:
|
||
"""
|
||
Build reply content, using agent if enabled in config
|
||
"""
|
||
# Check if agent mode is enabled
|
||
use_agent = conf().get("agent", False)
|
||
|
||
if use_agent:
|
||
try:
|
||
logger.info("[Channel] Using agent mode")
|
||
|
||
# Add channel_type to context if not present
|
||
if context and "channel_type" not in context:
|
||
context["channel_type"] = self.channel_type
|
||
|
||
# Use agent bridge to handle the query
|
||
return Bridge().fetch_agent_reply(
|
||
query=query,
|
||
context=context,
|
||
on_event=None,
|
||
clear_history=False
|
||
)
|
||
except Exception as e:
|
||
logger.error(f"[Channel] Agent mode failed, fallback to normal mode: {e}")
|
||
# Fallback to normal mode if agent fails
|
||
return Bridge().fetch_reply_content(query, context)
|
||
else:
|
||
# Normal mode
|
||
return Bridge().fetch_reply_content(query, context)
|
||
|
||
def build_voice_to_text(self, voice_file) -> Reply:
|
||
return Bridge().fetch_voice_to_text(voice_file)
|
||
|
||
def build_text_to_voice(self, text) -> Reply:
|
||
return Bridge().fetch_text_to_voice(text)
|