2026-10-01 13:38:03 +08:00
|
|
|
"""Contracts for BR-61..65; no client supplied identity, domain or release state."""
|
|
|
|
|
from typing import Literal
|
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
|
|
|
|
|
|
class Input(BaseModel):
|
|
|
|
|
model_config = ConfigDict(extra='forbid')
|
|
|
|
|
|
|
|
|
|
class QueryInput(Input):
|
|
|
|
|
mode: Literal['filters', 'natural', 'sql'] = 'filters'
|
|
|
|
|
text: str = Field(default='', max_length=4000)
|
|
|
|
|
filters: dict = Field(default_factory=dict)
|
|
|
|
|
|
|
|
|
|
class SelectionInput(Input):
|
|
|
|
|
preview_id: str = Field(min_length=1, max_length=180)
|
|
|
|
|
selected_ids: list[str] | None = Field(default=None, max_length=240)
|
|
|
|
|
|
|
|
|
|
class ExtractionInput(Input):
|
|
|
|
|
project_id: str = Field(min_length=1, max_length=180)
|
|
|
|
|
selection_id: str = Field(min_length=1, max_length=180)
|
|
|
|
|
kind: Literal['skill', 'rule_set']
|
|
|
|
|
requirement: str = Field(default='', max_length=2000)
|
|
|
|
|
|
|
|
|
|
class PackageFile(Input):
|
|
|
|
|
path: str = Field(min_length=1, max_length=512)
|
|
|
|
|
content_base64: str = Field(max_length=2800000)
|
|
|
|
|
|
|
|
|
|
class PackageInput(Input):
|
|
|
|
|
project_id: str = Field(min_length=1, max_length=180)
|
|
|
|
|
required_field: str | None = Field(default=None, max_length=180)
|
|
|
|
|
files: list[PackageFile] = Field(min_length=1, max_length=100)
|
|
|
|
|
|
|
|
|
|
class Proposal(Input):
|
|
|
|
|
title: str = Field(min_length=1, max_length=200)
|
|
|
|
|
description: str = Field(min_length=1, max_length=2000)
|
|
|
|
|
action: str = Field(min_length=1, max_length=2000)
|
|
|
|
|
exceptions: str = Field(min_length=1, max_length=2000)
|
|
|
|
|
field: str = Field(min_length=1, max_length=180)
|
|
|
|
|
operator: Literal['lt', 'lte', 'gt', 'gte', 'eq'] = 'lt'
|
|
|
|
|
threshold: str | None = Field(default=None, max_length=40)
|
2026-10-01 14:13:58 +08:00
|
|
|
|
|
|
|
|
class ModelSettingsInput(Input):
|
|
|
|
|
endpoint: str = Field(min_length=1, max_length=500)
|
|
|
|
|
name: str = Field(min_length=1, max_length=160)
|
|
|
|
|
api_key: str | None = Field(default=None, max_length=1000)
|