feat: ProviderOpsConfig 支持独立存储 base_url

将 base_url 作为 ProviderOpsConfig 的独立字段存储,
获取时优先读取配置中的值,否则回退到 endpoint/provider。
This commit is contained in:
fawney19
2026-01-18 13:20:14 +08:00
parent aa57f78561
commit e2e14fd09c
3 changed files with 19 additions and 15 deletions

View File

@@ -217,19 +217,19 @@ async def get_provider_ops_config(
is_configured=False, is_configured=False,
) )
# 获取 base_url # 获取 base_url:优先从 provider_ops 配置读取,否则回退到 endpoint/provider
provider = db.query(Provider).filter(Provider.id == provider_id).first() base_url = config.base_url
base_url = None if not base_url:
if provider: provider = db.query(Provider).filter(Provider.id == provider_id).first()
provider_config = provider.config or {} if provider:
# base_url 可能存储在 provider_ops 配置中,也可能从 provider 获取 if provider.endpoints:
if provider.endpoints: for endpoint in provider.endpoints:
for endpoint in provider.endpoints: if endpoint.base_url:
if endpoint.base_url: base_url = endpoint.base_url
base_url = endpoint.base_url break
break if not base_url:
if not base_url: provider_config = provider.config or {}
base_url = provider_config.get("base_url") or provider.website base_url = provider_config.get("base_url") or provider.website
# 获取脱敏后的凭据 # 获取脱敏后的凭据
masked_credentials = service.get_masked_credentials(config.connector_credentials) masked_credentials = service.get_masked_credentials(config.connector_credentials)
@@ -265,6 +265,7 @@ async def save_provider_ops_config(
# 构建配置对象 # 构建配置对象
config = ProviderOpsConfig( config = ProviderOpsConfig(
architecture_id=request.architecture_id, architecture_id=request.architecture_id,
base_url=request.base_url,
connector_auth_type=ConnectorAuthType(request.connector.auth_type), connector_auth_type=ConnectorAuthType(request.connector.auth_type),
connector_config=request.connector.config, connector_config=request.connector.config,
connector_credentials=credentials, connector_credentials=credentials,

View File

@@ -177,8 +177,8 @@ class ProviderOpsService:
registry = get_registry() registry = get_registry()
architecture = registry.get_or_default(config.architecture_id) architecture = registry.get_or_default(config.architecture_id)
# 获取 base_url # 获取 base_url:优先从 config 读取
base_url = self._get_provider_base_url(provider) base_url = config.base_url or self._get_provider_base_url(provider)
if not base_url: if not base_url:
return False, "Provider 未配置 base_url" return False, "Provider 未配置 base_url"

View File

@@ -114,6 +114,7 @@ class ProviderOpsConfig:
"""Provider 操作配置(存储在 Provider.config['provider_ops'] 中)""" """Provider 操作配置(存储在 Provider.config['provider_ops'] 中)"""
architecture_id: str = "generic_api" architecture_id: str = "generic_api"
base_url: Optional[str] = None # API 基础地址
# 连接器配置 # 连接器配置
connector_auth_type: ConnectorAuthType = ConnectorAuthType.API_KEY connector_auth_type: ConnectorAuthType = ConnectorAuthType.API_KEY
@@ -134,6 +135,7 @@ class ProviderOpsConfig:
return cls( return cls(
architecture_id=data.get("architecture_id", "generic_api"), architecture_id=data.get("architecture_id", "generic_api"),
base_url=data.get("base_url"),
connector_auth_type=ConnectorAuthType( connector_auth_type=ConnectorAuthType(
data.get("connector", {}).get("auth_type", "api_key") data.get("connector", {}).get("auth_type", "api_key")
), ),
@@ -147,6 +149,7 @@ class ProviderOpsConfig:
"""转换为字典(用于存储)""" """转换为字典(用于存储)"""
return { return {
"architecture_id": self.architecture_id, "architecture_id": self.architecture_id,
"base_url": self.base_url,
"connector": { "connector": {
"auth_type": self.connector_auth_type.value, "auth_type": self.connector_auth_type.value,
"config": self.connector_config, "config": self.connector_config,