ó
    Ð]jÊ5  ã                  ó  • S SK Jr  S SKrS SKrS SKJrJrJr  S SKrS SK	r	S SK
JrJrJrJr  S SKJrJrJrJr  S SKJr  SSKJrJrJrJrJrJrJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&J'r'J(r(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0  SS	K1J2r2J3r3  SS
K4J5r5  \(       a  S SK6J7r7  S SK8J9r9  SSK:J;r;  Sr<SS jr=SS jr>SS.     S S jjr?S!S jr@S"S jrA        S#S jrB S$     S%S jjrCS&S jrD " S S\35      rES'S jrF\SS.       S(S jj5       rG  S)S jrHg)*é    )ÚannotationsN)ÚTYPE_CHECKINGÚAnyÚcast)ÚMessageÚ	TextBlockÚ	TextDeltaÚToolUseBlock)ÚBetaMessageÚBetaTextBlockÚBetaTextDeltaÚBetaToolUseBlock)Úhandle_internal_errorsé   )ÚINPUT_MESSAGESÚOPERATION_NAMEÚOUTPUT_MESSAGESÚREQUEST_MAX_TOKENSÚREQUEST_MODELÚREQUEST_STOP_SEQUENCESÚREQUEST_TEMPERATUREÚREQUEST_TOP_KÚREQUEST_TOP_PÚRESPONSE_FINISH_REASONSÚRESPONSE_IDÚRESPONSE_MODELÚSYSTEM_INSTRUCTIONSÚTOOL_DEFINITIONSÚBlobPartÚChatMessageÚInputMessagesÚMessagePartÚOutputMessageÚSemconvVersionÚSystemInstructionsÚTextPartÚToolCallPartÚToolCallResponsePartÚUriPartÚprovider_attrs)ÚEndpointConfigÚStreamState)Úget_usage_attributes)ÚFinalRequestOptions)Ú	ResponseTé   )ÚLogfireSpan)Úget_endpoint_configÚon_responseÚis_async_clientc                óª  • U R                  S5      =nb  X![        '   U R                  S5      =nb  X1[        '   U R                  S5      =nb  XA[        '   U R                  S5      =nb  XQ[        '   U R                  S5      =nb  [
        R                  " U5      U[        '   U R                  S5      =nb  [
        R                  " U5      U[        '   gg)z?Extract request parameters from json_data and add to span_data.Ú
max_tokensNÚtemperatureÚtop_pÚtop_kÚstop_sequencesÚtools)	Úgetr   r   r   r   ÚjsonÚdumpsr   r   )Ú	json_dataÚ	span_datar6   r7   r8   r9   r:   r;   s           Ús/home/mande/repo/quber/.venv/lib/python3.13/site-packages/logfire/_internal/integrations/llm_providers/anthropic.pyÚ_extract_request_parametersrB   :   sÊ   € à—m‘m LÓ1Ð1ˆ
Ñ>Ø(2Ô$Ñ%à —}‘} ]Ó3Ð3ˆÑ@Ø)4Ô%Ñ&à—‘˜wÓ'Ð'ˆÑ4Ø#(”-Ñ à—‘˜wÓ'Ð'ˆÑ4Ø#(”-Ñ à#Ÿ-™-Ð(8Ó9Ð9ˆÑFÜ,0¯JªJ°~Ó,Fˆ	Ô(Ñ)à—‘˜wÓ'Ð'ˆÑ4Ü&*§j¢j°Ó&7ˆ	Ô"Ò#ð 5ó    c                ó$   ^•  " U4S jSU 5      nU$ )z-Create a version-aware stream state subclass.c                  ó   >• \ rS rSr Y rSrg)Ú3_versioned_stream_cls.<locals>.VersionedStreamStateéR   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú	_versionsÚ__static_attributes__)Úversionss   €rA   ÚVersionedStreamStaterF   R   s   ø† Ù‹	rC   rP   rH   )Úbase_clsrO   rP   s    ` rA   Ú_versioned_stream_clsrR   O   s   ø€ ÷˜xô ð  ÐrC   )Úversionc               ór  • [        U[        5      (       a  UO[        U15      nU R                  nU R                  n[        U[        5      (       d  0 n[        SU5      nUR                  S5      nSU;   a  UOSU0nSU0[        S5      EnU(       a  Xh[        '   US;   a‹  0 UE[        S0En	[        XY5        SU;   aU  UR                  S	/ 5      n
UR                  S
5      nU
(       d  U(       a$  [        X«5      u  pÍXÉ[        '   U(       a  XÙ[        '   [        SU	[        [         U5      S9$ [        SSU0UES9$ )zJReturns the endpoint config for Anthropic or Bedrock depending on the url.údict[str, Any]Úmodelr   Úrequest_dataÚ	anthropic)z/v1/messagesz/v1/messages?beta=trueÚchatÚlatestÚmessagesÚsystemz$Message with {request_data[model]!r})Úmessage_templater@   Ústream_state_clszAnthropic API call to {url!r}Úurl)r]   r@   )Ú
isinstanceÚ	frozensetr_   r?   Údictr   r<   r*   r   r   rB   Úconvert_messages_to_semconvr   r   r+   rR   ÚAnthropicMessageStreamState)ÚoptionsrS   rO   r_   Úraw_json_datar?   rV   rW   Úcommon_attrsr@   r[   r\   Úinput_messagesÚsystem_instructionss                 rA   r2   r2   X   sA  € ô 6@ÀÌ×5SÑ5S©'ÔYbÐdkÐclÓYm€HØ
�+‰+€CØ×%Ñ%€MÜ�m¤T×*Ñ*àˆÜÐ% }Ó5€IØ�M‰M˜'Ó"€EØ ! X£‘9°G¸UÐ3C€Là" LÐP´NÀ;Ó4OÐP€LÞØ&+”]Ñ#à
Ð8Ó8Ø$L |Ð$L´^ÀVÑ$Lˆ	Ü# IÔ9à�xÓà-6¯]©]¸:ÀrÓ-JˆHØ8A¿¹ÀhÓ8OˆFÞž6Ü6QÐRZÓ6cÑ3�Ø,:œ.Ñ)Þ&Ø5HÔ1Ñ2äØCØÜ2Ô3NÐPXÓYñ
ð 	
ô Ø<Ø˜cÐ2 \Ð2ñ
ð 	
rC   c                óÂ   • U (       d  / $ [        U [        5      (       a1  [        [        [           U 5       Vs/ s H  n[	        U5      PM     sn$ [	        U 5      /$ s  snf ©N)r`   Úlistr   r   Ú_convert_content_part)ÚcontentÚparts     rA   Ú_convert_content_part_or_partsrp   „   sS   € ÞØˆ	ä�'œ4× Ñ Ü8<¼TÄ#¹YÈÔ8PÓQÒ8P°Ô% dÖ+Ñ8PÑQÐQä% gÓ.Ð/Ð/ùò Rs   ¸Ac           	     óŽ  • [        U [        5      (       d  [        S[        U 5      S9$ [	        SU 5      n U R                  SS5      nUS:X  a  [        SU R                  SS5      S9$ US:X  a’  U R                  S0 5      nUR                  S5      S:X  a5  [        S	SUR                  S
S5      S9nUR                  S5      =nb  XCS'   U$ UR                  S5      S:X  a  [        SUR                  SS5      SS9$ SS0U E$ US:X  a:  [        U R                  SS5      U R                  SS5      U R                  S5      S9$ US:X  aú  U R                  S5      n[        U[        5      (       a¥  / n[	        SU5       H�  n[        U[        5      (       aA  UR                  S5      S:X  a,  UR                  [        UR                  SS5      5      5        MY  [        U[        5      (       d  Mp  UR                  U5        Mƒ     SR                  U5      nOU(       a  [        U5      OSn[        SU R                  SS5      US9$ 0 U ESU0E$ )z:Convert a single Anthropic content part to semconv format.Útext©Útypern   rU   rt   Ú ÚimageÚsourceÚbase64ÚblobÚdata)rt   Úmodalityrn   Ú
media_typer_   Úuri)rt   r}   r{   Útool_useÚidÚnameÚinput©Útool_call_idr€   Ú	argumentsÚtool_resultrn   zlist[dict[str, Any] | str]Ú Útool_call_responseÚtool_use_id)rt   r   Úresponse)r`   rb   r&   Ústrr   r<   r   r)   Úmake_tool_call_partrl   ÚappendÚjoinr(   )	ro   Ú	part_typerw   Ú	blob_partr|   Úresult_contentÚ
text_partsÚpÚresult_texts	            rA   rm   rm   Ž   s%  € ä�dœD×!Ñ!Ü˜V¬S°«YÑ7Ð7äÐ  $Ó'€DØ—‘˜ Ó(€IØ�FÓÜ˜V¨T¯X©X°f¸bÓ-AÑBÐBØ	�gÓ	Ø—‘˜( BÓ'ˆØ�:‰:�fÓ Ó)Ü ØØ ØŸ
™
 6¨2Ó.ñˆIð
 %Ÿj™j¨Ó6Ð6�
ÑCØ*4˜,Ñ'ØÐØ�Z‰Z˜Ó 5Ó(Ü ¨6¯:©:°e¸RÓ+@È7ÑSÐSà˜GÐ, tÐ,Ð,Ø	�jÓ	 Ü"ØŸ™ $¨Ó+Ø—‘˜& "Ó%Ø—h‘h˜wÓ'ñ
ð 	
ð
 
�mÓ	#ØŸ™ )Ó,ˆÜ�n¤d×+Ñ+à$&ˆJÜÐ6¸ÖG�Ü˜a¤×&Ñ&¨1¯5©5°«=¸FÓ+BØ×%Ñ%¤c¨!¯%©%°¸Ó*;Ó&<Ö=Ü ¤3×'Ó'Ø×%Ñ% aÖ(ñ	 Hð
 Ÿ(™( :Ó.‰Kæ1?œ#˜nÔ-ÀRˆKÜ#Ø%Ø�x‰x˜ rÓ*Ø ñ
ð 	
ð +�$Ð*˜ 	Ñ*Ð*rC   c                óì   • [        U[        5      (       aC  [        R                  " [        R
                  5         [        R                  " U5      nSSS5        [        SU UUS9$ ! , (       d  f       N= f)z)Helper function to create a ToolCallPart.NÚ	tool_call)rt   r   r€   r„   )r`   rŠ   Ú
contextlibÚsuppressr=   ÚJSONDecodeErrorÚloadsr'   r‚   s      rA   r‹   r‹   Ã   sZ   € ô �)œS×!Ñ!Ü× Ò ¤×!5Ñ!5Õ6ÜŸ
š
 9Ó-ˆI÷ 7äØØØØñ	ð ÷ 7Õ6ús   ºA%Á%
A3c                ó¼   • [        U5      nU  Vs/ s H=  n[        UR                  S5      =(       d    S[        UR                  S5      5      S9PM?     nnXB4$ s  snf )zˆConvert Anthropic messages format to OTel Gen AI Semantic Convention format.

Returns a tuple of (input_messages, system_instructions).
ÚroleÚuserrn   ©r›   Úparts)rp   r    r<   )r[   r\   ri   Úmsgrh   s        rA   rc   rc   Ô   sl   € ô /MÈVÓ.TÐñ ó%ò
 ˆCô	 	Ø—‘˜“×* FÜ0°·±¸Ó1CÓDô	
ñ ð ð %ð Ð.Ð.ùò%s   �AAc           	     ób  • / nU R                    Hè  n[        U[        [        45      (       a%  UR	                  [        SUR                  S95        MC  [        U[        [        45      (       a:  UR	                  [        UR                  UR                  UR                  S95        M˜  [        US5      (       d  M«  [        US5      (       a  UR                  5       O
[        U5      nUR	                  U5        Mê     [!        U R"                  US9nU R$                  (       a  U R$                  US'   U$ )zPConvert an Anthropic response message to OTel Gen AI Semantic Convention format.rr   rs   r‚   rt   Ú
model_dumpr�   Úfinish_reason)rn   r`   r   r   rŒ   r&   rr   r
   r   r‹   r   r€   r�   Úhasattrr¡   rb   r#   r›   Ústop_reason)Úmessagerž   ÚblockÚ
block_dictÚresults        rA   Úconvert_response_to_semconvr©   é   sî   € à!€Eà—”ˆÜ�eœi¬Ð7×8Ñ8Ø�L‰Lœ v°u·z±zÑBÖCÜ˜¤Ô.>Ð?×@Ñ@Ø�L‰LÜ#Ø!&§¡ØŸ™Ø#Ÿk™kñöô �U˜F×#Ó#ä/6°u¸l×/KÑ/K˜×)Ñ)Ô+ÔQUÐV[ÓQ\ˆJØ�L‰L˜Ö$ñ !ô  Ø�\‰\Øñ€Fð ××Ø")×"5Ñ"5ˆˆÑà€MrC   c                  óV   • \ rS rSr% \" S15      rS\S'   S rSS jrSS jr	SS jr
S	rg
)rd   i  r   úfrozenset[SemconvVersion]rM   c                ó    • S U l         SU l        g )Nr   )Ú_messageÚ_chunk_count)Úselfs    rA   Ú__init__Ú$AnthropicMessageStreamState.__init__
  s   € Ø!ˆŒØ!"ˆÕrC   c                ó‚  • SSK Jn  SSKJn  [        U5      R                  R                  S5      (       a9  U" [        [        U5      U R                  [        R                  " 5       S9U l        OU" XR                  S9U l        [        [        USS 5      [        [        45      (       a  U =R                  S-  sl        g g )Nr   )Úaccumulate_eventzanthropic.types.beta)ÚeventÚcurrent_snapshotÚrequest_headers)r´   rµ   Údeltar   )Ú&anthropic.lib.streaming._beta_messagesr³   Ú!anthropic.lib.streaming._messagesrt   rJ   Ú
startswithr   r   r­   ÚhttpxÚHeadersr`   Úgetattrr	   r   r®   )r¯   ÚchunkÚbeta_accumulate_eventr³   s       rA   Úrecord_chunkÚ(AnthropicMessageStreamState.record_chunk  s�   € ÝdÝFä�‹;×!Ñ!×,Ñ,Ð-C×DÑDÙ1Üœ3 Ó&¸¿¹ÔX]×XeÒXeÓXgñˆD�Mñ -°5Ï=É=ÑYˆDŒMÜ”g˜e W¨dÓ3´iÄÐ5O×PÑPØ×Ò Ñ"Öð QrC   c                ó  • U R                   c  SSS.$ U R                   R                   Vs/ s H,  n[        U[        [        45      (       d  M   UR
                  PM.     nnSR                  U5      U R                  S.$ s  snf )Nru   r   )Úcombined_chunk_contentÚchunk_count)r­   rn   r`   r   r   rr   r�   r®   )r¯   r¦   Útextss      rA   Úget_response_dataÚ-AnthropicMessageStreamState.get_response_data  sl   € Ø�=‰=Ñ Ø.0ÀÑCÐCØ)-¯©×)>Ò)>ÓpÒ)> Ä*ÈUÔU^Ô`mÐTn×Bo“�—”Ñ)>ˆÐpØ*,¯'©'°%«.È×IZÑIZÑ[Ð[ùò qs   «A>ÁA>c                óf  • U R                   n[        S0 UD6nSU;   a  U R                  5       US'   SU;   aI  U R                  (       a8  U R                  R                  (       a  [        U R                  5      /U[        '   U R                  b$  UR                  [        U R                  5      5        U$ )Nr   Úresponse_datarZ   rH   )	rM   rb   rÆ   r­   rn   r©   r   ÚupdateÚget_anthropic_usage_attributes)r¯   r@   rO   r¨   s       rA   Úget_attributesÚ*AnthropicMessageStreamState.get_attributes!  s‡   € Ø—>‘>ˆÜÑ"˜	Ñ"ˆØ�‹=Ø&*×&<Ñ&<Ó&>ˆF�?Ñ#Ø�xÓ D§M§M°d·m±m×6K×6KÜ'BÀ4Ç=Á=Ó'QÐ&RˆF”?Ñ#Ø�=‰=Ñ$Ø�M‰MÔ8¸¿¹ÓGÔHØˆrC   )r®   r­   N)r¾   z"anthropic.types.MessageStreamEventÚreturnÚNone)rÎ   r   )r@   rU   rÎ   rU   )rI   rJ   rK   rL   ra   rM   Ú__annotations__r°   rÀ   rÆ   rÌ   rN   rH   rC   rA   rd   rd     s(   ‡ Ù+4°a°S«>€IÐ(Ó9ò#ô#ô\÷	rC   rd   c                óÄ   • [        U SS5      nUc  0 $ UR                  UR                  =(       d    S-   UR                  =(       d    S-   nUR                  n[        XX#SS9$ )z«Extract usage attributes from an Anthropic response object.

Works for Message and BetaMessage from non-streaming on_response().
Returns an empty dict when usage is None.
ÚusageNr   rX   )Úprovider_id)r½   Úinput_tokensÚcache_read_input_tokensÚcache_creation_input_tokensÚoutput_tokensr-   )r‰   rÒ   rÔ   r×   s       rA   rË   rË   -  sd   € ô �H˜g tÓ,€EØ�}Øˆ	Ø×%Ñ%¨×)FÑ)F×)KÈ!ÑLÐPU×PqÑPq×PvÐuvÑw€LØ×'Ñ'€MÜ °ÐZeÑfÐfrC   c               óZ  • [        U[        5      (       a  UO[        U15      n[        U [        [        45      (       Gak  SU;   a±  SS0nU R                   H  nUR
                  S:X  a  UR                  US'   M$  UR
                  S:X  d  M6  UR                  S/ 5      R                  UR                  UR                  S1S	9UR                  S
.S.5        M�     UR                  SX@R                  S.5        SU;   a"  [        U 5      nUR                  [        U/5        UR                  [         U R"                  5        UR                  [$        U R                  5        UR'                  [)        U 5      5        U R*                  (       a!  UR                  [,        U R*                  /5        U $ )z/Updates the span based on the type of response.r   r›   Ú	assistantrr   rn   r~   Ú
tool_callsr�   )Úinclude)r„   r€   )r   ÚfunctionrÉ   )r¥   rÒ   rZ   )r`   ra   r   r   rn   rt   rr   Ú
setdefaultrŒ   r   Úmodel_dump_jsonr€   Úset_attributerÒ   r©   r   r   rV   r   Úset_attributesrË   r¤   r   )r‰   ÚspanrS   rO   r¥   r¦   Úoutput_messages          rA   r3   r3   ;  se  € ô
 6@ÀÌ×5SÑ5S©'ÔYbÐdkÐclÓYm€Hä�(œW¤kÐ2×3Ò3Ø�‹=Ø'-¨{Ð&;ˆGØ!×)Ô)�Ø—:‘: Ó'Ø).¯©�G˜IÓ&Ø—Z‘Z :Õ-Ø×&Ñ& |°RÓ8×?Ñ?à"'§(¡(à-2×-BÑ-BÈGÈ9Ð-BÐ-UØ(-¯
©
ñ)ñöñ	 *ð ×Ñ˜¸GÏnÉnÑ0]Ô^à�xÓÜ8¸ÓBˆNØ×Ñœ°Ð0@ÔAð 	×Ñœ>¨8¯>©>Ô:Ø×Ñœ;¨¯©Ô4à×ÑÔ:¸8ÓDÔEà××Ø×ÑÔ6¸×9MÑ9MÐ8NÔOà€OrC   c                óÖ   • [        U [        R                  [        R                  45      (       a  g[        U [        R                  [        R
                  45      (       d
   SU  35       eg)z3Returns whether or not the `client` class is async.FzYExpected Anthropic, AsyncAnthropic, AnthropicBedrock or AsyncAnthropicBedrock type, got: T)Ú
issubclassrX   Ú	AnthropicÚAnthropicBedrockÚAsyncAnthropicÚAsyncAnthropicBedrock)Úclients    rA   r4   r4   d  sa   € ô �&œ9×.Ñ.´	×0JÑ0JÐK×LÑLØÜ�fœy×7Ñ7¼×9XÑ9XÐY×ZÑZð Ø
cÐdjÐckÐlóÐZð rC   )r?   rU   r@   rU   rÎ   rÏ   )rQ   útype[StreamState]rO   r«   rÎ   rê   )re   r.   rS   ú*SemconvVersion | frozenset[SemconvVersion]rÎ   r+   )rn   ÚobjectrÎ   zlist[MessagePart])ro   rì   rÎ   r"   )rƒ   rŠ   r€   rŠ   r„   r   rÎ   r'   rk   )r[   zlist[dict[str, Any]]r\   z!str | list[dict[str, Any]] | NonerÎ   z(tuple[InputMessages, SystemInstructions])r¥   zMessage | BetaMessagerÎ   r#   )r‰   r   rÎ   rU   )r‰   r/   rá   r1   rS   rë   rÎ   r/   )ré   z…type[anthropic.Anthropic] | type[anthropic.AsyncAnthropic] | type[anthropic.AnthropicBedrock] | type[anthropic.AsyncAnthropicBedrock])IÚ
__future__r   r–   r=   Útypingr   r   r   rX   r»   Úanthropic.typesr   r   r	   r
   Úanthropic.types.betar   r   r   r   Úlogfire._internal.utilsr   Úsemconvr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   Útypesr+   r,   rÒ   r-   Úanthropic._modelsr.   Úanthropic._typesr/   Úmainr1   Ú__all__rB   rR   r2   rp   rm   r‹   rc   r©   rd   rË   r3   r4   rH   rC   rA   Ú<module>rø      sM  ðÝ "ã Û ß +Ñ +ã Û ß GÓ Gß \Ó \å :÷÷ ÷ ÷ ÷ ÷ ÷ ÷8 /Ý 'æÝ5Ý*å#ð€ô8ô* ð \]ñ)
Ø ð)
Ø.Xð)
àõ)
ôX0ô2+ðjØðà
ðð ðð ô	ð& 15ð/Ø"ð/à-ð/ð .õ/ô*ô<# +ô #ôLgð àefñ%Øð%Ø*ð%Ø8bð%àô%ó ð%ðPð,õrC   