§
    s�’j  ã                  ó`   — d dl mZ d dlmZ d dlmZ d dlmZ ddlm	Z	m
Z
  G d„ d¦  «        Zd	S )
é    )Úannotations)ÚAny)ÚAgentExecutionContext)Úget_personaé   )ÚVALID_TASK_TYPESÚRouteResultc                  óF   — e Zd ZdZ	 	 	 ddd„Z	 ddd„Zdd„Zdd„Zdd„ZdS )ÚOrchestratorRoutingMixinz:Task routing and execution logic across specialist agents.é   NÚ	task_typeÚstrÚqueryÚtop_kÚintÚ
agent_codeú
str | NoneÚretrieval_filtersúdict[str, Any] | NoneÚreturnr	   c              ƒ  óº  K  — |                       ||¬¦  «        }| j        |         }t          |pd¦  «        }|                      ||d         |¬¦  «        }	|                      ||||	¬¦  «        ƒ d{V —†}
t          |||
|d         |d         |¬¦  «        }|                     |¦  «        ƒ d{V —†}t          |j        |t          |
¦  «        ||d         ¬	¦  «        S )
z+Route a task to the matching logical agent.)r   r   Úminhr   )r   r   r   )r   r   r   r   NÚdisplay_name)r   r   Úretrieved_chunksr   Úpersona_nameÚpersona_profile)Úselected_agentÚanswerÚretrieved_chunks_countr   r   )
Ú_resolve_task_typeÚ_agentsr   Ú_merge_retrieval_filtersÚ	_retriever   Úrunr	   Ú
agent_nameÚlen)Úselfr   r   r   r   r   Úresolved_task_typeÚagentÚpersonaÚeffective_filtersr   Úcontextr   s                úCC:\Projects\DSCons\app\agents\orchestration\orchestrator_routing.pyÚroutezOrchestratorRoutingMixin.route   sE  è è € ð "×4Ò4Ø¨Jð 5ñ 
ô 
Ðð ”Ð/Ô0ˆÝ˜jÐ2¨FÑ3Ô3ˆØ ×9Ò9Ø(Ø˜|Ô,Ø/ð :ñ 
ô 
Ðð
 "&§¢Ø(ØØØ/ð	 "0ñ "
ô "
ð 
ð 
ð 
ð 
ð 
ð 
Ðõ (ØØ(Ø-Ø˜|Ô,Ø  Ô0Ø#ð
ñ 
ô 
ˆð —y’y Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ð)ˆÝØ Ô+ØÝ#&Ð'7Ñ#8Ô#8Ø(Ø˜|Ô,ð
ñ 
ô 
ð 	
ó    úlist[dict[str, Any]]c              ƒ  ó‚   K  — |pd|i}	 | j                              ||||d¬¦  «        ƒ d{V —†S # t          $ r g cY S w xY w)zLRetrieve relevant knowledge using Hybrid Search (BM25 + Dense Qdrant + RRF).r   Úhybrid)r   r   r   r   ÚmodeN)Ú_hybrid_search_serviceÚsearchÚ	Exception)r'   r   r   r   r   Úfilterss         r-   r#   z"OrchestratorRoutingMixin._retrieve9   s�   è è € ð $Ð?¨°YÐ'?ˆð		ØÔ4×;Ò;ØØØ#Ø")Øð <ñ ô ð ð ð ð ð ð ð øõ ð 	ð 	ð 	ØˆIˆIˆIð	øøøs   Š$/ ¯>½>c                ó¾   — |r|                       |¦  «         |S |r4t          |¦  «        }|d         d         }|                       |¦  «         |S t          d¦  «        ‚)z:Resolve task type from explicit input or persona defaults.Úprimary_capabilitiesr   z=task_type is required when no agent_code default is available)Ú_validate_task_typer   Ú
ValueError)r'   r   r   r*   Údefault_task_types        r-   r    z+OrchestratorRoutingMixin._resolve_task_typeN   s|   € ð ð 	Ø×$Ò$ YÑ/Ô/Ð/ØÐØð 	%Ý! *Ñ-Ô-ˆGØ 'Ð(>Ô ?ÀÔ BÐØ×$Ò$Ð%6Ñ7Ô7Ð7Ø$Ð$ÝØKñ
ô 
ð 	
r/   údict[str, Any]c                ó„   — d|i}|pi                       ¦   «         D ]\  }}|�|dk    rŒ|||<   Œd|vr|r|r	d|v r||d<   |S )Nr   Ú Úagent_scope)Úitems)r'   r   r   r   r7   ÚkeyÚvalues          r-   r"   z1OrchestratorRoutingMixin._merge_retrieval_filters]   sƒ   € ð  	Ð*ˆØ,Ð2°×9Ò9Ñ;Ô;ð 	!ð 	!‰JˆC�Øˆ} ¨¢ ØØ ˆG�C‰LˆLà Ð(Ð(Øð )à"ð )à'4Ð8IÐ'IÐ'Ià%/ˆG�MÑ"Øˆr/   ÚNonec                óŠ   — |t           vr9d                     t          t           ¦  «        ¦  «        }t          d|› �¦  «        ‚dS )z/Raise a clear error for unsupported task types.z, z(Unsupported task_type. Expected one of: N)r   ÚjoinÚsortedr;   )r'   r   Úexpecteds      r-   r:   z,OrchestratorRoutingMixin._validate_task_typep   sI   € ð Õ,Ð,Ð,Ø—y’y¥Õ(8Ñ!9Ô!9Ñ:Ô:ˆHÝÐRÈÐRÐRÑSÔSÐSð -Ð,r/   )r   NN)r   r   r   r   r   r   r   r   r   r   r   r	   )N)
r   r   r   r   r   r   r   r   r   r0   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r=   )r   r   r   rD   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r.   r#   r    r"   r:   © r/   r-   r   r      sŸ   € € € € € ØDÐDð Ø!%Ø37ð)
ð )
ð )
ð )
ð )
ð` 48ðð ð ð ð ð*
ð 
ð 
ð 
ðð ð ð ð&Tð Tð Tð Tð Tð Tr/   r   N)Ú
__future__r   Útypingr   Úapp.agents.baser   Úapp.agents.personasr   Úmodelsr   r	   r   rM   r/   r-   ú<module>rS      s«   ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð à 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø +Ð +Ð +Ð +Ð +Ð +à 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1ðjTð jTð jTð jTð jTñ jTô jTð jTð jTð jTr/   