Spaces:
Paused
Paused
#!/usr/bin/python3 | |
# -*- coding: utf-8 -*- | |
import argparse | |
import logging | |
import dingtalk_stream | |
from dingtalk_stream import AckMessage | |
from project_settings import project_path | |
from project_settings import environment | |
from toolbox.agent_x.question_answer import AgentX | |
def get_args(): | |
parser = argparse.ArgumentParser() | |
parser.add_argument( | |
"--client_id", | |
default=environment.get("client_id"), | |
type=str, | |
) | |
parser.add_argument( | |
"--client_secret", | |
default=environment.get("client_secret"), | |
type=str, | |
) | |
parser.add_argument( | |
"--agent_x_api_key", | |
default=environment.get("agent_x_api_key", default=None), | |
type=str | |
) | |
parser.add_argument( | |
"--agent_x_agent_name", | |
default=environment.get("agent_x_agent_name", default=None), | |
type=str | |
) | |
args = parser.parse_args() | |
return args | |
class EchoTextHandler(dingtalk_stream.ChatbotHandler): | |
def __init__(self): | |
super(EchoTextHandler, self).__init__() | |
async def process(self, callback: dingtalk_stream.CallbackMessage): | |
incoming_message = dingtalk_stream.ChatbotMessage.from_dict(callback.data) | |
text = incoming_message.text.content.strip() | |
self.reply_text(text, incoming_message) | |
return AckMessage.STATUS_OK, "OK" | |
class AgentXNXLinkHandler(dingtalk_stream.ChatbotHandler): | |
def __init__(self, agent: AgentX): | |
super(AgentXNXLinkHandler, self).__init__() | |
self.agent = agent | |
async def process(self, callback: dingtalk_stream.CallbackMessage): | |
incoming_message = dingtalk_stream.ChatbotMessage.from_dict(callback.data) | |
text = incoming_message.text.content.strip() | |
response = self.agent.question_answer( | |
question=text, | |
streaming=True | |
) | |
answer = response["answer"] | |
answer = answer.split("{\"message\":")[0] | |
self.reply_text(answer, incoming_message) | |
return AckMessage.STATUS_OK, "OK" | |
def main(): | |
args = get_args() | |
agent = AgentX( | |
api_key=args.agent_x_api_key, | |
agent_name=args.agent_x_agent_name, | |
) | |
agent_x_nxlink_handler = AgentXNXLinkHandler(agent=agent) | |
client = dingtalk_stream.DingTalkStreamClient( | |
credential=dingtalk_stream.Credential( | |
client_id=args.client_id, | |
client_secret=args.client_secret, | |
) | |
) | |
client.register_callback_handler( | |
dingtalk_stream.chatbot.ChatbotMessage.TOPIC, | |
agent_x_nxlink_handler | |
) | |
client.start_forever() | |
return | |
if __name__ == '__main__': | |
main() | |