
    s0j                        d Z ddlmZ ddlmZmZmZmZ ddlm	Z	m
Z
 ddlmZmZmZ ddlmZ ddlmZmZmZmZmZmZ ddlmZ  ed	          Zed
ef         Z G d ded          ZddddZddZddZddZ dS ) u  Layer 2:LangGraph 认知图——把"感知→按模式分流→结构化推断"显式建模为状态机。

图的形状(perceive → route → infer → END):
    START → route ─┬─ "action"   → infer_action   ─┐
                   └─ "dialogue" → infer_dialogue ─┴→ END

- 用 ChatLiteLLM.with_structured_output 拿原生约束的 Pydantic 决策(MiniMax 已验证支持);
- 结构化失败 → 把 decision 置 None 交回上层,由 LangGraphMind 用经久考验的文本解析兜底(世界不停摆);
- 这是后续扩展(反思节点/规划节点/工具调用)的天然挂点,认知流程从此可见、可测、可追踪。
    )annotations)AnyCallableOptional	TypedDict)HumanMessageSystemMessage)ENDSTART
StateGraph)
get_logger)ActionDecisionOutBootstrapOutDialogueDecisionOut
ReflectOutaction_to_decisiondialogue_to_decision)Decisionzruntime.graph_brain.c                  t    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   dS )CogStatestrmodesystemuserbooldeepint
max_tokensintentdialogue_withzOptional[Decision]decisionr   resulterrorN)__name__
__module____qualname____annotations__     6/root/genesis-world/src/genesis/runtime/graph_brain.pyr   r       sp         IIIKKKIIIJJJOOOKKK    KKKJJJJJr)   r   F)totalinfer_dialogueinfer_bootstrapinfer_reflect)dialogue	bootstrapreflectstatereturnr   c                `    t                               |                     dd          d          S )Nr    infer_action)_ROUTESgetr2   s    r*   _router:   0   s$    ;;uyy,,n===r)   listc                Z    t          | d                   t          | d                   gS )Nr   )contentr   )r	   r   r9   s    r*   	_messagesr>   4   s+    %/222Lv4W4W4WXXr)   
make_model	MakeModelc           	         d fd}d fd}d fd	dfd
}dfd}t          t                    }|                    d|           |                    d|           |                    d|           |                    d|           |                    t          t
          ddddd           dD ]}|                    |t                     |                                S )uh   编译认知图;make_model 注入模型工厂,便于测试替身与真实 ChatLiteLLM 复用同一图。r2   r   r3   dictc                    |                      dd          |                      dd                    }	 |                    t                                        t	          |                     }t          ||                      dd                    }d	|iS # t          $ rT}t                              d
t          |          d d                    d t          |          d d         dcY d }~S d }~ww xY w)Nr   i  r   Fr   thinkingr   r5   )fallback_intentr!   u$   结构化(action)失败,转兜底:%s      r!   r#   )
r8   with_structured_outputr   invoker>   r   	Exceptionloggerwarningr   r2   modeloutdecer?   s        r*   r6   z+build_cognition_graph.<locals>.infer_action;   s    
eiic&B&BUYYW]_dMeMefff	=%*%A%ABS%T%T%[%[\efk\l\l%m%mC$S%))Hb:Q:QRRRC$$ 	= 	= 	=NNA3q66$3$<PPP $s1vvdsd|<<<<<<<<	=s   A"B 
C9%A	C4.C94C9c                    |                      dd          d          }	 |                    t                                        t	          |                     }t          ||                      dd          |                      dd                    }d	|iS # t          $ rT}t                              d
t          |          d d                    d t          |          d d         dcY d }~S d }~ww xY w)Nr      FrD   r    r5   r   )r    rF   r!   u&   结构化(dialogue)失败,转兜底:%srG   rH   rI   )
r8   rJ   r   rK   r>   r   rL   rM   rN   r   rO   s        r*   r,   z-build_cognition_graph.<locals>.infer_dialogueE   s	   
eiic&B&BUSSS	=','C'CDW'X'X'_'_`ijo`p`p'q'qC&s%))OUW:X:X7<yy27N7NP P PC$$ 	= 	= 	=NNCSVVDSD\RRR $s1vvdsd|<<<<<<<<	=s   A7B 
C:&A	C5/C:5C:default_maxr   c                    |                      d|          d          }	 d|                    |                              t          |                     iS # t          $ rZ}t
                              d|j        t          |          dd                    dt          |          dd         d	cY d}~S d}~ww xY w)
u[   通用结构化推断:成功返回 pydantic 对象,失败返回 None(交回上层兜底)。r   FrD   r"   u    结构化(%s)失败,转兜底:%sNrG   rH   )r"   r#   )	r8   rJ   rK   r>   rL   rM   rN   r$   r   )r2   schemarV   rP   rS   r?   s        r*   _structuredz*build_cognition_graph.<locals>._structuredP   s    
eiik&J&JUZ[[[	;e::6BBII)TYJZJZ[[\\ 	; 	; 	;NN=vPSTUPVPVW[X[W[P\]]]"SVVDSD\::::::::	;s   6A 
B?%AB:4B?:B?c                (     | t           d          S Ni@  )r   r2   rY   s    r*   r-   z.build_cognition_graph.<locals>.infer_bootstrapY   s    {5,444r)   c                (     | t           d          S r[   )r   r\   s    r*   r.   z,build_cognition_graph.<locals>.infer_reflect\   s    {5*c222r)   r6   r,   r-   r.   )r6   r,   r-   r.   )r2   r   r3   rB   )r2   r   rV   r   )	r   r   add_nodeadd_conditional_edgesr   r:   add_edger
   compile)r?   r6   r,   r-   r.   gnoderY   s   `      @r*   build_cognition_graphrd   8   sh   = = = = = =	= 	= 	= 	= 	= 	=; ; ; ; ; ;5 5 5 5 5 53 3 3 3 3 3 	8AJJ~|,,,JJ000JJ /222JJ...E6&:J,,P ,P Q Q Q W  	

499;;r)   N)r2   r   r3   r   )r2   r   r3   r;   )r?   r@   )!__doc__
__future__r   typingr   r   r   r   langchain_core.messagesr   r	   langgraph.graphr
   r   r   genesis.obs.logging_setupr   genesis.runtime.brain_schemar   r   r   r   r   r   genesis.runtime.cognitionr   rM   r@   r   r7   r:   r>   rd   r(   r)   r*   <module>rm      s  	 	 # " " " " " 5 5 5 5 5 5 5 5 5 5 5 5 ? ? ? ? ? ? ? ? 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0                / . . . . .	)	*	* S#X	
 
 
 
 
y 
 
 
 
 (6GTc
d
d> > > >Y Y Y Y1 1 1 1 1 1r)   