mirror of
https://github.com/RYDE-WORK/Langchain-Chatchat.git
synced 2026-01-31 19:33:26 +08:00
794 lines
26 KiB
Python
794 lines
26 KiB
Python
import importlib
|
||
import importlib.util
|
||
import os
|
||
from pathlib import Path
|
||
from typing import Dict, Any
|
||
|
||
import json
|
||
import logging
|
||
|
||
logger = logging.getLogger()
|
||
|
||
|
||
class ConfigBasic:
|
||
log_verbose: bool
|
||
CHATCHAT_ROOT: str
|
||
DATA_PATH: str
|
||
IMG_DIR: str
|
||
NLTK_DATA_PATH: str
|
||
LOG_FORMAT: str
|
||
LOG_PATH: str
|
||
MEDIA_PATH: str
|
||
BASE_TEMP_DIR: str
|
||
|
||
|
||
class ConfigBasicFactory:
|
||
"""Basic config for ChatChat """
|
||
|
||
def __init__(self):
|
||
# 日志格式
|
||
self.LOG_FORMAT = "%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s"
|
||
logging.basicConfig(format=self.LOG_FORMAT)
|
||
self.LOG_VERBOSE = False
|
||
self.CHATCHAT_ROOT = str(Path(__file__).absolute().parent.parent)
|
||
# 用户数据根目录
|
||
self.DATA_PATH = os.path.join(self.CHATCHAT_ROOT, "data")
|
||
self._DATA_PATH = os.path.join(self.CHATCHAT_ROOT, "data")
|
||
if not os.path.exists(self._DATA_PATH):
|
||
os.mkdir(self.DATA_PATH)
|
||
|
||
self._init_data_dir()
|
||
|
||
# 项目相关图片
|
||
self.IMG_DIR = os.path.join(self.CHATCHAT_ROOT, "img")
|
||
if not os.path.exists(self.IMG_DIR):
|
||
os.mkdir(self.IMG_DIR)
|
||
|
||
def log_verbose(self, verbose: bool):
|
||
self.LOG_VERBOSE = verbose
|
||
|
||
def chatchat_root(self, root: str):
|
||
self.CHATCHAT_ROOT = root
|
||
|
||
def data_path(self, path: str):
|
||
self.DATA_PATH = path
|
||
if not os.path.exists(self.DATA_PATH):
|
||
os.mkdir(self.DATA_PATH)
|
||
# 复制_DATA_PATH数据到DATA_PATH
|
||
os.system(f"cp -r {self._DATA_PATH} {self.DATA_PATH}")
|
||
|
||
self._init_data_dir()
|
||
|
||
def log_format(self, log_format: str):
|
||
self.LOG_FORMAT = log_format
|
||
logging.basicConfig(format=self.LOG_FORMAT)
|
||
|
||
def _init_data_dir(self):
|
||
logger.info(f"Init data dir: {self.DATA_PATH}")
|
||
# nltk 模型存储路径
|
||
self.NLTK_DATA_PATH = os.path.join(self.DATA_PATH, "nltk_data")
|
||
import nltk
|
||
nltk.data.path = [self.NLTK_DATA_PATH] + nltk.data.path
|
||
# 日志存储路径
|
||
self.LOG_PATH = os.path.join(self.DATA_PATH, "logs")
|
||
if not os.path.exists(self.LOG_PATH):
|
||
os.mkdir(self.LOG_PATH)
|
||
|
||
# 模型生成内容(图片、视频、音频等)保存位置
|
||
self.MEDIA_PATH = os.path.join(self.DATA_PATH, "media")
|
||
if not os.path.exists(self.MEDIA_PATH):
|
||
os.mkdir(self.MEDIA_PATH)
|
||
os.mkdir(os.path.join(self.MEDIA_PATH, "image"))
|
||
os.mkdir(os.path.join(self.MEDIA_PATH, "audio"))
|
||
os.mkdir(os.path.join(self.MEDIA_PATH, "video"))
|
||
|
||
# 临时文件目录,主要用于文件对话
|
||
self.BASE_TEMP_DIR = os.path.join(self.DATA_PATH, "temp")
|
||
if not os.path.exists(self.BASE_TEMP_DIR):
|
||
os.mkdir(self.BASE_TEMP_DIR)
|
||
|
||
logger.info(f"Init data dir: {self.DATA_PATH} success.")
|
||
|
||
def get_config(self) -> ConfigBasic:
|
||
config = ConfigBasic()
|
||
config.log_verbose = self.LOG_VERBOSE
|
||
config.CHATCHAT_ROOT = self.CHATCHAT_ROOT
|
||
config.DATA_PATH = self.DATA_PATH
|
||
config.IMG_DIR = self.IMG_DIR
|
||
config.NLTK_DATA_PATH = self.NLTK_DATA_PATH
|
||
config.LOG_FORMAT = self.LOG_FORMAT
|
||
config.LOG_PATH = self.LOG_PATH
|
||
config.MEDIA_PATH = self.MEDIA_PATH
|
||
config.BASE_TEMP_DIR = self.BASE_TEMP_DIR
|
||
return config
|
||
|
||
|
||
class ConfigWorkSpace:
|
||
"""
|
||
工作空间的配置预设,提供ConfigBasic建造方法产生实例。
|
||
该类的实例对象用于存储工作空间的配置信息,如工作空间的路径等
|
||
工作空间的配置信息存储在用户的家目录下的.config/chatchat/workspace/workspace_config.json文件中。
|
||
注意:不存在则读取默认
|
||
"""
|
||
_config_factory: ConfigBasicFactory = ConfigBasicFactory()
|
||
|
||
def __init__(self):
|
||
self.workspace = os.path.join(os.path.expanduser("~"), ".config", "chatchat/workspace")
|
||
if not os.path.exists(self.workspace):
|
||
os.makedirs(self.workspace, exist_ok=True)
|
||
self.workspace_config = os.path.join(self.workspace, "workspace_config.json")
|
||
# 初始化工作空间配置,转换成json格式,实现ConfigBasic的实例化
|
||
with open(self.workspace_config, "w") as f:
|
||
config_json = json.loads(f.read())
|
||
|
||
if config_json:
|
||
|
||
_config_factory = ConfigBasicFactory()
|
||
if config_json.get("log_verbose"):
|
||
_config_factory.log_verbose(config_json.get("log_verbose"))
|
||
if config_json.get("CHATCHAT_ROOT"):
|
||
_config_factory.chatchat_root(config_json.get("CHATCHAT_ROOT"))
|
||
if config_json.get("DATA_PATH"):
|
||
_config_factory.data_path(config_json.get("DATA_PATH"))
|
||
if config_json.get("LOG_FORMAT"):
|
||
_config_factory.log_format(config_json.get("LOG_FORMAT"))
|
||
|
||
self._config_factory = _config_factory
|
||
|
||
def get_config(self) -> ConfigBasic:
|
||
return self._config_factory.get_config()
|
||
|
||
def set_log_verbose(self, verbose: bool):
|
||
self._config_factory.log_verbose(verbose)
|
||
self._store_config()
|
||
|
||
def set_chatchat_root(self, root: str):
|
||
self._config_factory.chatchat_root(root)
|
||
self._store_config()
|
||
|
||
def set_data_path(self, path: str):
|
||
self._config_factory.data_path(path)
|
||
self._store_config()
|
||
|
||
def set_log_format(self, log_format: str):
|
||
self._config_factory.log_format(log_format)
|
||
self._store_config()
|
||
|
||
def _store_config(self):
|
||
with open(self.workspace_config, "w") as f:
|
||
config = self._config_factory.get_config()
|
||
config_json = {
|
||
"log_verbose": config.log_verbose,
|
||
"CHATCHAT_ROOT": config.CHATCHAT_ROOT,
|
||
"DATA_PATH": config.DATA_PATH,
|
||
"LOG_FORMAT": config.LOG_FORMAT
|
||
}
|
||
f.write(json.dumps(config_json, indent=4, ensure_ascii=False))
|
||
|
||
|
||
def _load_mod(mod, attr):
|
||
attr_cfg = None
|
||
for name, obj in vars(mod).items():
|
||
if name == attr:
|
||
attr_cfg = obj
|
||
break
|
||
|
||
if attr_cfg is None:
|
||
logger.warning(
|
||
f"Missing attr_cfg:{attr} in {mod}, Skip."
|
||
)
|
||
return attr_cfg
|
||
return attr_cfg
|
||
|
||
|
||
def _import_config_mod_load(import_config_mod: str) -> Dict:
|
||
# 加载用户空间的配置
|
||
user_config_path = os.path.join(os.path.expanduser("~"), ".config", "chatchat/configs")
|
||
user_import = True # 默认加载用户配置
|
||
if os.path.exists(user_config_path):
|
||
try:
|
||
|
||
file_names = os.listdir(user_config_path)
|
||
|
||
if import_config_mod + ".py" not in file_names:
|
||
logger.warning(
|
||
f"Missing {file_names}.py file in {user_config_path}, Skip."
|
||
)
|
||
user_import = False
|
||
if user_import:
|
||
# Dynamic loading {config}.py file
|
||
py_path = os.path.join(user_config_path, import_config_mod + ".py")
|
||
spec = importlib.util.spec_from_file_location(
|
||
f"*",
|
||
py_path
|
||
)
|
||
module = importlib.util.module_from_spec(spec)
|
||
spec.loader.exec_module(module)
|
||
|
||
return {
|
||
"user_import": user_import,
|
||
"user_config_path": user_config_path,
|
||
"load_mod": _load_mod,
|
||
"module": module,
|
||
}
|
||
|
||
except ImportError as e:
|
||
logger.error(
|
||
f"Failed to load user config from {user_config_path}, Skip.", e
|
||
)
|
||
pass
|
||
else:
|
||
user_import = False
|
||
|
||
if user_import:
|
||
logger.error(
|
||
f"Failed to load user config from {user_config_path}, Skip."
|
||
)
|
||
raise RuntimeError(f"Failed to load user config from {user_config_path}")
|
||
# 当前文件路径
|
||
py_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), import_config_mod + ".py")
|
||
|
||
spec = importlib.util.spec_from_file_location(f"*",
|
||
py_path)
|
||
|
||
module = importlib.util.module_from_spec(spec)
|
||
spec.loader.exec_module(module)
|
||
|
||
return {
|
||
"user_import": user_import,
|
||
"user_config_path": user_config_path,
|
||
"load_mod": _load_mod,
|
||
"module": module,
|
||
}
|
||
|
||
|
||
CONFIG_IMPORTS = {
|
||
|
||
"_basic_config.py": _import_config_mod_load("_basic_config"),
|
||
"_kb_config.py": _import_config_mod_load("_kb_config"),
|
||
"_model_config.py": _import_config_mod_load("_model_config"),
|
||
"_prompt_config.py": _import_config_mod_load("_prompt_config"),
|
||
"_server_config.py": _import_config_mod_load("_server_config"),
|
||
}
|
||
|
||
|
||
def _import_log_verbose() -> Any:
|
||
basic_config_load = CONFIG_IMPORTS.get("_basic_config.py")
|
||
load_mod = basic_config_load.get("load_mod")
|
||
log_verbose = load_mod(basic_config_load.get("module"), "log_verbose")
|
||
|
||
return log_verbose
|
||
|
||
|
||
def _import_chatchat_root() -> Any:
|
||
basic_config_load = CONFIG_IMPORTS.get("_basic_config.py")
|
||
load_mod = basic_config_load.get("load_mod")
|
||
CHATCHAT_ROOT = load_mod(basic_config_load.get("module"), "CHATCHAT_ROOT")
|
||
|
||
return CHATCHAT_ROOT
|
||
|
||
|
||
def _import_data_path() -> Any:
|
||
basic_config_load = CONFIG_IMPORTS.get("_basic_config.py")
|
||
load_mod = basic_config_load.get("load_mod")
|
||
DATA_PATH = load_mod(basic_config_load.get("module"), "DATA_PATH")
|
||
|
||
return DATA_PATH
|
||
|
||
|
||
def _import_img_dir() -> Any:
|
||
basic_config_load = CONFIG_IMPORTS.get("_basic_config.py")
|
||
load_mod = basic_config_load.get("load_mod")
|
||
IMG_DIR = load_mod(basic_config_load.get("module"), "IMG_DIR")
|
||
|
||
return IMG_DIR
|
||
|
||
|
||
def _import_nltk_data_path() -> Any:
|
||
basic_config_load = CONFIG_IMPORTS.get("_basic_config.py")
|
||
load_mod = basic_config_load.get("load_mod")
|
||
NLTK_DATA_PATH = load_mod(basic_config_load.get("module"), "NLTK_DATA_PATH")
|
||
|
||
return NLTK_DATA_PATH
|
||
|
||
|
||
def _import_log_format() -> Any:
|
||
basic_config_load = CONFIG_IMPORTS.get("_basic_config.py")
|
||
load_mod = basic_config_load.get("load_mod")
|
||
LOG_FORMAT = load_mod(basic_config_load.get("module"), "LOG_FORMAT")
|
||
|
||
return LOG_FORMAT
|
||
|
||
|
||
def _import_log_path() -> Any:
|
||
basic_config_load = CONFIG_IMPORTS.get("_basic_config.py")
|
||
load_mod = basic_config_load.get("load_mod")
|
||
LOG_PATH = load_mod(basic_config_load.get("module"), "LOG_PATH")
|
||
|
||
return LOG_PATH
|
||
|
||
|
||
def _import_media_path() -> Any:
|
||
basic_config_load = CONFIG_IMPORTS.get("_basic_config.py")
|
||
load_mod = basic_config_load.get("load_mod")
|
||
MEDIA_PATH = load_mod(basic_config_load.get("module"), "MEDIA_PATH")
|
||
|
||
return MEDIA_PATH
|
||
|
||
|
||
def _import_base_temp_dir() -> Any:
|
||
basic_config_load = CONFIG_IMPORTS.get("_basic_config.py")
|
||
load_mod = basic_config_load.get("load_mod")
|
||
BASE_TEMP_DIR = load_mod(basic_config_load.get("module"), "BASE_TEMP_DIR")
|
||
|
||
return BASE_TEMP_DIR
|
||
|
||
|
||
def _import_default_knowledge_base() -> Any:
|
||
kb_config_load = CONFIG_IMPORTS.get("_kb_config.py")
|
||
load_mod = kb_config_load.get("load_mod")
|
||
DEFAULT_KNOWLEDGE_BASE = load_mod(kb_config_load.get("module"), "DEFAULT_KNOWLEDGE_BASE")
|
||
|
||
return DEFAULT_KNOWLEDGE_BASE
|
||
|
||
|
||
def _import_default_vs_type() -> Any:
|
||
kb_config_load = CONFIG_IMPORTS.get("_kb_config.py")
|
||
load_mod = kb_config_load.get("load_mod")
|
||
DEFAULT_VS_TYPE = load_mod(kb_config_load.get("module"), "DEFAULT_VS_TYPE")
|
||
|
||
return DEFAULT_VS_TYPE
|
||
|
||
|
||
def _import_cached_vs_num() -> Any:
|
||
kb_config_load = CONFIG_IMPORTS.get("_kb_config.py")
|
||
load_mod = kb_config_load.get("load_mod")
|
||
CACHED_VS_NUM = load_mod(kb_config_load.get("module"), "CACHED_VS_NUM")
|
||
|
||
return CACHED_VS_NUM
|
||
|
||
|
||
def _import_cached_memo_vs_num() -> Any:
|
||
kb_config_load = CONFIG_IMPORTS.get("_kb_config.py")
|
||
load_mod = kb_config_load.get("load_mod")
|
||
CACHED_MEMO_VS_NUM = load_mod(kb_config_load.get("module"), "CACHED_MEMO_VS_NUM")
|
||
|
||
return CACHED_MEMO_VS_NUM
|
||
|
||
|
||
def _import_chunk_size() -> Any:
|
||
kb_config_load = CONFIG_IMPORTS.get("_kb_config.py")
|
||
load_mod = kb_config_load.get("load_mod")
|
||
CHUNK_SIZE = load_mod(kb_config_load.get("module"), "CHUNK_SIZE")
|
||
|
||
return CHUNK_SIZE
|
||
|
||
|
||
def _import_overlap_size() -> Any:
|
||
kb_config_load = CONFIG_IMPORTS.get("_kb_config.py")
|
||
load_mod = kb_config_load.get("load_mod")
|
||
OVERLAP_SIZE = load_mod(kb_config_load.get("module"), "OVERLAP_SIZE")
|
||
|
||
return OVERLAP_SIZE
|
||
|
||
|
||
def _import_vector_search_top_k() -> Any:
|
||
kb_config_load = CONFIG_IMPORTS.get("_kb_config.py")
|
||
load_mod = kb_config_load.get("load_mod")
|
||
VECTOR_SEARCH_TOP_K = load_mod(kb_config_load.get("module"), "VECTOR_SEARCH_TOP_K")
|
||
|
||
return VECTOR_SEARCH_TOP_K
|
||
|
||
|
||
def _import_score_threshold() -> Any:
|
||
kb_config_load = CONFIG_IMPORTS.get("_kb_config.py")
|
||
load_mod = kb_config_load.get("load_mod")
|
||
SCORE_THRESHOLD = load_mod(kb_config_load.get("module"), "SCORE_THRESHOLD")
|
||
|
||
return SCORE_THRESHOLD
|
||
|
||
|
||
def _import_default_search_engine() -> Any:
|
||
kb_config_load = CONFIG_IMPORTS.get("_kb_config.py")
|
||
load_mod = kb_config_load.get("load_mod")
|
||
DEFAULT_SEARCH_ENGINE = load_mod(kb_config_load.get("module"), "DEFAULT_SEARCH_ENGINE")
|
||
|
||
return DEFAULT_SEARCH_ENGINE
|
||
|
||
|
||
def _import_search_engine_top_k() -> Any:
|
||
kb_config_load = CONFIG_IMPORTS.get("_kb_config.py")
|
||
load_mod = kb_config_load.get("load_mod")
|
||
SEARCH_ENGINE_TOP_K = load_mod(kb_config_load.get("module"), "SEARCH_ENGINE_TOP_K")
|
||
|
||
return SEARCH_ENGINE_TOP_K
|
||
|
||
|
||
def _import_zh_title_enhance() -> Any:
|
||
kb_config_load = CONFIG_IMPORTS.get("_kb_config.py")
|
||
load_mod = kb_config_load.get("load_mod")
|
||
ZH_TITLE_ENHANCE = load_mod(kb_config_load.get("module"), "ZH_TITLE_ENHANCE")
|
||
|
||
return ZH_TITLE_ENHANCE
|
||
|
||
|
||
def _import_pdf_ocr_threshold() -> Any:
|
||
kb_config_load = CONFIG_IMPORTS.get("_kb_config.py")
|
||
load_mod = kb_config_load.get("load_mod")
|
||
PDF_OCR_THRESHOLD = load_mod(kb_config_load.get("module"), "PDF_OCR_THRESHOLD")
|
||
|
||
return PDF_OCR_THRESHOLD
|
||
|
||
|
||
def _import_kb_info() -> Any:
|
||
kb_config_load = CONFIG_IMPORTS.get("_kb_config.py")
|
||
load_mod = kb_config_load.get("load_mod")
|
||
KB_INFO = load_mod(kb_config_load.get("module"), "KB_INFO")
|
||
|
||
return KB_INFO
|
||
|
||
|
||
def _import_kb_root_path() -> Any:
|
||
kb_config_load = CONFIG_IMPORTS.get("_kb_config.py")
|
||
load_mod = kb_config_load.get("load_mod")
|
||
KB_ROOT_PATH = load_mod(kb_config_load.get("module"), "KB_ROOT_PATH")
|
||
|
||
return KB_ROOT_PATH
|
||
|
||
|
||
def _import_db_root_path() -> Any:
|
||
kb_config_load = CONFIG_IMPORTS.get("_kb_config.py")
|
||
load_mod = kb_config_load.get("load_mod")
|
||
DB_ROOT_PATH = load_mod(kb_config_load.get("module"), "DB_ROOT_PATH")
|
||
|
||
return DB_ROOT_PATH
|
||
|
||
|
||
def _import_sqlalchemy_database_uri() -> Any:
|
||
kb_config_load = CONFIG_IMPORTS.get("_kb_config.py")
|
||
load_mod = kb_config_load.get("load_mod")
|
||
SQLALCHEMY_DATABASE_URI = load_mod(kb_config_load.get("module"), "SQLALCHEMY_DATABASE_URI")
|
||
|
||
return SQLALCHEMY_DATABASE_URI
|
||
|
||
|
||
def _import_kbs_config() -> Any:
|
||
kb_config_load = CONFIG_IMPORTS.get("_kb_config.py")
|
||
load_mod = kb_config_load.get("load_mod")
|
||
kbs_config = load_mod(kb_config_load.get("module"), "kbs_config")
|
||
|
||
return kbs_config
|
||
|
||
|
||
def _import_text_splitter_dict() -> Any:
|
||
kb_config_load = CONFIG_IMPORTS.get("_kb_config.py")
|
||
load_mod = kb_config_load.get("load_mod")
|
||
text_splitter_dict = load_mod(kb_config_load.get("module"), "text_splitter_dict")
|
||
|
||
return text_splitter_dict
|
||
|
||
|
||
def _import_text_splitter_name() -> Any:
|
||
kb_config_load = CONFIG_IMPORTS.get("_kb_config.py")
|
||
load_mod = kb_config_load.get("load_mod")
|
||
TEXT_SPLITTER_NAME = load_mod(kb_config_load.get("module"), "TEXT_SPLITTER_NAME")
|
||
|
||
return TEXT_SPLITTER_NAME
|
||
|
||
|
||
def _import_embedding_keyword_file() -> Any:
|
||
kb_config_load = CONFIG_IMPORTS.get("_kb_config.py")
|
||
load_mod = kb_config_load.get("load_mod")
|
||
EMBEDDING_KEYWORD_FILE = load_mod(kb_config_load.get("module"), "EMBEDDING_KEYWORD_FILE")
|
||
|
||
return EMBEDDING_KEYWORD_FILE
|
||
|
||
|
||
def _import_default_llm_model() -> Any:
|
||
model_config_load = CONFIG_IMPORTS.get("_model_config.py")
|
||
load_mod = model_config_load.get("load_mod")
|
||
DEFAULT_LLM_MODEL = load_mod(model_config_load.get("module"), "DEFAULT_LLM_MODEL")
|
||
|
||
return DEFAULT_LLM_MODEL
|
||
|
||
|
||
def _import_default_embedding_model() -> Any:
|
||
model_config_load = CONFIG_IMPORTS.get("_model_config.py")
|
||
load_mod = model_config_load.get("load_mod")
|
||
DEFAULT_EMBEDDING_MODEL = load_mod(model_config_load.get("module"), "DEFAULT_EMBEDDING_MODEL")
|
||
|
||
return DEFAULT_EMBEDDING_MODEL
|
||
|
||
|
||
def _import_agent_model() -> Any:
|
||
model_config_load = CONFIG_IMPORTS.get("_model_config.py")
|
||
load_mod = model_config_load.get("load_mod")
|
||
Agent_MODEL = load_mod(model_config_load.get("module"), "Agent_MODEL")
|
||
|
||
return Agent_MODEL
|
||
|
||
|
||
def _import_history_len() -> Any:
|
||
model_config_load = CONFIG_IMPORTS.get("_model_config.py")
|
||
load_mod = model_config_load.get("load_mod")
|
||
HISTORY_LEN = load_mod(model_config_load.get("module"), "HISTORY_LEN")
|
||
|
||
return HISTORY_LEN
|
||
|
||
|
||
def _import_max_tokens() -> Any:
|
||
model_config_load = CONFIG_IMPORTS.get("_model_config.py")
|
||
load_mod = model_config_load.get("load_mod")
|
||
MAX_TOKENS = load_mod(model_config_load.get("module"), "MAX_TOKENS")
|
||
|
||
return MAX_TOKENS
|
||
|
||
|
||
def _import_temperature() -> Any:
|
||
model_config_load = CONFIG_IMPORTS.get("_model_config.py")
|
||
load_mod = model_config_load.get("load_mod")
|
||
TEMPERATURE = load_mod(model_config_load.get("module"), "TEMPERATURE")
|
||
|
||
return TEMPERATURE
|
||
|
||
|
||
def _import_support_agent_models() -> Any:
|
||
model_config_load = CONFIG_IMPORTS.get("_model_config.py")
|
||
load_mod = model_config_load.get("load_mod")
|
||
SUPPORT_AGENT_MODELS = load_mod(model_config_load.get("module"), "SUPPORT_AGENT_MODELS")
|
||
|
||
return SUPPORT_AGENT_MODELS
|
||
|
||
|
||
def _import_llm_model_config() -> Any:
|
||
model_config_load = CONFIG_IMPORTS.get("_model_config.py")
|
||
load_mod = model_config_load.get("load_mod")
|
||
LLM_MODEL_CONFIG = load_mod(model_config_load.get("module"), "LLM_MODEL_CONFIG")
|
||
|
||
return LLM_MODEL_CONFIG
|
||
|
||
|
||
def _import_model_platforms() -> Any:
|
||
model_config_load = CONFIG_IMPORTS.get("_model_config.py")
|
||
load_mod = model_config_load.get("load_mod")
|
||
MODEL_PLATFORMS = load_mod(model_config_load.get("module"), "MODEL_PLATFORMS")
|
||
|
||
return MODEL_PLATFORMS
|
||
|
||
|
||
def _import_model_providers_cfg_path() -> Any:
|
||
model_config_load = CONFIG_IMPORTS.get("_model_config.py")
|
||
load_mod = model_config_load.get("load_mod")
|
||
MODEL_PROVIDERS_CFG_PATH_CONFIG = load_mod(model_config_load.get("module"), "MODEL_PROVIDERS_CFG_PATH_CONFIG")
|
||
|
||
return MODEL_PROVIDERS_CFG_PATH_CONFIG
|
||
|
||
|
||
def _import_model_providers_cfg_host() -> Any:
|
||
model_config_load = CONFIG_IMPORTS.get("_model_config.py")
|
||
load_mod = model_config_load.get("load_mod")
|
||
MODEL_PROVIDERS_CFG_HOST = load_mod(model_config_load.get("module"), "MODEL_PROVIDERS_CFG_HOST")
|
||
|
||
return MODEL_PROVIDERS_CFG_HOST
|
||
|
||
|
||
def _import_model_providers_cfg_port() -> Any:
|
||
model_config_load = CONFIG_IMPORTS.get("_model_config.py")
|
||
load_mod = model_config_load.get("load_mod")
|
||
MODEL_PROVIDERS_CFG_PORT = load_mod(model_config_load.get("module"), "MODEL_PROVIDERS_CFG_PORT")
|
||
|
||
return MODEL_PROVIDERS_CFG_PORT
|
||
|
||
|
||
def _import_tool_config() -> Any:
|
||
model_config_load = CONFIG_IMPORTS.get("_model_config.py")
|
||
load_mod = model_config_load.get("load_mod")
|
||
TOOL_CONFIG = load_mod(model_config_load.get("module"), "TOOL_CONFIG")
|
||
|
||
return TOOL_CONFIG
|
||
|
||
|
||
def _import_prompt_templates() -> Any:
|
||
prompt_config_load = CONFIG_IMPORTS.get("_prompt_config.py")
|
||
load_mod = prompt_config_load.get("load_mod")
|
||
PROMPT_TEMPLATES = load_mod(prompt_config_load.get("module"), "PROMPT_TEMPLATES")
|
||
|
||
return PROMPT_TEMPLATES
|
||
|
||
|
||
def _import_httpx_default_timeout() -> Any:
|
||
server_config_load = CONFIG_IMPORTS.get("_server_config.py")
|
||
load_mod = server_config_load.get("load_mod")
|
||
HTTPX_DEFAULT_TIMEOUT = load_mod(server_config_load.get("module"), "HTTPX_DEFAULT_TIMEOUT")
|
||
|
||
return HTTPX_DEFAULT_TIMEOUT
|
||
|
||
|
||
def _import_open_cross_domain() -> Any:
|
||
server_config_load = CONFIG_IMPORTS.get("_server_config.py")
|
||
load_mod = server_config_load.get("load_mod")
|
||
OPEN_CROSS_DOMAIN = load_mod(server_config_load.get("module"), "OPEN_CROSS_DOMAIN")
|
||
|
||
return OPEN_CROSS_DOMAIN
|
||
|
||
|
||
def _import_default_bind_host() -> Any:
|
||
server_config_load = CONFIG_IMPORTS.get("_server_config.py")
|
||
load_mod = server_config_load.get("load_mod")
|
||
DEFAULT_BIND_HOST = load_mod(server_config_load.get("module"), "DEFAULT_BIND_HOST")
|
||
|
||
return DEFAULT_BIND_HOST
|
||
|
||
|
||
def _import_webui_server() -> Any:
|
||
server_config_load = CONFIG_IMPORTS.get("_server_config.py")
|
||
load_mod = server_config_load.get("load_mod")
|
||
WEBUI_SERVER = load_mod(server_config_load.get("module"), "WEBUI_SERVER")
|
||
|
||
return WEBUI_SERVER
|
||
|
||
|
||
def _import_api_server() -> Any:
|
||
server_config_load = CONFIG_IMPORTS.get("_server_config.py")
|
||
load_mod = server_config_load.get("load_mod")
|
||
API_SERVER = load_mod(server_config_load.get("module"), "API_SERVER")
|
||
|
||
return API_SERVER
|
||
|
||
|
||
def __getattr__(name: str) -> Any:
|
||
if name == "log_verbose":
|
||
return _import_log_verbose()
|
||
elif name == "CHATCHAT_ROOT":
|
||
return _import_chatchat_root()
|
||
elif name == "DATA_PATH":
|
||
return _import_data_path()
|
||
elif name == "IMG_DIR":
|
||
return _import_img_dir()
|
||
elif name == "NLTK_DATA_PATH":
|
||
return _import_nltk_data_path()
|
||
elif name == "LOG_FORMAT":
|
||
return _import_log_format()
|
||
elif name == "LOG_PATH":
|
||
return _import_log_path()
|
||
elif name == "MEDIA_PATH":
|
||
return _import_media_path()
|
||
elif name == "BASE_TEMP_DIR":
|
||
return _import_base_temp_dir()
|
||
elif name == "DEFAULT_KNOWLEDGE_BASE":
|
||
return _import_default_knowledge_base()
|
||
elif name == "DEFAULT_VS_TYPE":
|
||
return _import_default_vs_type()
|
||
elif name == "CACHED_VS_NUM":
|
||
return _import_cached_vs_num()
|
||
elif name == "CACHED_MEMO_VS_NUM":
|
||
return _import_cached_memo_vs_num()
|
||
elif name == "CHUNK_SIZE":
|
||
return _import_chunk_size()
|
||
elif name == "OVERLAP_SIZE":
|
||
return _import_overlap_size()
|
||
elif name == "VECTOR_SEARCH_TOP_K":
|
||
return _import_vector_search_top_k()
|
||
elif name == "SCORE_THRESHOLD":
|
||
return _import_score_threshold()
|
||
elif name == "DEFAULT_SEARCH_ENGINE":
|
||
return _import_default_search_engine()
|
||
elif name == "SEARCH_ENGINE_TOP_K":
|
||
return _import_search_engine_top_k()
|
||
elif name == "ZH_TITLE_ENHANCE":
|
||
return _import_zh_title_enhance()
|
||
elif name == "PDF_OCR_THRESHOLD":
|
||
return _import_pdf_ocr_threshold()
|
||
elif name == "KB_INFO":
|
||
return _import_kb_info()
|
||
elif name == "KB_ROOT_PATH":
|
||
return _import_kb_root_path()
|
||
elif name == "DB_ROOT_PATH":
|
||
return _import_db_root_path()
|
||
elif name == "SQLALCHEMY_DATABASE_URI":
|
||
return _import_sqlalchemy_database_uri()
|
||
elif name == "kbs_config":
|
||
return _import_kbs_config()
|
||
elif name == "text_splitter_dict":
|
||
return _import_text_splitter_dict()
|
||
elif name == "TEXT_SPLITTER_NAME":
|
||
return _import_text_splitter_name()
|
||
elif name == "EMBEDDING_KEYWORD_FILE":
|
||
return _import_embedding_keyword_file()
|
||
elif name == "DEFAULT_LLM_MODEL":
|
||
return _import_default_llm_model()
|
||
elif name == "DEFAULT_EMBEDDING_MODEL":
|
||
return _import_default_embedding_model()
|
||
elif name == "Agent_MODEL":
|
||
return _import_agent_model()
|
||
elif name == "HISTORY_LEN":
|
||
return _import_history_len()
|
||
elif name == "MAX_TOKENS":
|
||
return _import_max_tokens()
|
||
elif name == "TEMPERATURE":
|
||
return _import_temperature()
|
||
elif name == "SUPPORT_AGENT_MODELS":
|
||
return _import_support_agent_models()
|
||
elif name == "LLM_MODEL_CONFIG":
|
||
return _import_llm_model_config()
|
||
elif name == "MODEL_PLATFORMS":
|
||
return _import_model_platforms()
|
||
elif name == "MODEL_PROVIDERS_CFG_PATH_CONFIG":
|
||
return _import_model_providers_cfg_path()
|
||
elif name == "MODEL_PROVIDERS_CFG_HOST":
|
||
return _import_model_providers_cfg_host()
|
||
elif name == "MODEL_PROVIDERS_CFG_PORT":
|
||
return _import_model_providers_cfg_port()
|
||
elif name == "TOOL_CONFIG":
|
||
return _import_tool_config()
|
||
elif name == "PROMPT_TEMPLATES":
|
||
return _import_prompt_templates()
|
||
elif name == "HTTPX_DEFAULT_TIMEOUT":
|
||
return _import_httpx_default_timeout()
|
||
elif name == "OPEN_CROSS_DOMAIN":
|
||
return _import_default_bind_host()
|
||
elif name == "WEBUI_SERVER":
|
||
return _import_webui_server()
|
||
elif name == "API_SERVER":
|
||
return _import_api_server()
|
||
|
||
|
||
VERSION = "v0.3.0-preview"
|
||
|
||
__all__ = [
|
||
"VERSION",
|
||
"log_verbose",
|
||
"CHATCHAT_ROOT",
|
||
"DATA_PATH",
|
||
"IMG_DIR",
|
||
"NLTK_DATA_PATH",
|
||
"LOG_FORMAT",
|
||
"LOG_PATH",
|
||
"MEDIA_PATH",
|
||
"BASE_TEMP_DIR",
|
||
"DEFAULT_KNOWLEDGE_BASE",
|
||
"DEFAULT_VS_TYPE",
|
||
"CACHED_VS_NUM",
|
||
"CACHED_MEMO_VS_NUM",
|
||
"CHUNK_SIZE",
|
||
"OVERLAP_SIZE",
|
||
"VECTOR_SEARCH_TOP_K",
|
||
"SCORE_THRESHOLD",
|
||
"DEFAULT_SEARCH_ENGINE",
|
||
"SEARCH_ENGINE_TOP_K",
|
||
"ZH_TITLE_ENHANCE",
|
||
"PDF_OCR_THRESHOLD",
|
||
"KB_INFO",
|
||
"KB_ROOT_PATH",
|
||
"DB_ROOT_PATH",
|
||
"SQLALCHEMY_DATABASE_URI",
|
||
"kbs_config",
|
||
"text_splitter_dict",
|
||
"TEXT_SPLITTER_NAME",
|
||
"EMBEDDING_KEYWORD_FILE",
|
||
"DEFAULT_LLM_MODEL",
|
||
"DEFAULT_EMBEDDING_MODEL",
|
||
"Agent_MODEL",
|
||
"HISTORY_LEN",
|
||
"MAX_TOKENS",
|
||
"TEMPERATURE",
|
||
"SUPPORT_AGENT_MODELS",
|
||
"LLM_MODEL_CONFIG",
|
||
"MODEL_PLATFORMS",
|
||
"MODEL_PROVIDERS_CFG_PATH_CONFIG",
|
||
"MODEL_PROVIDERS_CFG_HOST",
|
||
"MODEL_PROVIDERS_CFG_PORT",
|
||
"TOOL_CONFIG",
|
||
"PROMPT_TEMPLATES",
|
||
"HTTPX_DEFAULT_TIMEOUT",
|
||
"OPEN_CROSS_DOMAIN",
|
||
"WEBUI_SERVER",
|
||
"API_SERVER",
|
||
|
||
|
||
"ConfigBasic",
|
||
"ConfigBasicFactory",
|
||
"ConfigWorkSpace",
|
||
|
||
]
|