Files
2026-09-18 15:26:19 +08:00

182 lines
4.4 KiB
Python

from datetime import datetime
from typing import Any
from uuid import UUID
from ninja import Schema
class ModelProviderIn(Schema):
name: str
base_url: str
api_key: str
enabled: bool = True
default_timeout_seconds: int = 60
image_egress_approved: bool = False
class ModelProviderUpdateIn(Schema):
name: str | None = None
base_url: str | None = None
api_key: str | None = None
clear_api_key: bool = False
enabled: bool | None = None
default_timeout_seconds: int | None = None
image_egress_approved: bool | None = None
class ModelProviderOut(Schema):
id: int
name: str
base_url: str
enabled: bool
default_timeout_seconds: int
credential_set: bool
credential_masked: str
image_egress_approved: bool
image_egress_approved_by: str | None
image_egress_approved_at: datetime | None
credential_updated_at: datetime | None
credential_updated_by: str | None
archived_at: datetime | None
archived_by: str | None
deployment_count: int = 0
active_deployment_count: int = 0
effective_status: str
created_at: datetime
updated_at: datetime
class ModelDeploymentIn(Schema):
provider_id: int
display_name: str
model_name: str
capability: str = "text_chat"
default_temperature: float = 0.2
max_output_tokens: int = 2048
structured_output_mode: str = "unconfigured"
enabled: bool = True
class ModelDeploymentUpdateIn(Schema):
display_name: str | None = None
model_name: str | None = None
capability: str | None = None
default_temperature: float | None = None
max_output_tokens: int | None = None
structured_output_mode: str | None = None
enabled: bool | None = None
class ModelDeploymentOut(Schema):
id: int
provider_id: int
provider_name: str
display_name: str
model_name: str
capability: str
default_temperature: float
max_output_tokens: int
structured_output_mode: str
structured_output_test_status: str
structured_output_verified_at: datetime | None
structured_output_test_message: str
structured_output_metrics: dict[str, Any]
enabled: bool
effective_status: str
provider_effective_status: str
reference_summary: dict[str, int]
archived_at: datetime | None
archived_by: str | None
archived_via_provider: bool
class ModelProviderPageOut(Schema):
items: list[ModelProviderOut]
page: int
page_size: int
total: int
total_pages: int
class ModelDeploymentPageOut(Schema):
items: list[ModelDeploymentOut]
page: int
page_size: int
total: int
total_pages: int
class ModelDeploymentOptionOut(Schema):
id: int
provider_id: int
provider_name: str
display_name: str
model_name: str
capability: str
default_temperature: float
max_output_tokens: int
structured_output_mode: str
structured_output_test_status: str
structured_output_verified_at: datetime | None
structured_output_test_message: str
enabled: bool
class ModelTestIn(Schema):
prompt: str = "请回复:模型连接正常"
class ModelInvocationOut(Schema):
public_id: UUID
deployment_id: int | None
invocation_type: str
status: str
model_snapshot: dict[str, Any]
output_text: str
input_tokens: int | None
output_tokens: int | None
duration_ms: int
retry_count: int
error_code: str
error_message: str
created_at: datetime
started_at: datetime | None
finished_at: datetime | None
diagnostics_scrubbed_at: datetime | None = None
diagnostics_expires_at: datetime | None = None
diagnostics_available: bool = True
deployment_display_name: str | None = None
provider_name: str | None = None
model_snapshot_summary: dict[str, Any] = {}
class ModelInvocationPageOut(Schema):
items: list[ModelInvocationOut]
page: int
page_size: int
total: int
total_pages: int
class ModelInvocationDiagnosticsOut(Schema):
public_id: UUID
input_snapshot: dict[str, Any]
output_text: str
diagnostics_scrubbed_at: datetime | None
diagnostics_expires_at: datetime
diagnostics_available: bool
class DeletionImpactOut(Schema):
suggested_action: str
deployment_count: int
agent_version_count: int
step_binding_count: int
run_step_count: int
invocation_count: int
class LifecycleResultOut(Schema):
result: str
impact: DeletionImpactOut