feat(models): add SubQuestionSources model and per-sub-q history fields

Add SubQuestionSources, SubQuestionResult, GeneratingSubquestionEvent Pydantic models for the new per-sub-question response format. Add chunks_retrieved_per_subq_count and chunks_filtered_per_subq_count optional fields to QueryHistoryRecord and QueryHistoryDetail for per-sub-question chunk count tracking.

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
Woody 2026-04-26 23:28:19 +08:00
parent 666b603639
commit 40393d81f8
2 changed files with 32 additions and 2 deletions

View File

@ -22,6 +22,8 @@ class QueryHistoryRecord(BaseModel):
final_answer: Optional[str] = None
sources: Optional[str] = None
profile_used: Optional[str] = None
chunks_retrieved_per_subq_count: Optional[str] = None
chunks_filtered_per_subq_count: Optional[str] = None
class QueryHistorySummary(BaseModel):
@ -53,6 +55,8 @@ class QueryHistoryDetail(BaseModel):
final_answer: Optional[str] = None
sources: Optional[str] = None
profile_used: Optional[str] = None
chunks_retrieved_per_subq_count: Optional[str] = None
chunks_filtered_per_subq_count: Optional[str] = None
created_at: str

View File

@ -9,10 +9,23 @@ class QueryRequest(BaseModel):
question: str
class SubQuestionSources(BaseModel):
sub_question_index: int
sub_question_text: str
sources: List[SourceMetadata]
class SubQuestionResult(BaseModel):
sub_question_index: int
sub_question_text: str
answer_section: str
class QueryResponse(BaseModel):
extracted_questions: List[str]
answer: str
sources: List[SourceMetadata]
sub_question_sources: List[SubQuestionSources] = []
sources: List[SourceMetadata] = []
class DecomposedEvent(BaseModel):
@ -28,10 +41,22 @@ class FilteringEvent(BaseModel):
phase: Literal["filtering"]
class GeneratingEvent(BaseModel):
phase: Literal["generating"]
class GeneratingSubquestionEvent(BaseModel):
phase: Literal["generating_subquestion"]
sub_question_index: int
sub_question_text: str
answer_section: str = ""
class CompletedEvent(BaseModel):
phase: Literal["completed"]
answer: str
sources: List[SourceMetadata]
sub_question_sources: List[SubQuestionSources] = []
sources: List[SourceMetadata] = []
class ErrorEvent(BaseModel):
@ -41,5 +66,6 @@ class ErrorEvent(BaseModel):
StreamingQueryEvent = Union[
DecomposedEvent, RetrievingEvent, FilteringEvent,
GeneratingEvent, GeneratingSubquestionEvent,
CompletedEvent, ErrorEvent
]