mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-06-10 15:56:03 +00:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ffe9c3e0f8 | ||
|
|
e20b79b0ed | ||
|
|
e04d46db2c | ||
|
|
7341435127 | ||
|
|
8b56f94667 | ||
|
|
f5e98d4ebb | ||
|
|
23a0dba470 |
@@ -110,7 +110,7 @@ class PlatformManager:
|
|||||||
if len(self.adapters) == 0:
|
if len(self.adapters) == 0:
|
||||||
self.ap.logger.warning('未运行平台适配器,请根据文档配置并启用平台适配器。')
|
self.ap.logger.warning('未运行平台适配器,请根据文档配置并启用平台适配器。')
|
||||||
|
|
||||||
async def write_back_config(self, adapter_name: str, adapter_inst: msadapter.MessagePlatformAdapter, config: dict):
|
def write_back_config(self, adapter_name: str, adapter_inst: msadapter.MessagePlatformAdapter, config: dict):
|
||||||
index = -2
|
index = -2
|
||||||
|
|
||||||
for i, adapter in enumerate(self.adapters):
|
for i, adapter in enumerate(self.adapters):
|
||||||
@@ -137,7 +137,7 @@ class PlatformManager:
|
|||||||
**config
|
**config
|
||||||
}
|
}
|
||||||
self.ap.platform_cfg.data['platform-adapters'][real_index] = new_cfg
|
self.ap.platform_cfg.data['platform-adapters'][real_index] = new_cfg
|
||||||
await self.ap.platform_cfg.dump_config()
|
self.ap.platform_cfg.dump_config_sync()
|
||||||
|
|
||||||
async def send(self, event: platform_events.MessageEvent, msg: platform_message.MessageChain, adapter: msadapter.MessagePlatformAdapter):
|
async def send(self, event: platform_events.MessageEvent, msg: platform_message.MessageChain, adapter: msadapter.MessagePlatformAdapter):
|
||||||
|
|
||||||
|
|||||||
@@ -310,6 +310,9 @@ class GeWeChatAdapter(adapter.MessagePlatformAdapter):
|
|||||||
async def gewechat_callback():
|
async def gewechat_callback():
|
||||||
data = await quart.request.json
|
data = await quart.request.json
|
||||||
# print(json.dumps(data, indent=4, ensure_ascii=False))
|
# print(json.dumps(data, indent=4, ensure_ascii=False))
|
||||||
|
self.ap.logger.debug(
|
||||||
|
f"Gewechat callback event: {data}"
|
||||||
|
)
|
||||||
|
|
||||||
if 'data' in data:
|
if 'data' in data:
|
||||||
data['Data'] = data['data']
|
data['Data'] = data['data']
|
||||||
@@ -428,26 +431,28 @@ class GeWeChatAdapter(adapter.MessagePlatformAdapter):
|
|||||||
self.config["token"]
|
self.config["token"]
|
||||||
)
|
)
|
||||||
|
|
||||||
app_id, error_msg = self.bot.login(self.config["app_id"])
|
def gewechat_login_process():
|
||||||
if error_msg:
|
|
||||||
raise Exception(f"Gewechat 登录失败: {error_msg}")
|
|
||||||
|
|
||||||
self.config["app_id"] = app_id
|
app_id, error_msg = self.bot.login(self.config["app_id"])
|
||||||
|
if error_msg:
|
||||||
|
raise Exception(f"Gewechat 登录失败: {error_msg}")
|
||||||
|
|
||||||
self.ap.logger.info(f"Gewechat 登录成功,app_id: {app_id}")
|
self.config["app_id"] = app_id
|
||||||
|
|
||||||
await self.ap.platform_mgr.write_back_config('gewechat', self, self.config)
|
self.ap.logger.info(f"Gewechat 登录成功,app_id: {app_id}")
|
||||||
|
|
||||||
# 获取 nickname
|
self.ap.platform_mgr.write_back_config('gewechat', self, self.config)
|
||||||
profile = self.bot.get_profile(self.config["app_id"])
|
|
||||||
self.bot_account_id = profile["data"]["nickName"]
|
# 获取 nickname
|
||||||
|
profile = self.bot.get_profile(self.config["app_id"])
|
||||||
|
self.bot_account_id = profile["data"]["nickName"]
|
||||||
|
|
||||||
|
time.sleep(2)
|
||||||
|
|
||||||
def thread_set_callback():
|
|
||||||
time.sleep(3)
|
|
||||||
ret = self.bot.set_callback(self.config["token"], self.config["callback_url"])
|
ret = self.bot.set_callback(self.config["token"], self.config["callback_url"])
|
||||||
print('设置 Gewechat 回调:', ret)
|
print('设置 Gewechat 回调:', ret)
|
||||||
|
|
||||||
threading.Thread(target=thread_set_callback).start()
|
threading.Thread(target=gewechat_login_process).start()
|
||||||
|
|
||||||
async def shutdown_trigger_placeholder():
|
async def shutdown_trigger_placeholder():
|
||||||
while True:
|
while True:
|
||||||
|
|||||||
@@ -328,6 +328,10 @@ class LarkAdapter(adapter.MessagePlatformAdapter):
|
|||||||
try:
|
try:
|
||||||
data = await quart.request.json
|
data = await quart.request.json
|
||||||
|
|
||||||
|
self.ap.logger.debug(
|
||||||
|
f"Lark callback event: {data}"
|
||||||
|
)
|
||||||
|
|
||||||
if 'encrypt' in data:
|
if 'encrypt' in data:
|
||||||
cipher = AESCipher(self.config['encrypt-key'])
|
cipher = AESCipher(self.config['encrypt-key'])
|
||||||
data = cipher.decrypt_string(data['encrypt'])
|
data = cipher.decrypt_string(data['encrypt'])
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class AnthropicMessages(requester.LLMAPIRequester):
|
|||||||
async def initialize(self):
|
async def initialize(self):
|
||||||
|
|
||||||
httpx_client = anthropic._base_client.AsyncHttpxClientWrapper(
|
httpx_client = anthropic._base_client.AsyncHttpxClientWrapper(
|
||||||
base_url=self.ap.provider_cfg.data['requester']['anthropic-messages']['base-url'],
|
base_url=self.ap.provider_cfg.data['requester']['anthropic-messages']['base-url'].replace(' ', ''),
|
||||||
# cast to a valid type because mypy doesn't understand our type narrowing
|
# cast to a valid type because mypy doesn't understand our type narrowing
|
||||||
timeout=typing.cast(httpx.Timeout, self.ap.provider_cfg.data['requester']['anthropic-messages']['timeout']),
|
timeout=typing.cast(httpx.Timeout, self.ap.provider_cfg.data['requester']['anthropic-messages']['timeout']),
|
||||||
limits=anthropic._constants.DEFAULT_CONNECTION_LIMITS,
|
limits=anthropic._constants.DEFAULT_CONNECTION_LIMITS,
|
||||||
@@ -59,9 +59,11 @@ class AnthropicMessages(requester.LLMAPIRequester):
|
|||||||
if m.role == "system":
|
if m.role == "system":
|
||||||
system_role_message = m
|
system_role_message = m
|
||||||
|
|
||||||
messages.pop(i)
|
|
||||||
break
|
break
|
||||||
|
|
||||||
|
if system_role_message:
|
||||||
|
messages.pop(i)
|
||||||
|
|
||||||
if isinstance(system_role_message, llm_entities.Message) \
|
if isinstance(system_role_message, llm_entities.Message) \
|
||||||
and isinstance(system_role_message.content, str):
|
and isinstance(system_role_message.content, str):
|
||||||
args['system'] = system_role_message.content
|
args['system'] = system_role_message.content
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class OpenAIChatCompletions(requester.LLMAPIRequester):
|
|||||||
|
|
||||||
self.client = openai.AsyncClient(
|
self.client = openai.AsyncClient(
|
||||||
api_key="",
|
api_key="",
|
||||||
base_url=self.requester_cfg['base-url'],
|
base_url=self.requester_cfg['base-url'].replace(' ', ''),
|
||||||
timeout=self.requester_cfg['timeout'],
|
timeout=self.requester_cfg['timeout'],
|
||||||
http_client=httpx.AsyncClient(
|
http_client=httpx.AsyncClient(
|
||||||
trust_env=True,
|
trust_env=True,
|
||||||
@@ -47,8 +47,9 @@ class OpenAIChatCompletions(requester.LLMAPIRequester):
|
|||||||
async def _req(
|
async def _req(
|
||||||
self,
|
self,
|
||||||
args: dict,
|
args: dict,
|
||||||
|
extra_body: dict = {},
|
||||||
) -> chat_completion.ChatCompletion:
|
) -> chat_completion.ChatCompletion:
|
||||||
return await self.client.chat.completions.create(**args)
|
return await self.client.chat.completions.create(**args, extra_body=extra_body)
|
||||||
|
|
||||||
async def _make_msg(
|
async def _make_msg(
|
||||||
self,
|
self,
|
||||||
@@ -73,7 +74,7 @@ class OpenAIChatCompletions(requester.LLMAPIRequester):
|
|||||||
) -> llm_entities.Message:
|
) -> llm_entities.Message:
|
||||||
self.client.api_key = use_model.token_mgr.get_token()
|
self.client.api_key = use_model.token_mgr.get_token()
|
||||||
|
|
||||||
args = self.requester_cfg['args'].copy()
|
args = {}
|
||||||
args["model"] = use_model.name if use_model.model_name is None else use_model.model_name
|
args["model"] = use_model.name if use_model.model_name is None else use_model.model_name
|
||||||
|
|
||||||
if use_funcs:
|
if use_funcs:
|
||||||
@@ -99,7 +100,7 @@ class OpenAIChatCompletions(requester.LLMAPIRequester):
|
|||||||
args["messages"] = messages
|
args["messages"] = messages
|
||||||
|
|
||||||
# 发送请求
|
# 发送请求
|
||||||
resp = await self._req(args)
|
resp = await self._req(args, extra_body=self.requester_cfg['args'])
|
||||||
|
|
||||||
# 处理请求结果
|
# 处理请求结果
|
||||||
message = await self._make_msg(resp)
|
message = await self._make_msg(resp)
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ class DeepseekChatCompletions(chatcmpl.OpenAIChatCompletions):
|
|||||||
) -> llm_entities.Message:
|
) -> llm_entities.Message:
|
||||||
self.client.api_key = use_model.token_mgr.get_token()
|
self.client.api_key = use_model.token_mgr.get_token()
|
||||||
|
|
||||||
args = self.requester_cfg['args'].copy()
|
args = {}
|
||||||
args["model"] = use_model.name if use_model.model_name is None else use_model.model_name
|
args["model"] = use_model.name if use_model.model_name is None else use_model.model_name
|
||||||
|
|
||||||
if use_funcs:
|
if use_funcs:
|
||||||
@@ -43,7 +43,7 @@ class DeepseekChatCompletions(chatcmpl.OpenAIChatCompletions):
|
|||||||
args["messages"] = messages
|
args["messages"] = messages
|
||||||
|
|
||||||
# 发送请求
|
# 发送请求
|
||||||
resp = await self._req(args)
|
resp = await self._req(args, extra_body=self.requester_cfg['args'])
|
||||||
|
|
||||||
if resp is None:
|
if resp is None:
|
||||||
raise errors.RequesterError('接口返回为空,请确定模型提供商服务是否正常')
|
raise errors.RequesterError('接口返回为空,请确定模型提供商服务是否正常')
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ class GiteeAIChatCompletions(chatcmpl.OpenAIChatCompletions):
|
|||||||
) -> llm_entities.Message:
|
) -> llm_entities.Message:
|
||||||
self.client.api_key = use_model.token_mgr.get_token()
|
self.client.api_key = use_model.token_mgr.get_token()
|
||||||
|
|
||||||
args = self.requester_cfg['args'].copy()
|
args = {}
|
||||||
args["model"] = use_model.name if use_model.model_name is None else use_model.model_name
|
args["model"] = use_model.name if use_model.model_name is None else use_model.model_name
|
||||||
|
|
||||||
if use_funcs:
|
if use_funcs:
|
||||||
@@ -46,7 +46,7 @@ class GiteeAIChatCompletions(chatcmpl.OpenAIChatCompletions):
|
|||||||
|
|
||||||
args["messages"] = req_messages
|
args["messages"] = req_messages
|
||||||
|
|
||||||
resp = await self._req(args)
|
resp = await self._req(args, extra_body=self.requester_cfg['args'])
|
||||||
|
|
||||||
message = await self._make_msg(resp)
|
message = await self._make_msg(resp)
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class MoonshotChatCompletions(chatcmpl.OpenAIChatCompletions):
|
|||||||
) -> llm_entities.Message:
|
) -> llm_entities.Message:
|
||||||
self.client.api_key = use_model.token_mgr.get_token()
|
self.client.api_key = use_model.token_mgr.get_token()
|
||||||
|
|
||||||
args = self.requester_cfg['args'].copy()
|
args = {}
|
||||||
args["model"] = use_model.name if use_model.model_name is None else use_model.model_name
|
args["model"] = use_model.name if use_model.model_name is None else use_model.model_name
|
||||||
|
|
||||||
if use_funcs:
|
if use_funcs:
|
||||||
@@ -48,7 +48,7 @@ class MoonshotChatCompletions(chatcmpl.OpenAIChatCompletions):
|
|||||||
args["messages"] = messages
|
args["messages"] = messages
|
||||||
|
|
||||||
# 发送请求
|
# 发送请求
|
||||||
resp = await self._req(args)
|
resp = await self._req(args, extra_body=self.requester_cfg['args'])
|
||||||
|
|
||||||
# 处理请求结果
|
# 处理请求结果
|
||||||
message = await self._make_msg(resp)
|
message = await self._make_msg(resp)
|
||||||
|
|||||||
@@ -225,6 +225,8 @@ class DifyServiceAPIRunner(runner.RequestRunner):
|
|||||||
role="assistant",
|
role="assistant",
|
||||||
content=[llm_entities.ContentElement.from_image_url(image_url)],
|
content=[llm_entities.ContentElement.from_image_url(image_url)],
|
||||||
)
|
)
|
||||||
|
if chunk['event'] == 'error':
|
||||||
|
raise errors.DifyAPIError("dify 服务错误: " + chunk['message'])
|
||||||
|
|
||||||
query.session.using_conversation.uuid = chunk["conversation_id"]
|
query.session.using_conversation.uuid = chunk["conversation_id"]
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
semantic_version = "v3.4.11.1"
|
semantic_version = "v3.4.11.2"
|
||||||
|
|
||||||
debug_mode = False
|
debug_mode = False
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user