
    s0j                    .   d Z ddlmZ ddlmZmZ ddl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ddd!dZddd"dZd S )#u  LangGraph 大脑的结构化输出 schema(Pydantic)+ 到运行时 Decision 的转换。

设计:Pydantic 模型镜像既有 ACTION_DOC / DIALOGUE_DOC 的 JSON 形状,交给
`ChatLiteLLM.with_structured_output` 做原生函数调用约束(MiniMax 已验证支持),
省掉脆弱的正则解析;再转成引擎契约 `Decision` 数据类。校验失败一律降级为空决策,
世界不因单次模型抽风停摆(沿用旧大脑的鲁棒性哲学)。
    )annotations)	BaseModelField)Decisionc                  X    e Zd ZU  edd          Zded<    edd          Zded<   dS )	
SpeechSpec u9   对方名字;空字符串=自言自语/对在场所有人defaultdescriptionstrtou0   说的话(纯口语台词,不夹带动作描写)textN)__name__
__module____qualname__r   r   __annotations__r        7/root/genesis-world/src/genesis/runtime/brain_schema.pyr   r      sT         eB,ghhhBhhhhb.`aaaDaaaaaar   r   c                  X    e Zd ZU  edd          Zded<    edd          Zded<   dS )	
ActionSpecr	   u|   动作类型:move/search/take/destroy/use/examine/eavesdrop/assemble/accuse/shout/sleep/idle,凶手另有 lure/kill/sabotager
   r   kinduK   动作参数(目的地名/物品名/目标名等),按动作语义填,可空argN)r   r   r   r   r   r   r   r   r   r   r   r      sl         b  /m  n  n  nD  n  n  n  nuR-z{{{C{{{{{{r   r   c                  z    e Zd ZU  ed          Zded<    edd          Zded	<    ed
d          Zded<   dS )
GoalUpdateu   目标序号(从1开始)r   intindexdoingztodo|doing|done|blockedr
   r   statusr	   u   一句话进度备注noteN)r   r   r   r   r   r   r!   r"   r   r   r   r   r      ss         #=>>>E>>>>%5NOOOFOOOOb.EFFFDFFFFFFr   r   c                  X   e Zd ZU dZ edd          Zded<    edd          Zded<    edd	          Zded
<    edd          Z	ded<    edd          Z
ded<    edd          Zded<    edd          Zded<    edd          Zded<    edd          Zded<   dS )ActionDecisionOutu1   L2 慢想的结构化输出(镜像 ACTION_DOC)。r	   uF   先盘算(一句话,≤25字):为了终极目的,眼下最该做什么r
   r   schemeu   内心想法(简短,≤25字)thoughtu    当前意图(一句话,≤25字)intentNu   要说的话,不说则 nullzSpeechSpec | Nonespeechu'   神态或小动作(不是台词),可空gestureu!   要做的动作,无动作则 nullzActionSpec | Noneaction      $@u   动作预计分钟数floatminutesu   目标进度自评,无则 nullzGoalUpdate | Nonegoal_updateu<   局势剧变时重列接下来要做的2-4件事,否则 nullzlist[str] | Nonegoals_replan)r   r   r   __doc__r   r%   r   r&   r'   r(   r)   r*   r-   r.   r/   r   r   r   r$   r$       s]        ;;%0xyyyFyyyy51PQQQGQQQQ%0RSSSFSSSS %d@] ^ ^ ^F^^^^51Z[[[G[[[[ %d@c d d dFddddU45LMMMGMMMM%*U4Ee%f%f%fKffff%*U"`&b &b &bL b b b b b br   r$   c                      e Zd ZU dZ edd          Zded<    edd          Zded<    edd	          Zded
<    edd          Z	ded<   dS )DialogueDecisionOutu9   L1 对话快想的结构化输出(镜像 DIALOGUE_DOC)。r	   u   内心想法(简短)r
   r   r&   u!   你接的话(纯口语,一两句)r(   u   神态或小动作(可空)r)   Fu$   是否结束交谈抽身去办正事boolleaveN)
