diff --git a/api/controllers/console/app/app.py b/api/controllers/console/app/app.py index 8bb4d40778..bfe91bbb61 100644 --- a/api/controllers/console/app/app.py +++ b/api/controllers/console/app/app.py @@ -146,7 +146,14 @@ class AppApiStatusPayload(BaseModel): class AppTracePayload(BaseModel): enabled: bool = Field(..., description="Enable or disable tracing") - tracing_provider: str = Field(..., description="Tracing provider") + tracing_provider: str | None = Field(default=None, description="Tracing provider") + + @field_validator("tracing_provider") + @classmethod + def validate_tracing_provider(cls, value: str | None, info) -> str | None: + if info.data.get("enabled") and not value: + raise ValueError("tracing_provider is required when enabled is True") + return value def reg(cls: type[BaseModel]): diff --git a/api/core/ops/ops_trace_manager.py b/api/core/ops/ops_trace_manager.py index ce2b0239cd..f45f15a6da 100644 --- a/api/core/ops/ops_trace_manager.py +++ b/api/core/ops/ops_trace_manager.py @@ -377,20 +377,20 @@ class OpsTraceManager: return app_model_config @classmethod - def update_app_tracing_config(cls, app_id: str, enabled: bool, tracing_provider: str): + def update_app_tracing_config(cls, app_id: str, enabled: bool, tracing_provider: str | None): """ Update app tracing config :param app_id: app id :param enabled: enabled - :param tracing_provider: tracing provider + :param tracing_provider: tracing provider (None when disabling) :return: """ # auth check - try: - if enabled or tracing_provider is not None: + if tracing_provider is not None: + try: provider_config_map[tracing_provider] - except KeyError: - raise ValueError(f"Invalid tracing provider: {tracing_provider}") + except KeyError: + raise ValueError(f"Invalid tracing provider: {tracing_provider}") app_config: App | None = db.session.query(App).where(App.id == app_id).first() if not app_config: