Files
prod-end-2026/backend/app/schemas/capability_sch.py
T
2026-03-17 18:32:44 +03:00

74 lines
2.1 KiB
Python

from __future__ import annotations
from datetime import datetime
from typing import Any
from uuid import UUID
from pydantic import BaseModel, ConfigDict, Field
from app.schemas.action_sch import ActionIngestItemResponse
class CapabilityDataFormat(BaseModel):
parameter_locations: list[str] = []
request_content_types: list[str] = []
request_schema_type: str | None = None
response_content_types: list[str] = []
response_schema_types: list[str] = []
class CapabilityResponse(BaseModel):
id: UUID
user_id: UUID | None = None
action_id: UUID | None = None
type: str = "ATOMIC"
name: str
description: str | None = None
input_schema: dict[str, Any] | None = None
output_schema: dict[str, Any] | None = None
recipe: dict[str, Any] | None = None
data_format: CapabilityDataFormat | None = None
created_at: datetime
updated_at: datetime
model_config = ConfigDict(from_attributes=True)
class CapabilityIngestItemResponse(BaseModel):
id: UUID
user_id: UUID | None = None
action_id: UUID | None = None
type: str = "ATOMIC"
name: str
description: str | None = None
model_config = ConfigDict(from_attributes=True)
class ActionIngestWithCapabilitiesResponse(BaseModel):
succeeded_count: int
failed_count: int
created_capabilities_count: int
succeeded_actions: list[ActionIngestItemResponse]
failed_actions: list[ActionIngestItemResponse]
capabilities: list[CapabilityIngestItemResponse]
class CompositeCapabilityRecipeStepCreate(BaseModel):
step: int = Field(ge=1)
capability_id: UUID
inputs: dict[str, str] = Field(default_factory=dict)
class CompositeCapabilityRecipeCreate(BaseModel):
version: int = 1
steps: list[CompositeCapabilityRecipeStepCreate] = Field(default_factory=list)
class CreateCompositeCapabilityRequest(BaseModel):
name: str = Field(min_length=1, max_length=255)
description: str | None = None
input_schema: dict[str, Any] | None = None
output_schema: dict[str, Any] | None = None
recipe: CompositeCapabilityRecipeCreate