ó
    ±"³j    ã                  ó  • 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J	r	  S SK
Jr  S SKJr  S SKJr  S SKJrJrJrJrJr  S S	KJr  S S
KJr  SSKJr  SSKJrJr  SSKJ r   SSK!J"r"  Sr#SS jr$\" SS9 " S S\"5      5       r%g)é    )ÚannotationsN)ÚCallableÚ	GeneratorÚSequence)Úcontextmanager)Ú	dataclass)ÚAny)ÚAttributeValue)ÚANY_ADAPTERÚGEN_AI_PROVIDER_NAME_ATTRIBUTEÚGEN_AI_REQUEST_MODEL_ATTRIBUTEÚrecord_uncaught_errorsÚserver_attributes)ÚCostCalculationFailedWarning)ÚInstrumentationSettingsé   )ÚEmbeddingModel)ÚEmbeddingResultÚEmbedInputType)ÚEmbeddingSettings)ÚWrapperEmbeddingModel)Úinstrument_embedding_modelÚInstrumentedEmbeddingModelc                ór   • U(       a/  [        U [        5      (       d  USL a
  [        5       n[        X5      n U $ )z9Instrument an embedding model with OpenTelemetry/logfire.T)Ú
isinstancer   r   )ÚmodelÚ
instruments     Ú`/home/mande/repo/quber/.venv/lib/python3.13/site-packages/pydantic_ai/embeddings/instrumented.pyr   r      s1   € æœ* UÔ,F×GÑGØ˜ÒÜ0Ó2ˆJä*¨5Ó=ˆà€Ló    F)Úinitc                  óÀ   ^ • \ rS rSr% SrS\S'     S     SU 4S jjjrSS.       SU 4S jjjr\        SS	 j5       r	\
SS
 j5       r\
SS j5       rSrU =r$ )r   é)   zÍEmbedding model which wraps another model so that requests are instrumented with OpenTelemetry.

See the [Debugging and Monitoring guide](https://pydantic.dev/docs/ai/integrations/logfire/) for more info.
r   Úinstrumentation_settingsNc                óT   >• [         TU ]  U5        U=(       d
    [        5       U l        g ©N)ÚsuperÚ__init__r   r#   )ÚselfÚwrappedÚoptionsÚ	__class__s      €r   r'   Ú#InstrumentedEmbeddingModel.__init__3   s#   ø€ ô
 	‰Ñ˜Ô!Ø(/×(LÔ3JÓ3LˆÕ%r   )Úsettingsc             ƒ  óÐ   >#   • U R                  X5      u  pU R                  XU5       n[        TU ]  XUS9I S h  v•N nU" U5        UsS S S 5        $  N! , (       d  f       g = f7f)N)Ú
input_typer-   )Úprepare_embedÚ_instrumentr&   Úembed)r(   Úinputsr/   r-   ÚfinishÚresultr+   s         €r   r2   Ú InstrumentedEmbeddingModel.embed;   s`   øé € ð  ×-Ñ-¨fÓ?ÑˆØ×Ñ˜f°(Ô;¸vÜ ™7™=¨ÐQY˜=ÐZ×ZˆFÙ�6ŒNØ÷ <Ñ;ÙZ÷ <Õ;üs,   ƒ&A&©A»A¼AÁ	
A&ÁAÁ
A#ÁA&c              #  óV  ^ ^^^	^
#   • SmT ST R                    3n[        U5      nST0T R                  T R                  5      EUUS.EmU(       a(  [        R
                  " T R                  U5      5      TS'   T R                  R                  (       a  [        R
                  " U5      TS'   [        R
                  " SSS	0SS
0SS0S.T R                  R                  (       a
  SS/0SS0S.O0 ES.5      TS'   S m	 T R                  R                  R                  UTSSS9 m
[        T
T R                  R                  S9   SUUU	U U
4S jjnUv •  S S S 5        S S S 5        T	(       a  T	" 5         g g ! , (       d  f       N&= f! , (       d  f       N/= f! T	(       a  T	" 5         f f = f7f)NÚ
embeddingsÚ úgen_ai.operation.name)r/   Úinputs_countÚembedding_settingsr3   ÚobjectÚtypeÚstringÚinteger)r/   r;   r<   Úarray)r3   r8   )r>   Ú
propertieszlogfire.json_schemaF)Ú
attributesÚrecord_exceptionÚset_status_on_exception)Úinclude_contentc                ó  >^ ^^^^• T	[            mT	[           mT R                  =(       d    TmS mU
UUUUU U4S jnUm T R                  5       mTR                  5       (       d  g 0 T R                  R                  5       EST0EnT(       a  [        TR                  5      US'   T R                   nU(       aE  [#        US   5      US'   TR$                  R&                  (       a  [(        R*                  " U5      T	S'   T R,                  b  T R,                  US	'   TR/                  U5        g ! [         a     Nç[
         a?  n[        R                  " S[        U5      R                   SU 3[        5         S nAGN*S nAff = f)
Nc                 óL  >• [         TST[        TST0n 0 U ESS0EnTR                  R                  =(       d    SnU(       ac  T	R                  R
                  R                  X!5        Tb:  T	R                  R                  R                  [        TR                  5      U 5        g g g )Nr:   úgen_ai.response.modelzgen_ai.token.typeÚinputr   )
r   r   ÚusageÚinput_tokensr#   Útokens_histogramÚrecordÚcost_histogramÚfloatÚtotal_price)
Úmetric_attributesÚtoken_attributesÚtokensÚ	operationÚprice_calculationÚprovider_nameÚrequest_modelÚresponse_modelr5   r(   s
      €€€€€€€r   Ú_record_metricsÚOInstrumentedEmbeddingModel._instrument.<locals>.finish.<locals>._record_metrics~   s©   ø€ ä:¸MØ3°YÜ:¸MØ3°^ð	-Ð)ð,Ø/ð,à/°ñ,Ð(ð "(§¡×!:Ñ!:×!?¸a˜Þ!Ø ×9Ñ9×JÑJ×QÑQÐRXÔkØ0Ñ<Ø $× =Ñ =× LÑ L× SÑ SÜ$)Ð*;×*GÑ*GÓ$HØ$5õ!"ð  =ð "r   z"Failed to get cost from response: z: rI   zoperation.costr   z!gen_ai.embeddings.dimension.countr8   zgen_ai.response.id)r   r   Ú
model_nameÚcostÚLookupErrorÚ	ExceptionÚwarningsÚwarnr>   Ú__name__r   Úis_recordingrK   Úopentelemetry_attributesrP   rQ   r8   Úlenr#   rF   ÚjsonÚdumpsÚprovider_response_idÚset_attributes)r5   rZ   ÚeÚattributes_to_setr8   rV   rW   rX   rY   rC   rU   Úrecord_metricsr(   Úspans   `    @@@@€€€€€r   r4   Ú6InstrumentedEmbeddingModel._instrument.<locals>.finishv   sr  ý€ ð %/Ô/MÑ$N�MØ$.Ô/MÑ$N�MØ%+×%6Ñ%6×%G¸-�NØ(,Ð%÷"ó "ð* &5�NðØ,2¯K©K«MÐ)ð  ×,Ñ,×.Ñ.ØðDØ Ÿ,™,×?Ñ?ÓAðDà/°ñDÐ%ö
 )Ü>CÐDU×DaÑDaÓ>bÐ)Ð*:Ñ;à!'×!2Ñ!2�JÞ!ÜQTÐU_Ð`aÑUbÓQcÐ)Ð*MÑNØ×8Ñ8×H×HÜ7;·z²zÀ*Ó7M˜J |Ñ4à×2Ñ2Ñ>ØBH×B]ÑB]Ð)Ð*>Ñ?à×'Ñ'Ð(9Õ:øô9 'ó áÜ$ó Ü ŸšØ@ÄÀaÃ×AQÑAQÐ@RÐRTÐUVÐTWÐXÔZv÷ò ûðús   ¿D* Ä*
E>Ä6	E>Ä?4E9Å9E>)r5   r   )r\   re   Úmodel_attributesr)   rf   rg   Úserialize_anyr#   rF   ÚtracerÚstart_as_current_spanr   )r(   r3   r/   r-   Ú	span_namer;   r4   rC   rU   rl   rm   s   `      @@@@r   r1   Ú&InstrumentedEmbeddingModel._instrumentD   s±  üé € ð !ˆ	Ø �k  4§?¡?Ð"3Ð4ˆ	ä˜6“{ˆð $ Yð1
à×#Ñ# D§L¡LÓ1ð1
ð %Ø(ò	1
ˆ
ö Ü/3¯zªz¸$×:LÑ:LÈXÓ:VÓ/WˆJÐ+Ñ,à×(Ñ(×8×8Ü#'§:¢:¨fÓ#5ˆJ�xÑ ä,0¯JªJà à#)¨8Ð"4Ø%+¨YÐ$7Ø+1°8Ð*<ñ	ð  ×8Ñ8×H×Hð %+¨W¨IÐ#6ÀvÈwÐFWÒXàð	ñó-
ˆ
Ð(Ñ)ð  59ˆðK	!à×-Ñ-×4Ñ4×JÑJØ¨*ÀuÐfkð Kñ àÜ& t¸T×=ZÑ=Z×=jÑ=jÓk÷=;ó =;ð~ ’÷E l÷öN áÕ ð ÷I lÕkú÷õ ûöN áÕ ð üsN   ‡C5F)Ã=&F Ä#FÅE3ÅFÅF Å#F)Å3
F	Å=FÆ
FÆF ÆF&Æ&F)c                óp   • [         U R                  [        U R                  0[	        U R
                  5      E$ r%   )r   Úsystemr   r\   r   Úbase_url)r   s    r   ro   Ú+InstrumentedEmbeddingModel.model_attributes»   s5   € ô +¨E¯L©LÜ*¨E×,<Ñ,<ð
ô   §¡Ó/ð
ð 	
r   c                ó¢   •  [         R                  " U SS9$ ! [         a-     [        U 5      s $ ! [         a  nSU 3s S nAs $ S nAff = ff = f)Nrf   )ÚmodezUnable to serialize: )r   Údump_pythonr_   Ústr)Úvaluerj   s     r   rp   Ú(InstrumentedEmbeddingModel.serialize_anyÃ   sU   € ð	3Ü×*Ò*¨5°vÑ>Ð>øÜó 	3ð3Ü˜5“zÒ!øÜó 3Ø.¨q¨cÐ2×2ûð3úð	3ús2   ‚ —
A¢
/¬A¯
A
¹A½A
¾AÁA
Á
A)r#   r%   )r)   zEmbeddingModel | strr*   zInstrumentationSettings | NoneÚreturnÚNone)r3   zstr | Sequence[str]r/   r   r-   úEmbeddingSettings | Noner   r   )r3   z	list[str]r/   r   r-   r�   r   z,Generator[Callable[[EmbeddingResult], None]])r   r   r   zdict[str, AttributeValue])r}   r	   r   r|   )rb   Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__r'   r2   r   r1   Ústaticmethodro   rp   Ú__static_attributes__Ú__classcell__)r+   s   @r   r   r   )   sÝ   ø‡ ñð
 6Ó5Ø2ð
 37ðMà%ðMð 0ðMð 
÷	Mð Mð ptñØ)ðØ:HðØTlðà	÷ð ð ðt!àðt!ð #ðt!ð +ð	t!ð
 
6ót!ó ðt!ðl ó
ó ð
ð ó3ó ö3r   r   )r   r   r   zInstrumentationSettings | boolr   r   )&Ú
__future__r   rf   r`   Úcollections.abcr   r   r   Ú
contextlibr   Údataclassesr   Útypingr	   Úopentelemetry.util.typesr
   Úpydantic_ai._instrumentationr   r   r   r   r   Úpydantic_ai._warningsr   Úpydantic_ai.models.instrumentedr   Úbaser   r5   r   r   r-   r   Úwrapperr   Ú__all__r   r   © r   r   Ú<module>r—      sl   ðÝ "ã Û ß 9Ñ 9Ý %Ý !Ý å 3÷õ õ ?Ý Cå  ß 3Ý 'Ý *à
D€ôñ �Ñôa3Ð!6ó a3ó ña3r   