
    ^i.                    2   d Z ddlmZ ddlmZmZ ddlmZmZ  G d de          Z	 G d de          Z
 G d	 d
e          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          ZdS )u   Pydantic models for the research (深度研究) API.

深度研究接口的请求/响应数据模型。
定义研究任务描述、研究计划、SSE 流式数据块、
以及 plan/run/rerun 各阶段的请求和响应结构。
    )annotations)AnyLiteral)	BaseModelFieldc                      e Zd ZU dZ edddd          Zded<    ed	d
          Zded<    ed	d          Zded<   d	S )ResearchRequestzPayload for ``POST /research``..     u   研究问题
min_length
max_lengthdescriptionstrquestionNu'   可选的会话 ID，用于多轮对话r   
str | None
session_id   显式导入的文档 ID 列表list[str] | Noneseed_doc_ids)	__name__
__module____qualname____doc__r   r   __annotations__r   r        2D:\work\zm-rag\backend\app\api\schemas\research.pyr	   r	      s~         ))E#!.YYYHYYYY"U45^___J____%*U4=^%_%_%_L______r   r	   c                     e Zd ZU dZ edd          Zded<    eddd	d
          Zded<    edddd          Zded<    eddd          Z	ded<    eddd          Z
ded<    eddd          Zded<    eddd          Zded<    edd          Zded <    edd!          Zd"ed#<    eed$%          Zd&ed'<    eed(%          Zd&ed)<   dS )*ResearchTasku   Structured task definition for Deep Research.

    深度研究任务定义，包含研究模式、主题、范围限定、输出模板等参数。
    deepu   研究模式r   zLiteral['quick', 'deep']mode.r
   i  u   研究主题r   r   topicr   u   核心研究问题r   Nu   研究目标r   r   r   goal   u   时间范围
time_rangeu   地域范围region_scopeu   部门范围	org_scopecomprehensiveu   输出模板zTLiteral['comprehensive', 'policy_brief', 'timeline', 'comparison', 'implementation']output_templateu   研究深度z,Literal['standard', 'deep', 'comprehensive']depth_levelu   必须纳入的文档default_factoryr   	list[str]required_doc_idsu   必须关注的事项required_matter_ids)r   r   r   r   r   r#   r   r$   r   r&   r(   r)   r*   r,   r-   listr1   r2   r   r   r   r!   r!      s         
 &+U6~%N%N%NDNNNNsqSnUUUEUUUUE#!J^___H____uTdOOODOOOO"U4C^TTTJTTTT$uTc~VVVLVVVV!E$3NSSSISSSS 	o>:::  ; ; ; ; AF"A A AK     #(%Ja"b"b"bbbbb%*U4Md%e%e%eeeeeeer   r!   c                  X   e Zd ZU dZ edd          Zded<    eed          Zd	ed
<    eed          Z	d	ed<    eed          Z
d	ed<    eed          Zd	ed<    eed          Zd	ed<    eed          Zd	ed<    eed          Zd	ed<    eed          Zd	ed<   dS )ResearchPlanu   Plan produced before the research run starts.

    研究计划：由 LLM 生成，包含目标拆解、子问题、检索重点和章节大纲，
    用户确认后作为 run 阶段的执行蓝图。
    .u   研究计划摘要r   r   summaryu   目标拆解r.   r0   
