60 lines
1.5 KiB
Python
60 lines
1.5 KiB
Python
|
|
from typing import Dict, List, Optional
|
||
|
|
|
||
|
|
from pydantic import BaseModel, Field
|
||
|
|
|
||
|
|
|
||
|
|
class TestItemEntry(BaseModel):
|
||
|
|
id: str
|
||
|
|
content: str
|
||
|
|
|
||
|
|
|
||
|
|
class TestCaseEntry(BaseModel):
|
||
|
|
id: str
|
||
|
|
item_id: str
|
||
|
|
operation_steps: List[str]
|
||
|
|
test_content: str
|
||
|
|
expected_result_placeholder: str
|
||
|
|
|
||
|
|
|
||
|
|
class ExpectedResultEntry(BaseModel):
|
||
|
|
id: str
|
||
|
|
case_id: str
|
||
|
|
result: str
|
||
|
|
|
||
|
|
|
||
|
|
class StepLogEntry(BaseModel):
|
||
|
|
step_name: str
|
||
|
|
input_summary: str
|
||
|
|
output_summary: str
|
||
|
|
success: bool
|
||
|
|
fallback_used: bool
|
||
|
|
duration_ms: float
|
||
|
|
|
||
|
|
|
||
|
|
class TestingPipelineRequest(BaseModel):
|
||
|
|
requirement_text: str = Field(..., min_length=1)
|
||
|
|
requirement_type: Optional[str] = None
|
||
|
|
knowledge_base_ids: List[int] = []
|
||
|
|
retrieval_top_k: int = Field(default=8, ge=1, le=20)
|
||
|
|
knowledge_context: Optional[str] = None
|
||
|
|
use_model_generation: bool = True
|
||
|
|
max_items_per_group: int = Field(default=12, ge=4, le=30)
|
||
|
|
cases_per_item: int = Field(default=2, ge=1, le=5)
|
||
|
|
max_focus_points: int = Field(default=6, ge=3, le=12)
|
||
|
|
max_llm_calls: int = Field(default=10, ge=0, le=100)
|
||
|
|
debug: bool = False
|
||
|
|
|
||
|
|
|
||
|
|
class TestingPipelineResponse(BaseModel):
|
||
|
|
trace_id: str
|
||
|
|
requirement_type: str
|
||
|
|
reason: str
|
||
|
|
candidates: List[str]
|
||
|
|
test_items: Dict[str, List[TestItemEntry]]
|
||
|
|
test_cases: Dict[str, List[TestCaseEntry]]
|
||
|
|
expected_results: Dict[str, List[ExpectedResultEntry]]
|
||
|
|
formatted_output: str
|
||
|
|
pipeline_summary: str
|
||
|
|
knowledge_used: bool = False
|
||
|
|
step_logs: List[StepLogEntry] = []
|