§
    xÅjÞ   ã                   óP  — U d dl mZ d dlmZ d dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZmZmZ er
d dlmZmZmZ  ed	g ¬
¦  «        Zded<   d&dddeddfd„Zd'd„Zd(d„Zdefd„Zdefd„Zdefd„Zdefd„Z	 	 	 	 	 	 d)d„Zd*d„Z	 	 	 	 	 	 	 	 d+d!„Z	 	 	 	 	 	 d)d"„Zd&d#dd$eddfd%„Z dS ),é    )Ú
ContextVar)ÚTYPE_CHECKINGN)ÚSPANDATA)Úshould_send_default_pii)ÚStreamedSpan)Úevent_from_exceptionÚhas_data_collection_enabledÚsafe_serialize)ÚAnyÚOptionalÚUnionÚpydantic_ai_agent_context_stack)Údefaultz ContextVar[list[dict[str, Any]]]Ú_agent_context_stackFÚagentr   Úis_streamingÚreturnc                 óÀ   — t                                ¦   «                              ¦   «         }|                     | |dœ¦  «         t                                |¦  «         dS )zCPush an agent context onto the stack along with its streaming flag.)r   r   N)r   ÚgetÚcopyÚappendÚset)r   r   Ústacks      úZC:\Projects\Historical\venv\Lib\site-packages\sentry_sdk/integrations/pydantic_ai/utils.pyÚ
push_agentr      sS   € å ×$Ò$Ñ&Ô&×+Ò+Ñ-Ô-€EØ	‡L‚L˜5°,Ð?Ð?Ñ@Ô@Ð@Ý×Ò˜UÑ#Ô#Ð#Ð#Ð#ó    c                  ó¼   — t                                ¦   «                              ¦   «         } | r|                      ¦   «          t                                | ¦  «         dS )z$Pop an agent context from the stack.N)r   r   r   Úpopr   ©r   s    r   Ú	pop_agentr        sN   € å ×$Ò$Ñ&Ô&×+Ò+Ñ-Ô-€EØð Ø�	Š	‰ŒˆÝ×Ò˜UÑ#Ô#Ð#Ð#Ð#r   c                  óX   — t                                ¦   «         } | r| d         d         S dS )z0Get the current agent from the contextvar stack.éÿÿÿÿr   N©r   r   r   s    r   Úget_current_agentr$   (   s/   € å ×$Ò$Ñ&Ô&€EØð "Ø�RŒy˜Ô!Ð!Øˆ4r   c                  ót   — t                                ¦   «         } | r| d                              dd¦  «        S dS )z1Get the streaming flag from the contextvar stack.r"   r   Fr#   r   s    r   Úget_is_streamingr&   0   s8   € å ×$Ò$Ñ&Ô&€EØð 4Ø�RŒy�}Š}˜^¨UÑ3Ô3Ð3Øˆ5r   c                  ó¤   — t          ¦   «         sdS ddlm}  t          j        ¦   «                              | ¦  «        }|€dS t          |dd¦  «        S )zÚ
    Check if prompts should be sent to Sentry based on the deprecated
    ``send_default_pii`` option and the ``include_prompts`` integration setting.

    TODO: Remove this once `send_default_pii` is deprecated.
    Fé   )ÚPydanticAIIntegrationNÚinclude_prompts)r   Ú r)   Ú
sentry_sdkÚ
get_clientÚget_integrationÚgetattr)r)   Úintegrations     r   Ú_should_send_prompts_legacyr1   8   sf   € õ #Ñ$Ô$ð Øˆuà'Ð'Ð'Ð'Ð'Ð'õ Ô'Ñ)Ô)×9Ò9Ð:OÑPÔP€KàÐØˆuå�;Ð 1°5Ñ9Ô9Ð9r   c                  ó¸   — t          j        ¦   «         } t          | j        ¦  «        r&t	          | j        d         d         d         ¦  «        S t          ¦   «         S )NÚdata_collectionÚgen_aiÚinputs©r,   r-   r	   ÚoptionsÚboolr1   ©Úclients    r   Ú_should_send_inputsr;   M   sO   € ÝÔ"Ñ$Ô$€FÝ" 6¤>Ñ2Ô2ð KÝ�F”NÐ#4Ô5°hÔ?ÀÔIÑJÔJÐJå&Ñ(Ô(Ð(r   c                  ó¸   — t          j        ¦   «         } t          | j        ¦  «        r&t	          | j        d         d         d         ¦  «        S t          ¦   «         S )Nr3   r4   Úoutputsr6   r9   s    r   Ú_should_send_outputsr>   U   sO   € ÝÔ"Ñ$Ô$€FÝ" 6¤>Ñ2Ô2ð LÝ�F”NÐ#4Ô5°hÔ?À	ÔJÑKÔKÐKå&Ñ(Ô(Ð(r   Úspanú,Union[sentry_sdk.tracing.Span, StreamedSpan]c                 ó*  — |}|st          ¦   «         }|rzt          |d¦  «        rl|j        rgt          | t          ¦  «        r'|                      t          j        |j        ¦  «         dS |                      t          j        |j        ¦  «         dS dS dS dS )z²Set agent-related data on a span.

    Args:
        span: The span to set data on
        agent: Agent object (can be None, will try to get from contextvar if not provided)
    ÚnameN)	r$   ÚhasattrrB   Ú
