chore: fix imports

This commit is contained in:
Junyan Qin
2025-11-16 17:44:18 +08:00
parent 75edeb7a01
commit 418cddd657
38 changed files with 110 additions and 248 deletions
-23
View File
@@ -1,23 +0,0 @@
include README.md
include LICENSE
include pyproject.toml
# Include all Python packages
recursive-include langbot *.py
recursive-include pkg *.py
recursive-include libs *.py
# Include templates and resources
recursive-include langbot/templates *
recursive-include res *
# Include compiled frontend files (will be added during build)
recursive-include web/out *
# Exclude unnecessary files
global-exclude *.pyc
global-exclude *.pyo
global-exclude __pycache__
global-exclude .DS_Store
global-exclude *.so
global-exclude *.dylib
+2 -116
View File
@@ -1,117 +1,3 @@
import asyncio import langbot.__main__
import argparse
# LangBot 终端启动入口
# 在此层级解决依赖项检查。
# LangBot/main.py
asciiart = r""" langbot.__main__.main()
_ ___ _
| | __ _ _ _ __ _| _ ) ___| |_
| |__/ _` | ' \/ _` | _ \/ _ \ _|
|____\__,_|_||_\__, |___/\___/\__|
|___/
⭐️ Open Source 开源地址: https://github.com/langbot-app/LangBot
📖 Documentation 文档地址: https://docs.langbot.app
"""
async def main_entry(loop: asyncio.AbstractEventLoop):
parser = argparse.ArgumentParser(description='LangBot')
parser.add_argument(
'--standalone-runtime',
action='store_true',
help='Use standalone plugin runtime / 使用独立插件运行时',
default=False,
)
parser.add_argument('--debug', action='store_true', help='Debug mode / 调试模式', default=False)
args = parser.parse_args()
if args.standalone_runtime:
from pkg.utils import platform
platform.standalone_runtime = True
if args.debug:
from pkg.utils import constants
constants.debug_mode = True
print(asciiart)
import sys
# 检查依赖
from pkg.core.bootutils import deps
missing_deps = await deps.check_deps()
if missing_deps:
print('以下依赖包未安装,将自动安装,请完成后重启程序:')
print(
'These dependencies are missing, they will be installed automatically, please restart the program after completion:'
)
for dep in missing_deps:
print('-', dep)
await deps.install_deps(missing_deps)
print('已自动安装缺失的依赖包,请重启程序。')
print('The missing dependencies have been installed automatically, please restart the program.')
sys.exit(0)
# # 检查pydantic版本,如果没有 pydantic.v1,则把 pydantic 映射为 v1
# import pydantic.version
# if pydantic.version.VERSION < '2.0':
# import pydantic
# sys.modules['pydantic.v1'] = pydantic
# 检查配置文件
from pkg.core.bootutils import files
generated_files = await files.generate_files()
if generated_files:
print('以下文件不存在,已自动生成:')
print('Following files do not exist and have been automatically generated:')
for file in generated_files:
print('-', file)
from pkg.core import boot
await boot.main(loop)
if __name__ == '__main__':
import os
import sys
# 必须大于 3.10.1
if sys.version_info < (3, 10, 1):
print('需要 Python 3.10.1 及以上版本,当前 Python 版本为:', sys.version)
input('按任意键退出...')
print('Your Python version is not supported. Please exit the program by pressing any key.')
exit(1)
# Check if the current directory is the LangBot project root directory
invalid_pwd = False
if not os.path.exists('main.py'):
invalid_pwd = True
else:
with open('main.py', 'r', encoding='utf-8') as f:
content = f.read()
if 'LangBot/main.py' not in content:
invalid_pwd = True
if invalid_pwd:
print('请在 LangBot 项目根目录下以命令形式运行此程序。')
input('按任意键退出...')
print('Please run this program in the LangBot project root directory in command form.')
print('Press any key to exit...')
exit(1)
loop = asyncio.new_event_loop()
loop.run_until_complete(main_entry(loop))
+1 -2
View File
@@ -107,8 +107,7 @@ requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta" build-backend = "setuptools.build_meta"
[tool.setuptools] [tool.setuptools]
packages = { find = {} } package-data = { "langbot" = ["templates/*"] }
include-package-data = true
[dependency-groups] [dependency-groups]
dev = [ dev = [
+4 -4
View File
@@ -31,12 +31,12 @@ async def main_entry(loop: asyncio.AbstractEventLoop):
args = parser.parse_args() args = parser.parse_args()
if args.standalone_runtime: if args.standalone_runtime:
from pkg.utils import platform from langbot.pkg.utils import platform
platform.standalone_runtime = True platform.standalone_runtime = True
if args.debug: if args.debug:
from pkg.utils import constants from langbot.pkg.utils import constants
constants.debug_mode = True constants.debug_mode = True
@@ -60,7 +60,7 @@ async def main_entry(loop: asyncio.AbstractEventLoop):
sys.exit(0) sys.exit(0)
# Check configuration files # Check configuration files
from pkg.core.bootutils import files from langbot.pkg.core.bootutils import files
generated_files = await files.generate_files() generated_files = await files.generate_files()
@@ -70,7 +70,7 @@ async def main_entry(loop: asyncio.AbstractEventLoop):
for file in generated_files: for file in generated_files:
print('-', file) print('-', file)
from pkg.core import boot from langbot.pkg.core import boot
await boot.main(loop) await boot.main(loop)
+2 -2
View File
@@ -1,12 +1,12 @@
# 微信公众号的加解密算法与企业微信一样,所以直接使用企业微信的加解密算法文件 # 微信公众号的加解密算法与企业微信一样,所以直接使用企业微信的加解密算法文件
import time import time
import traceback import traceback
from libs.wecom_api.WXBizMsgCrypt3 import WXBizMsgCrypt from langbot.libs.wecom_api.WXBizMsgCrypt3 import WXBizMsgCrypt
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
from quart import Quart, request from quart import Quart, request
import hashlib import hashlib
from typing import Callable from typing import Callable
from .oaevent import OAEvent from langbot.libs.official_account_api.oaevent import OAEvent
import asyncio import asyncio
@@ -1,4 +1,4 @@
from libs.wechatpad_api.util.http_util import post_json from langbot.libs.wechatpad_api.util.http_util import post_json
class ChatRoomApi: class ChatRoomApi:
@@ -1,4 +1,4 @@
from libs.wechatpad_api.util.http_util import post_json from langbot.libs.wechatpad_api.util.http_util import post_json
import httpx import httpx
import base64 import base64
+1 -1
View File
@@ -1,4 +1,4 @@
from libs.wechatpad_api.util.http_util import post_json, get_json from langbot.libs.wechatpad_api.util.http_util import post_json, get_json
class LoginApi: class LoginApi:
@@ -1,4 +1,4 @@
from libs.wechatpad_api.util.http_util import post_json from langbot.libs.wechatpad_api.util.http_util import post_json
class MessageApi: class MessageApi:
+1 -1
View File
@@ -1,4 +1,4 @@
from libs.wechatpad_api.util.http_util import post_json, async_request, get_json from langbot.libs.wechatpad_api.util.http_util import post_json, async_request, get_json
class UserApi: class UserApi:
+6 -6
View File
@@ -1,9 +1,9 @@
from libs.wechatpad_api.api.login import LoginApi from langbot.libs.wechatpad_api.api.login import LoginApi
from libs.wechatpad_api.api.friend import FriendApi from langbot.libs.wechatpad_api.api.friend import FriendApi
from libs.wechatpad_api.api.message import MessageApi from langbot.libs.wechatpad_api.api.message import MessageApi
from libs.wechatpad_api.api.user import UserApi from langbot.libs.wechatpad_api.api.user import UserApi
from libs.wechatpad_api.api.downloadpai import DownloadApi from langbot.libs.wechatpad_api.api.downloadpai import DownloadApi
from libs.wechatpad_api.api.chatroom import ChatRoomApi from langbot.libs.wechatpad_api.api.chatroom import ChatRoomApi
class WeChatPadClient: class WeChatPadClient:
@@ -16,7 +16,7 @@ import struct
from Crypto.Cipher import AES from Crypto.Cipher import AES
import xml.etree.cElementTree as ET import xml.etree.cElementTree as ET
import socket import socket
from libs.wecom_ai_bot_api import ierror from langbot.libs.wecom_ai_bot_api import ierror
""" """
+3 -3
View File
@@ -13,9 +13,9 @@ import httpx
from Crypto.Cipher import AES from Crypto.Cipher import AES
from quart import Quart, request, Response, jsonify from quart import Quart, request, Response, jsonify
from libs.wecom_ai_bot_api import wecombotevent from langbot.libs.wecom_ai_bot_api import wecombotevent
from libs.wecom_ai_bot_api.WXBizMsgCrypt3 import WXBizMsgCrypt from langbot.libs.wecom_ai_bot_api.WXBizMsgCrypt3 import WXBizMsgCrypt
from pkg.platform.logger import EventLogger from langbot.pkg.platform.logger import EventLogger
@dataclass @dataclass
+1 -1
View File
@@ -2,7 +2,7 @@ import os
import json import json
import importlib.resources as resources import importlib.resources as resources
from .. import model as file_model from langbot.pkg.config import model as file_model
class JSONConfigFile(file_model.ConfigFile): class JSONConfigFile(file_model.ConfigFile):
+1 -1
View File
@@ -2,7 +2,7 @@ import os
import yaml import yaml
import importlib.resources as resources import importlib.resources as resources
from .. import model as file_model from langbot.pkg.config import model as file_model
class YAMLConfigFile(file_model.ConfigFile): class YAMLConfigFile(file_model.ConfigFile):
+1 -1
View File
@@ -8,7 +8,7 @@ import os
from ..platform import botmgr as im_mgr from ..platform import botmgr as im_mgr
from ..provider.session import sessionmgr as llm_session_mgr from ..provider.session import sessionmgr as llm_session_mgr
from ..provider.modelmgr import modelmgr as llm_model_mgr from ..provider.modelmgr import modelmgr as llm_model_mgr
from ..provider.tools import toolmgr as llm_tool_mgr from langbot.pkg.provider.tools import toolmgr as llm_tool_mgr
from ..config import manager as config_mgr from ..config import manager as config_mgr
from ..command import cmdmgr from ..command import cmdmgr
from ..plugin import connector as plugin_connector from ..plugin import connector as plugin_connector
+1 -1
View File
@@ -37,7 +37,7 @@ class BuildAppStage(stage.BootingStage):
ap.task_mgr = taskmgr.AsyncTaskManager(ap) ap.task_mgr = taskmgr.AsyncTaskManager(ap)
discover = discover_engine.ComponentDiscoveryEngine(ap) discover = discover_engine.ComponentDiscoveryEngine(ap)
discover.discover_blueprint('components.yaml') discover.discover_blueprint('templates/components.yaml')
ap.discover = discover ap.discover = discover
proxy_mgr = proxy.ProxyManager(ap) proxy_mgr = proxy.ProxyManager(ap)
+16 -13
View File
@@ -6,7 +6,8 @@ import os
import yaml import yaml
import pydantic import pydantic
from ..core import app from langbot.pkg.core import app
from langbot.pkg.utils import importutil
class I18nString(pydantic.BaseModel): class I18nString(pydantic.BaseModel):
@@ -165,7 +166,7 @@ class Component(pydantic.BaseModel):
if module_path.endswith('.py'): if module_path.endswith('.py'):
module_path = module_path[:-3] module_path = module_path[:-3]
module_path = module_path.replace('/', '.').replace('\\', '.') module_path = module_path.replace('/', '.').replace('\\', '.')
module = importlib.import_module(module_path) module = importlib.import_module(f'langbot.{module_path}')
return getattr(module, self.execution.python.attr) return getattr(module, self.execution.python.attr)
def to_plain_dict(self) -> dict: def to_plain_dict(self) -> dict:
@@ -193,16 +194,17 @@ class ComponentDiscoveryEngine:
def load_component_manifest(self, path: str, owner: str = 'builtin', no_save: bool = False) -> Component | None: def load_component_manifest(self, path: str, owner: str = 'builtin', no_save: bool = False) -> Component | None:
"""加载组件清单""" """加载组件清单"""
with open(path, 'r', encoding='utf-8') as f: # with open(path, 'r', encoding='utf-8') as f:
manifest = yaml.safe_load(f) # manifest = yaml.safe_load(f)
if not Component.is_component_manifest(manifest): manifest = yaml.safe_load(importutil.read_resource_file(path))
return None if not Component.is_component_manifest(manifest):
comp = Component(owner=owner, manifest=manifest, rel_path=path) return None
if not no_save: comp = Component(owner=owner, manifest=manifest, rel_path=path)
if comp.kind not in self.components: if not no_save:
self.components[comp.kind] = [] if comp.kind not in self.components:
self.components[comp.kind].append(comp) self.components[comp.kind] = []
return comp self.components[comp.kind].append(comp)
return comp
def load_component_manifests_in_dir( def load_component_manifests_in_dir(
self, self,
@@ -217,7 +219,8 @@ class ComponentDiscoveryEngine:
def recursive_load_component_manifests_in_dir(path: str, depth: int = 1): def recursive_load_component_manifests_in_dir(path: str, depth: int = 1):
if depth > max_depth: if depth > max_depth:
return return
for file in os.listdir(path):
for file in importutil.list_resource_files(path):
if (not os.path.isdir(os.path.join(path, file))) and (file.endswith('.yaml') or file.endswith('.yml')): if (not os.path.isdir(os.path.join(path, file))) and (file.endswith('.yaml') or file.endswith('.yml')):
comp = self.load_component_manifest(os.path.join(path, file), owner, no_save) comp = self.load_component_manifest(os.path.join(path, file), owner, no_save)
if comp is not None: if comp is not None:
+3 -3
View File
@@ -1,13 +1,13 @@
import traceback import traceback
import typing import typing
from libs.dingtalk_api.dingtalkevent import DingTalkEvent from langbot.libs.dingtalk_api.dingtalkevent import DingTalkEvent
import langbot_plugin.api.entities.builtin.platform.message as platform_message import langbot_plugin.api.entities.builtin.platform.message as platform_message
import langbot_plugin.api.definition.abstract.platform.adapter as abstract_platform_adapter import langbot_plugin.api.definition.abstract.platform.adapter as abstract_platform_adapter
import langbot_plugin.api.entities.builtin.platform.events as platform_events import langbot_plugin.api.entities.builtin.platform.events as platform_events
import langbot_plugin.api.entities.builtin.platform.entities as platform_entities import langbot_plugin.api.entities.builtin.platform.entities as platform_entities
from libs.dingtalk_api.api import DingTalkClient from langbot.libs.dingtalk_api.api import DingTalkClient
import datetime import datetime
from ..logger import EventLogger from langbot.pkg.platform.logger import EventLogger
class DingTalkMessageConverter(abstract_platform_adapter.AbstractMessageConverter): class DingTalkMessageConverter(abstract_platform_adapter.AbstractMessageConverter):
@@ -5,13 +5,13 @@ import traceback
import pydantic import pydantic
import datetime import datetime
import langbot_plugin.api.definition.abstract.platform.adapter as abstract_platform_adapter import langbot_plugin.api.definition.abstract.platform.adapter as abstract_platform_adapter
from libs.official_account_api.oaevent import OAEvent from langbot.libs.official_account_api.oaevent import OAEvent
from libs.official_account_api.api import OAClient from langbot.libs.official_account_api.api import OAClient
from libs.official_account_api.api import OAClientForLongerResponse from langbot.libs.official_account_api.api import OAClientForLongerResponse
import langbot_plugin.api.entities.builtin.platform.entities as platform_entities import langbot_plugin.api.entities.builtin.platform.entities as platform_entities
import langbot_plugin.api.entities.builtin.platform.message as platform_message import langbot_plugin.api.entities.builtin.platform.message as platform_message
import langbot_plugin.api.entities.builtin.platform.events as platform_events import langbot_plugin.api.entities.builtin.platform.events as platform_events
from ..logger import EventLogger from langbot.pkg.platform.logger import EventLogger
class OAMessageConverter(abstract_platform_adapter.AbstractMessageConverter): class OAMessageConverter(abstract_platform_adapter.AbstractMessageConverter):
@@ -9,10 +9,10 @@ import langbot_plugin.api.definition.abstract.platform.adapter as abstract_platf
import langbot_plugin.api.entities.builtin.platform.message as platform_message import langbot_plugin.api.entities.builtin.platform.message as platform_message
import langbot_plugin.api.entities.builtin.platform.events as platform_events import langbot_plugin.api.entities.builtin.platform.events as platform_events
import langbot_plugin.api.entities.builtin.platform.entities as platform_entities import langbot_plugin.api.entities.builtin.platform.entities as platform_entities
from libs.qq_official_api.api import QQOfficialClient from langbot.libs.qq_official_api.api import QQOfficialClient
from libs.qq_official_api.qqofficialevent import QQOfficialEvent from langbot.libs.qq_official_api.qqofficialevent import QQOfficialEvent
from ...utils import image from langbot.pkg.utils import image
from ..logger import EventLogger from langbot.pkg.platform.logger import EventLogger
class QQOfficialMessageConverter(abstract_platform_adapter.AbstractMessageConverter): class QQOfficialMessageConverter(abstract_platform_adapter.AbstractMessageConverter):
+4 -4
View File
@@ -5,15 +5,15 @@ import traceback
import datetime import datetime
from libs.slack_api.api import SlackClient from langbot.libs.slack_api.api import SlackClient
import langbot_plugin.api.definition.abstract.platform.adapter as abstract_platform_adapter import langbot_plugin.api.definition.abstract.platform.adapter as abstract_platform_adapter
from libs.slack_api.slackevent import SlackEvent from langbot.libs.slack_api.slackevent import SlackEvent
import langbot_plugin.api.entities.builtin.platform.events as platform_events import langbot_plugin.api.entities.builtin.platform.events as platform_events
import langbot_plugin.api.entities.builtin.platform.message as platform_message import langbot_plugin.api.entities.builtin.platform.message as platform_message
import langbot_plugin.api.entities.builtin.platform.entities as platform_entities import langbot_plugin.api.entities.builtin.platform.entities as platform_entities
from langbot_plugin.api.entities.builtin.command import errors as command_errors from langbot_plugin.api.entities.builtin.command import errors as command_errors
from ...utils import image from langbot.pkg.utils import image
from ..logger import EventLogger from langbot.pkg.platform.logger import EventLogger
class SlackMessageConverter(abstract_platform_adapter.AbstractMessageConverter): class SlackMessageConverter(abstract_platform_adapter.AbstractMessageConverter):
@@ -4,7 +4,7 @@ import json
import time import time
import httpx import httpx
from libs.wechatpad_api.client import WeChatPadClient from langbot.libs.wechatpad_api.client import WeChatPadClient
import typing import typing
import asyncio import asyncio
@@ -16,7 +16,7 @@ import threading
import quart import quart
from ..logger import EventLogger from langbot.pkg.platform.logger import EventLogger
import xml.etree.ElementTree as ET import xml.etree.ElementTree as ET
from typing import Optional, Tuple from typing import Optional, Tuple
from functools import partial from functools import partial
+4 -4
View File
@@ -5,11 +5,11 @@ import traceback
import datetime import datetime
from libs.wecom_api.api import WecomClient from langbot.libs.wecom_api.api import WecomClient
import langbot_plugin.api.definition.abstract.platform.adapter as abstract_platform_adapter import langbot_plugin.api.definition.abstract.platform.adapter as abstract_platform_adapter
from libs.wecom_api.wecomevent import WecomEvent from langbot.libs.wecom_api.wecomevent import WecomEvent
from ...utils import image from langbot.pkg.utils import image
from ..logger import EventLogger from langbot.pkg.platform.logger import EventLogger
import langbot_plugin.api.entities.builtin.platform.message as platform_message import langbot_plugin.api.entities.builtin.platform.message as platform_message
import langbot_plugin.api.entities.builtin.platform.events as platform_events import langbot_plugin.api.entities.builtin.platform.events as platform_events
import langbot_plugin.api.entities.builtin.platform.entities as platform_entities import langbot_plugin.api.entities.builtin.platform.entities as platform_entities
+3 -3
View File
@@ -8,9 +8,9 @@ import langbot_plugin.api.definition.abstract.platform.adapter as abstract_platf
import langbot_plugin.api.entities.builtin.platform.message as platform_message import langbot_plugin.api.entities.builtin.platform.message as platform_message
import langbot_plugin.api.entities.builtin.platform.events as platform_events import langbot_plugin.api.entities.builtin.platform.events as platform_events
import langbot_plugin.api.entities.builtin.platform.entities as platform_entities import langbot_plugin.api.entities.builtin.platform.entities as platform_entities
from ..logger import EventLogger from langbot.pkg.platform.logger import EventLogger
from libs.wecom_ai_bot_api.wecombotevent import WecomBotEvent from langbot.libs.wecom_ai_bot_api.wecombotevent import WecomBotEvent
from libs.wecom_ai_bot_api.api import WecomBotClient from langbot.libs.wecom_ai_bot_api.api import WecomBotClient
class WecomBotMessageConverter(abstract_platform_adapter.AbstractMessageConverter): class WecomBotMessageConverter(abstract_platform_adapter.AbstractMessageConverter):
+2 -2
View File
@@ -6,9 +6,9 @@ import traceback
import datetime import datetime
import pydantic import pydantic
from libs.wecom_customer_service_api.api import WecomCSClient from langbot.libs.wecom_customer_service_api.api import WecomCSClient
import langbot_plugin.api.definition.abstract.platform.adapter as abstract_platform_adapter import langbot_plugin.api.definition.abstract.platform.adapter as abstract_platform_adapter
from libs.wecom_customer_service_api.wecomcsevent import WecomCSEvent from langbot.libs.wecom_customer_service_api.wecomcsevent import WecomCSEvent
import langbot_plugin.api.entities.builtin.platform.entities as platform_entities import langbot_plugin.api.entities.builtin.platform.entities as platform_entities
import langbot_plugin.api.entities.builtin.platform.message as platform_message import langbot_plugin.api.entities.builtin.platform.message as platform_message
import langbot_plugin.api.entities.builtin.platform.events as platform_events import langbot_plugin.api.entities.builtin.platform.events as platform_events
+4 -4
View File
@@ -4,12 +4,12 @@ import typing
import json import json
import base64 import base64
from .. import runner from langbot.pkg.provider import runner
from ...core import app from langbot.pkg.core import app
import langbot_plugin.api.entities.builtin.provider.message as provider_message import langbot_plugin.api.entities.builtin.provider.message as provider_message
from ...utils import image from langbot.pkg.utils import image
import langbot_plugin.api.entities.builtin.pipeline.query as pipeline_query import langbot_plugin.api.entities.builtin.pipeline.query as pipeline_query
from libs.coze_server_api.client import AsyncCozeAPIClient from langbot.libs.coze_server_api.client import AsyncCozeAPIClient
@runner.runner_class('coze-api') @runner.runner_class('coze-api')
@@ -6,12 +6,12 @@ import uuid
import base64 import base64
from .. import runner from langbot.pkg.provider import runner
from ...core import app from langbot.pkg.core import app
import langbot_plugin.api.entities.builtin.provider.message as provider_message import langbot_plugin.api.entities.builtin.provider.message as provider_message
from ...utils import image from langbot.pkg.utils import image
import langbot_plugin.api.entities.builtin.pipeline.query as pipeline_query import langbot_plugin.api.entities.builtin.pipeline.query as pipeline_query
from libs.dify_service_api.v1 import client, errors from langbot.libs.dify_service_api.v1 import client, errors
@runner.runner_class('dify-service-api') @runner.runner_class('dify-service-api')
+3 -3
View File
@@ -3,9 +3,9 @@ from __future__ import annotations
import typing import typing
from ...core import app from ...core import app
from ...utils import importutil from langbot.pkg.utils import importutil
from . import loaders from langbot.pkg.provider.tools import loaders
from .loaders import mcp as mcp_loader, plugin as plugin_loader from langbot.pkg.provider.tools.loaders import mcp as mcp_loader, plugin as plugin_loader
import langbot_plugin.api.entities.builtin.resource.tool as resource_tool import langbot_plugin.api.entities.builtin.resource.tool as resource_tool
importutil.import_modules_in_pkg(loaders) importutil.import_modules_in_pkg(loaders)
+6 -6
View File
@@ -4,13 +4,13 @@ import uuid
import zipfile import zipfile
import io import io
from .services import parser, chunker from .services import parser, chunker
from pkg.core import app from langbot.pkg.core import app
from pkg.rag.knowledge.services.embedder import Embedder from langbot.pkg.rag.knowledge.services.embedder import Embedder
from pkg.rag.knowledge.services.retriever import Retriever from langbot.pkg.rag.knowledge.services.retriever import Retriever
import sqlalchemy import sqlalchemy
from ...entity.persistence import rag as persistence_rag from langbot.pkg.entity.persistence import rag as persistence_rag
from pkg.core import taskmgr from langbot.pkg.core import taskmgr
from ...entity.rag import retriever as retriever_entities from langbot.pkg.entity.rag import retriever as retriever_entities
class RuntimeKnowledgeBase: class RuntimeKnowledgeBase:
@@ -2,8 +2,8 @@ from __future__ import annotations
import json import json
from typing import List from typing import List
from pkg.rag.knowledge.services import base_service from langbot.pkg.rag.knowledge.services import base_service
from pkg.core import app from langbot.pkg.core import app
from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_text_splitters import RecursiveCharacterTextSplitter
@@ -1,10 +1,10 @@
from __future__ import annotations from __future__ import annotations
import uuid import uuid
from typing import List from typing import List
from pkg.rag.knowledge.services.base_service import BaseService from langbot.pkg.rag.knowledge.services.base_service import BaseService
from ....entity.persistence import rag as persistence_rag from langbot.pkg.entity.persistence import rag as persistence_rag
from ....core import app from langbot.pkg.core import app
from ....provider.modelmgr.requester import RuntimeEmbeddingModel from langbot.pkg.provider.modelmgr.requester import RuntimeEmbeddingModel
import sqlalchemy import sqlalchemy
@@ -9,7 +9,7 @@ import markdown
from bs4 import BeautifulSoup from bs4 import BeautifulSoup
import re import re
import asyncio # Import asyncio for async operations import asyncio # Import asyncio for async operations
from pkg.core import app from langbot.pkg.core import app
class FileParser: class FileParser:
+9 -6
View File
@@ -1,5 +1,5 @@
import importlib import importlib
import importlib.util import importlib.resources
import os import os
import typing import typing
@@ -25,7 +25,7 @@ def import_dot_style_dir(dot_sep_path: str):
return import_dir(os.path.join(*sec)) return import_dir(os.path.join(*sec))
def import_dir(path: str): def import_dir(path: str, path_prefix: str = 'langbot.'):
for file in os.listdir(path): for file in os.listdir(path):
if file.endswith('.py') and file != '__init__.py': if file.endswith('.py') and file != '__init__.py':
full_path = os.path.join(path, file) full_path = os.path.join(path, file)
@@ -33,10 +33,13 @@ def import_dir(path: str):
rel_path = rel_path[1:] rel_path = rel_path[1:]
rel_path = rel_path.replace('/', '.')[:-3] rel_path = rel_path.replace('/', '.')[:-3]
rel_path = rel_path.replace('\\', '.') rel_path = rel_path.replace('\\', '.')
importlib.import_module(rel_path) importlib.import_module(f'{path_prefix}{rel_path}')
if __name__ == '__main__': def read_resource_file(resource_path: str) -> str:
from pkg.platform import types with importlib.resources.files('langbot').joinpath(resource_path).open('r', encoding='utf-8') as f:
return f.read()
import_modules_in_pkg(types)
def list_resource_files(resource_path: str) -> list[str]:
return [f.name for f in importlib.resources.files('langbot').joinpath(resource_path).iterdir()]
+2 -2
View File
@@ -2,8 +2,8 @@ from __future__ import annotations
import asyncio import asyncio
from typing import Any from typing import Any
from chromadb import PersistentClient from chromadb import PersistentClient
from pkg.vector.vdb import VectorDatabase from langbot.pkg.vector.vdb import VectorDatabase
from pkg.core import app from langbot.pkg.core import app
import chromadb import chromadb
import chromadb.errors import chromadb.errors
+2 -2
View File
@@ -3,8 +3,8 @@ from __future__ import annotations
from typing import Any, Dict, List from typing import Any, Dict, List
from qdrant_client import AsyncQdrantClient, models from qdrant_client import AsyncQdrantClient, models
from pkg.core import app from langbot.pkg.core import app
from pkg.vector.vdb import VectorDatabase from langbot.pkg.vector.vdb import VectorDatabase
class QdrantVectorDatabase(VectorDatabase): class QdrantVectorDatabase(VectorDatabase):
@@ -7,9 +7,6 @@ metadata:
zh_Hans: 内置组件 zh_Hans: 内置组件
spec: spec:
components: components:
ComponentTemplate:
fromFiles:
- pkg/provider/modelmgr/requester.yaml
MessagePlatformAdapter: MessagePlatformAdapter:
fromDirs: fromDirs:
- path: pkg/platform/sources/ - path: pkg/platform/sources/
+3 -6
View File
@@ -10,16 +10,13 @@ This file provides infrastructure for all pipeline tests, including:
from __future__ import annotations from __future__ import annotations
import pytest import pytest
from unittest.mock import AsyncMock, MagicMock, Mock from unittest.mock import AsyncMock, Mock
from typing import Any
import langbot_plugin.api.entities.builtin.pipeline.query as pipeline_query import langbot_plugin.api.entities.builtin.pipeline.query as pipeline_query
import langbot_plugin.api.entities.builtin.platform.message as platform_message import langbot_plugin.api.entities.builtin.platform.message as platform_message
import langbot_plugin.api.entities.builtin.platform.events as platform_events
import langbot_plugin.api.entities.builtin.provider.session as provider_session import langbot_plugin.api.entities.builtin.provider.session as provider_session
import langbot_plugin.api.entities.builtin.provider.message as provider_message
from pkg.pipeline import entities as pipeline_entities from langbot.pkg.pipeline import entities as pipeline_entities
class MockApplication: class MockApplication:
@@ -203,7 +200,7 @@ def sample_query(sample_message_chain, sample_message_event, mock_adapter):
variables={}, variables={},
resp_messages=[], resp_messages=[],
resp_message_chain=None, resp_message_chain=None,
current_stage_name=None current_stage_name=None,
) )
return query return query