|
|
import argparse
|
|
|
import os
|
|
|
import sys
|
|
|
from dotenv import load_dotenv
|
|
|
from functools import lru_cache
|
|
|
from pydantic import computed_field
|
|
|
from pydantic_settings import BaseSettings
|
|
|
from typing import Literal
|
|
|
|
|
|
|
|
|
|
|
|
class GetConfig:
|
|
|
|
|
|
def __init__(self):
|
|
|
self.parse_cli_args()
|
|
|
|
|
|
@lru_cache()
|
|
|
def get_llm_config(self):
|
|
|
return LlmSettings()
|
|
|
|
|
|
@lru_cache()
|
|
|
def get_emb_config(self):
|
|
|
return EmbSettings()
|
|
|
|
|
|
@lru_cache()
|
|
|
def get_mysql_database_config(self):
|
|
|
"""
|
|
|
获取数据库配置
|
|
|
"""
|
|
|
# 实例化数据库配置模型
|
|
|
return MysqlDataBaseSettings()
|
|
|
|
|
|
@lru_cache()
|
|
|
def get_pgvector_database_config(self):
|
|
|
"""
|
|
|
获取数据库配置
|
|
|
"""
|
|
|
# 实例化数据库配置模型
|
|
|
return PgvectorDataBaseSettings()
|
|
|
|
|
|
@staticmethod
|
|
|
def parse_cli_args():
|
|
|
"""
|
|
|
解析命令行参数
|
|
|
"""
|
|
|
if 'uvicorn' in sys.argv[0]:
|
|
|
# 使用uvicorn启动时,命令行参数需要按照uvicorn的文档进行配置,无法自定义参数
|
|
|
pass
|
|
|
else:
|
|
|
# 使用argparse定义命令行参数
|
|
|
parser = argparse.ArgumentParser(description='命令行参数')
|
|
|
parser.add_argument('--env', type=str, default='', help='运行环境')
|
|
|
# 解析命令行参数
|
|
|
args = parser.parse_args()
|
|
|
# 设置环境变量,如果未设置命令行参数,默认APP_ENV为dev
|
|
|
os.environ['APP_ENV'] = args.env if args.env else 'dev'
|
|
|
# 读取运行环境
|
|
|
run_env = os.environ.get('APP_ENV', '')
|
|
|
# 运行环境未指定时默认加载.env.dev
|
|
|
env_file = '.env.dev'
|
|
|
# 运行环境不为空时按命令行参数加载对应.env文件
|
|
|
if run_env != '':
|
|
|
env_file = f'.env.{run_env}'
|
|
|
# 加载配置
|
|
|
load_dotenv(env_file)
|
|
|
print(f'当前运行环境为:{run_env}')
|
|
|
|
|
|
# 实例化获取配置类
|
|
|
get_config = GetConfig()
|
|
|
|
|
|
class LlmSettings:
|
|
|
"""
|
|
|
AI配置
|
|
|
"""
|
|
|
base_url: str = os.getenv('llm_base_url', '')
|
|
|
api_key: str = os.getenv('llm_api_key', '')
|
|
|
model_name: str = os.getenv('llm_model', '')
|
|
|
|
|
|
class EmbSettings:
|
|
|
"""
|
|
|
AI配置
|
|
|
"""
|
|
|
base_url: str = os.getenv('emb_base_url', '')
|
|
|
api_key: str = os.getenv('emb_api_key', '')
|
|
|
model_name: str = os.getenv('emb_model', '')
|
|
|
|
|
|
class MysqlDataBaseSettings:
|
|
|
"""
|
|
|
数据库配置
|
|
|
"""
|
|
|
# 数据库配置
|
|
|
db_host: str = os.getenv('MYSQL_DB_HOST', '')
|
|
|
db_port: int = int(os.getenv('MYSQL_DB_PORT', 33306))
|
|
|
db_username: str = os.getenv('MYSQL_DB_USERNAME', '')
|
|
|
db_password: str = os.getenv('MYSQL_DB_PASSWORD', '')
|
|
|
db_database: str = os.getenv('MYSQL_DB_DATABASE', '')
|
|
|
|
|
|
db_echo: bool = True
|
|
|
db_max_overflow: int = 10
|
|
|
db_pool_size: int = 50
|
|
|
db_pool_recycle: int = 3600
|
|
|
db_pool_timeout: int = 30
|
|
|
|
|
|
class PgvectorDataBaseSettings:
|
|
|
"""
|
|
|
数据库配置
|
|
|
"""
|
|
|
# 数据库配置
|
|
|
db_host: str = os.getenv('PG_DB_HOST', '')
|
|
|
db_port: int = os.getenv('PG_DB_PORT', 5432)
|
|
|
db_username: str = os.getenv('PG_DB_USERNAME', '')
|
|
|
db_password: str = os.getenv('PG_DB_PASSWORD', '')
|
|
|
db_database: str = os.getenv('PG_DB_DATABASE', '')
|
|
|
|
|
|
db_echo: bool = True
|
|
|
db_max_overflow: int = 10
|
|
|
db_pool_size: int = 50
|
|
|
db_pool_recycle: int = 3600
|
|
|
db_pool_timeout: int = 30
|
|
|
|
|
|
|
|
|
# mysql数据库配置
|
|
|
MysqlDataBaseConfig = get_config.get_mysql_database_config()
|
|
|
# pgvector数据库配置
|
|
|
PgvectorDataBaseConfig = get_config.get_pgvector_database_config()
|
|
|
|
|
|
LlmBaseConfig = get_config.get_llm_config()
|
|
|
EmbBaseConfig = get_config.get_emb_config() |