Ë
    ãß²j3  ã                  ó(  — d Z ddlmZ ddlmZ ddlmZmZmZm	Z	 ddl
mZ ddlmZ ddlmZ g d¢Z ed	¬
«       G d„ d«      «       Z ed	¬
«       G d„ d«      «       Zdd„Zdd„Z	 	 	 	 	 	 dd„Zddœ	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Zdd„Zd d„Zd!d„Zy)"zžPure partitioning, result splicing, and rendering for mixed tool-call batches.

Correlate all remote results by original call position, never wire ``index``.
é    )Úannotations)Ú	dataclass)ÚAnyÚMappingÚOptionalÚSequence)Úrender_connection_required)Úparse_connector_name)Úconnection_surface)Ú	PartitionÚPlannedCallÚassemble_resultsÚfill_remote_failureÚpartition_callsÚrender_remote_entryÚsplice_remote_resultsT)Úfrozenc                  ó@   — e Zd ZU ded<   ded<   ded<   ded<   ded<   y	)
r   ÚintÚpositionÚstrÚnameÚ	connectorÚtoolúdict[str, Any]Ú	argumentsN©Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úC/home/ubuntu/.hermes/hermes-agent/tools/connectors/gateway/merge.pyr   r      s   … ð ƒMØ
ƒIØƒNØ
ƒIØÔr#   r   c                  ó,   — e Zd ZU ded<   ded<   ded<   y)r   z)tuple[tuple[int, Mapping[str, Any]], ...]Úlocalztuple[PlannedCall, ...]Úremoteztuple[dict[str, Any], ...]ÚerrorsNr   r"   r#   r$   r   r   $   s   … ð 5Ó4à#Ó#Ø&Ô&r#   r   c                óš  — g }g }g }t        t        | «      «      D �]  \  }}t        |t        «      r|j	                  d«      nd}t        |«      }|�j|j	                  d«      }|j                  t        ||j                  |j                  |j                  t        |t        «      rt        |«      ni ¬«      «       Œ¡t        |t        «      r0|j                  d«      r|j                  t        ||dd¬«      «       Œá|j                  |t        |t        «      r|ni f«       �Œ t        t!        |«      t!        |«      t!        |«      ¬	«      S )
zETreat malformed input as per-entry errors so sibling calls still run.r   Nr   )r   r   r   r   r   Úconnectors__ÚTOOL_NOT_FOUNDzHMalformed connector tool name; expected connectors__<connector>__<tool>.©ÚcodeÚmessage)r&   r'   r(   )Ú	enumerateÚ_as_sequenceÚ
isinstancer   Úgetr
   Úappendr   Úrawr   r   Údictr   Ú
