mirror of
https://github.com/langgenius/dify.git
synced 2026-11-12 06:11:12 +08:00
68 lines
2.2 KiB
Python
68 lines
2.2 KiB
Python
"""Safe Workspace policy DTOs: native references and ordinary generation controls."""
|
|
|
|
from typing import Annotated, Any, Literal
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictInt, StringConstraints, model_validator
|
|
|
|
from fields.base import ResponseModel
|
|
from services.dify_builder.application.cognition_policy import CognitionModel, CognitionPolicy
|
|
|
|
Reference = Annotated[str, StringConstraints(min_length=1, max_length=255)]
|
|
|
|
|
|
class CognitionModelPayload(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
id: Reference
|
|
provider: Reference
|
|
name: Reference
|
|
mode: Literal["chat", "completion"]
|
|
completion_params: dict[str, Any] = Field(default_factory=dict)
|
|
|
|
@model_validator(mode="after")
|
|
def validate_parameters(self):
|
|
CognitionModel(**self.model_dump())
|
|
return self
|
|
|
|
|
|
class DifyBuilderPolicyPayload(BaseModel):
|
|
model_config = ConfigDict(extra="forbid")
|
|
expected_revision: Annotated[StrictInt, Field(ge=0)]
|
|
enabled: StrictBool
|
|
models: Annotated[list[CognitionModelPayload], Field(max_length=20)]
|
|
default_model_id: Reference | None
|
|
fallback_model_ids: Annotated[list[Reference], Field(max_length=19)] = Field(default_factory=list)
|
|
|
|
def policy(self) -> CognitionPolicy:
|
|
return CognitionPolicy(
|
|
self.enabled,
|
|
tuple(CognitionModel(**m.model_dump()) for m in self.models),
|
|
self.default_model_id,
|
|
tuple(self.fallback_model_ids),
|
|
0,
|
|
"explicit",
|
|
)
|
|
|
|
|
|
class CognitionModelResponse(ResponseModel):
|
|
id: str
|
|
provider: str
|
|
name: str
|
|
mode: str
|
|
completion_params: dict[str, Any]
|
|
health: Literal["configured", "unavailable", "unknown"]
|
|
|
|
|
|
class DifyBuilderPolicyResponse(ResponseModel):
|
|
enabled: bool
|
|
models: list[CognitionModelResponse]
|
|
default_model_id: str | None
|
|
fallback_model_ids: list[str]
|
|
revision: int
|
|
source: Literal["explicit", "workspace_default"]
|
|
available: bool
|
|
reason_code: Literal["builder_disabled", "model_unavailable", "model_availability_unknown"] | None
|
|
|
|
|
|
class DifyBuilderAvailabilityResponse(DifyBuilderPolicyResponse):
|
|
"""The same safe availability projection after App-scoped admission."""
|