isinstancer   Úset_attributer   ÚGEN_AI_AGENT_NAMEÚset_data)r?   r   Ú	agent_objs      r   Ú_set_agent_datarI   ]   s¸   € ð €IØð (å%Ñ'Ô'ˆ	àð F•W˜Y¨Ñ/Ô/ð F°I´Nð FÝ�d�LÑ)Ô)ð 	FØ×Ò�xÔ9¸9¼>ÑJÔJÐJÐJÐJà�MŠM�(Ô4°i´nÑEÔEÐEÐEÐEð	Fð Fð Fð Fð Fð Fr   Ú	model_objúOptional[str]c                 ó  — | sdS t          | d¦  «        r| j        S t          | d¦  «        r4	 |                      ¦   «         S # t          $ r t	          | ¦  «        cY S w xY wt          | t          ¦  «        r| S t	          | ¦  «        S )z©Extract model name from a model object.

    Args:
        model_obj: Model object to extract name from

    Returns:
        Model name string or None if not found
    NÚ
model_namerB   )rC   rM   rB   Ú	ExceptionÚstrrD   )rJ   s    r   Ú_get_model_namerP   s   s¤   € ð ð Øˆtåˆy˜,Ñ'Ô'ð 
ØÔ#Ð#Ý	�˜FÑ	#Ô	#ð ð	"Ø—>’>Ñ#Ô#Ð#øÝð 	"ð 	"ð 	"Ý�y‘>”>Ð!Ð!Ð!ð	"øøøå	�I�sÑ	#Ô	#ð ØÐå�9‰~Œ~Ðs   ­A ÁAÁAÚmodelÚmodel_settingsc                 ó8  — t          ¦   «         }|}|s|rt          |d¦  «        r|j        }t          | t          ¦  «        r| j        n| j        }|rRt          |d¦  «        r |t          j        |j	        ¦  «         t          |¦  «        }|r |t          j        |¦  «         |}|s|rt          |d¦  «        r|j        }|rÖt          j        t          j        t          j        t          j        t          j        dœ}t          |t$          ¦  «        r?|                     ¦   «         D ](\  }	}
|                     |	¦  «        }|� ||
|¦  «         Œ)dS |                     ¦   «         D ]5\  }	}
t          ||	¦  «        rt+          ||	¦  «        }|� ||
|¦  «         Œ4dS dS )a  Set model-related data on a span.

    Args:
        span: The span to set data on
        model: Model object (can be None, will try to get from agent if not provided)
        model_settings: Model settings (can be None, will try to get from agent if not provided)
    rQ   ÚsystemrR   )Ú
max_tokensÚtemperatureÚtop_pÚfrequency_penaltyÚpresence_penaltyN)r$   rC   rQ   rD   r   rE   rG   r   ÚGEN_AI_SYSTEMrT   rP   ÚGEN_AI_REQUEST_MODELrR   ÚGEN_AI_REQUEST_MAX_TOKENSÚGEN_AI_REQUEST_TEMPERATUREÚGEN_AI_REQUEST_TOP_PÚ GEN_AI_REQUEST_FREQUENCY_PENALTYÚGEN_AI_REQUEST_PRESENCE_PENALTYÚdictÚitemsr   r/   )r?   rQ   rR   rH   rJ   Úset_on_spanrM   ÚsettingsÚsettings_mapÚsetting_nameÚspandata_keyÚvalues               r   Ú_set_model_datari   Œ   sý  € õ "Ñ#Ô#€Ið €IØð $˜ð $¥w¨y¸'Ñ'BÔ'Bð $Ø”Oˆ	õ )¨­|Ñ<Ô<ÐOˆÔÐÀ$Ä-ð ð ð Cå�9˜hÑ'Ô'ð 	BØˆK�Ô.°	Ô0@ÑAÔAÐAõ % YÑ/Ô/ˆ
Øð 	CØˆK�Ô5°zÑBÔBÐBð €HØð ,˜	ð ,¥g¨iÐ9IÑ&JÔ&Jð ,ØÔ+ˆàð 9å"Ô<Ý#Ô>ÝÔ2Ý!)Ô!JÝ (Ô Hð
ð 
ˆõ �h¥Ñ%Ô%ð 	9Ø.:×.@Ò.@Ñ.BÔ.Bð 5ð 5Ñ*�˜lØ Ÿš \Ñ2Ô2�ØÐ$Ø�K ¨eÑ4Ô4Ð4øð5ð 5ð /;×.@Ò.@Ñ.BÔ.Bð 9ð 9Ñ*�˜lÝ˜8 \Ñ2Ô2ð 9Ý# H¨lÑ;Ô;�EØÐ(Ø#˜ L°%Ñ8Ô8Ð8øð+9ð 9ð"9ð 9r   c                 óø  — |rt          |d¦  «        sdS t          j        ¦   «         j        }t	          |¦  «        r|d         d         d         sdS 	 g }t          |j        d¦  «        rŠ|j        j                             ¦   «         D ]k\  }}d|i}t          |d¦  «        r=|j        }t          |d	d¦  «        r
|j
        |d	<   t          |d