startswithÚ_error_entryr   Útuple)	Úcallsr&   r'   r(   r   Úcallr   Úparsedr   s	            r$   r   r   -   s"  € à13€EØ "€FØ#%€FÜ#¤L°Ó$7Ó8ó L‰ˆ�$Ü#-¨d´GÔ#<ˆt�x‰x˜ÔÀ$ˆÜ% dÓ+ˆØÐØŸ™ Ó-ˆIØ�M‰MÜØ%ØŸ™Ø$×.Ñ.ØŸ™Ü1;¸IÄwÔ1Oœd 9œoÐUWôôð Ü�dœCÔ  T§_¡_°^Ô%DØ�M‰MÜØØØ)ð;ôô
ð Ø�‰�h¬
°4¼Ô(A¡ÀrÐJÖKð9Lô: œ5 ›<´°f³ÄeÈFÃmÔTÐTr#   c           
     ó  — t        |t        «      r|j                  d«      nd}t        |t        «      s=t        |t        «      r|j                  d«      nd}| j                  | j                  |dœS t        |j                  d«      xs d«      }t        |j                  d«      xs d«      }|d	k(  rot        t        |j                  d
«      «      xs | j                  |t        |j                  d«      «      t        |j                  d«      «      t        «       ¬«      }nG||dœ}t        |j                  d
«      «      }|r||d
<   t        |j                  d«      «      }|r||d<   | j                  | j                  |dœS )zFUse the shared CONNECTION_REQUIRED shape so links render consistently.ÚerrorNÚdata)Úindexr   Úresponser-   ÚPROVIDER_ERRORr.   zThe gateway reported an error.ÚCONNECTION_REQUIREDr   Úconnect_urlÚhint)r   r.   rC   rD   Úsurfacer,   ©r?   r   r=   )
r1   r   r2   r   r   r   r	   Ú_opt_strr   r   )	Úplannedr'   r=   r>   r-   r.   Úpayloadr   rD   s	            r$   r   r   R   sC  € ä#-¨f´gÔ#>ˆF�J‰J�wÔÀD€EÜ�eœWÔ%Ü%/°¼Ô%@ˆv�z‰z˜&Ô!ÀdˆØ ×)Ñ)°7·<±<ÈTÑRÐRäˆu�y‰y˜Ó Ò4Ð$4Ó5€DÜ�%—)‘)˜IÓ&ÒJÐ*JÓK€GØÐ$Ò$Ü,Ü˜uŸy™y¨Ó5Ó6ÒK¸'×:KÑ:KØÜ  §¡¨=Ó!9Ó:Ü˜%Ÿ)™) FÓ+Ó,Ü&Ó(ô
‰ð  ¨GÑ4ˆÜ˜UŸY™Y {Ó3Ó4ˆ	ÙØ#,ˆG�KÑ Ü˜Ÿ	™	 &Ó)Ó*ˆÙØ"ˆG�F‰OØ×%Ñ%¨w¯|©|ÀgÑNÐNr#   c           	     ó<  — t        |«      }g }t        t        | «      «      D ]w  \  }}|t        |«      k  r2t        ||   t        «      r|j                  t        |||   «      «       ŒF|j                  t        |j                  |j                  dd¬«      «       Œy |S )zICorrelate results by request slot; missing slots become per-entry errors.rA   z-The gateway returned no result for this call.r,   )
r0   r/   Úlenr1   r   r3   r   r7   r   r   )rH   Úremote_resultsÚresultsÚentriesÚslotÚplans         r$   r   r   n   s�   € ô
 ˜>Ó*€GØ$&€GÜ¤¨WÓ 5Ó6ò ‰
ˆˆdØ”#�g“,Ò¤:¨g°d©m¼WÔ#EØ�N‰NÔ.¨t°W¸T±]ÓCÕDà�N‰NÜØ—M‘MØ—I‘IØ)ØKô	õð	ð €Nr#   rA   )r-   c          	     ón   — | D �cg c]%  }t        |j                  |j                  ||¬«      ‘Œ' c}S c c}w )Nr,   )r7   r   r   )rH   r.   r-   rP   s       r$   r   r   „   s7   € ð öàô 	�T—]‘] D§I¡I°DÀ'ÖJòð ùò s   …*2c                ó  — 	 t        dt        | «      «      }dg|z  }|D ]q  }t	        |«      D ]a  }t        |t        «      sŒ|j                  d«      }t        |t        «      sŒ6d|cxk  rt        |«      k  sŒKn ŒN||   �ŒTt        |«      ||<   Œc Œs g }t        |«      D ]'  \  }}|€t        |ddd¬«      }|j                  |«       Œ) t        d„ |D «       «      }	|t        |«      |	z
  |	t        |«      d	œS # t        t        f$ r d}Y Œôw xY w)
zCPreserve call order and fill unclaimed slots with per-entry errors.r   Nr?   Ú rA   z%No result was produced for this call.r,   c              3  ó*   K  — | ]  }d |v sŒd–— Œ y­w)r=   é   Nr"   )Ú.0Úentrys     r$   ú	<genexpr>z#assemble_results.<locals>.<genexpr>«   s   è ø€ Ò@˜E¨w¸%Ò/?”aÑ@ùs   ‚	Œ)rM   Úsuccess_countÚerror_countÚtotal_count)Úmaxr   Ú	TypeErrorÚ
ValueErrorr0   r1   r   r2   rK   r5   r/   r7   r3   Úsum)
ÚtotalÚentry_groupsÚ
slot_countÚslotsÚgrouprW   r?   Úmergedr   rZ   s
             r$   r   r   �   s+  € ð
Ü˜œC ›JÓ'ˆ
ð .2¨F°ZÑ,?€EØò +ˆÜ! %Ó(ò 	+ˆEÜ˜e¤WÔ-ØØ—I‘I˜gÓ&ˆEÜ˜%¤Õ%¨!¨uÔ*A´s¸5³zÖ*AÀeÈEÁlÑFZÜ# E›{��e’ñ	+ð+ð $&€FÜ$ UÓ+ò ‰ˆ�%Øˆ=Ü ØØØ%Ø?ô	ˆEð 	�‰�eÕðô Ñ@ VÔ@Ó@€KàÜ˜V› {Ñ2Ø"Ü˜6“{ñ	ð øô+ ”zÐ"ò ØŠ
ðús   ‚C8 Ã8DÄDc               ó   — | |||dœdœS )Nr,   rF   r"   )r   r   r-   r.   s       r$   r7   r7   ´   s   € àØØ¨7Ñ3ñð r#   c                óT   — t        | t        «      rt        | t        t        f«      s| S y)zBReject strings so malformed calls do not become character entries.r"   )r1   r   r   Úbytes©Úvalues    r$   r0   r0   ¼   s!   € ä�%œÔ"¬:°e¼cÄ5¸\Ô+JØˆØr#   c                ó,   — t        | t        «      r| r| S y )N)r1   r   ri   s    r$   rG   rG   Ã   s   € Ü�%œÔ¡%ØˆØr#   N)r9   úSequence[Any]Úreturnr   )rH   r   r'   zMapping[str, Any]rm   r   )rH   úSequence[PlannedCall]rL   zOptional[Sequence[Any]]rm   úlist[dict[str, Any]])rH   rn   r.   r   r-   r   rm   ro   )r`   r   ra   zSequence[Mapping[str, Any]]rm   r   )
r   r   r   r   r-   r   r.   r   rm   r   )rj   r   rm   rl   )rj   r   rm   zOptional[str])Ú__doc__Ú
__future__r   Údataclassesr   Útypingr   r   r   r   Útools.connectors.gateway.errorsr	   Útools.connectors.gateway.namesr
   Útools.connectors.turnr   Ú__all__r   r   r   r   r   r   r   r7   r0   rG   r"   r#   r$   ú<module>rx      sí   ðñõ
 #å !ß 3Ó 3å FÝ ?Ý 4ò€ñ �$Ô÷ð ó ðñ �$Ô÷'ð 'ó ð'ó"UóJOð8Ø"ðà+ðð óð4 !ñ		Ø"ð	àð	ð ð		ð
 ó	ð!Øð!à.ð!ð ó!óHóôr#   