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

105 lines
2.9 KiB
Python

from __future__ import annotations
from datetime import datetime
from typing import Any, Literal
from uuid import UUID
from pydantic import BaseModel, ConfigDict, Field
class PipelineInputTypeFromPrevious(BaseModel):
from_step: int
type: str
class PipelineStepEndpoint(BaseModel):
name: str
capability_id: UUID
action_id: UUID | None = None
type: str | None = None
input_type: str | dict[str, Any] | None = None
output_type: str | dict[str, Any] | None = None
class PipelineGraphNode(BaseModel):
step: int
name: str
description: str | None = None
input_connected_from: list[int] = Field(default_factory=list)
output_connected_to: list[int] = Field(default_factory=list)
input_data_type_from_previous: list[PipelineInputTypeFromPrevious] = Field(default_factory=list)
external_inputs: list[str] = Field(default_factory=list)
endpoints: list[PipelineStepEndpoint] = Field(default_factory=list)
class PipelineGraphEdge(BaseModel):
from_step: int
to_step: int
type: str
class PipelineGenerateRequest(BaseModel):
dialog_id: UUID
message: str = Field(min_length=1)
capability_ids: list[UUID] | None = None
class PipelineGenerateResponse(BaseModel):
status: Literal["ready", "needs_input", "cannot_build"]
message_ru: str
chat_reply_ru: str
pipeline_id: UUID | None = None
nodes: list[PipelineGraphNode] = Field(default_factory=list)
edges: list[PipelineGraphEdge] = Field(default_factory=list)
missing_requirements: list[str] = Field(default_factory=list)
context_summary: str | None = None
class PipelineGraphUpdateRequest(BaseModel):
nodes: list[PipelineGraphNode] = Field(default_factory=list)
edges: list[PipelineGraphEdge] = Field(default_factory=list)
class PipelineGraphUpdateResponse(BaseModel):
pipeline_id: UUID
nodes: list[PipelineGraphNode] = Field(default_factory=list)
edges: list[PipelineGraphEdge] = Field(default_factory=list)
updated_at: datetime
class DialogResetRequest(BaseModel):
dialog_id: UUID
class DialogResetResponse(BaseModel):
status: Literal["ok"]
message_ru: str
class PipelineDialogListItemResponse(BaseModel):
dialog_id: UUID
title: str | None = None
last_status: str | None = None
last_pipeline_id: UUID | None = None
last_message_preview: str | None = None
created_at: datetime
updated_at: datetime
model_config = ConfigDict(from_attributes=True)
class PipelineDialogMessageResponse(BaseModel):
id: UUID
role: Literal["user", "assistant"]
content: str
assistant_payload: dict[str, Any] | None = None
created_at: datetime
model_config = ConfigDict(from_attributes=True)
class PipelineDialogHistoryResponse(BaseModel):
dialog_id: UUID
title: str | None = None
messages: list[PipelineDialogMessageResponse] = Field(default_factory=list)