mirror of
https://github.com/dograh-hq/dograh.git
synced 2026-06-07 07:55:16 +02:00
If there are multiple telephony configurations, the form number should be initialized from the campaigns given telephonic configuration rather than the organization default telephonic configuration.
370 lines
13 KiB
Python
370 lines
13 KiB
Python
# generated by datamodel-codegen:
|
|
# filename: dograh-openapi-XXXXXX.json.k2orBArfVN
|
|
# timestamp: 2026-05-08T08:26:28+00:00
|
|
|
|
from __future__ import annotations
|
|
|
|
from enum import Enum
|
|
from typing import Annotated, Any
|
|
|
|
from pydantic import AwareDatetime, BaseModel, ConfigDict, Field
|
|
|
|
|
|
class CallDispositionCodes(BaseModel):
|
|
disposition_codes: Annotated[list[str] | None, Field(title='Disposition Codes')] = (
|
|
[]
|
|
)
|
|
|
|
|
|
class CreateWorkflowRequest(BaseModel):
|
|
name: Annotated[str, Field(title='Name')]
|
|
workflow_definition: Annotated[dict[str, Any], Field(title='Workflow Definition')]
|
|
|
|
|
|
class CreatedByResponse(BaseModel):
|
|
"""
|
|
Response schema for the user who created a tool.
|
|
"""
|
|
|
|
id: Annotated[int, Field(title='Id')]
|
|
provider_id: Annotated[str, Field(title='Provider Id')]
|
|
|
|
|
|
class CredentialResponse(BaseModel):
|
|
"""
|
|
Response schema for a webhook credential (never includes sensitive data).
|
|
"""
|
|
|
|
uuid: Annotated[str, Field(title='Uuid')]
|
|
name: Annotated[str, Field(title='Name')]
|
|
description: Annotated[str | None, Field(title='Description')]
|
|
credential_type: Annotated[str, Field(title='Credential Type')]
|
|
created_at: Annotated[AwareDatetime, Field(title='Created At')]
|
|
updated_at: Annotated[AwareDatetime | None, Field(title='Updated At')]
|
|
|
|
|
|
class DisplayOptions(BaseModel):
|
|
"""
|
|
Conditional visibility rules.
|
|
|
|
`show` keys are AND-combined: this property is visible only when EVERY
|
|
referenced field's value matches one of the listed values.
|
|
|
|
`hide` keys are OR-combined: this property is hidden when ANY referenced
|
|
field's value matches one of the listed values.
|
|
|
|
Example:
|
|
DisplayOptions(show={"extraction_enabled": [True]})
|
|
DisplayOptions(show={"greeting_type": ["audio"]})
|
|
"""
|
|
|
|
model_config = ConfigDict(
|
|
extra='forbid',
|
|
)
|
|
show: Annotated[dict[str, list[Any]] | None, Field(title='Show')] = None
|
|
hide: Annotated[dict[str, list[Any]] | None, Field(title='Hide')] = None
|
|
|
|
|
|
class DocumentResponseSchema(BaseModel):
|
|
"""
|
|
Response schema for document metadata.
|
|
"""
|
|
|
|
id: Annotated[int, Field(title='Id')]
|
|
document_uuid: Annotated[str, Field(title='Document Uuid')]
|
|
filename: Annotated[str, Field(title='Filename')]
|
|
file_size_bytes: Annotated[int, Field(title='File Size Bytes')]
|
|
file_hash: Annotated[str, Field(title='File Hash')]
|
|
mime_type: Annotated[str, Field(title='Mime Type')]
|
|
processing_status: Annotated[str, Field(title='Processing Status')]
|
|
processing_error: Annotated[str | None, Field(title='Processing Error')] = None
|
|
total_chunks: Annotated[int, Field(title='Total Chunks')]
|
|
retrieval_mode: Annotated[str | None, Field(title='Retrieval Mode')] = 'chunked'
|
|
custom_metadata: Annotated[dict[str, Any], Field(title='Custom Metadata')]
|
|
docling_metadata: Annotated[dict[str, Any], Field(title='Docling Metadata')]
|
|
source_url: Annotated[str | None, Field(title='Source Url')] = None
|
|
created_at: Annotated[AwareDatetime, Field(title='Created At')]
|
|
updated_at: Annotated[AwareDatetime, Field(title='Updated At')]
|
|
organization_id: Annotated[int, Field(title='Organization Id')]
|
|
created_by: Annotated[int, Field(title='Created By')]
|
|
is_active: Annotated[bool, Field(title='Is Active')]
|
|
|
|
|
|
class GraphConstraints(BaseModel):
|
|
"""
|
|
Per-node-type graph rules. WorkflowGraph enforces these at validation.
|
|
"""
|
|
|
|
model_config = ConfigDict(
|
|
extra='forbid',
|
|
)
|
|
min_incoming: Annotated[int | None, Field(title='Min Incoming')] = None
|
|
max_incoming: Annotated[int | None, Field(title='Max Incoming')] = None
|
|
min_outgoing: Annotated[int | None, Field(title='Min Outgoing')] = None
|
|
max_outgoing: Annotated[int | None, Field(title='Max Outgoing')] = None
|
|
|
|
|
|
class InitiateCallRequest(BaseModel):
|
|
workflow_id: Annotated[int, Field(title='Workflow Id')]
|
|
workflow_run_id: Annotated[int | None, Field(title='Workflow Run Id')] = None
|
|
phone_number: Annotated[str | None, Field(title='Phone Number')] = None
|
|
telephony_configuration_id: Annotated[
|
|
int | None, Field(title='Telephony Configuration Id')
|
|
] = None
|
|
from_phone_number_id: Annotated[int | None, Field(title='From Phone Number Id')] = (
|
|
None
|
|
)
|
|
|
|
|
|
class NodeCategory(Enum):
|
|
"""
|
|
Drives grouping in the AddNodePanel UI.
|
|
"""
|
|
|
|
call_node = 'call_node'
|
|
global_node = 'global_node'
|
|
trigger = 'trigger'
|
|
integration = 'integration'
|
|
|
|
|
|
class NodeExample(BaseModel):
|
|
"""
|
|
A worked example LLMs can pattern-match. Keep small and realistic.
|
|
"""
|
|
|
|
model_config = ConfigDict(
|
|
extra='forbid',
|
|
)
|
|
name: Annotated[str, Field(title='Name')]
|
|
description: Annotated[str | None, Field(title='Description')] = None
|
|
data: Annotated[dict[str, Any], Field(title='Data')]
|
|
|
|
|
|
class PropertyOption(BaseModel):
|
|
"""
|
|
An option in an `options` or `multi_options` dropdown.
|
|
"""
|
|
|
|
model_config = ConfigDict(
|
|
extra='forbid',
|
|
)
|
|
value: Annotated[str | int | bool | float, Field(title='Value')]
|
|
label: Annotated[str, Field(title='Label')]
|
|
description: Annotated[str | None, Field(title='Description')] = None
|
|
|
|
|
|
class PropertyType(Enum):
|
|
"""
|
|
Bounded vocabulary of property types the renderer dispatches on.
|
|
|
|
Adding a value here requires a matching arm in the frontend
|
|
`<PropertyInput>` switch and (where relevant) the SDK codegen template.
|
|
"""
|
|
|
|
string = 'string'
|
|
number = 'number'
|
|
boolean = 'boolean'
|
|
options = 'options'
|
|
multi_options = 'multi_options'
|
|
fixed_collection = 'fixed_collection'
|
|
json = 'json'
|
|
tool_refs = 'tool_refs'
|
|
document_refs = 'document_refs'
|
|
recording_ref = 'recording_ref'
|
|
credential_ref = 'credential_ref'
|
|
mention_textarea = 'mention_textarea'
|
|
url = 'url'
|
|
|
|
|
|
class RecordingResponseSchema(BaseModel):
|
|
"""
|
|
Response schema for a single recording.
|
|
"""
|
|
|
|
id: Annotated[int, Field(title='Id')]
|
|
recording_id: Annotated[str, Field(title='Recording Id')]
|
|
workflow_id: Annotated[int | None, Field(title='Workflow Id')] = None
|
|
organization_id: Annotated[int, Field(title='Organization Id')]
|
|
tts_provider: Annotated[str | None, Field(title='Tts Provider')] = None
|
|
tts_model: Annotated[str | None, Field(title='Tts Model')] = None
|
|
tts_voice_id: Annotated[str | None, Field(title='Tts Voice Id')] = None
|
|
transcript: Annotated[str, Field(title='Transcript')]
|
|
storage_key: Annotated[str, Field(title='Storage Key')]
|
|
storage_backend: Annotated[str, Field(title='Storage Backend')]
|
|
metadata: Annotated[dict[str, Any], Field(title='Metadata')]
|
|
created_by: Annotated[int, Field(title='Created By')]
|
|
created_at: Annotated[AwareDatetime, Field(title='Created At')]
|
|
is_active: Annotated[bool, Field(title='Is Active')]
|
|
|
|
|
|
class ToolResponse(BaseModel):
|
|
"""
|
|
Response schema for a tool.
|
|
"""
|
|
|
|
id: Annotated[int, Field(title='Id')]
|
|
tool_uuid: Annotated[str, Field(title='Tool Uuid')]
|
|
name: Annotated[str, Field(title='Name')]
|
|
description: Annotated[str | None, Field(title='Description')]
|
|
category: Annotated[str, Field(title='Category')]
|
|
icon: Annotated[str | None, Field(title='Icon')]
|
|
icon_color: Annotated[str | None, Field(title='Icon Color')]
|
|
status: Annotated[str, Field(title='Status')]
|
|
definition: Annotated[dict[str, Any], Field(title='Definition')]
|
|
created_at: Annotated[AwareDatetime, Field(title='Created At')]
|
|
updated_at: Annotated[AwareDatetime | None, Field(title='Updated At')]
|
|
created_by: CreatedByResponse | None = None
|
|
|
|
|
|
class UpdateWorkflowRequest(BaseModel):
|
|
name: Annotated[str | None, Field(title='Name')] = None
|
|
workflow_definition: Annotated[
|
|
dict[str, Any] | None, Field(title='Workflow Definition')
|
|
] = None
|
|
template_context_variables: Annotated[
|
|
dict[str, Any] | None, Field(title='Template Context Variables')
|
|
] = None
|
|
workflow_configurations: Annotated[
|
|
dict[str, Any] | None, Field(title='Workflow Configurations')
|
|
] = None
|
|
|
|
|
|
class ValidationError(BaseModel):
|
|
loc: Annotated[list[str | int], Field(title='Location')]
|
|
msg: Annotated[str, Field(title='Message')]
|
|
type: Annotated[str, Field(title='Error Type')]
|
|
input: Annotated[Any | None, Field(title='Input')] = None
|
|
ctx: Annotated[dict[str, Any] | None, Field(title='Context')] = None
|
|
|
|
|
|
class WorkflowListResponse(BaseModel):
|
|
"""
|
|
Lightweight response for workflow listings (excludes large fields).
|
|
"""
|
|
|
|
id: Annotated[int, Field(title='Id')]
|
|
name: Annotated[str, Field(title='Name')]
|
|
status: Annotated[str, Field(title='Status')]
|
|
created_at: Annotated[AwareDatetime, Field(title='Created At')]
|
|
total_runs: Annotated[int, Field(title='Total Runs')]
|
|
|
|
|
|
class WorkflowResponse(BaseModel):
|
|
id: Annotated[int, Field(title='Id')]
|
|
name: Annotated[str, Field(title='Name')]
|
|
status: Annotated[str, Field(title='Status')]
|
|
created_at: Annotated[AwareDatetime, Field(title='Created At')]
|
|
workflow_definition: Annotated[dict[str, Any], Field(title='Workflow Definition')]
|
|
current_definition_id: Annotated[int | None, Field(title='Current Definition Id')]
|
|
template_context_variables: Annotated[
|
|
dict[str, Any] | None, Field(title='Template Context Variables')
|
|
] = None
|
|
call_disposition_codes: CallDispositionCodes | None = None
|
|
total_runs: Annotated[int | None, Field(title='Total Runs')] = None
|
|
workflow_configurations: Annotated[
|
|
dict[str, Any] | None, Field(title='Workflow Configurations')
|
|
] = None
|
|
version_number: Annotated[int | None, Field(title='Version Number')] = None
|
|
version_status: Annotated[str | None, Field(title='Version Status')] = None
|
|
workflow_uuid: Annotated[str | None, Field(title='Workflow Uuid')] = None
|
|
|
|
|
|
class DocumentListResponseSchema(BaseModel):
|
|
"""
|
|
Response schema for list of documents.
|
|
"""
|
|
|
|
documents: Annotated[list[DocumentResponseSchema], Field(title='Documents')]
|
|
total: Annotated[int, Field(title='Total')]
|
|
limit: Annotated[int, Field(title='Limit')]
|
|
offset: Annotated[int, Field(title='Offset')]
|
|
|
|
|
|
class HTTPValidationError(BaseModel):
|
|
detail: Annotated[list[ValidationError] | None, Field(title='Detail')] = None
|
|
|
|
|
|
class PropertySpec(BaseModel):
|
|
"""
|
|
Single field on a node.
|
|
|
|
`description` is HUMAN-FACING — shown under the field in the edit
|
|
dialog. Keep it concise and explain what the field does.
|
|
|
|
`llm_hint` is LLM-FACING — appears only in the `get_node_type` MCP
|
|
response and in SDK schema output. Use it for catalog tool references
|
|
(e.g., "Use `list_recordings`"), array shape, expected value idioms,
|
|
or anything that would be noise in the UI. Optional; omit when the
|
|
`description` already suffices for both audiences.
|
|
"""
|
|
|
|
model_config = ConfigDict(
|
|
extra='forbid',
|
|
)
|
|
name: Annotated[str, Field(title='Name')]
|
|
type: PropertyType
|
|
display_name: Annotated[str, Field(title='Display Name')]
|
|
description: Annotated[str, Field(min_length=1, title='Description')]
|
|
"""
|
|
Human-facing explanation shown in the UI.
|
|
"""
|
|
llm_hint: Annotated[str | None, Field(title='Llm Hint')] = None
|
|
"""
|
|
LLM-only guidance; omitted from the UI.
|
|
"""
|
|
default: Annotated[Any | None, Field(title='Default')] = None
|
|
required: Annotated[bool | None, Field(title='Required')] = False
|
|
placeholder: Annotated[str | None, Field(title='Placeholder')] = None
|
|
display_options: DisplayOptions | None = None
|
|
options: Annotated[list[PropertyOption] | None, Field(title='Options')] = None
|
|
properties: Annotated[list[PropertySpec] | None, Field(title='Properties')] = None
|
|
min_value: Annotated[float | None, Field(title='Min Value')] = None
|
|
max_value: Annotated[float | None, Field(title='Max Value')] = None
|
|
min_length: Annotated[int | None, Field(title='Min Length')] = None
|
|
max_length: Annotated[int | None, Field(title='Max Length')] = None
|
|
pattern: Annotated[str | None, Field(title='Pattern')] = None
|
|
editor: Annotated[str | None, Field(title='Editor')] = None
|
|
extra: Annotated[dict[str, Any] | None, Field(title='Extra')] = None
|
|
|
|
|
|
class RecordingListResponseSchema(BaseModel):
|
|
"""
|
|
Response schema for list of recordings.
|
|
"""
|
|
|
|
recordings: Annotated[list[RecordingResponseSchema], Field(title='Recordings')]
|
|
total: Annotated[int, Field(title='Total')]
|
|
|
|
|
|
class NodeSpec(BaseModel):
|
|
"""
|
|
Single source of truth for a node type.
|
|
"""
|
|
|
|
model_config = ConfigDict(
|
|
extra='forbid',
|
|
)
|
|
name: Annotated[str, Field(title='Name')]
|
|
display_name: Annotated[str, Field(title='Display Name')]
|
|
description: Annotated[str, Field(min_length=1, title='Description')]
|
|
"""
|
|
Human-facing explanation shown in AddNodePanel.
|
|
"""
|
|
llm_hint: Annotated[str | None, Field(title='Llm Hint')] = None
|
|
"""
|
|
LLM-only guidance; omitted from the UI.
|
|
"""
|
|
category: NodeCategory
|
|
icon: Annotated[str, Field(title='Icon')]
|
|
version: Annotated[str | None, Field(title='Version')] = '1.0.0'
|
|
properties: Annotated[list[PropertySpec], Field(title='Properties')]
|
|
examples: Annotated[list[NodeExample] | None, Field(title='Examples')] = None
|
|
graph_constraints: GraphConstraints | None = None
|
|
|
|
|
|
class NodeTypesResponse(BaseModel):
|
|
spec_version: Annotated[str, Field(title='Spec Version')]
|
|
node_types: Annotated[list[NodeSpec], Field(title='Node Types')]
|
|
|
|
|
|
PropertySpec.model_rebuild()
|