Upload 2 files
Browse files- app/models/catalog.py +33 -0
- app/models/workflow.py +10 -6
app/models/catalog.py
CHANGED
|
@@ -32,3 +32,36 @@ class ProjectSummary(BaseModel):
|
|
| 32 |
description: str | None = None
|
| 33 |
workflow_count: int = 0
|
| 34 |
updated_at: str
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
description: str | None = None
|
| 33 |
workflow_count: int = 0
|
| 34 |
updated_at: str
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
class DashboardUser(BaseModel):
|
| 38 |
+
name: str
|
| 39 |
+
email: str | None = None
|
| 40 |
+
avatar_url: str | None = None
|
| 41 |
+
|
| 42 |
+
|
| 43 |
+
class DashboardStats(BaseModel):
|
| 44 |
+
workflows: int = 0
|
| 45 |
+
projects: int = 0
|
| 46 |
+
active_workflows: int = 0
|
| 47 |
+
executions: int = 0
|
| 48 |
+
success_rate: float | None = None
|
| 49 |
+
ai_generations: int = 0
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
class DashboardWorkflow(BaseModel):
|
| 53 |
+
id: str
|
| 54 |
+
name: str
|
| 55 |
+
project_name: str | None = None
|
| 56 |
+
updated_at: str
|
| 57 |
+
node_count: int = 0
|
| 58 |
+
is_active: bool = False
|
| 59 |
+
favorite: bool = False
|
| 60 |
+
|
| 61 |
+
|
| 62 |
+
class DashboardSummary(BaseModel):
|
| 63 |
+
workspace_name: str
|
| 64 |
+
user: DashboardUser
|
| 65 |
+
stats: DashboardStats
|
| 66 |
+
workflows: list[DashboardWorkflow] = Field(default_factory=list)
|
| 67 |
+
templates: list[TemplateSummary] = Field(default_factory=list)
|
app/models/workflow.py
CHANGED
|
@@ -9,8 +9,8 @@ class Position(BaseModel):
|
|
| 9 |
y: float
|
| 10 |
|
| 11 |
|
| 12 |
-
class
|
| 13 |
-
id: str =
|
| 14 |
name: str
|
| 15 |
type: str
|
| 16 |
|
|
@@ -26,7 +26,7 @@ class WorkflowNodeData(BaseModel):
|
|
| 26 |
]
|
| 27 |
subtitle: str | None = Field(default=None, max_length=256)
|
| 28 |
parameters: dict[str, Any] = Field(default_factory=dict)
|
| 29 |
-
credentials: dict[str,
|
| 30 |
disabled: bool = False
|
| 31 |
issues: int = 0
|
| 32 |
|
|
@@ -87,8 +87,13 @@ class WorkflowDocument(BaseModel):
|
|
| 87 |
|
| 88 |
class GenerateWorkflowRequest(BaseModel):
|
| 89 |
prompt: str = Field(min_length=10, max_length=20_000)
|
| 90 |
-
provider:
|
| 91 |
-
model: str | None =
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 92 |
|
| 93 |
|
| 94 |
class GenerateWorkflowResponse(BaseModel):
|
|
@@ -255,7 +260,6 @@ class WorkflowDiff(BaseModel):
|
|
| 255 |
|
| 256 |
class ShareRequest(BaseModel):
|
| 257 |
workflow_id: str
|
| 258 |
-
workflow: WorkflowDocument | None = None
|
| 259 |
permission: Literal["view", "copy"] = "view"
|
| 260 |
expires_in_days: int | None = Field(default=30, ge=1, le=365)
|
| 261 |
|
|
|
|
| 9 |
y: float
|
| 10 |
|
| 11 |
|
| 12 |
+
class CredentialReference(BaseModel):
|
| 13 |
+
id: str | None = None
|
| 14 |
name: str
|
| 15 |
type: str
|
| 16 |
|
|
|
|
| 26 |
]
|
| 27 |
subtitle: str | None = Field(default=None, max_length=256)
|
| 28 |
parameters: dict[str, Any] = Field(default_factory=dict)
|
| 29 |
+
credentials: dict[str, CredentialReference] | None = None
|
| 30 |
disabled: bool = False
|
| 31 |
issues: int = 0
|
| 32 |
|
|
|
|
| 87 |
|
| 88 |
class GenerateWorkflowRequest(BaseModel):
|
| 89 |
prompt: str = Field(min_length=10, max_length=20_000)
|
| 90 |
+
provider: Literal["openai", "gemini", "openrouter", "deterministic"] | None = None
|
| 91 |
+
model: str | None = Field(
|
| 92 |
+
default=None,
|
| 93 |
+
min_length=1,
|
| 94 |
+
max_length=200,
|
| 95 |
+
pattern=r"^[A-Za-z0-9][A-Za-z0-9._:/-]*$",
|
| 96 |
+
)
|
| 97 |
|
| 98 |
|
| 99 |
class GenerateWorkflowResponse(BaseModel):
|
|
|
|
| 260 |
|
| 261 |
class ShareRequest(BaseModel):
|
| 262 |
workflow_id: str
|
|
|
|
| 263 |
permission: Literal["view", "copy"] = "view"
|
| 264 |
expires_in_days: int | None = Field(default=30, ge=1, le=365)
|
| 265 |
|