init. project

This commit is contained in:
2026-04-13 11:34:23 +08:00
commit c7c0659a85
202 changed files with 31196 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
from .api_key import APIKey, APIKeyCreate, APIKeyUpdate, APIKeyInDB
from .user import UserBase, UserCreate, UserUpdate, UserResponse
from .token import Token, TokenPayload
from .knowledge import KnowledgeBaseBase, KnowledgeBaseCreate, KnowledgeBaseUpdate, KnowledgeBaseResponse
from .testing import (
ExpectedResultEntry,
StepLogEntry,
TestCaseEntry,
TestItemEntry,
TestingPipelineRequest,
TestingPipelineResponse,
)

View File

@@ -0,0 +1,28 @@
from typing import Optional
from datetime import datetime
from pydantic import BaseModel
class APIKeyBase(BaseModel):
name: str
is_active: bool = True
class APIKeyCreate(APIKeyBase):
pass
class APIKeyUpdate(BaseModel):
name: Optional[str] = None
is_active: Optional[bool] = None
class APIKey(APIKeyBase):
id: int
key: str
user_id: int
last_used_at: Optional[datetime] = None
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class APIKeyInDB(APIKey):
pass

View File

@@ -0,0 +1,39 @@
from pydantic import BaseModel
from typing import List, Optional
from datetime import datetime
class MessageBase(BaseModel):
content: str
role: str
class MessageCreate(MessageBase):
chat_id: int
class MessageResponse(MessageBase):
id: int
chat_id: int
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class ChatBase(BaseModel):
title: str
class ChatCreate(ChatBase):
knowledge_base_ids: List[int]
class ChatUpdate(ChatBase):
knowledge_base_ids: Optional[List[int]] = None
class ChatResponse(ChatBase):
id: int
user_id: int
created_at: datetime
updated_at: datetime
messages: List[MessageResponse] = []
knowledge_base_ids: List[int] = []
class Config:
from_attributes = True

View File

@@ -0,0 +1,85 @@
from typing import Optional, List
from datetime import datetime
from pydantic import BaseModel
class KnowledgeBaseBase(BaseModel):
name: str
description: Optional[str] = None
class KnowledgeBaseCreate(KnowledgeBaseBase):
pass
class KnowledgeBaseUpdate(KnowledgeBaseBase):
pass
class DocumentBase(BaseModel):
file_name: str
file_path: str
file_hash: str
file_size: int
content_type: str
class DocumentCreate(DocumentBase):
knowledge_base_id: int
class DocumentUploadBase(BaseModel):
file_name: str
file_hash: str
file_size: int
content_type: str
temp_path: str
status: str = "pending"
error_message: Optional[str] = None
class DocumentUploadCreate(DocumentUploadBase):
knowledge_base_id: int
class DocumentUploadResponse(DocumentUploadBase):
id: int
created_at: datetime
class Config:
from_attributes = True
class ProcessingTaskBase(BaseModel):
status: str
error_message: Optional[str] = None
class ProcessingTaskCreate(ProcessingTaskBase):
document_id: int
knowledge_base_id: int
class ProcessingTask(ProcessingTaskBase):
id: int
document_id: int
knowledge_base_id: int
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class DocumentResponse(DocumentBase):
id: int
knowledge_base_id: int
created_at: datetime
updated_at: datetime
processing_tasks: List[ProcessingTask] = []
class Config:
from_attributes = True
class KnowledgeBaseResponse(KnowledgeBaseBase):
id: int
user_id: int
created_at: datetime
updated_at: datetime
documents: List[DocumentResponse] = []
class Config:
from_attributes = True
class PreviewRequest(BaseModel):
document_ids: List[int]
chunk_size: int = 1000
chunk_overlap: int = 200

View File

@@ -0,0 +1,59 @@
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] = []

View File

@@ -0,0 +1,9 @@
from pydantic import BaseModel
from typing import Optional
class Token(BaseModel):
access_token: str
token_type: str
class TokenPayload(BaseModel):
sub: Optional[int] = None

View File

@@ -0,0 +1,52 @@
from datetime import datetime
from typing import Any, Dict, List, Optional
from pydantic import BaseModel
class ToolDefinitionResponse(BaseModel):
name: str
version: str
description: str
input_schema: Dict[str, Any]
output_schema: Dict[str, Any]
class SRSToolCreateJobResponse(BaseModel):
job_id: int
status: str
class SRSToolJobStatusResponse(BaseModel):
job_id: int
tool_name: str
status: str
error_message: Optional[str] = None
extraction_id: Optional[int] = None
started_at: Optional[datetime] = None
completed_at: Optional[datetime] = None
class SRSToolRequirementItem(BaseModel):
id: str
title: str
description: str
priority: str
acceptanceCriteria: List[str]
sourceField: str
sectionNumber: Optional[str] = None
sectionTitle: Optional[str] = None
requirementType: Optional[str] = None
sortOrder: int
class SRSToolResultResponse(BaseModel):
jobId: int
documentName: str
generatedAt: str
statistics: Dict[str, Any]
requirements: List[SRSToolRequirementItem]
class SRSToolRequirementsSaveRequest(BaseModel):
requirements: List[SRSToolRequirementItem]

View File

@@ -0,0 +1,23 @@
from pydantic import BaseModel, EmailStr
from typing import Optional
from datetime import datetime
class UserBase(BaseModel):
email: EmailStr
username: str
is_active: bool = True
is_superuser: bool = False
class UserCreate(UserBase):
password: str
class UserUpdate(UserBase):
password: Optional[str] = None
class UserResponse(UserBase):
id: int
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True