r   r   r   r0   r   r&   r   r(   r)   r4   r   r   r   r2   r2   /   s         CC51GHHHGHHHH%0STTTFTTTT51MNNNGNNNN%3YZZZEZZZZZZr   r2   c                  8    e Zd ZU dZ eed          Zded<   dS )BootstrapOutuR   目标自举(G9/G10):把 secret 落成 2-4 条今晚必须办成的私人目标。uF   2-4条具体可执行目标(写明去哪/做什么),按优先级排序default_factoryr   	list[str]goalsN)r   r   r   r0   r   listr:   r   r   r   r   r6   r6   8   sT         \\uT)qs s sE s s s s s sr   r6   c                  z    e Zd ZU  ed          Zded<    edd          Zded<    ed	d
          Zded<   dS )RelationDeltau   某人(必须是在岛人员)r   r   namer	   u   一句话新印象r
   
impressiong        u   信任增减,-1.0到1.0之间r,   trustN)r   r   r   r   r>   r   r?   r@   r   r   r   r=   r=   ?   ss         "ABBBDBBBBeB4HIIIJIIII52QRRRERRRRRRr   r=   c                  \    e Zd ZU dZ eed          Zded<    eed          Zded<   d	S )

ReflectOutu2   反思(G7):沉淀判断 + 修正对人的信任。u.   对人或局势的判断,2-3条,每条≤25字r7   r9   insightsu   对人的印象/信任增减zlist[RelationDelta]	relationsN)	r   r   r   r0   r   r;   rC   r   rD   r   r   r   rB   rB   E   sZ         <<%BrsssHssss%*U4Mk%l%l%lIllllllr   rB   r	   )rawoutfallback_intentr   rE   returnr   c               2   | j         }| j        }	 t          | j                  }n# t          t
          f$ r d}Y nw xY w| j        r| j                                        nd}| j        rd | j        D             dd         nd}t          | j
        pd| j        pd| j        pdp||r|j        ndpd|r|j        ndpd| j        pd|r|j        ndpd|r|j        ndpdt%          dt'          d|                    ||pd|p|                                           S )ua   结构化 L2 输出 → 引擎契约 Decision(与旧 _to_decision 的裁剪规则保持一致)。r+   Nc                ,    g | ]}t          |          S r   )r   ).0ss     r   
<listcomp>z&action_to_decision.<locals>.<listcomp>U   s    ///c!ff///r      r	   g       @)r%   r&   r'   	speech_tor(   r)   action_kind
action_argr-   r.   replanrE   )r(   r*   r,   r-   	TypeError
ValueErrorr.   
model_dumpr/   r   r%   r&   r'   r   r   r)   r   r   maxminmodel_dump_json)rF   rG   rE   spactr-   gurR   s           r   action_to_decisionr\   L   s`   	B
*C$$z"   ),	B	#	#	%	%	%dB7:7GQ//c.///33TFzR!r
 b4_&255B-2%2,"!r!$,SXX"3"*CGG1rCT7++,,~(3&&((   s   % ;;dialogue_withc          
         t          | j        pd| j        pd| j        pd|t	          | j                  ||p|                                           S )uA   结构化 L1 输出 → Decision(对话只接话,不带动作)。r	   )r&   r(   r)   rO   leave_dialoguer'   rE   )r   r&   r(   r)   r3   r4   rX   )rF   r]   rG   rE   s       r   dialogue_to_decisionr`   f   s^     !rzR!rCI(3&&((   r   N)rF   r$   rG   r   rE   r   rH   r   )
rF   r2   r]   r   rG   r   rE   r   rH   r   )r0   
__future__r   pydanticr   r   genesis.runtime.cognitionr   r   r   r   r$   r2   r6   r=   rB   r\   r`   r   r   r   <module>rd      s/    # " " " " " % % % % % % % % . . . . . .b b b b b b b b
| | | | | | | |
G G G G G G G Gb b b b b	 b b b[ [ [ [ [) [ [ [s s s s s9 s s sS S S S SI S S Sm m m m m m m m TV      6 ;=       r   