modify: 插件配置读取修改
This commit is contained in:
@@ -90,20 +90,22 @@ async def create_workers(session, config, count=1, worker_manager=None):
|
|||||||
from chongming_database import Database
|
from chongming_database import Database
|
||||||
from chongming_stream_manager import StreamManager
|
from chongming_stream_manager import StreamManager
|
||||||
|
|
||||||
# 读取心跳配置
|
# 所有运行时配置均从 [workers.config] 及其子节读取
|
||||||
worker_config = config.get("worker", {}).get("heartbeat", {}) if isinstance(config, dict) else {}
|
data_dir = Path(config.get("data_dir", "./data"))
|
||||||
hb_interval = worker_config.get("interval", 5)
|
mediamtx_addr = config.get("mediamtx_addr", "rtsp://127.0.0.1:8554")
|
||||||
hb_timeout = worker_config.get("timeout", _default_timeout)
|
link_path = config.get("link_path", "/data/bm-app")
|
||||||
check_interval = worker_config.get("check_interval", 10)
|
|
||||||
mediamtx_addr = worker_config.get("mediamtx_addr", "rtsp://127.0.0.1:8554")
|
|
||||||
link_path = worker_config.get("link_path", "/data/bm-app")
|
|
||||||
|
|
||||||
# 设定全局变量
|
# 心跳配置
|
||||||
global heartbeat_timeout
|
heartbeat = config.get("heartbeat", {})
|
||||||
heartbeat_timeout = hb_timeout
|
hb_interval = heartbeat.get("interval", 5)
|
||||||
|
hb_timeout = heartbeat.get("timeout", _default_timeout)
|
||||||
|
check_interval = heartbeat.get("check_interval", 10)
|
||||||
|
|
||||||
|
# 告警保留配置
|
||||||
|
alarm_retention = config.get("alarm_retention", {})
|
||||||
|
alarm_max = alarm_retention.get("max_records", 0)
|
||||||
|
|
||||||
# 初始化数据库
|
# 初始化数据库
|
||||||
data_dir = Path(config.get("data_dir", "./data")) if isinstance(config, dict) else Path("./data")
|
|
||||||
db_path = data_dir / "aibox_sophon_adapter.db"
|
db_path = data_dir / "aibox_sophon_adapter.db"
|
||||||
db_path.parent.mkdir(parents=True, exist_ok=True)
|
db_path.parent.mkdir(parents=True, exist_ok=True)
|
||||||
|
|
||||||
@@ -113,21 +115,21 @@ async def create_workers(session, config, count=1, worker_manager=None):
|
|||||||
# 初始化视频流控制器
|
# 初始化视频流控制器
|
||||||
stream_manager = StreamManager(mediamtx_addr)
|
stream_manager = StreamManager(mediamtx_addr)
|
||||||
|
|
||||||
# 读取告警保留配置
|
|
||||||
alarm_retention_config = worker_config.get("alarm_retention", {}) if isinstance(config, dict) else {}
|
|
||||||
alarm_max = alarm_retention_config.get("max_records", 0)
|
|
||||||
|
|
||||||
# upload 根目录(用于清理告警关联视频)
|
# upload 根目录(用于清理告警关联视频)
|
||||||
upload_root_path = config.get("data_dir", "./data/uploads") if isinstance(config, dict) else "./data/uploads"
|
upload_root_path = str(data_dir / "uploads")
|
||||||
|
|
||||||
|
# 设定模块级全局变量(供 _check_offline_devices 使用)
|
||||||
|
global heartbeat_timeout
|
||||||
|
heartbeat_timeout = hb_timeout
|
||||||
|
|
||||||
# 初始化外部 MQTT 转发客户端
|
# 初始化外部 MQTT 转发客户端
|
||||||
mqtt_fwd_config = worker_config.get("mqtt_forward", {}) if isinstance(config, dict) else {}
|
mqtt_fwd = config.get("mqtt_forward", {})
|
||||||
mqtt_fwd_enabled = mqtt_fwd_config.get("enabled", False)
|
mqtt_fwd_enabled = mqtt_fwd.get("enabled", False)
|
||||||
mqtt_fwd_client = None
|
mqtt_fwd_client = None
|
||||||
if mqtt_fwd_enabled:
|
if mqtt_fwd_enabled:
|
||||||
from .mqtt_forward import MQTTForwardClient
|
from .mqtt_forward import MQTTForwardClient
|
||||||
mqtt_fwd_uri = mqtt_fwd_config.get("uri", "")
|
mqtt_fwd_uri = mqtt_fwd.get("uri", "")
|
||||||
mqtt_fwd_topic = mqtt_fwd_config.get("topic", "/board_ping")
|
mqtt_fwd_topic = mqtt_fwd.get("topic", "/board_ping")
|
||||||
if mqtt_fwd_uri:
|
if mqtt_fwd_uri:
|
||||||
mqtt_fwd_client = MQTTForwardClient(uri=mqtt_fwd_uri, topic=mqtt_fwd_topic)
|
mqtt_fwd_client = MQTTForwardClient(uri=mqtt_fwd_uri, topic=mqtt_fwd_topic)
|
||||||
try:
|
try:
|
||||||
|
|||||||
+19
-3
@@ -48,10 +48,26 @@ async def create_workers(session, config, count=1, worker_manager=None):
|
|||||||
raise
|
raise
|
||||||
|
|
||||||
base_url = config.get("base_url", "https://ark.cn-beijing.volces.com/api/v3")
|
base_url = config.get("base_url", "https://ark.cn-beijing.volces.com/api/v3")
|
||||||
os.environ["DOUBAO_BASE_URL"] = base_url
|
# ra_url 为远程证明(安全令牌)端点地址,可能与推理 base_url 不同
|
||||||
logger.info("豆包 AICC base_url: %s", base_url)
|
# 若不单独配置则默认使用 base_url 的域名 + /v1/security/token
|
||||||
|
ra_url = config.get("ra_url", base_url)
|
||||||
|
ak = config.get("ak", "")
|
||||||
|
sk = config.get("sk", "")
|
||||||
|
ra_service_name = config.get("ra_service_name", "AICC.ConfidentialInference")
|
||||||
|
ra_policy_id = config.get("ra_policy_id", "router_policy")
|
||||||
|
|
||||||
aicc_config = AICCConfig(ra_url=base_url, auth_token=api_key)
|
os.environ["DOUBAO_BASE_URL"] = base_url
|
||||||
|
logger.info("豆包 AICC base_url: %s, ra_url: %s, ra_service_name: %s, ra_policy_id: %s",
|
||||||
|
base_url, ra_url, ra_service_name, ra_policy_id)
|
||||||
|
|
||||||
|
aicc_config = AICCConfig(
|
||||||
|
ra_url=ra_url,
|
||||||
|
auth_token=api_key,
|
||||||
|
ak=ak,
|
||||||
|
sk=sk,
|
||||||
|
aicc_llm_service_name=ra_service_name,
|
||||||
|
policy_id=ra_policy_id,
|
||||||
|
)
|
||||||
client = AsyncOpenAI(
|
client = AsyncOpenAI(
|
||||||
api_key=api_key,
|
api_key=api_key,
|
||||||
base_url=base_url,
|
base_url=base_url,
|
||||||
|
|||||||
@@ -56,5 +56,25 @@ async def analyze(request: AnalyzePostRequest) -> AnalyzePostResponse:
|
|||||||
logger.info("分析完成: 结果长度=%d", len(result) if result else 0)
|
logger.info("分析完成: 结果长度=%d", len(result) if result else 0)
|
||||||
return AnalyzePostResponse(result=result) # type: ignore
|
return AnalyzePostResponse(result=result) # type: ignore
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
error_msg = str(e)
|
||||||
|
# 针对 AICC 安全通道密钥缺失,给出明确提示
|
||||||
|
# KeyMissingError 可能被包装在 APIConnectionError 的 __cause__ 链中
|
||||||
|
is_key_missing = (
|
||||||
|
"KeyMissingError" in type(e).__name__
|
||||||
|
or "Can not get key" in error_msg
|
||||||
|
or any("KeyMissingError" in type(c).__name__ for c in [getattr(e, '__cause__', None), getattr(e, '__context__', None)] if c is not None)
|
||||||
|
)
|
||||||
|
if is_key_missing:
|
||||||
|
logger.error(
|
||||||
|
"AICC 安全通道密钥获取失败,请检查: "
|
||||||
|
"1) api_key 是否有效 "
|
||||||
|
"2) ra_url(安全令牌地址)是否正确 "
|
||||||
|
"3) APIGateway /v1/security/token 端点是否可达"
|
||||||
|
)
|
||||||
|
return AnalyzePostResponse(
|
||||||
|
result="",
|
||||||
|
error="AICC 安全通道初始化失败:无法获取加密密钥。"
|
||||||
|
"请检查 api_key 有效性及安全令牌服务 (/v1/security/token) 连通性。"
|
||||||
|
)
|
||||||
logger.error("调用豆包API失败: %s", e, exc_info=True)
|
logger.error("调用豆包API失败: %s", e, exc_info=True)
|
||||||
return AnalyzePostResponse(result="", error=f"调用豆包API失败: {str(e)}")
|
return AnalyzePostResponse(result="", error=f"调用豆包API失败: {error_msg}")
|
||||||
Reference in New Issue
Block a user