PMFlow/backend/app/schemas/prompt_assets.py

57 lines
1.7 KiB
Python

from __future__ import annotations
from typing import Optional
from pydantic import BaseModel, ConfigDict, Field
class PromptAssetReleaseCreateRequest(BaseModel):
model_config = ConfigDict(extra="ignore")
body_snapshot: str = Field(min_length=1)
notes: Optional[str] = None
class PromptAssetReleaseActionRequest(BaseModel):
model_config = ConfigDict(extra="ignore")
reason: Optional[str] = None
class PromptAssetReleaseCheckRunRequest(BaseModel):
model_config = ConfigDict(extra="ignore")
reason: Optional[str] = None
class PromptGoldenCaseCreateRequest(BaseModel):
model_config = ConfigDict(extra="ignore")
case_name: str = Field(min_length=1, max_length=255)
input_payload: dict = Field(default_factory=dict)
expected_contract: Optional[dict] = None
expected_contains: Optional[str] = None
case_type: str = Field(default="regression", max_length=32)
priority: str = Field(default="blocking", max_length=24)
scenario_key: Optional[str] = Field(default=None, max_length=128)
tags: list[str] = Field(default_factory=list)
notes: Optional[str] = None
class PromptGoldenCaseFromCallRequest(BaseModel):
model_config = ConfigDict(extra="ignore")
case_name: Optional[str] = Field(default=None, max_length=255)
notes: Optional[str] = None
class PromptReplayRunCreateRequest(BaseModel):
model_config = ConfigDict(extra="ignore")
mode: str = Field(default="contract_smoke", max_length=32)
case_status: str = Field(default="active", max_length=32)
max_cases: int = Field(default=20, ge=1, le=100)
include_llm: bool = False
judge_enabled: bool = True
reason: Optional[str] = None