objectivesu	   子问题sub_questionsu   检索重点retrieval_focusu   预计章节结构section_outlineu   预期交付expected_deliverablesu   风险与提示notesu   明确纳入的文档included_doc_idsu   明确纳入的事项included_matter_idsN)r   r   r   r   r   r6   r   r3   r7   r8   r9   r:   r;   r<   r=   r>   r   r   r   r5   r5   3   sF          5*>???G????!E$NSSSJSSSS$uT{SSSMSSSS!&t!X!X!XOXXXX!&tI]!^!^!^O^^^^',uT~'^'^'^^^^^uT?PQQQEQQQQ"'%Ja"b"b"bbbbb%*U4Md%e%e%eeeeeeer   r5   c                  f    e Zd ZU dZ edd          Zded<   ded<    edd	          Zd
ed<   dS )ResearchPlanRequestz'Payload for generating a research plan.N   可选的会话 IDr   r   r   r!   taskr   r   r   r   r   r   r   r   r   r   r   r   r   r   r@   r@   E   sf         11"U45IJJJJJJJJ%*U4=^%_%_%_L______r   r@   c                  6    e Zd ZU dZdZded<   ded<   ded<   dS )	ResearchPlanResponsez,Response body for a generated research plan.Nr   r   r!   rB   r5   plan)r   r   r   r   r   r   r   r   r   rE   rE   M   sA         66!J!!!!r   rE   c                  p    e Zd ZU dZ edd          Zded<   ded<   d	ed
<    edd          Zded<   dS )ResearchRunRequestz0Payload for executing a confirmed research plan.NrA   r   r   r   r!   rB   r5   rF   r   r   r   rC   r   r   r   rH   rH   U   sr         ::"U45IJJJJJJJJ%*U4=^%_%_%_L______r   rH   c                      e Zd ZU dZ edd          Zded<   ded<   d	ed
<    edddd          Zded<    eddd          Zded<    edd          Z	ded<    edd          Z
ded<   dS )ResearchSectionRerunRequestz1Payload for re-running a specific report section.NrA   r   r   r   r!   rB   r5   rF   .r
   r'   u   要重跑的章节标题r   r   section_titler   u   当前章节摘要r%   section_summaryu!   当前章节已绑定的文档 IDr   source_doc_idsr   r   )r   r   r   r   r   r   r   rK   rL   rM   r   r   r   r   rJ   rJ   ^   s         ;;"U45IJJJJJJJJsqSNhiiiMiiii"'%K_"`"`"`O````',uT?b'c'c'cNcccc%*U4=^%_%_%_L______r   rJ   c                      e Zd ZU dZ edd          Zded<   dZded	<   dZded
<   dZ	ded<   dZ
ded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dS )ResearchChunkuF  A single SSE chunk sent during streaming research output.

    ``type`` indicates the kind of content:
    - ``thinking`` – intermediate reasoning steps
    - ``text`` – final answer text
    - ``reference`` – a cited document reference
    - ``done`` – signals end of stream
    - ``error`` – an error occurred
    .zthinking | text | reference | progress | plan | summary | finding | conflict | section | open_question | source_group | follow_up | done | errorr   r   typeNr   contentstagestatustitleseveritystrengthdoc_id
doc_numberz
int | Nonechunk_indexfloat | Nonerelevance_scorezdict[str, Any] | Nonepayload)r   r   r   r   r   rP   r   rQ   rR   rS   rT   rU   rV   rW   rX   rY   r[   r\   r   r   r   rO   rO   j   s          [  D     GEFEHHF!J!!!!"K""""$(O((((%)G))))))r   rO   c                  D    e Zd ZU dZded<   ded<   dZded<   dZded	<   dS )
ResearchReferencez2A document reference cited by the research answer.r   rW   rT   Nr   rX   rZ   r[   )r   r   r   r   r   rX   r[   r   r   r   r^   r^      sL         <<KKKJJJ!J!!!!$(O((((((r   r^   N)r   
__future__r   typingr   r   pydanticr   r   r	   r!   r5   r@   rE   rH   rJ   rO   r^   r   r   r   <module>rb      s    # " " " " "         % % % % % % % %` ` ` ` `i ` ` `f f f f f9 f f f8f f f f f9 f f f$` ` ` ` `) ` ` `    9   ` ` ` ` ` ` ` `	` 	` 	` 	` 	`) 	` 	` 	`* * * * *I * * *>) ) ) ) )	 ) ) ) ) )r   