
    ESi                         d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	  G d de      Z
e G d d	             Z G d
 d      Zy)u<   查询路由器 - 评估查询复杂度并决定处理模式    )	dataclass)Enum)DictTuple)get_settingsc                       e Zd ZdZdZdZy)Modeu   处理模式syncasyncN)__name__
__module____qualname____doc__SYNCASYNC     :/home/jang/Projects/ai-researcher/src/core/query_router.pyr	   r	   	   s    DEr   r	   c                   0    e Zd ZU dZeed<   eed<   eed<   y)QueryRouterResultu   路由结果modescoreestimated_secondsN)r   r   r   r   r	   __annotations__floatintr   r   r   r   r      s    
JLr   r   c                   t    e Zd ZdZd Zdededeee	f   fdZ
dede	fdZdede	fdZdede	fd	Zdede	fd
Zy)QueryRouteru   查询路由器c                 \    t               }|j                  | _        |j                  | _        y N)r   !QUERY_ROUTER_COMPLEXITY_THRESHOLD	thresholdQUERY_ROUTER_WEIGHTSweights)selfsettingss     r   __init__zQueryRouter.__init__   s#    >!CC44r   querycontextreturnc                    | j                  |      | j                  |      | j                  |      | j                  |      d}|d   | j                  d   z  |d   | j                  d   z  z   |d   | j                  d   z  z   |d   | j                  d   z  z   }|| j
                  k\  rt        j                  nt        j                  }||fS )u   
        评估查询复杂度

        Args:
            query: 用户查询文本
            context: 上下文信息

        Returns:
            (处理模式, 复杂度评分)
        )data_sources	api_callsreasoning_depthhistorical_timer,   r-   r.   r/   )	_score_data_sources_estimate_api_calls_estimate_reasoning_get_historical_avgr$   r"   r	   r   r   )r%   r(   r)   scoresr   r   s         r   assess_complexityzQueryRouter.assess_complexity   s     !44W=11%8#77>#77>	
 >"T\\.%AA;$,,{";;<$%5F(GGH $%5F(GGH 	 #dnn4tzz$))U{r   c                 V    |j                  dg       }t        |      }|dk(  ry|dk(  ryy)u   根据数据源数量评分required_sources                    ?皙?)getlen)r%   r)   sourcescounts       r   r0   zQueryRouter._score_data_sources;   s3    ++0"5GA:aZr   c                 N    g d}t        fd|D              }|dk(  ry|dk  ryy)u   估计API调用次数)u   对比u   汇总u   多个u   所有u   分别u   各自c              3   ,   K   | ]  }|v sd   yw)r8   Nr   ).0indr(   s     r   	<genexpr>z2QueryRouter._estimate_api_calls.<locals>.<genexpr>I   s     >Ca>s   	r   r9   r:   r;   r<   )sum)r%   r(   
indicatorsmatchess    `  r   r1   zQueryRouter._estimate_api_callsF   s/    Q
>:>>a<\r   c                 J    g d}t        fd|D              rydv sdv ryy)u   估计推理复杂度)u	   为什么u   建议u   分析u   预测u   原因u   趋势c              3   &   K   | ]  }|v  
 y wr    r   )rC   kwr(   s     r   rE   z2QueryRouter._estimate_reasoning.<locals>.<genexpr>T   s     8rrU{8s   g333333??u   ？333333?r9   )any)r%   r(   reasoning_keywordss    ` r   r2   zQueryRouter._estimate_reasoningQ   s.    \8%788E\Ue^r   c                      y)u$   获取历史平均处理时间评分rM   r   )r%   r(   s     r   r3   zQueryRouter._get_historical_avgZ   s     r   N)r   r   r   r   r'   strdictr   r	   r   r5   r0   r1   r2   r3   r   r   r   r   r      sy    5
s T eD%K>P 8	4 	E 		 	 	    r   r   N)r   dataclassesr   enumr   typingr   r   
src.configr   r	   r   r   r   r   r   <module>rW      sE    B !   #4    G Gr   