d¦  «        r
|j        |d<   |                     |¦  «         Œl|rst          | t          ¦  «        r/|                      t           j        t%          |¦  «        ¦  «         dS |                      t           j        t%          |¦  «        ¦  «         dS dS # t(          $ r Y dS w xY w)z·Set available tools data on a span from an agent's function toolset.

    Args:
        span: The span to set data on
        agent: Agent object with _function_toolset attribute
    Ú_function_toolsetNr3   r4   r5   ÚtoolsrB   Úfunction_schemaÚdescriptionÚjson_schemaÚ
parameters)rC   r,   r-   r7   r	   rk   rl   rb   rm   r/   rn   ro   r   rD   r   rE   r   ÚGEN_AI_REQUEST_AVAILABLE_TOOLSr
   rG   rN   )r?   r   Úclient_optionsrl   Ú	tool_nameÚtoolÚ	tool_infoÚschemas           r   Ú_set_available_toolsrw   Ë   sÔ  € ð ð � Ð':Ñ;Ô;ð ØˆåÔ*Ñ,Ô,Ô4€NÝ" >Ñ2Ô2ð ØÐ/Ô0°Ô:¸8ÔDð 	ØˆFðØˆå�5Ô*¨GÑ4Ô4ð 	(Ø#(Ô#:Ô#@×#FÒ#FÑ#HÔ#Hð (ð (‘�	˜4Ø# YÐ/�	õ ˜4Ð!2Ñ3Ô3ð EØ!Ô1�FÝ˜v }°dÑ;Ô;ð FØ39Ô3E˜	 -Ñ0õ ˜v }°dÑ;Ô;ð EØ28Ô2D˜	 ,Ñ/à—’˜YÑ'Ô'Ð'Ð'àð 	Ý˜$¥Ñ-Ô-ð Ø×"Ò"ÝÔ;½^ÈEÑ=RÔ=Rñô ð ð ð ð —’ÝÔ;½^ÈEÑ=RÔ=Rñô ð ð ð ð	ð 	øõ ð ð ð àˆˆðøøøs   ÁC%E+ Ä:-E+ Å+
E9Å8E9ÚexcÚhandledc                 óŽ   — t          | t          j        ¦   «         j        d|dœ¬¦  «        \  }}t          j        ||¬¦  «         d S )NÚpydantic_ai)Útypery   )rr   Ú	mechanism)Úhint)r   r,   r-   r7   Úcapture_event)rx   ry   Úeventr~   s       r   Ú_capture_exceptionr�   ý   sU   € Ý&ØÝ!Ô,Ñ.Ô.Ô6Ø(°WÐ=Ð=ðñ ô �K€Eˆ4õ
 Ô˜U¨Ð.Ñ.Ô.Ð.Ð.Ð.r   )F)r   N)r   r   )r?   r@   r   r   r   N)rJ   r   r   rK   )r?   r@   rQ   r   rR   r   r   N)!Úcontextvarsr   Útypingr   r,   Úsentry_sdk.constsr   Úsentry_sdk.scoper   Úsentry_sdk.tracesr   Úsentry_sdk.utilsr   r	   r
   r   r   r   r   Ú__annotations__r8   r   r    r$   r&   r1   r;   r>   rI   rP   ri   rw   r�   © r   r   ú<module>rŠ      s   ðØ "Ð "Ð "Ð "Ð "Ð "Ð "Ø  Ð  Ð  Ð  Ð  Ð  à Ð Ð Ð Ø &Ð &Ð &Ð &Ð &Ð &Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø *Ð *Ð *Ð *Ð *Ð *ðð ð ð ð ð ð ð ð ð ð ð ,Ø+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+Ð+ð
 <F¸:Ø%¨rð<ñ <ô <Ð Ð8ð ð ñ ð
$ð $�eð $¨4ð $¸Dð $ð $ð $ð $ð$ð $ð $ð $ðð ð ð ð˜$ð ð ð ð ð: Tð :ð :ð :ð :ð*)˜Tð )ð )ð )ð )ð)˜dð )ð )ð )ð )ðFØ
8ðFØAFðFà	ðFð Fð Fð Fð,ð ð ð ð2<9Ø
8ð<9àð<9ð ð<9ð 
ð	<9ð <9ð <9ð <9ð~/Ø
8ð/ØAFð/à	ð/ð /ð /ð /ðd/ð /˜Eð /¨Dð /¸Tð /ð /ð /ð /ð /ð /r   